@x12i/charts 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/chart.tsx","../src/react/config.tsx","../src/react/echarts-plot.tsx","../src/react/states.tsx","../src/react/theme-colors.ts","../src/react/echarts-loader.ts","../src/react/hooks.ts","../src/react/glyph.tsx","../src/react/legend.tsx","../src/react/plot.tsx","../src/react/frame.tsx","../src/react/data-table.tsx","../src/react/icons.tsx","../src/react/grid.tsx"],"sourcesContent":["import {\n useCallback,\n useId,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type MouseEvent,\n type PointerEvent,\n type ReactNode,\n} from \"react\";\nimport { Badge } from \"@x12i/ui\";\nimport { describeModel } from \"../a11y\";\nimport type { Datasets } from \"../data\";\nimport { createFormatters } from \"../formatters\";\nimport type { ChartPointInfo } from \"../interaction\";\nimport { layoutChart, type LegendEntry } from \"../layout\";\nimport { formatMessage, type ChartMessagesInput } from \"../messages\";\nimport { buildChartModel, type ChartModel } from \"../model\";\nimport { dashArrays } from \"../palette\";\nimport { resolveRenderer, type RenderTarget } from \"../renderer\";\nimport type { ChartSpec, ChartType, RendererChoice } from \"../spec\";\nimport { mergeMessages, useChartConfig } from \"./config\";\nimport { EChartsPlot } from \"./echarts-plot\";\nimport { defaultEChartsLoader, type EChartsLoader } from \"./echarts-loader\";\nimport { safeId, useDirection, useElementWidth, useHiddenIds, usePrefersReducedMotion } from \"./hooks\";\nimport { ChartLegend, ColorScaleLegend } from \"./legend\";\nimport { Plot } from \"./plot\";\nimport { ChartState } from \"./states\";\n\nconst DEFAULT_WIDTH = 640;\nconst MIN_WIDTH = 120;\nconst DEFAULT_HEIGHT = 320;\nconst SPARKLINE_HEIGHT = 48;\nconst SPARKLINE_WIDTH = 160;\nconst GAUGE_HEIGHT = 220;\n\n/** Height used when `height` is not set. */\nexport function defaultChartHeight(mark: ChartType): number {\n if (mark === \"sparkline\") return SPARKLINE_HEIGHT;\n if (mark === \"gauge\" || mark === \"progress-ring\") return GAUGE_HEIGHT;\n return DEFAULT_HEIGHT;\n}\n\nexport interface ChartProps {\n /** The chart definition. Memoize it (or define it outside the component) so it is not rebuilt on every render. */\n spec: ChartSpec;\n /** Named datasets for `spec.data.ref`. Falls back to `ChartConfigProvider`. */\n datasets?: Datasets | undefined;\n /** Width in layout units (CSS pixels). By default the chart fills its container and follows its size. */\n width?: number | undefined;\n /** Height in layout units. Defaults by chart type (320, a sparkline is 48). */\n height?: number | undefined;\n /** BCP 47 locale for numbers, dates and plural rules. */\n locale?: string | undefined;\n /** Message overrides for every word the chart shows or announces. */\n messages?: ChartMessagesInput | undefined;\n /** Text direction. Time and category axes mirror in `rtl`. Defaults to the page, then the locale. */\n dir?: \"ltr\" | \"rtl\" | undefined;\n /** Overrides `spec.renderer`. `auto` picks canvas for very large data. */\n renderer?: RendererChoice | undefined;\n /** `print` and `report` always render SVG. */\n target?: RenderTarget | undefined;\n /** Loads `echarts` for the canvas renderer. */\n loadEcharts?: EChartsLoader | undefined;\n /** Show the loading state, keeping the chart's height. */\n loading?: boolean | undefined;\n /** Truthy shows the error state. */\n error?: unknown;\n /** Adds a retry button to the error state. */\n onRetry?: (() => void) | undefined;\n /** Controlled list of hidden series (or slice) ids. */\n hiddenSeries?: ReadonlyArray<string> | undefined;\n defaultHiddenSeries?: ReadonlyArray<string> | undefined;\n onHiddenSeriesChange?: ((ids: string[]) => void) | undefined;\n /** False draws a static, non-focusable image with a text description. Defaults to true. */\n interactive?: boolean | undefined;\n /** Tooltip on pointer hover and keyboard focus. Defaults to `spec.interactions.tooltip !== false`. */\n tooltip?: boolean | undefined;\n /** Called on click, Enter or Space on a point. */\n onPointActivate?: ((info: ChartPointInfo, event: PointerEvent<SVGSVGElement> | KeyboardEvent<SVGSVGElement>) => void) | undefined;\n /** Called when the hovered or focused point changes. */\n onActivePointChange?: ((info: ChartPointInfo | null) => void) | undefined;\n className?: string | undefined;\n style?: CSSProperties | undefined;\n id?: string | undefined;\n}\n\n/** Legend entries for the canvas renderer, which has no layout. */\nfunction canvasLegend(model: ChartModel, hidden: ReadonlySet<string>): LegendEntry[] {\n if (model.slices.length > 0) {\n return model.slices.map((slice) => ({\n id: slice.id,\n label: slice.label,\n series: null,\n tone: slice.style.tone,\n marker: slice.style.marker,\n dash: undefined,\n glyph: \"slice\" as const,\n pattern: -1,\n visible: !hidden.has(slice.id),\n toggle: true,\n }));\n }\n return model.series.map((series, index) => {\n const kind = model.mark === \"combo\" ? series.mark : model.mark;\n const glyph: LegendEntry[\"glyph\"] =\n kind === \"bar\" || kind === \"histogram\" || kind === \"waterfall\" || kind === \"lollipop\"\n ? \"bar\"\n : kind === \"area\"\n ? \"area\"\n : kind === \"scatter\" || kind === \"bubble\"\n ? \"point\"\n : \"line\";\n return {\n id: series.id,\n label: series.label,\n series: index,\n tone: series.style.tone,\n marker: series.style.marker,\n dash: dashArrays[series.style.dash],\n glyph,\n pattern: -1,\n visible: !hidden.has(series.id),\n toggle: true,\n };\n });\n}\n\n/**\n * One chart from a `ChartSpec`: an accessible SVG plot (or an ECharts canvas\n * for very large data) with legend, tooltip, keyboard navigation, states and a\n * generated text description. Wrap it in `ChartFrame` or `ChartCard` for a\n * title, toolbar and data table.\n */\nexport function Chart(props: ChartProps) {\n const { spec, className, style, id } = props;\n const config = useChartConfig();\n const locale = props.locale ?? config.locale;\n const messageInput = useMemo(() => mergeMessages(config.messages, props.messages), [config.messages, props.messages]);\n const datasets = props.datasets ?? config.datasets;\n const model = useMemo(() => buildChartModel(spec, { datasets, messages: messageInput }), [spec, datasets, messageInput]);\n const fmts = useMemo(() => createFormatters(model, { locale, messages: messageInput }), [model, locale, messageInput]);\n const messages = fmts.messages;\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const explicitDirection = props.dir ?? config.direction ?? (spec.direction && spec.direction !== \"auto\" ? spec.direction : undefined);\n const { direction, attribute } = useDirection(rootRef, explicitDirection, locale);\n const measured = useElementWidth(rootRef, props.width);\n const fallbackWidth = model.mark === \"sparkline\" ? SPARKLINE_WIDTH : DEFAULT_WIDTH;\n const width = Math.max(MIN_WIDTH, measured ?? fallbackWidth);\n const height = props.height ?? defaultChartHeight(model.mark);\n const reducedMotion = usePrefersReducedMotion();\n const idPrefix = `kit-chart-${safeId(useId())}`;\n\n const initialHidden = props.defaultHiddenSeries ?? model.series.filter((series) => series.hidden).map((series) => series.id);\n const [hidden, setHidden] = useHiddenIds(props.hiddenSeries, initialHidden, props.onHiddenSeriesChange);\n\n const target = props.target ?? config.target ?? \"screen\";\n const renderer = resolveRenderer({\n renderer: props.renderer ?? spec.renderer,\n mark: model.mark,\n pointCount: model.pointCount,\n target,\n });\n const [canvasFailure, setCanvasFailure] = useState<\"missing\" | \"unsupported\" | null>(null);\n const onCanvasUnavailable = useCallback((reason: \"missing\" | \"unsupported\") => setCanvasFailure(reason), []);\n const canvas = renderer === \"canvas\" && canvasFailure === null && model.status === \"ok\";\n\n const layout = useMemo(\n () =>\n canvas || model.status !== \"ok\"\n ? null\n : layoutChart(model, { width, height, rtl: direction === \"rtl\", locale, messages: messageInput, hidden }),\n [canvas, model, width, height, direction, locale, messageInput, hidden],\n );\n\n const description = useMemo(\n () => describeModel(model, { locale, messages: messageInput, hidden }),\n [model, locale, messageInput, hidden],\n );\n\n const legendEntries = useMemo(\n () => (layout ? layout.legend : canvas ? canvasLegend(model, hidden) : []),\n [layout, canvas, model, hidden],\n );\n const legendSetting = spec.legend?.show ?? \"auto\";\n const showLegend = legendSetting === true || (legendSetting === \"auto\" && legendEntries.length > 1);\n\n const onToggle = (entry: LegendEntry, event: MouseEvent<HTMLButtonElement>): void => {\n const toggleable = legendEntries.filter((candidate) => candidate.toggle).map((candidate) => candidate.id);\n const modifier = event.shiftKey || event.ctrlKey || event.metaKey;\n if (spec.interactions?.legendIsolate && !modifier) {\n const visible = toggleable.filter((candidate) => !hidden.has(candidate));\n const isolated = visible.length === 1 && visible[0] === entry.id;\n setHidden(isolated ? [] : toggleable.filter((candidate) => candidate !== entry.id));\n return;\n }\n const next = new Set(hidden);\n if (next.has(entry.id)) next.delete(entry.id);\n else next.add(entry.id);\n setHidden([...next]);\n };\n\n const markName = messages.markNames[model.mark] ?? model.mark;\n // With nothing visible the canvas has nothing to draw: say so, as the SVG renderer does.\n const allHidden = layout ? layout.allHidden : canvas && legendEntries.length > 0 && legendEntries.every((entry) => !entry.visible);\n const statusKind = props.loading ? \"loading\" : props.error ? \"error\" : model.status !== \"ok\" ? model.status : allHidden ? \"all-hidden\" : \"ok\";\n\n let body: ReactNode;\n if (props.loading) {\n body = <ChartState kind=\"loading\" message={messages.loading} height={height} />;\n } else if (props.error) {\n body = <ChartState kind=\"error\" message={messages.error} height={height} onRetry={props.onRetry} retryLabel={messages.retry} />;\n } else if (model.status === \"missing-data\") {\n body = (\n <ChartState\n kind=\"missing-data\"\n message={formatMessage(messages.missingDataset, { ref: model.missingRef ?? \"\" }, locale)}\n height={height}\n />\n );\n } else if (model.status === \"unsupported\") {\n body = <ChartState kind=\"unsupported\" message={formatMessage(messages.unsupportedMark, { mark: markName }, locale)} height={height} />;\n } else if (model.status === \"empty\") {\n body = <ChartState kind=\"empty\" message={messages.empty} height={height} />;\n } else if (canvas && allHidden) {\n body = (\n <p data-kit=\"chart-note\" role=\"status\">\n {messages.allSeriesHidden}\n </p>\n );\n } else if (canvas) {\n body = (\n <EChartsPlot\n model={model}\n messages={messages}\n messageInput={messageInput}\n locale={locale}\n hidden={hidden}\n width={props.width}\n height={height}\n loader={props.loadEcharts ?? config.loadEcharts ?? defaultEChartsLoader}\n animate={!reducedMotion}\n name={description.name}\n description={description.text}\n idPrefix={idPrefix}\n onUnavailable={onCanvasUnavailable}\n />\n );\n } else if (layout) {\n body = (\n <>\n {allHidden ? <p data-kit=\"chart-note\" role=\"status\">{messages.allSeriesHidden}</p> : null}\n <Plot\n model={model}\n layout={layout}\n fmts={fmts}\n name={description.name}\n description={description.text}\n idPrefix={idPrefix}\n interactive={props.interactive ?? true}\n tooltip={props.tooltip ?? spec.interactions?.tooltip !== false}\n animate={!reducedMotion}\n onPointActivate={props.onPointActivate}\n onActivePointChange={props.onActivePointChange}\n />\n </>\n );\n } else {\n body = null;\n }\n\n const hasPlot = statusKind === \"ok\" || statusKind === \"all-hidden\";\n const legendPosition = spec.legend?.position ?? \"bottom\";\n const legend =\n hasPlot && showLegend ? (\n <ChartLegend\n entries={legendEntries}\n label={messages.legend}\n position={legendPosition}\n patternPrefix={`${idPrefix}-pattern`}\n onToggle={onToggle}\n />\n ) : null;\n const scale = layout?.colorScale;\n const colorScale =\n hasPlot && scale ? (\n <ColorScaleLegend\n kind={scale.kind}\n min={fmts.value(0)(scale.min)}\n max={fmts.value(0)(scale.max)}\n label={spec.value?.title ?? spec.color?.title ?? messages.columnValue}\n />\n ) : null;\n\n return (\n <div\n ref={rootRef}\n id={id}\n className={className}\n style={style}\n dir={attribute}\n data-kit=\"chart\"\n data-mark={model.mark}\n data-renderer={canvas ? \"canvas\" : \"svg\"}\n data-state={statusKind}\n >\n {canvasFailure !== null && renderer === \"canvas\" ? (\n <p data-kit=\"chart-note\" role=\"status\">\n {canvasFailure === \"missing\" ? messages.canvasMissing : messages.canvasUnsupported}\n </p>\n ) : null}\n {hasPlot && model.dualAxis ? (\n <div data-kit=\"chart-warning\">\n <Badge variant=\"soft\" tone=\"warning\">\n {messages.dualAxisWarning}\n </Badge>\n </div>\n ) : null}\n {legendPosition === \"top\" ? legend : null}\n {body}\n {legendPosition === \"bottom\" ? legend : null}\n {colorScale}\n </div>\n );\n}\n\n/** The SVG renderer only: always vector, always keyboard navigable. */\nexport function SvgChart(props: Omit<ChartProps, \"renderer\">) {\n return <Chart {...props} renderer=\"svg\" />;\n}\n\n/**\n * The ECharts canvas renderer: `echarts` loads lazily on first render, colors\n * come from the `--kit-*` variables at runtime and follow `data-theme`. Falls\n * back to SVG, with a note, when echarts is not available.\n */\nexport function EChartsChart(props: Omit<ChartProps, \"renderer\">) {\n return <Chart {...props} renderer=\"canvas\" />;\n}\n","import { createContext, useContext, useMemo, type ReactNode } from \"react\";\nimport type { Datasets } from \"../data\";\nimport type { ChartMessagesInput } from \"../messages\";\nimport type { RenderTarget } from \"../renderer\";\nimport type { EChartsLoader } from \"./echarts-loader\";\n\n/** Defaults that every chart below a `ChartConfigProvider` inherits. */\nexport interface ChartConfig {\n /** BCP 47 locale for numbers, dates, lists and plural rules. */\n locale?: string | undefined;\n /** Message overrides, merged over `defaultMessages`. */\n messages?: ChartMessagesInput | undefined;\n /** Text direction. Without it, charts follow the page (`dir` attribute), then the locale. */\n direction?: \"ltr\" | \"rtl\" | undefined;\n /** Named datasets for specs that use `data.ref`. */\n datasets?: Datasets | undefined;\n /** Loads `echarts` for the canvas renderer. Defaults to `import(\"echarts\")`. */\n loadEcharts?: EChartsLoader | undefined;\n /** `print` and `report` always use the vector SVG renderer. */\n target?: RenderTarget | undefined;\n}\n\nconst ChartConfigContext = createContext<ChartConfig>({});\n\n/** Merges two message overrides; the second wins, and `markNames` merge key by key. */\nexport function mergeMessages(\n base: ChartMessagesInput | undefined,\n override: ChartMessagesInput | undefined,\n): ChartMessagesInput | undefined {\n if (!base) return override;\n if (!override) return base;\n return { ...base, ...override, markNames: { ...base.markNames, ...override.markNames } };\n}\n\nexport interface ChartConfigProviderProps extends ChartConfig {\n children?: ReactNode;\n}\n\n/**\n * Sets locale, messages, direction, datasets and the echarts loader for every\n * chart inside. Nested providers merge, and the inner one wins.\n */\nexport function ChartConfigProvider({ children, locale, messages, direction, datasets, loadEcharts, target }: ChartConfigProviderProps) {\n const parent = useContext(ChartConfigContext);\n const value = useMemo<ChartConfig>(\n () => ({\n locale: locale ?? parent.locale,\n direction: direction ?? parent.direction,\n datasets: datasets ?? parent.datasets,\n loadEcharts: loadEcharts ?? parent.loadEcharts,\n target: target ?? parent.target,\n messages: mergeMessages(parent.messages, messages),\n }),\n [parent, locale, messages, direction, datasets, loadEcharts, target],\n );\n return <ChartConfigContext.Provider value={value}>{children}</ChartConfigContext.Provider>;\n}\n\n/** The inherited chart defaults. */\nexport function useChartConfig(): ChartConfig {\n return useContext(ChartConfigContext);\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport { VisuallyHidden } from \"@x12i/ui\";\nimport { toEChartsOption } from \"../echarts-option\";\nimport type { ChartMessages, ChartMessagesInput } from \"../messages\";\nimport type { ChartModel } from \"../model\";\nimport type { EChartsInstance, EChartsLoader } from \"./echarts-loader\";\nimport { ChartState } from \"./states\";\nimport { readThemeColors } from \"./theme-colors\";\n\nexport interface EChartsPlotProps {\n model: ChartModel;\n messages: ChartMessages;\n messageInput: ChartMessagesInput | undefined;\n locale: string | undefined;\n hidden: ReadonlySet<string>;\n width: number | undefined;\n height: number;\n loader: EChartsLoader;\n animate: boolean;\n name: string;\n description: string;\n idPrefix: string;\n /**\n * Called when the canvas cannot be used: `missing` when echarts cannot be\n * loaded, `unsupported` when it loads but cannot draw this model.\n */\n onUnavailable: (reason: \"missing\" | \"unsupported\") => void;\n}\n\n/**\n * The canvas renderer. It loads `echarts` lazily, draws the model with colors\n * read from the `--kit-*` variables at runtime, and redraws when the theme\n * (`data-theme`) changes. The canvas is a labelled image: its description and\n * the data table carry the content for assistive technology.\n */\nexport function EChartsPlot({\n model,\n messageInput,\n messages,\n locale,\n hidden,\n width,\n height,\n loader,\n animate,\n name,\n description,\n idPrefix,\n onUnavailable,\n}: EChartsPlotProps) {\n const hostRef = useRef<HTMLDivElement | null>(null);\n const instanceRef = useRef<EChartsInstance | null>(null);\n const loaderRef = useRef(loader);\n const unavailableRef = useRef(onUnavailable);\n const [status, setStatus] = useState<\"loading\" | \"ready\" | \"unavailable\">(\"loading\");\n const [themeVersion, setThemeVersion] = useState(0);\n\n useEffect(() => {\n loaderRef.current = loader;\n unavailableRef.current = onUnavailable;\n });\n\n // Load echarts once and create the instance.\n useEffect(() => {\n let cancelled = false;\n const host = hostRef.current;\n loaderRef\n .current()\n .then((module) => {\n if (cancelled || !host) return;\n instanceRef.current = module.init(host, null, { renderer: \"canvas\" });\n setStatus(\"ready\");\n })\n .catch(() => {\n if (cancelled) return;\n setStatus(\"unavailable\");\n unavailableRef.current(\"missing\");\n });\n return () => {\n cancelled = true;\n instanceRef.current?.dispose();\n instanceRef.current = null;\n };\n }, []);\n\n // Redraw when the theme attribute changes anywhere above the chart.\n useEffect(() => {\n const host = hostRef.current;\n if (!host || typeof MutationObserver === \"undefined\") return undefined;\n const observer = new MutationObserver(() => setThemeVersion((version) => version + 1));\n observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"data-theme\"] });\n const scoped = host.closest(\"[data-theme]\");\n if (scoped && scoped !== document.documentElement) observer.observe(scoped, { attributes: true, attributeFilter: [\"data-theme\"] });\n return () => observer.disconnect();\n }, []);\n\n // Push the option.\n useEffect(() => {\n const instance = instanceRef.current;\n if (status !== \"ready\" || !instance) return;\n const option = toEChartsOption(model, {\n colors: readThemeColors(hostRef.current),\n locale,\n messages: messageInput,\n hidden,\n animate,\n });\n if (!option) {\n unavailableRef.current(\"unsupported\");\n return;\n }\n instance.setOption(option, { notMerge: true });\n }, [status, model, hidden, themeVersion, locale, messageInput, animate]);\n\n // Keep the canvas sized to its box.\n useEffect(() => {\n const instance = instanceRef.current;\n if (status !== \"ready\" || !instance) return;\n instance.resize({ ...(width !== undefined ? { width } : {}), height });\n }, [status, width, height]);\n\n const descriptionId = `${idPrefix}-description`;\n return (\n <div data-kit=\"chart-stage\" data-canvas={status}>\n <div\n ref={hostRef}\n data-kit=\"chart-canvas\"\n role=\"img\"\n aria-label={name}\n aria-describedby={descriptionId}\n style={{ blockSize: height }}\n />\n {status === \"loading\" ? <ChartState kind=\"loading\" message={messages.canvasLoading} height={height} overlay /> : null}\n <VisuallyHidden id={descriptionId}>{description}</VisuallyHidden>\n </div>\n );\n}\n","import { Button, Spinner } from \"@x12i/ui\";\n\nexport type ChartStateKind = \"loading\" | \"empty\" | \"error\" | \"unsupported\" | \"missing-data\";\n\nexport interface ChartStateProps {\n kind: ChartStateKind;\n message: string;\n /** Height to reserve so the layout does not jump when data arrives. */\n height: number;\n /** Shown as a button in the error state. */\n onRetry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n /** Draw over the plot area instead of in the flow (the canvas loading state). */\n overlay?: boolean;\n}\n\n/**\n * Loading, empty, error, unsupported and missing-data states. They keep the\n * chart's height, announce politely (`role=\"status\"`), and the error state\n * announces assertively (`role=\"alert\"`) with an optional retry.\n */\nexport function ChartState({ kind, message, height, onRetry, retryLabel, overlay }: ChartStateProps) {\n return (\n <div\n data-kit=\"chart-state\"\n data-state={kind}\n data-overlay={overlay ? \"true\" : undefined}\n role={kind === \"error\" ? \"alert\" : \"status\"}\n aria-busy={kind === \"loading\" ? true : undefined}\n style={{ minBlockSize: height }}\n >\n {kind === \"loading\" ? <Spinner size=\"md\" /> : null}\n <p data-kit-slot=\"state-message\">{message}</p>\n {kind === \"error\" && onRetry ? (\n <Button size=\"sm\" variant=\"outline\" tone=\"neutral\" onClick={onRetry}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n );\n}\n","import { cssVarName, themeNames, type ThemeName } from \"@x12i/tokens\";\nimport { themeColorsFromTokens, type ChartThemeColors } from \"../echarts-option\";\nimport { categoricalTones, toneVarName } from \"../palette\";\nimport type { SeriesTone } from \"../spec\";\n\nconst SEQUENTIAL_STEPS = 9;\n\n/** The theme in effect at an element: the nearest `data-theme`, else the root's, else light. */\nexport function themeAt(element: Element | null): ThemeName {\n const attribute =\n element?.closest(\"[data-theme]\")?.getAttribute(\"data-theme\") ??\n (typeof document === \"undefined\" ? null : document.documentElement.getAttribute(\"data-theme\"));\n return (themeNames as ReadonlyArray<string>).includes(attribute ?? \"\") ? (attribute as ThemeName) : \"light\";\n}\n\nconst toneNames: ReadonlyArray<SeriesTone> = [\"accent\", \"muted\", \"reference\", \"good\", \"warning\", \"critical\", ...categoricalTones];\n\n/**\n * Reads the `--kit-*` custom properties that apply at an element, so a canvas\n * follows the active theme. Where a variable is missing (the stylesheet is not\n * loaded, or a test environment), the token constants for the current theme fill in.\n */\nexport function readThemeColors(element: Element | null): ChartThemeColors {\n const fallback = themeColorsFromTokens(themeAt(element));\n if (!element || typeof getComputedStyle !== \"function\") return fallback;\n const style = getComputedStyle(element);\n const read = (name: string, backup: string): string => style.getPropertyValue(name).trim() || backup;\n const tones = { ...fallback.tones } as Record<SeriesTone, string>;\n for (const tone of toneNames) tones[tone] = read(toneVarName(tone), fallback.tones[tone]);\n const ramp = (kind: \"sequential\" | \"diverging\", backup: ReadonlyArray<string>): string[] =>\n Array.from({ length: SEQUENTIAL_STEPS }, (_, i) =>\n read(cssVarName(`color.${kind}.${i + 1}` as Parameters<typeof cssVarName>[0]), backup[i] ?? \"\"),\n );\n return {\n tones,\n text: read(cssVarName(\"color.text.primary\"), fallback.text),\n textSecondary: read(cssVarName(\"color.text.secondary\"), fallback.textSecondary),\n axis: read(cssVarName(\"color.chart.axis\"), fallback.axis),\n grid: read(cssVarName(\"color.chart.grid\"), fallback.grid),\n surface: read(cssVarName(\"color.bg.surface\"), fallback.surface),\n border: read(cssVarName(\"color.border.default\"), fallback.border),\n accent: read(cssVarName(\"color.accent.default\"), fallback.accent),\n sequential: ramp(\"sequential\", fallback.sequential),\n diverging: ramp(\"diverging\", fallback.diverging),\n fontFamily: read(cssVarName(\"font.family.sans\"), fallback.fontFamily),\n };\n}\n","/**\n * The small part of the ECharts API the canvas renderer uses, typed locally so\n * the declaration files do not depend on `echarts` being installed.\n */\nexport interface EChartsInstance {\n setOption(option: object, opts?: { notMerge?: boolean; lazyUpdate?: boolean }): void;\n resize(size?: { width?: number; height?: number }): void;\n dispose(): void;\n on?(event: string, handler: (params: unknown) => void): void;\n}\n\nexport interface EChartsModule {\n init(\n element: HTMLElement,\n theme?: string | object | null,\n options?: { renderer?: \"canvas\" | \"svg\"; width?: number; height?: number },\n ): EChartsInstance;\n}\n\n/** Resolves the `echarts` module. Pass your own to control bundling or to stub it in tests. */\nexport type EChartsLoader = () => Promise<EChartsModule>;\n\n/**\n * The default loader: a lazy `import(\"echarts\")`, so apps that only draw SVG\n * never download it. A bundler resolves this import at build time, so install\n * `echarts` (an optional peer dependency) or pass `loadEcharts`.\n */\nexport const defaultEChartsLoader: EChartsLoader = () =>\n import(\"echarts\") as unknown as Promise<EChartsModule>;\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, type RefObject } from \"react\";\nimport { isRtlLocale } from \"../format\";\n\n/** `useLayoutEffect` that is quiet on the server. */\nexport const useIsomorphicLayoutEffect = typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\n/**\n * Tracks an element's width with a `ResizeObserver`. Returns `undefined` until\n * a real width is known (server render, jsdom), so callers pick a default.\n */\nexport function useElementWidth(ref: RefObject<HTMLElement | null>, explicit?: number): number | undefined {\n const [width, setWidth] = useState<number | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n const element = ref.current;\n if (!element || explicit !== undefined) return undefined;\n const read = (): void => {\n const next = Math.round(element.getBoundingClientRect().width);\n if (next > 0) setWidth((previous) => (previous === next ? previous : next));\n };\n read();\n if (typeof ResizeObserver === \"undefined\") return undefined;\n const observer = new ResizeObserver(read);\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, explicit]);\n return explicit ?? width;\n}\n\ntype Direction = \"ltr\" | \"rtl\";\n\nfunction directionAttribute(element: Element | null | undefined): Direction | undefined {\n const value = element?.getAttribute(\"dir\");\n return value === \"rtl\" || value === \"ltr\" ? value : undefined;\n}\n\n/**\n * Resolves the text direction: an explicit choice first, then the page (the\n * nearest `dir` attribute, observed for changes), then the locale.\n */\nexport function useDirection(\n ref: RefObject<HTMLElement | null>,\n explicit: Direction | undefined,\n locale: string | undefined,\n): { direction: Direction; attribute: Direction | undefined } {\n const [fromPage, setFromPage] = useState<Direction | undefined>(undefined);\n useIsomorphicLayoutEffect(() => {\n if (explicit || typeof document === \"undefined\") return undefined;\n const element = ref.current;\n const read = (): void => {\n const host = element?.parentElement?.closest(\"[dir]\") ?? null;\n setFromPage(directionAttribute(host) ?? directionAttribute(document.documentElement));\n };\n read();\n if (typeof MutationObserver === \"undefined\") return undefined;\n const observer = new MutationObserver(read);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"dir\"] });\n const host = element?.parentElement?.closest(\"[dir]\");\n if (host && host !== document.documentElement) observer.observe(host, { attributes: true, attributeFilter: [\"dir\"] });\n return () => observer.disconnect();\n }, [ref, explicit]);\n const fromLocale: Direction | undefined = isRtlLocale(locale) ? \"rtl\" : undefined;\n const direction = explicit ?? fromPage ?? fromLocale ?? \"ltr\";\n // Only set `dir` on the chart when nothing above it already decides.\n const attribute = explicit ?? (fromPage ? undefined : fromLocale);\n return { direction, attribute };\n}\n\n/** True when the user asks for reduced motion. */\nexport function usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return undefined;\n const query = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const update = (): void => setReduced(query.matches);\n update();\n query.addEventListener?.(\"change\", update);\n return () => query.removeEventListener?.(\"change\", update);\n }, []);\n return reduced;\n}\n\n/**\n * Hidden series, controlled or not. Returns the set plus a `set` that accepts\n * the next ids.\n */\nexport function useHiddenIds(\n controlled: ReadonlyArray<string> | undefined,\n initial: ReadonlyArray<string>,\n onChange: ((ids: string[]) => void) | undefined,\n): [ReadonlySet<string>, (next: string[]) => void] {\n const [internal, setInternal] = useState<string[]>(() => [...initial]);\n const ids = controlled ?? internal;\n const set = useMemo(() => new Set(ids), [ids]);\n const onChangeRef = useRef(onChange);\n useIsomorphicLayoutEffect(() => {\n onChangeRef.current = onChange;\n });\n const update = useCallback(\n (next: string[]) => {\n if (controlled === undefined) setInternal(next);\n onChangeRef.current?.(next);\n },\n [controlled],\n );\n return [set, update];\n}\n\n/** A DOM-safe id: `useId` output can contain characters that break `url(#id)`. */\nexport function safeId(id: string): string {\n return id.replace(/[^a-zA-Z0-9_-]/g, \"\");\n}\n","import type { ReactNode } from \"react\";\nimport { isOpenMarker, markerPath } from \"../palette\";\nimport type { MarkerShape, SeriesTone } from \"../spec\";\n\nconst GLYPH_WIDTH = 20;\nconst GLYPH_HEIGHT = 12;\nconst SWATCH_WIDTH = 14;\n\n/** Hatch pattern tiles: line, dot and grid fills that carry meaning without color. */\nexport function PatternDefs({ prefix, indices }: { prefix: string; indices: ReadonlyArray<number> }) {\n if (indices.length === 0) return null;\n const line = (d: string) => <path d={d} data-kit=\"chart-pattern-line\" />;\n const tiles: Record<number, { size: number; body: ReactNode }> = {\n 0: { size: 6, body: line(\"M-1,1L1,-1M0,6L6,0M5,7L7,5\") },\n 1: { size: 6, body: line(\"M-1,5L1,7M0,0L6,6M5,-1L7,1\") },\n 2: { size: 6, body: <circle cx={3} cy={3} r={1} data-kit=\"chart-pattern-dot\" /> },\n 3: { size: 6, body: line(\"M0,3H6\") },\n 4: { size: 6, body: line(\"M3,0V6\") },\n 5: { size: 6, body: line(\"M0,3H6M3,0V6\") },\n 6: { size: 8, body: line(\"M-1,1L1,-1M0,8L8,0M7,9L9,7\") },\n 7: {\n size: 6,\n body: (\n <>\n <rect x={0} y={0} width={3} height={3} data-kit=\"chart-pattern-dot\" />\n <rect x={3} y={3} width={3} height={3} data-kit=\"chart-pattern-dot\" />\n </>\n ),\n },\n };\n return (\n <defs>\n {indices.map((index) => {\n const tile = tiles[index % 8] as { size: number; body: ReactNode };\n return (\n <pattern key={index} id={`${prefix}-p${index}`} patternUnits=\"userSpaceOnUse\" width={tile.size} height={tile.size}>\n {tile.body}\n </pattern>\n );\n })}\n </defs>\n );\n}\n\nexport interface GlyphProps {\n tone: SeriesTone;\n glyph: \"line\" | \"area\" | \"bar\" | \"point\" | \"slice\";\n marker: MarkerShape | string;\n dash?: string | undefined;\n pattern: number;\n /** Prefix of the pattern ids defined by the plot. */\n patternPrefix: string;\n}\n\n/**\n * A small key swatch that mirrors what the series draws: a dashed line with its\n * marker, a hatched bar, a filled area. Pattern and shape make it readable\n * without color.\n */\nexport function Glyph({ tone, glyph, marker, dash, pattern, patternPrefix }: GlyphProps) {\n const middle = GLYPH_HEIGHT / 2;\n const shape = marker as MarkerShape;\n const open = isOpenMarker(shape);\n const overlay = (x: number, y: number, width: number, height: number) =>\n pattern >= 0 ? (\n <rect x={x} y={y} width={width} height={height} fill={`url(#${patternPrefix}-p${pattern})`} data-kit=\"chart-pattern\" />\n ) : null;\n return (\n <svg\n viewBox={`0 0 ${GLYPH_WIDTH} ${GLYPH_HEIGHT}`}\n width={GLYPH_WIDTH}\n height={GLYPH_HEIGHT}\n aria-hidden=\"true\"\n focusable=\"false\"\n data-kit=\"chart-glyph\"\n data-glyph={glyph}\n data-tone={tone}\n >\n {glyph === \"line\" ? (\n <>\n <path d={`M0,${middle}H${GLYPH_WIDTH}`} data-kit=\"chart-glyph-line\" {...(dash ? { strokeDasharray: dash } : {})} />\n <path d={markerPath(shape, GLYPH_WIDTH / 2, middle, 3.5)} data-kit=\"chart-glyph-marker\" data-open={open ? \"true\" : undefined} />\n </>\n ) : null}\n {glyph === \"area\" ? (\n <>\n <rect x={0} y={2} width={GLYPH_WIDTH} height={GLYPH_HEIGHT - 2} data-kit=\"chart-glyph-area\" />\n {overlay(0, 2, GLYPH_WIDTH, GLYPH_HEIGHT - 2)}\n <path d={`M0,2H${GLYPH_WIDTH}`} data-kit=\"chart-glyph-line\" />\n </>\n ) : null}\n {glyph === \"bar\" || glyph === \"slice\" ? (\n <>\n <rect\n x={(GLYPH_WIDTH - SWATCH_WIDTH) / 2}\n y={1}\n width={SWATCH_WIDTH}\n height={GLYPH_HEIGHT - 2}\n data-kit=\"chart-glyph-fill\"\n />\n {overlay((GLYPH_WIDTH - SWATCH_WIDTH) / 2, 1, SWATCH_WIDTH, GLYPH_HEIGHT - 2)}\n </>\n ) : null}\n {glyph === \"point\" ? (\n <path d={markerPath(shape, GLYPH_WIDTH / 2, middle, 4)} data-kit=\"chart-glyph-marker\" data-open={open ? \"true\" : undefined} />\n ) : null}\n </svg>\n );\n}\n","import type { MouseEvent } from \"react\";\nimport type { LegendEntry } from \"../layout\";\nimport { rampGradient } from \"../palette\";\nimport { Glyph } from \"./glyph\";\n\nexport interface ChartLegendProps {\n entries: ReadonlyArray<LegendEntry>;\n /** Accessible name of the legend group. */\n label: string;\n position: \"top\" | \"bottom\";\n patternPrefix: string;\n /** Called when a toggleable entry is clicked. */\n onToggle?: ((entry: LegendEntry, event: MouseEvent<HTMLButtonElement>) => void) | undefined;\n}\n\n/**\n * The legend. Series entries are buttons with `aria-pressed`, so toggling is\n * keyboard and screen reader friendly. Keys that explain a mark (a waterfall's\n * increase and decrease) are plain text. Each glyph also encodes the series by\n * shape, dash or pattern, so color is never the only channel.\n */\nexport function ChartLegend({ entries, label, position, patternPrefix, onToggle }: ChartLegendProps) {\n if (entries.length === 0) return null;\n return (\n <div role=\"group\" aria-label={label} data-kit=\"chart-legend\" data-position={position}>\n <ul data-kit-slot=\"legend-list\">\n {entries.map((entry) => {\n const glyph = (\n <Glyph\n tone={entry.tone}\n glyph={entry.glyph}\n marker={entry.marker}\n dash={entry.dash}\n pattern={entry.pattern}\n patternPrefix={patternPrefix}\n />\n );\n return (\n <li key={entry.id} data-kit-slot=\"legend-item\">\n {entry.toggle ? (\n <button\n type=\"button\"\n data-kit=\"chart-legend-button\"\n data-hidden={entry.visible ? undefined : \"true\"}\n aria-pressed={entry.visible}\n onClick={(event) => onToggle?.(entry, event)}\n >\n {glyph}\n <span data-kit-slot=\"legend-label\">{entry.label}</span>\n </button>\n ) : (\n <span data-kit=\"chart-legend-key\">\n {glyph}\n <span data-kit-slot=\"legend-label\">{entry.label}</span>\n </span>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport interface ColorScaleLegendProps {\n kind: \"sequential\" | \"diverging\";\n min: string;\n max: string;\n /** Accessible name, for example the value title. */\n label: string;\n}\n\n/** The ramp behind a heatmap, with its lowest and highest value. */\nexport function ColorScaleLegend({ kind, min, max, label }: ColorScaleLegendProps) {\n return (\n <div role=\"group\" aria-label={label} data-kit=\"chart-scale\" data-ramp={kind}>\n <span data-kit-slot=\"scale-min\">{min}</span>\n <span data-kit-slot=\"scale-ramp\" aria-hidden=\"true\" style={{ backgroundImage: rampGradient(kind) }} />\n <span data-kit-slot=\"scale-max\">{max}</span>\n </div>\n );\n}\n","import { useCallback, useMemo, useRef, useState, type FocusEvent, type KeyboardEvent, type PointerEvent } from \"react\";\nimport { VisuallyHidden } from \"@x12i/ui\";\nimport type { ChartFormatters } from \"../formatters\";\nimport {\n describeTarget,\n hitTest,\n isNavKey,\n navigate,\n pointInfo,\n targetById,\n tooltipFor,\n type ChartPointInfo,\n type TooltipContent,\n} from \"../interaction\";\nimport type { AnnotationLayout, AxisLayout, ChartLayout, FocusShape, HitTarget, LayoutMark, TextLabel } from \"../layout\";\nimport type { ChartModel } from \"../model\";\nimport { divergingColor, markerPath, sequentialColor, isOpenMarker } from \"../palette\";\nimport { AXIS_FONT_SIZE, TICK_PADDING, TICK_SIZE } from \"../scales\";\nimport { Glyph, PatternDefs } from \"./glyph\";\n\n/* ------------------------------------------------------------------ */\n/* Text */\n/* ------------------------------------------------------------------ */\n\nconst RTL_SCRIPT = /[\\u0590-\\u08FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFF]/;\nconst ABOVE_OFFSET = -3;\nconst BELOW_OFFSET = 11;\nconst MIDDLE_OFFSET = 4;\nconst FOCUS_OUTSET = 2;\n\ntype Anchor = \"start\" | \"middle\" | \"end\";\n\n/**\n * Layout anchors are physical (left, middle, right). SVG `text-anchor` is\n * relative to the text direction, so right-to-left text flips them.\n */\nfunction textDirection(text: string, numeric: boolean | undefined): { direction: \"ltr\" | \"rtl\"; flip: boolean } {\n const rtl = !numeric && RTL_SCRIPT.test(text);\n return { direction: rtl ? \"rtl\" : \"ltr\", flip: rtl };\n}\n\nfunction physicalAnchor(anchor: Anchor, flip: boolean): Anchor {\n if (!flip) return anchor;\n return anchor === \"start\" ? \"end\" : anchor === \"end\" ? \"start\" : anchor;\n}\n\nfunction offsetFor(baseline: TextLabel[\"baseline\"]): number {\n return baseline === \"above\" ? ABOVE_OFFSET : baseline === \"below\" ? BELOW_OFFSET : MIDDLE_OFFSET;\n}\n\nfunction Label({ label }: { label: TextLabel }) {\n const { direction, flip } = textDirection(label.text, label.numeric);\n return (\n <text\n x={label.x}\n y={label.y + offsetFor(label.baseline)}\n textAnchor={physicalAnchor(label.anchor, flip)}\n direction={direction}\n data-kit=\"chart-label\"\n data-label-kind={label.kind}\n data-tone={label.tone}\n >\n {label.text}\n </text>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Axes */\n/* ------------------------------------------------------------------ */\n\nfunction Axis({ axis, plot }: { axis: AxisLayout; plot: ChartLayout[\"plot\"] }) {\n const { line, orient } = axis;\n const vertical = orient === \"left\" || orient === \"right\";\n const sign = orient === \"left\" || orient === \"top\" ? -1 : 1;\n const visibleTicks = axis.ticks.filter((tick) => tick.visible);\n return (\n <g data-kit=\"chart-axis\" data-axis={axis.id} data-orient={orient}>\n {axis.id === \"x\" ? <line x1={line.x1} y1={line.y1} x2={line.x2} y2={line.y2} data-kit=\"chart-axis-line\" /> : null}\n {visibleTicks.map((tick) => {\n const tickLine = vertical\n ? { x1: line.x1, y1: tick.position, x2: line.x1 + sign * TICK_SIZE, y2: tick.position }\n : { x1: tick.position, y1: line.y1, x2: tick.position, y2: line.y1 + sign * TICK_SIZE };\n const gap = TICK_SIZE + TICK_PADDING;\n let x: number;\n let y: number;\n if (vertical) {\n x = line.x1 + sign * gap;\n y = tick.position + MIDDLE_OFFSET;\n } else {\n x = tick.position;\n y = line.y1 + sign * gap + (sign > 0 ? (axis.labelAngle === 0 ? AXIS_FONT_SIZE * 0.8 : AXIS_FONT_SIZE * 0.35) : 0);\n }\n const text = String(tick.label);\n const { direction, flip } = textDirection(text, axis.numeric);\n const anchor = physicalAnchor(axis.labelAnchor, flip);\n return (\n <g key={String(tick.value)} data-kit=\"chart-tick\">\n {axis.grid ? (\n vertical ? (\n <line\n x1={plot.x}\n y1={tick.position}\n x2={plot.x + plot.width}\n y2={tick.position}\n data-kit=\"chart-grid\"\n data-zero={tick.value === 0 ? \"true\" : undefined}\n />\n ) : (\n <line\n x1={tick.position}\n y1={plot.y}\n x2={tick.position}\n y2={plot.y + plot.height}\n data-kit=\"chart-grid\"\n data-zero={tick.value === 0 ? \"true\" : undefined}\n />\n )\n ) : null}\n <line {...tickLine} data-kit=\"chart-tick-mark\" />\n <text\n x={x}\n y={y}\n textAnchor={anchor}\n direction={direction}\n data-kit=\"chart-tick-label\"\n {...(axis.labelAngle !== 0 && !vertical ? { transform: `rotate(${axis.labelAngle} ${x} ${y})` } : {})}\n >\n {text}\n </text>\n </g>\n );\n })}\n {axis.title && axis.titlePosition ? (\n <text\n x={axis.titlePosition.x}\n y={axis.titlePosition.y}\n textAnchor=\"middle\"\n direction={textDirection(axis.title, false).direction}\n data-kit=\"chart-axis-title\"\n {...(axis.titlePosition.rotate !== 0\n ? { transform: `rotate(${axis.titlePosition.rotate} ${axis.titlePosition.x} ${axis.titlePosition.y})` }\n : {})}\n >\n {axis.title}\n </text>\n ) : null}\n </g>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Marks */\n/* ------------------------------------------------------------------ */\n\nconst KIND_ORDER: Record<LayoutMark[\"kind\"], number> = {\n area: 0,\n bar: 1,\n cell: 1,\n arc: 1,\n connector: 2,\n stem: 2,\n line: 3,\n point: 4,\n};\n\nfunction cellFill(mark: LayoutMark): string {\n const t = mark.t ?? 0;\n return mark.ramp === \"diverging\" ? divergingColor(t) : sequentialColor(t);\n}\n\nfunction MarkView({ mark, active, patternPrefix }: { mark: LayoutMark; active: boolean; patternPrefix: string }) {\n const common = {\n \"data-tone\": mark.tone,\n \"data-series\": mark.styleIndex,\n \"data-muted\": mark.muted ? \"true\" : undefined,\n \"data-highlighted\": mark.highlighted ? \"true\" : undefined,\n \"data-breach\": mark.breach ? \"true\" : undefined,\n \"data-active\": active ? \"true\" : undefined,\n \"data-role\": mark.role,\n \"data-mark-id\": mark.id,\n } as const;\n const overlayFill = mark.pattern >= 0 ? `url(#${patternPrefix}-p${mark.pattern})` : undefined;\n\n switch (mark.kind) {\n case \"bar\":\n return (\n <>\n <rect x={mark.x} y={mark.y} width={mark.width} height={mark.height} data-kit=\"chart-bar\" {...common} />\n {overlayFill ? <rect x={mark.x} y={mark.y} width={mark.width} height={mark.height} fill={overlayFill} data-kit=\"chart-pattern\" /> : null}\n </>\n );\n case \"cell\":\n return (\n <rect\n x={mark.x}\n y={mark.y}\n width={mark.width}\n height={mark.height}\n style={{ fill: cellFill(mark) }}\n data-kit=\"chart-cell\"\n {...common}\n />\n );\n case \"area\":\n return (\n <>\n <path d={mark.d} data-kit=\"chart-area\" {...common} />\n {overlayFill ? <path d={mark.d} fill={overlayFill} data-kit=\"chart-pattern\" /> : null}\n </>\n );\n case \"arc\":\n return (\n <>\n <path d={mark.d} data-kit=\"chart-arc\" {...common} />\n {overlayFill ? <path d={mark.d} fill={overlayFill} data-kit=\"chart-pattern\" /> : null}\n </>\n );\n case \"line\":\n return <path d={mark.d} data-kit=\"chart-line\" {...(mark.dash ? { strokeDasharray: mark.dash } : {})} {...common} />;\n case \"stem\":\n case \"connector\":\n return (\n <line\n x1={mark.x1}\n y1={mark.y1}\n x2={mark.x2}\n y2={mark.y2}\n data-kit={mark.kind === \"stem\" ? \"chart-stem\" : \"chart-connector\"}\n {...common}\n />\n );\n case \"point\": {\n const shape = mark.shape ?? \"circle\";\n const open = isOpenMarker(shape) ? \"true\" : undefined;\n if (shape === \"circle\") {\n return <circle cx={mark.cx} cy={mark.cy} r={mark.r} data-kit=\"chart-point\" {...common} />;\n }\n return <path d={markerPath(shape, mark.cx ?? 0, mark.cy ?? 0, mark.r ?? 4)} data-kit=\"chart-point\" data-open={open} {...common} />;\n }\n default:\n return null;\n }\n}\n\nfunction AnnotationView({ annotation }: { annotation: AnnotationLayout }) {\n const common = {\n \"data-tone\": annotation.tone,\n \"data-threshold\": annotation.threshold ? \"true\" : undefined,\n } as const;\n return (\n <g data-kit=\"chart-annotation\" data-annotation={annotation.kind} {...common}>\n {annotation.kind === \"line\" ? (\n <line x1={annotation.x1} y1={annotation.y1} x2={annotation.x2} y2={annotation.y2} data-kit=\"chart-annotation-line\" />\n ) : null}\n {annotation.kind === \"band\" || annotation.kind === \"forecast\" ? (\n <rect\n x={annotation.box?.x}\n y={annotation.box?.y}\n width={annotation.box?.width}\n height={annotation.box?.height}\n data-kit=\"chart-annotation-band\"\n data-forecast={annotation.kind === \"forecast\" ? \"true\" : undefined}\n />\n ) : null}\n {annotation.kind === \"point\" ? (\n <circle cx={annotation.cx} cy={annotation.cy} r={5} data-kit=\"chart-annotation-point\" />\n ) : null}\n {annotation.label ? <Label label={annotation.label} /> : null}\n </g>\n );\n}\n\nfunction FocusRing({ shape }: { shape: FocusShape }) {\n if (shape.kind === \"circle\") {\n return <circle cx={shape.cx} cy={shape.cy} r={shape.r} data-kit=\"chart-focus\" />;\n }\n if (shape.kind === \"rect\") {\n return (\n <rect\n x={shape.x - FOCUS_OUTSET}\n y={shape.y - FOCUS_OUTSET}\n width={shape.width + FOCUS_OUTSET * 2}\n height={shape.height + FOCUS_OUTSET * 2}\n data-kit=\"chart-focus\"\n />\n );\n }\n return <path d={shape.d} transform={`translate(${shape.tx ?? 0} ${shape.ty ?? 0})`} data-kit=\"chart-focus\" />;\n}\n\n/* ------------------------------------------------------------------ */\n/* Tooltip */\n/* ------------------------------------------------------------------ */\n\nconst EDGE_SHARE = 0.25;\n\nfunction Tooltip({\n content,\n target,\n layout,\n patternPrefix,\n}: {\n content: TooltipContent;\n target: HitTarget;\n layout: ChartLayout;\n patternPrefix: string;\n}) {\n const left = (target.x / layout.width) * 100;\n const top = (target.y / layout.height) * 100;\n const align = left < EDGE_SHARE * 100 ? \"start\" : left > (1 - EDGE_SHARE) * 100 ? \"end\" : \"center\";\n const placement = top < 40 ? \"below\" : \"above\";\n // SVG coordinates are physical, so the anchor uses `left` and `top` even in right-to-left pages.\n return (\n <div\n data-kit=\"chart-tooltip\"\n data-placement={placement}\n data-align={align}\n aria-hidden=\"true\"\n style={{ left: `${left}%`, top: `${top}%` }}\n >\n <div data-kit-slot=\"tooltip-title\">{content.title}</div>\n <ul data-kit-slot=\"tooltip-rows\">\n {content.rows.map((row) => (\n <li key={row.id} data-kit-slot=\"tooltip-row\" data-active={row.active ? \"true\" : undefined}>\n <Glyph tone={row.tone} glyph={row.glyph} marker={row.marker} dash={row.dash} pattern={row.pattern} patternPrefix={patternPrefix} />\n <span data-kit-slot=\"tooltip-label\">{row.label}</span>\n <span data-kit-slot=\"tooltip-value\">{row.value}</span>\n {row.note ? <span data-kit-slot=\"tooltip-note\">{row.note}</span> : null}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* Plot */\n/* ------------------------------------------------------------------ */\n\nexport interface PlotProps {\n model: ChartModel;\n layout: ChartLayout;\n fmts: ChartFormatters;\n /** Accessible name. */\n name: string;\n /** Long description, read through `aria-describedby`. */\n description: string;\n /** Prefix for generated ids. */\n idPrefix: string;\n /** False draws a static image (`role=\"img\"`) with no keyboard or pointer interaction. */\n interactive: boolean;\n /** Tooltip on hover and focus. */\n tooltip: boolean;\n animate: boolean;\n onPointActivate?: ((info: ChartPointInfo, event: PointerEvent<SVGSVGElement> | KeyboardEvent<SVGSVGElement>) => void) | undefined;\n onActivePointChange?: ((info: ChartPointInfo | null) => void) | undefined;\n}\n\ninterface ActiveState {\n id: string;\n source: \"pointer\" | \"keyboard\";\n}\n\n/** The SVG plot with its tooltip, crosshair, focus ring, live region and hidden description. */\nexport function Plot({\n model,\n layout,\n fmts,\n name,\n description,\n idPrefix,\n interactive,\n tooltip,\n animate,\n onPointActivate,\n onActivePointChange,\n}: PlotProps) {\n const svgRef = useRef<SVGSVGElement | null>(null);\n const pointerDown = useRef(false);\n const [active, setActive] = useState<ActiveState | null>(null);\n const [announcement, setAnnouncement] = useState(\"\");\n const messages = fmts.messages;\n const canInteract = interactive && layout.targets.length > 0;\n const descriptionId = `${idPrefix}-description`;\n const patternPrefix = `${idPrefix}-pattern`;\n\n const target = active ? targetById(layout, active.id) : undefined;\n const content = useMemo(\n () => (target && tooltip ? tooltipFor(model, layout, target, fmts) : null),\n [model, layout, fmts, target, tooltip],\n );\n\n const lastNotified = useRef<string | null>(null);\n const select = useCallback(\n (next: HitTarget | null | undefined, source: ActiveState[\"source\"]) => {\n const nextId = next?.id ?? null;\n if (!next) {\n setActive(null);\n setAnnouncement(\"\");\n } else {\n setActive((previous) => (previous && previous.id === next.id && previous.source === source ? previous : { id: next.id, source }));\n if (source === \"keyboard\") setAnnouncement(describeTarget(model, layout, next, fmts));\n }\n if (lastNotified.current !== nextId) {\n lastNotified.current = nextId;\n onActivePointChange?.(next ? pointInfo(model, next, fmts) : null);\n }\n },\n [model, layout, fmts, onActivePointChange],\n );\n\n const pointerTarget = (event: PointerEvent<SVGSVGElement>): HitTarget | null => {\n const svg = svgRef.current;\n if (!svg) return null;\n const rect = svg.getBoundingClientRect();\n if (rect.width === 0 || rect.height === 0) return null;\n const x = (event.clientX - rect.left) * (layout.width / rect.width);\n const y = (event.clientY - rect.top) * (layout.height / rect.height);\n return hitTest(layout, x, y);\n };\n\n const onPointerMove = (event: PointerEvent<SVGSVGElement>): void => {\n if (!canInteract || event.pointerType === \"touch\") return;\n const hit = pointerTarget(event);\n if (hit) select(hit, \"pointer\");\n else if (active?.source === \"pointer\") select(null, \"pointer\");\n };\n\n const onPointerDown = (event: PointerEvent<SVGSVGElement>): void => {\n pointerDown.current = true;\n if (!canInteract) return;\n const hit = pointerTarget(event);\n if (hit) select(hit, \"pointer\");\n };\n\n const onPointerUp = (event: PointerEvent<SVGSVGElement>): void => {\n if (!canInteract || !onPointActivate) return;\n const hit = pointerTarget(event);\n const info = hit ? pointInfo(model, hit, fmts) : null;\n if (info) onPointActivate(info, event);\n };\n\n const onStageLeave = (event: PointerEvent<HTMLDivElement>): void => {\n // Touch selections stay until the next tap or blur. Keep the tooltip while\n // the pointer is on it, so it can be read (WCAG 1.4.13).\n if (event.pointerType === \"touch\") return;\n if (event.relatedTarget instanceof Node && event.currentTarget.contains(event.relatedTarget)) return;\n if (active?.source === \"pointer\") select(null, \"pointer\");\n };\n\n const onFocus = (): void => {\n if (!canInteract) return;\n if (pointerDown.current) {\n pointerDown.current = false;\n return;\n }\n const start = (active && targetById(layout, active.id)) ?? layout.targets[0];\n select(start, \"keyboard\");\n };\n\n const onBlur = (event: FocusEvent<SVGSVGElement>): void => {\n pointerDown.current = false;\n if (event.relatedTarget instanceof Node && event.currentTarget.contains(event.relatedTarget)) return;\n if (active) select(null, \"keyboard\");\n };\n\n const onKeyDown = (event: KeyboardEvent<SVGSVGElement>): void => {\n if (!canInteract || event.altKey || event.ctrlKey || event.metaKey) return;\n pointerDown.current = false;\n if (isNavKey(event.key)) {\n event.preventDefault();\n const nextId = navigate(layout, active?.id ?? null, event.key);\n select(targetById(layout, nextId), \"keyboard\");\n return;\n }\n if (event.key === \"Escape\") {\n if (active) {\n event.preventDefault();\n select(null, \"keyboard\");\n }\n return;\n }\n if ((event.key === \"Enter\" || event.key === \" \") && target && onPointActivate) {\n event.preventDefault();\n const info = pointInfo(model, target, fmts);\n if (info) onPointActivate(info, event);\n }\n };\n\n const marks = useMemo(\n () => [...layout.marks].sort((a, b) => (KIND_ORDER[a.kind] ?? 0) - (KIND_ORDER[b.kind] ?? 0)),\n [layout.marks],\n );\n const bands = layout.annotations.filter((annotation) => annotation.kind === \"band\" || annotation.kind === \"forecast\");\n const notes = layout.annotations.filter((annotation) => annotation.kind !== \"band\" && annotation.kind !== \"forecast\");\n const isActiveMark = (mark: LayoutMark): boolean =>\n !!target && mark.point >= 0 && mark.point === target.point && (mark.series === target.series || (mark.series === -1 && target.kind === \"slice\"));\n\n const keyboardActive = active?.source === \"keyboard\" ? target : undefined;\n\n return (\n <div data-kit=\"chart-stage\" onPointerLeave={canInteract ? onStageLeave : undefined}>\n <svg\n ref={svgRef}\n viewBox={`0 0 ${layout.width} ${layout.height}`}\n width={layout.width}\n height={layout.height}\n data-kit=\"chart-svg\"\n data-mark={layout.mark}\n data-animate={animate ? \"true\" : undefined}\n data-interactive={canInteract ? \"true\" : undefined}\n data-activatable={canInteract && onPointActivate ? \"true\" : undefined}\n focusable={canInteract ? \"true\" : \"false\"}\n {...(canInteract\n ? {\n role: \"application\",\n tabIndex: 0,\n \"aria-roledescription\": messages.chartRoleDescription,\n onPointerMove,\n onPointerDown,\n onPointerUp,\n onFocus,\n onBlur,\n onKeyDown,\n }\n : { role: \"img\" })}\n aria-label={name}\n aria-describedby={descriptionId}\n >\n <PatternDefs prefix={patternPrefix} indices={layout.patterns} />\n <g data-kit=\"chart-bands\" aria-hidden=\"true\">\n {bands.map((annotation) => (\n <AnnotationView key={annotation.id} annotation={annotation} />\n ))}\n </g>\n <g data-kit=\"chart-axes\" aria-hidden=\"true\">\n {layout.axes.map((axis) => (\n <Axis key={axis.id} axis={axis} plot={layout.plot} />\n ))}\n </g>\n <g data-kit=\"chart-marks\" aria-hidden=\"true\">\n {marks.map((mark) => (\n <MarkView key={mark.id} mark={mark} active={isActiveMark(mark)} patternPrefix={patternPrefix} />\n ))}\n </g>\n <g data-kit=\"chart-notes\" aria-hidden=\"true\">\n {notes.map((annotation) => (\n <AnnotationView key={annotation.id} annotation={annotation} />\n ))}\n </g>\n <g data-kit=\"chart-labels\" aria-hidden=\"true\">\n {layout.labels.map((label) => (\n <Label key={label.id} label={label} />\n ))}\n </g>\n {target && layout.crosshair !== \"none\" ? (\n <g data-kit=\"chart-crosshair\" aria-hidden=\"true\">\n {layout.crosshair === \"x\" ? (\n <line x1={target.x} y1={layout.plot.y} x2={target.x} y2={layout.plot.y + layout.plot.height} />\n ) : (\n <line x1={layout.plot.x} y1={target.y} x2={layout.plot.x + layout.plot.width} y2={target.y} />\n )}\n </g>\n ) : null}\n {keyboardActive ? (\n <g aria-hidden=\"true\">\n <FocusRing shape={keyboardActive.focus} />\n </g>\n ) : null}\n </svg>\n {content && target ? <Tooltip content={content} target={target} layout={layout} patternPrefix={patternPrefix} /> : null}\n <VisuallyHidden id={descriptionId}>{description}</VisuallyHidden>\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {announcement}\n </VisuallyHidden>\n </div>\n );\n}\n","import { createElement, useId, useMemo, useState, type CSSProperties, type ReactNode } from \"react\";\nimport { Button } from \"@x12i/ui\";\nimport { resolveMessages } from \"../messages\";\nimport { chartToCsv } from \"../table\";\nimport { Chart, type ChartProps } from \"./chart\";\nimport { mergeMessages, useChartConfig } from \"./config\";\nimport { ChartDataTable } from \"./data-table\";\nimport { safeId } from \"./hooks\";\nimport { ChartIcon, DownloadIcon, TableIcon } from \"./icons\";\n\nexport type ChartView = \"chart\" | \"table\";\n\nexport interface ChartFrameProps extends Omit<ChartProps, \"className\" | \"style\" | \"id\"> {\n /** Heading level of the title, 2 to 6. Defaults to 3. */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n /** Show the toolbar with the table toggle and CSV download. Defaults to true. */\n toolbar?: boolean;\n /** Extra buttons placed after the built-in actions. */\n actions?: ReactNode;\n /** Controlled view. */\n view?: ChartView;\n defaultView?: ChartView;\n onViewChange?: (view: ChartView) => void;\n /** Rows shown in the table. The CSV always has every row. Defaults to 200. */\n tableMaxRows?: number;\n /** File name for the CSV download, without extension. Defaults to the title. */\n csvFileName?: string;\n /** Replaces the browser download, for example to send the CSV to your own handler. */\n onDownload?: (csv: string, fileName: string) => void;\n /** Visual treatment: plain, or a bordered card surface. */\n variant?: \"plain\" | \"card\";\n className?: string;\n style?: CSSProperties;\n id?: string;\n}\n\nfunction slug(title: string): string {\n const base = title.toLowerCase().replace(/[^\\p{L}\\p{N}]+/gu, \"-\").replace(/^-+|-+$/g, \"\");\n return base || \"chart\";\n}\n\nfunction downloadCsv(csv: string, fileName: string): void {\n if (typeof document === \"undefined\" || typeof URL === \"undefined\" || typeof URL.createObjectURL !== \"function\") return;\n const url = URL.createObjectURL(new Blob([csv], { type: \"text/csv;charset=utf-8\" }));\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = `${fileName}.csv`;\n anchor.hidden = true;\n document.body.append(anchor);\n anchor.click();\n anchor.remove();\n setTimeout(() => URL.revokeObjectURL(url), 0);\n}\n\n/**\n * A chart as a figure: a heading and subtitle in a `<figcaption>`, a toolbar\n * (view as table, download CSV), the chart, the data source, and the data table.\n * The table is always in the document: visible in table view, otherwise hidden\n * visually but available to assistive technology as the full text alternative.\n */\nexport function ChartFrame({\n headingLevel = 3,\n toolbar = true,\n actions,\n view: viewProp,\n defaultView = \"chart\",\n onViewChange,\n tableMaxRows,\n csvFileName,\n onDownload,\n variant = \"plain\",\n className,\n style,\n id,\n ...chartProps\n}: ChartFrameProps) {\n const { spec } = chartProps;\n const config = useChartConfig();\n const locale = chartProps.locale ?? config.locale;\n const datasets = chartProps.datasets ?? config.datasets;\n const messageInput = useMemo(() => mergeMessages(config.messages, chartProps.messages), [config.messages, chartProps.messages]);\n const messages = resolveMessages(messageInput);\n const [internalView, setInternalView] = useState<ChartView>(defaultView);\n const view = viewProp ?? internalView;\n const uid = safeId(useId());\n const titleId = `kit-chart-title-${uid}`;\n const bodyId = `kit-chart-body-${uid}`;\n const showTable = spec.a11y.table !== false;\n\n const setView = (next: ChartView): void => {\n if (viewProp === undefined) setInternalView(next);\n onViewChange?.(next);\n };\n\n const download = (): void => {\n const csv = chartToCsv(spec, { datasets, locale, messages: messageInput, bom: true });\n const name = csvFileName ?? slug(spec.title);\n if (onDownload) onDownload(csv, name);\n else downloadCsv(csv, name);\n };\n\n const tableVisible = showTable && view === \"table\";\n return (\n <figure id={id} className={className} style={style} data-kit=\"chart-frame\" data-variant={variant} data-view={tableVisible ? \"table\" : \"chart\"}>\n <figcaption data-kit-slot=\"frame-caption\">\n {createElement(`h${headingLevel}`, { id: titleId, \"data-kit-slot\": \"frame-title\" }, spec.title)}\n {spec.subtitle ? <p data-kit-slot=\"frame-subtitle\">{spec.subtitle}</p> : null}\n </figcaption>\n {toolbar ? (\n <div role=\"group\" aria-label={messages.toolbar} data-kit=\"chart-toolbar\">\n {showTable ? (\n <Button\n size=\"sm\"\n variant=\"ghost\"\n tone=\"neutral\"\n aria-controls={bodyId}\n onClick={() => setView(tableVisible ? \"chart\" : \"table\")}\n >\n {tableVisible ? <ChartIcon /> : <TableIcon />}\n {tableVisible ? messages.viewAsChart : messages.viewAsTable}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" tone=\"neutral\" onClick={download}>\n <DownloadIcon />\n {messages.downloadCsv}\n </Button>\n {actions}\n </div>\n ) : null}\n <div id={bodyId} data-kit-slot=\"frame-body\">\n <div data-kit-slot=\"frame-chart\" hidden={tableVisible}>\n <Chart {...chartProps} />\n </div>\n {showTable ? (\n <ChartDataTable\n spec={spec}\n datasets={datasets}\n locale={locale}\n messages={messageInput}\n hidden={!tableVisible}\n {...(tableMaxRows !== undefined ? { maxRows: tableMaxRows } : {})}\n />\n ) : null}\n </div>\n {spec.source ? <p data-kit-slot=\"frame-source\">{spec.source}</p> : null}\n </figure>\n );\n}\n\n/** A `ChartFrame` on a bordered card surface. */\nexport function ChartCard(props: Omit<ChartFrameProps, \"variant\">) {\n return <ChartFrame {...props} variant=\"card\" />;\n}\n","import { useId, useMemo, type ReactElement } from \"react\";\nimport { VisuallyHidden } from \"@x12i/ui\";\nimport type { Datasets } from \"../data\";\nimport { formatMessage, resolveMessages, type ChartMessagesInput } from \"../messages\";\nimport type { ChartSpec } from \"../spec\";\nimport { chartToTable } from \"../table\";\nimport { mergeMessages, useChartConfig } from \"./config\";\nimport { safeId } from \"./hooks\";\n\nexport interface ChartDataTableProps {\n spec: ChartSpec;\n datasets?: Datasets | undefined;\n locale?: string | undefined;\n messages?: ChartMessagesInput | undefined;\n /** Rows to render. The CSV export always has every row. Defaults to 200. */\n maxRows?: number;\n /** Keep the table in the accessibility tree but out of sight. */\n hidden?: boolean;\n className?: string;\n id?: string;\n}\n\n/**\n * The data behind a chart, as a real table: `<caption>`, column headers,\n * row headers, tabular numbers. It is the full text alternative to the plot, so\n * `ChartFrame` always renders it, visible or visually hidden.\n */\nexport function ChartDataTable({ spec, datasets, locale, messages, maxRows = 200, hidden = false, className, id }: ChartDataTableProps) {\n const config = useChartConfig();\n const merged = useMemo(() => mergeMessages(config.messages, messages), [config.messages, messages]);\n const resolvedLocale = locale ?? config.locale;\n const resolvedDatasets = datasets ?? config.datasets;\n const table = useMemo(\n () => chartToTable(spec, { datasets: resolvedDatasets, locale: resolvedLocale, messages: merged }),\n [spec, resolvedDatasets, resolvedLocale, merged],\n );\n const text = resolveMessages(merged);\n const captionId = `kit-chart-table-${safeId(useId())}`;\n const rows = table.rows.slice(0, maxRows);\n const truncated = table.rows.length > rows.length;\n\n const content: ReactElement = (\n <div\n id={id}\n className={className}\n data-kit=\"chart-table\"\n data-hidden={hidden ? \"true\" : undefined}\n {...(hidden ? {} : { role: \"region\", tabIndex: 0, \"aria-labelledby\": captionId })}\n >\n <table data-kit=\"chart-table-element\">\n <caption id={captionId}>{table.caption}</caption>\n <thead>\n <tr>\n {table.columns.map((column) => (\n <th key={column.key} scope=\"col\" data-numeric={column.numeric ? \"true\" : undefined}>\n {column.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIndex) => (\n <tr key={rowIndex}>\n {row.map((cell, cellIndex) => {\n const column = table.columns[cellIndex];\n const numeric = column?.numeric ? \"true\" : undefined;\n return cellIndex === 0 ? (\n <th key={column?.key ?? cellIndex} scope=\"row\" data-numeric={numeric}>\n {cell.text}\n </th>\n ) : (\n <td key={column?.key ?? cellIndex} data-numeric={numeric}>\n {cell.text}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n {truncated ? (\n <p data-kit-slot=\"table-note\">\n {formatMessage(text.tableTruncated, { shown: rows.length, total: table.rows.length }, resolvedLocale)}\n </p>\n ) : null}\n </div>\n );\n\n return hidden ? <VisuallyHidden asChild>{content}</VisuallyHidden> : content;\n}\n","import type { ReactNode } from \"react\";\n\n/** Tiny inline glyphs for the toolbar. Decorative: the button carries the name. */\nfunction Icon({ children }: { children: ReactNode }) {\n return (\n <svg viewBox=\"0 0 16 16\" width={16} height={16} aria-hidden=\"true\" focusable=\"false\" data-kit=\"chart-icon\">\n {children}\n </svg>\n );\n}\n\nexport function TableIcon() {\n return (\n <Icon>\n <path d=\"M2,3H14V13H2Z M2,6.5H14 M2,9.75H14 M6,3V13\" />\n </Icon>\n );\n}\n\nexport function ChartIcon() {\n return (\n <Icon>\n <path d=\"M2,2V14H14 M5,11V8 M8,11V5 M11,11V7\" />\n </Icon>\n );\n}\n\nexport function DownloadIcon() {\n return (\n <Icon>\n <path d=\"M8,2V10 M5,7L8,10L11,7 M3,13H13\" />\n </Icon>\n );\n}\n","import type { CSSProperties, ReactNode } from \"react\";\n\nexport interface ChartGridProps {\n children?: ReactNode;\n /** Fixed number of columns. Without it, columns fill the width and wrap. */\n columns?: number;\n /** Accessible name when the grid is a meaningful group, for example \"Key metrics\". */\n label?: string;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Lays several charts or cards out in a responsive grid. Columns wrap to the\n * container width unless `columns` fixes them.\n */\nexport function ChartGrid({ children, columns, label, className, style }: ChartGridProps) {\n return (\n <div\n className={className}\n style={{ ...(columns ? { \"--_columns\": columns } : {}), ...style } as CSSProperties}\n data-kit=\"chart-grid-layout\"\n data-fixed={columns ? \"true\" : undefined}\n {...(label ? { role: \"group\", \"aria-label\": label } : {})}\n >\n {children}\n </div>\n );\n}\n"],"mappings":"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","names":["useCallback","useMemo","useRef","useState","jsx","jsx","jsxs","useEffect","useMemo","useRef","useState","useEffect","useState","host","useMemo","useRef","jsx","jsxs","jsx","jsxs","useCallback","useMemo","useRef","useState","VisuallyHidden","Fragment","jsx","jsxs","useRef","useState","useMemo","useCallback","VisuallyHidden","Fragment","jsx","jsxs","useMemo","useRef","useState","useCallback","useId","useMemo","useState","Button","useId","useMemo","VisuallyHidden","jsx","jsxs","useMemo","useId","VisuallyHidden","jsx","jsx","jsxs","useMemo","useState","useId","Button","jsx"]}