Chains that belong to one declared type, replacing
FIELD_REF_FALLBACKS for it.
A canonical name is shared across variants and a chain sometimes cannot be:
value on a ridgeline is a position on the value axis, so x is a fair
reading of it, while value on a choropleth is the number a region is
shaded by and a map's rows routinely put the place name in an x column.
Shared, that chain announces "Texas" as the shaded value of Texas — the one
failure mode worse than announcing nothing, since a reader has no way to
tell it from a number.
So a choropleth reads its own two chains, and they are the shipped d3
binder's (d3/binders/choropleth.ts), which the same maps have been read
through since before this table existed. They are ordered so that the
ordinary region table — { x: 'Texas', y: 12.4 } — resolves both halves the
right way round: x is the last name a region answers to and y the
first a value does.
The other entries are here for the milder reason: a canonical name so
generic that no chain could be shared. x on a hexbin is a bin centre, on a
gantt a lane; label on a gantt is the interval's name and everywhere else
the Manhattan identifier. Each chain is the shipped d3 binder's for that
chart, so a column that already worked there works through a declaration
too.
The boxen entry is the one that is not a top-level field at all. p, lo
and hi are the fields of a rung — the { p, lo, hi } entries inside
whatever BoxenDeclaration.levels names — and their spellings vary exactly
as the top-level ones do (prob, lower, y1). An adapter reading only
the literal three drops every ladder written any other way, which leaves a
boxen with a median and no rungs to walk. Nothing new is needed to reach
them: a rung is a row, so passing one to resolveFieldRef under
TraceType.BOXEN reads it.
A chain here replaces the shared one rather than extending it. Extending
would keep exactly the entry the type is here to disown.
Chains that belong to one declared type, replacing FIELD_REF_FALLBACKS for it.
A canonical name is shared across variants and a chain sometimes cannot be:
valueon a ridgeline is a position on the value axis, soxis a fair reading of it, whilevalueon a choropleth is the number a region is shaded by and a map's rows routinely put the place name in anxcolumn. Shared, that chain announces "Texas" as the shaded value of Texas — the one failure mode worse than announcing nothing, since a reader has no way to tell it from a number.So a choropleth reads its own two chains, and they are the shipped d3 binder's (
d3/binders/choropleth.ts), which the same maps have been read through since before this table existed. They are ordered so that the ordinary region table —{ x: 'Texas', y: 12.4 }— resolves both halves the right way round:xis the last name a region answers to andythe first a value does.The other entries are here for the milder reason: a canonical name so generic that no chain could be shared.
xon a hexbin is a bin centre, on a gantt a lane;labelon a gantt is the interval's name and everywhere else the Manhattan identifier. Each chain is the shipped d3 binder's for that chart, so a column that already worked there works through a declaration too.The boxen entry is the one that is not a top-level field at all.
p,loandhiare the fields of a rung — the{ p, lo, hi }entries inside whateverBoxenDeclaration.levelsnames — and their spellings vary exactly as the top-level ones do (prob,lower,y1). An adapter reading only the literal three drops every ladder written any other way, which leaves a boxen with a median and no rungs to walk. Nothing new is needed to reach them: a rung is a row, so passing one to resolveFieldRef underTraceType.BOXENreads it.A chain here replaces the shared one rather than extending it. Extending would keep exactly the entry the type is here to disown.