import type { CategoricalIndex } from "@charcuterie/tokens"; import type { ReactNode } from "react"; import type { TimelineItem } from "./LaneTimelineBar.tsx"; import type { TimelineAxis, TimelineTitleLayout } from "./laneTimelineGeometry.ts"; export type TimelineLane = { /** * Which of the ten hues this lane wears, overriding the one its * **position** would have given it. * * Reach for it when a lane's colour means something outside this * set — a person who is the same colour on every screen of the * app, a pair that must not drift apart when a third lane is * inserted between them. An overridden lane keeps its hue and the * rest go on walking `CATEGORICAL_SEQUENCE` from their own * positions, so naming one does not force naming all of them. */ categorical?: CategoricalIndex; /** * Where the lane's heading navigates — the "show me only this * lane" route. A link **inside** the heading, never a heading * replaced by a link, exactly as `BoardLane.href` is: the heading * keeps its level, its id, and its job of naming the group. */ href?: string; items: readonly TimelineItem[]; key: string; /** * The lane's name. A **string**: it names the group, and a group * with a `ReactNode` name is a group with no name. */ label: string; }; export type LaneTimelineLaneProps = { axis: TimelineAxis; /** The CSS track list, built once by the parent and shared. */ columnTemplate: string; headingLevel: 2 | 3 | 4 | 5; lane: TimelineLane; locale?: string; maxRowCount: number; /** Where this lane sits in the set, for its default hue. */ position: number; /** * `axis` is the bars across the date axis. `list` is the Narrow * View, where there is no axis and each item is a line of text. */ shape: "axis" | "list"; /** Draw a separator every this many columns. */ tickStep: number; /** * Whether a bar's title clips to one line or wraps onto up to * three. The parent measures the column and decides; the Narrow * View ignores it, because a row always has room to wrap. */ titleLayout?: TimelineTitleLayout; }; /** * One lane: its name, how much it is carrying, and either a track of * bars or a list of lines. * * ### A lane is a `group`, not a landmark * * The same call `BoardLaneList` makes, and it was a real axe failure * there before it changed. A named `
` is a `region`, so a * timeline of eight lanes would put eight landmarks on a page that * has one job, and two timelines on one page would put two landmarks * with the same name in the document — which is `landmark-unique`. * It is a `
` rather than a `
` * because axe matches `section[aria-labelledby]` on the **element** * and audits it as a landmark even after the role is overridden. * * ### The count is what the lane carries IN THIS RANGE * * Not `items.length`. A consumer hands over a month and shows a * week; counting the array would print "31" beside a lane with two * bars on it. `inRangeCount` includes anything the row limit hid, so * a lane cannot look lighter by being more loaded. * * ### A lane gets TALLER when it is busy, and that is the design * * Overlapping items stack into rows (`toPackedLane`), so a lane * carrying three things at once is three bars tall while one * carrying them in sequence is one. Load asymmetry then reads as * height from across the room, before anybody counts anything — * which is the whole reason this component exists rather than a * month grid, where every cell is the same size no matter what is * in it. */ export declare const LaneTimelineLane: ({ axis, columnTemplate, headingLevel, lane, locale, maxRowCount, position, shape, tickStep, titleLayout, }: LaneTimelineLaneProps) => ReactNode; //# sourceMappingURL=LaneTimelineLane.d.ts.map