Slot value (i = left edge, i + 0.5 = centre) → pixel. Linear.
One slot's width in pixels (|range| / slots). The bar's gap insets within it.
Pixel → the nearest slot's centre value (i + 0.5), clamped to a real slot.
The category name at slot value v (categories[floor(v)]), or ''.
Slot pitch in pixels — same as bandwidth (padding is the bar's gap).
A formatter mapping a slot value → the category name (the numeric specifier
is ignored — a category axis labels by name, not a number format). Present so
the scale is a safe drop-in wherever the container resolves a tickFormat.
Optionalcount: numberOptionalspecifier: stringOne tick per category, at its band centre (i + 0.5).
Optionalcount: number
A d3-scale-shaped ordinal band scale for a categorical x-axis — the transpose view's "columns on x" (categorical-axis RFC, Phase 1). It exposes the slice of the d3 scale surface
@pond-ts/chartsactually uses, so it drops in wherever the container'sxScalegoes (the same trick TradingTimeScale uses for a discontinuous time axis).Numeric slot-index domain (the load-bearing choice). The domain is
[0, n]— one unit slot per category, slotioccupying[i, i+1]— not astring[]. So the pixel mapping stays linear and the container's numeric domain / auto-fit /rangepipeline is untouched; a bar layer draws each category with the ordinarybarSpanPx(i, i+1, …). The category-ness lives in three methods only:i + 0.5), one per category;+xScale.invertcall sites happy);The category labels are carried alongside for ScaleBand.label; the numeric domain is authoritative for geometry.