@trembus/ui 0.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.
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/index.d.ts +1867 -0
- package/dist/index.js +4038 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../tokens/dist/index.js","../src/utils/cx.ts","../src/utils/refs.ts","../src/utils/Slot.tsx","../src/utils/Portal.tsx","../src/hooks/useAffordanceState.ts","../src/hooks/useReducedMotion.ts","../src/hooks/useReturnFocus.ts","../src/hooks/useFocusTrap.ts","../src/hooks/useDismissable.ts","../src/primitives/Box/Box.tsx","../src/primitives/Stack/Stack.tsx","../src/primitives/Text/Text.tsx","../src/utils/env.ts","../src/primitives/Pressable/Pressable.tsx","../src/components/Button/Button.tsx","../src/components/Badge/Badge.tsx","../src/internal/field.tsx","../src/components/Input/Input.tsx","../src/components/Dialog/Dialog.tsx","../src/components/IconButton/IconButton.tsx","../src/components/Tabs/Tabs.tsx","../src/components/Menu/Menu.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Select/Select.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/RadioGroup/RadioGroup.tsx","../src/components/Switch/Switch.tsx","../src/components/Tooltip/Tooltip.tsx","../src/components/ToastProvider/ToastProvider.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Spinner/Spinner.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/Card/Card.tsx","../src/internal/fillbar.tsx","../src/components/Progress/Progress.tsx","../src/components/Meter/Meter.tsx","../src/components/Sparkline/Sparkline.tsx","../src/components/Stat/Stat.tsx","../src/components/Table/Table.tsx","../src/components/Hub/Hub.tsx","../src/components/Brief/Brief.tsx","../src/components/BarChart/BarChart.tsx","../src/components/LineChart/LineChart.tsx","../src/components/Gauge/Gauge.tsx","../src/components/DonutChart/DonutChart.tsx","../src/components/Heatmap/Heatmap.tsx","../src/components/Funnel/Funnel.tsx","../src/components/Treemap/Treemap.tsx","../src/components/Swimlane/Swimlane.tsx","../src/components/RunHistory/RunHistory.tsx","../src/components/Callout/Callout.tsx","../src/components/EmptyState/EmptyState.tsx","../src/components/DataStatusBar/DataStatusBar.tsx","../src/components/Timeline/Timeline.tsx"],"sourcesContent":["const c = {\n color: {\n bg: \"var(--tcl-bg)\",\n surface: \"var(--tcl-surface)\",\n surfaceRaised: \"var(--tcl-surface-raised)\",\n surfaceSunken: \"var(--tcl-surface-sunken)\",\n surfaceHover: \"var(--tcl-surface-hover)\",\n overlay: \"var(--tcl-overlay)\",\n border: \"var(--tcl-border)\",\n borderSoft: \"var(--tcl-border-soft)\",\n borderStrong: \"var(--tcl-border-strong)\",\n text: \"var(--tcl-text)\",\n textDim: \"var(--tcl-text-dim)\",\n textFaint: \"var(--tcl-text-faint)\",\n accent: \"var(--tcl-accent)\",\n accentHover: \"var(--tcl-accent-hover)\",\n accentActive: \"var(--tcl-accent-active)\",\n accentFg: \"var(--tcl-accent-fg)\",\n focusRing: \"var(--tcl-focus-ring)\"\n },\n /** The color-coded ontology — each tone resolves a base / bg / fg triad. */\n status: (t) => ({\n base: `var(--tcl-status-${t})`,\n bg: `var(--tcl-status-${t}-bg)`,\n fg: `var(--tcl-status-${t}-fg)`\n }),\n font: {\n sans: \"var(--tcl-font-sans)\",\n mono: \"var(--tcl-font-mono)\",\n display: \"var(--tcl-font-display)\"\n },\n fontSize: (t) => `var(--tcl-text-${t})`,\n radius: (t) => `var(--tcl-radius-${t})`,\n space: (t) => `var(--tcl-space-${t})`,\n z: (t) => `var(--tcl-z-${t})`,\n elevation: (t) => `var(--tcl-elevation-${t})`,\n motion: {\n easeCalm: \"var(--tcl-ease-calm)\",\n easeExit: \"var(--tcl-ease-exit)\",\n durFast: \"var(--tcl-dur-fast)\",\n durBase: \"var(--tcl-dur-base)\",\n durSlow: \"var(--tcl-dur-slow)\"\n }\n}, a = {\n accent: \"var(--tcl-accent)\",\n info: \"var(--tcl-status-info)\",\n success: \"var(--tcl-status-success)\",\n warning: \"var(--tcl-status-warning)\",\n danger: \"var(--tcl-status-danger)\",\n neutral: \"var(--tcl-status-neutral)\"\n}, r = {\n accent: \"var(--tcl-accent-fg)\",\n info: \"var(--tcl-status-info-fg)\",\n success: \"var(--tcl-status-success-fg)\",\n warning: \"var(--tcl-status-warning-fg)\",\n danger: \"var(--tcl-status-danger-fg)\",\n neutral: \"var(--tcl-status-neutral-fg)\"\n};\nfunction e(t) {\n return a[t];\n}\nfunction s(t) {\n return r[t];\n}\nexport {\n c as tokens,\n s as toneFg,\n e as toneVar\n};\n//# sourceMappingURL=index.js.map\n","export type ClassValue = string | number | false | null | undefined;\n\n/** Tiny className combiner — filters falsy values and joins with spaces. */\nexport function cx(...values: ClassValue[]): string {\n return values.filter(Boolean).join(' ');\n}\n","import { useCallback } from 'react';\nimport type { Ref, RefCallback } from 'react';\n\n/** Assign a value to a callback or object ref. */\nexport function setRef<T>(ref: Ref<T> | undefined, value: T | null): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n (ref as { current: T | null }).current = value;\n }\n}\n\n/** Combine multiple refs into one callback ref. */\nexport function composeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (node) => {\n for (const ref of refs) setRef(ref, node);\n };\n}\n\n/** Memoized {@link composeRefs} for use inside components. */\nexport function useComposedRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n return useCallback(composeRefs(...refs), refs);\n}\n","import { Children, cloneElement, isValidElement } from 'react';\nimport type { CSSProperties, HTMLAttributes, ReactElement, ReactNode, Ref } from 'react';\nimport { composeRefs } from './refs';\n\ntype AnyProps = Record<string, unknown>;\n\nfunction mergeProps(slotProps: AnyProps, childProps: AnyProps): AnyProps {\n const merged: AnyProps = { ...childProps };\n for (const key in slotProps) {\n const slotValue = slotProps[key];\n const childValue = childProps[key];\n const isHandler = /^on[A-Z]/.test(key);\n if (isHandler && typeof slotValue === 'function') {\n // Compose: run the child's handler first, then the slot's.\n merged[key] =\n typeof childValue === 'function'\n ? (...args: unknown[]) => {\n (childValue as (...a: unknown[]) => unknown)(...args);\n (slotValue as (...a: unknown[]) => unknown)(...args);\n }\n : slotValue;\n } else if (key === 'style') {\n merged[key] = { ...(childValue as CSSProperties), ...(slotValue as CSSProperties) };\n } else if (key === 'className') {\n merged[key] = [childValue, slotValue].filter(Boolean).join(' ');\n } else {\n merged[key] = slotValue;\n }\n }\n return merged;\n}\n\nexport interface SlotProps extends HTMLAttributes<HTMLElement> {\n children?: ReactNode;\n ref?: Ref<HTMLElement>;\n}\n\n/**\n * Lends its props/behavior to its single child element instead of rendering a\n * wrapper node (the `asChild` pattern). Event handlers compose, className and\n * style merge, refs combine.\n */\nexport function Slot({ children, ref, ...slotProps }: SlotProps): ReactElement | null {\n if (!isValidElement(children)) {\n if (Children.count(children) > 1) {\n throw new Error('Slot (asChild) expects exactly one React element child.');\n }\n return null;\n }\n\n const child = children as ReactElement<AnyProps>;\n const childProps = child.props as AnyProps;\n const merged = mergeProps(slotProps as AnyProps, childProps);\n\n const childRef = childProps.ref as Ref<unknown> | undefined;\n if (ref || childRef) {\n merged.ref = composeRefs(ref as Ref<unknown>, childRef);\n }\n\n return cloneElement(child, merged);\n}\n","import type { ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\n\nexport interface PortalProps {\n children: ReactNode;\n /** Mount target. Defaults to `document.body`. */\n container?: HTMLElement | null;\n}\n\n/**\n * Renders children into a DOM node outside the React tree (defaults to\n * `document.body`). Rendered synchronously so a parent's focus/measure effects\n * see the mounted content on the same commit. Returns null during SSR.\n */\nexport function Portal({ children, container }: PortalProps): ReactNode {\n if (typeof document === 'undefined') return null;\n const target = container ?? document.body;\n return createPortal(children, target);\n}\n","import { useCallback, useState } from 'react';\nimport type {\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n PointerEventHandler,\n SyntheticEvent,\n} from 'react';\n\n/**\n * The Affordance state machine — the SINGLE source of interaction state for the\n * whole library (the vault primitive: an input-accepting region with an\n * idle → hover → pressed → focus → disabled machine). Every interactive\n * component consumes this so feedback (Job #3, Acknowledge Input) is structural,\n * not re-implemented per component. CSS targets the emitted `[data-state]`.\n */\nexport type AffordanceState = 'idle' | 'hover' | 'pressed' | 'focus-visible' | 'disabled';\n\nexport interface UseAffordanceStateOptions {\n disabled?: boolean;\n loading?: boolean;\n /** Activation callback — fires on click and native keyboard activation. */\n onPress?: (event: SyntheticEvent) => void;\n}\n\nexport interface AffordanceHandlers {\n onPointerEnter: PointerEventHandler;\n onPointerLeave: PointerEventHandler;\n onPointerDown: PointerEventHandler;\n onPointerUp: PointerEventHandler;\n onKeyDown: KeyboardEventHandler;\n onKeyUp: KeyboardEventHandler;\n onFocus: FocusEventHandler;\n onBlur: FocusEventHandler;\n onClick: MouseEventHandler;\n}\n\nexport interface AffordanceDataAttrs {\n 'data-state': AffordanceState;\n 'aria-disabled'?: true;\n 'aria-busy'?: true;\n}\n\nexport interface UseAffordanceStateReturn {\n state: AffordanceState;\n handlers: AffordanceHandlers;\n dataAttrs: AffordanceDataAttrs;\n}\n\nconst ACTIVATION_KEYS = new Set([' ', 'Enter', 'Spacebar']);\n\nexport function useAffordanceState(\n options: UseAffordanceStateOptions = {},\n): UseAffordanceStateReturn {\n const { disabled = false, loading = false, onPress } = options;\n const inactive = disabled || loading;\n\n const [hover, setHover] = useState(false);\n const [pressed, setPressed] = useState(false);\n const [focusVisible, setFocusVisible] = useState(false);\n\n const state: AffordanceState = inactive\n ? 'disabled'\n : pressed\n ? 'pressed'\n : focusVisible\n ? 'focus-visible'\n : hover\n ? 'hover'\n : 'idle';\n\n const onPointerEnter = useCallback<PointerEventHandler>(() => setHover(true), []);\n const onPointerLeave = useCallback<PointerEventHandler>(() => {\n setHover(false);\n setPressed(false);\n }, []);\n const onPointerDown = useCallback<PointerEventHandler>(\n (e) => {\n if (inactive) return;\n // Only primary pointer.\n if ('button' in e && e.button !== 0) return;\n setPressed(true);\n },\n [inactive],\n );\n const onPointerUp = useCallback<PointerEventHandler>(() => setPressed(false), []);\n\n const onKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n if (inactive) return;\n if (ACTIVATION_KEYS.has(e.key)) setPressed(true);\n },\n [inactive],\n );\n const onKeyUp = useCallback<KeyboardEventHandler>((e) => {\n if (ACTIVATION_KEYS.has(e.key)) setPressed(false);\n }, []);\n\n const onFocus = useCallback<FocusEventHandler>((e) => {\n // Mirror :focus-visible — only show the ring for keyboard/programmatic focus.\n if (e.target.matches?.(':focus-visible')) setFocusVisible(true);\n }, []);\n const onBlur = useCallback<FocusEventHandler>(() => {\n setFocusVisible(false);\n setPressed(false);\n }, []);\n\n const onClick = useCallback<MouseEventHandler>(\n (e) => {\n if (inactive) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n // Native <button>/<a> already translate Enter/Space into a click, so a\n // single onClick covers pointer + keyboard activation without double-firing.\n onPress?.(e);\n },\n [inactive, onPress],\n );\n\n const dataAttrs: AffordanceDataAttrs = { 'data-state': state };\n if (inactive) dataAttrs['aria-disabled'] = true;\n if (loading) dataAttrs['aria-busy'] = true;\n\n return {\n state,\n handlers: {\n onPointerEnter,\n onPointerLeave,\n onPointerDown,\n onPointerUp,\n onKeyDown,\n onKeyUp,\n onFocus,\n onBlur,\n onClick,\n },\n dataAttrs,\n };\n}\n","import { useEffect, useState } from 'react';\n\n/** Tracks the user's `prefers-reduced-motion` setting, reactively. */\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n const mq = window.matchMedia('(prefers-reduced-motion: reduce)');\n setReduced(mq.matches);\n const onChange = (): void => setReduced(mq.matches);\n mq.addEventListener('change', onChange);\n return () => mq.removeEventListener('change', onChange);\n }, []);\n\n return reduced;\n}\n","import { useEffect, useRef } from 'react';\n\n/**\n * When `active` becomes true, remembers the currently focused element and\n * restores focus to it when `active` goes false / the component unmounts.\n */\nexport function useReturnFocus(active: boolean): void {\n const previous = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!active) return;\n previous.current = (document.activeElement as HTMLElement | null) ?? null;\n return () => {\n previous.current?.focus?.();\n };\n }, [active]);\n}\n","import { useEffect, useRef } from 'react';\nimport type { RefObject } from 'react';\n\nconst FOCUSABLE = [\n 'a[href]',\n 'button:not([disabled])',\n 'textarea:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Traps Tab focus within the returned container ref while `active`. On\n * activation, moves focus to the first focusable element (or the container).\n * The container should carry `tabIndex={-1}` so it can receive focus.\n */\nexport function useFocusTrap<T extends HTMLElement = HTMLElement>(\n active: boolean,\n): RefObject<T | null> {\n const ref = useRef<T>(null);\n\n useEffect(() => {\n if (!active) return;\n const node = ref.current;\n if (!node) return;\n\n const getFocusable = (): HTMLElement[] =>\n Array.from(node.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => !el.hasAttribute('hidden') && el.getAttribute('aria-hidden') !== 'true',\n );\n\n const initial = getFocusable();\n (initial[0] ?? node).focus();\n\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.key !== 'Tab') return;\n const items = getFocusable();\n if (items.length === 0) {\n e.preventDefault();\n node.focus();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n const activeEl = document.activeElement;\n if (e.shiftKey && activeEl === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && activeEl === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n node.addEventListener('keydown', onKeyDown);\n return () => node.removeEventListener('keydown', onKeyDown);\n }, [active]);\n\n return ref;\n}\n","import { useEffect } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDismissableOptions {\n enabled?: boolean;\n /** Fires on Escape or a pointer press outside `ref`. */\n onDismiss: () => void;\n ref: RefObject<HTMLElement | null>;\n}\n\n/** Calls `onDismiss` on Escape or an outside pointer-down. */\nexport function useDismissable({ enabled = true, onDismiss, ref }: UseDismissableOptions): void {\n useEffect(() => {\n if (!enabled) return;\n\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') onDismiss();\n };\n const onPointerDown = (e: PointerEvent): void => {\n const node = ref.current;\n if (node && !node.contains(e.target as Node)) onDismiss();\n };\n\n document.addEventListener('keydown', onKeyDown);\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n document.removeEventListener('pointerdown', onPointerDown, true);\n };\n }, [enabled, onDismiss, ref]);\n}\n","import type { CSSProperties, ElementType, ReactNode } from 'react';\nimport type { PolymorphicComponentPropsWithRef } from '../../types/polymorphic';\nimport type {\n MaterialTone,\n RadiusToken,\n SpaceToken,\n SurfaceTone,\n ZToken,\n} from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Box.css';\n\n/**\n * `Box` — the Surface primitive (and carrier of Marks). A bounded region with\n * padding, an optional surface treatment, radius, border, and z-layer. Spacing\n * is expressed only in token steps, never raw px, so the \"bounded region\"\n * abstraction stays honest. Polymorphic via `as`.\n */\nexport interface BoxOwnProps {\n surface?: SurfaceTone;\n /** Material skin (e.g. frosted `glass`) applied via [data-material]; tune with the --tcl-mat-* knobs. */\n material?: MaterialTone;\n radius?: RadiusToken;\n border?: boolean | 'soft' | 'strong';\n z?: ZToken;\n p?: SpaceToken;\n px?: SpaceToken;\n py?: SpaceToken;\n pt?: SpaceToken;\n pr?: SpaceToken;\n pb?: SpaceToken;\n pl?: SpaceToken;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nexport type BoxProps<C extends ElementType = 'div'> = PolymorphicComponentPropsWithRef<\n C,\n BoxOwnProps\n>;\n\nconst sp = (v: SpaceToken | undefined): string | undefined =>\n v === undefined ? undefined : `var(--tcl-space-${v})`;\n\n/** Resolves the layout props of a Box into a style object (exported for reuse). */\nexport function buildBoxStyle(props: BoxOwnProps): CSSProperties {\n const style: CSSProperties = {};\n const { p, px, py, pt, pr, pb, pl, radius, z } = props;\n const top = pt ?? py ?? p;\n const right = pr ?? px ?? p;\n const bottom = pb ?? py ?? p;\n const left = pl ?? px ?? p;\n if ([top, right, bottom, left].some((v) => v !== undefined)) {\n style.padding = `${sp(top) ?? '0'} ${sp(right) ?? '0'} ${sp(bottom) ?? '0'} ${sp(left) ?? '0'}`;\n }\n if (radius) style.borderRadius = `var(--tcl-radius-${radius})`;\n if (z) style.zIndex = `var(--tcl-z-${z})` as unknown as number;\n return style;\n}\n\nexport function Box<C extends ElementType = 'div'>(props: BoxProps<C>) {\n const {\n as,\n surface = 'none',\n material,\n radius,\n border,\n z,\n p,\n px,\n py,\n pt,\n pr,\n pb,\n pl,\n className,\n style,\n ...rest\n } = props as BoxOwnProps & { as?: ElementType } & Record<string, unknown>;\n\n const Component = (as ?? 'div') as ElementType;\n const boxStyle = buildBoxStyle({ p, px, py, pt, pr, pb, pl, radius, z });\n\n const classes = cx(\n 'tcl-box',\n surface !== 'none' && `tcl-box--surface-${surface}`,\n border === true && 'tcl-box--border',\n border === 'soft' && 'tcl-box--border-soft',\n border === 'strong' && 'tcl-box--border-strong',\n className,\n );\n\n return (\n <Component\n className={classes}\n data-material={material}\n style={{ ...boxStyle, ...style }}\n {...rest}\n />\n );\n}\n","import type { CSSProperties, ElementType } from 'react';\nimport type { PolymorphicComponentPropsWithRef } from '../../types/polymorphic';\nimport type { SpaceToken } from '../../tokens/tokens.types';\nimport { Box } from '../Box/Box';\nimport type { BoxOwnProps, BoxProps } from '../Box/Box';\n\n/**\n * `Stack` / `Inline` — the Relation primitive (order + grouping made visual).\n * Thin flex layers over `Box`: `Stack` stacks vertically, `Inline` flows\n * horizontally. Both inherit every `Box` prop (`as`, surface, padding…).\n */\ntype Align = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\ntype Justify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';\n\nexport interface StackOwnProps extends BoxOwnProps {\n gap?: SpaceToken;\n align?: Align;\n justify?: Justify;\n wrap?: boolean;\n}\n\nexport type StackProps<C extends ElementType = 'div'> = PolymorphicComponentPropsWithRef<\n C,\n StackOwnProps\n>;\n\nconst ALIGN: Record<Align, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n stretch: 'stretch',\n baseline: 'baseline',\n};\n\nconst JUSTIFY: Record<Justify, string> = {\n start: 'flex-start',\n center: 'center',\n end: 'flex-end',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n};\n\nfunction renderFlex(direction: 'row' | 'column', props: StackOwnProps & Record<string, unknown>) {\n const { gap, align, justify, wrap, style, ...rest } = props;\n const flexStyle: CSSProperties = {\n display: 'flex',\n flexDirection: direction,\n ...(gap !== undefined ? { gap: `var(--tcl-space-${gap})` } : {}),\n ...(align ? { alignItems: ALIGN[align] } : {}),\n ...(justify ? { justifyContent: JUSTIFY[justify] } : {}),\n ...(wrap ? { flexWrap: 'wrap' as const } : {}),\n };\n return <Box {...(rest as BoxProps<'div'>)} style={{ ...flexStyle, ...(style as CSSProperties) }} />;\n}\n\nexport function Stack<C extends ElementType = 'div'>(props: StackProps<C>) {\n return renderFlex('column', props as StackOwnProps & Record<string, unknown>);\n}\n\nexport function Inline<C extends ElementType = 'div'>(props: StackProps<C>) {\n return renderFlex('row', props as StackOwnProps & Record<string, unknown>);\n}\n","import type { CSSProperties, ElementType, ReactNode } from 'react';\nimport type { PolymorphicComponentPropsWithRef } from '../../types/polymorphic';\nimport type { FontWeightToken, TextTone, TypeToken } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Text.css';\n\n/**\n * `Text` — the Mark primitive. It draws glyphs; *meaning* comes from `as`\n * (`h1` means heading, `label` means label). So the \"what's drawn vs what it\n * means\" split is literally `size`/`weight`/`tone` (drawn) vs `as` (meaning).\n */\nconst WEIGHT: Record<FontWeightToken, string> = {\n regular: 'var(--tcl-weight-regular)',\n medium: 'var(--tcl-weight-medium)',\n semibold: 'var(--tcl-weight-semibold)',\n bold: 'var(--tcl-weight-bold)',\n};\n\nfunction toneColor(tone: TextTone): string {\n switch (tone) {\n case 'default':\n return 'var(--tcl-text)';\n case 'dim':\n return 'var(--tcl-text-dim)';\n case 'faint':\n return 'var(--tcl-text-faint)';\n case 'accent':\n return 'var(--tcl-accent)';\n default:\n return `var(--tcl-status-${tone})`;\n }\n}\n\nexport interface TextOwnProps {\n size?: TypeToken;\n weight?: FontWeightToken;\n tone?: TextTone;\n mono?: boolean;\n truncate?: boolean;\n align?: 'start' | 'center' | 'end';\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nexport type TextProps<C extends ElementType = 'span'> = PolymorphicComponentPropsWithRef<\n C,\n TextOwnProps\n>;\n\nexport function Text<C extends ElementType = 'span'>(props: TextProps<C>) {\n const {\n as,\n size,\n weight,\n tone = 'default',\n mono,\n truncate,\n align,\n className,\n style,\n ...rest\n } = props as TextOwnProps & { as?: ElementType } & Record<string, unknown>;\n\n const Component = (as ?? 'span') as ElementType;\n const textStyle: CSSProperties = {\n color: toneColor(tone),\n ...(size ? { fontSize: `var(--tcl-text-${size})` } : {}),\n ...(weight ? { fontWeight: WEIGHT[weight] as unknown as number } : {}),\n ...(align ? { textAlign: align } : {}),\n };\n\n const classes = cx(\n 'tcl-text',\n mono && 'tcl-text--mono',\n truncate && 'tcl-text--truncate',\n className,\n );\n\n return <Component className={classes} style={{ ...textStyle, ...style }} {...rest} />;\n}\n","/**\n * True in development. Resolved from Vite's `import.meta.env.DEV`, so it is\n * statically replaced to `false` in the published bundle (dev warnings strip\n * out, exactly like React's own). Falls back to `false` on non-Vite tooling.\n */\nexport const isDev: boolean = (() => {\n try {\n return Boolean((import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV);\n } catch {\n return false;\n }\n})();\n","import type { CSSProperties, ElementType, ReactNode } from 'react';\nimport type { PolymorphicComponentPropsWithRef } from '../../types/polymorphic';\nimport { useAffordanceState } from '../../hooks/useAffordanceState';\nimport type { UseAffordanceStateOptions } from '../../hooks/useAffordanceState';\nimport { Slot } from '../../utils/Slot';\nimport { cx } from '../../utils/cx';\nimport { isDev } from '../../utils/env';\nimport './Pressable.css';\n\n/**\n * `Pressable` — the Affordance primitive. The one interactive element every\n * clickable component composes from. It owns the Affordance state machine\n * (via `useAffordanceState`), guarantees a focus ring + `data-state` feedback\n * (Job #3), and defaults to a real `<button>` so capability is never invisible\n * (Job #2). Use `asChild` to lend its behavior to an existing interactive\n * element with no extra DOM.\n */\nexport interface PressableOwnProps extends UseAffordanceStateOptions {\n asChild?: boolean;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nexport type PressableProps<C extends ElementType = 'button'> = PolymorphicComponentPropsWithRef<\n C,\n PressableOwnProps\n>;\n\nexport function Pressable<C extends ElementType = 'button'>(props: PressableProps<C>) {\n const { as, asChild, disabled, loading, onPress, className, ...rest } = props as PressableOwnProps & {\n as?: ElementType;\n } & Record<string, unknown>;\n\n const { handlers, dataAttrs } = useAffordanceState({ disabled, loading, onPress });\n\n const Component: ElementType = asChild ? Slot : ((as ?? 'button') as ElementType);\n const classes = cx('tcl-pressable', className);\n\n const elementProps: Record<string, unknown> = {\n className: classes,\n ...handlers,\n ...dataAttrs,\n ...rest,\n };\n\n if (!asChild && Component === 'button') {\n elementProps.type = (rest.type as string | undefined) ?? 'button';\n elementProps.disabled = Boolean(disabled || loading);\n // The native `disabled` attribute supersedes aria-disabled.\n delete elementProps['aria-disabled'];\n }\n\n if (isDev && !asChild) {\n const tag = typeof Component === 'string' ? Component : '';\n if (tag && tag !== 'button' && tag !== 'a') {\n console.warn(\n `[Pressable] Rendering as <${tag}> risks an invisible or unreachable affordance. ` +\n 'Prefer <button>, <a href>, or asChild with a real interactive element.',\n );\n }\n }\n\n return <Component {...elementProps} />;\n}\n","import type { ReactNode, Ref, SyntheticEvent } from 'react';\nimport { Pressable } from '../../primitives/Pressable/Pressable';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Button.css';\n\nexport type ButtonTone = 'accent' | StatusTone;\n\nexport interface ButtonProps {\n variant?: 'solid' | 'outline' | 'ghost';\n /** Intent — maps to the color-coded ontology. */\n tone?: ButtonTone;\n size?: 'sm' | 'md' | 'lg';\n loading?: boolean;\n disabled?: boolean;\n fullWidth?: boolean;\n /** Lend Button's style + behavior to your own element (single child). */\n asChild?: boolean;\n startSlot?: ReactNode;\n endSlot?: ReactNode;\n onPress?: (event: SyntheticEvent) => void;\n type?: 'button' | 'submit' | 'reset';\n className?: string;\n children?: ReactNode;\n /** Forwarded to the underlying <button> (or the asChild element). */\n ref?: Ref<HTMLButtonElement>;\n 'aria-label'?: string;\n}\n\nexport function Button({\n variant = 'solid',\n tone = 'accent',\n size = 'md',\n loading = false,\n disabled = false,\n fullWidth = false,\n asChild = false,\n startSlot,\n endSlot,\n onPress,\n className,\n children,\n ...rest\n}: ButtonProps) {\n const classes = cx(\n 'tcl-button',\n `tcl-button--${variant}`,\n `tcl-button--${tone}`,\n `tcl-button--${size}`,\n fullWidth && 'tcl-button--full',\n loading && 'is-loading',\n className,\n );\n\n if (asChild) {\n // Pass-through mode: caller supplies the single element; no slots/spinner.\n return (\n <Pressable\n asChild\n className={classes}\n disabled={disabled}\n loading={loading}\n onPress={onPress}\n {...rest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <Pressable\n className={classes}\n disabled={disabled}\n loading={loading}\n onPress={onPress}\n {...rest}\n >\n {loading && <span className=\"tcl-button__spinner\" aria-hidden=\"true\" />}\n {startSlot && <span className=\"tcl-button__icon\">{startSlot}</span>}\n {children != null && <span className=\"tcl-button__label\">{children}</span>}\n {endSlot && <span className=\"tcl-button__icon\">{endSlot}</span>}\n </Pressable>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Badge.css';\n\nexport type BadgeTone = StatusTone | 'accent';\n\nexport interface BadgeProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Status/intent — the color-coded ontology. */\n tone?: BadgeTone;\n variant?: 'soft' | 'solid' | 'outline';\n size?: 'sm' | 'md';\n /** Leading status dot glyph. */\n dot?: boolean;\n children?: ReactNode;\n}\n\nexport function Badge({\n tone = 'neutral',\n variant = 'soft',\n size = 'md',\n dot = false,\n className,\n children,\n ...rest\n}: BadgeProps) {\n return (\n <span\n className={cx(\n 'tcl-badge',\n `tcl-badge--${variant}`,\n `tcl-badge--${tone}`,\n `tcl-badge--${size}`,\n className,\n )}\n {...rest}\n >\n {dot && <span className=\"tcl-badge__dot\" aria-hidden=\"true\" />}\n {children}\n </span>\n );\n}\n","import { useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { cx } from '../utils/cx';\nimport './field.css';\n\nexport interface FieldIds {\n controlId: string;\n describedBy: string | undefined;\n descId: string | undefined;\n errId: string | undefined;\n}\n\n/** Generates stable ids and the aria-describedby string for a labeled control. */\nexport function useFieldIds(\n idProp: string | undefined,\n hasDescription: boolean,\n hasError: boolean,\n): FieldIds {\n const auto = useId();\n const controlId = idProp ?? auto;\n const descId = hasDescription ? `${controlId}-desc` : undefined;\n const errId = hasError ? `${controlId}-err` : undefined;\n const describedBy = [descId, errId].filter(Boolean).join(' ') || undefined;\n return { controlId, describedBy, descId, errId };\n}\n\nexport interface FieldShellProps {\n label?: string;\n description?: string;\n error?: string;\n required?: boolean;\n htmlFor: string;\n descId?: string;\n errId?: string;\n className?: string;\n /** The control (input / textarea / select wrapper). */\n children: ReactNode;\n}\n\n/**\n * Shared field chrome — label, description, control, and a live error message.\n * The single source of truth for labeled-control layout (Input/Textarea/Select).\n */\nexport function FieldShell({\n label,\n description,\n error,\n required,\n htmlFor,\n descId,\n errId,\n className,\n children,\n}: FieldShellProps) {\n return (\n <div className={cx('tcl-field', className)}>\n {label && (\n <label htmlFor={htmlFor} className=\"tcl-field__label\">\n {label}\n {required && (\n <span className=\"tcl-field__req\" aria-hidden=\"true\">\n {' '}\n *\n </span>\n )}\n </label>\n )}\n {description && (\n <p id={descId} className=\"tcl-field__desc\">\n {description}\n </p>\n )}\n {children}\n {error && (\n <p id={errId} className=\"tcl-field__error\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n );\n}\n","import type { InputHTMLAttributes, ReactNode, Ref } from 'react';\nimport { FieldShell, useFieldIds } from '../../internal/field';\nimport { cx } from '../../utils/cx';\nimport './Input.css';\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n label?: string;\n description?: string;\n /** Validation message — sets aria-invalid and is announced via role=\"alert\". */\n error?: string;\n size?: 'sm' | 'md' | 'lg';\n startSlot?: ReactNode;\n endSlot?: ReactNode;\n containerClassName?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Input({\n label,\n description,\n error,\n size = 'md',\n startSlot,\n endSlot,\n id,\n className,\n containerClassName,\n disabled,\n required,\n ref,\n ...rest\n}: InputProps) {\n const { controlId, describedBy, descId, errId } = useFieldIds(id, !!description, !!error);\n\n return (\n <FieldShell\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={controlId}\n descId={descId}\n errId={errId}\n className={containerClassName}\n >\n <div\n className={cx(\n 'tcl-input',\n `tcl-input--${size}`,\n error && 'is-invalid',\n disabled && 'is-disabled',\n )}\n >\n {startSlot && <span className=\"tcl-input__slot\">{startSlot}</span>}\n <input\n id={controlId}\n ref={ref}\n className={cx('tcl-input__control', className)}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n {...rest}\n />\n {endSlot && <span className=\"tcl-input__slot\">{endSlot}</span>}\n </div>\n </FieldShell>\n );\n}\n","import { useEffect, useId } from 'react';\nimport type { ReactNode } from 'react';\nimport { Portal } from '../../utils/Portal';\nimport { useFocusTrap } from '../../hooks/useFocusTrap';\nimport { useReturnFocus } from '../../hooks/useReturnFocus';\nimport { cx } from '../../utils/cx';\nimport './Dialog.css';\n\nexport interface DialogProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n description?: string;\n children?: ReactNode;\n footer?: ReactNode;\n size?: 'sm' | 'md' | 'lg';\n closeOnOverlayClick?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n}\n\n/**\n * `Dialog` — a focus-trapped modal. Proves the portal + focus-trap + ARIA spine\n * that Tooltip/Menu/Toast/Select reuse. On open it moves focus inside, traps\n * Tab, locks scroll, and closes on Esc / overlay press; on close it returns\n * focus to the element that opened it.\n */\nexport function Dialog({\n open,\n onClose,\n title,\n description,\n children,\n footer,\n size = 'md',\n closeOnOverlayClick = true,\n closeOnEsc = true,\n className,\n}: DialogProps) {\n const titleId = useId();\n const descId = useId();\n // Capture the trigger BEFORE the trap moves focus inside, so it can be restored.\n useReturnFocus(open);\n const contentRef = useFocusTrap<HTMLDivElement>(open);\n\n // Escape to close.\n useEffect(() => {\n if (!open || !closeOnEsc) return;\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [open, closeOnEsc, onClose]);\n\n // Press outside the content to close (keyboard users use Escape).\n useEffect(() => {\n if (!open || !closeOnOverlayClick) return;\n const onPointerDown = (e: PointerEvent): void => {\n const node = contentRef.current;\n if (node && !node.contains(e.target as Node)) onClose();\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [open, closeOnOverlayClick, onClose, contentRef]);\n\n // Lock background scroll while open.\n useEffect(() => {\n if (!open) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => {\n document.body.style.overflow = previous;\n };\n }, [open]);\n\n if (!open) return null;\n\n return (\n <Portal>\n <div className=\"tcl-dialog__overlay\">\n <div\n ref={contentRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={description ? descId : undefined}\n tabIndex={-1}\n className={cx('tcl-dialog', `tcl-dialog--${size}`, className)}\n >\n {title && (\n <h2 id={titleId} className=\"tcl-dialog__title\">\n {title}\n </h2>\n )}\n {description && (\n <p id={descId} className=\"tcl-dialog__desc\">\n {description}\n </p>\n )}\n {children != null && <div className=\"tcl-dialog__body\">{children}</div>}\n {footer && <div className=\"tcl-dialog__footer\">{footer}</div>}\n </div>\n </div>\n </Portal>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Button } from '../Button/Button';\nimport type { ButtonProps } from '../Button/Button';\nimport { cx } from '../../utils/cx';\nimport { isDev } from '../../utils/env';\nimport './IconButton.css';\n\nexport interface IconButtonProps\n extends Omit<ButtonProps, 'children' | 'startSlot' | 'endSlot' | 'fullWidth'> {\n /** Required — an icon-only control must carry its own accessible name. */\n 'aria-label': string;\n /** The icon (or any single glyph node). */\n children: ReactNode;\n}\n\n/**\n * `IconButton` — a compact, square affordance for a single icon. Composes\n * `Button` (so it inherits every tone/variant), and *requires* an `aria-label`\n * because an icon has no text to name it (Job #2, Afford Action: the capability\n * must be reachable and named).\n */\nexport function IconButton({\n variant = 'ghost',\n size = 'md',\n className,\n children,\n ...rest\n}: IconButtonProps) {\n if (isDev && !rest['aria-label']) {\n console.warn('[IconButton] requires an `aria-label` to give the icon an accessible name.');\n }\n\n return (\n <Button\n variant={variant}\n size={size}\n className={cx('tcl-icon-button', `tcl-icon-button--${size}`, className)}\n {...rest}\n >\n {children}\n </Button>\n );\n}\n","import { createContext, useContext, useId, useState } from 'react';\nimport type { CSSProperties, KeyboardEvent, ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Tabs.css';\n\ntype Orientation = 'horizontal' | 'vertical';\n\ninterface TabsContextValue {\n value: string;\n setValue: (v: string) => void;\n baseId: string;\n orientation: Orientation;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabsContext(part: string): TabsContextValue {\n const ctx = useContext(TabsContext);\n if (!ctx) throw new Error(`<Tabs.${part}> must be used within <Tabs>.`);\n return ctx;\n}\n\nexport interface TabsProps {\n /** Controlled active value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n orientation?: Orientation;\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n}\n\nfunction TabsRoot({\n value: valueProp,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n className,\n style,\n children,\n}: TabsProps) {\n const [internal, setInternal] = useState(defaultValue ?? '');\n const value = valueProp ?? internal;\n const baseId = useId();\n\n const setValue = (v: string): void => {\n if (valueProp === undefined) setInternal(v);\n onValueChange?.(v);\n };\n\n return (\n <TabsContext.Provider value={{ value, setValue, baseId, orientation }}>\n <div className={cx('tcl-tabs', `tcl-tabs--${orientation}`, className)} style={style}>\n {children}\n </div>\n </TabsContext.Provider>\n );\n}\n\nexport interface TabsListProps {\n children?: ReactNode;\n className?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n}\n\nfunction TabsList({ children, className, ...rest }: TabsListProps) {\n const { orientation } = useTabsContext('List');\n return (\n <div\n role=\"tablist\"\n aria-orientation={orientation}\n className={cx('tcl-tabs__list', className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface TabProps {\n value: string;\n disabled?: boolean;\n children?: ReactNode;\n className?: string;\n}\n\nfunction Tab({ value, disabled = false, children, className }: TabProps) {\n const { value: active, setValue, baseId, orientation } = useTabsContext('Tab');\n const selected = active === value;\n\n // Roving keyboard nav lives on the tabs (the ARIA tabs pattern), so the\n // tablist container needs no handler.\n const onKeyDown = (e: KeyboardEvent<HTMLButtonElement>): void => {\n const list = e.currentTarget.closest('[role=\"tablist\"]');\n if (!list) return;\n const tabs = Array.from(list.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])'));\n const idx = tabs.indexOf(e.currentTarget);\n if (idx < 0) return;\n\n const horizontal = orientation === 'horizontal';\n const nextKey = horizontal ? 'ArrowRight' : 'ArrowDown';\n const prevKey = horizontal ? 'ArrowLeft' : 'ArrowUp';\n let next = -1;\n if (e.key === nextKey) next = (idx + 1) % tabs.length;\n else if (e.key === prevKey) next = (idx - 1 + tabs.length) % tabs.length;\n else if (e.key === 'Home') next = 0;\n else if (e.key === 'End') next = tabs.length - 1;\n\n if (next >= 0) {\n e.preventDefault();\n const el = tabs[next];\n el.focus();\n if (el.dataset.value !== undefined) setValue(el.dataset.value);\n }\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n id={`${baseId}-tab-${value}`}\n aria-selected={selected}\n aria-controls={`${baseId}-panel-${value}`}\n tabIndex={selected ? 0 : -1}\n data-value={value}\n data-state={selected ? 'active' : 'inactive'}\n disabled={disabled}\n className={cx('tcl-tab', selected && 'is-active', className)}\n onClick={() => setValue(value)}\n onKeyDown={onKeyDown}\n >\n {children}\n </button>\n );\n}\n\nexport interface TabsPanelProps {\n value: string;\n children?: ReactNode;\n className?: string;\n}\n\nfunction TabsPanel({ value, children, className }: TabsPanelProps) {\n const { value: active, baseId } = useTabsContext('Panel');\n const selected = active === value;\n return (\n <div\n role=\"tabpanel\"\n id={`${baseId}-panel-${value}`}\n aria-labelledby={`${baseId}-tab-${value}`}\n hidden={!selected}\n tabIndex={selected ? 0 : undefined}\n className={cx('tcl-tabpanel', className)}\n >\n {selected ? children : null}\n </div>\n );\n}\n\n/**\n * `Tabs` — accessible tabs with the ARIA tablist pattern, roving tabindex, and\n * Arrow/Home/End keyboard navigation (automatic activation). Compound API:\n * `<Tabs><Tabs.List><Tabs.Tab/></Tabs.List><Tabs.Panel/></Tabs>`.\n */\nexport const Tabs = Object.assign(TabsRoot, {\n List: TabsList,\n Tab,\n Panel: TabsPanel,\n});\n","import {\n createContext,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport type { HTMLAttributes, ReactElement, ReactNode, Ref, RefObject } from 'react';\nimport { Portal } from '../../utils/Portal';\nimport { Slot } from '../../utils/Slot';\nimport { cx } from '../../utils/cx';\nimport './Menu.css';\n\ninterface MenuContextValue {\n open: boolean;\n setOpen: (o: boolean) => void;\n triggerRef: RefObject<HTMLButtonElement | null>;\n contentRef: RefObject<HTMLDivElement | null>;\n triggerId: string;\n contentId: string;\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null);\n\nfunction useMenuContext(part: string): MenuContextValue {\n const ctx = useContext(MenuContext);\n if (!ctx) throw new Error(`<Menu.${part}> must be used within <Menu>.`);\n return ctx;\n}\n\nexport interface MenuProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nfunction MenuRoot({ open: openProp, defaultOpen = false, onOpenChange, children }: MenuProps) {\n const [internal, setInternal] = useState(defaultOpen);\n const open = openProp ?? internal;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const baseId = useId();\n\n const setOpen = (o: boolean): void => {\n if (openProp === undefined) setInternal(o);\n onOpenChange?.(o);\n };\n\n return (\n <MenuContext.Provider\n value={{\n open,\n setOpen,\n triggerRef,\n contentRef,\n triggerId: `${baseId}-trigger`,\n contentId: `${baseId}-menu`,\n }}\n >\n {children}\n </MenuContext.Provider>\n );\n}\n\nexport interface MenuTriggerProps {\n /** A single interactive element (e.g. <Button>) to act as the trigger. */\n children: ReactElement;\n}\n\nfunction MenuTrigger({ children }: MenuTriggerProps) {\n const { open, setOpen, triggerRef, triggerId, contentId } = useMenuContext('Trigger');\n return (\n <Slot\n ref={triggerRef as unknown as Ref<HTMLElement>}\n id={triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-controls={open ? contentId : undefined}\n onClick={() => setOpen(!open)}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setOpen(true);\n }\n }}\n >\n {children}\n </Slot>\n );\n}\n\nexport interface MenuContentProps extends HTMLAttributes<HTMLDivElement> {\n align?: 'start' | 'end';\n}\n\nfunction MenuContent({ align = 'start', className, children, ...rest }: MenuContentProps) {\n const { open, setOpen, triggerRef, contentRef, triggerId, contentId } = useMenuContext('Content');\n const [pos, setPos] = useState({ top: 0, left: 0, minWidth: 0 });\n\n // Position from the trigger rect (fixed → viewport coords). Track scroll/resize.\n useLayoutEffect(() => {\n if (!open) return;\n const update = (): void => {\n const t = triggerRef.current;\n if (!t) return;\n const r = t.getBoundingClientRect();\n setPos({ top: r.bottom + 4, left: align === 'end' ? r.right : r.left, minWidth: r.width });\n };\n update();\n window.addEventListener('scroll', update, true);\n window.addEventListener('resize', update);\n return () => {\n window.removeEventListener('scroll', update, true);\n window.removeEventListener('resize', update);\n };\n }, [open, align, triggerRef]);\n\n // Focus management + keyboard nav.\n useEffect(() => {\n if (!open) return;\n const content = contentRef.current;\n if (!content) return;\n const items = (): HTMLElement[] =>\n Array.from(\n content.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([aria-disabled=\"true\"])'),\n );\n items()[0]?.focus();\n\n const onKeyDown = (e: KeyboardEvent): void => {\n const list = items();\n if (list.length === 0) return;\n const idx = list.indexOf(document.activeElement as HTMLElement);\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n list[(idx + 1) % list.length]?.focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n list[(idx - 1 + list.length) % list.length]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n list[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n list[list.length - 1]?.focus();\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n } else if (e.key === 'Tab') {\n setOpen(false);\n }\n };\n content.addEventListener('keydown', onKeyDown);\n return () => content.removeEventListener('keydown', onKeyDown);\n }, [open, contentRef, setOpen, triggerRef]);\n\n // Press outside (excluding the trigger) closes.\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (e: PointerEvent): void => {\n const target = e.target as Node;\n if (contentRef.current?.contains(target) || triggerRef.current?.contains(target)) return;\n setOpen(false);\n };\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [open, contentRef, triggerRef, setOpen]);\n\n if (!open) return null;\n\n return (\n <Portal>\n <div\n ref={contentRef}\n role=\"menu\"\n id={contentId}\n aria-labelledby={triggerId}\n className={cx('tcl-menu', className)}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n minWidth: pos.minWidth,\n transform: align === 'end' ? 'translateX(-100%)' : undefined,\n }}\n {...rest}\n >\n {children}\n </div>\n </Portal>\n );\n}\n\nexport interface MenuItemProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n onSelect?: () => void;\n disabled?: boolean;\n}\n\nfunction MenuItem({ onSelect, disabled = false, className, children, ...rest }: MenuItemProps) {\n const { setOpen, triggerRef } = useMenuContext('Item');\n const activate = (): void => {\n if (disabled) return;\n onSelect?.();\n setOpen(false);\n triggerRef.current?.focus();\n };\n return (\n <div\n role=\"menuitem\"\n tabIndex={-1}\n aria-disabled={disabled || undefined}\n className={cx('tcl-menu__item', disabled && 'is-disabled', className)}\n onClick={activate}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n activate();\n }\n }}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\n/**\n * `Menu` — a dropdown menu (ARIA menu button pattern). The trigger gets\n * aria-haspopup/expanded/controls; the content renders in a portal with roving\n * focus among menuitems, and dismisses on Escape / outside-press / Tab —\n * returning focus to the trigger. Compound API:\n * `<Menu><Menu.Trigger><Button/></Menu.Trigger><Menu.Content><Menu.Item/></Menu.Content></Menu>`.\n */\nexport const Menu = Object.assign(MenuRoot, {\n Trigger: MenuTrigger,\n Content: MenuContent,\n Item: MenuItem,\n});\n","import type { Ref, TextareaHTMLAttributes } from 'react';\nimport { FieldShell, useFieldIds } from '../../internal/field';\nimport { cx } from '../../utils/cx';\nimport './Textarea.css';\n\nexport interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'size'> {\n label?: string;\n description?: string;\n /** Validation message — sets aria-invalid and is announced via role=\"alert\". */\n error?: string;\n containerClassName?: string;\n ref?: Ref<HTMLTextAreaElement>;\n}\n\nexport function Textarea({\n label,\n description,\n error,\n id,\n className,\n containerClassName,\n disabled,\n required,\n rows = 4,\n ref,\n ...rest\n}: TextareaProps) {\n const { controlId, describedBy, descId, errId } = useFieldIds(id, !!description, !!error);\n\n return (\n <FieldShell\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={controlId}\n descId={descId}\n errId={errId}\n className={containerClassName}\n >\n <textarea\n id={controlId}\n ref={ref}\n rows={rows}\n className={cx('tcl-textarea', error && 'is-invalid', className)}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n {...rest}\n />\n </FieldShell>\n );\n}\n","import type { ReactNode, Ref, SelectHTMLAttributes } from 'react';\nimport { FieldShell, useFieldIds } from '../../internal/field';\nimport { cx } from '../../utils/cx';\nimport './Select.css';\n\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n label?: string;\n description?: string;\n error?: string;\n size?: 'sm' | 'md' | 'lg';\n /** Shown as a disabled first option when no value is set. */\n placeholder?: string;\n containerClassName?: string;\n ref?: Ref<HTMLSelectElement>;\n /** <option> / <optgroup> elements. */\n children: ReactNode;\n}\n\nexport function Select({\n label,\n description,\n error,\n size = 'md',\n placeholder,\n id,\n className,\n containerClassName,\n disabled,\n required,\n ref,\n children,\n ...rest\n}: SelectProps) {\n const { controlId, describedBy, descId, errId } = useFieldIds(id, !!description, !!error);\n const isControlled = 'value' in rest || 'defaultValue' in rest;\n\n return (\n <FieldShell\n label={label}\n description={description}\n error={error}\n required={required}\n htmlFor={controlId}\n descId={descId}\n errId={errId}\n className={containerClassName}\n >\n <div\n className={cx(\n 'tcl-select',\n `tcl-select--${size}`,\n error && 'is-invalid',\n disabled && 'is-disabled',\n )}\n >\n <select\n id={controlId}\n ref={ref}\n className={cx('tcl-select__control', className)}\n disabled={disabled}\n required={required}\n aria-invalid={error ? true : undefined}\n aria-describedby={describedBy}\n defaultValue={placeholder !== undefined && !isControlled ? '' : undefined}\n {...rest}\n >\n {placeholder !== undefined && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {children}\n </select>\n <span className=\"tcl-select__chevron\" aria-hidden=\"true\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M3 4.5L6 7.5L9 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </div>\n </FieldShell>\n );\n}\n","import { useEffect, useId, useRef } from 'react';\nimport type { InputHTMLAttributes, ReactNode, Ref } from 'react';\nimport { cx } from '../../utils/cx';\nimport { useComposedRefs } from '../../utils/refs';\nimport './Checkbox.css';\n\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {\n label?: ReactNode;\n description?: string;\n /** Tri-state — shows a dash and sets the DOM `indeterminate` property. */\n indeterminate?: boolean;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Checkbox({\n label,\n description,\n indeterminate = false,\n disabled,\n className,\n id,\n ref,\n ...rest\n}: CheckboxProps) {\n const innerRef = useRef<HTMLInputElement>(null);\n const mergedRef = useComposedRefs(innerRef, ref);\n const autoId = useId();\n const inputId = id ?? autoId;\n const descId = description ? `${inputId}-desc` : undefined;\n\n useEffect(() => {\n if (innerRef.current) innerRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return (\n <div className={cx('tcl-checkbox-field', disabled && 'is-disabled', className)}>\n <label className=\"tcl-checkbox\">\n <input\n id={inputId}\n ref={mergedRef}\n type=\"checkbox\"\n className=\"tcl-checkbox__input tcl-sr-only\"\n disabled={disabled}\n aria-describedby={descId}\n {...rest}\n />\n <span className=\"tcl-checkbox__box\" aria-hidden=\"true\">\n <svg className=\"tcl-checkbox__check\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M2.5 6.5L4.8 8.8L9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n {label && <span className=\"tcl-checkbox__label\">{label}</span>}\n </label>\n {description && (\n <p id={descId} className=\"tcl-checkbox__desc\">\n {description}\n </p>\n )}\n </div>\n );\n}\n","import { createContext, useContext, useId, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport '../../internal/field.css';\nimport './RadioGroup.css';\n\ninterface RadioContextValue {\n name: string;\n value: string | undefined;\n setValue: (v: string) => void;\n}\n\nconst RadioContext = createContext<RadioContextValue | null>(null);\n\nfunction useRadioContext(): RadioContextValue {\n const ctx = useContext(RadioContext);\n if (!ctx) throw new Error('<RadioGroup.Item> must be used within <RadioGroup>.');\n return ctx;\n}\n\nexport interface RadioGroupProps {\n name?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n label?: string;\n description?: string;\n error?: string;\n className?: string;\n children?: ReactNode;\n}\n\nfunction RadioGroupRoot({\n name,\n value: valueProp,\n defaultValue,\n onValueChange,\n label,\n description,\n error,\n className,\n children,\n}: RadioGroupProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const value = valueProp ?? internal;\n const baseId = useId();\n const autoName = useId();\n const groupName = name ?? autoName;\n const labelId = label ? `${baseId}-label` : undefined;\n const descId = description ? `${baseId}-desc` : undefined;\n const errId = error ? `${baseId}-err` : undefined;\n const describedBy = [descId, errId].filter(Boolean).join(' ') || undefined;\n\n const setValue = (v: string): void => {\n if (valueProp === undefined) setInternal(v);\n onValueChange?.(v);\n };\n\n return (\n <RadioContext.Provider value={{ name: groupName, value, setValue }}>\n <div\n role=\"radiogroup\"\n aria-labelledby={labelId}\n aria-describedby={describedBy}\n className={cx('tcl-radio-group', className)}\n >\n {label && (\n <span id={labelId} className=\"tcl-field__label\">\n {label}\n </span>\n )}\n {description && (\n <p id={descId} className=\"tcl-field__desc\">\n {description}\n </p>\n )}\n <div className=\"tcl-radio-group__items\">{children}</div>\n {error && (\n <p id={errId} className=\"tcl-field__error\" role=\"alert\">\n {error}\n </p>\n )}\n </div>\n </RadioContext.Provider>\n );\n}\n\nexport interface RadioItemProps {\n value: string;\n label?: ReactNode;\n description?: string;\n disabled?: boolean;\n className?: string;\n}\n\nfunction RadioItem({ value, label, description, disabled = false, className }: RadioItemProps) {\n const ctx = useRadioContext();\n const checked = ctx.value === value;\n const baseId = useId();\n const descId = description ? `${baseId}-desc` : undefined;\n\n return (\n <div className={cx('tcl-radio-field', disabled && 'is-disabled', className)}>\n <label className=\"tcl-radio\">\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={checked}\n disabled={disabled}\n onChange={() => ctx.setValue(value)}\n className=\"tcl-radio__input tcl-sr-only\"\n aria-describedby={descId}\n />\n <span className=\"tcl-radio__dot\" aria-hidden=\"true\" />\n {label && <span className=\"tcl-radio__label\">{label}</span>}\n </label>\n {description && (\n <p id={descId} className=\"tcl-radio__desc\">\n {description}\n </p>\n )}\n </div>\n );\n}\n\n/**\n * `RadioGroup` — an accessible single-choice group (role=radiogroup). Native\n * radios share a name, so Arrow-key navigation + selection come from the\n * browser. Compound API: `<RadioGroup><RadioGroup.Item/></RadioGroup>`.\n */\nexport const RadioGroup = Object.assign(RadioGroupRoot, { Item: RadioItem });\n","import { useId } from 'react';\nimport type { InputHTMLAttributes, ReactNode, Ref } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Switch.css';\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size' | 'role'> {\n label?: ReactNode;\n description?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function Switch({ label, description, disabled, className, id, ref, ...rest }: SwitchProps) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const descId = description ? `${inputId}-desc` : undefined;\n\n return (\n <div className={cx('tcl-switch-field', disabled && 'is-disabled', className)}>\n <label className=\"tcl-switch\">\n <input\n id={inputId}\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n className=\"tcl-switch__input tcl-sr-only\"\n disabled={disabled}\n aria-describedby={descId}\n {...rest}\n />\n <span className=\"tcl-switch__track\" aria-hidden=\"true\">\n <span className=\"tcl-switch__thumb\" />\n </span>\n {label && <span className=\"tcl-switch__label\">{label}</span>}\n </label>\n {description && (\n <p id={descId} className=\"tcl-switch__desc\">\n {description}\n </p>\n )}\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from 'react';\nimport type { ReactElement, ReactNode, Ref } from 'react';\nimport { Portal } from '../../utils/Portal';\nimport { Slot } from '../../utils/Slot';\nimport { cx } from '../../utils/cx';\nimport './Tooltip.css';\n\nexport interface TooltipProps {\n content: ReactNode;\n /** A single interactive element to attach the tooltip to. */\n children: ReactElement;\n /** Delay before showing on hover (ms). Focus shows immediately. */\n openDelay?: number;\n side?: 'top' | 'bottom';\n className?: string;\n}\n\nexport function Tooltip({ content, children, openDelay = 400, side = 'top', className }: TooltipProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState({ top: 0, left: 0 });\n const triggerRef = useRef<HTMLElement>(null);\n const timer = useRef<number | undefined>(undefined);\n const id = useId();\n\n const computePos = (): void => {\n const t = triggerRef.current;\n if (!t) return;\n const r = t.getBoundingClientRect();\n setPos({ top: side === 'top' ? r.top - 8 : r.bottom + 8, left: r.left + r.width / 2 });\n };\n\n const show = (): void => {\n window.clearTimeout(timer.current);\n timer.current = window.setTimeout(() => {\n computePos();\n setOpen(true);\n }, openDelay);\n };\n const showNow = (): void => {\n window.clearTimeout(timer.current);\n computePos();\n setOpen(true);\n };\n const hide = (): void => {\n window.clearTimeout(timer.current);\n setOpen(false);\n };\n\n useEffect(() => () => window.clearTimeout(timer.current), []);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') hide();\n };\n const onReflow = (): void => computePos();\n document.addEventListener('keydown', onKey);\n window.addEventListener('scroll', onReflow, true);\n window.addEventListener('resize', onReflow);\n return () => {\n document.removeEventListener('keydown', onKey);\n window.removeEventListener('scroll', onReflow, true);\n window.removeEventListener('resize', onReflow);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, side]);\n\n return (\n <>\n <Slot\n ref={triggerRef as unknown as Ref<HTMLElement>}\n aria-describedby={open ? id : undefined}\n onPointerEnter={show}\n onPointerLeave={hide}\n onFocus={showNow}\n onBlur={hide}\n >\n {children}\n </Slot>\n {open && (\n <Portal>\n <div\n role=\"tooltip\"\n id={id}\n className={cx('tcl-tooltip', `tcl-tooltip--${side}`, className)}\n style={{ position: 'fixed', top: pos.top, left: pos.left }}\n >\n {content}\n </div>\n </Portal>\n )}\n </>\n );\n}\n","import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { Portal } from '../../utils/Portal';\nimport { cx } from '../../utils/cx';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport './ToastProvider.css';\n\nexport type ToastTone = 'neutral' | StatusTone;\n\nexport interface ToastOptions {\n title: string;\n description?: string;\n tone?: ToastTone;\n /** Auto-dismiss after ms. 0 keeps it until dismissed. */\n duration?: number;\n}\n\ninterface ToastRecord extends Required<Pick<ToastOptions, 'title' | 'tone' | 'duration'>> {\n id: string;\n description?: string;\n}\n\ninterface ToastContextValue {\n toast: (opts: ToastOptions) => string;\n dismiss: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be used within <ToastProvider>.');\n return ctx;\n}\n\nlet toastCounter = 0;\n\nexport interface ToastProviderProps {\n children: ReactNode;\n /** Default auto-dismiss duration (ms). */\n duration?: number;\n placement?: 'top' | 'bottom';\n}\n\nexport function ToastProvider({ children, duration = 5000, placement = 'bottom' }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastRecord[]>([]);\n\n const dismiss = useCallback((id: string) => {\n setToasts((list) => list.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (opts: ToastOptions) => {\n toastCounter += 1;\n const id = `tcl-toast-${toastCounter}`;\n setToasts((list) => [\n ...list,\n { id, tone: 'neutral', duration, ...opts },\n ]);\n return id;\n },\n [duration],\n );\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n <Portal>\n <div\n className={cx('tcl-toast-viewport', `tcl-toast-viewport--${placement}`)}\n role=\"region\"\n aria-label=\"Notifications\"\n >\n {toasts.map((t) => (\n <ToastItem key={t.id} toast={t} onDismiss={dismiss} />\n ))}\n </div>\n </Portal>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastItem({ toast, onDismiss }: { toast: ToastRecord; onDismiss: (id: string) => void }) {\n const { id, title, description, tone, duration } = toast;\n const timer = useRef<number | undefined>(undefined);\n\n const start = useCallback(() => {\n if (!duration) return;\n timer.current = window.setTimeout(() => onDismiss(id), duration);\n }, [duration, id, onDismiss]);\n const stop = useCallback(() => window.clearTimeout(timer.current), []);\n\n useEffect(() => {\n start();\n return stop;\n }, [start, stop]);\n\n const assertive = tone === 'danger' || tone === 'warning';\n\n return (\n <div\n className={cx('tcl-toast', `tcl-toast--${tone}`)}\n role={assertive ? 'alert' : 'status'}\n aria-live={assertive ? 'assertive' : 'polite'}\n onPointerEnter={stop}\n onPointerLeave={start}\n >\n <div className=\"tcl-toast__body\">\n <p className=\"tcl-toast__title\">{title}</p>\n {description && <p className=\"tcl-toast__desc\">{description}</p>}\n </div>\n <button type=\"button\" className=\"tcl-toast__close\" aria-label=\"Dismiss\" onClick={() => onDismiss(id)}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3.5 3.5l7 7M10.5 3.5l-7 7\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { HTMLAttributes } from 'react';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Avatar.css';\n\nexport interface AvatarProps extends Omit<HTMLAttributes<HTMLSpanElement>, 'color'> {\n /** Image URL. Falls back to initials, then a glyph, on error or absence. */\n src?: string;\n /** Accessible name. Falls back to `name`. */\n alt?: string;\n /** Person/entity name — used for initials and as the accessible name. */\n name?: string;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n shape?: 'circle' | 'square';\n /** Tints the initials fallback via the color-coded ontology. */\n tone?: StatusTone;\n}\n\nfunction initialsFrom(name: string | undefined): string {\n if (!name) return '';\n const parts = name.trim().split(/\\s+/).slice(0, 2);\n return parts.map((p) => p[0]?.toUpperCase() ?? '').join('');\n}\n\nexport function Avatar({\n src,\n alt,\n name,\n size = 'md',\n shape = 'circle',\n tone = 'neutral',\n className,\n ...rest\n}: AvatarProps) {\n const [failed, setFailed] = useState(false);\n const showImage = Boolean(src) && !failed;\n const initials = initialsFrom(name);\n const label = alt ?? name ?? undefined;\n // With no identity to announce, the avatar is decorative (avoids an empty name).\n const decorative = !label;\n\n return (\n <span\n className={cx(\n 'tcl-avatar',\n `tcl-avatar--${size}`,\n `tcl-avatar--${shape}`,\n !showImage && `tcl-avatar--tone-${tone}`,\n className,\n )}\n role={decorative ? undefined : 'img'}\n aria-label={label}\n aria-hidden={decorative || undefined}\n {...rest}\n >\n {showImage ? (\n <img className=\"tcl-avatar__img\" src={src} alt=\"\" onError={() => setFailed(true)} />\n ) : initials ? (\n <span className=\"tcl-avatar__initials\" aria-hidden=\"true\">\n {initials}\n </span>\n ) : (\n <svg className=\"tcl-avatar__fallback\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 12a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm0 2c-4.4 0-8 2.7-8 6v1h16v-1c0-3.3-3.6-6-8-6Z\" />\n </svg>\n )}\n </span>\n );\n}\n","import type { HTMLAttributes } from 'react';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Spinner.css';\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: 'sm' | 'md' | 'lg' | 'xl';\n /** `current` inherits the surrounding text color. */\n tone?: 'current' | 'accent' | StatusTone;\n /** Screen-reader label announced while busy. */\n label?: string;\n}\n\nexport function Spinner({\n size = 'md',\n tone = 'current',\n label = 'Loading',\n className,\n ...rest\n}: SpinnerProps) {\n return (\n <span\n className={cx('tcl-spinner', `tcl-spinner--${size}`, `tcl-spinner--tone-${tone}`, className)}\n role=\"status\"\n {...rest}\n >\n <span className=\"tcl-spinner__ring\" aria-hidden=\"true\" />\n <span className=\"tcl-sr-only\">{label}</span>\n </span>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Skeleton.css';\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: 'text' | 'rect' | 'circle';\n width?: number | string;\n height?: number | string;\n /** For variant=\"text\": number of lines (the last is shortened). */\n lines?: number;\n}\n\nconst dim = (v: number | string | undefined): string | undefined =>\n typeof v === 'number' ? `${v}px` : v;\n\n/**\n * `Skeleton` — a decorative loading placeholder (aria-hidden). The shimmer\n * respects prefers-reduced-motion. Set `aria-busy` on the container that\n * swaps it for real content.\n */\nexport function Skeleton({\n variant = 'rect',\n width,\n height,\n lines = 1,\n className,\n style,\n ...rest\n}: SkeletonProps) {\n if (variant === 'text' && lines > 1) {\n return (\n <span className={cx('tcl-skeleton-group', className)} aria-hidden=\"true\" {...rest}>\n {Array.from({ length: lines }).map((_, i) => (\n <span\n key={i}\n className=\"tcl-skeleton tcl-skeleton--text\"\n style={{ width: i === lines - 1 ? '60%' : '100%' }}\n />\n ))}\n </span>\n );\n }\n\n const mergedStyle: CSSProperties = { width: dim(width), height: dim(height), ...style };\n return (\n <span\n className={cx('tcl-skeleton', `tcl-skeleton--${variant}`, className)}\n style={mergedStyle}\n aria-hidden=\"true\"\n {...rest}\n />\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Card.css';\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Adds a hover affordance (pair with an interactive child or wrap in a link). */\n interactive?: boolean;\n}\n\nfunction CardRoot({ interactive = false, className, children, ...rest }: CardProps) {\n return (\n <div\n className={cx('tcl-card', interactive && 'tcl-card--interactive', className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface CardSectionProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nfunction CardHeader({ className, children, ...rest }: CardSectionProps) {\n return (\n <div className={cx('tcl-card__header', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nfunction CardBody({ className, children, ...rest }: CardSectionProps) {\n return (\n <div className={cx('tcl-card__body', className)} {...rest}>\n {children}\n </div>\n );\n}\n\nfunction CardFooter({ className, children, ...rest }: CardSectionProps) {\n return (\n <div className={cx('tcl-card__footer', className)} {...rest}>\n {children}\n </div>\n );\n}\n\n/**\n * `Card` — a raised surface that groups related content into one perceivable\n * unit. Compound API: `<Card><Card.Header/><Card.Body/><Card.Footer/></Card>`.\n */\nexport const Card = Object.assign(CardRoot, {\n Header: CardHeader,\n Body: CardBody,\n Footer: CardFooter,\n});\n","import type { CSSProperties, ReactNode } from 'react';\nimport { cx } from '../utils/cx';\nimport './fillbar.css';\n\nexport type FillBarTone = 'accent' | 'info' | 'success' | 'warning' | 'danger' | 'neutral';\nexport type FillBarSize = 'sm' | 'md' | 'lg';\n\nconst TONE_VARS: Record<FillBarTone, string> = {\n accent: 'var(--tcl-accent)',\n info: 'var(--tcl-status-info)',\n success: 'var(--tcl-status-success)',\n warning: 'var(--tcl-status-warning)',\n danger: 'var(--tcl-status-danger)',\n neutral: 'var(--tcl-status-neutral)',\n};\n\n/** The `var(--tcl-*)` reference for a tone (for per-segment inline overrides). */\nexport function toneVar(tone: FillBarTone): string {\n return TONE_VARS[tone];\n}\n\n/** Clamp a value to a 0–100 percentage of [min, max]. */\nexport function clampPct(value: number, min: number, max: number): number {\n if (max <= min) return 0;\n return Math.min(100, Math.max(0, ((value - min) / (max - min)) * 100));\n}\n\n/** Build an inline style that carries CSS custom properties safely under strict TS. */\nexport function vars(record: Record<string, string | number>, base?: CSSProperties): CSSProperties {\n return { ...(base ?? {}), ...record } as CSSProperties;\n}\n\nexport interface FillBarShellProps {\n /** ARIA role — `progressbar` (advancing) or `meter` (a measurement). */\n role: 'progressbar' | 'meter';\n value: number;\n min?: number;\n max?: number;\n valueText?: string;\n /** Accessible name (required for a meaningful screen-reader announcement). */\n ariaLabel?: string;\n showValue?: boolean;\n /** Override the right-side label (defaults to the rounded %). */\n valueLabel?: ReactNode;\n icon?: ReactNode;\n size?: FillBarSize;\n glow?: boolean;\n tone?: FillBarTone;\n /** Row class. */\n className?: string;\n /** Extra track class — variants switch the track's layout here. */\n trackClassName?: string;\n /** Variant-specific track contents (fill / cells / segments / zones). */\n children: ReactNode;\n trackStyle?: CSSProperties;\n}\n\n/**\n * Shared chrome for fill bars: an optional icon chip, the bordered track (which\n * carries the role + ARIA value), and an optional right-side value label. The\n * track's inner content is variant-specific (passed as children). Single source\n * of truth for the geometry behind both `Progress` and `Meter`.\n */\nexport function FillBarShell({\n role,\n value,\n min = 0,\n max = 100,\n valueText,\n ariaLabel,\n showValue = true,\n valueLabel,\n icon,\n size = 'md',\n glow = false,\n tone = 'accent',\n className,\n trackClassName,\n children,\n trackStyle,\n}: FillBarShellProps) {\n const pct = clampPct(value, min, max);\n return (\n <div className={cx('tcl-fillbar-row', className)}>\n {icon && (\n <span className=\"tcl-fillbar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <div\n role={role}\n aria-valuenow={Math.round(Math.min(max, Math.max(min, value)))}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={valueText}\n aria-label={ariaLabel}\n className={cx(\n 'tcl-fillbar',\n `tcl-fillbar--${size}`,\n `tcl-fillbar--${tone}`,\n glow && 'is-glow',\n trackClassName,\n )}\n style={vars({ '--value': `${pct}%` }, trackStyle)}\n >\n {children}\n </div>\n {showValue && (\n <span className=\"tcl-fillbar__value\">{valueLabel ?? `${Math.round(pct)}%`}</span>\n )}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { FillBarShell, clampPct } from '../../internal/fillbar';\nimport type { FillBarSize, FillBarTone } from '../../internal/fillbar';\nimport { cx } from '../../utils/cx';\nimport './Progress.css';\n\nexport interface ProgressProps {\n value: number;\n max?: number;\n tone?: FillBarTone;\n variant?: 'solid' | 'segments';\n /** Number of cells when `variant=\"segments\"`. */\n segments?: number;\n size?: FillBarSize;\n /** Opt-in neon HUD treatment. */\n glow?: boolean;\n showValue?: boolean;\n icon?: ReactNode;\n /** Accessible name for the progressbar. */\n label?: string;\n className?: string;\n}\n\n/**\n * `Progress` — a determinate progress bar (role=progressbar) that fills a track\n * proportional to `value / max`. Clean by default; `glow` turns on the HUD skin.\n * `variant=\"segments\"` renders discrete cells instead of a continuous fill.\n */\nexport function Progress({\n value,\n max = 100,\n tone = 'accent',\n variant = 'solid',\n segments = 10,\n size = 'md',\n glow = false,\n showValue = true,\n icon,\n label,\n className,\n}: ProgressProps) {\n const pct = clampPct(value, 0, max);\n\n let inner: ReactNode;\n if (variant === 'segments') {\n const on = Math.round((pct / 100) * segments);\n inner = Array.from({ length: segments }).map((_, i) => (\n <span key={i} className={cx('tcl-fillbar__cell', i < on && 'is-on')} />\n ));\n } else {\n inner = <span className=\"tcl-fillbar__fill\" />;\n }\n\n return (\n <FillBarShell\n role=\"progressbar\"\n value={value}\n max={max}\n ariaLabel={label}\n showValue={showValue}\n icon={icon}\n size={size}\n glow={glow}\n tone={tone}\n className={className}\n trackClassName={variant === 'segments' ? 'tcl-fillbar--segmented' : undefined}\n >\n {inner}\n </FillBarShell>\n );\n}\n","import type { ReactNode } from 'react';\nimport { FillBarShell, clampPct, toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarSize, FillBarTone } from '../../internal/fillbar';\nimport './Meter.css';\n\nexport interface MeterSegment {\n value: number;\n tone?: FillBarTone;\n label?: string;\n}\n\nexport interface MeterThreshold {\n value: number;\n tone?: FillBarTone;\n}\n\nexport interface MeterProps {\n value?: number;\n min?: number;\n max?: number;\n tone?: FillBarTone;\n variant?: 'solid' | 'stacked' | 'threshold';\n /** Proportional segments for `variant=\"stacked\"`. */\n segments?: MeterSegment[];\n /** Markers for `variant=\"threshold\"`; the fill recolors as `value` crosses them. */\n thresholds?: MeterThreshold[];\n size?: FillBarSize;\n glow?: boolean;\n showValue?: boolean;\n icon?: ReactNode;\n /** Accessible name for the meter. */\n label?: string;\n className?: string;\n}\n\n/**\n * `Meter` — a static measurement (role=meter). `solid` fills to a value;\n * `stacked` shows proportions that sum across the track; `threshold` recolors\n * the fill as the value crosses configured markers (a gauge). Clean by default;\n * `glow` turns on the HUD skin.\n */\nexport function Meter({\n value = 0,\n min = 0,\n max = 100,\n tone = 'success',\n variant = 'solid',\n segments = [],\n thresholds = [],\n size = 'md',\n glow = false,\n showValue,\n icon,\n label,\n className,\n}: MeterProps) {\n if (variant === 'stacked') {\n const total = segments.reduce((sum, s) => sum + s.value, 0);\n return (\n <FillBarShell\n role=\"meter\"\n value={total}\n min={min}\n max={max}\n ariaLabel={label}\n valueText={segments.map((s) => `${s.label ?? 'segment'}: ${s.value}`).join(', ')}\n showValue={showValue ?? false}\n icon={icon}\n size={size}\n glow={glow}\n tone={tone}\n className={className}\n trackClassName=\"tcl-fillbar--stacked\"\n >\n {segments.map((s, i) => (\n <span\n key={i}\n className=\"tcl-fillbar__seg\"\n style={vars(\n { '--seg': toneVar(s.tone ?? tone) },\n { width: `${clampPct(s.value, 0, max)}%` },\n )}\n >\n {s.label}\n </span>\n ))}\n </FillBarShell>\n );\n }\n\n if (variant === 'threshold') {\n const sorted = [...thresholds].sort((a, b) => a.value - b.value);\n let activeTone = tone;\n for (const t of sorted) if (value >= t.value) activeTone = t.tone ?? activeTone;\n return (\n <FillBarShell\n role=\"meter\"\n value={value}\n min={min}\n max={max}\n ariaLabel={label}\n showValue={showValue ?? true}\n icon={icon}\n size={size}\n glow={glow}\n tone={activeTone}\n className={className}\n trackClassName=\"tcl-fillbar--threshold\"\n >\n <span className=\"tcl-fillbar__fill\" />\n {sorted.map((t, i) => (\n <span\n key={i}\n className=\"tcl-fillbar__marker\"\n aria-hidden=\"true\"\n style={vars(\n { '--mk': toneVar(t.tone ?? 'neutral') },\n { left: `${clampPct(t.value, min, max)}%` },\n )}\n />\n ))}\n </FillBarShell>\n );\n }\n\n return (\n <FillBarShell\n role=\"meter\"\n value={value}\n min={min}\n max={max}\n ariaLabel={label}\n showValue={showValue ?? true}\n icon={icon}\n size={size}\n glow={glow}\n tone={tone}\n className={className}\n >\n <span className=\"tcl-fillbar__fill\" />\n </FillBarShell>\n );\n}\n","import { cx } from '../../utils/cx';\nimport { toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Sparkline.css';\n\n/**\n * `Sparkline` — a word-sized trend line. The series becomes a single path inside\n * a tiny fixed box so its trajectory reads at a glance; it mirrors the Trembus\n * Visual Grammar `spark` so one series draws the same in the static HTML kit and\n * in React. Presentational by design — pair it with a {@link Stat} value or a\n * table cell. `null`/non-finite entries are gaps the line skips over.\n */\nexport type SparklineTone = FillBarTone;\n\nexport interface SparklineProps {\n /** The series. `null`/`undefined`/non-finite entries are gaps the line skips. */\n values: ReadonlyArray<number | null | undefined>;\n /** Color-coded tone for the line (default `accent`). */\n tone?: SparklineTone;\n /** Explicit stroke color (hex) — overrides `tone`. */\n color?: string;\n /** Intrinsic viewBox width; CSS may stretch it (the stroke stays crisp). */\n width?: number;\n /** Intrinsic viewBox height; CSS may stretch it. */\n height?: number;\n /** Fill the area beneath the line (default `true`). */\n area?: boolean;\n /** Mark the last data point with a dot (default `true`). */\n markLast?: boolean;\n /** Force the lower bound of the y-domain so several sparklines share one scale. */\n min?: number;\n /** Force the upper bound of the y-domain. */\n max?: number;\n /**\n * Accessible name. When set, the sparkline is exposed to assistive tech as an\n * image with this label; when omitted it is decorative (`aria-hidden`).\n */\n label?: string;\n className?: string;\n}\n\ninterface Pt {\n i: number;\n v: number;\n}\n\nexport function Sparkline({\n values,\n tone = 'accent',\n color,\n width = 100,\n height = 30,\n area = true,\n markLast = true,\n min,\n max,\n label,\n className,\n}: SparklineProps) {\n const W = width;\n const H = height;\n const inset = 2;\n\n const finite: Pt[] = [];\n values.forEach((v, i) => {\n if (v != null && Number.isFinite(v)) finite.push({ i, v: v as number });\n });\n\n // y-domain: explicit bounds win; missing bounds come from the data extent\n // padded by 15%. A forced bound on the wrong side (or min > max) must never\n // invert or flatten the domain — clamp so `hi` always sits above `lo`.\n const vs = finite.map((p) => p.v);\n let dataLo = vs.length ? Math.min(...vs) : 0;\n let dataHi = vs.length ? Math.max(...vs) : 1;\n if (dataLo === dataHi) {\n const d = Math.abs(dataLo) * 0.1 + 1;\n dataLo -= d;\n dataHi += d;\n }\n const pad = (dataHi - dataLo) * 0.15;\n const lo = min ?? dataLo - pad;\n let hi = max ?? dataHi + pad;\n if (hi <= lo) hi = lo + (Math.abs(lo) * 0.1 + 1);\n const span = hi - lo;\n\n const n = values.length;\n const x = (i: number): number => (n <= 1 ? W / 2 : inset + (i / (n - 1)) * (W - 2 * inset));\n const y = (v: number): number => inset + (1 - (v - lo) / span) * (H - 2 * inset);\n\n const stroke = color ?? toneVar(tone);\n const ariaProps = label\n ? ({ role: 'img', 'aria-label': label } as const)\n : ({ 'aria-hidden': true } as const);\n\n // No data → an empty, correctly-sized box (still honors min/max layout).\n if (!finite.length) {\n return (\n <svg\n className={cx('tcl-sparkline', className)}\n width={W}\n height={H}\n viewBox={`0 0 ${W} ${H}`}\n {...ariaProps}\n />\n );\n }\n\n const linePts = finite.map((p) => `${x(p.i).toFixed(2)},${y(p.v).toFixed(2)}`).join(' ');\n const first = finite[0];\n const last = finite[finite.length - 1];\n const areaPts = `${linePts} ${x(last.i).toFixed(2)},${H} ${x(first.i).toFixed(2)},${H}`;\n\n return (\n <svg\n className={cx('tcl-sparkline', className)}\n width={W}\n height={H}\n viewBox={`0 0 ${W} ${H}`}\n preserveAspectRatio=\"none\"\n style={vars({ '--spark-color': stroke })}\n {...ariaProps}\n >\n {label && <title>{label}</title>}\n {area && finite.length > 1 && <polygon className=\"tcl-sparkline__area\" points={areaPts} />}\n {finite.length > 1 && (\n <polyline\n className=\"tcl-sparkline__line\"\n points={linePts}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n {markLast && (\n <circle\n className=\"tcl-sparkline__dot\"\n cx={x(last.i).toFixed(2)}\n cy={y(last.v).toFixed(2)}\n r={2}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport { Sparkline } from '../Sparkline/Sparkline';\nimport './Stat.css';\n\n/**\n * `Stat` — a KPI card: a labeled headline value with an optional period-over-period\n * delta, a target/context line, a status badge, and an embedded trend sparkline.\n * The signature tile of the PMO dashboard. Presentational by default; pass\n * `onSelect` or `href` to turn the whole card into a drill-in affordance.\n */\nexport type StatTone = FillBarTone;\n\nexport interface StatDelta {\n /** Signed change versus the comparison period. */\n value: number;\n /** Preformatted text (e.g. \"+1.2pp\"); defaults to the signed value. */\n text?: string;\n /**\n * When true a DECREASE is good (down = success) — for latency/lag metrics where\n * lower is better (e.g. DIRT). Default false (up = success).\n */\n invert?: boolean;\n}\n\nexport interface StatProps {\n /** Metric name (e.g. \"DIRT — avg lag\"). */\n label: string;\n /** Headline value; use \"—\" (the default) when the source isn't available. */\n value?: ReactNode;\n /** Small unit after the value (e.g. \"days\", \"%\"). */\n unit?: string;\n /** Eyebrow / category strap above the label (e.g. \"Cat 2 · Time Entry\"). */\n strap?: string;\n /** Period-over-period change, shown as a colored ▲/▼ chip. */\n delta?: StatDelta;\n /** Context line under the value (target, secondary stats). */\n target?: ReactNode;\n /** Trend series; renders an embedded sparkline strip when set. */\n trend?: ReadonlyArray<number | null | undefined>;\n /** Status pill in the top-right (e.g. a `<Badge>` \"Live\" / \"Awaiting WSC\"). */\n badge?: ReactNode;\n /** Color-coded tone for the accent rail + sparkline (default `accent`). */\n tone?: StatTone;\n /** When set, the whole card becomes a drill-in `<button>`. */\n onSelect?: () => void;\n /** When set, the card becomes a drill-in `<a>` (takes precedence over `onSelect`). */\n href?: string;\n className?: string;\n}\n\nfunction DeltaChip({ delta }: { delta: StatDelta }) {\n const { value, text, invert = false } = delta;\n const dir = value > 0 ? 'up' : value < 0 ? 'down' : 'flat';\n const semantic = dir === 'flat' ? 'flat' : (dir === 'up' ? !invert : invert) ? 'good' : 'bad';\n const arrow = dir === 'up' ? '▲' : dir === 'down' ? '▼' : '→';\n const txt = text ?? `${value > 0 ? '+' : ''}${value}`;\n const ariaTxt = txt.replace(/^\\+/, '');\n const aria = dir === 'flat' ? `no change, ${ariaTxt}` : `${dir} by ${ariaTxt}`;\n return (\n <span className={cx('tcl-stat__delta', `tcl-stat__delta--${semantic}`)} aria-label={aria}>\n <span className=\"tcl-stat__delta-arrow\" aria-hidden=\"true\">\n {arrow}\n </span>\n {txt}\n </span>\n );\n}\n\nexport function Stat({\n label,\n value = '—',\n unit,\n strap,\n delta,\n target,\n trend,\n badge,\n tone = 'accent',\n onSelect,\n href,\n className,\n}: StatProps) {\n const interactive = href != null || onSelect != null;\n const rootClassName = cx(\n 'tcl-stat',\n `tcl-stat--${tone}`,\n interactive && 'tcl-stat--interactive',\n className,\n );\n\n const inner = (\n <>\n <span className=\"tcl-stat__head\">\n <span className=\"tcl-stat__heading\">\n {strap && <span className=\"tcl-stat__strap\">{strap}</span>}\n <span className=\"tcl-stat__label\">{label}</span>\n </span>\n {badge && <span className=\"tcl-stat__badge\">{badge}</span>}\n </span>\n\n <span className=\"tcl-stat__body\">\n <span className=\"tcl-stat__value\">\n {value}\n {unit && <span className=\"tcl-stat__unit\">{unit}</span>}\n </span>\n {delta && <DeltaChip delta={delta} />}\n {target && <span className=\"tcl-stat__target\">{target}</span>}\n {trend && trend.length > 0 && (\n <Sparkline values={trend} tone={tone} className=\"tcl-stat__spark\" />\n )}\n </span>\n </>\n );\n\n if (href != null) {\n return (\n <a className={rootClassName} href={href}>\n {inner}\n </a>\n );\n }\n if (onSelect != null) {\n return (\n <button type=\"button\" className={rootClassName} onClick={onSelect}>\n {inner}\n </button>\n );\n }\n return <div className={rootClassName}>{inner}</div>;\n}\n","import {\n Children,\n cloneElement,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react';\nimport type {\n AriaAttributes,\n CSSProperties,\n HTMLAttributes,\n MouseEvent,\n ReactElement,\n ReactNode,\n TableHTMLAttributes,\n TdHTMLAttributes,\n ThHTMLAttributes,\n} from 'react';\nimport { cx } from '../../utils/cx';\nimport { Checkbox } from '../Checkbox/Checkbox';\nimport './Table.css';\n\n// ── public shared types ──────────────────────────────────────────────\nexport type SortDirection = 'asc' | 'desc';\nexport interface SortDescriptor {\n /** The `sortKey` of the currently sorted column. */\n column: string;\n direction: SortDirection;\n}\nexport type TableDensity = 'comfortable' | 'compact';\nexport type SelectionMode = 'none' | 'multiple';\nexport type CellAlign = 'start' | 'center' | 'end';\n\n// Internal prop injected into the first body cell of an interactive row so the\n// cell can host the stretched link/button (see TableRow).\ninterface PrimaryLink {\n href?: string;\n onClick?: (e: MouseEvent<HTMLElement>) => void;\n}\n\n// ── context ──────────────────────────────────────────────────────────\ninterface TableContextValue {\n density: TableDensity;\n sortDescriptor: SortDescriptor | null;\n onSortChange?: (descriptor: SortDescriptor) => void;\n selectionMode: SelectionMode;\n isSelected: (key: string) => boolean;\n toggleRow: (key: string) => void;\n registerRow: (key: string) => void;\n unregisterRow: (key: string) => void;\n allSelected: boolean;\n someSelected: boolean;\n toggleAll: () => void;\n}\n\nconst TableContext = createContext<TableContextValue | null>(null);\n\nfunction useTableContext(part: string): TableContextValue {\n const ctx = useContext(TableContext);\n if (!ctx) throw new Error(`<Table.${part}> must be used within <Table>.`);\n return ctx;\n}\n\ntype Section = 'head' | 'body' | 'foot';\nconst SectionContext = createContext<Section>('body');\n\n// ── root ─────────────────────────────────────────────────────────────\nexport interface TableProps extends Omit<TableHTMLAttributes<HTMLTableElement>, 'onSelect'> {\n /** Row padding scale. `compact` also drops the body font to `--tcl-text-sm`. */\n density?: TableDensity;\n /** Zebra-stripe the body rows. */\n striped?: boolean;\n /** Pin the header row while the body scrolls (needs `maxHeight` to scroll vertically). */\n sticky?: boolean;\n /** Caps the scroll container height; pair with `sticky` for a pinned header. */\n maxHeight?: number | string;\n /** Controlled sort state — the active column + direction. The table reflects\n * `aria-sort`; YOU reorder the data in response to `onSortChange`. */\n sortDescriptor?: SortDescriptor | null;\n onSortChange?: (descriptor: SortDescriptor) => void;\n /** `multiple` adds a checkbox column with a tri-state select-all in the head. */\n selectionMode?: SelectionMode;\n /** Controlled selection. */\n selectedKeys?: Iterable<string>;\n /** Uncontrolled initial selection. */\n defaultSelectedKeys?: Iterable<string>;\n onSelectionChange?: (keys: Set<string>) => void;\n}\n\nfunction TableRoot({\n density = 'comfortable',\n striped = false,\n sticky = false,\n maxHeight,\n sortDescriptor = null,\n onSortChange,\n selectionMode = 'none',\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange,\n className,\n style,\n children,\n ...rest\n}: TableProps) {\n const isControlled = selectedKeys !== undefined;\n const [internal, setInternal] = useState<Set<string>>(() => new Set(defaultSelectedKeys ?? []));\n const selected = isControlled ? new Set(selectedKeys) : internal;\n\n // Rows self-register their key so the head's select-all can compute tri-state\n // against the actually-rendered rows.\n const [registry, setRegistry] = useState<Set<string>>(() => new Set());\n const registerRow = useCallback((key: string) => {\n setRegistry((prev) => (prev.has(key) ? prev : new Set(prev).add(key)));\n }, []);\n const unregisterRow = useCallback((key: string) => {\n setRegistry((prev) => {\n if (!prev.has(key)) return prev;\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }, []);\n\n const commit = (next: Set<string>): void => {\n if (!isControlled) setInternal(next);\n onSelectionChange?.(next);\n };\n\n let selectedInRegistry = 0;\n registry.forEach((k) => {\n if (selected.has(k)) selectedInRegistry += 1;\n });\n const allSelected = registry.size > 0 && selectedInRegistry === registry.size;\n const someSelected = selectedInRegistry > 0 && !allSelected;\n\n const ctx: TableContextValue = {\n density,\n sortDescriptor,\n onSortChange,\n selectionMode,\n isSelected: (key) => selected.has(key),\n toggleRow: (key) => {\n const next = new Set(selected);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n commit(next);\n },\n registerRow,\n unregisterRow,\n allSelected,\n someSelected,\n toggleAll: () => {\n const next = new Set(selected);\n if (allSelected) registry.forEach((k) => next.delete(k));\n else registry.forEach((k) => next.add(k));\n commit(next);\n },\n };\n\n return (\n <TableContext.Provider value={ctx}>\n <div\n className=\"tcl-table-scroll\"\n style={maxHeight != null ? ({ maxHeight } as CSSProperties) : undefined}\n >\n <table\n className={cx(\n 'tcl-table',\n density === 'compact' && 'tcl-table--compact',\n striped && 'tcl-table--striped',\n sticky && 'tcl-table--sticky',\n className,\n )}\n style={style}\n {...rest}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n );\n}\n\n// ── caption ──────────────────────────────────────────────────────────\nexport type TableCaptionProps = HTMLAttributes<HTMLTableCaptionElement>;\n\nfunction TableCaption({ className, children, ...rest }: TableCaptionProps) {\n return (\n <caption className={cx('tcl-table__caption', className)} {...rest}>\n {children}\n </caption>\n );\n}\n\n// ── sections ─────────────────────────────────────────────────────────\nexport type TableSectionProps = HTMLAttributes<HTMLTableSectionElement>;\n\nfunction TableHead({ className, children, ...rest }: TableSectionProps) {\n return (\n <SectionContext.Provider value=\"head\">\n <thead className={cx('tcl-table__head', className)} {...rest}>\n {children}\n </thead>\n </SectionContext.Provider>\n );\n}\n\nfunction TableBody({ className, children, ...rest }: TableSectionProps) {\n return (\n <SectionContext.Provider value=\"body\">\n <tbody className={cx('tcl-table__body', className)} {...rest}>\n {children}\n </tbody>\n </SectionContext.Provider>\n );\n}\n\nfunction TableFoot({ className, children, ...rest }: TableSectionProps) {\n return (\n <SectionContext.Provider value=\"foot\">\n <tfoot className={cx('tcl-table__foot', className)} {...rest}>\n {children}\n </tfoot>\n </SectionContext.Provider>\n );\n}\n\n// ── select-all (head) ────────────────────────────────────────────────\nfunction SelectAllCell() {\n const { allSelected, someSelected, toggleAll } = useTableContext('Row');\n return (\n <th scope=\"col\" className=\"tcl-table__th tcl-table__select\">\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected}\n indeterminate={someSelected}\n onChange={toggleAll}\n />\n </th>\n );\n}\n\n// ── row ──────────────────────────────────────────────────────────────\nexport interface TableRowProps extends Omit<HTMLAttributes<HTMLTableRowElement>, 'onClick'> {\n /** Identifies the row for selection; required when `selectionMode=\"multiple\"`. */\n rowKey?: string;\n /** Makes the whole row a link (stretched over the row, fully keyboard-accessible). */\n href?: string;\n /** Makes the whole row a button. Ignored when `href` is set. */\n onClick?: (e: MouseEvent<HTMLElement>) => void;\n}\n\nfunction TableRow({ rowKey, href, onClick, className, children, ...rest }: TableRowProps) {\n const { selectionMode, isSelected, toggleRow, registerRow, unregisterRow } =\n useTableContext('Row');\n const section = useContext(SectionContext);\n const selectable = selectionMode !== 'none';\n const isBody = section === 'body';\n\n useEffect(() => {\n if (!selectable || !isBody || rowKey == null) return;\n registerRow(rowKey);\n return () => unregisterRow(rowKey);\n }, [selectable, isBody, rowKey, registerRow, unregisterRow]);\n\n const selected = selectable && isBody && rowKey != null ? isSelected(rowKey) : false;\n const interactive = isBody && (href != null || onClick != null);\n\n // Host the stretched link in the first body cell so the markup stays a valid\n // <td>, gets a real focusable target, and the ::after overlay covers the row.\n let content: ReactNode = children;\n if (interactive) {\n const primary: PrimaryLink = { href, onClick };\n let injected = false;\n content = Children.map(children, (child) => {\n if (!injected && isValidElement(child)) {\n injected = true;\n return cloneElement(child as ReactElement<TableCellProps>, { _primaryLink: primary });\n }\n return child;\n });\n }\n\n let selectCell: ReactNode = null;\n if (selectable) {\n if (section === 'head') {\n selectCell = <SelectAllCell />;\n } else if (isBody && rowKey != null) {\n selectCell = (\n <td className=\"tcl-table__td tcl-table__select\">\n <Checkbox aria-label=\"Select row\" checked={selected} onChange={() => toggleRow(rowKey)} />\n </td>\n );\n } else {\n selectCell = <td className=\"tcl-table__td tcl-table__select\" aria-hidden=\"true\" />;\n }\n }\n\n return (\n <tr\n className={cx('tcl-table__row', interactive && 'tcl-table__row--interactive', className)}\n data-selected={selected || undefined}\n {...rest}\n >\n {selectCell}\n {content}\n </tr>\n );\n}\n\n// ── header cell ──────────────────────────────────────────────────────\nexport interface TableHeaderCellProps extends Omit<\n ThHTMLAttributes<HTMLTableCellElement>,\n 'align'\n> {\n align?: CellAlign;\n /** Marks the column sortable; clicking emits `onSortChange({ column: sortKey, … })`. */\n sortKey?: string;\n}\n\nfunction TableHeaderCell({\n align = 'start',\n sortKey,\n className,\n children,\n ...rest\n}: TableHeaderCellProps) {\n const { sortDescriptor, onSortChange } = useTableContext('HeaderCell');\n const sortable = sortKey != null;\n const active = sortable && sortDescriptor?.column === sortKey;\n const direction = active ? sortDescriptor!.direction : undefined;\n const ariaSort: AriaAttributes['aria-sort'] = sortable\n ? active\n ? direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n : undefined;\n\n const handleSort = (): void => {\n if (!sortable) return;\n const next: SortDirection = active && direction === 'asc' ? 'desc' : 'asc';\n onSortChange?.({ column: sortKey, direction: next });\n };\n\n return (\n <th\n scope=\"col\"\n aria-sort={ariaSort}\n className={cx('tcl-table__th', align !== 'start' && `tcl-table__cell--${align}`, className)}\n {...rest}\n >\n {sortable ? (\n <button\n type=\"button\"\n className=\"tcl-table__sort\"\n data-active={active || undefined}\n onClick={handleSort}\n >\n <span>{children}</span>\n <span\n className=\"tcl-table__sort-icon\"\n aria-hidden=\"true\"\n data-direction={direction ?? 'none'}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path\n d=\"M3 4.5 L6 7.5 L9 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </span>\n </button>\n ) : (\n children\n )}\n </th>\n );\n}\n\n// ── data cell ────────────────────────────────────────────────────────\nexport interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {\n align?: CellAlign;\n /** Mono, tabular-nums, end-aligned — for figures. */\n numeric?: boolean;\n /** @internal injected by an interactive `Table.Row` — do not set directly. */\n _primaryLink?: PrimaryLink;\n}\n\nfunction TableCell({\n align,\n numeric = false,\n className,\n children,\n _primaryLink,\n ...rest\n}: TableCellProps) {\n const resolved: CellAlign = align ?? (numeric ? 'end' : 'start');\n let inner: ReactNode = children;\n if (_primaryLink) {\n inner =\n _primaryLink.href != null ? (\n <a className=\"tcl-table__rowlink\" href={_primaryLink.href}>\n {children}\n </a>\n ) : (\n <button type=\"button\" className=\"tcl-table__rowlink\" onClick={_primaryLink.onClick}>\n {children}\n </button>\n );\n }\n return (\n <td\n className={cx(\n 'tcl-table__td',\n resolved !== 'start' && `tcl-table__cell--${resolved}`,\n numeric && 'tcl-table__cell--numeric',\n className,\n )}\n {...rest}\n >\n {inner}\n </td>\n );\n}\n\n// ── empty state ──────────────────────────────────────────────────────\nexport interface TableEmptyProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'colSpan'> {\n /** Number of data columns; the select column (if any) is added automatically. */\n colSpan: number;\n}\n\nfunction TableEmpty({ colSpan, className, children, ...rest }: TableEmptyProps) {\n const { selectionMode } = useTableContext('Empty');\n const span = colSpan + (selectionMode !== 'none' ? 1 : 0);\n return (\n <tr className=\"tcl-table__row\">\n <td colSpan={span} className={cx('tcl-table__td tcl-table__empty', className)} {...rest}>\n {children}\n </td>\n </tr>\n );\n}\n\n/**\n * `Table` — a composable, accessible data table built on real `<table>`\n * semantics. Compound API:\n * `<Table><Table.Head><Table.Row><Table.HeaderCell/></Table.Row></Table.Head>\n * <Table.Body><Table.Row><Table.Cell/></Table.Row></Table.Body></Table>`.\n *\n * Sortable headers emit intent (you reorder the data); `selectionMode` adds a\n * tri-state checkbox column; `href`/`onClick` on a row make the whole row a\n * stretched, keyboard-accessible link/button.\n */\nexport const Table = Object.assign(TableRoot, {\n Caption: TableCaption,\n Head: TableHead,\n Body: TableBody,\n Foot: TableFoot,\n Row: TableRow,\n HeaderCell: TableHeaderCell,\n Cell: TableCell,\n Empty: TableEmpty,\n});\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Hub.css';\n\n/**\n * `Hub` — a hex-flower overview (one reserved center + up to six domain petals).\n *\n * It consumes the Trembus Visual Grammar **hub contract** — the same JSON shape\n * as `canonical/kits/visual-grammar/schema/hub.schema.json`. So a `hub.example.json`\n * authored for the static HTML kit renders here unchanged. Geometry is the kit's\n * flat-top \"6 around 1\" flower, computed from a single `size`.\n */\nexport type HubDomainKind = 'center' | 'shipped' | 'current' | 'planned';\nexport type HubSlot = 'center' | 'n' | 'ne' | 'se' | 's' | 'sw' | 'nw';\nexport type HubSource = string | { label: string; href?: string };\n\nexport interface HubDomain {\n id: string;\n /** Hex slot — legacy VG names (hub/robot/blood/decay/spirit/fate/shared),\n * generic slots (center/n/ne/se/s/sw/nw), or omit to auto-place by order. */\n pos?: string;\n kind: HubDomainKind;\n tag: string;\n name: string;\n sub: string;\n status: string;\n /** Accent dot color (hex). */\n dot?: string;\n /** Inspector detail shown when the tile is selected. */\n note?: string;\n sources?: HubSource[];\n}\n\nexport interface HubStat {\n label: string;\n value: string | number;\n color?: string;\n}\n\nexport interface HubContract {\n view?: 'hub';\n brand?: string;\n code?: string;\n tagline?: string;\n taglineNote?: string;\n /** Tagline pill color (hex). */\n tone?: string;\n sub?: string;\n axis?: string;\n stats?: HubStat[];\n domains: HubDomain[];\n}\n\nexport interface HubProps {\n data: HubContract;\n /** Controlled selected domain id. */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n /** Hex tile width in px (height derives as ~0.866×). */\n size?: number;\n className?: string;\n}\n\nconst SLOT_OF: Record<string, HubSlot> = {\n hub: 'center',\n center: 'center',\n robot: 'n',\n n: 'n',\n top: 'n',\n north: 'n',\n blood: 'ne',\n ne: 'ne',\n decay: 'se',\n se: 'se',\n spirit: 's',\n s: 's',\n bottom: 's',\n south: 's',\n fate: 'sw',\n sw: 'sw',\n shared: 'nw',\n nw: 'nw',\n};\n\nconst RING_ORDER: HubSlot[] = ['n', 'ne', 'se', 's', 'sw', 'nw'];\n\nfunction resolveSlots(domains: HubDomain[]): Map<string, HubSlot> {\n const used = new Set<HubSlot>();\n const result = new Map<string, HubSlot>();\n\n // Pass 1 — honor explicit pos / center kind.\n for (const d of domains) {\n const explicit = d.pos\n ? SLOT_OF[d.pos.toLowerCase()]\n : d.kind === 'center'\n ? 'center'\n : undefined;\n if (explicit && !used.has(explicit)) {\n result.set(d.id, explicit);\n used.add(explicit);\n }\n }\n // Pass 2 — auto-place the rest into free ring slots, in order.\n const ring = RING_ORDER.filter((s) => !used.has(s));\n for (const d of domains) {\n if (result.has(d.id)) continue;\n if (d.kind === 'center' && !used.has('center')) {\n result.set(d.id, 'center');\n used.add('center');\n continue;\n }\n const slot = ring.shift();\n if (slot) {\n result.set(d.id, slot);\n used.add(slot);\n }\n }\n return result;\n}\n\nfunction slotXY(slot: HubSlot, w: number, h: number): { x: number; y: number } {\n switch (slot) {\n case 'n':\n return { x: 0, y: -h };\n case 's':\n return { x: 0, y: h };\n case 'ne':\n return { x: 0.75 * w, y: -h / 2 };\n case 'se':\n return { x: 0.75 * w, y: h / 2 };\n case 'nw':\n return { x: -0.75 * w, y: -h / 2 };\n case 'sw':\n return { x: -0.75 * w, y: h / 2 };\n case 'center':\n default:\n return { x: 0, y: 0 };\n }\n}\n\nexport function Hub({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n size = 200,\n className,\n}: HubProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const w = size;\n const h = Math.round(size * 0.866);\n const containerW = 2.5 * w;\n const containerH = 3 * h;\n const centerX = 1.25 * w;\n const centerY = 1.5 * h;\n\n const slots = useMemo(() => resolveSlots(data.domains), [data.domains]);\n const selected = data.domains.find((d) => d.id === selectedId);\n\n return (\n <div className={cx('tcl-hub', className)}>\n <header className=\"tcl-hub__header\">\n {data.brand && <p className=\"tcl-hub__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-hub__code\">{data.code}</p>}\n {(data.tagline || data.taglineNote) && (\n <div className=\"tcl-hub__tagrow\">\n {data.tagline && (\n <span\n className=\"tcl-hub__pill\"\n style={data.tone ? { borderColor: data.tone, color: data.tone } : undefined}\n >\n {data.tagline}\n </span>\n )}\n {data.taglineNote && <span className=\"tcl-hub__tagnote\">{data.taglineNote}</span>}\n </div>\n )}\n {data.sub && <p className=\"tcl-hub__sub\">{data.sub}</p>}\n {data.stats && data.stats.length > 0 && (\n <div className=\"tcl-hub__stats\">\n {data.stats.map((s, i) => (\n <div key={i} className=\"tcl-hub__stat\">\n <span className=\"tcl-hub__stat-value\" style={s.color ? { color: s.color } : undefined}>\n {s.value}\n </span>\n <span className=\"tcl-hub__stat-label\">{s.label}</span>\n </div>\n ))}\n </div>\n )}\n </header>\n\n <div\n className=\"tcl-hub__flower\"\n role=\"group\"\n aria-label={data.tagline ?? data.brand ?? 'Domain map'}\n style={{ width: containerW, height: containerH }}\n >\n {data.domains.map((d) => {\n const slot = slots.get(d.id);\n if (!slot) return null;\n const { x, y } = slotXY(slot, w, h);\n const isSelected = d.id === selectedId;\n return (\n <button\n key={d.id}\n type=\"button\"\n className={cx('tcl-hub__tile', `tcl-hub__tile--${d.kind}`, isSelected && 'is-selected')}\n style={{ left: centerX + x - w / 2, top: centerY + y - h / 2, width: w, height: h }}\n aria-pressed={isSelected}\n aria-label={`${d.name}, ${d.tag}, ${d.status}`}\n onClick={() => select(d.id)}\n >\n <span className=\"tcl-hub__dot\" style={d.dot ? { color: d.dot } : undefined} aria-hidden=\"true\" />\n <span className=\"tcl-hub__tag\">{d.tag}</span>\n <span className=\"tcl-hub__name\">{d.name}</span>\n <span className=\"tcl-hub__tile-sub\">{d.sub}</span>\n <span className=\"tcl-hub__status\">{d.status}</span>\n </button>\n );\n })}\n </div>\n\n <div className=\"tcl-hub__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-hub__inspector-title\">\n {selected.name}\n <span className=\"tcl-hub__inspector-status\"> · {selected.status}</span>\n </p>\n {selected.note && <p className=\"tcl-hub__inspector-note\">{selected.note}</p>}\n {selected.sources && selected.sources.length > 0 && (\n <ul className=\"tcl-hub__sources\">\n {selected.sources.map((s, i) => (\n <li key={i}>{typeof s === 'string' ? s : s.label}</li>\n ))}\n </ul>\n )}\n </>\n ) : (\n <p className=\"tcl-hub__inspector-hint\">Select a domain to inspect its detail.</p>\n )}\n </div>\n\n {data.axis && <p className=\"tcl-hub__axis\">{data.axis}</p>}\n </div>\n );\n}\n","import { useId, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport './Brief.css';\n\n/**\n * `Brief` — renders an agent-instruction or planning document (CLAUDE.md,\n * AGENTS.md, a plan, a spec) as a structured, navigable visual.\n *\n * It consumes a Trembus Visual Grammar **brief contract** (`view: 'brief'`),\n * designed as a near-isomorphism of the source markdown's own outline: a titled\n * doc + meta pills + an ordered list of `kind`-tagged sections. That shape lets\n * an LLM \"generator\" transcribe a doc into the contract almost mechanically.\n *\n * The contract is deliberately permissive so a partial or slightly-off\n * generation still renders: every field but item `text` is optional, list items\n * accept a bare string OR an object, and an unknown section `kind` degrades to\n * prose. Lenient parse, strict render.\n */\nexport type BriefKind = 'claude' | 'agents' | 'plan' | 'spec' | (string & {});\n\nexport type SectionKind =\n | 'prose'\n | 'rules'\n | 'commands'\n | 'checklist'\n | 'phases'\n | 'artifacts'\n | 'boundaries'\n | 'decisions'\n | 'reference';\n\nexport type Severity = 'info' | 'warn' | 'danger' | (string & {});\n\n/** A list item — a bare string is the common case; the object adds optional facets. */\nexport type BriefItem =\n | string\n | {\n text: string;\n /** Secondary text: a command's gloss, an artifact's purpose, a rule's rationale. */\n desc?: string;\n /** Free-text status, shown as a trailing chip. */\n status?: string;\n /** Checklist emphasis. */\n severity?: Severity;\n /** A pointer (path or url) — a mono chip, or a link when it's an http(s) url. */\n ref?: string;\n /** Decisions: the chosen option for this `text` (the question/title). */\n choice?: string;\n };\n\nexport interface BriefSection {\n id?: string;\n /** Section heading (the markdown `##`). Falls back to the kind label if omitted. */\n heading?: string;\n /** How to render the items. Unknown/omitted → 'prose'. */\n kind?: SectionKind;\n /** Lead-in prose shown under the heading, before items. */\n note?: string;\n /** Prose body (alternative to items for `kind: 'prose'`). */\n body?: string;\n items?: BriefItem[];\n}\n\nexport interface BriefMeta {\n label: string;\n value: string | number;\n /** Pill accent (hex). */\n tone?: string;\n}\n\nexport interface BriefContract {\n view?: 'brief';\n /** Doc archetype — drives the header glyph + accent. */\n kind?: BriefKind;\n /** Gold mono code-title, e.g. 'claude.trembus-ui'. */\n id?: string;\n /** Human title (the `#` H1). Falls back to `id`. */\n title?: string;\n /** The intro paragraph. */\n summary?: string;\n /** Header pills (status / updated / owner / version). */\n meta?: BriefMeta[];\n sections?: BriefSection[];\n}\n\nexport interface BriefProps {\n data: BriefContract;\n /** Section ids collapsed initially (everything expanded otherwise). */\n defaultCollapsed?: string[];\n className?: string;\n}\n\nconst KIND_LABEL: Record<string, string> = {\n claude: 'Claude',\n agents: 'Agents',\n plan: 'Plan',\n spec: 'Spec',\n};\n\nconst SECTION_LABEL: Record<string, string> = {\n prose: 'Notes',\n rules: 'Rules',\n commands: 'Commands',\n checklist: 'Checklist',\n phases: 'Phases',\n artifacts: 'Artifacts',\n boundaries: 'Boundaries',\n decisions: 'Decisions',\n reference: 'Reference',\n};\n\ntype ItemObject = Exclude<BriefItem, string>;\n\n/** Normalize a string|object item to the object form — the single coercion point. */\nfunction asItem(item: BriefItem): ItemObject {\n return typeof item === 'string' ? { text: item } : item;\n}\n\n/** A known section kind, or 'prose' for anything unrecognized. */\nfunction resolveKind(kind: string | undefined): SectionKind {\n return kind && kind in SECTION_LABEL ? (kind as SectionKind) : 'prose';\n}\n\nfunction isUrl(ref: string): boolean {\n return /^https?:\\/\\//.test(ref);\n}\n\nfunction RefChip({ value }: { value: string }) {\n return isUrl(value) ? (\n <a className=\"tcl-brief__chip\" href={value} rel=\"noreferrer\">\n {value}\n </a>\n ) : (\n <code className=\"tcl-brief__chip\">{value}</code>\n );\n}\n\nfunction Desc({ text }: { text: string }) {\n return <span className=\"tcl-brief__desc\"> — {text}</span>;\n}\n\n/** Render a section's items according to its (resolved) kind. */\nfunction SectionBody({ kind, section }: { kind: SectionKind; section: BriefSection }) {\n const items = (section.items ?? []).map(asItem);\n\n if (kind === 'prose') {\n const paras = section.body ? section.body.split(/\\n{2,}/) : items.map((it) => it.text);\n return (\n <>\n {paras.map((p, i) => (\n <p key={i} className=\"tcl-brief__prose\">\n {p}\n </p>\n ))}\n </>\n );\n }\n\n if (kind === 'rules') {\n return (\n <ol className=\"tcl-brief__rules\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__rule\">\n <span className=\"tcl-brief__rule-text\">{it.text}</span>\n {it.desc && <Desc text={it.desc} />}\n </li>\n ))}\n </ol>\n );\n }\n\n if (kind === 'commands') {\n return (\n <ul className=\"tcl-brief__list\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__command\">\n <code className=\"tcl-brief__code\">{it.text}</code>\n {it.desc && <span className=\"tcl-brief__command-desc\">{it.desc}</span>}\n </li>\n ))}\n </ul>\n );\n }\n\n if (kind === 'checklist') {\n return (\n <ul className=\"tcl-brief__list\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__check\" data-severity={it.severity ?? 'info'}>\n <span className=\"tcl-brief__check-glyph\" aria-hidden=\"true\" />\n <span className=\"tcl-brief__check-text\">\n {it.text}\n {it.desc && <Desc text={it.desc} />}\n </span>\n </li>\n ))}\n </ul>\n );\n }\n\n if (kind === 'phases') {\n // A light plan: ordered phases with a status pip (done | active | pending).\n return (\n <ol className=\"tcl-brief__list tcl-brief__phases\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__phase\" data-status={it.status ?? 'pending'}>\n <span className=\"tcl-brief__phase-pip\" aria-hidden=\"true\" />\n <span className=\"tcl-brief__phase-text\">\n {it.text}\n {it.desc && <Desc text={it.desc} />}\n </span>\n {it.status && <span className=\"tcl-brief__phase-status\">{it.status}</span>}\n </li>\n ))}\n </ol>\n );\n }\n\n if (kind === 'decisions') {\n return (\n <ul className=\"tcl-brief__list\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__decision\">\n <span className=\"tcl-brief__decision-title\">{it.text}</span>\n {it.choice && (\n <span className=\"tcl-brief__decision-choice\">\n <span className=\"tcl-brief__arrow\" aria-hidden=\"true\">\n →{' '}\n </span>\n {it.choice}\n </span>\n )}\n </li>\n ))}\n </ul>\n );\n }\n\n // artifacts | boundaries | reference — text (+ desc) with a pointer chip.\n return (\n <ul className=\"tcl-brief__list\">\n {items.map((it, i) => (\n <li key={i} className=\"tcl-brief__ref\">\n <span className=\"tcl-brief__ref-main\">\n <span className=\"tcl-brief__ref-text\">{it.text}</span>\n {it.desc && <Desc text={it.desc} />}\n </span>\n {it.ref && <RefChip value={it.ref} />}\n {it.status && <span className=\"tcl-brief__status\">{it.status}</span>}\n </li>\n ))}\n </ul>\n );\n}\n\nexport function Brief({ data, defaultCollapsed, className }: BriefProps) {\n const uid = useId();\n const [collapsed, setCollapsed] = useState<Set<string>>(() => new Set(defaultCollapsed));\n\n const toggle = (id: string): void =>\n setCollapsed((prev) => {\n const next = new Set(prev);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n\n const kind = data.kind ?? 'spec';\n const title = data.title ?? data.id ?? 'Untitled';\n const sections = data.sections ?? [];\n\n return (\n <article className={cx('tcl-brief', className)} data-kind={kind} aria-label={title}>\n <header className=\"tcl-brief__header\">\n <div className=\"tcl-brief__kindrow\">\n <span className=\"tcl-brief__kind\">{KIND_LABEL[kind] ?? kind}</span>\n {data.id && <span className=\"tcl-brief__id\">{data.id}</span>}\n </div>\n <h2 className=\"tcl-brief__title\">{title}</h2>\n {data.summary && <p className=\"tcl-brief__summary\">{data.summary}</p>}\n {data.meta && data.meta.length > 0 && (\n <div className=\"tcl-brief__meta\">\n {data.meta.map((m, i) => (\n <span\n key={i}\n className=\"tcl-brief__metapill\"\n style={m.tone ? { borderColor: m.tone, color: m.tone } : undefined}\n >\n <span className=\"tcl-brief__metalabel\">{m.label}</span>\n <span className=\"tcl-brief__metavalue\">{m.value}</span>\n </span>\n ))}\n </div>\n )}\n </header>\n\n <div className=\"tcl-brief__sections\">\n {sections.length === 0 && <p className=\"tcl-brief__empty\">No sections.</p>}\n {sections.map((s, i) => {\n const id = s.id ?? `s${i}`;\n const k = resolveKind(s.kind);\n const heading = s.heading ?? SECTION_LABEL[k];\n const open = !collapsed.has(id);\n const regionId = `${uid}-${id}`;\n return (\n <section\n key={id}\n className=\"tcl-brief__section\"\n data-kind={k}\n data-state={open ? 'open' : 'collapsed'}\n >\n <div className=\"tcl-brief__section-head\">\n <h3 className=\"tcl-brief__section-h\">\n <button\n type=\"button\"\n className=\"tcl-brief__toggle\"\n aria-expanded={open}\n aria-controls={regionId}\n onClick={() => toggle(id)}\n >\n <span className=\"tcl-brief__chevron\" aria-hidden=\"true\" />\n {heading}\n </button>\n </h3>\n <span className=\"tcl-brief__section-kind\">{SECTION_LABEL[k] ?? k}</span>\n </div>\n <div id={regionId} className=\"tcl-brief__section-body\" hidden={!open}>\n {s.note && <p className=\"tcl-brief__note\">{s.note}</p>}\n <SectionBody kind={k} section={s} />\n </div>\n </section>\n );\n })}\n </div>\n </article>\n );\n}\n\n// ════════════════════════════════════════════════════════════════════════\n// Generator robustness — parseBrief (lenient validator) + fromMarkdown.\n//\n// parseBrief() NEVER throws: it coerces messy/partial input into a renderable\n// BriefContract and returns actionable `issues` so a generator (or the next\n// LLM) can self-correct. fromMarkdown() turns an existing CLAUDE.md/AGENTS.md\n// into a contract deterministically — no model, no hallucination — which is\n// why \"generation\" almost always works for docs that already exist.\n// ════════════════════════════════════════════════════════════════════════\n\nexport interface BriefIssue {\n /** Path to the offending node, e.g. \"sections[2].items[0].severity\". */\n path: string;\n level: 'error' | 'warn' | 'info';\n message: string;\n got?: string;\n expected?: string;\n /** Nearest blessed value, when the input looks like a typo. */\n didYouMean?: string;\n}\n\nexport interface BriefParseResult {\n /** Always renderable — lenient parse, strict render. `sections` is always present. */\n data: BriefContract & { sections: BriefSection[] };\n issues: BriefIssue[];\n /** True when no issue is an error (faithful, not merely renderable). */\n ok: boolean;\n}\n\nconst KNOWN_KINDS = ['claude', 'agents', 'plan', 'spec'];\nconst KNOWN_SECTION_KINDS: string[] = [\n 'prose',\n 'rules',\n 'commands',\n 'checklist',\n 'phases',\n 'artifacts',\n 'boundaries',\n 'decisions',\n 'reference',\n];\nconst KNOWN_SEVERITIES = ['info', 'warn', 'danger'];\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n\n/** Levenshtein distance — powers the \"did you mean\" repair hints. */\nfunction editDistance(a: string, b: string): number {\n const dp = Array.from({ length: a.length + 1 }, () => new Array<number>(b.length + 1).fill(0));\n for (let i = 0; i <= a.length; i++) dp[i][0] = i;\n for (let j = 0; j <= b.length; j++) dp[0][j] = j;\n for (let i = 1; i <= a.length; i++) {\n for (let j = 1; j <= b.length; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);\n }\n }\n return dp[a.length][b.length];\n}\n\n/** The closest blessed option, when it's near enough to be a likely typo. */\nfunction closest(value: string, options: string[]): string | undefined {\n let best: string | undefined;\n let bestD = Infinity;\n for (const o of options) {\n const d = editDistance(value.toLowerCase(), o);\n if (d < bestD) {\n bestD = d;\n best = o;\n }\n }\n return best !== undefined && bestD <= Math.max(2, Math.floor(best.length / 3)) ? best : undefined;\n}\n\nfunction normalizeItem(raw: unknown, path: string, issues: BriefIssue[]): ItemObject {\n if (typeof raw === 'string') return { text: raw };\n if (!isRecord(raw)) {\n issues.push({\n path,\n level: 'warn',\n message: 'item should be a string or object',\n got: raw === null ? 'null' : typeof raw,\n expected: 'string | object',\n });\n return { text: String(raw) };\n }\n const out: ItemObject = { text: '' };\n if (typeof raw.text === 'string') out.text = raw.text;\n else\n issues.push({\n path: `${path}.text`,\n level: 'warn',\n message: 'item missing \"text\"',\n expected: 'string',\n });\n if (typeof raw.desc === 'string') out.desc = raw.desc;\n if (typeof raw.status === 'string') out.status = raw.status;\n if (typeof raw.ref === 'string') out.ref = raw.ref;\n if (typeof raw.choice === 'string') out.choice = raw.choice;\n if (raw.severity !== undefined) {\n if (typeof raw.severity === 'string' && KNOWN_SEVERITIES.includes(raw.severity)) {\n out.severity = raw.severity as Severity;\n } else {\n const got = String(raw.severity);\n issues.push({\n path: `${path}.severity`,\n level: 'info',\n message: `unknown severity \"${got}\"`,\n got,\n expected: KNOWN_SEVERITIES.join(' | '),\n didYouMean: closest(got, KNOWN_SEVERITIES),\n });\n }\n }\n return out;\n}\n\nfunction normalizeSection(raw: unknown, i: number, issues: BriefIssue[]): BriefSection {\n const path = `sections[${i}]`;\n if (!isRecord(raw)) {\n issues.push({\n path,\n level: 'error',\n message: 'section must be an object',\n got: raw === null ? 'null' : typeof raw,\n expected: 'object',\n });\n return { heading: `Section ${i + 1}`, kind: 'prose' };\n }\n const out: BriefSection = {};\n if (typeof raw.id === 'string') out.id = raw.id;\n if (typeof raw.heading === 'string' && raw.heading.trim()) out.heading = raw.heading;\n else\n issues.push({\n path: `${path}.heading`,\n level: 'warn',\n message: 'section missing \"heading\" (falls back to the kind label)',\n expected: 'string',\n });\n if (raw.kind !== undefined) {\n const k = String(raw.kind);\n if (typeof raw.kind === 'string' && KNOWN_SECTION_KINDS.includes(raw.kind)) {\n out.kind = raw.kind as SectionKind;\n } else {\n issues.push({\n path: `${path}.kind`,\n level: 'info',\n message: `unknown section kind \"${k}\" (renders as prose)`,\n got: k,\n expected: KNOWN_SECTION_KINDS.join(' | '),\n didYouMean: closest(k, KNOWN_SECTION_KINDS),\n });\n out.kind = raw.kind as SectionKind; // keep authored value; the renderer degrades it to prose\n }\n }\n if (typeof raw.note === 'string') out.note = raw.note;\n if (typeof raw.body === 'string') out.body = raw.body;\n if (raw.items !== undefined) {\n if (Array.isArray(raw.items))\n out.items = raw.items.map((it, j) => normalizeItem(it, `${path}.items[${j}]`, issues));\n else\n issues.push({\n path: `${path}.items`,\n level: 'warn',\n message: '\"items\" should be an array',\n got: typeof raw.items,\n expected: 'array',\n });\n }\n return out;\n}\n\nfunction normalizeMeta(raw: unknown, issues: BriefIssue[]): BriefMeta[] | undefined {\n if (raw === undefined) return undefined;\n if (!Array.isArray(raw)) {\n issues.push({\n path: 'meta',\n level: 'warn',\n message: '\"meta\" should be an array',\n got: typeof raw,\n expected: 'array',\n });\n return undefined;\n }\n const out: BriefMeta[] = [];\n raw.forEach((m, i) => {\n if (\n isRecord(m) &&\n typeof m.label === 'string' &&\n (typeof m.value === 'string' || typeof m.value === 'number')\n ) {\n const entry: BriefMeta = { label: m.label, value: m.value };\n if (typeof m.tone === 'string') entry.tone = m.tone;\n out.push(entry);\n } else {\n issues.push({\n path: `meta[${i}]`,\n level: 'info',\n message: 'meta entry needs { label, value }',\n expected: '{ label: string, value: string | number }',\n });\n }\n });\n return out.length ? out : undefined;\n}\n\n/**\n * Lenient validator: coerce any input into a renderable BriefContract and\n * report actionable issues. NEVER throws — a partially-wrong generation still\n * renders, and `issues` is the repair list for the next attempt.\n */\nexport function parseBrief(input: unknown): BriefParseResult {\n const issues: BriefIssue[] = [];\n let obj: unknown = input;\n\n if (typeof input === 'string') {\n try {\n obj = JSON.parse(input) as unknown;\n } catch {\n issues.push({\n path: '',\n level: 'error',\n message: 'input is not valid JSON',\n got: 'string',\n expected: 'JSON object',\n });\n return { data: { view: 'brief', sections: [] }, issues, ok: false };\n }\n }\n if (!isRecord(obj)) {\n issues.push({\n path: '',\n level: 'error',\n message: 'expected a brief contract object',\n got: Array.isArray(obj) ? 'array' : obj === null ? 'null' : typeof obj,\n expected: 'object',\n });\n return { data: { view: 'brief', sections: [] }, issues, ok: false };\n }\n\n if (obj.view !== 'brief') {\n issues.push({\n path: 'view',\n level: 'warn',\n message:\n obj.view === undefined ? 'missing \"view\"; defaulting to \"brief\"' : 'view should be \"brief\"',\n got: String(obj.view),\n expected: 'brief',\n });\n }\n\n const data: BriefContract & { sections: BriefSection[] } = { view: 'brief', sections: [] };\n if (obj.kind !== undefined) {\n if (typeof obj.kind === 'string') {\n data.kind = obj.kind;\n if (!KNOWN_KINDS.includes(obj.kind))\n issues.push({\n path: 'kind',\n level: 'info',\n message: `unrecognized kind \"${obj.kind}\" (renders neutral)`,\n got: obj.kind,\n expected: KNOWN_KINDS.join(' | '),\n didYouMean: closest(obj.kind, KNOWN_KINDS),\n });\n } else {\n issues.push({\n path: 'kind',\n level: 'warn',\n message: '\"kind\" should be a string',\n got: typeof obj.kind,\n });\n }\n }\n if (typeof obj.id === 'string') data.id = obj.id;\n if (typeof obj.title === 'string') data.title = obj.title;\n if (typeof obj.summary === 'string') data.summary = obj.summary;\n const meta = normalizeMeta(obj.meta, issues);\n if (meta) data.meta = meta;\n\n if (obj.sections === undefined)\n issues.push({\n path: 'sections',\n level: 'warn',\n message: 'no \"sections\" — nothing to render',\n expected: 'array',\n });\n else if (!Array.isArray(obj.sections))\n issues.push({\n path: 'sections',\n level: 'error',\n message: '\"sections\" must be an array',\n got: typeof obj.sections,\n expected: 'array',\n });\n else data.sections = obj.sections.map((s, i) => normalizeSection(s, i, issues));\n\n return { data, issues, ok: !issues.some((it) => it.level === 'error') };\n}\n\n/** Strip the inline markdown the Brief renders as plain text (emphasis, code, links). */\nfunction stripInline(s: string): string {\n return s\n .replace(/!\\[[^\\]]*\\]\\([^)]*\\)/g, '')\n .replace(/\\[([^\\]]+)\\]\\([^)]*\\)/g, '$1')\n .replace(/`([^`]+)`/g, '$1')\n .replace(/\\*\\*([^*]+)\\*\\*/g, '$1')\n .replace(/\\*([^*]+)\\*/g, '$1')\n .trim();\n}\n\nfunction parseItemText(raw: string): { text: string; desc?: string; codey: boolean } {\n const s = raw.trim();\n const code = s.match(/^`([^`]+)`\\s*(?:[—–-]|:)?\\s*(.*)$/);\n if (code)\n return { text: code[1].trim(), desc: stripInline(code[2]).trim() || undefined, codey: true };\n const bold = s.match(/^\\*\\*([^*]+)\\*\\*\\s*(?:[—–-]|:)?\\s*(.*)$/);\n if (bold)\n return { text: bold[1].trim(), desc: stripInline(bold[2]).trim() || undefined, codey: false };\n const dash = s.match(/^(.+?)\\s+[—–]\\s+(.+)$/);\n if (dash)\n return { text: stripInline(dash[1]).trim(), desc: stripInline(dash[2]).trim(), codey: false };\n return { text: stripInline(s), codey: false };\n}\n\nfunction sectionFromLines(heading: string, lines: string[]): BriefSection {\n const listRe = /^\\s*(?:[-*+]\\s+|(\\d+)[.)]\\s+)(.*)$/;\n const lead: string[] = [];\n const rawItems: { text: string; numbered: boolean }[] = [];\n let inList = false;\n for (const line of lines) {\n const m = line.match(listRe);\n if (m) {\n inList = true;\n rawItems.push({ text: m[2], numbered: m[1] !== undefined });\n } else if (line.trim() === '') {\n // blank line — ignore\n } else if (!inList) {\n lead.push(line);\n } else if (rawItems.length) {\n rawItems[rawItems.length - 1].text += ' ' + line.trim(); // wrapped continuation\n }\n }\n const note = stripInline(lead.join(' ')).replace(/\\s+/g, ' ').trim();\n\n if (rawItems.length === 0) {\n const sec: BriefSection = { heading, kind: 'prose' };\n if (note) sec.body = note;\n return sec;\n }\n\n const parsed = rawItems.map((it) => parseItemText(it.text));\n const codey = parsed.filter((p) => p.codey).length >= Math.ceil(parsed.length / 2);\n const hl = heading.toLowerCase();\n let kind: SectionKind = 'rules';\n if (codey) kind = 'commands';\n if (/gotcha|caveat|checklist|pitfall|warning/.test(hl)) kind = 'checklist';\n else if (/decision/.test(hl)) kind = 'decisions';\n else if (/phase|milestone|roadmap/.test(hl)) kind = 'phases';\n\n const items: BriefItem[] = parsed.map((p) => {\n const item: ItemObject = { text: p.text };\n if (p.desc) item.desc = p.desc;\n return item;\n });\n const sec: BriefSection = { heading, kind, items };\n if (note) sec.note = note;\n return sec;\n}\n\n/**\n * Deterministically convert a CLAUDE.md / AGENTS.md / plan markdown doc into a\n * BriefContract. Model-free: the H1 is the title, leading prose is the summary,\n * each H2 is a section whose `kind` is inferred from its content (code →\n * commands, \"Gotchas\" → checklist, prose → prose, …). Pair with parseBrief() to\n * validate. Imperfect kind inference is fine — the renderer degrades gracefully.\n */\nexport function fromMarkdown(md: string): BriefContract & { sections: BriefSection[] } {\n const lines = md.replace(/\\r\\n/g, '\\n').split('\\n');\n const contract: BriefContract & { sections: BriefSection[] } = { view: 'brief', sections: [] };\n let i = 0;\n\n // optional YAML-ish frontmatter\n if (lines[0]?.trim() === '---') {\n let j = 1;\n const fm: string[] = [];\n while (j < lines.length && lines[j].trim() !== '---') fm.push(lines[j++]);\n if (j < lines.length) {\n for (const f of fm) {\n const m = f.match(/^(\\w+):\\s*(.+)$/);\n if (!m) continue;\n const v = m[2].trim();\n if (m[1] === 'kind') contract.kind = v;\n else if (m[1] === 'id') contract.id = v;\n else if (m[1] === 'title') contract.title = v;\n }\n i = j + 1;\n }\n }\n\n const summaryLines: string[] = [];\n const raw: { heading: string; lines: string[] }[] = [];\n let current: { heading: string; lines: string[] } | null = null;\n for (; i < lines.length; i++) {\n const line = lines[i];\n const h2 = line.match(/^##\\s+(.+)$/);\n const h1 = line.match(/^#\\s+(.+)$/);\n if (h2) {\n if (current) raw.push(current);\n current = { heading: stripInline(h2[1]).trim(), lines: [] };\n } else if (h1 && !contract.title) {\n contract.title = stripInline(h1[1]).trim();\n } else if (current) {\n current.lines.push(line);\n } else {\n summaryLines.push(line);\n }\n }\n if (current) raw.push(current);\n\n const summary = stripInline(summaryLines.join(' ')).replace(/\\s+/g, ' ').trim();\n if (summary) contract.summary = summary;\n contract.sections = raw.map((s) => sectionFromLines(s.heading, s.lines));\n return contract;\n}\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { clampPct, toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './BarChart.css';\n\n/**\n * `BarChart` — a categorical magnitude chart (vertical columns or horizontal bars).\n *\n * It consumes a Trembus Visual Grammar **bar-chart contract** — the same authored\n * JSON shape the static HTML kit renders — so one contract draws in both places.\n * Each bar is color-coded by tone against a shared axis; selecting a bar inspects\n * its detail in a live panel. Values are assumed non-negative.\n *\n * Two shapes are supported: a single series (`bars`) and clustered multi-series\n * (`series` + `categories`), which groups one bar per series under each category.\n */\nexport type BarTone = FillBarTone;\n\nexport interface BarDatum {\n /** Stable id for selection; falls back to `label`. */\n id?: string;\n /** Category label — the axis tick. */\n label: string;\n /** Magnitude (non-negative). */\n value: number;\n /** Color-coded tone for the bar (default `accent`). */\n tone?: BarTone;\n /** Explicit bar color (hex) — overrides `tone`. */\n color?: string;\n /** Small caption shown beside the value in the inspector. */\n sub?: string;\n /** Inspector detail shown when this bar is selected. */\n note?: string;\n}\n\nexport interface BarSeries {\n /** Stable id for selection; falls back to the series index. */\n id?: string;\n /** Series name — shown in the legend and the selected bar's accessible name. */\n name: string;\n /** Color-coded tone (defaults cycle through the ontology by series order). */\n tone?: BarTone;\n /** Explicit series color (hex) — overrides `tone`. */\n color?: string;\n /** Values aligned to `categories`; `null`/non-finite leaves an empty slot. */\n values: (number | null)[];\n}\n\nexport interface BarChartMarker {\n /** Axis position of the reference line. */\n value: number;\n label?: string;\n tone?: BarTone;\n}\n\nexport interface BarChartContract {\n view?: 'bar-chart';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit suffix appended to every value label (e.g. `%`, `ms`, `k`). */\n unit?: string;\n orientation?: 'vertical' | 'horizontal';\n /** Force the axis maximum; otherwise derived from the data (and markers). */\n max?: number;\n /** Reference lines drawn across the plot (a target / threshold). */\n markers?: BarChartMarker[];\n /** Single-series data — each datum is a bar. */\n bars?: BarDatum[];\n /** Clustered multi-series data — pair with `categories` (one cluster per category). */\n series?: BarSeries[];\n /** Category (x) labels shared across all `series`. */\n categories?: string[];\n}\n\nexport interface BarChartProps {\n data: BarChartContract;\n /** Controlled selected bar id. */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n /** Plot height in px (vertical orientation only; horizontal sizes intrinsically). */\n height?: number;\n className?: string;\n}\n\nconst SERIES_CYCLE: BarTone[] = ['accent', 'info', 'success', 'warning', 'danger', 'neutral'];\n\n/** Single-series key: explicit id, else the label (back-compat — kept stable). */\nconst idOf = (d: BarDatum): string => d.id ?? d.label;\n/** Series key: explicit id, else the series index (never falls back to the name). */\nconst sidOf = (s: BarSeries, i: number): string => s.id ?? `g${i}`;\n/** A grouped datum id is collision-proof: `{seriesKey}#{categoryIndex}`. */\nconst cellId = (s: BarSeries, si: number, ci: number): string => `${sidOf(s, si)}#${ci}`;\n\nconst fmt = (value: number, unit?: string): string => `${value}${unit ?? ''}`;\n\ninterface Inspected {\n title: string;\n valueText: string;\n sub?: string;\n note?: string;\n}\n\nexport function BarChart({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n height = 240,\n className,\n}: BarChartProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { unit, markers = [] } = data;\n // Stable references so the memos below only recompute when the data changes.\n const bars = useMemo(() => data.bars ?? [], [data.bars]);\n const series = useMemo(() => data.series ?? [], [data.series]);\n const categories = useMemo(() => data.categories ?? [], [data.categories]);\n const isGrouped = series.length > 0;\n const orientation = data.orientation ?? 'vertical';\n const isVertical = orientation === 'vertical';\n\n // Axis max: explicit, else the largest bar/series/marker value, else 1 (avoids /0).\n const axisMax = useMemo(() => {\n if (data.max != null) return data.max;\n const values = isGrouped\n ? series.flatMap((s) => s.values.filter((v): v is number => v != null && Number.isFinite(v)))\n : bars.map((b) => b.value);\n const peak = Math.max(0, ...values, ...markers.map((m) => m.value));\n return peak > 0 ? peak : 1;\n }, [data.max, isGrouped, series, bars, markers]);\n\n // Tick labels mirror the canvas: categories in grouped mode, bar labels otherwise.\n const tickLabels = isGrouped ? categories : bars.map((b) => b.label);\n\n // Resolve the selected datum into a uniform inspector payload.\n const inspected = useMemo<Inspected | undefined>(() => {\n if (selectedId == null) return undefined;\n if (isGrouped) {\n for (let si = 0; si < series.length; si++) {\n const s = series[si];\n // Bound by categories.length so the inspector resolves exactly the cells\n // the canvas renders (a controlled selectedId can't match a phantom slot).\n for (let ci = 0; ci < categories.length; ci++) {\n const v = s.values[ci];\n if (v == null || !Number.isFinite(v)) continue;\n if (cellId(s, si, ci) === selectedId) {\n return {\n title: s.name,\n valueText: `${categories[ci] ?? `#${ci + 1}`} · ${fmt(v, unit)}`,\n };\n }\n }\n }\n return undefined;\n }\n const b = bars.find((d) => idOf(d) === selectedId);\n return b\n ? { title: b.label, valueText: fmt(b.value, unit), sub: b.sub, note: b.note }\n : undefined;\n }, [selectedId, isGrouped, series, categories, bars, unit]);\n\n return (\n <div className={cx('tcl-bar-chart', `tcl-bar-chart--${orientation}`, className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-bar-chart__header\">\n {data.brand && <p className=\"tcl-bar-chart__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-bar-chart__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-bar-chart__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-bar-chart__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div className=\"tcl-bar-chart__plot\" style={isVertical ? { height } : undefined}>\n {/* Bars and markers share one coordinate box so they read on the same scale. */}\n <div\n className=\"tcl-bar-chart__canvas\"\n role=\"group\"\n aria-label={data.title ?? data.code ?? 'Bar chart'}\n >\n {markers.map((m, i) => {\n const pct = clampPct(m.value, 0, axisMax);\n return (\n <span\n key={`mk-${i}`}\n className=\"tcl-bar-chart__marker\"\n aria-hidden=\"true\"\n style={vars({ '--mk': toneVar(m.tone ?? 'neutral'), '--at': `${pct}%` })}\n >\n {m.label && (\n <span className=\"tcl-bar-chart__marker-label\">{`${m.label} · ${fmt(m.value, unit)}`}</span>\n )}\n </span>\n );\n })}\n\n {isGrouped\n ? categories.map((cat, ci) => (\n <div key={`grp-${ci}`} className=\"tcl-bar-chart__group\">\n {series.map((s, si) => {\n const v = s.values[ci];\n if (v == null || !Number.isFinite(v)) {\n return (\n <span\n key={sidOf(s, si)}\n className=\"tcl-bar-chart__spacer\"\n aria-hidden=\"true\"\n />\n );\n }\n const id = cellId(s, si, ci);\n const pct = clampPct(v, 0, axisMax);\n const isSelected = id === selectedId;\n const barColor =\n s.color ?? toneVar(s.tone ?? SERIES_CYCLE[si % SERIES_CYCLE.length]);\n return (\n <button\n key={sidOf(s, si)}\n type=\"button\"\n className={cx('tcl-bar-chart__cell', isSelected && 'is-selected')}\n aria-pressed={isSelected}\n aria-label={`${s.name}, ${cat}: ${fmt(v, unit)}`}\n onClick={() => select(id)}\n >\n <span\n className=\"tcl-bar-chart__bar\"\n style={vars({ '--pct': `${pct}%`, '--bar-color': barColor })}\n />\n </button>\n );\n })}\n </div>\n ))\n : bars.map((b) => {\n const id = idOf(b);\n const pct = clampPct(b.value, 0, axisMax);\n const isSelected = id === selectedId;\n const barColor = b.color ?? toneVar(b.tone ?? 'accent');\n return (\n <button\n key={id}\n type=\"button\"\n className={cx('tcl-bar-chart__cell', isSelected && 'is-selected')}\n aria-pressed={isSelected}\n aria-label={`${b.label}: ${fmt(b.value, unit)}`}\n onClick={() => select(id)}\n >\n <span\n className=\"tcl-bar-chart__bar\"\n style={vars({ '--pct': `${pct}%`, '--bar-color': barColor })}\n >\n <span className=\"tcl-bar-chart__value\">{fmt(b.value, unit)}</span>\n </span>\n </button>\n );\n })}\n </div>\n\n {/* Category ticks, laid out to mirror the canvas cells (buttons carry the SR names). */}\n <div className=\"tcl-bar-chart__axis\" aria-hidden=\"true\">\n {tickLabels.map((label, i) => (\n <span key={`tick-${i}`} className=\"tcl-bar-chart__tick\" title={label}>\n {label}\n </span>\n ))}\n </div>\n </div>\n\n {isGrouped && (\n <div className=\"tcl-bar-chart__legend\">\n {series.map((s, si) => (\n <span key={sidOf(s, si)} className=\"tcl-bar-chart__legend-item\">\n <span\n className=\"tcl-bar-chart__legend-swatch\"\n style={vars({\n '--sw': s.color ?? toneVar(s.tone ?? SERIES_CYCLE[si % SERIES_CYCLE.length]),\n })}\n aria-hidden=\"true\"\n />\n {s.name}\n </span>\n ))}\n </div>\n )}\n\n <div className=\"tcl-bar-chart__inspector\" aria-live=\"polite\">\n {inspected ? (\n <>\n <p className=\"tcl-bar-chart__inspector-title\">\n {inspected.title}\n <span className=\"tcl-bar-chart__inspector-value\">\n {' · '}\n {inspected.valueText}\n </span>\n {inspected.sub && (\n <span className=\"tcl-bar-chart__inspector-sub\"> {inspected.sub}</span>\n )}\n </p>\n {inspected.note && <p className=\"tcl-bar-chart__inspector-note\">{inspected.note}</p>}\n </>\n ) : (\n <p className=\"tcl-bar-chart__inspector-hint\">Select a bar to inspect its value.</p>\n )}\n </div>\n </div>\n );\n}\n","import { useId, useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './LineChart.css';\n\n/**\n * `LineChart` — a multi-series trend chart with an optional target line and\n * tolerance band. It consumes a Trembus Visual Grammar **line-chart contract**\n * (the same authored shape the static HTML kit renders) so one contract draws in\n * both places. Lines, grid, band, and target are drawn in a proportionally-scaled\n * SVG; each data point is a real focusable button (the Hub/BarChart interaction\n * spine) whose selection is revealed in a live inspector.\n */\nexport type LineTone = FillBarTone;\n\nexport interface LinePoint {\n /** Category / x-axis label (e.g. a week). */\n x: string;\n /** Value; `null` (or non-finite) is a gap the line skips. */\n y: number | null;\n /** Inspector detail shown when this point is selected. */\n note?: string;\n}\n\nexport interface LineSeries {\n /** Stable id for selection; falls back to `name`. */\n id?: string;\n name: string;\n /** Explicit line color (hex) — overrides `tone`. */\n color?: string;\n /** Color-coded tone (defaults cycle through the ontology by series order). */\n tone?: LineTone;\n /** Render the line dashed (e.g. a comparison/forecast series). */\n dashed?: boolean;\n /** Fill the area beneath the line. */\n fill?: boolean;\n points: LinePoint[];\n}\n\nexport interface LineBand {\n lo: number;\n hi: number;\n label?: string;\n tone?: LineTone;\n}\n\nexport interface LineTarget {\n value: number;\n label?: string;\n tone?: LineTone;\n}\n\nexport interface LineChartContract {\n view?: 'line-chart';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit suffix appended to every value label (e.g. `%`, `d`, `k`). */\n unit?: string;\n /** Force the y-axis minimum; otherwise derived from data (and band/target). */\n yMin?: number;\n /** Force the y-axis maximum. */\n yMax?: number;\n /** Shaded tolerance zone between two values. */\n band?: LineBand;\n /** Reference line drawn across the plot (a target / threshold). */\n target?: LineTarget;\n series: LineSeries[];\n}\n\nexport interface LineChartProps {\n data: LineChartContract;\n /** Controlled selected point id (`\"{seriesId}#{index}\"`). */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n /** Plot viewBox height; sets the chart aspect ratio (default 220). */\n height?: number;\n className?: string;\n}\n\nconst W = 600;\nconst PAD_L = 46;\nconst PAD_R = 12;\nconst PAD_T = 14;\nconst PAD_B = 26;\n\nconst TONE_CYCLE: LineTone[] = ['accent', 'info', 'success', 'warning', 'danger'];\n\n/** Stable, collision-proof series key: explicit id, else the series index. */\nconst sidOf = (s: LineSeries, i: number): string => s.id ?? `s${i}`;\nconst seriesColor = (s: LineSeries, i: number): string =>\n s.color ?? toneVar(s.tone ?? TONE_CYCLE[i % TONE_CYCLE.length]);\n\n/** Round axis/value labels to 2dp, trimming trailing-zero noise. */\nconst num = (v: number): string => String(Math.round(v * 100) / 100);\n\nexport function LineChart({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n height = 220,\n className,\n}: LineChartProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { series, unit, band, target } = data;\n const H = height;\n const fmtVal = (v: number): string => `${num(v)}${unit ?? ''}`;\n\n const count = Math.max(1, ...series.map((s) => s.points.length));\n\n // y-domain: data extent (expanded to enclose band + target), padded, with\n // explicit yMin/yMax overrides — clamped so the domain can never invert.\n const { lo, hi } = useMemo(() => {\n const ys = series\n .flatMap((s) => s.points.map((p) => p.y))\n .filter((v): v is number => v != null && Number.isFinite(v));\n let dataLo = ys.length ? Math.min(...ys) : 0;\n let dataHi = ys.length ? Math.max(...ys) : 1;\n if (band) {\n dataLo = Math.min(dataLo, band.lo);\n dataHi = Math.max(dataHi, band.hi);\n }\n if (target) {\n dataLo = Math.min(dataLo, target.value);\n dataHi = Math.max(dataHi, target.value);\n }\n if (dataLo === dataHi) {\n const d = Math.abs(dataLo) * 0.1 + 1;\n dataLo -= d;\n dataHi += d;\n }\n const pad = (dataHi - dataLo) * 0.08;\n let loR = data.yMin ?? dataLo - pad;\n let hiR = data.yMax ?? dataHi + pad;\n // Preserve the caller's bounds: swap an inverted pair rather than discard one.\n if (hiR < loR) [loR, hiR] = [hiR, loR];\n if (hiR === loR) hiR = loR + (Math.abs(loR) * 0.1 + 1);\n return { lo: loR, hi: hiR };\n }, [series, band, target, data.yMin, data.yMax]);\n\n const x = (i: number): number =>\n count <= 1 ? PAD_L + (W - PAD_L - PAD_R) / 2 : PAD_L + (i / (count - 1)) * (W - PAD_L - PAD_R);\n const y = (v: number): number => PAD_T + (1 - (v - lo) / (hi - lo)) * (H - PAD_T - PAD_B);\n\n // x labels come from the longest series (assumes left-aligned, shared ticks).\n const axisSeries = series.reduce(\n (a, b) => (b.points.length > a.points.length ? b : a),\n series[0] ?? { points: [] as LinePoint[] },\n );\n const xLabels = axisSeries.points.map((p) => p.x);\n const xStep = Math.max(1, Math.ceil(count / 8));\n\n const ticks = [0, 1, 2, 3, 4].map((k) => lo + ((hi - lo) * k) / 4);\n\n const finiteOf = (s: LineSeries): { i: number; p: LinePoint; v: number }[] =>\n s.points\n .map((p, i) => ({ i, p, v: p.y as number }))\n .filter((o) => o.p.y != null && Number.isFinite(o.p.y));\n\n const clipId = `lc-clip-${useId().replace(/:/g, '')}`;\n\n const selected = useMemo(() => {\n for (let si = 0; si < series.length; si++) {\n const s = series[si];\n for (const { i, p } of finiteOf(s)) {\n if (`${sidOf(s, si)}#${i}` === selectedId) return { s, i, p };\n }\n }\n return undefined;\n }, [series, selectedId]);\n\n const groupLabel =\n (data.title ?? data.code ?? 'Line chart') +\n (target ? `, target ${fmtVal(target.value)}` : '') +\n (band ? `, tolerance band ${fmtVal(band.lo)} to ${fmtVal(band.hi)}` : '');\n\n return (\n <div className={cx('tcl-line-chart', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-line-chart__header\">\n {data.brand && <p className=\"tcl-line-chart__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-line-chart__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-line-chart__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-line-chart__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div className=\"tcl-line-chart__plot\">\n <div className=\"tcl-line-chart__canvas\" role=\"group\" aria-label={groupLabel}>\n <svg\n className=\"tcl-line-chart__svg\"\n viewBox={`0 0 ${W} ${H}`}\n preserveAspectRatio=\"xMidYMid meet\"\n aria-hidden=\"true\"\n >\n <defs>\n <clipPath id={clipId}>\n <rect x={PAD_L} y={PAD_T} width={W - PAD_L - PAD_R} height={H - PAD_T - PAD_B} />\n </clipPath>\n </defs>\n\n {/* gridlines + y ticks */}\n {ticks.map((v, k) => (\n <g key={`t-${k}`}>\n <line\n className=\"tcl-line-chart__grid\"\n x1={PAD_L}\n y1={y(v)}\n x2={W - PAD_R}\n y2={y(v)}\n />\n <text\n className=\"tcl-line-chart__axis-text\"\n x={PAD_L - 6}\n y={y(v) + 3}\n textAnchor=\"end\"\n >\n {num(v)}\n </text>\n </g>\n ))}\n\n {/* tolerance band */}\n {band && (\n <g style={vars({ '--bnd': toneVar(band.tone ?? 'success') })}>\n <rect\n className=\"tcl-line-chart__band\"\n x={PAD_L}\n y={y(band.hi)}\n width={W - PAD_L - PAD_R}\n height={Math.abs(y(band.lo) - y(band.hi))}\n />\n <line\n className=\"tcl-line-chart__band-edge\"\n x1={PAD_L}\n y1={y(band.hi)}\n x2={W - PAD_R}\n y2={y(band.hi)}\n />\n <line\n className=\"tcl-line-chart__band-edge\"\n x1={PAD_L}\n y1={y(band.lo)}\n x2={W - PAD_R}\n y2={y(band.lo)}\n />\n {band.label && (\n <text\n className=\"tcl-line-chart__band-label\"\n x={W - PAD_R}\n y={y(band.hi) - 3}\n textAnchor=\"end\"\n >\n {band.label}\n </text>\n )}\n </g>\n )}\n\n {/* target line */}\n {target && (\n <g style={vars({ '--tgt': toneVar(target.tone ?? 'warning') })}>\n <line\n className=\"tcl-line-chart__target\"\n x1={PAD_L}\n y1={y(target.value)}\n x2={W - PAD_R}\n y2={y(target.value)}\n />\n {target.label && (\n <text\n className=\"tcl-line-chart__target-label\"\n x={W - PAD_R}\n y={y(target.value) - 4}\n textAnchor=\"end\"\n >\n {target.label}\n </text>\n )}\n </g>\n )}\n\n {/* x ticks */}\n {xLabels.map((lb, i) =>\n i % xStep === 0 || i === count - 1 ? (\n <text\n key={`x-${i}`}\n className=\"tcl-line-chart__axis-text\"\n x={x(i)}\n y={H - 8}\n textAnchor=\"middle\"\n >\n {lb}\n </text>\n ) : null,\n )}\n\n {/* series: area fill, then line — clipped to the plot rect so a\n forced yMin/yMax that crops the data can't draw outside the axes */}\n <g clipPath={`url(#${clipId})`}>\n {series.map((s, si) => {\n const fin = finiteOf(s);\n if (!fin.length) return null;\n const color = seriesColor(s, si);\n const linePts = fin\n .map((o) => `${x(o.i).toFixed(2)},${y(o.v).toFixed(2)}`)\n .join(' ');\n const areaPts = `${linePts} ${x(fin[fin.length - 1].i).toFixed(2)},${H - PAD_B} ${x(\n fin[0].i,\n ).toFixed(2)},${H - PAD_B}`;\n return (\n <g key={`s-${si}`}>\n {s.fill && fin.length > 1 && (\n <polygon\n className=\"tcl-line-chart__area\"\n points={areaPts}\n style={{ fill: color }}\n />\n )}\n {fin.length > 1 && (\n <polyline\n className={cx('tcl-line-chart__line', s.dashed && 'is-dashed')}\n points={linePts}\n style={{ stroke: color }}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n </g>\n );\n })}\n </g>\n </svg>\n\n {/* interactive points — real buttons overlaid on the plot (the a11y spine) */}\n <div className=\"tcl-line-chart__points\">\n {series.map((s, si) => {\n const color = seriesColor(s, si);\n return finiteOf(s).map(({ i, p, v }) => {\n // skip points cropped out by a forced yMin/yMax (no phantom buttons)\n if (v < lo || v > hi) return null;\n const id = `${sidOf(s, si)}#${i}`;\n const isSelected = id === selectedId;\n return (\n <button\n key={`${si}#${i}`}\n type=\"button\"\n className={cx('tcl-line-chart__dot', isSelected && 'is-selected')}\n style={vars({\n '--dot': color,\n left: `${(x(i) / W) * 100}%`,\n top: `${(y(v) / H) * 100}%`,\n })}\n aria-pressed={isSelected}\n aria-label={`${s.name}, ${p.x}: ${fmtVal(v)}`}\n onClick={() => select(id)}\n />\n );\n });\n })}\n </div>\n </div>\n\n {series.length > 0 && (\n <div className=\"tcl-line-chart__legend\">\n {series.map((s, si) => (\n <span key={sidOf(s, si)} className=\"tcl-line-chart__legend-item\">\n <span\n className={cx('tcl-line-chart__legend-swatch', s.dashed && 'is-dashed')}\n style={vars({ '--dot': seriesColor(s, si) })}\n aria-hidden=\"true\"\n />\n {s.name}\n </span>\n ))}\n </div>\n )}\n </div>\n\n <div className=\"tcl-line-chart__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-line-chart__inspector-title\">\n {selected.s.name}\n <span className=\"tcl-line-chart__inspector-value\">\n {' · '}\n {selected.p.x} · {fmtVal(selected.p.y as number)}\n </span>\n </p>\n {selected.p.note && <p className=\"tcl-line-chart__inspector-note\">{selected.p.note}</p>}\n </>\n ) : (\n <p className=\"tcl-line-chart__inspector-hint\">Select a point to inspect its value.</p>\n )}\n </div>\n </div>\n );\n}\n","import { cx } from '../../utils/cx';\nimport { clampPct, toneVar } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Gauge.css';\n\n/**\n * `Gauge` — a 180° dial: a value drawn as a needle against optional colored\n * quality zones (e.g. green/amber/red) and a target tick. Presentational like\n * `Sparkline`/`Meter` — it reports a single measurement and exposes it to\n * assistive tech via `role=meter` + `aria-valuetext`.\n */\nexport type GaugeTone = FillBarTone;\n\nexport interface GaugeZone {\n /** Upper bound of this band, in value units (bands run from the prior bound). */\n upTo: number;\n tone?: GaugeTone;\n color?: string;\n /** Short name announced when the value falls in this band (e.g. \"on target\"). */\n label?: string;\n}\n\nexport interface GaugeProps {\n value: number;\n min?: number;\n max: number;\n /** Unit appended to the value readout (e.g. `d`, `%`). */\n unit?: string;\n /** Colored quality bands along the arc; without them the arc fills to `value`. */\n zones?: GaugeZone[];\n /** A threshold tick drawn on the arc. */\n target?: { value: number; label?: string };\n /** Metric name shown under the value. */\n label?: string;\n /** Accessible name for the meter (defaults to `label`). */\n ariaLabel?: string;\n /** Base tone for the value arc when no `zones` are given (default `accent`). */\n tone?: GaugeTone;\n className?: string;\n}\n\nconst VB_W = 240;\nconst VB_H = 176;\nconst CX = 120;\nconst CY = 120;\nconst R = 88;\n\nconst fmt = (v: number, unit?: string): string => `${Math.round(v * 100) / 100}${unit ?? ''}`;\n\n/** Value → arc angle in degrees (180° = min at left, 0° = max at right). */\nconst angleOf = (v: number, min: number, max: number): number =>\n 180 - (clampPct(v, min, max) / 100) * 180;\n\nconst polar = (deg: number, r = R): { x: number; y: number } => {\n const rad = (deg * Math.PI) / 180;\n return { x: CX + r * Math.cos(rad), y: CY - r * Math.sin(rad) };\n};\n\nconst arcPath = (a0: number, a1: number, r = R): string => {\n const s = polar(a0, r);\n const e = polar(a1, r);\n const large = Math.abs(a1 - a0) > 180 ? 1 : 0;\n const sweep = a1 < a0 ? 1 : 0;\n return `M ${s.x.toFixed(2)} ${s.y.toFixed(2)} A ${r} ${r} 0 ${large} ${sweep} ${e.x.toFixed(2)} ${e.y.toFixed(2)}`;\n};\n\nexport function Gauge({\n value,\n min = 0,\n max,\n unit,\n zones,\n target,\n label,\n ariaLabel,\n tone = 'accent',\n className,\n}: GaugeProps) {\n // Clamp once (and coerce non-finite) so the needle, readout, aria-valuenow,\n // and aria-valuetext all report the SAME bounded value.\n const v = Number.isFinite(value) ? Math.min(max, Math.max(min, value)) : min;\n const valueAngle = angleOf(v, min, max);\n const needle = polar(valueAngle, R - 12);\n\n // The band the value sits in (only when a band actually covers it).\n const sortedZones = zones ? [...zones].sort((a, b) => a.upTo - b.upTo) : [];\n const activeZone = sortedZones.find((z) => v <= z.upTo);\n const valueText = `${fmt(v, unit)}${activeZone?.label ? `, ${activeZone.label}` : ''}`;\n\n return (\n <div\n className={cx('tcl-gauge', className)}\n role=\"meter\"\n aria-valuenow={Math.round(v * 100) / 100}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={valueText}\n aria-label={ariaLabel ?? label}\n >\n <div className=\"tcl-gauge__dial\">\n <svg className=\"tcl-gauge__svg\" viewBox={`0 0 ${VB_W} ${VB_H}`} aria-hidden=\"true\">\n {/* track */}\n <path\n className=\"tcl-gauge__track\"\n d={arcPath(angleOf(min, min, max), angleOf(max, min, max))}\n />\n\n {/* colored zones, else a single value arc */}\n {sortedZones.length > 0 ? (\n sortedZones.map((z, i) => {\n const from = Math.min(i === 0 ? min : sortedZones[i - 1].upTo, max);\n return (\n <path\n key={i}\n className=\"tcl-gauge__zone\"\n d={arcPath(angleOf(from, min, max), angleOf(Math.min(z.upTo, max), min, max))}\n style={{ stroke: z.color ?? toneVar(z.tone ?? 'neutral') }}\n />\n );\n })\n ) : (\n <path\n className=\"tcl-gauge__zone\"\n d={arcPath(angleOf(min, min, max), valueAngle)}\n style={{ stroke: toneVar(tone) }}\n />\n )}\n\n {/* target tick */}\n {target && (\n <line\n className=\"tcl-gauge__target\"\n x1={polar(angleOf(target.value, min, max), R + 9).x}\n y1={polar(angleOf(target.value, min, max), R + 9).y}\n x2={polar(angleOf(target.value, min, max), R - 17).x}\n y2={polar(angleOf(target.value, min, max), R - 17).y}\n />\n )}\n\n {/* needle */}\n <g className=\"tcl-gauge__needle\">\n <line x1={CX} y1={CY} x2={needle.x} y2={needle.y} vectorEffect=\"non-scaling-stroke\" />\n <circle cx={CX} cy={CY} r={5} />\n </g>\n </svg>\n\n <div className=\"tcl-gauge__readout\">\n <span className=\"tcl-gauge__value\">\n {Math.round(v * 100) / 100}\n {unit && <span className=\"tcl-gauge__unit\">{unit}</span>}\n </span>\n {label && <span className=\"tcl-gauge__label\">{label}</span>}\n </div>\n </div>\n\n {target && (\n <p className=\"tcl-gauge__target-label\">target {target.label ?? fmt(target.value, unit)}</p>\n )}\n\n {/* min / max scale ends */}\n <div className=\"tcl-gauge__scale\" aria-hidden=\"true\">\n <span>{fmt(min, unit)}</span>\n <span>{fmt(max, unit)}</span>\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './DonutChart.css';\n\n/**\n * `DonutChart` — a proportion ring with a center readout and an interactive\n * legend. It consumes a Trembus Visual Grammar **donut contract**. The ring is\n * drawn in SVG (decorative); the legend rows are the affordance — selecting one\n * (the Hub/BarChart spine) emphasizes its segment, swaps the center readout, and\n * reveals its share in a live inspector.\n */\nexport type DonutTone = FillBarTone;\n\nexport interface DonutSegment {\n /** Stable id for selection; falls back to `label`. */\n id?: string;\n label: string;\n /** Magnitude (non-negative). */\n value: number;\n tone?: DonutTone;\n /** Explicit segment color (hex) — overrides `tone`. */\n color?: string;\n /** Inspector detail shown when this segment is selected. */\n note?: string;\n}\n\nexport interface DonutContract {\n view?: 'donut';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit appended to segment values (e.g. `h`, `%`). */\n unit?: string;\n /** Big text in the ring center (defaults to the total). */\n centerValue?: string;\n /** Small label under the center value. */\n centerLabel?: string;\n segments: DonutSegment[];\n}\n\nexport interface DonutChartProps {\n data: DonutContract;\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n /** Ring diameter in px (default 160). */\n size?: number;\n className?: string;\n}\n\nconst TONE_CYCLE: DonutTone[] = ['accent', 'info', 'success', 'warning', 'danger', 'neutral'];\n\nconst idOf = (s: DonutSegment, i: number): string => s.id ?? `s${i}`;\nconst colorOf = (s: DonutSegment, i: number): string =>\n s.color ?? toneVar(s.tone ?? TONE_CYCLE[i % TONE_CYCLE.length]);\nconst fmt = (v: number, unit?: string): string => `${Math.round(v * 100) / 100}${unit ?? ''}`;\n\nconst R = 54;\nconst C = 2 * Math.PI * R;\n\nexport function DonutChart({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n size = 160,\n className,\n}: DonutChartProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { segments, unit } = data;\n const total = useMemo(\n () => segments.reduce((sum, s) => sum + Math.max(0, s.value), 0),\n [segments],\n );\n const selectedIndex = segments.findIndex((s, i) => idOf(s, i) === selectedId);\n const selected = selectedIndex >= 0 ? segments[selectedIndex] : undefined;\n // share of the total; negative magnitudes are floored at 0 to match the ring\n const pct = (v: number): number => (total > 0 ? Math.round((100 * Math.max(0, v)) / total) : 0);\n\n // cumulative arc offsets\n let acc = 0;\n const arcs = segments.map((s, i) => {\n const frac = total > 0 ? Math.max(0, s.value) / total : 0;\n const len = C * frac;\n const arc = { id: idOf(s, i), len, offset: -acc, color: colorOf(s, i) };\n acc += len;\n return arc;\n });\n\n const centerBig = selected\n ? fmt(Math.max(0, selected.value), unit)\n : (data.centerValue ?? fmt(total, unit));\n const centerSmall = selected ? `${pct(selected.value)}%` : (data.centerLabel ?? 'total');\n\n return (\n <div className={cx('tcl-donut', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-donut__header\">\n {data.brand && <p className=\"tcl-donut__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-donut__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-donut__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-donut__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div className=\"tcl-donut__body\">\n <div className=\"tcl-donut__ring\" style={{ width: size, height: size }}>\n <svg viewBox=\"0 0 160 160\" aria-hidden=\"true\">\n <g transform=\"rotate(-90 80 80)\">\n {arcs.map((a, i) => (\n <circle\n key={i}\n className={cx(\n 'tcl-donut__seg',\n selected && a.id !== selectedId && 'is-dim',\n a.id === selectedId && 'is-selected',\n )}\n cx={80}\n cy={80}\n r={R}\n strokeDasharray={`${a.len.toFixed(2)} ${(C - a.len).toFixed(2)}`}\n strokeDashoffset={a.offset.toFixed(2)}\n style={{ stroke: a.color }}\n />\n ))}\n </g>\n </svg>\n <div className=\"tcl-donut__center\">\n <span className=\"tcl-donut__center-value\">{centerBig}</span>\n <span className=\"tcl-donut__center-label\">{centerSmall}</span>\n </div>\n </div>\n\n <div className=\"tcl-donut__legend\" role=\"group\" aria-label={data.title ?? 'Segments'}>\n {segments.map((s, i) => {\n const id = idOf(s, i);\n const isSelected = id === selectedId;\n return (\n <button\n key={i}\n type=\"button\"\n className={cx('tcl-donut__legend-item', isSelected && 'is-selected')}\n aria-pressed={isSelected}\n aria-label={`${s.label}: ${fmt(Math.max(0, s.value), unit)}, ${pct(s.value)}%`}\n onClick={() => select(id)}\n >\n <span\n className=\"tcl-donut__swatch\"\n style={vars({ '--seg': colorOf(s, i) })}\n aria-hidden=\"true\"\n />\n <span className=\"tcl-donut__legend-label\">{s.label}</span>\n <span className=\"tcl-donut__legend-pct\">{pct(s.value)}%</span>\n </button>\n );\n })}\n </div>\n </div>\n\n <div className=\"tcl-donut__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-donut__inspector-title\">\n {selected.label}\n <span className=\"tcl-donut__inspector-value\">\n {' · '}\n {fmt(Math.max(0, selected.value), unit)} · {pct(selected.value)}%\n </span>\n </p>\n {selected.note && <p className=\"tcl-donut__inspector-note\">{selected.note}</p>}\n </>\n ) : (\n <p className=\"tcl-donut__inspector-hint\">Select a segment to inspect its share.</p>\n )}\n </div>\n </div>\n );\n}\n","import { Fragment, useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { clampPct, toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Heatmap.css';\n\n/**\n * `Heatmap` — a value-colored cell matrix (rows × columns). It consumes a Trembus\n * Visual Grammar **heatmap contract**. Cells are real focusable buttons (the\n * Hub/BarChart spine): each is shaded by a bucketed or continuous scale and, when\n * selected, reveals its row, column, and value in a live inspector.\n */\nexport type HeatTone = FillBarTone;\n\nexport interface HeatmapRow {\n label: string;\n /** Optional secondary label (e.g. a department) shown in the inspector. */\n sub?: string;\n /** Values aligned to `columns`; `null` is a no-data cell. */\n cells: (number | null)[];\n}\n\nexport interface HeatmapStop {\n /** Lower bound this bucket applies from. */\n at: number;\n tone?: HeatTone;\n color?: string;\n label?: string;\n}\n\nexport interface HeatmapContract {\n view?: 'heatmap';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit appended to cell values (e.g. `%`, `d`). */\n unit?: string;\n /** Column (x) labels along the top. */\n columns: string[];\n rows: HeatmapRow[];\n /** Bucketed color scale; when omitted, a continuous intensity of `tone` is used. */\n stops?: HeatmapStop[];\n /** Base tone for the continuous scale (default `accent`). */\n tone?: HeatTone;\n /** Domain for the continuous scale; defaults to the data extent. */\n min?: number;\n max?: number;\n /** Print the value inside each cell (good for small grids). */\n showValues?: boolean;\n}\n\nexport interface HeatmapProps {\n data: HeatmapContract;\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nconst fmt = (v: number, unit?: string): string => `${Math.round(v * 100) / 100}${unit ?? ''}`;\n\nexport function Heatmap({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n className,\n}: HeatmapProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { columns, rows, unit, stops, tone = 'accent' } = data;\n\n const [lo, hi] = useMemo(() => {\n const vs = rows\n .flatMap((r) => r.cells)\n .filter((v): v is number => v != null && Number.isFinite(v));\n const dataLo = vs.length ? Math.min(...vs) : 0;\n const dataHi = vs.length ? Math.max(...vs) : 1;\n return [data.min ?? dataLo, data.max ?? dataHi];\n }, [rows, data.min, data.max]);\n\n const sortedStops = useMemo(\n () => (stops ? [...stops].sort((a, b) => a.at - b.at) : null),\n [stops],\n );\n\n const colorFor = (v: number): string => {\n if (sortedStops) {\n let chosen = sortedStops[0];\n for (const s of sortedStops) if (v >= s.at) chosen = s;\n return chosen.color ?? toneVar(chosen.tone ?? 'accent');\n }\n const t = clampPct(v, lo, hi); // 0..100\n const mix = 15 + (t / 100) * 85; // 15%..100% of the tone over the sunken surface\n return `color-mix(in oklab, ${toneVar(tone)} ${mix.toFixed(1)}%, var(--tcl-surface-sunken))`;\n };\n\n const selected = useMemo(() => {\n if (!selectedId) return undefined;\n const [ri, ci] = selectedId.split('#').map(Number);\n if (!Number.isInteger(ri) || !Number.isInteger(ci)) return undefined;\n const row = rows[ri];\n const value = row?.cells[ci];\n if (!row || ci < 0 || ci >= columns.length || value == null || !Number.isFinite(value)) {\n return undefined;\n }\n return { row, col: columns[ci], value, ri, ci };\n }, [selectedId, rows, columns]);\n\n return (\n <div className={cx('tcl-heatmap', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-heatmap__header\">\n {data.brand && <p className=\"tcl-heatmap__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-heatmap__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-heatmap__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-heatmap__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div\n className=\"tcl-heatmap__grid\"\n role=\"group\"\n aria-label={data.title ?? 'Heatmap'}\n style={{ gridTemplateColumns: `auto repeat(${columns.length}, minmax(0, 1fr))` }}\n >\n {/* header row: corner + column labels */}\n <span className=\"tcl-heatmap__corner\" aria-hidden=\"true\" />\n {columns.map((c, ci) => (\n <span key={`c-${ci}`} className=\"tcl-heatmap__colhead\" aria-hidden=\"true\" title={c}>\n {c}\n </span>\n ))}\n\n {/* data rows — flattened into the same grid (corner-aligned) */}\n {rows.map((row, ri) => (\n <Fragment key={`r-${ri}`}>\n <span\n className=\"tcl-heatmap__rowhead\"\n aria-hidden=\"true\"\n title={row.sub ? `${row.label} · ${row.sub}` : row.label}\n >\n {row.label}\n </span>\n {columns.map((col, ci) => {\n const v = row.cells[ci];\n if (v == null || !Number.isFinite(v)) {\n return (\n <span\n key={`cell-${ri}-${ci}`}\n className=\"tcl-heatmap__cell tcl-heatmap__cell--empty\"\n aria-hidden=\"true\"\n title={`${row.label}, ${col}: no data`}\n />\n );\n }\n const id = `${ri}#${ci}`;\n const isSelected = id === selectedId;\n return (\n <button\n key={`cell-${ri}-${ci}`}\n type=\"button\"\n className={cx('tcl-heatmap__cell', isSelected && 'is-selected')}\n style={{ background: colorFor(v) }}\n aria-pressed={isSelected}\n aria-label={`${row.label}, ${col}: ${fmt(v, unit)}`}\n onClick={() => select(id)}\n >\n {data.showValues && (\n <span className=\"tcl-heatmap__cell-value\">{fmt(v, unit)}</span>\n )}\n </button>\n );\n })}\n </Fragment>\n ))}\n </div>\n\n {/* scale legend */}\n <div className=\"tcl-heatmap__scale\" aria-hidden=\"true\">\n {sortedStops ? (\n sortedStops.map((s, i) => (\n <span key={i} className=\"tcl-heatmap__scale-stop\">\n <span\n className=\"tcl-heatmap__scale-swatch\"\n style={vars({ '--sw': s.color ?? toneVar(s.tone ?? 'accent') })}\n />\n {s.label ?? `≥ ${fmt(s.at, unit)}`}\n </span>\n ))\n ) : (\n <>\n <span>{fmt(lo, unit)}</span>\n <span\n className=\"tcl-heatmap__scale-gradient\"\n style={vars({\n '--g0': `color-mix(in oklab, ${toneVar(tone)} 15%, var(--tcl-surface-sunken))`,\n '--g1': toneVar(tone),\n })}\n />\n <span>{fmt(hi, unit)}</span>\n </>\n )}\n </div>\n\n <div className=\"tcl-heatmap__inspector\" aria-live=\"polite\">\n {selected ? (\n <p className=\"tcl-heatmap__inspector-title\">\n {selected.row.label}\n {selected.row.sub && (\n <span className=\"tcl-heatmap__inspector-sub\"> · {selected.row.sub}</span>\n )}\n <span className=\"tcl-heatmap__inspector-value\">\n {' · '}\n {selected.col} · {fmt(selected.value, unit)}\n </span>\n </p>\n ) : (\n <p className=\"tcl-heatmap__inspector-hint\">Select a cell to inspect its value.</p>\n )}\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { clampPct, toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Funnel.css';\n\n/**\n * `Funnel` — a descending conversion chart (e.g. Booked → Approved → Pending).\n * Each stage is a horizontal bar sized against the top stage and a focusable\n * button (the Hub/BarChart interaction spine); selecting one reveals its value,\n * conversion versus the top, and the drop from the previous stage in a live\n * inspector. It consumes a Trembus Visual Grammar **funnel contract** so one\n * authored shape draws in both the static HTML kit and React.\n */\nexport type FunnelTone = FillBarTone;\n\nexport interface FunnelStage {\n /** Stable id for selection; falls back to the stage index. */\n id?: string;\n /** Stage label — the conversion step. */\n label: string;\n /** Magnitude (non-negative). */\n value: number;\n /** Color-coded tone for the bar (default `accent`). */\n tone?: FunnelTone;\n /** Explicit bar color (hex) — overrides `tone`. */\n color?: string;\n /** Inspector detail shown when this stage is selected. */\n note?: string;\n}\n\nexport interface FunnelContract {\n view?: 'funnel';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit suffix appended to every value label (e.g. `%`, `k`). */\n unit?: string;\n stages: FunnelStage[];\n}\n\nexport interface FunnelProps {\n data: FunnelContract;\n /** Controlled selected stage id. */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\n/** Stable, collision-proof stage key: explicit id, else the stage index. */\nconst idOf = (s: FunnelStage, i: number): string => s.id ?? `s${i}`;\nconst fmt = (v: number, unit?: string): string => `${Math.round(v * 100) / 100}${unit ?? ''}`;\n/** A percentage, rounded to a whole number for the labels. */\nconst pctOf = (v: number, base: number): number => (base > 0 ? Math.round((100 * v) / base) : 0);\n/**\n * A conversion percentage for display, clamped to [0,100]: a funnel treats its\n * reference stage as 100%, so an out-of-order stage can never print a >100%\n * label that contradicts a bar already capped at full width.\n */\nconst convOf = (v: number, base: number): number => Math.min(100, pctOf(v, base));\n\nexport function Funnel({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n className,\n}: FunnelProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { stages, unit } = data;\n\n // Conversions are measured against the top (first) stage — the funnel\n // reference (a non-negative floor keeps a stray negative from inverting it).\n const topValue = useMemo(() => Math.max(0, stages[0]?.value ?? 0), [stages]);\n const topLabel = stages[0]?.label ?? 'top';\n // Bars are sized against the largest stage so they stay visible (and never\n // exceed the track) even when the data is non-monotonic or the top stage is 0.\n const scaleBase = useMemo(\n () => Math.max(topValue, 0, ...stages.map((s) => Math.max(0, s.value))),\n [stages, topValue],\n );\n\n const selectedIndex = stages.findIndex((s, i) => idOf(s, i) === selectedId);\n const selected = selectedIndex >= 0 ? stages[selectedIndex] : undefined;\n const prev = selectedIndex > 0 ? stages[selectedIndex - 1] : undefined;\n\n return (\n <div className={cx('tcl-funnel', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-funnel__header\">\n {data.brand && <p className=\"tcl-funnel__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-funnel__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-funnel__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-funnel__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div className=\"tcl-funnel__stages\" role=\"group\" aria-label={data.title ?? 'Funnel'}>\n {stages.map((s, i) => {\n const id = idOf(s, i);\n const v = Math.max(0, s.value);\n const pct = clampPct(v, 0, scaleBase);\n const pctTop = convOf(v, topValue);\n const isSelected = id === selectedId;\n const barColor = s.color ?? toneVar(s.tone ?? 'accent');\n return (\n <button\n key={id}\n type=\"button\"\n className={cx('tcl-funnel__stage', isSelected && 'is-selected')}\n aria-pressed={isSelected}\n aria-label={`${s.label}: ${fmt(v, unit)}, ${pctTop}% of ${topLabel}`}\n onClick={() => select(id)}\n >\n <span className=\"tcl-funnel__label\" title={s.label}>\n {s.label}\n </span>\n <span className=\"tcl-funnel__track\">\n <span\n className=\"tcl-funnel__bar\"\n style={vars({ '--pct': `${pct}%`, '--bar-color': barColor })}\n />\n </span>\n <span className=\"tcl-funnel__readout\">\n <span className=\"tcl-funnel__value\">{fmt(v, unit)}</span>\n <span className=\"tcl-funnel__conv\">{pctTop}%</span>\n </span>\n </button>\n );\n })}\n </div>\n\n <div className=\"tcl-funnel__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-funnel__inspector-title\">\n {selected.label}\n <span className=\"tcl-funnel__inspector-value\">\n {' · '}\n {fmt(Math.max(0, selected.value), unit)} ·{' '}\n {convOf(Math.max(0, selected.value), topValue)}% of {topLabel}\n </span>\n </p>\n {prev && (\n <p className=\"tcl-funnel__inspector-drop\">\n {(() => {\n const cur = Math.max(0, selected.value);\n const base = Math.max(0, prev.value);\n const drop = base - cur;\n return drop > 0\n ? `Down ${fmt(drop, unit)} (${pctOf(drop, base)}%) from ${prev.label}`\n : `No drop from ${prev.label} (${convOf(cur, base)}% retained)`;\n })()}\n </p>\n )}\n {selected.note && <p className=\"tcl-funnel__inspector-note\">{selected.note}</p>}\n </>\n ) : (\n <p className=\"tcl-funnel__inspector-hint\">Select a stage to inspect its conversion.</p>\n )}\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Treemap.css';\n\n/**\n * `Treemap` — a space-filling chart that sizes each node's rectangle to its share\n * of the whole via a deterministic **squarified** layout (ported from the static\n * HTML PMO kit, so one authored contract draws in both places). The tiling is\n * computed in a fixed-aspect box; each cell is then an HTML `<button>` positioned\n * by percentage over that box (the LineChart overlay lesson) so selection stays\n * accessible — the Hub/BarChart interaction spine. Selecting a cell reveals its\n * value, share, and note in a live inspector.\n */\nexport type TreemapTone = FillBarTone;\n\nexport interface TreemapNode {\n /** Stable id for selection; falls back to the node index. */\n id?: string;\n /** Node label — shown in the cell when it is large enough. */\n label: string;\n /** Magnitude (non-negative); zero/negative nodes get no cell. */\n value: number;\n /** Color-coded tone (defaults cycle through the ontology by node order). */\n tone?: TreemapTone;\n /** Explicit cell color (hex) — overrides `tone`. */\n color?: string;\n /** Secondary label shown in the inspector. */\n sub?: string;\n /** Inspector detail shown when this node is selected. */\n note?: string;\n}\n\nexport interface TreemapContract {\n view?: 'treemap';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n /** Unit suffix appended to every value label (e.g. `h`, `k`). */\n unit?: string;\n nodes: TreemapNode[];\n}\n\nexport interface TreemapProps {\n data: TreemapContract;\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\nconst TONE_CYCLE: TreemapTone[] = ['accent', 'info', 'success', 'warning', 'danger', 'neutral'];\n\n// The foreground token designed to sit on each solid tone (white in light theme,\n// dark in dark theme) — keeps cell text legible without guessing contrast.\nconst TONE_FG: Record<TreemapTone, string> = {\n accent: 'var(--tcl-accent-fg)',\n info: 'var(--tcl-status-info-fg)',\n success: 'var(--tcl-status-success-fg)',\n warning: 'var(--tcl-status-warning-fg)',\n danger: 'var(--tcl-status-danger-fg)',\n neutral: 'var(--tcl-status-neutral-fg)',\n};\n\n/** Stable, collision-proof node key: explicit id, else the node index. */\nconst idOf = (n: TreemapNode, i: number): string => n.id ?? `s${i}`;\nconst toneOf = (n: TreemapNode, i: number): TreemapTone =>\n n.tone ?? TONE_CYCLE[i % TONE_CYCLE.length];\nconst fmt = (v: number, unit?: string): string => `${Math.round(v * 100) / 100}${unit ?? ''}`;\n\n// Layout box. The container carries this exact aspect ratio so squarified cells\n// render square and the percentage overlay aligns to the tiling.\nconst W = 600;\nconst H = 400;\n/** A cell must be at least this big (in layout units) to show its label/value. */\nconst TEXT_W = 66;\nconst TEXT_H = 38;\n\ninterface Cell {\n id: string;\n i: number;\n node: TreemapNode;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\ninterface Item {\n id: string;\n i: number;\n node: TreemapNode;\n area: number;\n}\n\n/**\n * Squarified treemap (Bruls/Huizing/van Wijk). Lays positive-area items into the\n * box, packing each row along the shorter remaining side to keep aspect ratios\n * near 1. Returns a rect per item in [0,W]×[0,H] layout space.\n */\nfunction squarify(items: Item[]): Cell[] {\n const cells: Cell[] = [];\n let x = 0;\n let y = 0;\n let w = W;\n let h = H;\n let row: Item[] = [];\n const rest = items.slice();\n\n // Worst (largest) aspect ratio in a row laid along a strip of length `len`.\n const worst = (r: Item[], len: number): number => {\n const s = r.reduce((a, it) => a + it.area, 0);\n if (s <= 0 || len <= 0) return Infinity;\n const side = s / len;\n let max = 0;\n for (const it of r) {\n const other = it.area / side;\n if (other <= 0) return Infinity;\n max = Math.max(max, side / other, other / side);\n }\n return max;\n };\n\n const layoutRow = (r: Item[], len: number): void => {\n const s = r.reduce((a, it) => a + it.area, 0);\n const side = s / len; // strip thickness\n let off = 0;\n for (const it of r) {\n const other = side > 0 ? it.area / side : 0; // extent along the strip\n if (w >= h) cells.push({ ...it, x, y: y + off, w: side, h: other });\n else cells.push({ ...it, x: x + off, y, w: other, h: side });\n off += other;\n }\n if (w >= h) {\n x += side;\n w -= side;\n } else {\n y += side;\n h -= side;\n }\n };\n\n while (rest.length) {\n const len = Math.min(w, h);\n const n = rest.shift() as Item;\n if (!row.length) {\n row.push(n);\n continue;\n }\n if (worst([...row, n], len) <= worst(row, len)) {\n row.push(n);\n } else {\n layoutRow(row, len);\n row = [n];\n }\n }\n if (row.length) layoutRow(row, Math.min(w, h));\n return cells;\n}\n\nexport function Treemap({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n className,\n}: TreemapProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const { nodes, unit } = data;\n\n // Positive-area items only (keeping their ORIGINAL index for stable ids), then\n // the squarified rects. Total drives both areas and the share percentages.\n const { cells, total } = useMemo(() => {\n const positive = nodes\n .map((node, i) => ({ node, i }))\n .filter(({ node }) => Number.isFinite(node.value) && node.value > 0);\n const sum = positive.reduce((a, { node }) => a + node.value, 0);\n if (sum <= 0) return { cells: [] as Cell[], total: 0 };\n const items: Item[] = positive.map(({ node, i }) => ({\n id: idOf(node, i),\n i,\n node,\n area: (node.value / sum) * W * H,\n }));\n return { cells: squarify(items), total: sum };\n }, [nodes]);\n\n const pct = (v: number): number => (total > 0 ? Math.round((100 * v) / total) : 0);\n const selected = cells.find((c) => c.id === selectedId)?.node;\n\n return (\n <div className={cx('tcl-treemap', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-treemap__header\">\n {data.brand && <p className=\"tcl-treemap__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-treemap__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-treemap__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-treemap__caption\">{data.caption}</p>}\n </header>\n )}\n\n <div\n className=\"tcl-treemap__plot\"\n role=\"group\"\n aria-label={data.title ?? 'Treemap'}\n style={{ aspectRatio: `${W} / ${H}` }}\n >\n {cells.length === 0 ? (\n <p className=\"tcl-treemap__empty\">No data in range</p>\n ) : (\n cells.map((c) => {\n const isSelected = c.id === selectedId;\n // Clamp to the box so float drift can't push a cell past the edge.\n const left = (c.x / W) * 100;\n const top = (c.y / H) * 100;\n const width = (Math.min(c.w, W - c.x) / W) * 100;\n const height = (Math.min(c.h, H - c.y) / H) * 100;\n const showText = c.w >= TEXT_W && c.h >= TEXT_H;\n const tone = toneOf(c.node, c.i);\n // Custom hex colours can't map to a tone fg → fall back to the themed\n // text colour (the bg halo in CSS keeps it readable).\n const fg = c.node.color ? 'var(--tcl-text)' : TONE_FG[tone];\n return (\n <button\n key={c.id}\n type=\"button\"\n className={cx('tcl-treemap__cell', isSelected && 'is-selected')}\n style={vars({\n '--cell': c.node.color ?? toneVar(tone),\n '--cell-fg': fg,\n '--cell-halo': c.node.color\n ? '0 0 2px var(--tcl-bg), 0 1px 1px var(--tcl-bg)'\n : 'none',\n left: `${left}%`,\n top: `${top}%`,\n width: `${width}%`,\n height: `${height}%`,\n })}\n aria-pressed={isSelected}\n aria-label={`${c.node.label}: ${fmt(c.node.value, unit)}, ${pct(c.node.value)}% of total`}\n onClick={() => select(c.id)}\n >\n {showText && (\n <span className=\"tcl-treemap__cell-text\">\n <span className=\"tcl-treemap__cell-label\">{c.node.label}</span>\n <span className=\"tcl-treemap__cell-value\">{fmt(c.node.value, unit)}</span>\n </span>\n )}\n </button>\n );\n })\n )}\n </div>\n\n <div className=\"tcl-treemap__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-treemap__inspector-title\">\n {selected.label}\n {selected.sub && (\n <span className=\"tcl-treemap__inspector-sub\"> · {selected.sub}</span>\n )}\n <span className=\"tcl-treemap__inspector-value\">\n {' · '}\n {fmt(selected.value, unit)} · {pct(selected.value)}%\n </span>\n </p>\n {selected.note && <p className=\"tcl-treemap__inspector-note\">{selected.note}</p>}\n </>\n ) : (\n <p className=\"tcl-treemap__inspector-hint\">Select a cell to inspect its share.</p>\n )}\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Swimlane.css';\n\n/**\n * `Swimlane` — a process diagram for **human ↔ LLM workflows**. Each lane (row) is\n * an actor (human / ai / system / tool); each step is a focusable `<button>` placed\n * in its lane and ordered left-to-right by column, with decorative SVG connectors\n * tracing the **handoffs** as work crosses lanes. It consumes a Trembus Visual\n * Grammar **swimlane contract** so one authored shape draws in both the static HTML\n * kit and React.\n *\n * Layout is fully deterministic — lane row × explicit/sequential column, no layout\n * engine — which is why it lives in the Tier-1 viz spine alongside Funnel/Treemap.\n * It is the Hub/BarChart interaction spine: controlled/uncontrolled `selectedId`\n * (+ `defaultSelectedId` + `onSelect`), and selecting a step reveals its actor,\n * status, note, and handoffs in a live (`aria-live`) inspector.\n */\nexport type SwimlaneStatus = 'done' | 'active' | 'pending' | 'blocked' | 'skipped';\nexport type SwimlaneLaneKind = 'human' | 'ai' | 'system' | 'tool' | 'neutral';\n\nexport interface SwimlaneLane {\n /** Stable id; steps reference it by `id` OR `label`. Falls back to the index. */\n id?: string;\n /** Lane name — the actor (e.g. \"You\", \"Claude\", \"Tools\"). */\n label: string;\n /** Actor kind → the lane's accent + dot (default `neutral`). */\n kind?: SwimlaneLaneKind;\n}\n\nexport interface SwimlaneStep {\n /** Stable id for selection + handoff targeting; falls back to the step index. */\n id?: string;\n /** Owning lane — matches a lane's `id` or `label`. */\n lane: string;\n /** Step name. */\n label: string;\n /** Column (0-based). Omit to flow sequentially after the previous step. */\n col?: number;\n /** Progress state → the card's accent + status dot (default `pending`). */\n status?: SwimlaneStatus;\n /** Secondary line shown in the card + inspector. */\n detail?: string;\n /** Inspector detail shown when this step is selected. */\n note?: string;\n /**\n * Successor step ids this step hands off to (draws a connector to each).\n * Omit to connect to the next step in order; pass `[]` for a terminal step.\n */\n to?: string[];\n}\n\nexport interface SwimlaneContract {\n view?: 'swimlane';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n lanes: SwimlaneLane[];\n steps: SwimlaneStep[];\n}\n\nexport interface SwimlaneProps {\n data: SwimlaneContract;\n /** Controlled selected step id. */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\n/** Stable, collision-proof keys: explicit id, else the index (NEVER the label). */\nconst laneIdOf = (l: SwimlaneLane, i: number): string => l.id ?? `l${i}`;\nconst stepIdOf = (s: SwimlaneStep, i: number): string => s.id ?? `s${i}`;\n\nconst KIND_TONE: Record<SwimlaneLaneKind, FillBarTone> = {\n human: 'info',\n ai: 'accent',\n system: 'neutral',\n tool: 'warning',\n neutral: 'neutral',\n};\n\nconst STATUS_META: Record<SwimlaneStatus, { tone: FillBarTone; word: string }> = {\n done: { tone: 'success', word: 'Done' },\n active: { tone: 'accent', word: 'Active' },\n pending: { tone: 'neutral', word: 'Pending' },\n blocked: { tone: 'danger', word: 'Blocked' },\n skipped: { tone: 'neutral', word: 'Skipped' },\n};\n\n// Deterministic geometry (px). The track SVG and the absolutely-positioned step\n// buttons share this exact coordinate space, so connectors always meet their cells.\nconst COL_W = 168; // column pitch\nconst CELL_W = 140; // step card width (COL_W − CELL_W = the connector gutter)\nconst LANE_H = 88; // lane row pitch\nconst CELL_H = 60; // step card height\nconst PAD = 14; // track inset so focus rings never clip at the edges\n\ninterface PlacedStep {\n id: string;\n i: number;\n step: SwimlaneStep;\n laneLabel: string;\n row: number;\n col: number;\n x: number;\n y: number;\n}\n\ninterface Edge {\n key: string;\n from: string;\n to: string;\n /** Bezier path + the right-pointing arrowhead anchor. */\n d: string;\n ax: number;\n ay: number;\n}\n\ninterface Layout {\n lanes: ReadonlyArray<{ id: string; lane: SwimlaneLane; row: number }>;\n steps: PlacedStep[];\n edges: Edge[];\n width: number;\n height: number;\n}\n\nfunction buildLayout(data: SwimlaneContract): Layout {\n const laneList = data.lanes ?? [];\n const stepList = data.steps ?? [];\n\n const lanes = laneList.map((lane, row) => ({ id: laneIdOf(lane, row), lane, row }));\n // Resolve a step's `lane` by lane id OR label (authored contracts use either).\n const rowByKey = new Map<string, number>();\n lanes.forEach(({ id, lane, row }) => {\n rowByKey.set(id, row);\n rowByKey.set(lane.label, row);\n });\n\n // Column assignment: honor explicit `col`, otherwise flow to the next free\n // column. Explicit cols still advance the cursor so later steps don't overlap.\n let cursor = 0;\n const steps: PlacedStep[] = [];\n stepList.forEach((step, i) => {\n const row = rowByKey.get(step.lane);\n if (row === undefined) return; // step targets an unknown lane → skip it\n const col = Math.max(0, Number.isFinite(step.col) ? (step.col as number) : cursor);\n cursor = Math.max(cursor, col + 1);\n steps.push({\n id: stepIdOf(step, i),\n i,\n step,\n laneLabel: lanes[row].lane.label,\n row,\n col,\n x: PAD + col * COL_W,\n y: row * LANE_H + (LANE_H - CELL_H) / 2,\n });\n });\n\n const byId = new Map(steps.map((p) => [p.id, p]));\n\n // Connectors: explicit `to`, else the next step in document order.\n const edges: Edge[] = [];\n steps.forEach((src, idx) => {\n const next = steps[idx + 1];\n const targets = src.step.to ?? (next ? [next.id] : []);\n // Dedupe targets so a repeated/self id can't draw a connector twice or\n // collide on the React key (`from->to`).\n const seen = new Set<string>();\n targets.forEach((tid) => {\n if (tid === src.id || seen.has(tid)) return;\n seen.add(tid);\n const tgt = byId.get(tid);\n if (!tgt) return;\n const sx = src.x + CELL_W;\n const sy = src.y + CELL_H / 2;\n const tx = tgt.x;\n const ty = tgt.y + CELL_H / 2;\n const dx = Math.max(24, Math.abs(tx - sx) * 0.5);\n edges.push({\n key: `${src.id}->${tgt.id}`,\n from: src.id,\n to: tgt.id,\n d: `M ${sx} ${sy} C ${sx + dx} ${sy}, ${tx - dx} ${ty}, ${tx} ${ty}`,\n ax: tx,\n ay: ty,\n });\n });\n });\n\n const maxCol = steps.reduce((m, p) => Math.max(m, p.col), 0);\n return {\n lanes,\n steps,\n edges,\n width: PAD + maxCol * COL_W + CELL_W + PAD,\n height: Math.max(1, lanes.length) * LANE_H,\n };\n}\n\nexport function Swimlane({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n className,\n}: SwimlaneProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const layout = useMemo(() => buildLayout(data), [data]);\n const { lanes, steps, edges, width, height } = layout;\n\n const selected = steps.find((p) => p.id === selectedId);\n const successors = selected\n ? edges.filter((e) => e.from === selected.id).map((e) => steps.find((p) => p.id === e.to))\n : [];\n const hasContent = steps.length > 0;\n\n return (\n <div className={cx('tcl-swimlane', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-swimlane__header\">\n {data.brand && <p className=\"tcl-swimlane__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-swimlane__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-swimlane__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-swimlane__caption\">{data.caption}</p>}\n </header>\n )}\n\n {hasContent ? (\n <div className=\"tcl-swimlane__board\">\n {/* sticky actor column */}\n <div className=\"tcl-swimlane__lanes\" aria-hidden=\"true\">\n {lanes.map(({ id, lane }) => {\n const tone = KIND_TONE[lane.kind ?? 'neutral'];\n return (\n <div\n key={id}\n className=\"tcl-swimlane__lane-head\"\n style={vars({ '--lane-tone': toneVar(tone), height: `${LANE_H}px` })}\n >\n <span className=\"tcl-swimlane__lane-dot\" />\n <span className=\"tcl-swimlane__lane-label\">{lane.label}</span>\n {lane.kind && lane.kind !== 'neutral' && (\n <span className=\"tcl-swimlane__lane-kind\">{lane.kind}</span>\n )}\n </div>\n );\n })}\n </div>\n\n {/* the track: lane stripes + connector SVG + step buttons, one coord space */}\n <div\n className=\"tcl-swimlane__track\"\n style={vars({ width: `${width}px`, height: `${height}px` })}\n >\n {lanes.map(({ id, row }) => (\n <div\n key={id}\n className={cx('tcl-swimlane__stripe', row % 2 === 1 && 'is-alt')}\n style={vars({ top: `${row * LANE_H}px`, height: `${LANE_H}px` })}\n aria-hidden=\"true\"\n />\n ))}\n\n <svg\n className=\"tcl-swimlane__edges\"\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n aria-hidden=\"true\"\n >\n {edges.map((e) => {\n const active = selectedId != null && (e.from === selectedId || e.to === selectedId);\n return (\n <g key={e.key} className={cx('tcl-swimlane__edge', active && 'is-active')}>\n <path className=\"tcl-swimlane__edge-line\" d={e.d} />\n <path\n className=\"tcl-swimlane__edge-arrow\"\n d={`M ${e.ax} ${e.ay} L ${e.ax - 7} ${e.ay - 4} L ${e.ax - 7} ${e.ay + 4} Z`}\n />\n </g>\n );\n })}\n </svg>\n\n <div className=\"tcl-swimlane__steps\" role=\"group\" aria-label={data.title ?? 'Swimlane'}>\n {steps.map((p) => {\n const status = p.step.status ?? 'pending';\n const meta = STATUS_META[status];\n const isSelected = p.id === selectedId;\n return (\n <button\n key={p.id}\n type=\"button\"\n className={cx(\n 'tcl-swimlane__step',\n `is-${status}`,\n isSelected && 'is-selected',\n )}\n style={vars({\n '--step-tone': toneVar(meta.tone),\n left: `${p.x}px`,\n top: `${p.y}px`,\n width: `${CELL_W}px`,\n height: `${CELL_H}px`,\n })}\n aria-pressed={isSelected}\n aria-label={`${p.laneLabel}: ${p.step.label} — ${meta.word}`}\n onClick={() => select(p.id)}\n >\n <span className=\"tcl-swimlane__step-top\">\n <span className=\"tcl-swimlane__step-dot\" aria-hidden=\"true\" />\n <span className=\"tcl-swimlane__step-label\" title={p.step.label}>\n {p.step.label}\n </span>\n </span>\n {p.step.detail && (\n <span className=\"tcl-swimlane__step-detail\">{p.step.detail}</span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n </div>\n ) : (\n <p className=\"tcl-swimlane__empty\">No steps to lay out</p>\n )}\n\n <div className=\"tcl-swimlane__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-swimlane__inspector-title\">\n <span className=\"tcl-swimlane__inspector-lane\">{selected.laneLabel}</span>\n {' · '}\n {selected.step.label}\n <span className=\"tcl-swimlane__inspector-status\">\n {' · '}\n {STATUS_META[selected.step.status ?? 'pending'].word}\n </span>\n </p>\n {selected.step.note && (\n <p className=\"tcl-swimlane__inspector-note\">{selected.step.note}</p>\n )}\n {successors.length > 0 && (\n <p className=\"tcl-swimlane__inspector-handoff\">\n Hands off to{' '}\n {successors\n .filter((s): s is PlacedStep => s != null)\n .map((s) => `${s.laneLabel} · ${s.step.label}`)\n .join(', ')}\n </p>\n )}\n </>\n ) : (\n <p className=\"tcl-swimlane__inspector-hint\">Select a step to inspect its handoff.</p>\n )}\n </div>\n </div>\n );\n}\n","import { useMemo, useState } from 'react';\nimport type { ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport { Badge } from '../Badge/Badge';\nimport { Table } from '../Table/Table';\nimport type { SortDescriptor } from '../Table/Table';\nimport type { SwimlaneStatus } from '../Swimlane/Swimlane';\nimport './RunHistory.css';\n\n/**\n * `RunHistory` — a selectable log of past executions (\"runs\") of a workflow or any\n * data-driven item (CI pipelines, ETL jobs, agent sessions). Built on the public\n * `Table`: each run is a focusable, keyboard-accessible row (status · when ·\n * duration · steps · outputs) and selecting one reveals its outcome note and the\n * real **output/result links** in a single `aria-live` inspector — the Hub/BarChart\n * interaction spine, with controlled/uncontrolled `selectedRunId`.\n *\n * A run carries an optional `stepOutcomes` (per-step statuses, reusing the Swimlane\n * vocabulary) which lets a host \"time-travel\" a `Swimlane` to that run — see the\n * `Examples/SwimlaneRuns` page. Standalone, RunHistory needs no Swimlane.\n */\nexport type RunStatus = 'succeeded' | 'failed' | 'running' | 'cancelled' | 'partial' | 'queued';\nexport type RunOutputKind = 'pr' | 'doc' | 'log' | 'dataset' | 'deploy' | 'link';\n\nexport interface RunOutput {\n /** Stable id; falls back to the index, NEVER the label (the recurring viz-id gotcha). */\n id?: string;\n /** Link/artifact text, e.g. \"transcript.md\", \"PR #482\". */\n label: string;\n /** When set the chip is a real `<a>`; omit for a static (non-link) artifact chip. */\n href?: string;\n /** Artifact class → a tone-coded chip. */\n kind?: RunOutputKind;\n}\n\n/** Per-step outcome for THIS run — the bridge that lets a host time-travel a Swimlane. */\nexport interface RunStepOutcome {\n /** Matches a `SwimlaneStep` id. */\n step: string;\n /** Reuses the step status ontology verbatim. */\n status: SwimlaneStatus;\n /** Artifacts produced at this step. */\n outputs?: RunOutput[];\n}\n\nexport interface RunRecord {\n /** Stable id for selection; falls back to `r${i}`. */\n id?: string;\n /** Human label, e.g. \"#128\" or \"nightly-2026-06-21\"; defaults to the id. */\n label?: string;\n /** Outcome of THIS execution (distinct from a step's status). */\n status: RunStatus;\n /** When it ran (ISO string / epoch ms / Date) → `<time>` + a relative readout. */\n startedAt: string | number | Date;\n /** Wall-clock ms → \"4m 12s\"; omit for an in-flight run (renders an em-dash). */\n durationMs?: number;\n /** What kicked it off, e.g. \"manual\", \"schedule\", an author. */\n trigger?: string;\n /** One-line outcome shown in the inspector. */\n note?: string;\n /** Per-step outcomes — powers run→step time-travel in a host. */\n stepOutcomes?: RunStepOutcome[];\n /** Run-level artifacts/links (rolled up); shown as chips in the inspector. */\n outputs?: RunOutput[];\n /** Optional precomputed step tally for the dense cell (else derived from stepOutcomes). */\n tally?: Partial<Record<SwimlaneStatus, number>>;\n}\n\nexport interface RunHistoryContract {\n view?: 'run-history';\n brand?: string;\n code?: string;\n title?: string;\n caption?: string;\n runs: RunRecord[];\n}\n\nexport interface RunHistoryProps {\n data: RunHistoryContract;\n /** Controlled selected run id. */\n selectedRunId?: string;\n defaultSelectedRunId?: string;\n onSelectRun?: (id: string) => void;\n /** Row padding scale, passed through to `Table` (default `comfortable`). */\n density?: 'comfortable' | 'compact';\n className?: string;\n}\n\n/** Run-level tone map — its own palette, mapped to the SAME tone tokens, never SwimlaneStatus. */\nconst RUN_STATUS_META: Record<RunStatus, { tone: FillBarTone; word: string }> = {\n succeeded: { tone: 'success', word: 'Succeeded' },\n failed: { tone: 'danger', word: 'Failed' },\n running: { tone: 'accent', word: 'Running' },\n cancelled: { tone: 'warning', word: 'Cancelled' },\n partial: { tone: 'warning', word: 'Partial' },\n queued: { tone: 'neutral', word: 'Queued' },\n};\n\n/** Per-step status → tone + word (for the dense step tally). */\nconst STEP_META: Record<SwimlaneStatus, { tone: FillBarTone; word: string }> = {\n done: { tone: 'success', word: 'done' },\n active: { tone: 'accent', word: 'active' },\n blocked: { tone: 'danger', word: 'blocked' },\n pending: { tone: 'neutral', word: 'pending' },\n skipped: { tone: 'neutral', word: 'skipped' },\n};\nconst STEP_ORDER: SwimlaneStatus[] = ['done', 'active', 'blocked', 'pending', 'skipped'];\n\nconst OUTPUT_TONE: Record<RunOutputKind, FillBarTone> = {\n pr: 'accent',\n deploy: 'success',\n doc: 'info',\n dataset: 'info',\n log: 'neutral',\n link: 'neutral',\n};\n\nconst OUTPUT_CAP = 8;\n\nconst idOf = (r: RunRecord, i: number): string => r.id ?? `r${i}`;\nconst outIdOf = (o: RunOutput, i: number): string => o.id ?? `o${i}`;\n\nfunction toMs(value: string | number | Date): number | null {\n const t =\n value instanceof Date ? value.getTime() : typeof value === 'number' ? value : Date.parse(value);\n return Number.isFinite(t) ? t : null;\n}\n\nfunction toIso(value: string | number | Date): string | undefined {\n const t = toMs(value);\n return t == null ? (typeof value === 'string' ? value : undefined) : new Date(t).toISOString();\n}\n\n/** A compact relative readout against a single captured `now`. */\nfunction formatWhen(value: string | number | Date, now: number): string {\n const t = toMs(value);\n if (t == null) return '';\n const past = now - t >= 0;\n const sec = Math.round(Math.abs(now - t) / 1000);\n if (sec < 45) return 'just now';\n const min = Math.round(sec / 60);\n if (min < 60) return past ? `${min}m ago` : `in ${min}m`;\n const hr = Math.round(min / 60);\n if (hr < 24) return past ? `${hr}h ago` : `in ${hr}h`;\n const day = Math.round(hr / 24);\n if (day === 1) return past ? 'yesterday' : 'tomorrow';\n if (day < 7) return past ? `${day}d ago` : `in ${day}d`;\n return new Date(t).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n}\n\nfunction formatDuration(ms?: number): string {\n if (ms == null || !Number.isFinite(ms) || ms < 0) return '—';\n const s = Math.round(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n const sr = s % 60;\n if (m < 60) return sr ? `${m}m ${sr}s` : `${m}m`;\n const h = Math.floor(m / 60);\n const mr = m % 60;\n return mr ? `${h}h ${mr}m` : `${h}h`;\n}\n\nfunction tallyOf(run: RunRecord): Array<[SwimlaneStatus, number]> {\n const t: Partial<Record<SwimlaneStatus, number>> = run.tally ?? {};\n if (!run.tally && run.stepOutcomes) {\n for (const o of run.stepOutcomes) t[o.status] = (t[o.status] ?? 0) + 1;\n }\n return STEP_ORDER.filter((s) => (t[s] ?? 0) > 0).map((s) => [s, t[s] as number]);\n}\n\nfunction ranCount(run: RunRecord): number {\n return tallyOf(run).reduce((sum, [, n]) => sum + n, 0);\n}\n\nexport function RunHistory({\n data,\n selectedRunId: selProp,\n defaultSelectedRunId,\n onSelectRun,\n density = 'comfortable',\n className,\n}: RunHistoryProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedRunId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelectRun?.(id);\n };\n\n const [sort, setSort] = useState<SortDescriptor>({ column: 'started', direction: 'desc' });\n\n // Stable ids first (original index), so sorting can never change a run's key.\n const withIds = useMemo(\n () => (data.runs ?? []).map((run, i) => ({ run, id: idOf(run, i) })),\n [data.runs],\n );\n\n const ordered = useMemo(() => {\n const dir = sort.direction === 'asc' ? 1 : -1;\n return [...withIds].sort((a, b) => {\n if (sort.column === 'duration') {\n const da = a.run.durationMs;\n const db = b.run.durationMs;\n // in-flight (no duration) sinks to the end regardless of direction\n if (da == null && db == null) return 0;\n if (da == null) return 1;\n if (db == null) return -1;\n return (da - db) * dir;\n }\n return ((toMs(a.run.startedAt) ?? 0) - (toMs(b.run.startedAt) ?? 0)) * dir;\n });\n }, [withIds, sort]);\n\n const selected = withIds.find((x) => x.id === selectedId)?.run;\n const now = Date.now();\n\n return (\n <div className={cx('tcl-run-history', className)}>\n {(data.code || data.title || data.caption || data.brand) && (\n <header className=\"tcl-run-history__header\">\n {data.brand && <p className=\"tcl-run-history__brand\">{data.brand}</p>}\n {data.code && <p className=\"tcl-run-history__code\">{data.code}</p>}\n {data.title && <p className=\"tcl-run-history__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-run-history__caption\">{data.caption}</p>}\n </header>\n )}\n\n <Table\n density={density}\n sortDescriptor={sort}\n onSortChange={setSort}\n aria-label={data.title ?? 'Run history'}\n >\n <Table.Head>\n <Table.Row>\n <Table.HeaderCell>Run</Table.HeaderCell>\n <Table.HeaderCell sortKey=\"started\">Started</Table.HeaderCell>\n <Table.HeaderCell sortKey=\"duration\" align=\"end\">\n Duration\n </Table.HeaderCell>\n <Table.HeaderCell>Steps</Table.HeaderCell>\n <Table.HeaderCell align=\"end\">Outputs</Table.HeaderCell>\n </Table.Row>\n </Table.Head>\n <Table.Body>\n {ordered.length === 0 ? (\n <Table.Empty colSpan={5}>No runs yet</Table.Empty>\n ) : (\n ordered.map(({ run, id }) => {\n const meta = RUN_STATUS_META[run.status];\n const isSelected = id === selectedId;\n const label = run.label ?? id;\n const when = formatWhen(run.startedAt, now);\n const dur = formatDuration(run.durationMs);\n const tally = tallyOf(run);\n const outCount = run.outputs?.length ?? 0;\n const stepsSummary =\n tally.length > 0\n ? tally.map(([s, n]) => `${n} ${STEP_META[s].word}`).join(', ')\n : 'no step detail';\n return (\n <Table.Row\n key={id}\n rowKey={id}\n onClick={() => select(id)}\n className={cx(isSelected && 'is-run-selected')}\n >\n <Table.Cell>\n <span className=\"tcl-run-history__run\">\n {/* visible badge + label are decorative; the sr span is the\n authoritative, space-correct accessible name for the row button */}\n <span\n aria-hidden=\"true\"\n className={cx(\n 'tcl-run-history__status',\n run.status === 'running' && 'is-running',\n )}\n >\n <Badge tone={meta.tone} dot variant=\"soft\" size=\"sm\">\n {meta.word}\n </Badge>\n </span>\n <span aria-hidden=\"true\" className=\"tcl-run-history__run-label\">\n {label}\n </span>\n <span className=\"tcl-run-history__sr\">\n {meta.word} {label}, started {when || 'unknown'},{' '}\n {dur === '—' ? 'in progress' : dur}, {stepsSummary}, {outCount} output\n {outCount === 1 ? '' : 's'}\n </span>\n </span>\n </Table.Cell>\n <Table.Cell>\n <time className=\"tcl-run-history__when\" dateTime={toIso(run.startedAt)}>\n {when}\n </time>\n </Table.Cell>\n <Table.Cell numeric>{dur}</Table.Cell>\n <Table.Cell>\n <span className=\"tcl-run-history__steps\">\n {tally.length === 0 ? (\n <span className=\"tcl-run-history__steps-none\">—</span>\n ) : (\n tally.map(([s, n], i) => (\n <span\n key={s}\n className={cx('tcl-run-history__tally', `is-${STEP_META[s].tone}`)}\n >\n {i > 0 && <span className=\"tcl-run-history__tally-sep\"> · </span>}\n {n} {STEP_META[s].word}\n </span>\n ))\n )}\n </span>\n </Table.Cell>\n <Table.Cell numeric>{outCount}</Table.Cell>\n </Table.Row>\n );\n })\n )}\n </Table.Body>\n </Table>\n\n <div className=\"tcl-run-history__inspector\" aria-live=\"polite\">\n {selected ? (\n <RunInspector run={selected} />\n ) : (\n <p className=\"tcl-run-history__inspector-hint\">\n Select a run to see its outputs and results.\n </p>\n )}\n </div>\n </div>\n );\n}\n\nfunction RunInspector({ run }: { run: RunRecord }) {\n const meta = RUN_STATUS_META[run.status];\n const dur = formatDuration(run.durationMs);\n const ran = ranCount(run);\n const outputs = run.outputs ?? [];\n const shown = outputs.slice(0, OUTPUT_CAP);\n const extra = outputs.length - shown.length;\n return (\n <>\n <p className=\"tcl-run-history__inspector-title\">\n <span className={cx('tcl-run-history__status', run.status === 'running' && 'is-running')}>\n <Badge tone={meta.tone} dot variant=\"soft\" size=\"sm\">\n {meta.word}\n </Badge>\n </span>\n <span className=\"tcl-run-history__inspector-label\">{run.label ?? 'Run'}</span>\n <span className=\"tcl-run-history__inspector-meta\">\n {' · '}\n {dur === '—' ? 'in progress' : dur}\n {ran > 0 && ` · ran ${ran} step${ran === 1 ? '' : 's'}`}\n {run.trigger && ` · ${run.trigger}`}\n </span>\n </p>\n {run.note && <p className=\"tcl-run-history__inspector-note\">{run.note}</p>}\n {outputs.length > 0 ? (\n <div className=\"tcl-run-history__outputs\">\n {shown.map((o, i) => (\n <OutputChip key={outIdOf(o, i)} output={o} />\n ))}\n {extra > 0 && <span className=\"tcl-run-history__more\">+{extra} more</span>}\n </div>\n ) : (\n <p className=\"tcl-run-history__no-outputs\">No outputs recorded for this run.</p>\n )}\n </>\n );\n}\n\nfunction OutputChip({ output }: { output: RunOutput }): ReactNode {\n const tone = OUTPUT_TONE[output.kind ?? 'link'];\n const cls = cx('tcl-run-history__chip', `is-${tone}`);\n if (output.href) {\n return (\n <a className={cls} href={output.href}>\n {output.label}\n <span className=\"tcl-run-history__chip-ext\" aria-hidden=\"true\">\n ↗\n </span>\n </a>\n );\n }\n return <span className={cls}>{output.label}</span>;\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './Callout.css';\n\n/**\n * `Callout` — a tone-tinted banner that draws the eye to a contextual message\n * (info / success / warning / danger / neutral / accent). It pairs the color-coded\n * ontology (like `Badge`) with a raised, padded surface (like `Card`): a left\n * accent rail + tone icon reveal the status, while the body can carry inline\n * `<code>` and links. When `onDismiss` is set it gains a close button — the\n * afford/acknowledge jobs.\n */\nexport type CalloutTone = StatusTone | 'accent';\n\nexport interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Status/intent — the color-coded ontology (default `info`). */\n tone?: CalloutTone;\n /** Bold lead line above the body. */\n title?: ReactNode;\n /** Leading glyph; defaults to a per-tone icon. Pass `null` to hide it. */\n icon?: ReactNode;\n /** When set, renders a close button that calls this on click. */\n onDismiss?: () => void;\n /** Accessible name for the dismiss button (default \"Dismiss\"). */\n dismissLabel?: string;\n children?: ReactNode;\n}\n\nconst DEFAULT_ICON: Record<CalloutTone, string> = {\n info: 'ℹ',\n success: '✓',\n warning: '⚠',\n danger: '⚠',\n neutral: 'ℹ',\n accent: 'ℹ',\n};\n\nexport function Callout({\n tone = 'info',\n title,\n icon,\n onDismiss,\n dismissLabel = 'Dismiss',\n className,\n children,\n ...rest\n}: CalloutProps) {\n // `icon === undefined` → default glyph; `icon === null`/false → hidden.\n const glyph = icon === undefined ? DEFAULT_ICON[tone] : icon;\n return (\n <div className={cx('tcl-callout', `tcl-callout--${tone}`, className)} {...rest}>\n {glyph != null && glyph !== false && (\n <span className=\"tcl-callout__icon\" aria-hidden=\"true\">\n {glyph}\n </span>\n )}\n <div className=\"tcl-callout__content\">\n {title != null && title !== false && <p className=\"tcl-callout__title\">{title}</p>}\n {children != null && children !== false && (\n <div className=\"tcl-callout__body\">{children}</div>\n )}\n </div>\n {onDismiss && (\n <button\n type=\"button\"\n className=\"tcl-callout__dismiss\"\n aria-label={dismissLabel}\n onClick={onDismiss}\n >\n <span aria-hidden=\"true\">✕</span>\n </button>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport { cx } from '../../utils/cx';\nimport './EmptyState.css';\n\n/**\n * `EmptyState` — the deliberate \"nothing here (yet)\" placeholder: no data, an\n * awaiting/unexposed source, or a pending work-start confirmation (the PMO\n * pending tile). A glyph + title + description orient the reader; an optional\n * mono \"pending source\" chip names the missing feed, and an optional action slot\n * offers the next step. Distinct from `Skeleton`, which represents content that\n * is *loading*; an EmptyState represents content that is genuinely absent.\n */\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Leading glyph/illustration; defaults to an empty-set mark. Pass `null` to hide. */\n icon?: ReactNode;\n /** Headline naming what's missing. */\n title: ReactNode;\n /** Supporting line(s) explaining why / what to do. */\n description?: ReactNode;\n /** Mono code chip naming a data source that isn't exposed yet (e.g. `wsc.pending`). */\n pendingSource?: string;\n /** Optional status pill (e.g. a `<Badge>`Awaiting WSC`</Badge>`). */\n badge?: ReactNode;\n /** Optional call-to-action (e.g. a `<Button>`). */\n action?: ReactNode;\n}\n\nexport function EmptyState({\n icon,\n title,\n description,\n pendingSource,\n badge,\n action,\n className,\n ...rest\n}: EmptyStateProps) {\n // `icon === undefined` → default glyph; `icon === null`/false → hidden.\n const glyph = icon === undefined ? '∅' : icon;\n return (\n <div className={cx('tcl-empty', className)} {...rest}>\n {badge && <span className=\"tcl-empty__badge\">{badge}</span>}\n {glyph != null && glyph !== false && (\n <span className=\"tcl-empty__icon\" aria-hidden=\"true\">\n {glyph}\n </span>\n )}\n <p className=\"tcl-empty__title\">{title}</p>\n {description != null && description !== false && (\n <p className=\"tcl-empty__description\">{description}</p>\n )}\n {pendingSource && (\n <p className=\"tcl-empty__pending\">\n Source not yet exposed: <code className=\"tcl-empty__source\">{pendingSource}</code>\n </p>\n )}\n {action && <div className=\"tcl-empty__action\">{action}</div>}\n </div>\n );\n}\n","import type { HTMLAttributes, ReactNode } from 'react';\nimport type { StatusTone } from '../../tokens/tokens.types';\nimport { cx } from '../../utils/cx';\nimport './DataStatusBar.css';\n\n/**\n * `DataStatusBar` — the context strip that frames a data view (a KPI grid, a\n * report, a dashboard). It answers two questions at a glance: *can I trust this\n * data right now?* and *what parameters produced it?*\n *\n * - **Reveal state (lead):** a color-coded status dot + label (live / stale /\n * loading / error / partial / paused), a freshness readout, and scope metrics\n * (record count, coverage…) sit in a `role=\"status\"` live region — flip the\n * `status` prop and a screen reader announces the change.\n * - **Afford action:** each active parameter is a chip; pass `onRemoveFilter` to\n * give every chip a remove button, and `onRefresh` for a re-pull control.\n * - **Acknowledge input:** removing a chip or refreshing fires the callback so the\n * host updates the data; the live region re-announces the new status.\n *\n * Presentational by default — with no `onRemoveFilter`/`onRefresh` it is a static\n * read-out (like `Badge`/`Callout`), still carrying the live status region.\n */\nexport type DataStatus = 'live' | 'stale' | 'loading' | 'error' | 'partial' | 'paused';\n\nexport type DataChipTone = StatusTone | 'accent';\n\nexport interface DataFilter {\n /** Stable id — used for React keys + the remove callback. Falls back to the\n * index, NEVER the label (duplicate labels would collide). */\n id?: string;\n /** Parameter name, e.g. \"Period\". */\n label: string;\n /** Applied value, e.g. \"Q2 FY26\". */\n value: ReactNode;\n /** Chip accent (default `neutral`); use `accent` for the primary parameter. */\n tone?: DataChipTone;\n}\n\nexport interface DataMetric {\n /** Stable id — falls back to the index, never the label. */\n id?: string;\n /** Unit/dimension, e.g. \"records\". */\n label: string;\n /** Scalar, e.g. \"1,284\". */\n value: ReactNode;\n}\n\nexport interface DataStatusBarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Freshness/health of the data (default `live`). Drives the dot + live region. */\n status?: DataStatus;\n /** Override the default status word (e.g. \"Streaming\" instead of \"Live\"). */\n statusLabel?: ReactNode;\n /** Dataset name shown at the start of the bar (e.g. \"Delivery KPIs\"). */\n title?: ReactNode;\n /** Machine timestamp for the `<time>` element (ISO string / epoch ms / Date). */\n updatedAt?: string | number | Date;\n /** Human freshness text, e.g. \"Updated 4m ago\". Rendered inside `<time>` when\n * `updatedAt` is also set, otherwise as plain text. */\n updatedLabel?: ReactNode;\n /** Scope metrics — record counts, coverage, anything quantifying the slice. */\n metrics?: ReadonlyArray<DataMetric>;\n /** The active parameters/filters that scoped this data. */\n filters?: ReadonlyArray<DataFilter>;\n /** When set, every chip gains a remove button that calls this with the filter. */\n onRemoveFilter?: (id: string, filter: DataFilter) => void;\n /** Builds the remove button's accessible name (default \"Remove {label} filter\"). */\n removeFilterLabel?: (filter: DataFilter) => string;\n /** When set, renders a refresh button that calls this; disabled while loading. */\n onRefresh?: () => void;\n /** Accessible name + text for the refresh button (default \"Refresh\"). */\n refreshLabel?: ReactNode;\n /** Accessible name for the whole region (default \"Data status\"). */\n 'aria-label'?: string;\n /** Compact height + tighter spacing for embedding above dense tables. */\n dense?: boolean;\n}\n\n/** status → tone + default word. The single source for color + text. */\nconst STATUS_META: Record<DataStatus, { tone: DataChipTone; label: string }> = {\n live: { tone: 'success', label: 'Live' },\n stale: { tone: 'warning', label: 'Stale' },\n loading: { tone: 'info', label: 'Loading' },\n error: { tone: 'danger', label: 'Error' },\n partial: { tone: 'warning', label: 'Partial' },\n paused: { tone: 'neutral', label: 'Paused' },\n};\n\nfunction toDateTime(updatedAt: string | number | Date): string {\n if (updatedAt instanceof Date) return updatedAt.toISOString();\n if (typeof updatedAt === 'number') return new Date(updatedAt).toISOString();\n return updatedAt;\n}\n\nexport function DataStatusBar({\n status = 'live',\n statusLabel,\n title,\n updatedAt,\n updatedLabel,\n metrics,\n filters,\n onRemoveFilter,\n removeFilterLabel = (f) => `Remove ${f.label} filter`,\n onRefresh,\n refreshLabel = 'Refresh',\n 'aria-label': ariaLabel = 'Data status',\n dense = false,\n className,\n ...rest\n}: DataStatusBarProps) {\n const meta = STATUS_META[status];\n const word = statusLabel ?? meta.label;\n const loading = status === 'loading';\n const hasFilters = filters != null && filters.length > 0;\n const showFresh = updatedLabel != null && updatedLabel !== false;\n\n return (\n <section\n className={cx(\n 'tcl-data-status-bar',\n `tcl-data-status-bar--${meta.tone}`,\n dense && 'tcl-data-status-bar--dense',\n className,\n )}\n aria-label={ariaLabel}\n data-status={status}\n {...rest}\n >\n <div className=\"tcl-data-status-bar__lead\">\n {title != null && title !== false && (\n <span className=\"tcl-data-status-bar__title\">{title}</span>\n )}\n\n <span className=\"tcl-data-status-bar__status\">\n {/* reveal-state: only the signal is a live region, so a status flip is\n announced but a ticking freshness label is not */}\n <span className=\"tcl-data-status-bar__signal\" role=\"status\" aria-live=\"polite\">\n <span\n className={cx(\n 'tcl-data-status-bar__dot',\n loading && 'tcl-data-status-bar__dot--pulse',\n status === 'live' && 'tcl-data-status-bar__dot--beacon',\n )}\n aria-hidden=\"true\"\n />\n <span className=\"tcl-data-status-bar__status-word\">{word}</span>\n </span>\n {showFresh &&\n (updatedAt != null ? (\n <time className=\"tcl-data-status-bar__fresh\" dateTime={toDateTime(updatedAt)}>\n {updatedLabel}\n </time>\n ) : (\n <span className=\"tcl-data-status-bar__fresh\">{updatedLabel}</span>\n ))}\n </span>\n\n {metrics && metrics.length > 0 && (\n <ul className=\"tcl-data-status-bar__metrics\">\n {metrics.map((m, i) => (\n <li className=\"tcl-data-status-bar__metric\" key={m.id ?? `m${i}`}>\n <span className=\"tcl-data-status-bar__metric-value\">{m.value}</span>{' '}\n <span className=\"tcl-data-status-bar__metric-label\">{m.label}</span>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n {(hasFilters || onRefresh) && (\n <div className=\"tcl-data-status-bar__controls\">\n {filters && filters.length > 0 && (\n <ul className=\"tcl-data-status-bar__filters\" aria-label=\"Active filters\">\n {filters.map((f, i) => {\n const id = f.id ?? `f${i}`;\n const tone = f.tone ?? 'neutral';\n return (\n <li\n className={cx(\n 'tcl-data-status-bar__chip',\n `tcl-data-status-bar__chip--${tone}`,\n )}\n key={id}\n >\n <span className=\"tcl-data-status-bar__chip-label\">{f.label}</span>\n <span className=\"tcl-data-status-bar__chip-value\">{f.value}</span>\n {onRemoveFilter && (\n <button\n type=\"button\"\n className=\"tcl-data-status-bar__chip-remove\"\n aria-label={removeFilterLabel(f)}\n onClick={() => onRemoveFilter(id, f)}\n >\n <span aria-hidden=\"true\">✕</span>\n </button>\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n {onRefresh && (\n <button\n type=\"button\"\n className=\"tcl-data-status-bar__refresh\"\n onClick={onRefresh}\n disabled={loading}\n aria-busy={loading || undefined}\n >\n <span className=\"tcl-data-status-bar__refresh-icon\" aria-hidden=\"true\">\n ⟳\n </span>\n {refreshLabel}\n </button>\n )}\n </div>\n )}\n </section>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { cx } from '../../utils/cx';\nimport { clampPct, toneVar, vars } from '../../internal/fillbar';\nimport type { FillBarTone } from '../../internal/fillbar';\nimport './Timeline.css';\n\n/**\n * `Timeline` — a horizontal **chronicle**: discrete dated events placed on a\n * time axis, alternating above/below, tone-coded by category, with era markers\n * (nodes) on the axis. The \"history timeline\" idiom — release histories, project\n * roadmaps, biographies, geological eras — that the lane-based `Swimlane` and the\n * execution-log `RunHistory` don't cover.\n *\n * Deterministic layout (no engine) → it lives in the Tier-1 viz spine alongside\n * Swimlane/Funnel/Treemap. It IS that interaction spine: lead job reveal-state,\n * but afford/acknowledge are real — each event is a focusable `<button>` carrying\n * its accessible name (date · title · category), driven by controlled/uncontrolled\n * `selectedId` (+ `defaultSelectedId` + `onSelect`), with prev/next stepping the\n * selection chronologically and an `aria-live` inspector revealing the selected\n * event. The axis line, nodes, stems, and scrubber are decorative (`aria-hidden`).\n */\nexport type TimelineTone = FillBarTone;\n\nexport interface TimelineCategory {\n /** Matches `TimelineEvent.category`. */\n key: string;\n /** Legend + accessible-name label (e.g. \"Wars\"). */\n label: string;\n /** Tone for this category's events (default `neutral`). */\n tone?: TimelineTone;\n}\n\nexport interface TimelineEvent {\n /** Stable id for selection; falls back to the index (NEVER the label). */\n id?: string;\n /** Numeric position on the axis (year, epoch index, …). Drives ordering + the `time` scale. */\n at: number;\n /** Pretty date string shown on the card + announced (e.g. \"CDLXXI A.V.\"). Defaults to `at`. */\n dateLabel?: string;\n /** Event title. */\n label: string;\n /** Category key → tone + legend (e.g. \"war\"). */\n category?: string;\n /** Explicit tone override (wins over the category tone). */\n tone?: TimelineTone;\n /** Secondary line on the card (e.g. \"EPOCH · TIDES\"). */\n sub?: string;\n /** Body text on the card. */\n detail?: string;\n /** Inspector detail revealed on selection. */\n note?: string;\n /** Force the card above/below the axis (default alternates by order). */\n side?: 'above' | 'below';\n}\n\nexport interface TimelineContract {\n view?: 'timeline';\n brand?: string;\n /** Chapter/volume mark (e.g. \"III\"), shown large + decorative in the header. */\n code?: string;\n title?: string;\n caption?: string;\n /** Right-aligned header meta (e.g. \"1,204 YEARS · 7 EPOCHS\"). */\n meta?: string;\n events: TimelineEvent[];\n /** Legend + tone mapping. */\n categories?: TimelineCategory[];\n /** `ordinal` (even columns, default) or `time` (proportional to `at`, de-overlapped). */\n scale?: 'ordinal' | 'time';\n /** Axis domain for the `time` scale (defaults to the event min/max). */\n range?: { min?: number; max?: number };\n}\n\nexport interface TimelineProps {\n data: TimelineContract;\n /** Controlled selected event id. */\n selectedId?: string;\n defaultSelectedId?: string;\n onSelect?: (id: string) => void;\n className?: string;\n}\n\n/** Stable, collision-proof key: explicit id, else the index (NEVER the label). */\nconst eventIdOf = (e: TimelineEvent, i: number): string => e.id ?? `e${i}`;\n\n/** Accent painted as TEXT fails AA on light surfaces → fall back to --tcl-text; other tones keep their hue. */\nconst toneInk = (tone: TimelineTone): string =>\n tone === 'accent' ? 'var(--tcl-text)' : toneVar(tone);\n\n// Deterministic geometry (px). The axis SVG and the absolutely-positioned event\n// buttons share this exact coordinate space, so stems always meet their nodes.\nconst COL_W = 224; // column pitch (ordinal) / de-overlap span basis (time)\nconst CARD_W = 196; // event card width\nconst CARD_H = 132; // event card height\nconst STEM = 26; // gap between a card and its axis node\nconst NODE_R = 6; // axis node radius\nconst PAD_X = 28; // track inset so the first/last focus ring never clips\nconst PAD_Y = 18; // top/bottom inset\nconst MIN_GAP = CARD_W * 0.58; // time scale: closest two nodes may sit (no card overlap)\nconst AXIS_Y = PAD_Y + CARD_H + STEM;\nconst TRACK_H = 2 * PAD_Y + 2 * CARD_H + 2 * STEM;\n\ninterface PlacedEvent {\n id: string;\n i: number;\n event: TimelineEvent;\n tone: TimelineTone;\n side: 'above' | 'below';\n categoryLabel?: string;\n dateText: string;\n nodeX: number;\n cardX: number;\n cardY: number;\n}\n\ninterface Layout {\n events: PlacedEvent[];\n width: number;\n axisFrom: number;\n axisTo: number;\n}\n\nfunction buildLayout(data: TimelineContract): Layout {\n const raw = data.events ?? [];\n const catTone = new Map<string, TimelineTone>();\n const catLabel = new Map<string, string>();\n (data.categories ?? []).forEach((c) => {\n catTone.set(c.key, c.tone ?? 'neutral');\n catLabel.set(c.key, c.label);\n });\n\n // Chronological order drives placement, alternation, and prev/next. Stable for\n // equal dates (preserve authored order via the original index as a tiebreak).\n const ordered = raw\n .map((event, i) => ({ event, i }))\n .sort((a, b) => a.event.at - b.event.at || a.i - b.i);\n\n const scale = data.scale ?? 'ordinal';\n const ats = ordered.map((o) => o.event.at);\n const lo = data.range?.min ?? (ats.length ? Math.min(...ats) : 0);\n const hi = data.range?.max ?? (ats.length ? Math.max(...ats) : 0);\n // A degenerate domain (hi <= lo) can't drive a proportional axis → fall back to ordinal.\n const useTime = scale === 'time' && hi > lo;\n const span = Math.max(0, (ordered.length - 1) * COL_W);\n\n let prevX = -Infinity;\n const events: PlacedEvent[] = ordered.map(({ event, i }, k) => {\n const idealX = useTime\n ? PAD_X + CARD_W / 2 + (clampPct(event.at, lo, hi) / 100) * span\n : PAD_X + CARD_W / 2 + k * COL_W;\n // De-overlap (time scale only): never let a card overlap its left neighbour.\n const nodeX = useTime ? Math.max(idealX, prevX + MIN_GAP) : idealX;\n prevX = nodeX;\n\n const tone: TimelineTone =\n event.tone ?? (event.category ? (catTone.get(event.category) ?? 'neutral') : 'neutral');\n const side: 'above' | 'below' = event.side ?? (k % 2 === 0 ? 'above' : 'below');\n\n return {\n id: eventIdOf(event, i),\n i,\n event,\n tone,\n side,\n categoryLabel: event.category ? catLabel.get(event.category) : undefined,\n dateText: event.dateLabel ?? String(event.at),\n nodeX,\n cardX: nodeX - CARD_W / 2,\n cardY: side === 'above' ? PAD_Y : AXIS_Y + STEM,\n };\n });\n\n const axisFrom = events.length ? events[0].nodeX : PAD_X;\n const axisTo = events.length ? events[events.length - 1].nodeX : PAD_X;\n const width = events.length ? axisTo + CARD_W / 2 + PAD_X : PAD_X * 2;\n return { events, width, axisFrom, axisTo };\n}\n\nexport function Timeline({\n data,\n selectedId: selProp,\n defaultSelectedId,\n onSelect,\n className,\n}: TimelineProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultSelectedId);\n const selectedId = selProp ?? internal;\n const select = (id: string): void => {\n if (selProp === undefined) setInternal(id);\n onSelect?.(id);\n };\n\n const layout = useMemo(() => buildLayout(data), [data]);\n const { events, width, axisFrom, axisTo } = layout;\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n const selectedIndex = events.findIndex((e) => e.id === selectedId);\n const selected = selectedIndex >= 0 ? events[selectedIndex] : undefined;\n const hasContent = events.length > 0;\n\n // Keep the selected event in view as selection moves (e.g. via prev/next).\n useEffect(() => {\n const el = scrollerRef.current;\n if (!el || !selected || typeof el.scrollTo !== 'function') return;\n const left = selected.cardX - (el.clientWidth - CARD_W) / 2;\n try {\n el.scrollTo({ left: Math.max(0, left), behavior: 'smooth' });\n } catch {\n /* jsdom / unsupported — keeping the selection in view is a progressive enhancement */\n }\n }, [selected]);\n\n const stepBy = (delta: number): void => {\n const next = selectedIndex < 0 ? (delta > 0 ? 0 : events.length - 1) : selectedIndex + delta;\n const target = events[next];\n if (target) select(target.id);\n };\n\n const categories = data.categories ?? [];\n const progress =\n hasContent && selectedIndex >= 0 ? ((selectedIndex + 1) / events.length) * 100 : 0;\n const hasHeader = Boolean(data.brand || data.code || data.title || data.caption || data.meta);\n\n return (\n <div className={cx('tcl-timeline', className)}>\n {hasHeader && (\n <header className=\"tcl-timeline__header\">\n {data.code && (\n <span className=\"tcl-timeline__code\" aria-hidden=\"true\">\n {data.code}\n </span>\n )}\n <div className=\"tcl-timeline__heading\">\n {data.brand && <p className=\"tcl-timeline__brand\">{data.brand}</p>}\n {data.title && <p className=\"tcl-timeline__title\">{data.title}</p>}\n {data.caption && <p className=\"tcl-timeline__caption\">{data.caption}</p>}\n </div>\n {data.meta && <span className=\"tcl-timeline__meta\">{data.meta}</span>}\n </header>\n )}\n\n {hasContent ? (\n <div className=\"tcl-timeline__scroller\" ref={scrollerRef}>\n <div\n className=\"tcl-timeline__track\"\n style={vars({ width: `${width}px`, height: `${TRACK_H}px` })}\n >\n {/* axis line, stems + era nodes — one decorative coordinate space */}\n <svg\n className=\"tcl-timeline__axis\"\n width={width}\n height={TRACK_H}\n viewBox={`0 0 ${width} ${TRACK_H}`}\n aria-hidden=\"true\"\n >\n <line\n className=\"tcl-timeline__rail\"\n x1={axisFrom}\n y1={AXIS_Y}\n x2={axisTo}\n y2={AXIS_Y}\n />\n {events.map((p) => {\n const active = p.id === selectedId;\n const stemY1 = p.side === 'above' ? p.cardY + CARD_H : AXIS_Y;\n const stemY2 = p.side === 'above' ? AXIS_Y : p.cardY;\n return (\n <g\n key={p.id}\n className={cx('tcl-timeline__mark', active && 'is-selected')}\n style={vars({ '--event-tone': toneVar(p.tone) })}\n >\n <line\n className=\"tcl-timeline__stem\"\n x1={p.nodeX}\n y1={stemY1}\n x2={p.nodeX}\n y2={stemY2}\n />\n <circle\n className=\"tcl-timeline__node\"\n cx={p.nodeX}\n cy={AXIS_Y}\n r={active ? NODE_R + 2 : NODE_R}\n />\n </g>\n );\n })}\n </svg>\n\n <div\n className=\"tcl-timeline__events\"\n role=\"group\"\n aria-label={data.title ?? 'Timeline'}\n >\n {events.map((p) => {\n const isSelected = p.id === selectedId;\n const name = `${p.dateText}: ${p.event.label}${p.categoryLabel ? ` — ${p.categoryLabel}` : ''}`;\n return (\n <button\n key={p.id}\n type=\"button\"\n data-event-id={p.id}\n className={cx(\n 'tcl-timeline__event',\n `is-${p.side}`,\n isSelected && 'is-selected',\n )}\n style={vars({\n '--event-tone': toneVar(p.tone),\n '--event-ink': toneInk(p.tone),\n left: `${p.cardX}px`,\n top: `${p.cardY}px`,\n width: `${CARD_W}px`,\n height: `${CARD_H}px`,\n })}\n aria-pressed={isSelected}\n aria-label={name}\n onClick={() => select(p.id)}\n >\n <span className=\"tcl-timeline__date\">{p.dateText}</span>\n {p.event.sub && <span className=\"tcl-timeline__sub\">{p.event.sub}</span>}\n <span className=\"tcl-timeline__label\" title={p.event.label}>\n {p.event.label}\n </span>\n {p.event.detail && (\n <span className=\"tcl-timeline__detail\">{p.event.detail}</span>\n )}\n {p.categoryLabel && (\n <span className=\"tcl-timeline__tag\">{p.categoryLabel}</span>\n )}\n </button>\n );\n })}\n </div>\n </div>\n </div>\n ) : (\n <p className=\"tcl-timeline__empty\">No events to chronicle</p>\n )}\n\n {hasContent && (\n <div className=\"tcl-timeline__scrubber\" aria-hidden=\"true\">\n <span\n className=\"tcl-timeline__scrubber-fill\"\n style={vars({ '--progress': `${progress}%` })}\n />\n </div>\n )}\n\n <div className=\"tcl-timeline__inspector\" aria-live=\"polite\">\n {selected ? (\n <>\n <p className=\"tcl-timeline__inspector-title\">\n <span\n className=\"tcl-timeline__inspector-date\"\n style={vars({ '--event-ink': toneInk(selected.tone) })}\n >\n {selected.dateText}\n </span>\n {' · '}\n {selected.event.label}\n {selected.categoryLabel && (\n <span className=\"tcl-timeline__inspector-cat\">\n {' · '}\n {selected.categoryLabel}\n </span>\n )}\n </p>\n {selected.event.sub && (\n <p className=\"tcl-timeline__inspector-sub\">{selected.event.sub}</p>\n )}\n {selected.event.note && (\n <p className=\"tcl-timeline__inspector-note\">{selected.event.note}</p>\n )}\n </>\n ) : (\n <p className=\"tcl-timeline__inspector-hint\">Select an event to inspect it.</p>\n )}\n </div>\n\n {(hasContent || categories.length > 0) && (\n <div className=\"tcl-timeline__footer\">\n <button\n type=\"button\"\n className=\"tcl-timeline__nav\"\n aria-label=\"Previous event\"\n disabled={!hasContent || selectedIndex === 0}\n onClick={() => stepBy(-1)}\n >\n <span aria-hidden=\"true\">◀</span>\n </button>\n\n {categories.length > 0 && (\n <ul className=\"tcl-timeline__legend\">\n {categories.map((c) => (\n <li key={c.key} className=\"tcl-timeline__legend-item\">\n <span\n className=\"tcl-timeline__legend-dot\"\n style={vars({ '--event-tone': toneVar(c.tone ?? 'neutral') })}\n aria-hidden=\"true\"\n />\n {c.label}\n </li>\n ))}\n </ul>\n )}\n\n <button\n type=\"button\"\n className=\"tcl-timeline__nav\"\n aria-label=\"Next event\"\n disabled={!hasContent || selectedIndex === events.length - 1}\n onClick={() => stepBy(1)}\n >\n <span aria-hidden=\"true\">▶</span>\n </button>\n </div>\n )}\n </div>\n );\n}\n"],"names":["c","t","cx","values","setRef","ref","value","composeRefs","refs","node","useComposedRefs","useCallback","mergeProps","slotProps","childProps","merged","key","slotValue","childValue","args","Slot","children","isValidElement","Children","child","childRef","cloneElement","Portal","container","target","createPortal","ACTIVATION_KEYS","useAffordanceState","options","disabled","loading","onPress","inactive","hover","setHover","useState","pressed","setPressed","focusVisible","setFocusVisible","state","onPointerEnter","onPointerLeave","onPointerDown","e","onPointerUp","onKeyDown","onKeyUp","onFocus","onBlur","onClick","dataAttrs","useReducedMotion","reduced","setReduced","useEffect","mq","onChange","useReturnFocus","active","previous","useRef","FOCUSABLE","useFocusTrap","getFocusable","el","items","first","last","activeEl","useDismissable","enabled","onDismiss","sp","v","buildBoxStyle","props","style","p","px","py","pt","pr","pb","pl","radius","z","top","right","bottom","left","Box","as","surface","material","border","className","rest","Component","boxStyle","classes","jsx","ALIGN","JUSTIFY","renderFlex","direction","gap","align","justify","wrap","flexStyle","Stack","Inline","WEIGHT","toneColor","tone","Text","size","weight","mono","truncate","textStyle","isDev","Pressable","asChild","handlers","elementProps","tag","Button","variant","fullWidth","startSlot","endSlot","jsxs","Badge","dot","useFieldIds","idProp","hasDescription","hasError","auto","useId","controlId","descId","errId","describedBy","FieldShell","label","description","error","required","htmlFor","Input","id","containerClassName","Dialog","open","onClose","title","footer","closeOnOverlayClick","closeOnEsc","titleId","contentRef","IconButton","TabsContext","createContext","useTabsContext","part","ctx","useContext","TabsRoot","valueProp","defaultValue","onValueChange","orientation","internal","setInternal","baseId","setValue","TabsList","Tab","selected","list","tabs","idx","horizontal","nextKey","prevKey","next","TabsPanel","Tabs","MenuContext","useMenuContext","MenuRoot","openProp","defaultOpen","onOpenChange","triggerRef","setOpen","o","MenuTrigger","triggerId","contentId","MenuContent","pos","setPos","useLayoutEffect","update","r","content","MenuItem","onSelect","activate","Menu","Textarea","rows","Select","placeholder","isControlled","Checkbox","indeterminate","innerRef","mergedRef","autoId","inputId","RadioContext","useRadioContext","RadioGroupRoot","name","autoName","groupName","labelId","RadioItem","checked","RadioGroup","Switch","Tooltip","openDelay","side","timer","computePos","show","showNow","hide","onKey","onReflow","Fragment","ToastContext","useToast","toastCounter","ToastProvider","duration","placement","toasts","setToasts","dismiss","toast","opts","ToastItem","start","stop","assertive","initialsFrom","Avatar","src","alt","shape","failed","setFailed","showImage","initials","decorative","Spinner","dim","Skeleton","width","height","lines","_","i","mergedStyle","CardRoot","interactive","CardHeader","CardBody","CardFooter","Card","TONE_VARS","toneVar","clampPct","min","max","vars","record","base","FillBarShell","role","valueText","ariaLabel","showValue","valueLabel","icon","glow","trackClassName","trackStyle","pct","Progress","segments","inner","on","Meter","thresholds","total","sum","s","sorted","a","b","activeTone","Sparkline","color","area","markLast","W","H","inset","finite","vs","dataLo","dataHi","d","pad","lo","hi","span","n","x","y","stroke","ariaProps","linePts","areaPts","DeltaChip","delta","text","invert","dir","semantic","arrow","txt","ariaTxt","aria","Stat","unit","strap","trend","badge","href","rootClassName","TableContext","useTableContext","SectionContext","TableRoot","density","striped","sticky","maxHeight","sortDescriptor","onSortChange","selectionMode","selectedKeys","defaultSelectedKeys","onSelectionChange","registry","setRegistry","registerRow","prev","unregisterRow","commit","selectedInRegistry","k","allSelected","someSelected","TableCaption","TableHead","TableBody","TableFoot","SelectAllCell","toggleAll","TableRow","rowKey","isSelected","toggleRow","section","selectable","isBody","primary","injected","selectCell","TableHeaderCell","sortKey","sortable","ariaSort","handleSort","TableCell","numeric","_primaryLink","resolved","TableEmpty","colSpan","Table","SLOT_OF","RING_ORDER","resolveSlots","domains","used","result","explicit","ring","slot","slotXY","w","h","Hub","data","selProp","defaultSelectedId","selectedId","select","containerW","containerH","centerX","centerY","slots","useMemo","KIND_LABEL","SECTION_LABEL","asItem","item","resolveKind","kind","isUrl","RefChip","Desc","SectionBody","paras","it","Brief","defaultCollapsed","uid","collapsed","setCollapsed","toggle","sections","m","heading","regionId","KNOWN_KINDS","KNOWN_SECTION_KINDS","KNOWN_SEVERITIES","isRecord","editDistance","dp","j","cost","closest","best","bestD","normalizeItem","raw","path","issues","out","got","normalizeSection","normalizeMeta","entry","parseBrief","input","obj","meta","stripInline","parseItemText","code","bold","dash","sectionFromLines","listRe","lead","rawItems","inList","line","note","sec","parsed","codey","hl","fromMarkdown","md","contract","fm","f","summaryLines","current","h2","h1","summary","SERIES_CYCLE","idOf","sidOf","cellId","si","ci","fmt","BarChart","markers","bars","series","categories","isGrouped","isVertical","axisMax","peak","tickLabels","inspected","cat","barColor","PAD_L","PAD_R","PAD_T","PAD_B","TONE_CYCLE","seriesColor","num","LineChart","band","fmtVal","count","ys","loR","hiR","xLabels","xStep","ticks","finiteOf","clipId","groupLabel","lb","fin","VB_W","VB_H","CX","CY","R","angleOf","polar","deg","rad","arcPath","a0","a1","large","sweep","Gauge","zones","valueAngle","needle","sortedZones","activeZone","from","colorOf","C","DonutChart","selectedIndex","acc","arcs","frac","len","arc","centerBig","centerSmall","Heatmap","columns","stops","sortedStops","colorFor","chosen","mix","ri","row","col","pctOf","convOf","Funnel","stages","topValue","topLabel","scaleBase","pctTop","cur","drop","TONE_FG","toneOf","TEXT_W","TEXT_H","squarify","cells","worst","other","layoutRow","off","Treemap","nodes","positive","showText","fg","laneIdOf","l","stepIdOf","KIND_TONE","STATUS_META","COL_W","CELL_W","LANE_H","CELL_H","PAD","buildLayout","laneList","stepList","lanes","lane","rowByKey","cursor","steps","step","byId","edges","targets","seen","tid","tgt","sx","sy","tx","ty","dx","maxCol","Swimlane","layout","successors","hasContent","status","RUN_STATUS_META","STEP_META","STEP_ORDER","OUTPUT_TONE","OUTPUT_CAP","outIdOf","toMs","toIso","formatWhen","now","past","hr","day","formatDuration","ms","sr","mr","tallyOf","run","ranCount","RunHistory","defaultSelectedRunId","onSelectRun","sort","setSort","withIds","ordered","da","db","when","dur","tally","outCount","stepsSummary","RunInspector","ran","outputs","shown","extra","OutputChip","output","cls","DEFAULT_ICON","Callout","dismissLabel","glyph","EmptyState","pendingSource","action","toDateTime","updatedAt","DataStatusBar","statusLabel","updatedLabel","metrics","filters","onRemoveFilter","removeFilterLabel","onRefresh","refreshLabel","dense","word","hasFilters","showFresh","eventIdOf","toneInk","CARD_W","CARD_H","STEM","NODE_R","PAD_X","PAD_Y","MIN_GAP","AXIS_Y","TRACK_H","catTone","catLabel","event","scale","ats","useTime","prevX","events","idealX","nodeX","axisFrom","axisTo","Timeline","scrollerRef","stepBy","progress","hasHeader","stemY1","stemY2"],"mappings":"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"}
|