OrgChart
OrgChart, OrgCardField, OrgChartProps, OrgCollapseChange: generated from the source of active-charts.
Exported by @workspace/. Generated from the package source; part of the index of every export.
Org Chart#
Generic over TExtra extends Record<string, unknown> = {title?: string}; the props below name it.
Props
- Type
HierarchyNode<TExtra>
Root hierarchy node. Children are nested arbitrarily deep.
- Type
number
Container height in pixels. Width is always responsive.
- Type
StandaloneAccessibility Options
Accessible name, description, data table and keyboard navigation. No announcements: it switches <Chart>'s interaction announcements, which this family does not make.
- Type
InteractionAnimation Option
How the tooltip and the context's attention move; the chart has no entrance. false turns every interpolation off.
- Type
readonly OrgCard Field<TExtra>[]
The lines of a card under the name (T6), in order: at most three fields of meta, read by key. Default: [{key: 'title'}], the title line. A card that cannot hold every line leaves out the last ones first; the font never shrinks. Every field stays in the tooltip, the table and the CSV.
- Type
string
Optional className applied to the outer container.
- Type
readonly string[]
Controlled: the ids of the collapsed cards. The chart only reports a reader's request through on; ids of no collapsible card are ignored.
- Type
boolean
Let a reader collapse and expand the reports of a card (T6). Off by default: the chart shows the whole tree and no disclosure. A card with reports and an id gets a badge with its report count; the badge, and Enter or Space on the focused card, toggle it; the context menu offers Collapse, Expand and Expand all below. A card without an id cannot be collapsed, and two nodes with one id make the data invalid. The data table and the CSV keep the whole organisation.
- Type
string[]
Categorical palette for this chart only: replaces the host palette (--chart- … --chart-) in the chart's colour assignment, and nothing else. It is a data encoding, not a theme: surfaces, text, grid and semantic roles keep coming from the CSS token contract, and a series, datum or annotation that sets its own colour keeps it. Any CSS colour string (a public token reference such as var(--chart-, hex, oklch).
- Type
readonly string[]
Uncontrolled: the ids of the cards collapsed at first.
- Type
"ltr""rtl"
The chart's UI direction: the reading direction of its HTML text and chrome (tooltip, legend, menus, the accessible table), and the direction the context menu carries under <body>.
Left out, the chart inherits the direction of the page around it (the nearest dir attribute, else the computed CSS direction) and follows a later change of that attribute. It is never inferred from locale, and it never reverses an axis or reorders data: reversed stays an explicit axis choice. Under rtl the chrome mirrors (legend flow, tooltip side, context menu and submenus, report text in exports), a title-like label starts at the inline start, and a label placed by geometry (an axis tick, a slice or bar label) keeps its physical side; plot arrow keys stay spatial while legend and menu arrows follow the reading direction.
- Type
"horizontal""vertical"
Layout direction. Default: 'vertical'.
- Type
Omit<…>
- Type
ValuePresentation
Presentation input for axis labels, tooltips, labels and accessibility announcements: a locale code (notation follows the language), or a presentation-context object ({language) carrying language and notation independently. date is the normal human date shape a plain date consumer inherits; an axis that declares its own preset for readability keeps it. Forwarded untouched to the central @workspace/; the package never resolves tenant or application settings itself. When omitted, <Chart supplies it; with neither, the chart throws a configuration error (no 'en' fallback, active-format D14). Object inputs must be referentially stable across renders.
- Type
number
Node height in pixels. Default: 60.
- Type
number
Horizontal spacing between sibling nodes. Default: 20.
- Type
number
Vertical spacing between levels. Default: 60.
- Type
number
Node width in pixels. Default: 140.
- Type
Ref<ChartExport Handle>
Imperative handle: exports and element access. A family built on this type has no data-range zoom, so its handle has no set. Allows getting a ref to the component instance. Once the component unmounts, React will set ref. to null (or call the ref with null if you passed a callback ref).
- Type
ChartTranslate Fn
The host translator for every text the chart shows or announces. When omitted, <Chart supplies it; with neither, the chart throws a configuration error (no English fallback, ADR-028).
- Type
StandaloneTooltip Option<…>
Tooltip of the node under the pointer: enabled, renderer and style. The card shows the name and title without a value, so no value (ADR-082, LAB-AT17).
- Type
number
Optional fixed width in pixels. Default: fill container.
- Type
boolean
Show zoom controls (+, −, percentage, fit-to-screen). Default: true.
Events
Called by the component when something happens.
- Type
(event) => void
Fired when a chart animation completes.
'load': initial mount animation finished (or immediately if animation disabled / prefers-reduced-motion is active).'update': data-update transition finished.
Not triggered by zoom animations (use on) or tooltip fades.
- Type
(collapsedIds, change) => void
The collapsed ids a reader asked for, and why (T6).
- Type
(result) => void
Fired after a successful export action (PNG/SVG/CSV/PDF), including from the context menu and from imperative Chart calls.
- Type
(format, error) => void
Fired when an export could not produce its file (W11), from the handle as well as from the context menu. Without it a failed context-menu export is reported as an error diagnostic (<Chart).
- Type
() => void
Fired exactly once per chart instance, after the first successful mount with valid dimensions and before any entrance animation starts. "Ready" means: the SVG is in the DOM, layout has run with real dimensions, and the chart can be queried by integration tests.
Distinct from on with type: 'load', which fires *after* the load animation finishes. A chart with animation={false} still fires on — animation state has no effect on readiness.
A new React key on the host produces a new component instance and on fires again. Identity changes of the callback itself after the first fire are ignored (latch is per-instance).
Consumer requirement — stable from first render. The latch closes on the first effect run regardless of whether on was defined at that moment. If on is initially undefined and later resolves to a function, the callback will never fire — the latch has already closed with a no-op. Pass a stable reference (typically via use) or pass the final function unconditionally from the first render.
Other props, such as the standard attributes of the underlying element, className and ref, are passed through.
Types#
One line of an org card under the name (T6): a field of the node's meta, by key. A string is shown as it is, a finite number in the chart's number notation; anything else is no line.
interface OrgCardField<
TExtra extends Record<string, unknown> = Record<string, unknown>,
> {
key: Extract<keyof TExtra, string>;
label?: string;
showLabel?: boolean;
}Props for Org. Extends Hierarchical for the wrapper contract (context-driven defaults via <Chart, unified event model, colors/accessibility propagation). The TExtra generic defaults to {title?: string} because OrgChart rendering reads meta. for role labels; consumers may widen the shape.
OrgChart has no entrance animation; its animation prop times only the tooltip and the context's attention (ADR-104, W10, ADR-040); on fires on mount. Hover transitions (120–150ms background/opacity on zoom controls) are retained as interaction feedback and fall below the WCAG 2.3.3 threshold for reduced-motion concerns; the global media query in accessibility. suppresses them defensively under prefers-.
The props of Org, each described in its prop list on this page.
interface OrgChartProps<
TExtra extends Record<string, unknown> = {title?: string},
> extends Omit<HierarchicalChartProps<TExtra>, 'animation' | 'tooltip'> {
animation?: InteractionAnimationOption;
tooltip?: StandaloneTooltipOption<'valueFormatter'>;
direction?: 'vertical' | 'horizontal';
nodeWidth?: number;
nodeHeight?: number;
nodeSpacingX?: number;
nodeSpacingY?: number;
zoomControls?: boolean;
collapsible?: boolean;
collapsedIds?: readonly string[];
defaultCollapsedIds?: readonly string[];
onCollapsedChange?: (
collapsedIds: string[],
change: OrgCollapseChange,
) => void;
cardFields?: readonly OrgCardField<TExtra>[];
}Why the collapsed set changed (T6). A reader's request names the card (id), whether the change collapses it, and its input (source: a mouse or pen, a finger or a key; for a menu action the input that opened the menu); scope: 'subtree' is Expand all below. requested: true on a controlled chart, whose collapsed the change only proposes (the chart draws it once the host passes it back), false where the chart applied it. 'update': an uncontrolled set lost ids the data no longer holds.
type OrgCollapseChange =
| {
source: ChartInteractionSource;
id: string;
collapsed: boolean;
scope: 'node' | 'subtree';
requested: boolean;
}
| {source: 'update'; removed: string[]; requested: false};