@akhil-saxena/design-system 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/inputs/Button/index.tsx","../src/inputs/TextInput/index.tsx","../src/inputs/Textarea/index.tsx","../src/inputs/Badge/index.tsx","../src/inputs/Chip/index.tsx","../src/display/Avatar/index.tsx","../src/inputs/Checkbox/index.tsx","../src/inputs/Radio/index.tsx","../src/inputs/Toggle/index.tsx","../src/inputs/NumberStepper/index.tsx","../src/display/RollingNumber/index.tsx","../src/inputs/RangeSlider/index.tsx","../src/inputs/StarRating/index.tsx","../src/overlays/StickyNote/index.tsx","../src/overlays/Card/index.tsx","../src/_internals/DSPortal.tsx","../src/overlays/Tooltip/index.tsx","../src/_internals/floatingPos.ts","../src/overlays/Popover/index.tsx","../src/overlays/Modal/index.tsx","../src/overlays/Sheet/index.tsx","../src/overlays/HoverCard/index.tsx","../src/overlays/BottomSheet/index.tsx","../src/overlays/Lightbox/index.tsx","../src/feedback/ProgressBar/index.tsx","../src/feedback/Skeleton/index.tsx","../src/feedback/InlineConfirm/index.tsx","../src/feedback/AlertBanner/index.tsx","../src/feedback/EmptyState/index.tsx","../src/feedback/Toast/index.tsx","../src/interaction/CopyToClipboard/index.tsx","../src/_internals/dateUtils.ts","../src/_internals/calendarGrid.ts","../src/inputs/DatePicker/index.tsx","../src/interaction/SplitButton/index.tsx","../src/_internals/DSDropdown.tsx","../src/inputs/MultiSelect/index.tsx","../src/inputs/Select/index.tsx","../src/inputs/DateRangePicker/index.tsx","../src/inputs/Autocomplete/index.tsx","../src/data-display/SegmentedControl/index.tsx","../src/data-display/Breadcrumbs/index.tsx","../src/data-display/Timeline/index.tsx","../src/data-display/InfiniteList/index.tsx","../src/data-display/Accordion/index.tsx","../src/data-display/Carousel/index.tsx","../src/data-display/Tabs/index.tsx","../src/data-display/Table/index.tsx","../src/data-display/Calendar/index.tsx","../node_modules/highlight.js/es/languages/css.js","../node_modules/highlight.js/es/languages/javascript.js","../node_modules/highlight.js/es/languages/json.js","../node_modules/highlight.js/es/languages/python.js","../node_modules/highlight.js/es/languages/typescript.js","../node_modules/highlight.js/es/languages/xml.js","../src/interaction/RichText/index.tsx","../src/layout/AppShell/index.tsx","../src/layout/AppBar/index.tsx","../src/layout/Footer/index.tsx","../src/patterns/FormValidation/index.tsx","../src/patterns/Coachmark/index.tsx","../src/patterns/Wizard/index.tsx","../src/interaction/InlineEdit/index.tsx","../src/interaction/SearchAndFilters/index.tsx","../src/interaction/Sortable/index.tsx"],"names":["Button","forwardRef","TextInput","jsx","jsxs","Textarea","baseStyle","Badge","toneStyles","Chip","Avatar","Checkbox","useState","labelStyle","inputStyle","boxStyle","Radio","Toggle","NumberStepper","useEffect","useRef","RangeSlider","StickyNote","Card","MARGIN","useCallback","useLayoutEffect","useId","Fragment","ProgressBar","Skeleton","AlertBanner","EmptyState","createContext","useContext","useMemo","TONE_ICON","CopyToClipboard","DatePicker","cls","SplitButton","MultiSelect","Select","DateRangePicker","Breadcrumbs","Timeline","Accordion","Carousel","Tabs","TableRoot","TableHeader","TableHeaderCell","TableBody","TableRow","TableCell","TableSelectAllCell","TableSelectCell","TablePagination","MONTH_NAMES","toDate","addMonths","isToday","IDENT_RE","LITERALS","BUILT_INS","TYPES","KEYWORDS","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","javascript","RichText","editor","AppShell"],"mappings":"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","file":"index.js","sourcesContent":["import { type ButtonHTMLAttributes, type CSSProperties, type ReactNode, forwardRef } from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\n/**\n * Props for the Button primitive.\n *\n * Extends all native `<button>` attributes (`onClick`, `type`, `aria-*`, etc) via spread.\n */\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n\t/**\n\t * Visual variant.\n\t *\n\t * - `primary` - brand amber CTA. Use for the most-prominent action per surface.\n\t * - `secondary` - outlined cream surface. Use for second-priority actions.\n\t * - `ghost` - transparent, text-only. Use for tertiary, icon-only, or cancel-in-modal.\n\t * - `danger` - red destructive. Use for Delete, Remove, Archive, anything irreversible.\n\t *\n\t * @default \"primary\"\n\t */\n\tvariant?: ButtonVariant;\n\t/**\n\t * Size token. Most contexts use `md`. Use `xs`/`sm` for dense rows or chip-adjacent UI.\n\t *\n\t * @default \"md\"\n\t */\n\tsize?: ButtonSize;\n\t/** When true, replaces the icon with a spinner and disables interaction. */\n\tloading?: boolean;\n\t/** Optional icon rendered before the label. Pass a sized `<Icon>` or lucide component. */\n\ticon?: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tfontSize: 12,\n\tpadding: \"7px 14px\",\n\tborderRadius: 7,\n\tfontWeight: 500,\n\tborder: \"1px solid var(--rule)\",\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 6,\n\tcursor: \"pointer\",\n\tfontFamily: \"var(--font)\",\n\twhiteSpace: \"nowrap\",\n\ttransition: \"all .15s\",\n\toutline: \"none\",\n};\n\nconst variantStyles: Record<ButtonVariant, CSSProperties> = {\n\t// Primary = brand amber CTA. Use for the most-prominent action in any context.\n\tprimary: {\n\t\tbackground: \"var(--amber)\",\n\t\tcolor: \"#1c1917\",\n\t\tborderColor: \"var(--amber-d)\",\n\t\tfontWeight: 600,\n\t},\n\t// Secondary = outlined cream surface. Use for second-priority actions.\n\tsecondary: {\n\t\tbackground: \"var(--g-bg)\",\n\t\tbackdropFilter: \"blur(6px)\",\n\t\tWebkitBackdropFilter: \"blur(6px)\",\n\t\tcolor: \"var(--ink-2)\",\n\t},\n\t// Ghost = transparent, text-only. Use for tertiary / icon-only / cancel-in-modal.\n\t// Color flips via `:root.dark .ds-atom-btn[data-variant=\"ghost\"]` in primitives.css.\n\tghost: {\n\t\tbackground: \"transparent\",\n\t\tborderColor: \"transparent\",\n\t\tcolor: \"var(--ink-2)\",\n\t},\n\t// Danger = rich crimson, stays vivid in both themes (no pink flip in dark mode).\n\t// Same pattern as primary amber: fixed colour, dark border, always-dark text on bg.\n\tdanger: {\n\t\tbackground: \"#dc2626\",\n\t\tcolor: \"#fff\",\n\t\tborderColor: \"#b91c1c\",\n\t\tfontWeight: 600,\n\t},\n};\n\nconst sizeStyles: Record<ButtonSize, CSSProperties> = {\n\txs: { fontSize: 10, padding: \"3px 8px\", borderRadius: 5 },\n\tsm: { fontSize: 11, padding: \"5px 10px\" },\n\tmd: {},\n\tlg: { fontSize: 14, padding: \"10px 20px\", borderRadius: 9 },\n};\n\n/**\n * Primary action element. Use exactly one `primary` per surface as the main CTA;\n * pair with `secondary` or `ghost` for adjacent actions; reserve `danger` for\n * destructive operations that cannot be undone.\n *\n * Accepts all native `<button>` props via spread (including `onClick`, `aria-*`,\n * `type`, `form`). Forwards a ref to the underlying element.\n *\n * @example\n * <Button variant=\"primary\" onClick={save}>Save</Button>\n * <Button variant=\"secondary\" size=\"sm\">Cancel</Button>\n * <Button variant=\"danger\" icon={<Trash2 size={14} />}>Delete</Button>\n * <Button variant=\"primary\" loading>Saving…</Button>\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n\t{\n\t\tvariant = \"primary\",\n\t\tsize = \"md\",\n\t\tloading,\n\t\ticon,\n\t\tchildren,\n\t\tstyle,\n\t\tdisabled,\n\t\tclassName,\n\t\t...rest\n\t},\n\tref,\n) {\n\treturn (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\tclassName={`ds-atom-btn${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-variant={variant}\n\t\t\tdata-loading={loading ? \"true\" : undefined}\n\t\t\tdisabled={disabled || loading}\n\t\t\tstyle={{\n\t\t\t\t...baseStyle,\n\t\t\t\t...sizeStyles[size],\n\t\t\t\t...variantStyles[variant],\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{loading ? <Spinner /> : icon}\n\t\t\t{children}\n\t\t</button>\n\t);\n});\n\nfunction Spinner() {\n\treturn <span className=\"ds-atom-btn-spinner\" aria-hidden=\"true\" />;\n}\n","import { type CSSProperties, type InputHTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nexport interface TextInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"prefix\"> {\n\t/** When true, applies error-state border color to the input or wrapper. */\n\terror?: boolean;\n\t/** Leading icon rendered inside the wrapper (Lucide recommended size 14–16). */\n\ticon?: ReactNode;\n\t/** Static text or node rendered before the input (e.g. `\"https://\"`). */\n\tprefix?: ReactNode;\n\t/** Static text or node rendered after the input (e.g. `\".com\"`). */\n\tsuffix?: ReactNode;\n\t/** Trailing keyboard-shortcut hint (e.g. `\"⌘K\"`) styled as a monospace pill. */\n\tkbd?: ReactNode;\n}\n\nconst baseInputStyle: CSSProperties = {\n\tfontSize: 13,\n\tpadding: \"8px 10px\",\n\tborderRadius: 8,\n\tborder: \"1px solid var(--rule)\",\n\tbackground: \"var(--cream)\",\n\tcolor: \"var(--ink)\",\n\tfontFamily: \"var(--font)\",\n\toutline: \"none\",\n\ttransition: \"border-color .15s, box-shadow .15s\",\n\twidth: \"100%\",\n\tboxSizing: \"border-box\",\n};\n\nconst wrapStyle: CSSProperties = {\n\tdisplay: \"flex\",\n\talignItems: \"center\",\n\tgap: 8,\n\tpadding: \"0 10px\",\n\tborderRadius: 8,\n\tborder: \"1px solid var(--rule)\",\n\tbackground: \"var(--cream)\",\n\ttransition: \"border-color .15s, box-shadow .15s\",\n\tboxSizing: \"border-box\",\n};\n\nconst innerInputStyle: CSSProperties = {\n\tborder: \"none\",\n\tbackground: \"none\",\n\tpadding: \"8px 0\",\n\tboxShadow: \"none\",\n\tfontSize: 13,\n\tcolor: \"var(--ink)\",\n\tfontFamily: \"var(--font)\",\n\toutline: \"none\",\n\tflex: 1,\n\twidth: \"100%\",\n};\n\nconst affixStyle: CSSProperties = {\n\tcolor: \"var(--ink-3)\",\n\tfontFamily: \"var(--mono)\",\n\tfontSize: 12,\n\twhiteSpace: \"nowrap\",\n\tflexShrink: 0,\n};\n\nconst kbdStyle: CSSProperties = {\n\tfontFamily: \"var(--mono)\",\n\tfontSize: 10,\n\tfontWeight: 600,\n\tcolor: \"var(--ink-3)\",\n\tbackground: \"var(--cream-2)\",\n\tborder: \"1px solid var(--rule)\",\n\tborderRadius: 4,\n\tpadding: \"1px 6px\",\n\twhiteSpace: \"nowrap\",\n\tflexShrink: 0,\n};\n\nexport const TextInput = forwardRef<HTMLInputElement, TextInputProps>(function TextInput(\n\t{ error, icon, prefix, suffix, kbd, className, style, ...rest },\n\tref,\n) {\n\t// Bare input when no decoration is needed.\n\tif (!icon && !prefix && !suffix && !kbd) {\n\t\treturn (\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-input${className ? ` ${className}` : \"\"}`}\n\t\t\t\tdata-error={error ? \"true\" : undefined}\n\t\t\t\tstyle={{ ...baseInputStyle, ...style }}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t);\n\t}\n\t// Wrapped input when icon/prefix/suffix/kbd is present - wrapper handles\n\t// border + focus-within ring so the inner <input> inherits.\n\treturn (\n\t\t<div\n\t\t\tclassName={`ds-atom-input-wrap${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-error={error ? \"true\" : undefined}\n\t\t\tstyle={{ ...wrapStyle, ...style }}\n\t\t>\n\t\t\t{icon ? <span style={{ display: \"inline-flex\", color: \"var(--ink-3)\" }}>{icon}</span> : null}\n\t\t\t{prefix ? <span style={affixStyle}>{prefix}</span> : null}\n\t\t\t<input ref={ref} style={innerInputStyle} {...rest} />\n\t\t\t{suffix ? <span style={affixStyle}>{suffix}</span> : null}\n\t\t\t{kbd ? <kbd style={kbdStyle}>{kbd}</kbd> : null}\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type TextareaHTMLAttributes, forwardRef, useState } from \"react\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n\t/** When true, applies error-state border color to the textarea. */\n\terror?: boolean;\n}\n\nconst baseTextareaStyle: CSSProperties = {\n\tfontSize: 13,\n\tpadding: \"10px 12px\",\n\tborderRadius: 8,\n\tborder: \"1px solid var(--rule)\",\n\tbackground: \"var(--cream)\",\n\tcolor: \"var(--ink)\",\n\tfontFamily: \"var(--font)\",\n\toutline: \"none\",\n\tresize: \"both\",\n\ttransition: \"border-color .15s, box-shadow .15s\",\n\twidth: \"100%\",\n\tboxSizing: \"border-box\",\n\tlineHeight: 1.5,\n};\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n\t{ error, className, style, maxLength, value, defaultValue, onChange, ...rest },\n\tref,\n) {\n\tconst [internalLength, setInternalLength] = useState(\n\t\ttypeof defaultValue === \"string\" ? defaultValue.length : 0,\n\t);\n\tconst length = typeof value === \"string\" ? value.length : internalLength;\n\tconst showCount = typeof maxLength === \"number\";\n\n\treturn (\n\t\t<div style={{ position: \"relative\", width: \"100%\" }}>\n\t\t\t<textarea\n\t\t\t\tref={ref}\n\t\t\t\tclassName={[\"ds-atom-textarea\", className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-error={error ? \"true\" : undefined}\n\t\t\t\tstyle={{ ...baseTextareaStyle, ...style }}\n\t\t\t\tmaxLength={maxLength}\n\t\t\t\tvalue={value}\n\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tsetInternalLength(e.target.value.length);\n\t\t\t\t\tonChange?.(e);\n\t\t\t\t}}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t\t{showCount ? (\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tright: 10,\n\t\t\t\t\t\tbottom: 8,\n\t\t\t\t\t\tfontFamily: \"var(--mono)\",\n\t\t\t\t\t\tfontSize: 10,\n\t\t\t\t\t\tcolor: \"var(--ink-3)\",\n\t\t\t\t\t\tpointerEvents: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{length}/{maxLength}\n\t\t\t\t</span>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from \"react\";\n\nexport type BadgeTone = \"upcoming\" | \"passed\" | \"pending\" | \"done\" | \"count\" | \"neutral\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n\t/** Color tone of the badge, mapping to a semantic status.\n\t * @default \"neutral\"\n\t */\n\ttone?: BadgeTone;\n\t/** When true, renders a small leading colored dot inside the badge; color defaults to the tone's vivid value. */\n\tdot?: boolean;\n\t/** Override the dot color with any CSS color string; falls back to the tone-mapped vivid color. */\n\tdotColor?: string;\n}\n\nconst baseStyle: CSSProperties = {\n\tfontFamily: \"var(--mono)\",\n\tfontSize: 9.5,\n\tpadding: \"3px 8px\",\n\tborderRadius: 999,\n\tletterSpacing: \"0.05em\",\n\ttextTransform: \"uppercase\",\n\tfontWeight: 700,\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 5,\n\twhiteSpace: \"nowrap\",\n};\n\nconst toneStyles: Record<BadgeTone, CSSProperties> = {\n\tupcoming: { background: \"rgba(59,130,246,.12)\", color: \"var(--blue)\" },\n\tpassed: { background: \"rgba(34,197,94,.14)\", color: \"var(--green)\" },\n\tpending: { background: \"var(--cream-2)\", color: \"var(--ink-3)\" },\n\tdone: { background: \"rgba(139,92,246,.12)\", color: \"var(--purple)\" },\n\tcount: { background: \"var(--cream-3)\", color: \"var(--ink-2)\" },\n\tneutral: { background: \"var(--cream-2)\", color: \"var(--ink-2)\" },\n};\n\nconst dotColors: Record<BadgeTone, string> = {\n\tupcoming: \"var(--blue-vivid)\",\n\tpassed: \"var(--green-vivid)\",\n\tpending: \"var(--ink-4)\",\n\tdone: \"var(--purple-vivid)\",\n\tcount: \"var(--ink-3)\",\n\tneutral: \"var(--ink-3)\",\n};\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n\t{ tone = \"neutral\", dot, dotColor, children, style, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<span ref={ref} style={{ ...baseStyle, ...toneStyles[tone], ...style }} {...rest}>\n\t\t\t{dot ? (\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\t\t\twidth: 6,\n\t\t\t\t\t\theight: 6,\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tbackground: dotColor ?? dotColors[tone],\n\t\t\t\t\t}}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{children}\n\t\t</span>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\nimport { X } from \"../../icons\";\nexport type ChipTone = \"default\" | \"match\" | \"miss\" | \"learning\" | \"tag\";\n\nexport interface ChipProps extends HTMLAttributes<HTMLSpanElement> {\n\t/** Color tone applying semantic background and text colors.\n\t * @default \"default\"\n\t */\n\ttone?: ChipTone;\n\t/** When provided, renders a small X button that calls this handler on click. */\n\tonRemove?: () => void;\n\t/** Optional leading icon rendered before the label text (Lucide, size 10–11 recommended). */\n\ticon?: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 5,\n\tfontSize: 11,\n\tcolor: \"var(--ink)\",\n\tbackground: \"var(--cream-3)\",\n\tborder: \"1px solid var(--rule)\",\n\tborderRadius: 999,\n\tpadding: \"4px 10px\",\n\tfontWeight: 500,\n\twhiteSpace: \"nowrap\",\n};\n\nconst toneStyles: Record<ChipTone, CSSProperties> = {\n\tdefault: { borderColor: \"var(--rule)\", background: \"var(--cream-3)\", color: \"var(--ink)\" },\n\tmatch: {\n\t\tbackground: \"rgba(34,197,94,.12)\",\n\t\tcolor: \"var(--green)\",\n\t\tborderColor: \"rgba(34,197,94,.25)\",\n\t},\n\tmiss: {\n\t\tbackground: \"rgba(239,68,68,.10)\",\n\t\tcolor: \"var(--red)\",\n\t\tborderColor: \"rgba(239,68,68,.25)\",\n\t},\n\tlearning: {\n\t\tbackground: \"rgba(59,130,246,.12)\",\n\t\tcolor: \"var(--blue)\",\n\t\tborderColor: \"rgba(59,130,246,.25)\",\n\t},\n\ttag: {\n\t\tbackground: \"rgba(245,158,11,.10)\",\n\t\tcolor: \"var(--amber-d)\",\n\t\tborderColor: \"rgba(245,158,11,.25)\",\n\t},\n};\n\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(function Chip(\n\t{ tone = \"default\", onRemove, icon, children, style, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<span\n\t\t\tref={ref}\n\t\t\tclassName=\"ds-atom-chip\"\n\t\t\tstyle={{ ...baseStyle, ...toneStyles[tone], ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{icon ? <span style={{ display: \"inline-flex\", alignItems: \"center\" }}>{icon}</span> : null}\n\t\t\t{children}\n\t\t\t{onRemove ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-chip-x\"\n\t\t\t\t\taria-label=\"Remove\"\n\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tonRemove();\n\t\t\t\t\t}}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tbackground: \"none\",\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\tmargin: \"0 0 0 2px\",\n\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\tcolor: \"inherit\",\n\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<X size={10} />\n\t\t\t\t</button>\n\t\t\t) : null}\n\t\t</span>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from \"react\";\n\nexport type AvatarSize = 24 | 28 | 32 | 36 | 40;\nexport type AvatarPresence = \"online\" | \"away\" | \"offline\" | \"dnd\";\nexport type AvatarPresencePosition = \"top-right\" | \"bottom-right\" | \"top-left\" | \"bottom-left\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Full name used to derive initials and background color. Also becomes `aria-label`. */\n\tname?: string;\n\t/** Override the auto-derived initials (1–2 uppercase letters). */\n\tinitials?: string;\n\t/**\n\t * URL of an image to display. When provided, the image fills the circle and\n\t * initials/background are not rendered.\n\t */\n\tsrc?: string;\n\t/** Alt text for the image. Falls back to `name` when omitted. */\n\talt?: string;\n\t/**\n\t * Use a two-stop gradient background instead of the default solid color.\n\t * Pass `[fromColor, toColor]` to override, or omit to use the auto-derived gradient.\n\t * When not set, a solid color derived from the name is used.\n\t */\n\tgradient?: [string, string] | true;\n\t/** Diameter of the avatar circle in pixels.\n\t * @default 32\n\t */\n\tsize?: AvatarSize;\n\t/** Shows a colored presence dot at the bottom-right edge. */\n\tpresence?: AvatarPresence;\n\t/**\n\t * Which corner of the avatar the presence dot appears at.\n\t * @default \"bottom-right\"\n\t */\n\tpresencePosition?: AvatarPresencePosition;\n}\n\n// 6 hand-picked 2-stop gradients (D-121).\nconst AVATAR_PALETTE = [\n\t[\"#f59e0b\", \"#dc2626\"], // amber → red\n\t[\"#3b82f6\", \"#1d4ed8\"], // blue → indigo\n\t[\"#22c55e\", \"#15803d\"], // green → forest\n\t[\"#8b5cf6\", \"#6d28d9\"], // purple → violet\n\t[\"#ef4444\", \"#f59e0b\"], // red → amber\n\t[\"#0ea5e9\", \"#22c55e\"], // sky → green\n] as const satisfies ReadonlyArray<readonly [string, string]>;\n\n// 6 solid colors - default background when gradient is not requested.\nconst SOLID_PALETTE = [\n\t\"#d97706\", // amber\n\t\"#2563eb\", // blue\n\t\"#16a34a\", // green\n\t\"#7c3aed\", // purple\n\t\"#dc2626\", // red\n\t\"#0284c7\", // sky\n] as const;\n\n// djb2 hash on lowercased string (D-121).\nfunction djb2(s: string): number {\n\tlet h = 5381;\n\tfor (let i = 0; i < s.length; i++) h = (h * 33) ^ s.charCodeAt(i);\n\treturn h >>> 0;\n}\n\n// First letter of first 2 words, uppercased. Empty/null → \"?\".\nexport function deriveInitials(name?: string | null): string {\n\tif (!name) return \"?\";\n\tconst trimmed = name.trim();\n\tif (trimmed.length === 0) return \"?\";\n\tconst parts = trimmed.split(/\\s+/).slice(0, 2);\n\treturn (\n\t\tparts\n\t\t\t.map((p) => p[0]?.toUpperCase() ?? \"\")\n\t\t\t.join(\"\")\n\t\t\t.slice(0, 2) || \"?\"\n\t);\n}\n\nexport function deriveGradient(seed: string): readonly [string, string] {\n\tconst idx = djb2(seed.toLowerCase()) % AVATAR_PALETTE.length;\n\treturn AVATAR_PALETTE[idx] ?? AVATAR_PALETTE[0];\n}\n\nfunction deriveSolidColor(seed: string): string {\n\tconst idx = djb2(seed.toLowerCase()) % SOLID_PALETTE.length;\n\treturn SOLID_PALETTE[idx] ?? SOLID_PALETTE[0];\n}\n\nconst presenceColors: Record<AvatarPresence, string> = {\n\tonline: \"var(--green-vivid)\",\n\taway: \"var(--amber-vivid)\",\n\toffline: \"var(--ink-5)\",\n\tdnd: \"var(--red-vivid)\",\n};\n\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n\t{\n\t\tname,\n\t\tinitials,\n\t\tsrc,\n\t\talt,\n\t\tgradient,\n\t\tsize = 32,\n\t\tpresence,\n\t\tpresencePosition = \"bottom-right\",\n\t\tchildren,\n\t\tstyle,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst seed = initials || name || \"?\";\n\tconst computedInitials = initials ?? deriveInitials(name);\n\n\t// Background: solid by default; gradient when gradient prop is set.\n\tlet background: string;\n\tif (gradient) {\n\t\tconst stops = Array.isArray(gradient) ? gradient : deriveGradient(seed);\n\t\tbackground = `linear-gradient(145deg, ${stops[0]}, ${stops[1]})`;\n\t} else {\n\t\tbackground = deriveSolidColor(seed);\n\t}\n\n\tconst containerStyle: CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: size,\n\t\theight: size,\n\t\tborderRadius: \"50%\",\n\t\tbackground: src ? \"transparent\" : background,\n\t\tcolor: \"#ffffff\",\n\t\tdisplay: \"inline-flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tfontFamily: \"var(--font)\",\n\t\tfontSize: Math.round(size * 0.35),\n\t\tfontWeight: 700,\n\t\tflexShrink: 0,\n\t\toverflow: src ? \"hidden\" : \"visible\",\n\t\t...style,\n\t};\n\n\t// Presence dot: positioned so its centre sits on the circle's edge at 45°.\n\t// offset = radius - radius * cos(45°) ≈ radius * 0.29; negative value pushes\n\t// the dot outside the container so it straddles the avatar border.\n\tconst presenceSize = Math.max(8, Math.round(size * 0.28));\n\tconst presenceOffset = -Math.round(presenceSize * 0.3);\n\n\treturn (\n\t\t<div ref={ref} style={containerStyle} aria-label={name} {...rest}>\n\t\t\t{src ? (\n\t\t\t\t<img\n\t\t\t\t\tsrc={src}\n\t\t\t\t\talt={alt ?? name ?? \"Avatar\"}\n\t\t\t\t\tstyle={{ width: \"100%\", height: \"100%\", objectFit: \"cover\", display: \"block\" }}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t(children ?? computedInitials)\n\t\t\t)}\n\t\t\t{presence ? (\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\ttop: presencePosition.startsWith(\"top\") ? presenceOffset : undefined,\n\t\t\t\t\t\tbottom: presencePosition.startsWith(\"bottom\") ? presenceOffset : undefined,\n\t\t\t\t\t\tleft: presencePosition.endsWith(\"left\") ? presenceOffset : undefined,\n\t\t\t\t\t\tright: presencePosition.endsWith(\"right\") ? presenceOffset : undefined,\n\t\t\t\t\t\twidth: presenceSize,\n\t\t\t\t\t\theight: presenceSize,\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tbackground: presenceColors[presence],\n\t\t\t\t\t\tborder: \"2px solid var(--cream)\",\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n\nexport interface AvatarStackProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Array of avatar descriptors rendered as an overlapping stack. */\n\tavatars: ReadonlyArray<{ name?: string; initials?: string; gradient?: [string, string] }>;\n\t/** Maximum number of avatars shown before a \"+N more\" overflow badge.\n\t * @default 4\n\t */\n\tmax?: number;\n\t/** Size in pixels applied to every avatar in the stack.\n\t * @default 32\n\t */\n\tsize?: AvatarSize;\n}\n\nexport function AvatarStack({ avatars, max = 4, size = 32, style, ...rest }: AvatarStackProps) {\n\tconst visible = avatars.slice(0, max);\n\tconst overflow = avatars.length - visible.length;\n\treturn (\n\t\t<div style={{ display: \"inline-flex\", alignItems: \"center\", ...style }} {...rest}>\n\t\t\t{visible.map((a, i) => (\n\t\t\t\t<div\n\t\t\t\t\tkey={`${a.initials ?? a.name ?? i}-${i}`}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmarginLeft: i > 0 ? -8 : 0,\n\t\t\t\t\t\tzIndex: visible.length - i,\n\t\t\t\t\t\tborder: \"2px solid var(--cream)\",\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Avatar name={a.name} initials={a.initials} gradient={a.gradient} size={size} />\n\t\t\t\t</div>\n\t\t\t))}\n\t\t\t{overflow > 0 ? (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmarginLeft: -8,\n\t\t\t\t\t\tzIndex: 0,\n\t\t\t\t\t\twidth: size,\n\t\t\t\t\t\theight: size,\n\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\tbackground: \"var(--cream-2)\",\n\t\t\t\t\t\tcolor: \"var(--ink-3)\",\n\t\t\t\t\t\tdisplay: \"inline-flex\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tfontFamily: \"var(--font)\",\n\t\t\t\t\t\tfontSize: Math.round(size * 0.32),\n\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\tborder: \"2px solid var(--cream)\",\n\t\t\t\t\t}}\n\t\t\t\t\taria-label={`${overflow} more`}\n\t\t\t\t>\n\t\t\t\t\t+{overflow}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, type InputHTMLAttributes, forwardRef, useEffect, useRef } from \"react\";\nimport { useComposedRefs } from \"../../hooks/useComposedRefs\";\nimport { Check } from \"../../icons\";\nexport interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\t/** Visible text label rendered beside the checkbox. */\n\tlabel?: string;\n\t/** When true, sets the native DOM `indeterminate` property (the \"some selected\" tri-state).\n\t * Cannot be expressed as a JSX attribute - set imperatively via a DOM property. */\n\tindeterminate?: boolean;\n}\n\nconst labelStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 8,\n\tcursor: \"pointer\",\n\tfontFamily: \"var(--font)\",\n\tfontSize: 13,\n\tcolor: \"var(--ink)\",\n\tuserSelect: \"none\",\n};\n\nconst inputStyle: CSSProperties = {\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0,0,0,0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n};\n\nconst boxStyle: CSSProperties = {\n\twidth: 18,\n\theight: 18,\n\tborderRadius: 5,\n\tborder: \"2px solid var(--ink-4)\",\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\ttransition: \"all .15s\",\n\tflexShrink: 0,\n\tbackground: \"transparent\",\n};\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n\t{ label, className, disabled, style, indeterminate, ...rest },\n\tref,\n) {\n\tconst innerRef = useRef<HTMLInputElement>(null);\n\tconst composedRef = useComposedRefs(innerRef, ref);\n\n\t// `indeterminate` is a DOM property (not an HTML attribute), so it cannot be\n\t// set via JSX. We imperatively set it via a ref-based useEffect whenever the\n\t// prop changes.\n\tuseEffect(() => {\n\t\tif (innerRef.current) {\n\t\t\tinnerRef.current.indeterminate = !!indeterminate;\n\t\t}\n\t}, [indeterminate]);\n\n\treturn (\n\t\t<label\n\t\t\tclassName={[\"ds-atom-checkbox-label\", disabled ? \"is-disabled\" : \"\", className ?? \"\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \")}\n\t\t\tstyle={{\n\t\t\t\t...labelStyle,\n\t\t\t\t...(disabled ? { cursor: \"not-allowed\", opacity: 0.4 } : {}),\n\t\t\t}}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={composedRef}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tclassName=\"ds-atom-checkbox-input\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\tstyle={inputStyle}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t\t<span className=\"ds-atom-checkbox-box\" style={boxStyle} aria-hidden=\"true\">\n\t\t\t\t<Check\n\t\t\t\t\tsize={12}\n\t\t\t\t\tstrokeWidth={3}\n\t\t\t\t\tcolor=\"#1c1917\"\n\t\t\t\t\tstyle={{ display: \"none\" }}\n\t\t\t\t\tclassName=\"ds-atom-checkbox-check\"\n\t\t\t\t/>\n\t\t\t</span>\n\t\t\t{label ? <span style={style}>{label}</span> : null}\n\t\t</label>\n\t);\n});\n","import {\n\ttype CSSProperties,\n\ttype ChangeEvent,\n\ttype InputHTMLAttributes,\n\ttype ReactNode,\n\tcreateContext,\n\tforwardRef,\n\tuseContext,\n\tuseMemo,\n\tuseState,\n} from \"react\";\n\ninterface RadioGroupContextValue {\n\treadonly name: string;\n\treadonly value?: string;\n\treadonly onChange: (value: string, e: ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps {\n\t/** The `name` attribute shared by all Radio children in the group. */\n\tname: string;\n\t/** Controlled selected value; the matching Radio renders as checked. Use with `onChange`. */\n\tvalue?: string;\n\t/** Initial selected value when uncontrolled (no `value` prop). */\n\tdefaultValue?: string;\n\t/** Called when any Radio in the group is selected with the new value and native event. */\n\tonChange?: (value: string, e: ChangeEvent<HTMLInputElement>) => void;\n\t/** Radio children to render in a vertical flex column. */\n\tchildren: ReactNode;\n\t/** Inline styles applied to the `role=\"radiogroup\"` div. */\n\tstyle?: CSSProperties;\n\t/** Additional className applied to the `role=\"radiogroup\"` div. */\n\tclassName?: string;\n}\n\nexport function RadioGroup({\n\tname,\n\tvalue: controlledValue,\n\tdefaultValue,\n\tonChange,\n\tchildren,\n\tstyle,\n\tclassName,\n}: Readonly<RadioGroupProps>) {\n\t// Uncontrolled internal state - used when `value` prop is not provided.\n\tconst [internalValue, setInternalValue] = useState<string | undefined>(defaultValue);\n\tconst isControlled = controlledValue !== undefined;\n\tconst value = isControlled ? controlledValue : internalValue;\n\n\tconst handleChange = useMemo(\n\t\t() => (val: string, e: ChangeEvent<HTMLInputElement>) => {\n\t\t\tif (!isControlled) setInternalValue(val);\n\t\t\tonChange?.(val, e);\n\t\t},\n\t\t[isControlled, onChange],\n\t);\n\n\tconst ctx = useMemo(() => ({ name, value, onChange: handleChange }), [name, value, handleChange]);\n\n\treturn (\n\t\t<RadioGroupContext.Provider value={ctx}>\n\t\t\t<div\n\t\t\t\trole=\"radiogroup\"\n\t\t\t\tclassName={className}\n\t\t\t\tstyle={{ display: \"flex\", flexDirection: \"column\", gap: 8, ...style }}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</RadioGroupContext.Provider>\n\t);\n}\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"value\"> {\n\t/** Visible text label rendered beside the radio button. */\n\tlabel?: string;\n\t/** The value this radio represents; matched against RadioGroup's `value` to determine checked state. */\n\tvalue: string;\n}\n\nconst labelStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 8,\n\tcursor: \"pointer\",\n\tfontFamily: \"var(--font)\",\n\tfontSize: 13,\n\tcolor: \"var(--ink)\",\n\tuserSelect: \"none\",\n};\n\nconst inputStyle: CSSProperties = {\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0,0,0,0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n};\n\n// Box uses separate border properties (NOT shorthand) so the CSS\n// :checked rule can override border-color without !important fighting\n// inline-style specificity.\nconst boxStyle: CSSProperties = {\n\twidth: 18,\n\theight: 18,\n\tborderRadius: \"50%\",\n\tborderWidth: 2,\n\tborderStyle: \"solid\",\n\tborderColor: \"var(--ink-4)\",\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tjustifyContent: \"center\",\n\ttransition: \"all .15s\",\n\tflexShrink: 0,\n\tbackground: \"transparent\",\n};\n\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n\t{ label, className, disabled, value, name, checked, onChange, style, ...rest },\n\tref,\n) {\n\tconst ctx = useContext(RadioGroupContext);\n\tconst resolvedName = name ?? ctx?.name;\n\tconst resolvedChecked = ctx ? ctx.value === value : checked;\n\n\treturn (\n\t\t<label\n\t\t\tclassName={[\"ds-atom-radio-label\", disabled ? \"is-disabled\" : \"\", className ?? \"\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \")}\n\t\t\tstyle={{\n\t\t\t\t...labelStyle,\n\t\t\t\t...(disabled ? { cursor: \"not-allowed\", opacity: 0.4 } : {}),\n\t\t\t}}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"radio\"\n\t\t\t\tclassName=\"ds-atom-radio-input\"\n\t\t\t\tname={resolvedName}\n\t\t\t\tvalue={value}\n\t\t\t\tchecked={resolvedChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tctx?.onChange(value, e);\n\t\t\t\t\tonChange?.(e);\n\t\t\t\t}}\n\t\t\t\tstyle={inputStyle}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t\t<span className=\"ds-atom-radio-box\" style={boxStyle} aria-hidden=\"true\">\n\t\t\t\t<span className=\"ds-atom-radio-dot\" />\n\t\t\t</span>\n\t\t\t{label ? <span style={style}>{label}</span> : null}\n\t\t</label>\n\t);\n});\n","import { type CSSProperties, type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface ToggleProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n\t/** Visible text label rendered beside the toggle track. */\n\tlabel?: string;\n}\n\nconst labelStyle: CSSProperties = {\n\tdisplay: \"inline-flex\",\n\talignItems: \"center\",\n\tgap: 8,\n\tcursor: \"pointer\",\n\tfontFamily: \"var(--font)\",\n\tfontSize: 13,\n\tcolor: \"var(--ink)\",\n\tuserSelect: \"none\",\n};\n\nconst inputStyle: CSSProperties = {\n\tposition: \"absolute\",\n\twidth: 1,\n\theight: 1,\n\tpadding: 0,\n\tmargin: -1,\n\toverflow: \"hidden\",\n\tclip: \"rect(0,0,0,0)\",\n\twhiteSpace: \"nowrap\",\n\tborder: 0,\n};\n\nexport const Toggle = forwardRef<HTMLInputElement, ToggleProps>(function Toggle(\n\t{ label, className, disabled, style, checked, defaultChecked, ...rest },\n\tref,\n) {\n\tconst ariaChecked = checked ?? defaultChecked ?? false;\n\treturn (\n\t\t<label\n\t\t\tclassName={`ds-atom-toggle-label${disabled ? \" is-disabled\" : \"\"}${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={{\n\t\t\t\t...labelStyle,\n\t\t\t\t...(disabled ? { cursor: \"not-allowed\", opacity: 0.4 } : {}),\n\t\t\t}}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\trole=\"switch\"\n\t\t\t\taria-checked={ariaChecked}\n\t\t\t\tclassName=\"ds-atom-toggle-input\"\n\t\t\t\tdisabled={disabled}\n\t\t\t\tchecked={checked}\n\t\t\t\tdefaultChecked={defaultChecked}\n\t\t\t\tstyle={inputStyle}\n\t\t\t\t{...rest}\n\t\t\t/>\n\t\t\t<span className=\"ds-atom-toggle-track\" aria-hidden=\"true\">\n\t\t\t\t<span className=\"ds-atom-toggle-thumb\" />\n\t\t\t</span>\n\t\t\t{label ? <span style={style}>{label}</span> : null}\n\t\t</label>\n\t);\n});\n","import { type CSSProperties, type ReactNode, forwardRef, useEffect, useState } from \"react\";\nimport { Minus, Plus } from \"../../icons\";\nexport interface NumberStepperProps {\n\t/** Controlled numeric value. */\n\tvalue: number;\n\t/** Called with the clamped next value after each increment, decrement, or manual edit. */\n\tonChange: (next: number) => void;\n\t/** Minimum allowed value; decrement button disables at this boundary. */\n\tmin?: number;\n\t/** Maximum allowed value; increment button disables at this boundary. */\n\tmax?: number;\n\t/** Amount added or subtracted per button click.\n\t * @default 1\n\t */\n\tstep?: number;\n\t/** Optional leading adornment (e.g. currency symbol) rendered before the value. */\n\tprefix?: ReactNode;\n\t/** Optional trailing adornment (e.g. unit label) rendered after the value. */\n\tsuffix?: ReactNode;\n\t/** Custom display formatter called when the input is not focused; raw value shown while editing. */\n\tformatFn?: (value: number) => string;\n\t/** When true, disables all interaction including both buttons and the input. */\n\tdisabled?: boolean;\n\t/** Accessible label for the stepper container used by assistive technology. */\n\tariaLabel?: string;\n\t/** Additional className applied to the root wrapper element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root wrapper element. */\n\tstyle?: CSSProperties;\n}\n\nfunction clamp(v: number, min?: number, max?: number) {\n\tlet next = v;\n\tif (typeof min === \"number\") next = Math.max(min, next);\n\tif (typeof max === \"number\") next = Math.min(max, next);\n\treturn next;\n}\n\nexport const NumberStepper = forwardRef<HTMLInputElement, NumberStepperProps>(\n\tfunction NumberStepper(\n\t\t{\n\t\t\tvalue,\n\t\t\tonChange,\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep = 1,\n\t\t\tprefix,\n\t\t\tsuffix,\n\t\t\tformatFn,\n\t\t\tdisabled,\n\t\t\tariaLabel,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) {\n\t\tconst [focused, setFocused] = useState(false);\n\t\tconst [buffer, setBuffer] = useState(String(value));\n\n\t\tuseEffect(() => {\n\t\t\tif (!focused) setBuffer(String(value));\n\t\t}, [value, focused]);\n\n\t\tconst display = focused ? buffer : formatFn ? formatFn(value) : String(value);\n\n\t\tconst dec = () => {\n\t\t\tif (disabled) return;\n\t\t\tonChange(clamp(value - step, min, max));\n\t\t};\n\t\tconst inc = () => {\n\t\t\tif (disabled) return;\n\t\t\tonChange(clamp(value + step, min, max));\n\t\t};\n\n\t\tconst commit = () => {\n\t\t\tconst parsed = Number.parseFloat(buffer.replace(/[^0-9.\\-]/g, \"\"));\n\t\t\tconst next = Number.isNaN(parsed) ? value : clamp(parsed, min, max);\n\t\t\tonChange(next);\n\t\t\tsetFocused(false);\n\t\t\tsetBuffer(String(next));\n\t\t};\n\n\t\tconst decDisabled = disabled || (typeof min === \"number\" && value <= min);\n\t\tconst incDisabled = disabled || (typeof max === \"number\" && value >= max);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`ds-atom-stepper${className ? ` ${className}` : \"\"}`}\n\t\t\t\tstyle={style}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-stepper-btn\"\n\t\t\t\t\tonClick={dec}\n\t\t\t\t\tdisabled={decDisabled}\n\t\t\t\t\taria-label=\"Decrement\"\n\t\t\t\t>\n\t\t\t\t\t<Minus size={14} strokeWidth={2.5} />\n\t\t\t\t</button>\n\t\t\t\t<div className=\"ds-atom-stepper-display\">\n\t\t\t\t\t{prefix != null && <span className=\"ds-atom-stepper-affix\">{prefix}</span>}\n\t\t\t\t\t<input\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName=\"ds-atom-stepper-input\"\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tinputMode=\"decimal\"\n\t\t\t\t\t\tvalue={display}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\tsetFocused(true);\n\t\t\t\t\t\t\tsetBuffer(String(value));\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonChange={(e) => setBuffer(e.target.value)}\n\t\t\t\t\t\tonBlur={commit}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Enter\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tcommit();\n\t\t\t\t\t\t\t\t(e.currentTarget as HTMLInputElement).blur();\n\t\t\t\t\t\t\t} else if (e.key === \"ArrowUp\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tinc();\n\t\t\t\t\t\t\t} else if (e.key === \"ArrowDown\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tdec();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t{suffix != null && <span className=\"ds-atom-stepper-affix\">{suffix}</span>}\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-stepper-btn\"\n\t\t\t\t\tonClick={inc}\n\t\t\t\t\tdisabled={incDisabled}\n\t\t\t\t\taria-label=\"Increment\"\n\t\t\t\t>\n\t\t\t\t\t<Plus size={14} strokeWidth={2.5} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t},\n);\n","import { type CSSProperties, useEffect, useRef } from \"react\";\n\nexport type RollingNumberVariant = \"default\" | \"dark\" | \"light\";\n\nexport interface RollingNumberProps {\n\t/** Numeric value to display; digit columns animate vertically when the value changes. */\n\tvalue: number;\n\t/** Custom formatter applied before splitting into individual characters; defaults to `String(value)`. */\n\tformat?: (value: number) => string;\n\t/** Static text prepended before the formatted number (e.g. `\"$\"`). */\n\tprefix?: string;\n\t/** Static text appended after the formatted number (e.g. `\" pts\"`). */\n\tsuffix?: string;\n\t/**\n\t * Visual background treatment.\n\t * - `\"default\"` - no background, inherits from parent (current behaviour).\n\t * - `\"dark\"` - black background per digit cell with white text; ideal for counters and clocks.\n\t * - `\"light\"` - cream background per digit cell with dark text; for use on dark surfaces.\n\t * @default \"default\"\n\t */\n\tvariant?: RollingNumberVariant;\n\t/** Accessible label for the `aria-live` region; defaults to the full rendered display string. */\n\tariaLabel?: string;\n\t/** Additional className applied to the root `<span>` element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root `<span>` element. */\n\tstyle?: CSSProperties;\n}\n\nconst DIGITS = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\nexport function RollingNumber({\n\tvalue,\n\tformat,\n\tprefix,\n\tsuffix,\n\tvariant = \"default\",\n\tariaLabel,\n\tclassName,\n\tstyle,\n}: RollingNumberProps) {\n\tconst core = format ? format(value) : String(value);\n\tconst display = `${prefix ?? \"\"}${core}${suffix ?? \"\"}`;\n\n\tconst firstRender = useRef(true);\n\tuseEffect(() => {\n\t\tfirstRender.current = false;\n\t}, []);\n\n\tconst stripTransitionStyle: CSSProperties = firstRender.current ? { transition: \"none\" } : {};\n\n\treturn (\n\t\t<span\n\t\t\tclassName={[\"ds-atom-rolling\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-variant={variant === \"default\" ? undefined : variant}\n\t\t\tstyle={style}\n\t\t\taria-live=\"polite\"\n\t\t\taria-label={ariaLabel ?? display}\n\t\t>\n\t\t\t{display.split(\"\").map((char, i) => {\n\t\t\t\tif (/[0-9]/.test(char)) {\n\t\t\t\t\tconst digit = Number.parseInt(char, 10);\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: digit-by-position rendering, key by index is correct\n\t\t\t\t\t\t\tkey={`d-${i}`}\n\t\t\t\t\t\t\tclassName=\"ds-atom-rolling-cell\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"ds-atom-rolling-strip\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\ttransform: `translateY(${-digit * 22}px)`,\n\t\t\t\t\t\t\t\t\t...stripTransitionStyle,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{DIGITS.map((n) => (\n\t\t\t\t\t\t\t\t\t<span key={n}>{n}</span>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\t<span\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: char-by-position rendering, key by index is correct\n\t\t\t\t\t\tkey={`s-${i}`}\n\t\t\t\t\t\tclassName=\"ds-atom-rolling-static\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{char}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t})}\n\t\t</span>\n\t);\n}\n","import { type ChangeEvent, type InputHTMLAttributes, forwardRef } from \"react\";\n\nexport interface RangeSliderProps\n\textends Omit<\n\t\tInputHTMLAttributes<HTMLInputElement>,\n\t\t\"type\" | \"value\" | \"onChange\" | \"min\" | \"max\" | \"step\" | \"disabled\"\n\t> {\n\t/** Controlled numeric value of the slider thumb position. */\n\tvalue: number;\n\t/** Called on every thumb movement with the new numeric value and the native event. */\n\tonChange: (value: number, e: ChangeEvent<HTMLInputElement>) => void;\n\t/** Minimum selectable value.\n\t * @default 0\n\t */\n\tmin?: number;\n\t/** Maximum selectable value.\n\t * @default 100\n\t */\n\tmax?: number;\n\t/** Increment between selectable values.\n\t * @default 1\n\t */\n\tstep?: number;\n\t/** Optional text label rendered above the track on the left side. */\n\tlabel?: string;\n\t/** Formats the current value displayed on the right side of the label row. */\n\tvalueFormat?: (value: number) => string;\n\t/** When true, disables the slider and grays it out. */\n\tdisabled?: boolean;\n\t/** Accessible label for the underlying `<input type=\"range\">`; falls back to `label`. */\n\tariaLabel?: string;\n}\n\nexport const RangeSlider = forwardRef<HTMLInputElement, RangeSliderProps>(function RangeSlider(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tmin = 0,\n\t\tmax = 100,\n\t\tstep = 1,\n\t\tlabel,\n\t\tvalueFormat,\n\t\tdisabled,\n\t\tariaLabel,\n\t\tclassName,\n\t\tstyle,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst range = max - min;\n\tconst pct = range > 0 ? Math.max(0, Math.min(100, ((value - min) / range) * 100)) : 0;\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst next = Number(e.target.value);\n\t\tonChange(next, e);\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`ds-atom-range${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t>\n\t\t\t{(label != null || valueFormat) && (\n\t\t\t\t<div className=\"ds-atom-range-label-row\">\n\t\t\t\t\t{label != null && <span className=\"ds-atom-range-label\">{label}</span>}\n\t\t\t\t\t{valueFormat && <span className=\"ds-atom-range-value\">{valueFormat(value)}</span>}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<div className=\"ds-atom-range-track-wrap\">\n\t\t\t\t<input\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tclassName=\"ds-atom-range-input\"\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={ariaLabel ?? label}\n\t\t\t\t\t{...rest}\n\t\t\t\t/>\n\t\t\t\t<div className=\"ds-atom-range-track\" aria-hidden=\"true\">\n\t\t\t\t\t<div className=\"ds-atom-range-fill\" style={{ width: `${pct}%` }} />\n\t\t\t\t</div>\n\t\t\t\t<div className=\"ds-atom-range-thumb\" style={{ left: `${pct}%` }} aria-hidden=\"true\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, useState } from \"react\";\nimport { Star } from \"../../icons\";\nexport type StarRatingSize = \"default\" | \"compact\";\n\n/**\n * Deliberate deviation from D-240: D-240 specified `variant?: 'interactive' | 'compact'` which\n * conflated icon size with interaction mode. We split into orthogonal `size` (icon dimensions)\n * and `readOnly` (interaction mode) props because (a) consumers may want a compact yet still-\n * interactive rating in dense list views, and (b) read-only at default size is the common\n * \"display existing rating\" case. Documented as the public StarRating API of v2.0.\n */\nexport interface StarRatingProps {\n\t/** Controlled rating value (1–5). */\n\tvalue: number;\n\t/** Called when the user clicks a star with the new rating; omit for read-only display. */\n\tonChange?: (value: number) => void;\n\t/** Icon size token; `\"compact\"` uses 14px stars for dense list contexts.\n\t * @default \"default\"\n\t */\n\tsize?: StarRatingSize;\n\t/** Accessible label for the `role=\"radiogroup\"` container. */\n\tlabel?: string;\n\t/** When true, disables hover preview and click interaction without the disabled visual.\n\t * @default false\n\t */\n\treadOnly?: boolean;\n\t/** When true, disables all interaction and dims the stars.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional className applied to the root element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root element. */\n\tstyle?: CSSProperties;\n}\n\nconst STAR_SIZES: Record<StarRatingSize, number> = {\n\tdefault: 24,\n\tcompact: 14,\n};\n\nexport function StarRating({\n\tvalue,\n\tonChange,\n\tsize = \"default\",\n\tlabel,\n\treadOnly,\n\tdisabled,\n\tclassName,\n\tstyle,\n}: StarRatingProps) {\n\tconst [hover, setHover] = useState<number | null>(null);\n\tconst interactive = !readOnly && !disabled;\n\tconst effective = interactive && hover != null ? hover : value;\n\tconst iconSize = STAR_SIZES[size];\n\n\treturn (\n\t\t<div\n\t\t\trole=\"radiogroup\"\n\t\t\taria-label={label}\n\t\t\tclassName={`ds-atom-star${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-size={size}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tonMouseLeave={() => {\n\t\t\t\tif (interactive) setHover(null);\n\t\t\t}}\n\t\t>\n\t\t\t{[1, 2, 3, 4, 5].map((n) => {\n\t\t\t\tconst isFilled = n <= effective;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={n}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-240 - buttons-in-radiogroup needed for click-to-select-N + hover-preview-1..N semantics; native <input type=\"radio\"> can't render Lucide icons or support the hover preview cleanly\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\taria-checked={n === value}\n\t\t\t\t\t\taria-label={`${n} star${n === 1 ? \"\" : \"s\"}`}\n\t\t\t\t\t\tdisabled={!interactive}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (interactive) onChange?.(n);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonMouseEnter={() => {\n\t\t\t\t\t\t\tif (interactive) setHover(n);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"ds-atom-star-btn\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Star\n\t\t\t\t\t\t\tsize={iconSize}\n\t\t\t\t\t\t\tfill={isFilled ? \"var(--amber-vivid)\" : \"transparent\"}\n\t\t\t\t\t\t\tstroke={isFilled ? \"var(--amber-vivid)\" : \"var(--ink-5)\"}\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nexport type StickyNoteRotation = \"left\" | \"right\" | \"none\";\n\nexport interface StickyNoteProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Static rotation applied to the note surface for a handwritten feel.\n\t * @default \"right\"\n\t */\n\trotation?: StickyNoteRotation;\n\t/** Arbitrary JSX content rendered inside the note; compose freely. */\n\tchildren: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: \"block\",\n\tboxSizing: \"border-box\",\n\tfontFamily: \"var(--font)\",\n};\n\n/**\n * StickyNote - yellow-gradient note surface with slight static rotation.\n *\n * <StickyNote>Reach out to David before screening.</StickyNote>\n * <StickyNote rotation=\"left\">Follow up by May 2.</StickyNote>\n * <StickyNote rotation=\"none\">Aligned baseline note.</StickyNote>\n *\n * Children are arbitrary JSX (mirrors Card freely-composed pattern). The\n * `.ds-sticky-hint` mini-line in the handoff is NOT part of the primitive\n * - consumers compose it as a child <div>.\n *\n * Always-dark text invariant (per handoff): the text color stays #292524\n * regardless of :root.dark cascade. The amber-yellow surface is identical\n * in light and dark modes - sticky notes are visually consistent across\n * themes, intentionally.\n */\nexport const StickyNote = forwardRef<HTMLDivElement, StickyNoteProps>(function StickyNote(\n\t{ rotation = \"right\", className, style, children, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-stickynote${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-rotation={rotation}\n\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nexport type CardVariant = \"glass\" | \"amber\" | \"dark\" | \"kanban\";\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Surface style variant.\n\t * - `glass` - translucent glass surface (default).\n\t * - `amber` - amber-tinted CTA card.\n\t * - `dark` - always-dark surface independent of theme.\n\t * - `kanban` - compact glass with hover-lift; use for drag-and-drop boards.\n\t * @default \"glass\"\n\t */\n\tvariant?: CardVariant;\n\t/** Arbitrary JSX content; Card has no compound structure - compose freely. */\n\tchildren: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tdisplay: \"block\",\n\tboxSizing: \"border-box\",\n\tfontFamily: \"var(--font)\",\n};\n\n/**\n * Card - surface primitive with 4 variants (D-300, D-301, D-302).\n *\n * <Card variant=\"glass\"> // default - translucent glass surface\n * <Card variant=\"amber\"> // amber-tinted CTA card\n * <Card variant=\"dark\"> // always-dark surface (handoff invariant)\n * <Card variant=\"kanban\"> // compact glass card with hover-lift; visual surface only\n *\n * Children are arbitrary JSX - there is no compound API. Compose freely:\n *\n * <Card variant=\"glass\">\n * <header>...</header>\n * <div>...</div>\n * <footer>...</footer>\n * </Card>\n *\n * The `kanban` variant ships only the VISUAL surface (12px padding, 10px\n * radius, glass bg, hover shadow lift). Application data binding (logo +\n * role + age + chips + priority dot) is deferred to Wave 7 / DragDropList\n * per D-302.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n\t{ variant = \"glass\", className, style, children, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-card${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-variant={variant}\n\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\n","import { type ReactNode, useEffect, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface DSPortalProps {\n\tchildren: ReactNode;\n\ttarget?: HTMLElement;\n}\n\n/**\n * SSR-safe React.createPortal wrapper.\n *\n * Returns null on the server and during the first client render, then\n * portals `children` to `target` (default: document.body) after the\n * initial useEffect fires. Consumed by Tooltip, Popover, Modal, Sheet,\n * BottomSheet, Lightbox, HoverCard (Wave 3) and Toast (Wave 4).\n *\n * Mount target defaults to document.body to avoid coupling to consumer\n * DOM layout (D-310).\n */\nexport function DSPortal({ children, target }: DSPortalProps) {\n\tconst [mounted, setMounted] = useState(false);\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\tif (!mounted) return null;\n\treturn createPortal(children, target ?? document.body);\n}\n","import {\n\ttype CSSProperties,\n\tChildren,\n\ttype HTMLAttributes,\n\ttype ReactElement,\n\ttype FocusEvent as ReactFocusEvent,\n\ttype MouseEvent as ReactMouseEvent,\n\ttype ReactNode,\n\tcloneElement,\n\tisValidElement,\n\tuseCallback,\n\tuseEffect,\n\tuseId,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nexport type TooltipPlacement = \"auto\" | \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface TooltipProps {\n\t/** Content rendered inside the tooltip surface; accepts any ReactNode. */\n\tcontent: ReactNode;\n\t/** Preferred placement relative to the trigger; `\"auto\"` picks the side with the most viewport room.\n\t * @default \"auto\"\n\t */\n\tplacement?: TooltipPlacement;\n\t/** Milliseconds to wait after mouseenter/focus before showing the tooltip.\n\t * @default 150\n\t */\n\tdelay?: number;\n\t/** The single trigger element; Tooltip clones it to attach event handlers and `aria-describedby`. */\n\tchildren: ReactElement;\n}\n\nconst GAP = 6;\n\n/**\n * Tooltip - overlay micro-primitive (DS-32).\n *\n * <Tooltip content=\"Star this application\">\n * <button aria-label=\"Star\">★</button>\n * </Tooltip>\n *\n * - Wraps EXACTLY ONE child element (React.Children.only - throws on multiple).\n * - Clones the child to attach onMouseEnter / onMouseLeave / onFocus / onBlur +\n * aria-describedby={tooltipId} (D-311).\n * - Mounts the tooltip surface via DSPortal to document.body.\n * - Position computed from trigger.getBoundingClientRect() per `placement`\n * (D-312, manual calc - no Floating-UI dep).\n * - Open delay default 150ms (D-311 - handoff 0ms feels twitchy, 700ms feels broken).\n * - Hover and focus both open with the SAME 150ms delay (Path A from the plan\n * behavior block - keeps timing consistent for assistive-tech and pointer\n * users; mouseleave + blur close immediately by clearing the timer).\n * - aria-describedby is wired on the trigger when open (assistive-tech surface).\n *\n * v2.0 simplifications (deferred to v2.1):\n * - Consumer ref on trigger is NOT preserved (Tooltip's internal triggerRef\n * wins). Most leaf-button triggers don't pass refs, so this is acceptable.\n * - No auto-flip on viewport collision - caller is responsible for placing\n * tooltips with adequate viewport room.\n * - No re-position on scroll/resize while open (most tooltips open + close\n * within a frame anyway). Re-opens recompute fresh.\n * - No exit animation - surface hard-unmounts on close.\n */\nexport function Tooltip({ content, placement = \"auto\", delay = 150, children }: TooltipProps) {\n\t// React.Children.only runs synchronously and THROWS on misuse - this is\n\t// the tested error path (single-child enforcement, see Tooltip.test.tsx).\n\tconst childAsElement = Children.only(children);\n\tif (!isValidElement(childAsElement)) {\n\t\tthrow new Error(\"Tooltip child must be a valid React element\");\n\t}\n\t// Cast for prop-merging - we know it's a host element / forwardRef.\n\tconst child = childAsElement as ReactElement<HTMLAttributes<HTMLElement>>;\n\n\tconst tooltipId = useId();\n\tconst triggerRef = useRef<HTMLElement | null>(null);\n\tconst timerRef = useRef<number | null>(null);\n\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst [pos, setPos] = useState<{ top: number; left: number }>({ top: 0, left: 0 });\n\t// Callback ref tracked as state so useLayoutEffect re-runs once DSPortal\n\t// mounts the surface (DSPortal returns null on first render until its own\n\t// useEffect flips mounted=true; without this, position calc fires before\n\t// the surface DOM exists and pos stays at (0,0)).\n\tconst [surfaceEl, setSurfaceEl] = useState<HTMLDivElement | null>(null);\n\n\tconst clearTimer = useCallback(() => {\n\t\tif (timerRef.current !== null) {\n\t\t\twindow.clearTimeout(timerRef.current);\n\t\t\ttimerRef.current = null;\n\t\t}\n\t}, []);\n\n\tconst scheduleOpen = useCallback(() => {\n\t\tclearTimer();\n\t\ttimerRef.current = window.setTimeout(() => {\n\t\t\tsetIsOpen(true);\n\t\t\ttimerRef.current = null;\n\t\t}, delay);\n\t}, [delay, clearTimer]);\n\n\tconst close = useCallback(() => {\n\t\tclearTimer();\n\t\tsetIsOpen(false);\n\t}, [clearTimer]);\n\n\t// Compose event handlers - consumer's existing handlers run FIRST, then ours.\n\tconst handleMouseEnter = (e: ReactMouseEvent<HTMLElement>) => {\n\t\tchild.props.onMouseEnter?.(e);\n\t\tscheduleOpen();\n\t};\n\tconst handleMouseLeave = (e: ReactMouseEvent<HTMLElement>) => {\n\t\tchild.props.onMouseLeave?.(e);\n\t\tclose();\n\t};\n\tconst handleFocus = (e: ReactFocusEvent<HTMLElement>) => {\n\t\tchild.props.onFocus?.(e);\n\t\tscheduleOpen();\n\t};\n\tconst handleBlur = (e: ReactFocusEvent<HTMLElement>) => {\n\t\tchild.props.onBlur?.(e);\n\t\tclose();\n\t};\n\n\t// Position calc - read trigger rect after open + on placement change.\n\t// useLayoutEffect fires synchronously before paint, so the surface never\n\t// visibly \"jumps\" from (0,0) to its computed position.\n\t// Resolve \"auto\" placement based on viewport space around the trigger.\n\t// Picks the side with the most room. Priority order: top → bottom → right → left.\n\tconst [autoPlacement, setAutoPlacement] = useState<Exclude<TooltipPlacement, \"auto\">>(\"top\");\n\n\tuseLayoutEffect(() => {\n\t\tif (!isOpen || !triggerRef.current || !surfaceEl) return;\n\t\tconst tRect = triggerRef.current.getBoundingClientRect();\n\t\tconst sRect = surfaceEl.getBoundingClientRect();\n\n\t\t// Resolve placement: if \"auto\", pick the side with most space that fits the surface.\n\t\tlet resolved: Exclude<TooltipPlacement, \"auto\"> = placement === \"auto\" ? \"top\" : placement;\n\t\tif (placement === \"auto\") {\n\t\t\tconst vw = window.innerWidth;\n\t\t\tconst vh = window.innerHeight;\n\t\t\tconst spaceTop = tRect.top;\n\t\t\tconst spaceBottom = vh - tRect.bottom;\n\t\t\tconst spaceRight = vw - tRect.right;\n\t\t\tconst spaceLeft = tRect.left;\n\t\t\tconst fitsTop = spaceTop >= sRect.height + GAP;\n\t\t\tconst fitsBottom = spaceBottom >= sRect.height + GAP;\n\t\t\tconst fitsRight = spaceRight >= sRect.width + GAP;\n\t\t\tconst fitsLeft = spaceLeft >= sRect.width + GAP;\n\t\t\t// Prefer top → bottom → right → left where the surface fits.\n\t\t\tif (fitsTop) resolved = \"top\";\n\t\t\telse if (fitsBottom) resolved = \"bottom\";\n\t\t\telse if (fitsRight) resolved = \"right\";\n\t\t\telse if (fitsLeft) resolved = \"left\";\n\t\t\telse {\n\t\t\t\t// Nothing fits cleanly; choose side with maximum space.\n\t\t\t\tconst max = Math.max(spaceTop, spaceBottom, spaceRight, spaceLeft);\n\t\t\t\tif (max === spaceBottom) resolved = \"bottom\";\n\t\t\t\telse if (max === spaceTop) resolved = \"top\";\n\t\t\t\telse if (max === spaceRight) resolved = \"right\";\n\t\t\t\telse resolved = \"left\";\n\t\t\t}\n\t\t\tsetAutoPlacement(resolved);\n\t\t}\n\n\t\tlet top = 0;\n\t\tlet left = 0;\n\t\tswitch (resolved) {\n\t\t\tcase \"top\":\n\t\t\t\ttop = window.scrollY + tRect.top - sRect.height - GAP;\n\t\t\t\tleft = window.scrollX + tRect.left + tRect.width / 2 - sRect.width / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\ttop = window.scrollY + tRect.bottom + GAP;\n\t\t\t\tleft = window.scrollX + tRect.left + tRect.width / 2 - sRect.width / 2;\n\t\t\t\tbreak;\n\t\t\tcase \"right\":\n\t\t\t\ttop = window.scrollY + tRect.top + tRect.height / 2 - sRect.height / 2;\n\t\t\t\tleft = window.scrollX + tRect.right + GAP;\n\t\t\t\tbreak;\n\t\t\tcase \"left\":\n\t\t\t\ttop = window.scrollY + tRect.top + tRect.height / 2 - sRect.height / 2;\n\t\t\t\tleft = window.scrollX + tRect.left - sRect.width - GAP;\n\t\t\t\tbreak;\n\t\t}\n\t\t// Clamp to viewport edges so tooltip never exits the screen.\n\t\tconst MARGIN = 8;\n\t\ttop = Math.max(\n\t\t\tMARGIN,\n\t\t\tMath.min(top, window.scrollY + window.innerHeight - sRect.height - MARGIN),\n\t\t);\n\t\tleft = Math.max(\n\t\t\tMARGIN,\n\t\t\tMath.min(left, window.scrollX + window.innerWidth - sRect.width - MARGIN),\n\t\t);\n\t\tsetPos({ top, left });\n\t}, [isOpen, placement, surfaceEl]);\n\n\t// Render `data-placement` reflects the resolved value (auto → concrete) so\n\t// CSS arrow / styling hooks always have a usable value.\n\tconst renderedPlacement = placement === \"auto\" ? autoPlacement : placement;\n\n\t// Cleanup any pending open-timer on unmount.\n\tuseEffect(() => () => clearTimer(), [clearTimer]);\n\n\tconst surfaceStyle: CSSProperties = {\n\t\tposition: \"absolute\",\n\t\ttop: pos.top,\n\t\tleft: pos.left,\n\t\tzIndex: 9999,\n\t\tpointerEvents: \"none\",\n\t};\n\n\tconst trigger = cloneElement(child, {\n\t\t// v2.0 simplification: consumer's ref is NOT preserved (deferred to v2.1\n\t\t// via useComposedRefs integration). Most leaf-button triggers don't pass\n\t\t// refs, so this is acceptable for the 90% case.\n\t\tref: (node: HTMLElement | null) => {\n\t\t\ttriggerRef.current = node;\n\t\t},\n\t\tonMouseEnter: handleMouseEnter,\n\t\tonMouseLeave: handleMouseLeave,\n\t\tonFocus: handleFocus,\n\t\tonBlur: handleBlur,\n\t\t// When open, our id wins; when closed, preserve consumer's existing one.\n\t\t\"aria-describedby\": isOpen ? tooltipId : child.props[\"aria-describedby\"],\n\t} as Partial<HTMLAttributes<HTMLElement>> & { ref: (node: HTMLElement | null) => void });\n\n\treturn (\n\t\t<>\n\t\t\t{trigger}\n\t\t\t{isOpen ? (\n\t\t\t\t<DSPortal>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={setSurfaceEl}\n\t\t\t\t\t\tid={tooltipId}\n\t\t\t\t\t\trole=\"tooltip\"\n\t\t\t\t\t\tclassName=\"ds-atom-tooltip\"\n\t\t\t\t\t\tdata-placement={renderedPlacement}\n\t\t\t\t\t\tdata-state=\"open\"\n\t\t\t\t\t\tstyle={surfaceStyle}\n\t\t\t\t\t>\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</div>\n\t\t\t\t</DSPortal>\n\t\t\t) : null}\n\t\t</>\n\t);\n}\n","/**\n * Smart floating-element positioning utilities.\n *\n * After computing an initial position for a floating element (dropdown,\n * popover, tooltip, hover-card), these helpers check viewport bounds and:\n * 1. Flip to the opposite axis if the preferred side overflows.\n * 2. Clamp both axes so the panel never exits the viewport.\n *\n * All values are in CSS `position: fixed` coordinates (viewport-relative).\n */\n\nconst MARGIN = 8; // px clearance from every viewport edge\n\nexport interface FloatRect {\n\twidth: number;\n\theight: number;\n}\n\n/** Clamp a fixed-position element inside the viewport with MARGIN clearance. */\nexport function clampToViewport(\n\ttop: number,\n\tleft: number,\n\tpanel: FloatRect,\n): { top: number; left: number } {\n\tconst vw = window.innerWidth;\n\tconst vh = window.innerHeight;\n\treturn {\n\t\ttop: Math.max(MARGIN, Math.min(top, vh - panel.height - MARGIN)),\n\t\tleft: Math.max(MARGIN, Math.min(left, vw - panel.width - MARGIN)),\n\t};\n}\n\nexport type VerticalSide = \"bottom\" | \"top\";\nexport type HorizontalAlign = \"start\" | \"end\";\n\n/**\n * Compute a fixed position for a panel anchored to `anchorRect`.\n * Automatically flips the vertical side when the preferred side doesn't fit,\n * then clamps both axes to the viewport.\n */\nexport function smartAnchorPos(\n\tanchorRect: DOMRect,\n\tpanel: FloatRect,\n\tside: VerticalSide,\n\talign: HorizontalAlign,\n\toffset: number,\n): { top: number; left: number; side: VerticalSide } {\n\tconst vw = window.innerWidth;\n\tconst vh = window.innerHeight;\n\n\t// Resolve vertical side with auto-flip\n\tconst spaceBelow = vh - anchorRect.bottom;\n\tconst spaceAbove = anchorRect.top;\n\tlet resolvedSide = side;\n\tif (side === \"bottom\" && spaceBelow < panel.height + offset + MARGIN && spaceAbove > spaceBelow) {\n\t\tresolvedSide = \"top\";\n\t} else if (\n\t\tside === \"top\" &&\n\t\tspaceAbove < panel.height + offset + MARGIN &&\n\t\tspaceBelow > spaceAbove\n\t) {\n\t\tresolvedSide = \"bottom\";\n\t}\n\n\tconst top =\n\t\tresolvedSide === \"bottom\" ? anchorRect.bottom + offset : anchorRect.top - panel.height - offset;\n\n\t// Resolve horizontal alignment with auto-flip\n\tlet left = align === \"start\" ? anchorRect.left : anchorRect.right - panel.width;\n\n\t// Flip alignment if it overflows the opposite edge\n\tif (align === \"start\" && left + panel.width > vw - MARGIN) {\n\t\tleft = anchorRect.right - panel.width;\n\t} else if (align === \"end\" && left < MARGIN) {\n\t\tleft = anchorRect.left;\n\t}\n\n\treturn {\n\t\t...clampToViewport(top, left, panel),\n\t\tside: resolvedSide,\n\t};\n}\n","import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { smartAnchorPos } from \"../../_internals/floatingPos\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\nexport type PopoverPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport type PopoverVariant = \"default\" | \"contextmenu\";\n\nexport interface PopoverProps {\n\t/** Ref to the anchor element; the popover positions itself relative to this element's bounding box. */\n\tanchorRef: RefObject<HTMLElement | null>;\n\t/** Controls visibility; the popover returns null when false. */\n\topen: boolean;\n\t/** Called when the popover requests to close (Escape key or outside click). */\n\tonOpenChange: (open: boolean) => void;\n\t/** Which edge of the anchor the panel appears on.\n\t * @default \"bottom-start\"\n\t */\n\tplacement?: PopoverPlacement;\n\t/** Gap in pixels between the anchor edge and the panel.\n\t * @default 4\n\t */\n\toffset?: number;\n\t/** Visual variant; `\"contextmenu\"` applies tighter padding and narrower width.\n\t * @default \"default\"\n\t */\n\tvariant?: PopoverVariant;\n\t/** Content rendered inside the popover panel. */\n\tchildren: ReactNode;\n\t/** Additional className applied to the panel element. */\n\tclassName?: string;\n\t/** Inline styles applied to the panel element. */\n\tstyle?: CSSProperties;\n}\n\n// computePosition replaced by smartAnchorPos from floatingPos - auto-flips + clamps.\n\n/**\n * Anchor-positioned overlay primitive (D-330). DSPortal-mounted to body;\n * positions via `anchorRef.current.getBoundingClientRect()` + placement +\n * offset. Closes on outside click (via `useClickOutside`) and on Escape\n * (document keydown listener installed only while open).\n *\n * 4 fixed placements; auto-flip-on-collision deferred to v2.1.\n */\nexport function Popover({\n\tanchorRef,\n\topen,\n\tonOpenChange,\n\tplacement = \"bottom-start\",\n\toffset = 4,\n\tvariant = \"default\",\n\tchildren,\n\tclassName,\n\tstyle,\n}: PopoverProps) {\n\t// Callback-ref state: useLayoutEffect must re-run AFTER DSPortal mounts the\n\t// panel (DSPortal returns null on first render until its useEffect flips\n\t// mounted=true). With a plain useRef, panelRef.current is null on the first\n\t// position-calc pass and pos stays at null/(0,0).\n\tconst [panel, setPanel] = useState<HTMLDivElement | null>(null);\n\tconst panelRef = useRef<HTMLDivElement | null>(null);\n\tconst setPanelRef = (node: HTMLDivElement | null) => {\n\t\tpanelRef.current = node;\n\t\tsetPanel(node);\n\t};\n\tconst [pos, setPos] = useState<{ top: number; left: number } | null>(null);\n\n\t// Position computation: auto-flip + viewport clamp via smartAnchorPos.\n\t// Also closes when the anchor scrolls fully out of the viewport.\n\tconst recompute = useCallback(() => {\n\t\tconst anchor = anchorRef.current;\n\t\tif (!anchor || !panel) return;\n\t\tconst a = anchor.getBoundingClientRect();\n\t\t// Anchor is fully outside the viewport - close.\n\t\tif (a.bottom < 0 || a.top > window.innerHeight || a.right < 0 || a.left > window.innerWidth) {\n\t\t\tonOpenChange(false);\n\t\t\treturn;\n\t\t}\n\t\tconst p = panel.getBoundingClientRect();\n\t\tconst side = placement.startsWith(\"top\") ? \"top\" : \"bottom\";\n\t\tconst align = placement.endsWith(\"end\") ? \"end\" : \"start\";\n\t\tconst { top, left } = smartAnchorPos(\n\t\t\ta,\n\t\t\t{ width: p.width, height: p.height },\n\t\t\tside,\n\t\t\talign,\n\t\t\toffset,\n\t\t);\n\t\tsetPos({ top, left });\n\t}, [anchorRef, panel, placement, offset, onOpenChange]);\n\n\tuseLayoutEffect(() => {\n\t\tif (!open) {\n\t\t\tsetPos(null);\n\t\t\treturn;\n\t\t}\n\t\trecompute();\n\t}, [open, recompute]);\n\n\t// Track scroll/resize - recomputes position or closes if anchor left viewport.\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\twindow.addEventListener(\"scroll\", recompute, true);\n\t\twindow.addEventListener(\"resize\", recompute);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"scroll\", recompute, true);\n\t\t\twindow.removeEventListener(\"resize\", recompute);\n\t\t};\n\t}, [open, recompute]);\n\n\t// Outside-click dismissal (panelRef only - clicks on anchor handled by consumer).\n\tuseClickOutside(panelRef, () => onOpenChange(false), open);\n\n\t// Escape dismissal - listener installed only while open.\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") onOpenChange(false);\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [open, onOpenChange]);\n\n\tif (!open) return null;\n\n\tconst isDarkCtx = anchorRef.current?.closest(\".dark\") != null;\n\n\tconst popoverEl = (\n\t\t<div\n\t\t\tref={setPanelRef}\n\t\t\tclassName={[\"ds-atom-popover\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-placement={placement}\n\t\t\tdata-variant={variant === \"contextmenu\" ? \"contextmenu\" : undefined}\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: native <dialog> implies modal/inert behavior we don't want for non-modal popovers\n\t\t\trole=\"dialog\"\n\t\t\tstyle={{\n\t\t\t\ttop: pos?.top ?? -9999,\n\t\t\t\tleft: pos?.left ?? -9999,\n\t\t\t\tvisibility: pos ? \"visible\" : \"hidden\",\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n\n\treturn <DSPortal>{isDarkCtx ? <div className=\"dark\">{popoverEl}</div> : popoverEl}</DSPortal>;\n}\n\n// ─── ContextMenu - same-file styled variant (D-331) ─────────────────────\n\nexport interface ContextMenuItem {\n\tlabel: string;\n\ticon?: ReactNode;\n\tonSelect: () => void;\n\tdisabled?: boolean;\n\tvariant?: \"default\" | \"danger\";\n}\n\nexport interface ContextMenuProps extends Omit<PopoverProps, \"children\" | \"variant\"> {\n\titems: ContextMenuItem[];\n}\n\n/**\n * Curated context-menu variant of Popover (D-331). Same-file export so\n * consumers can import either primitive without an extra path. Renders\n * items as `<button class=\"ds-atom-popover-item\">` rows; danger variant\n * uses `data-tone=\"danger\"`; disabled items short-circuit `onSelect`.\n */\nexport function ContextMenu({ items, onOpenChange, ...rest }: ContextMenuProps) {\n\treturn (\n\t\t<Popover {...rest} variant=\"contextmenu\" onOpenChange={onOpenChange}>\n\t\t\t{items.map((item, idx) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={`${item.label}-${idx}`}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-popover-item\"\n\t\t\t\t\tdata-tone={item.variant === \"danger\" ? \"danger\" : undefined}\n\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\tif (item.disabled) return;\n\t\t\t\t\t\titem.onSelect();\n\t\t\t\t\t\tonOpenChange(false);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{item.icon ? <span aria-hidden=\"true\">{item.icon}</span> : null}\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</Popover>\n\t);\n}\n","import {\n\ttype CSSProperties,\n\ttype MouseEvent as ReactMouseEvent,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseEffect,\n\tuseId,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { useFocusTrap } from \"../../hooks/useFocusTrap\";\nimport { X } from \"../../icons\";\nimport { Button } from \"../../inputs/Button\";\nexport type ModalRole = \"dialog\" | \"alertdialog\";\n\nexport interface ModalProps {\n\t/** Controls visibility; returns null when false. */\n\topen: boolean;\n\t/** Called when the user closes the modal via Escape or backdrop click. */\n\tonClose: () => void;\n\t/** Heading rendered in the modal header; auto-wired to `aria-labelledby`. */\n\ttitle?: ReactNode;\n\t/** Short description rendered above children; auto-wired to `aria-describedby`. */\n\tdescription?: string;\n\t/** Content for the footer slot (typically action buttons). */\n\tfooter?: ReactNode;\n\t/** Main body content of the modal. */\n\tchildren?: ReactNode;\n\t/** Whether clicking the backdrop calls `onClose`.\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\t/** ARIA role - use `\"alertdialog\"` for destructive confirmations.\n\t * @default \"dialog\"\n\t */\n\trole?: ModalRole;\n\t/** Ref to the element that should receive focus when the modal opens; defaults to the panel itself. */\n\tinitialFocus?: RefObject<HTMLElement | null>;\n\t/** Additional className applied to the modal panel. */\n\tclassName?: string;\n\t/** Inline styles applied to the modal panel. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Modal - DSPortal-mounted dialog with focus trap, Escape close, backdrop close.\n *\n * <Modal open={open} onClose={close} title=\"Edit profile\">\n * <form>...</form>\n * </Modal>\n *\n * A11y wiring (D-321):\n * - role defaults to \"dialog\"; pass \"alertdialog\" for destructive confirms\n * - aria-labelledby auto-generated from `title` via useId()\n * - aria-describedby auto-generated from `description` via useId()\n * - aria-modal=\"true\" always\n * - useFocusTrap traps Tab inside panel + restores focus to trigger on close\n * - Document-level keydown listener for Escape (useFocusTrap handles only Tab)\n *\n * Behavior (D-320, D-322):\n * - closeOnBackdropClick defaults to true; click on backdrop only (not panel) closes\n * - Animations namespaced (ds-atom-modal-fadein, ds-atom-modal-in) to avoid\n * colliding with consumer-defined keyframes\n *\n * ConfirmDialog ships from this same file as a named variant export (D-287, D-356).\n */\nexport function Modal({\n\topen,\n\tonClose,\n\ttitle,\n\tdescription,\n\tfooter,\n\tchildren,\n\tcloseOnBackdropClick = true,\n\trole = \"dialog\",\n\tinitialFocus,\n\tclassName,\n\tstyle,\n}: ModalProps) {\n\t// Callback-ref pattern: panel state flips from null to the DOM node when\n\t// React commits it. Passing the node (not a RefObject) into useFocusTrap\n\t// guarantees the trap engages exactly when the portal commits its child.\n\tconst [panel, setPanel] = useState<HTMLDivElement | null>(null);\n\tconst generatedTitleId = useId();\n\tconst generatedDescId = useId();\n\tconst titleId = title ? generatedTitleId : undefined;\n\tconst descId = description ? generatedDescId : undefined;\n\n\tuseFocusTrap(panel, open);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tif (initialFocus?.current) {\n\t\t\tconst id = window.setTimeout(() => initialFocus.current?.focus(), 0);\n\t\t\treturn () => window.clearTimeout(id);\n\t\t}\n\t}, [open, initialFocus]);\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [open, onClose]);\n\n\tif (!open) return null;\n\n\tfunction handleBackdropClick(e: ReactMouseEvent<HTMLDivElement>) {\n\t\tif (e.target === e.currentTarget && closeOnBackdropClick) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\treturn (\n\t\t<DSPortal>\n\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: backdrop click is mouse-only UX; keyboard close is via the document Escape handler installed above on `document` (handles all focus contexts, including the panel) */}\n\t\t\t<div className=\"ds-atom-modal-backdrop\" onClick={handleBackdropClick}>\n\t\t\t\t<div\n\t\t\t\t\tref={setPanel}\n\t\t\t\t\tclassName={`ds-atom-modal${className ? ` ${className}` : \"\"}`}\n\t\t\t\t\trole={role}\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\taria-describedby={descId}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t<header id={titleId} className=\"ds-atom-modal-hd\">\n\t\t\t\t\t\t<span className=\"ds-atom-modal-hd-title\">{title}</span>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\tstyle={{ marginLeft: \"auto\", flexShrink: 0 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<X size={16} />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</header>\n\t\t\t\t\t<div className=\"ds-atom-modal-body\">\n\t\t\t\t\t\t{description ? <div id={descId}>{description}</div> : null}\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t\t{footer ? <footer className=\"ds-atom-modal-ft\">{footer}</footer> : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</DSPortal>\n\t);\n}\n\n// ─── ConfirmDialog - same-file variant export (D-287, D-356) ─────────\n\nexport interface ConfirmDialogProps {\n\t/** Controls visibility; returns null when false. */\n\topen: boolean;\n\t/** Called when the user dismisses or cancels the dialog. */\n\tonClose: () => void;\n\t/** Heading text for the confirmation dialog. */\n\ttitle: ReactNode;\n\t/** Supplemental explanation shown below the title; string gets `aria-describedby`, ReactNode renders as children. */\n\tdescription?: ReactNode;\n\t/** Label for the confirm action button.\n\t * @default \"Confirm\"\n\t */\n\tconfirmLabel?: string;\n\t/** Label for the cancel action button.\n\t * @default \"Cancel\"\n\t */\n\tcancelLabel?: string;\n\t/** When true, uses `role=\"alertdialog\"`, disables backdrop close, and styles confirm as `danger`.\n\t * @default false\n\t */\n\tdanger?: boolean;\n\t/** Called when the user clicks the confirm button. */\n\tonConfirm: () => void;\n}\n\n/**\n * ConfirmDialog - Modal-as-confirmation variant (D-287, D-356).\n *\n * <ConfirmDialog\n * open={open}\n * onClose={close}\n * onConfirm={doDelete}\n * title=\"Delete application?\"\n * description=\"This cannot be undone.\"\n * confirmLabel=\"Yes, delete\"\n * danger\n * />\n *\n * When `danger=true`:\n * - role=\"alertdialog\"\n * - closeOnBackdropClick=false (forces explicit Cancel/Confirm)\n * - Confirm button uses Button variant=\"danger\"\n *\n * `description` accepts string or ReactNode. Strings flow to Modal's\n * `description` prop (gets aria-describedby wiring); ReactNode renders\n * inline as Modal children (no auto aria-describedby).\n */\nexport function ConfirmDialog({\n\topen,\n\tonClose,\n\ttitle,\n\tdescription,\n\tconfirmLabel = \"Confirm\",\n\tcancelLabel = \"Cancel\",\n\tdanger = false,\n\tonConfirm,\n}: ConfirmDialogProps) {\n\tconst descriptionString = typeof description === \"string\" ? description : undefined;\n\tconst descriptionNode = typeof description !== \"string\" && description ? description : null;\n\n\treturn (\n\t\t<Modal\n\t\t\topen={open}\n\t\t\tonClose={onClose}\n\t\t\ttitle={title}\n\t\t\tdescription={descriptionString}\n\t\t\trole={danger ? \"alertdialog\" : \"dialog\"}\n\t\t\tcloseOnBackdropClick={!danger}\n\t\t\tfooter={\n\t\t\t\t<>\n\t\t\t\t\t<Button variant=\"ghost\" onClick={onClose}>\n\t\t\t\t\t\t{cancelLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button variant={danger ? \"danger\" : \"primary\"} onClick={onConfirm}>\n\t\t\t\t\t\t{confirmLabel}\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t}\n\t\t>\n\t\t\t{descriptionNode}\n\t\t</Modal>\n\t);\n}\n","import {\n\ttype CSSProperties,\n\ttype MouseEvent as ReactMouseEvent,\n\ttype ReactNode,\n\tuseEffect,\n\tuseId,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { useFocusTrap } from \"../../hooks/useFocusTrap\";\nimport { X } from \"../../icons\";\nimport { Button } from \"../../inputs/Button\";\nexport type SheetSide = \"right\" | \"left\";\n\nexport interface SheetProps {\n\t/** Controls visibility; returns null when false. */\n\topen: boolean;\n\t/** Called when the user closes the sheet via Escape or backdrop click. */\n\tonClose: () => void;\n\t/** Which edge the panel slides in from.\n\t * @default \"right\"\n\t */\n\tside?: SheetSide;\n\t/** Heading rendered in the sheet header; auto-wired to `aria-labelledby`. */\n\ttitle?: ReactNode;\n\t/** Short description rendered above children; auto-wired to `aria-describedby`. */\n\tdescription?: string;\n\t/** Content for the footer slot (typically action buttons). */\n\tfooter?: ReactNode;\n\t/** Main body content of the sheet. */\n\tchildren: ReactNode;\n\t/** Whether clicking the backdrop calls `onClose`.\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\t/** Additional className applied to the sheet panel. */\n\tclassName?: string;\n\t/** Inline styles applied to the sheet panel. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Side-anchored drawer primitive (Wave 3, DS-35).\n *\n * Mirrors Modal architecture (DSPortal-mounted backdrop + panel; useFocusTrap;\n * explicit Escape document keydown; auto-generated aria-labelledby/describedby\n * via useId()) but slides in from the chosen edge instead of scaling in.\n *\n * Per D-332:\n * - 400px wide on desktop (≥640px)\n * - 100vw on mobile (<640px) via @media - no prop required\n * - side: 'right' (default) | 'left'; CSS keys off [data-side]\n *\n * Returns null when open=false. When open=true, portals a backdrop +\n * side-anchored panel to document.body. Backdrop click calls onClose iff\n * closeOnBackdropClick (default true). Click on panel itself does NOT close.\n *\n * useFocusTrap traps Tab inside the panel + restores focus on close.\n * Escape closes via a document keydown listener installed only while open\n * (Wave 0 useFocusTrap only handles Tab - we add Escape ourselves).\n */\nexport function Sheet({\n\topen,\n\tonClose,\n\tside = \"right\",\n\ttitle,\n\tdescription,\n\tfooter,\n\tchildren,\n\tcloseOnBackdropClick = true,\n\tclassName,\n\tstyle,\n}: SheetProps) {\n\tconst [panel, setPanel] = useState<HTMLDivElement | null>(null);\n\tconst generatedTitleId = useId();\n\tconst generatedDescId = useId();\n\tconst titleId = title ? generatedTitleId : undefined;\n\tconst descId = description ? generatedDescId : undefined;\n\t// Hoisted so biome's lint/a11y/useSemanticElements rule (which fires only on\n\t// static \"dialog\" literals) doesn't insist we swap to a native <dialog> - that\n\t// element doesn't honor non-modal backdrop click + DSPortal mounting.\n\tconst dialogRole = \"dialog\" as const;\n\n\t// Focus trap (Tab cycling + restore on close). Pass the live node (not a\n\t// RefObject) so the trap engages exactly when the portal commits the panel.\n\tuseFocusTrap(panel, open);\n\n\t// Escape closes (useFocusTrap from Wave 0 only handles Tab).\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [open, onClose]);\n\n\tif (!open) return null;\n\n\tconst isDark = document.documentElement.classList.contains(\"dark\");\n\n\tfunction handleBackdropClick(e: ReactMouseEvent<HTMLDivElement>) {\n\t\tif (e.target === e.currentTarget && closeOnBackdropClick) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tconst sheetEl = (\n\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: backdrop click is mouse-only UX; keyboard close via document Escape handler\n\t\t<div className=\"ds-atom-sheet-backdrop\" onClick={handleBackdropClick}>\n\t\t\t<div\n\t\t\t\tref={setPanel}\n\t\t\t\tclassName={[\"ds-atom-sheet\", className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-side={side}\n\t\t\t\trole={dialogRole}\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-labelledby={titleId}\n\t\t\t\taria-describedby={descId}\n\t\t\t\tstyle={style}\n\t\t\t\ttabIndex={-1}\n\t\t\t>\n\t\t\t\t<header id={titleId} className=\"ds-atom-sheet-hd\">\n\t\t\t\t\t<span className=\"ds-atom-sheet-hd-title\">{title}</span>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\tstyle={{ marginLeft: \"auto\", flexShrink: 0 }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X size={16} />\n\t\t\t\t\t</Button>\n\t\t\t\t</header>\n\t\t\t\t<div className=\"ds-atom-sheet-body\">\n\t\t\t\t\t{description ? <div id={descId}>{description}</div> : null}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t{footer ? <footer className=\"ds-atom-sheet-ft\">{footer}</footer> : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\treturn <DSPortal>{isDark ? <div className=\"dark\">{sheetEl}</div> : sheetEl}</DSPortal>;\n}\n","import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { smartAnchorPos } from \"../../_internals/floatingPos\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\nexport type HoverCardPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport interface HoverCardProps {\n\t/** Ref attached to the trigger element; HoverCard installs mouse/click listeners on it directly. */\n\tanchorRef: RefObject<HTMLElement | null>;\n\t/** Rich card content - arbitrary ReactNode such as avatars, charts, or action buttons. */\n\tchildren: ReactNode;\n\t/** Panel placement relative to the anchor.\n\t * @default \"bottom-start\"\n\t */\n\tplacement?: HoverCardPlacement;\n\t/** Gap in pixels between the anchor edge and the panel.\n\t * @default 8\n\t */\n\toffset?: number;\n\t/** Milliseconds to wait after mouseenter before opening; filters accidental cursor pass-throughs.\n\t * @default 300\n\t */\n\topenDelay?: number;\n\t/** Milliseconds to wait after mouseleave before closing; gives the cursor time to move into the card.\n\t * @default 150\n\t */\n\tcloseDelay?: number;\n\t/** Additional className applied to the panel root element. */\n\tclassName?: string;\n}\n\ninterface Position {\n\ttop: number;\n\tleft: number;\n}\n\n/**\n * HoverCard - rich-content popover-on-hover with click-to-pin (DS-38, D-355).\n *\n * Behavior:\n * - mouseenter on anchor → openDelay timer → render via DSPortal\n * - mouseleave on anchor OR panel → closeDelay timer → unmount\n * - panel mouseenter cancels pending close (cursor-into-card grace window)\n * - click on anchor pins the card open; mouseleave is ignored while pinned\n * - click outside both anchor + panel (via useClickOutside) unpins + closes\n * - non-modal: NO focus trap; Tab from anchor moves into panel children naturally\n *\n * Position is computed once at the moment of `setOpen(true)` from\n * `anchorRef.current.getBoundingClientRect()`. Scrolling-while-open is NOT\n * tracked in v0.2 (acceptable for a hover preview that closes when cursor\n * leaves anyway). v0.3 may add a ResizeObserver/scroll listener.\n */\nexport function HoverCard({\n\tanchorRef,\n\tchildren,\n\tplacement = \"bottom-start\",\n\toffset = 8,\n\topenDelay = 300,\n\tcloseDelay = 150,\n\tclassName,\n}: HoverCardProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst [pinned, setPinned] = useState(false);\n\tconst [position, setPosition] = useState<Position | null>(null);\n\t// Callback-ref so we know panel dimensions for smartAnchorPos\n\tconst [panelEl, setPanelEl] = useState<HTMLDialogElement | null>(null);\n\tconst panelRef = useRef<HTMLDialogElement | null>(null);\n\tconst setPanelRef = (node: HTMLDialogElement | null) => {\n\t\tpanelRef.current = node;\n\t\tsetPanelEl(node);\n\t};\n\tconst openTimerRef = useRef<number | null>(null);\n\tconst closeTimerRef = useRef<number | null>(null);\n\n\tconst clearOpenTimer = useCallback(() => {\n\t\tif (openTimerRef.current !== null) {\n\t\t\twindow.clearTimeout(openTimerRef.current);\n\t\t\topenTimerRef.current = null;\n\t\t}\n\t}, []);\n\tconst clearCloseTimer = useCallback(() => {\n\t\tif (closeTimerRef.current !== null) {\n\t\t\twindow.clearTimeout(closeTimerRef.current);\n\t\t\tcloseTimerRef.current = null;\n\t\t}\n\t}, []);\n\n\t// Compute position via smartAnchorPos after panel mounts - gives us real panel rect.\n\tuseLayoutEffect(() => {\n\t\tif (!open || !panelEl || !anchorRef.current) return;\n\t\tconst a = anchorRef.current.getBoundingClientRect();\n\t\tconst p = panelEl.getBoundingClientRect();\n\t\tconst side = placement.startsWith(\"top\") ? \"top\" : \"bottom\";\n\t\tconst align = placement.endsWith(\"end\") ? \"end\" : \"start\";\n\t\tconst { top, left } = smartAnchorPos(\n\t\t\ta,\n\t\t\t{ width: p.width, height: p.height },\n\t\t\tside,\n\t\t\talign,\n\t\t\toffset,\n\t\t);\n\t\tsetPosition({ top, left });\n\t}, [open, panelEl, anchorRef, placement, offset]);\n\n\tuseEffect(() => {\n\t\tconst anchor = anchorRef.current;\n\t\tif (!anchor) return;\n\n\t\tfunction scheduleOpen() {\n\t\t\tclearCloseTimer();\n\t\t\tif (openTimerRef.current !== null) return;\n\t\t\topenTimerRef.current = window.setTimeout(() => {\n\t\t\t\topenTimerRef.current = null;\n\t\t\t\tsetOpen(true);\n\t\t\t}, openDelay);\n\t\t}\n\t\tfunction scheduleClose() {\n\t\t\tif (pinned) return;\n\t\t\tclearOpenTimer();\n\t\t\tif (closeTimerRef.current !== null) return;\n\t\t\tcloseTimerRef.current = window.setTimeout(() => {\n\t\t\t\tcloseTimerRef.current = null;\n\t\t\t\tsetOpen(false);\n\t\t\t\tsetPosition(null);\n\t\t\t}, closeDelay);\n\t\t}\n\t\tfunction openNow() {\n\t\t\tclearOpenTimer();\n\t\t\tclearCloseTimer();\n\t\t\tsetOpen(true);\n\t\t}\n\n\t\tfunction handleEnter() {\n\t\t\tscheduleOpen();\n\t\t}\n\t\tfunction handleLeave() {\n\t\t\tscheduleClose();\n\t\t}\n\t\tfunction handleClick() {\n\t\t\tif (pinned) {\n\t\t\t\tsetPinned(false);\n\t\t\t\tscheduleClose();\n\t\t\t} else {\n\t\t\t\tsetPinned(true);\n\t\t\t\topenNow();\n\t\t\t}\n\t\t}\n\n\t\tanchor.addEventListener(\"mouseenter\", handleEnter);\n\t\tanchor.addEventListener(\"mouseleave\", handleLeave);\n\t\tanchor.addEventListener(\"click\", handleClick);\n\t\treturn () => {\n\t\t\tanchor.removeEventListener(\"mouseenter\", handleEnter);\n\t\t\tanchor.removeEventListener(\"mouseleave\", handleLeave);\n\t\t\tanchor.removeEventListener(\"click\", handleClick);\n\t\t};\n\t}, [anchorRef, pinned, openDelay, closeDelay, clearOpenTimer, clearCloseTimer]);\n\n\t// Cleanup any pending timers on full unmount.\n\tuseEffect(\n\t\t() => () => {\n\t\t\tclearOpenTimer();\n\t\t\tclearCloseTimer();\n\t\t},\n\t\t[clearOpenTimer, clearCloseTimer],\n\t);\n\n\tuseClickOutside(\n\t\tpanelRef,\n\t\t(e) => {\n\t\t\tif (anchorRef.current?.contains(e.target as Node)) return;\n\t\t\tsetPinned(false);\n\t\t\tsetOpen(false);\n\t\t\tclearOpenTimer();\n\t\t\tclearCloseTimer();\n\t\t},\n\t\topen,\n\t);\n\n\tif (!open) return null;\n\n\t// Hide until smartAnchorPos has computed a real position.\n\tconst style: CSSProperties = {\n\t\ttop: position?.top ?? -9999,\n\t\tleft: position?.left ?? -9999,\n\t\tvisibility: position ? \"visible\" : \"hidden\",\n\t};\n\n\tfunction onPanelEnter() {\n\t\tclearCloseTimer();\n\t}\n\tfunction onPanelLeave() {\n\t\tif (pinned) return;\n\t\tclearOpenTimer();\n\t\tif (closeTimerRef.current !== null) return;\n\t\tcloseTimerRef.current = window.setTimeout(() => {\n\t\t\tcloseTimerRef.current = null;\n\t\t\tsetOpen(false);\n\t\t}, closeDelay);\n\t}\n\n\tconst isDark =\n\t\tanchorRef.current?.closest(\".dark\") != null ||\n\t\tdocument.documentElement.classList.contains(\"dark\");\n\n\tconst cardEl = (\n\t\t<dialog\n\t\t\tref={setPanelRef}\n\t\t\topen\n\t\t\tclassName={[\"ds-atom-hovercard\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-placement={placement}\n\t\t\tdata-pinned={pinned ? \"true\" : \"false\"}\n\t\t\tstyle={style}\n\t\t\tonMouseEnter={onPanelEnter}\n\t\t\tonMouseLeave={onPanelLeave}\n\t\t>\n\t\t\t{children}\n\t\t</dialog>\n\t);\n\n\treturn <DSPortal>{isDark ? <div className=\"dark\">{cardEl}</div> : cardEl}</DSPortal>;\n}\n","import {\n\ttype CSSProperties,\n\ttype MouseEvent as ReactMouseEvent,\n\ttype ReactNode,\n\ttype PointerEvent as ReactPointerEvent,\n\tuseEffect,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { useFocusTrap } from \"../../hooks/useFocusTrap\";\nexport type BottomSheetHeight = \"half\" | \"full\";\n\nexport interface BottomSheetProps {\n\topen: boolean;\n\tonClose: () => void;\n\ttitle?: ReactNode;\n\tfooter?: ReactNode;\n\tchildren: ReactNode;\n\theight?: BottomSheetHeight;\n\tcloseOnBackdropClick?: boolean;\n\t/**\n\t * Force dark-mode rendering of the sheet panel independent of the page theme.\n\t * Useful when the trigger lives inside a `.dark` scoped container (e.g. Storybook Docs dark story).\n\t * Defaults to detecting `html.dark` (Canvas dark mode toggle).\n\t */\n\tdark?: boolean;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\n/**\n * Bottom-anchored drawer primitive (Wave 3, DS-36).\n *\n * Mobile-style sheet that slides up from the bottom edge. Mirrors Sheet\n * (DS-35) architecture - DSPortal-mounted backdrop + panel, useFocusTrap\n * for Tab cycling + focus restore, document Escape keydown - but its\n * geometry is bottom-anchored with top-rounded corners and a purely-visual\n * drag-handle indicator at the top.\n *\n * Per D-340 (with v0.5.1 swipe-to-close upgrade):\n * - Two height variants: 'half' (default, max-height 60vh) and 'full'\n * (height 100vh, no top corners) - switched via [data-height] +\n * sibling-CSS selectors (Phase 12 D-130 pattern).\n * - Drag handle (.ds-atom-bottomsheet-handle, 32x4 ink-5 pill) supports\n * swipe-to-close via Pointer Events (v0.5.1 patch - resolves D-340 v2.1\n * deferral). pointerdown captures the pointer; pointermove translates\n * the panel by positive Y delta only (drag-down); pointerup closes if\n * delta > 120px OR > 40% of panel height, else snaps back via CSS\n * transition. data-dragging=\"true\" disables the transition during drag\n * so the panel follows the finger directly.\n * - role=\"dialog\" + aria-modal=\"true\"; aria-labelledby auto-wired via\n * useId() when a title is provided.\n * - closeOnBackdropClick defaults to true; pass false for destructive\n * confirm flows that require explicit Cancel.\n *\n * DSPortal (D-310) gates its children on a mount-tick for SSR safety, so\n * panelRef is null on the initial render. Tracking a local mount flag and\n * feeding it into useFocusTrap's `active` arg ensures the trap re-runs\n * once the portal commits the panel into the DOM.\n */\nexport function BottomSheet({\n\topen,\n\tonClose,\n\ttitle,\n\tfooter,\n\tchildren,\n\theight = \"half\",\n\tcloseOnBackdropClick = true,\n\tdark,\n\tclassName,\n\tstyle,\n}: BottomSheetProps) {\n\t// Callback-ref pattern: panel state flips from null to the DOM node when\n\t// the portal commits. Passing the node (not a RefObject) into useFocusTrap\n\t// guarantees the trap engages exactly when the panel attaches.\n\tconst [panelNode, setPanelNode] = useState<HTMLDivElement | null>(null);\n\tconst generatedTitleId = useId();\n\tconst titleId = title ? generatedTitleId : undefined;\n\t// Hoisted constant so biome's lint/a11y/useSemanticElements rule (which\n\t// fires only on static \"dialog\" literals) doesn't insist we swap to a\n\t// native <dialog> - that element doesn't honor non-modal backdrop click\n\t// + DSPortal mounting.\n\tconst dialogRole = \"dialog\" as const;\n\n\tuseFocusTrap(panelNode, open);\n\n\t// Swipe-to-close gesture (v0.5.1 patch). Tracks pointerdown Y and current\n\t// translateY delta; on pointerup, closes if delta exceeds threshold else\n\t// snaps back. Pointer Events handle touch + mouse uniformly.\n\tconst dragStateRef = useRef<{ startY: number; pointerId: number; panelH: number } | null>(null);\n\tconst [dragOffset, setDragOffset] = useState(0);\n\tconst [dragging, setDragging] = useState(false);\n\n\tfunction handleHandlePointerDown(e: ReactPointerEvent<HTMLDivElement>) {\n\t\tif (!panelNode) return;\n\t\tdragStateRef.current = {\n\t\t\tstartY: e.clientY,\n\t\t\tpointerId: e.pointerId,\n\t\t\tpanelH: panelNode.getBoundingClientRect().height,\n\t\t};\n\t\tsetDragging(true);\n\t\ttry {\n\t\t\t(e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\t\t} catch {\n\t\t\t// jsdom test envs and some older browsers may throw; safe to ignore.\n\t\t}\n\t}\n\n\tfunction handleHandlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n\t\tconst s = dragStateRef.current;\n\t\tif (!s || s.pointerId !== e.pointerId) return;\n\t\tconst delta = Math.max(0, e.clientY - s.startY);\n\t\tsetDragOffset(delta);\n\t}\n\n\tfunction handleHandlePointerUp(e: ReactPointerEvent<HTMLDivElement>) {\n\t\tconst s = dragStateRef.current;\n\t\tif (!s || s.pointerId !== e.pointerId) return;\n\t\tconst delta = Math.max(0, e.clientY - s.startY);\n\t\tconst threshold = Math.min(120, s.panelH * 0.4);\n\t\ttry {\n\t\t\t(e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\n\t\t} catch {\n\t\t\t// pointer may already be released; ignore\n\t\t}\n\t\tdragStateRef.current = null;\n\t\tsetDragging(false);\n\t\tif (delta > threshold) {\n\t\t\tsetDragOffset(0);\n\t\t\tonClose();\n\t\t} else {\n\t\t\tsetDragOffset(0);\n\t\t}\n\t}\n\n\t// Escape closes (useFocusTrap from Wave 0 only handles Tab).\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") onClose();\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [open, onClose]);\n\n\tif (!open) return null;\n\n\t// dark prop wins; fall back to <html class=\"dark\"> for Canvas dark mode.\n\tconst isDark = dark ?? document.documentElement.classList.contains(\"dark\");\n\n\tfunction handleBackdropClick(e: ReactMouseEvent<HTMLDivElement>) {\n\t\tif (e.target === e.currentTarget && closeOnBackdropClick) {\n\t\t\tonClose();\n\t\t}\n\t}\n\n\tconst sheetEl = (\n\t\t<>\n\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: backdrop click is mouse-only UX; keyboard close is via the document Escape handler on `document` */}\n\t\t\t<div\n\t\t\t\tclassName=\"ds-atom-bottomsheet-backdrop\"\n\t\t\t\tdata-testid=\"bottomsheet-backdrop\"\n\t\t\t\tonClick={handleBackdropClick}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tref={setPanelNode}\n\t\t\t\t\tclassName={[\"ds-atom-bottomsheet\", className].filter(Boolean).join(\" \")}\n\t\t\t\t\tdata-height={height}\n\t\t\t\t\tdata-dragging={dragging ? \"true\" : undefined}\n\t\t\t\t\trole={dialogRole}\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\ttransform: dragOffset > 0 ? `translateY(${dragOffset}px)` : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"ds-atom-bottomsheet-handle\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tonPointerDown={handleHandlePointerDown}\n\t\t\t\t\t\tonPointerMove={handleHandlePointerMove}\n\t\t\t\t\t\tonPointerUp={handleHandlePointerUp}\n\t\t\t\t\t\tonPointerCancel={handleHandlePointerUp}\n\t\t\t\t\t/>\n\t\t\t\t\t{title ? (\n\t\t\t\t\t\t<header id={titleId} className=\"ds-atom-bottomsheet-hd\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</header>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<div className=\"ds-atom-bottomsheet-body\">{children}</div>\n\t\t\t\t\t{footer ? <footer className=\"ds-atom-bottomsheet-ft\">{footer}</footer> : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</>\n\t);\n\n\treturn <DSPortal>{isDark ? <div className=\"dark\">{sheetEl}</div> : sheetEl}</DSPortal>;\n}\n","import { type ReactNode, useEffect, useRef } from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { ChevronLeft, ChevronRight, X } from \"../../icons\";\nexport interface LightboxItem {\n\tsrc: string;\n\talt: string;\n\tcaption?: ReactNode;\n}\n\nexport interface LightboxProps {\n\t/** Controls visibility; component returns null when false. */\n\topen: boolean;\n\t/** Called when the user clicks the close button or presses Escape. */\n\tonClose: () => void;\n\t/** Ordered array of images to display; must be non-empty when open. */\n\titems: LightboxItem[];\n\t/** Controlled index of the currently displayed image.\n\t * @default 0\n\t */\n\tactiveIndex?: number;\n\t/** Called when the user navigates to a different image with the new index. */\n\tonIndexChange?: (index: number) => void;\n}\n\n/**\n * Lightbox - full-bleed media-display overlay where the image IS the surface.\n * D-350: heavier backdrop rgba(0,0,0,.92), arrow-key navigation with wrap-\n * around, always-dark invariant (NO :root.dark overrides). Modal-adjacent\n * architecture (DSPortal-mounted, Escape-to-close, initial focus on close).\n *\n * Controlled pattern: caller manages activeIndex + onIndexChange. Lightbox\n * holds no state itself - pairs cleanly with gallery thumbnail-strip selection.\n *\n * <Lightbox\n * open={open}\n * onClose={() => setOpen(false)}\n * items={[{ src: \"/a.jpg\", alt: \"Resume\" }]}\n * activeIndex={0}\n * />\n *\n * a11y: role=\"dialog\" + aria-modal + aria-label includes active item.alt;\n * close button gets initial focus (image is non-focusable); ArrowLeft/Right\n * + Escape via global document keydown listener (no useFocusTrap - only 3\n * focusable elements).\n */\nexport function Lightbox({ open, onClose, items, activeIndex = 0, onIndexChange }: LightboxProps) {\n\tconst closeButtonRef = useRef<HTMLButtonElement>(null);\n\tconst length = items.length;\n\tconst current = items[activeIndex];\n\tconst showNav = length > 1;\n\n\tfunction goPrev() {\n\t\tif (!showNav) return;\n\t\tonIndexChange?.((activeIndex - 1 + length) % length);\n\t}\n\n\tfunction goNext() {\n\t\tif (!showNav) return;\n\t\tonIndexChange?.((activeIndex + 1) % length);\n\t}\n\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tcloseButtonRef.current?.focus();\n\n\t\tfunction onKeyDown(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClose();\n\t\t\t} else if (e.key === \"ArrowLeft\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (length <= 1) return;\n\t\t\t\tonIndexChange?.((activeIndex - 1 + length) % length);\n\t\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (length <= 1) return;\n\t\t\t\tonIndexChange?.((activeIndex + 1) % length);\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"keydown\", onKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", onKeyDown);\n\t}, [open, activeIndex, length, onClose, onIndexChange]);\n\n\tif (!open || !current) return null;\n\n\tconst dialogLabel = `Image lightbox: ${current.alt}`;\n\n\treturn (\n\t\t<DSPortal>\n\t\t\t<div\n\t\t\t\tclassName=\"ds-atom-lightbox-backdrop\"\n\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: role=\"dialog\" + aria-modal is the standard ARIA pattern; native <dialog> behavior conflicts with custom DSPortal mounting + arrow-key navigation\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-label={dialogLabel}\n\t\t\t\taria-modal=\"true\"\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\tref={closeButtonRef}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-lightbox-close\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t\taria-label=\"Close lightbox\"\n\t\t\t\t>\n\t\t\t\t\t<X size={20} aria-hidden=\"true\" />\n\t\t\t\t</button>\n\n\t\t\t\t{showNav ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"ds-atom-lightbox-prev\"\n\t\t\t\t\t\tonClick={goPrev}\n\t\t\t\t\t\taria-label=\"Previous image\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft size={20} aria-hidden=\"true\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\n\t\t\t\t<img className=\"ds-atom-lightbox-image\" src={current.src} alt={current.alt} />\n\t\t\t\t{current.caption ? <div className=\"ds-atom-lightbox-caption\">{current.caption}</div> : null}\n\n\t\t\t\t{showNav ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"ds-atom-lightbox-next\"\n\t\t\t\t\t\tonClick={goNext}\n\t\t\t\t\t\taria-label=\"Next image\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight size={20} aria-hidden=\"true\" />\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</DSPortal>\n\t);\n}\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nexport interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Current progress value; clamped to [0, max] internally.\n\t * @default 0\n\t */\n\tvalue?: number;\n\t/** Maximum value used to compute the fill percentage.\n\t * @default 100\n\t */\n\tmax?: number;\n\t/** When true, renders an animated 3-dot pulse instead of a determinate fill bar.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/** Accessible label; string values also render visually above the bar. */\n\tlabel?: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tboxSizing: \"border-box\",\n\tdisplay: \"block\",\n\twidth: \"100%\",\n\tfontFamily: \"var(--font)\",\n};\n\n/**\n * ProgressBar - determinate progress indicator + loading variant (DS-42).\n *\n * <ProgressBar value={50} /> // determinate, 50%\n * <ProgressBar value={3} max={10} label=\"Upload\" /> // 3 of 10 (30%)\n * <ProgressBar loading /> // 3-dot pulse\n *\n * Determinate: track + solid amber fill (var(--amber)); fill width transitions\n * over 500ms ease-out. role=\"progressbar\"\n * with aria-valuenow / aria-valuemin / aria-valuemax wired.\n *\n * Loading: 3-dot pulse animation (handoff visual). role=\"status\"; aria-live=\"polite\";\n * defaults aria-label to \"Loading\" if no `label` passed.\n *\n * Value clamped to [0, max] internally so callers can pass anything.\n */\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(function ProgressBar(\n\t{ value = 0, max = 100, loading = false, label, className, style, ...rest },\n\tref,\n) {\n\tconst safeMax = max <= 0 ? 100 : max;\n\tconst clamped = Math.max(0, Math.min(safeMax, value));\n\tconst pct = (clamped / safeMax) * 100;\n\n\tif (loading) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-progress${className ? ` ${className}` : \"\"}`}\n\t\t\t\tdata-loading=\"true\"\n\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: native <output> is for form result values bound to inputs; ARIA \"status\" role on a <div> is the standard live-region pattern for indeterminate loading announcements\n\t\t\t\trole=\"status\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\taria-label={typeof label === \"string\" ? label : \"Loading\"}\n\t\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<span className=\"ds-atom-progress-dots\" aria-hidden=\"true\">\n\t\t\t\t\t<span className=\"ds-atom-progress-dot\" />\n\t\t\t\t\t<span className=\"ds-atom-progress-dot\" />\n\t\t\t\t\t<span className=\"ds-atom-progress-dot\" />\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useFocusableInteractive: progressbar is a live region (not an interactive control) per ARIA APG; aria-valuenow updates are announced without needing keyboard focus, and a tab-stop on a non-interactive bar would harm keyboard UX\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-progress${className ? ` ${className}` : \"\"}`}\n\t\t\trole=\"progressbar\"\n\t\t\taria-valuenow={clamped}\n\t\t\taria-valuemin={0}\n\t\t\taria-valuemax={safeMax}\n\t\t\taria-label={typeof label === \"string\" ? label : \"Progress\"}\n\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"ds-atom-progress-track\">\n\t\t\t\t<div className=\"ds-atom-progress-fill\" style={{ width: `${pct}%` }} />\n\t\t\t</div>\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, forwardRef } from \"react\";\n\nexport type SkeletonShape = \"text\" | \"circle\" | \"pill\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n\t/** Shape of the skeleton placeholder.\n\t * - `text` - full-width line at `1.2em` height (default).\n\t * - `circle` - disc sized to `width`; use for avatar placeholders.\n\t * - `pill` - rounded badge/chip-sized shape at `1.5em` height.\n\t * @default \"text\"\n\t */\n\tshape?: SkeletonShape;\n\t/** Width of the skeleton; accepts any CSS length or a pixel number.\n\t * @default \"100%\"\n\t */\n\twidth?: number | string;\n\t/** Height override; defaults are shape-aware (text → 1.2em, circle → width, pill → 1.5em). */\n\theight?: number | string;\n}\n\n/**\n * Resolve the shape-aware default height when the consumer omits `height`.\n *\n * - text → \"1.2em\" (matches surrounding line-height; consumer doesn't\n * need to compute pixel heights for inline placeholders)\n * - pill → \"1.5em\" (badge/chip-sized)\n * - circle → falls back to `width` so the resulting square renders as\n * a true circle (e.g., `<Skeleton shape=\"circle\" width={40} />`\n * yields a 40×40 disc)\n */\nfunction shapeDefaultHeight(\n\tshape: SkeletonShape,\n\twidth: number | string | undefined,\n): string | number | undefined {\n\tif (shape === \"text\") return \"1.2em\";\n\tif (shape === \"pill\") return \"1.5em\";\n\t// circle: mirror width only when it's a pixel number; percentage widths\n\t// cannot be mirrored to height without an explicit parent height, so fall\n\t// back to a sensible avatar-sized default (48px).\n\treturn typeof width === \"number\" ? width : 48;\n}\n\n/**\n * Skeleton - placeholder shape for loading states (DS-43, D-420).\n *\n * <Skeleton /> // default text line, full width\n * <Skeleton width={120} /> // 120px text line\n * <Skeleton shape=\"circle\" width={40} /> // 40x40 circle (avatar placeholder)\n * <Skeleton shape=\"pill\" width={80} /> // pill (badge / chip placeholder)\n *\n * Single primitive with `shape` prop instead of three separate primitives -\n * keeps barrel small (D-420). Compose multi-line / avatar+name / card\n * placeholders by rendering MULTIPLE Skeletons inside a consumer-controlled\n * flex/grid container - the primitive itself renders ONE node only.\n *\n * Visual: cream-2 background with pulse animation (opacity 0.6 ↔ 1 at\n * 1.2s ease-in-out infinite). Dark mode: rgba(255,255,255,0.06).\n *\n * `aria-hidden=\"true\"` is hard-coded - Skeleton is decorative. Consumers\n * wrap the surrounding region with their own `aria-busy={loading}` or\n * similar to communicate the loading state to assistive tech.\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n\t{ shape = \"text\", width = \"100%\", height, className, style, ...rest },\n\tref,\n) {\n\tconst resolvedHeight = height ?? shapeDefaultHeight(shape, width);\n\n\tconst mergedStyle: CSSProperties = { width, height: resolvedHeight, ...style };\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-skeleton${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-shape={shape}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={mergedStyle}\n\t\t\t{...rest}\n\t\t/>\n\t);\n});\n\nSkeleton.displayName = \"Skeleton\";\n","import { type ReactNode, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\nimport { Button } from \"../../inputs/Button\";\n/** Props injected into the trigger element by InlineConfirm. */\nexport interface InlineConfirmTriggerProps {\n\t/** Wires the trigger into InlineConfirm's state machine. Spread onto your button. */\n\tonClick: () => void;\n}\n\nexport interface InlineConfirmProps {\n\t/**\n\t * Render-prop returning the trigger element (button, icon-button, etc.).\n\t * Spread the provided `triggerProps` onto your element to wire the click handler.\n\t *\n\t * @example\n\t * trigger={(p) => <Button variant=\"danger\" {...p}>Delete</Button>}\n\t */\n\ttrigger: (triggerProps: InlineConfirmTriggerProps) => ReactNode;\n\t/** Called when the user clicks the confirm button. */\n\tonConfirm: () => void;\n\t/** Called when the user cancels - via No button, Escape, click-outside, or auto-cancel timeout. */\n\tonCancel?: () => void;\n\t/**\n\t * Label for the confirm button.\n\t * @default \"Yes\"\n\t */\n\tconfirmLabel?: string;\n\t/**\n\t * Label for the cancel button.\n\t * @default \"No\"\n\t */\n\tcancelLabel?: string;\n\t/**\n\t * Variant for the confirm button. Use `\"danger\"` for destructive actions and\n\t * `\"primary\"` for non-destructive confirms (e.g. Send, Submit).\n\t * @default \"danger\"\n\t */\n\tconfirmVariant?: \"danger\" | \"primary\";\n\t/**\n\t * Milliseconds before the prompt auto-cancels. Hover or focus inside the\n\t * prompt row pauses the timer. Pass `Infinity` to disable auto-cancel.\n\t * @default 4000\n\t */\n\tautoCancelMs?: number;\n\t/**\n\t * Text shown between the trigger state and the confirm/cancel buttons.\n\t * @default \"Are you sure?\"\n\t */\n\tpromptText?: ReactNode;\n}\n\nconst DEFAULT_AUTO_CANCEL_MS = 4000;\n\n/**\n * InlineConfirm - render-prop trigger replacement for inline destructives (DS-45, D-430).\n *\n * <InlineConfirm\n * trigger={(p) => <Button variant=\"danger\" {...p}>Delete</Button>}\n * onConfirm={handleDelete}\n * promptText=\"Delete this application?\"\n * />\n *\n * Idle: renders the trigger function's returned element with `onClick` wired\n * to enter pending state. Pending: replaces trigger with inline-row\n * `[promptText] [No] [Yes]` in the same container - zero layout shift.\n *\n * 4s auto-cancel timer (configurable via `autoCancelMs`; pass Infinity to\n * disable). Mouse-enter prompt OR focus-within pauses timer; un-hover AND\n * blur resumes. Escape, click-outside, and explicit cancel-button click\n * all dismiss immediately.\n *\n * For HIGH-stakes destructives (delete account, mass-delete, irreversible)\n * use ConfirmDialog (Modal variant) instead - InlineConfirm is for LOW-stakes\n * inline confirms in dense lists (D-431).\n *\n * Uncontrolled - manages internal `pending` state. No ref forwarding (the\n * component switches between two different DOM trees).\n */\nexport function InlineConfirm({\n\ttrigger,\n\tonConfirm,\n\tonCancel,\n\tconfirmLabel = \"Yes\",\n\tcancelLabel = \"No\",\n\tconfirmVariant = \"danger\",\n\tautoCancelMs = DEFAULT_AUTO_CANCEL_MS,\n\tpromptText = \"Are you sure?\",\n}: InlineConfirmProps) {\n\tconst [pending, setPending] = useState(false);\n\tconst rowRef = useRef<HTMLDivElement>(null);\n\tconst timerRef = useRef<number | null>(null);\n\tconst startedAtRef = useRef<number>(0);\n\tconst remainingRef = useRef<number>(autoCancelMs);\n\tconst isHoveringRef = useRef(false);\n\tconst isFocusedRef = useRef(false);\n\n\tconst clearTimer = useCallback(() => {\n\t\tif (timerRef.current !== null) {\n\t\t\twindow.clearTimeout(timerRef.current);\n\t\t\ttimerRef.current = null;\n\t\t}\n\t}, []);\n\n\tconst cancel = useCallback(() => {\n\t\tclearTimer();\n\t\tsetPending(false);\n\t\tonCancel?.();\n\t}, [clearTimer, onCancel]);\n\n\tconst startTimer = useCallback(\n\t\t(ms: number) => {\n\t\t\tif (!Number.isFinite(ms)) return; // Infinity disables\n\t\t\tclearTimer();\n\t\t\tstartedAtRef.current = Date.now();\n\t\t\tremainingRef.current = ms;\n\t\t\ttimerRef.current = window.setTimeout(() => {\n\t\t\t\ttimerRef.current = null;\n\t\t\t\tsetPending(false);\n\t\t\t\tonCancel?.();\n\t\t\t}, ms);\n\t\t},\n\t\t[clearTimer, onCancel],\n\t);\n\n\tconst pauseTimer = useCallback(() => {\n\t\tif (timerRef.current === null) return;\n\t\tconst elapsed = Date.now() - startedAtRef.current;\n\t\tremainingRef.current = Math.max(0, remainingRef.current - elapsed);\n\t\tclearTimer();\n\t}, [clearTimer]);\n\n\tconst resumeTimerIfIdle = useCallback(() => {\n\t\tif (!pending) return;\n\t\tif (isHoveringRef.current || isFocusedRef.current) return;\n\t\tif (timerRef.current !== null) return;\n\t\tif (!Number.isFinite(autoCancelMs)) return;\n\t\tstartTimer(remainingRef.current);\n\t}, [pending, autoCancelMs, startTimer]);\n\n\tconst beginPending = useCallback(() => {\n\t\tsetPending(true);\n\t\tremainingRef.current = autoCancelMs;\n\t\tstartTimer(autoCancelMs);\n\t}, [autoCancelMs, startTimer]);\n\n\tconst handleConfirm = useCallback(() => {\n\t\tclearTimer();\n\t\tsetPending(false);\n\t\tonConfirm();\n\t}, [clearTimer, onConfirm]);\n\n\t// Escape key handler - only active when pending\n\tuseEffect(() => {\n\t\tif (!pending) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\tcancel();\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [pending, cancel]);\n\n\t// Click-outside dismissal - uses the canonical useClickOutside hook\n\t// (Popover line 95 pattern). Third arg `pending` gates the listener so\n\t// it only fires while the prompt is visible.\n\tuseClickOutside(rowRef, () => cancel(), pending);\n\n\t// Cleanup on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tclearTimer();\n\t\t};\n\t}, [clearTimer]);\n\n\tif (!pending) {\n\t\treturn <>{trigger({ onClick: beginPending })}</>;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={rowRef}\n\t\t\tclassName=\"ds-atom-confirm\"\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: <fieldset> implies a form-grouping semantic we don't want for a transient confirm prompt\n\t\t\trole=\"group\"\n\t\t\taria-label={typeof promptText === \"string\" ? promptText : \"Confirm action\"}\n\t\t\tonMouseEnter={() => {\n\t\t\t\tisHoveringRef.current = true;\n\t\t\t\tpauseTimer();\n\t\t\t}}\n\t\t\tonMouseLeave={() => {\n\t\t\t\tisHoveringRef.current = false;\n\t\t\t\tresumeTimerIfIdle();\n\t\t\t}}\n\t\t\tonFocus={() => {\n\t\t\t\tisFocusedRef.current = true;\n\t\t\t\tpauseTimer();\n\t\t\t}}\n\t\t\tonBlur={(e) => {\n\t\t\t\t// blur fires when focus moves to a child too - only treat focus as lost when\n\t\t\t\t// the new focus is OUTSIDE the row (relatedTarget is null OR not in row)\n\t\t\t\tconst next = e.relatedTarget as Node | null;\n\t\t\t\tif (!next || !rowRef.current?.contains(next)) {\n\t\t\t\t\tisFocusedRef.current = false;\n\t\t\t\t\tresumeTimerIfIdle();\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<span className=\"ds-atom-confirm-text\">{promptText}</span>\n\t\t\t<Button size=\"xs\" variant=\"ghost\" onClick={cancel}>\n\t\t\t\t{cancelLabel}\n\t\t\t</Button>\n\t\t\t<Button size=\"xs\" variant={confirmVariant} onClick={handleConfirm}>\n\t\t\t\t{confirmLabel}\n\t\t\t</Button>\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from \"../../icons\";\nexport type AlertBannerTone = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport interface AlertBannerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n\t/** Controls visibility; component returns null when false. Caller manages open state. */\n\topen: boolean;\n\t/** Callback when the dismiss X button is clicked; also enables the X button by default. */\n\tonDismiss?: () => void;\n\t/** Visual tone variant for the banner background and icon.\n\t * @default \"info\"\n\t */\n\ttone?: AlertBannerTone;\n\t/** Required heading text rendered in bold. Accepts ReactNode for rich content. */\n\ttitle: ReactNode;\n\t/** Optional secondary body text beneath the title. */\n\tdescription?: ReactNode;\n\t/** Overrides `description` when present - use for advanced layouts with embedded buttons. */\n\tchildren?: ReactNode;\n\t/** Whether to show the dismiss X button. Defaults to `!!onDismiss`. Pass `false` to suppress it. */\n\tdismissible?: boolean;\n}\n\nconst TONE_ICON: Record<AlertBannerTone, ReactNode> = {\n\tinfo: <Info size={16} aria-hidden=\"true\" />,\n\tsuccess: <CheckCircle2 size={16} aria-hidden=\"true\" />,\n\twarning: <AlertTriangle size={16} aria-hidden=\"true\" />,\n\terror: <XCircle size={16} aria-hidden=\"true\" />,\n};\n\nconst baseStyle: CSSProperties = {\n\tboxSizing: \"border-box\",\n\tdisplay: \"flex\",\n};\n\n/**\n * AlertBanner - inline-flow controlled tone banner (D-410, D-411).\n *\n * <AlertBanner\n * open={showTrialBanner}\n * onDismiss={() => setShowTrialBanner(false)}\n * tone=\"warning\"\n * title=\"Trial ends in 3 days\"\n * description=\"Upgrade now to keep your data.\"\n * />\n *\n * <AlertBanner open tone=\"success\" title=\"Saved as draft\" /> // non-dismissible\n *\n * Controlled - caller manages `open`. Returns `null` when `open === false`.\n * NO auto-dismiss (different from Toast). For ephemeral feedback use Toast (DS-40).\n *\n * Layout: `[icon] [title + description-or-children] [dismiss-X-when-dismissible]`.\n * Tone via `data-variant` (Card pattern); CSS attribute selectors in primitives.css\n * apply tone-tinted bg + border + icon-color.\n *\n * `dismissible` defaults to `!!onDismiss` - passing `onDismiss` shows the X by default.\n * Force-hide with `dismissible={false}` (consumer wants to control close another way).\n */\nexport const AlertBanner = forwardRef<HTMLDivElement, AlertBannerProps>(function AlertBanner(\n\t{\n\t\topen,\n\t\tonDismiss,\n\t\ttone = \"info\",\n\t\ttitle,\n\t\tdescription,\n\t\tchildren,\n\t\tdismissible,\n\t\tclassName,\n\t\tstyle,\n\t\t...rest\n\t},\n\tref,\n) {\n\tif (!open) return null;\n\tconst showDismiss = dismissible ?? Boolean(onDismiss);\n\tconst body = children ?? description;\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-banner${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-variant={tone}\n\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<span className=\"ds-atom-banner-icon\" aria-hidden=\"true\">\n\t\t\t\t{TONE_ICON[tone]}\n\t\t\t</span>\n\t\t\t<div className=\"ds-atom-banner-body\">\n\t\t\t\t<div className=\"ds-atom-banner-title\">{title}</div>\n\t\t\t\t{body ? <div className=\"ds-atom-banner-desc\">{body}</div> : null}\n\t\t\t</div>\n\t\t\t{showDismiss ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"ds-atom-banner-close\"\n\t\t\t\t\taria-label=\"Dismiss\"\n\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t>\n\t\t\t\t\t<X size={14} aria-hidden=\"true\" />\n\t\t\t\t</button>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type HTMLAttributes, type ReactNode, forwardRef } from \"react\";\n\nexport interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n\t/**\n\t * Optional icon rendered above the title. Pass a lucide icon or any SVG at **40×40**.\n\t * Omit for minimal inline empty states where an icon would add visual noise.\n\t */\n\ticon?: ReactNode;\n\t/**\n\t * Primary heading. Required. Rendered in the display font at 600 weight.\n\t * Keep to one short sentence - \"No applications yet\", \"Nothing matched\".\n\t */\n\ttitle: ReactNode;\n\t/**\n\t * Secondary line below the title. Use to explain why the state occurred or\n\t * suggest the next action. Rendered in `--ink-3` (flips with dark mode).\n\t */\n\tdescription?: ReactNode;\n\t/**\n\t * CTA slot. Pass one or two `<Button>` elements (or any ReactNode).\n\t * Rendered as a flex row below the description.\n\t * Common patterns: single primary Button, primary + ghost pair.\n\t */\n\tchildren?: ReactNode;\n}\n\nconst baseStyle: CSSProperties = {\n\tboxSizing: \"border-box\",\n};\n\n/**\n * EmptyState - centered display for empty/no-data/first-run states (DS-44, D-421).\n *\n * <EmptyState\n * icon={<Inbox size={40} />}\n * title=\"No applications yet\"\n * description=\"Add your first job to get started.\"\n * >\n * <Button>Add application</Button>\n * </EmptyState>\n *\n * Centered vertical stack: icon → title → description → children-as-CTA.\n * Children slot accepts arbitrary JSX - single Button, primary+secondary\n * Buttons in a row, link, or any combination.\n *\n * NO compound API (no `<EmptyState.Icon>`, `<EmptyState.Action>`).\n * Structured props for icon/title/description; children for CTA actions.\n *\n * Padding `var(--space-8)` outer; gap `var(--space-3)` between stack\n * elements; max-width 360px on text content (consumer can override via\n * `style` or wrapping container width).\n *\n * `description` color uses `var(--ink-3)` token - flips with theme.\n */\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n\t{ icon, title, description, children, className, style, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={[\"ds-atom-empty\", className].filter(Boolean).join(\" \")}\n\t\t\tstyle={{ ...baseStyle, ...style }}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{icon ? (\n\t\t\t\t<div className=\"ds-atom-empty-icon\" aria-hidden=\"true\">\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className=\"ds-atom-empty-title\">{title}</div>\n\t\t\t{description ? <div className=\"ds-atom-empty-desc\">{description}</div> : null}\n\t\t\t{children ? <div className=\"ds-atom-empty-actions\">{children}</div> : null}\n\t\t</div>\n\t);\n});\n","import {\n\ttype ReactNode,\n\tcreateContext,\n\tuseCallback,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport { AlertTriangle, CheckCircle2, Info, X, XCircle } from \"../../icons\";\nexport type ToastTone = \"success\" | \"error\" | \"info\" | \"warning\";\n\nexport interface ToastOptions {\n\t/** Auto-dismiss after `duration` ms. Default 3000. Pass `Infinity` to disable auto-dismiss. */\n\tduration?: number;\n}\n\ninterface ToastEntry {\n\tid: number;\n\ttone: ToastTone;\n\tmessage: ReactNode;\n\tduration: number;\n\tdismissing: boolean;\n}\n\ninterface ToastApi {\n\tsuccess: (message: ReactNode, opts?: ToastOptions) => number;\n\terror: (message: ReactNode, opts?: ToastOptions) => number;\n\tinfo: (message: ReactNode, opts?: ToastOptions) => number;\n\twarning: (message: ReactNode, opts?: ToastOptions) => number;\n\tdismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastApi | null>(null);\n\nconst DEFAULT_DURATION = 3000;\nconst MAX_CONCURRENT = 3;\nconst SLIDE_OUT_MS = 200; // matches @keyframes ds-atom-toast-slideout\n\n/**\n * useToast - imperative toast API hook (D-400).\n *\n * Must be called inside a `<ToastProvider>`. Throws otherwise.\n *\n * const toast = useToast();\n * toast.success(\"Saved\");\n * toast.error(\"Failed\", { duration: 5000 });\n * toast.info(\"Heads up\");\n * toast.warning(\"Almost full\");\n * const id = toast.success(\"...\");\n * toast.dismiss(id);\n */\nexport function useToast(): ToastApi {\n\tconst ctx = useContext(ToastContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useToast must be used within a <ToastProvider>\");\n\t}\n\treturn ctx;\n}\n\nlet nextToastId = 0;\n\nexport interface ToastProviderProps {\n\tchildren: ReactNode;\n}\n\n/**\n * ToastProvider - context provider + DSPortal-mounted region (D-400, D-401).\n *\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n *\n * Mounts a fixed top-right region (z-1100) that renders only when ≥1 toast\n * is active. Max 3 concurrent toasts; 4th added → oldest FIFO drops.\n * Each toast auto-dismisses after `duration` ms (default 3000); pass\n * `duration: Infinity` to disable auto-dismiss.\n *\n * Callback-ref-as-state mounts the stack-container DOM as state (Tooltip\n * line 79 + Popover line 73 pattern). Animations start cleanly once DSPortal\n * commits the portaled node and React fires the callback ref.\n */\nexport function ToastProvider({ children }: ToastProviderProps) {\n\tconst [toasts, setToasts] = useState<ToastEntry[]>([]);\n\tconst dismissTimers = useRef<Map<number, number>>(new Map());\n\n\t// Callback-ref-as-state (Tooltip line 79 + Popover line 73 pattern). Tracks\n\t// the portaled stack-container DOM element as state. Any portal-dependent\n\t// effect lists `stackEl` in deps so it re-runs once DSPortal commits the\n\t// node. NOT the Modal mount-tick boolean flag - that pattern is wrong here.\n\tconst [, setStackEl] = useState<HTMLDivElement | null>(null);\n\n\t// Schedule full removal of a dismissing toast after slide-out animation.\n\tconst scheduleRemoval = useCallback((id: number) => {\n\t\twindow.setTimeout(() => {\n\t\t\tsetToasts((prev) => prev.filter((t) => t.id !== id));\n\t\t}, SLIDE_OUT_MS);\n\t}, []);\n\n\t// Mark a toast as dismissing (triggers slide-out CSS) and clean up auto-dismiss timer.\n\tconst startDismiss = useCallback(\n\t\t(id: number) => {\n\t\t\tconst timerId = dismissTimers.current.get(id);\n\t\t\tif (timerId !== undefined) {\n\t\t\t\twindow.clearTimeout(timerId);\n\t\t\t\tdismissTimers.current.delete(id);\n\t\t\t}\n\t\t\tsetToasts((prev) => {\n\t\t\t\tlet mutated = false;\n\t\t\t\tconst next = prev.map((t) => {\n\t\t\t\t\tif (t.id === id && !t.dismissing) {\n\t\t\t\t\t\tmutated = true;\n\t\t\t\t\t\treturn { ...t, dismissing: true };\n\t\t\t\t\t}\n\t\t\t\t\treturn t;\n\t\t\t\t});\n\t\t\t\treturn mutated ? next : prev;\n\t\t\t});\n\t\t\tscheduleRemoval(id);\n\t\t},\n\t\t[scheduleRemoval],\n\t);\n\n\tconst add = useCallback(\n\t\t(tone: ToastTone, message: ReactNode, opts?: ToastOptions): number => {\n\t\t\tconst id = ++nextToastId;\n\t\t\tconst duration = opts?.duration ?? DEFAULT_DURATION;\n\t\t\tsetToasts((prev) => {\n\t\t\t\tconst overflow = prev.length + 1 - MAX_CONCURRENT;\n\t\t\t\tlet next = prev;\n\t\t\t\tif (overflow > 0) {\n\t\t\t\t\t// FIFO drop: pick the OLDEST non-dismissing toast(s) and mark them dismissing.\n\t\t\t\t\tconst ids: number[] = [];\n\t\t\t\t\tfor (let i = 0; i < prev.length && ids.length < overflow; i++) {\n\t\t\t\t\t\tconst candidate = prev[i];\n\t\t\t\t\t\tif (candidate && !candidate.dismissing) ids.push(candidate.id);\n\t\t\t\t\t}\n\t\t\t\t\tnext = prev.map((t) => (ids.includes(t.id) ? { ...t, dismissing: true } : t));\n\t\t\t\t\tfor (const dropId of ids) scheduleRemoval(dropId);\n\t\t\t\t}\n\t\t\t\treturn [...next, { id, tone, message, duration, dismissing: false }];\n\t\t\t});\n\t\t\tif (Number.isFinite(duration)) {\n\t\t\t\tconst timerId = window.setTimeout(() => startDismiss(id), duration);\n\t\t\t\tdismissTimers.current.set(id, timerId);\n\t\t\t}\n\t\t\treturn id;\n\t\t},\n\t\t[scheduleRemoval, startDismiss],\n\t);\n\n\tconst api = useMemo<ToastApi>(\n\t\t() => ({\n\t\t\tsuccess: (message, opts) => add(\"success\", message, opts),\n\t\t\terror: (message, opts) => add(\"error\", message, opts),\n\t\t\tinfo: (message, opts) => add(\"info\", message, opts),\n\t\t\twarning: (message, opts) => add(\"warning\", message, opts),\n\t\t\tdismiss: (id) => startDismiss(id),\n\t\t}),\n\t\t[add, startDismiss],\n\t);\n\n\t// Cleanup all pending timers on unmount.\n\tuseEffect(() => {\n\t\tconst timers = dismissTimers.current;\n\t\treturn () => {\n\t\t\tfor (const timerId of timers.values()) window.clearTimeout(timerId);\n\t\t\ttimers.clear();\n\t\t};\n\t}, []);\n\n\t// Render the portal whenever there are active toasts. The callback ref\n\t// `setStackEl` will fire once DSPortal commits the inner div; downstream\n\t// effects (none required for Toast - no measurement) would gate on stackEl.\n\tconst showRegion = toasts.length > 0;\n\n\treturn (\n\t\t<ToastContext.Provider value={api}>\n\t\t\t{children}\n\t\t\t{showRegion ? (\n\t\t\t\t<DSPortal>\n\t\t\t\t\t<div ref={setStackEl} className=\"ds-atom-toast-region\" aria-label=\"Notifications\">\n\t\t\t\t\t\t{toasts.map((t) => (\n\t\t\t\t\t\t\t<ToastNode key={t.id} entry={t} onDismiss={() => startDismiss(t.id)} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</DSPortal>\n\t\t\t) : null}\n\t\t</ToastContext.Provider>\n\t);\n}\n\nconst TONE_ICON: Record<ToastTone, ReactNode> = {\n\tsuccess: <CheckCircle2 size={16} aria-hidden=\"true\" />,\n\terror: <XCircle size={16} aria-hidden=\"true\" />,\n\twarning: <AlertTriangle size={16} aria-hidden=\"true\" />,\n\tinfo: <Info size={16} aria-hidden=\"true\" />,\n};\n\ninterface ToastNodeProps {\n\tentry: ToastEntry;\n\tonDismiss: () => void;\n}\n\nfunction ToastNode({ entry, onDismiss }: ToastNodeProps) {\n\tconst role = entry.tone === \"error\" || entry.tone === \"warning\" ? \"alert\" : \"status\";\n\tconst ariaLive = role === \"alert\" ? \"assertive\" : \"polite\";\n\treturn (\n\t\t<div\n\t\t\tclassName=\"ds-atom-toast\"\n\t\t\tdata-tone={entry.tone}\n\t\t\tdata-dismissing={entry.dismissing ? \"true\" : undefined}\n\t\t\trole={role}\n\t\t\taria-live={ariaLive}\n\t\t>\n\t\t\t<span className=\"ds-atom-toast-icon\" aria-hidden=\"true\">\n\t\t\t\t{TONE_ICON[entry.tone]}\n\t\t\t</span>\n\t\t\t<span className=\"ds-atom-toast-msg\">{entry.message}</span>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"ds-atom-toast-close\"\n\t\t\t\taria-label=\"Dismiss notification\"\n\t\t\t\tonClick={onDismiss}\n\t\t\t>\n\t\t\t\t<X size={14} aria-hidden=\"true\" />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n","import { type HTMLAttributes, forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { Check, Copy } from \"../../icons\";\nexport interface CopyToClipboardProps\n\textends Omit<HTMLAttributes<HTMLButtonElement>, \"onCopy\" | \"onError\"> {\n\t/** The string value written to the clipboard on click. */\n\tvalue: string;\n\t/** Display text shown inside the button; falls back to `value` when omitted. */\n\tlabel?: string;\n\t/**\n\t * Text shown in place of `label`/`value` for 2 s after a successful copy.\n\t * Omit to keep the original label visible (icon-swap + green border only).\n\t * @example copiedLabel=\"Copied!\"\n\t */\n\tcopiedLabel?: string;\n\t/** Called after a successful clipboard write; use to trigger a Toast or other feedback. */\n\tonCopy?: () => void;\n\t/** Called when the clipboard API fails (e.g. insecure context or permission denied). */\n\tonError?: (err: Error) => void;\n}\n\n/**\n * Inline value + Copy↔Check icon (DS-55, D-531).\n *\n * On click: navigator.clipboard.writeText(value) → success: icon swaps to\n * green Check for 2s, calls onCopy?(); failure: console.warn(err), icon\n * stays as Copy, calls onError?(err). NO internal Toast dep.\n */\nexport const CopyToClipboard = forwardRef<HTMLButtonElement, CopyToClipboardProps>(\n\tfunction CopyToClipboard(\n\t\t{ value, label, copiedLabel, onCopy, onError, className, style, ...rest },\n\t\tref,\n\t) {\n\t\tconst [copied, setCopied] = useState(false);\n\t\tconst timerRef = useRef<ReturnType<typeof globalThis.setTimeout> | null>(null);\n\n\t\tuseEffect(() => {\n\t\t\treturn () => {\n\t\t\t\tif (timerRef.current !== null) {\n\t\t\t\t\tglobalThis.clearTimeout(timerRef.current);\n\t\t\t\t\ttimerRef.current = null;\n\t\t\t\t}\n\t\t\t};\n\t\t}, []);\n\n\t\tconst handleClick = useCallback(async () => {\n\t\t\tconst showCopied = () => {\n\t\t\t\tsetCopied(true);\n\t\t\t\tonCopy?.();\n\t\t\t\tif (timerRef.current !== null) globalThis.clearTimeout(timerRef.current);\n\t\t\t\ttimerRef.current = globalThis.setTimeout(() => {\n\t\t\t\t\tsetCopied(false);\n\t\t\t\t\ttimerRef.current = null;\n\t\t\t\t}, 2000);\n\t\t\t};\n\n\t\t\t// Try modern Clipboard API first.\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(value);\n\t\t\t\tshowCopied();\n\t\t\t\treturn;\n\t\t\t} catch {\n\t\t\t\t// Clipboard API unavailable in this context (iframe without\n\t\t\t\t// clipboard-write permission, insecure context, or browser block).\n\t\t\t\t// Fall through to execCommand fallback below.\n\t\t\t}\n\n\t\t\t// execCommand fallback - works in iframes (e.g. Storybook docs) where\n\t\t\t// navigator.clipboard is blocked by the clipboard-write permission policy.\n\t\t\ttry {\n\t\t\t\tconst ta = document.createElement(\"textarea\");\n\t\t\t\tta.value = value;\n\t\t\t\tta.style.cssText = \"position:fixed;opacity:0;pointer-events:none;top:0;left:0;\";\n\t\t\t\tdocument.body.appendChild(ta);\n\t\t\t\tta.focus();\n\t\t\t\tta.select();\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-deprecated\n\t\t\t\tconst ok = document.execCommand(\"copy\");\n\t\t\t\tta.remove();\n\t\t\t\tif (ok) {\n\t\t\t\t\tshowCopied();\n\t\t\t\t} else {\n\t\t\t\t\tconst error = new Error(\"Copy command unavailable\");\n\t\t\t\t\tconsole.warn(\"[CopyToClipboard]\", error.message);\n\t\t\t\t\tonError?.(error);\n\t\t\t\t}\n\t\t\t} catch (fallbackErr) {\n\t\t\t\tconst error = fallbackErr instanceof Error ? fallbackErr : new Error(String(fallbackErr));\n\t\t\t\tconsole.warn(\"[CopyToClipboard] clipboard unavailable:\", error.message);\n\t\t\t\tonError?.(error);\n\t\t\t}\n\t\t}, [value, onCopy, onError]);\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={`ds-atom-copy${className ? ` ${className}` : \"\"}`}\n\t\t\t\tdata-state={copied ? \"copied\" : \"idle\"}\n\t\t\t\taria-label={`Copy ${label ?? value}`}\n\t\t\t\tstyle={style}\n\t\t\t\tonClick={handleClick}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<span className=\"ds-atom-copy-value\">\n\t\t\t\t\t{copied && copiedLabel ? copiedLabel : (label ?? value)}\n\t\t\t\t</span>\n\t\t\t\t{copied ? (\n\t\t\t\t\t<Check\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tclassName=\"ds-atom-copy-icon ds-atom-copy-icon-check\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<Copy size={14} className=\"ds-atom-copy-icon\" aria-hidden=\"true\" />\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t},\n);\n","// Pure date helpers - no React imports. Consumed by DatePicker (16-05)\n// and DateRangePicker (16-06). D-510: NO date-fns / Temporal dep - these\n// ~7 helpers cover every Wave 5 + Phase 18 timeline use case.\n\nexport function startOfMonth(d: Date): Date {\n\treturn new Date(d.getFullYear(), d.getMonth(), 1, 0, 0, 0, 0);\n}\n\nexport function daysInMonth(d: Date): number {\n\t// Day 0 of next month = last day of current month.\n\treturn new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n\treturn (\n\t\ta.getFullYear() === b.getFullYear() &&\n\t\ta.getMonth() === b.getMonth() &&\n\t\ta.getDate() === b.getDate()\n\t);\n}\n\nexport function isWithinRange(d: Date, start: Date, end: Date): boolean {\n\tconst t = d.getTime();\n\treturn t >= startOfDayMs(start) && t <= endOfDayMs(end);\n}\n\nexport function isToday(d: Date): boolean {\n\treturn isSameDay(d, new Date());\n}\n\nexport function addMonths(d: Date, n: number): Date {\n\treturn new Date(\n\t\td.getFullYear(),\n\t\td.getMonth() + n,\n\t\td.getDate(),\n\t\td.getHours(),\n\t\td.getMinutes(),\n\t\td.getSeconds(),\n\t\td.getMilliseconds(),\n\t);\n}\n\nexport function formatYYYYMMDD(d: Date): string {\n\tconst y = d.getFullYear();\n\tconst m = String(d.getMonth() + 1).padStart(2, \"0\");\n\tconst day = String(d.getDate()).padStart(2, \"0\");\n\treturn `${y}-${m}-${day}`;\n}\n\nfunction startOfDayMs(d: Date): number {\n\treturn new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0).getTime();\n}\n\nfunction endOfDayMs(d: Date): number {\n\treturn new Date(d.getFullYear(), d.getMonth(), d.getDate(), 23, 59, 59, 999).getTime();\n}\n","// Pure month-grid helpers - no React imports. Consumed by DatePicker (16-05)\n// refactor and Calendar (DS-68). Lifted from DatePicker.tsx lines 113-141 in\n// Phase 17 (D-17-21). Same no-dep policy as dateUtils.ts.\n\nimport { daysInMonth, startOfMonth } from \"./dateUtils\";\n\nexport interface DayCell {\n\tdate: Date;\n\tinMonth: boolean;\n\tweekIndex: number; // 0-5\n}\n\nexport interface MonthGrid {\n\tweeks: DayCell[][]; // 6 weeks × 7 days\n\tcells: DayCell[]; // flat 42 cells, same order\n\tweekStart: 0 | 1;\n\tmonthStart: Date;\n}\n\n/**\n * Build a 6×7 month grid (42 cells) for the given year/month.\n * weekStart: 0 = Sunday-first (DatePicker default for backward compat),\n * 1 = Monday-first (Calendar default per handoff ds-calendar.jsx).\n */\nexport function buildMonthGrid(year: number, month: number, weekStart: 0 | 1 = 0): MonthGrid {\n\tconst monthStart = startOfMonth(new Date(year, month, 1));\n\tconst firstWeekday = monthStart.getDay(); // 0=Sun\n\tconst dim = daysInMonth(monthStart);\n\t// Leading pad: number of cells from previous month before day 1.\n\t// weekStart=0 (Sun-first): leadingPad = firstWeekday (0..6)\n\t// weekStart=1 (Mon-first): leadingPad = (firstWeekday + 6) % 7 i.e. (firstWeekday - 1 + 7) % 7\n\tconst leadingPad = (firstWeekday - weekStart + 7) % 7;\n\n\tconst cells: DayCell[] = [];\n\t// Leading prev-month padding\n\tfor (let i = leadingPad - 1; i >= 0; i--) {\n\t\tcells.push({\n\t\t\tdate: new Date(monthStart.getFullYear(), monthStart.getMonth(), -i),\n\t\t\tinMonth: false,\n\t\t\tweekIndex: 0,\n\t\t});\n\t}\n\t// Current month\n\tfor (let d = 1; d <= dim; d++) {\n\t\tcells.push({\n\t\t\tdate: new Date(monthStart.getFullYear(), monthStart.getMonth(), d),\n\t\t\tinMonth: true,\n\t\t\tweekIndex: 0, // assigned below\n\t\t});\n\t}\n\t// Trailing next-month padding to 42 cells\n\twhile (cells.length < 42) {\n\t\tconst last = cells[cells.length - 1]!.date;\n\t\tcells.push({\n\t\t\tdate: new Date(last.getFullYear(), last.getMonth(), last.getDate() + 1),\n\t\t\tinMonth: false,\n\t\t\tweekIndex: 0,\n\t\t});\n\t}\n\t// Assign weekIndex 0-5\n\tfor (let i = 0; i < cells.length; i++) {\n\t\tcells[i]!.weekIndex = Math.floor(i / 7);\n\t}\n\t// Chunk into 6 weeks of 7\n\tconst weeks: DayCell[][] = [];\n\tfor (let w = 0; w < 6; w++) {\n\t\tweeks.push(cells.slice(w * 7, (w + 1) * 7));\n\t}\n\treturn { weeks, cells, weekStart, monthStart };\n}\n\nconst NARROW_SUN = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"];\nconst NARROW_MON = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\nconst SHORT_SUN = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nconst SHORT_MON = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\n/**\n * Return 7-element array of weekday labels in the order they appear in the grid.\n * Used by Calendar's column-header row.\n */\nexport function getWeekDayLabels(\n\tweekStart: 0 | 1,\n\tformat: \"short\" | \"narrow\" = \"narrow\",\n): string[] {\n\tif (weekStart === 0) return format === \"short\" ? [...SHORT_SUN] : [...NARROW_SUN];\n\treturn format === \"short\" ? [...SHORT_MON] : [...NARROW_MON];\n}\n","import { type HTMLAttributes, forwardRef, useEffect, useMemo, useState } from \"react\";\nimport { buildMonthGrid } from \"../../_internals/calendarGrid\";\nimport { addMonths, isSameDay, isToday, startOfMonth } from \"../../_internals/dateUtils\"; // DS-53 - DatePicker primitive (Phase 16 Wave 1 / plan 16-05).\n// 7×6 calendar grid with controlled value, optional time picker, event dots.\n// Composed by DateRangePicker (16-06) via inRange + defaultMonth backward-\n// compatible API additions. NO date-fns dep - uses pure helpers from\n// ./_internals/dateUtils (D-510). See design-handoff/design-system/ds-pickers.jsx.\n// v0.5.2 - isCellSelected override prop added so DateRangePicker can mark\n// BOTH endpoints (start + end) with the amber selected marker.\n// v0.5.3 - added isRangeStart/isRangeEnd modifier props for range-edge bg polish.\nimport { ChevronLeft, ChevronRight } from \"../../icons\";\nimport { Button } from \"../Button\";\nexport interface DatePickerProps extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n\t/** Controlled selected date; pass `null` for no selection. */\n\tvalue: Date | null;\n\t/** Called when the user clicks a calendar day cell with the selected Date. */\n\tonChange: (d: Date) => void;\n\t/** Called when the user navigates to a different month, with the first day of that month. */\n\tonMonthChange?: (d: Date) => void;\n\t/** Predicate that returns true for dates that should be disabled (unclickable). */\n\tdisabled?: (d: Date) => boolean;\n\t/** Array of dates that receive an event-dot indicator on their cell. */\n\tevents?: Date[];\n\t/** When true, all dates before today are disabled.\n\t * @default false\n\t */\n\tdisablePast?: boolean;\n\t/** When true, all dates after today are disabled.\n\t * @default false\n\t */\n\tdisableFuture?: boolean;\n\t/** When true, renders a 12-hour time picker row below the grid.\n\t * @default false\n\t */\n\tshowTime?: boolean;\n\t/** Predicate for cells that fall within an in-progress date range; adds the amber-light between-state bg. Consumed by DateRangePicker. */\n\tinRange?: (d: Date) => boolean;\n\t/** Initial month displayed when `value` is null; useful for range-picker right calendar. */\n\tdefaultMonth?: Date;\n\t/** Override cell-selected detection; DateRangePicker uses this to highlight both range endpoints. */\n\tisCellSelected?: (d: Date) => boolean;\n\t/** Marks a cell as the start of a range for edge-pill visual polish; used by DateRangePicker. */\n\tisRangeStart?: (d: Date) => boolean;\n\t/** Marks a cell as the end of a range for edge-pill visual polish; used by DateRangePicker. */\n\tisRangeEnd?: (d: Date) => boolean;\n}\n\nconst WEEKDAY_HEADERS = [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"]; // Sunday-first per D-510\nconst MONTH_NAMES = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\nfunction dayKey(d: Date): string {\n\treturn `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(function DatePicker(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tonMonthChange,\n\t\tdisabled,\n\t\tevents,\n\t\tdisablePast = false,\n\t\tdisableFuture = false,\n\t\tshowTime = false,\n\t\tinRange,\n\t\tdefaultMonth,\n\t\tisCellSelected,\n\t\tisRangeStart,\n\t\tisRangeEnd,\n\t\tclassName,\n\t\tstyle,\n\t\t...rest\n\t},\n\tref,\n) {\n\tconst [viewMonth, setViewMonth] = useState<Date>(() =>\n\t\tstartOfMonth(value ?? defaultMonth ?? new Date()),\n\t);\n\n\t// Sync viewMonth when caller swaps `value` to a different month while controlled.\n\tuseEffect(() => {\n\t\tif (value) {\n\t\t\tconst target = startOfMonth(value);\n\t\t\tif (\n\t\t\t\ttarget.getFullYear() !== viewMonth.getFullYear() ||\n\t\t\t\ttarget.getMonth() !== viewMonth.getMonth()\n\t\t\t) {\n\t\t\t\tsetViewMonth(target);\n\t\t\t}\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [value]);\n\n\tconst today = new Date();\n\n\tconst { cells } = useMemo(\n\t\t() => buildMonthGrid(viewMonth.getFullYear(), viewMonth.getMonth(), 0),\n\t\t[viewMonth],\n\t);\n\n\tfunction step(n: number) {\n\t\tconst next = addMonths(viewMonth, n);\n\t\tsetViewMonth(next);\n\t\tonMonthChange?.(next);\n\t}\n\n\tfunction isPastDisabled(d: Date) {\n\t\tif (!disablePast) return false;\n\t\tconst t0 = new Date(today.getFullYear(), today.getMonth(), today.getDate()).getTime();\n\t\treturn d.getTime() < t0;\n\t}\n\n\tfunction isFutureDisabled(d: Date) {\n\t\tif (!disableFuture) return false;\n\t\tconst t0 = new Date(\n\t\t\ttoday.getFullYear(),\n\t\t\ttoday.getMonth(),\n\t\t\ttoday.getDate(),\n\t\t\t23,\n\t\t\t59,\n\t\t\t59,\n\t\t\t999,\n\t\t).getTime();\n\t\treturn d.getTime() > t0;\n\t}\n\n\tfunction handleSelect(d: Date) {\n\t\tif (disabled?.(d) || isPastDisabled(d) || isFutureDisabled(d)) return;\n\t\tconst out = new Date(d);\n\t\tif (showTime && value) {\n\t\t\tout.setHours(value.getHours(), value.getMinutes());\n\t\t}\n\t\tonChange(out);\n\t}\n\n\t// Time picker uses 12-hour mode with AM/PM toggle (v0.5.1 patch - was 24-hour).\n\t// Internal Date object stays in 24-hour for caller consumption.\n\tfunction updateHour12(h12: number) {\n\t\tconst base = value ?? new Date();\n\t\tconst out = new Date(base);\n\t\tconst isPm = base.getHours() >= 12;\n\t\tconst clamped = Math.max(1, Math.min(12, h12));\n\t\tconst h24 = isPm ? (clamped === 12 ? 12 : clamped + 12) : clamped === 12 ? 0 : clamped;\n\t\tout.setHours(h24);\n\t\tonChange(out);\n\t}\n\n\tfunction updateMinute(n: number) {\n\t\tconst base = value ?? new Date();\n\t\tconst out = new Date(base);\n\t\tout.setMinutes(Math.max(0, Math.min(59, n)));\n\t\tonChange(out);\n\t}\n\n\tfunction togglePeriod(period: \"AM\" | \"PM\") {\n\t\tconst base = value ?? new Date();\n\t\tconst currentHours = base.getHours();\n\t\tconst currentIsPm = currentHours >= 12;\n\t\tconst targetIsPm = period === \"PM\";\n\t\tif (currentIsPm === targetIsPm) return;\n\t\tconst out = new Date(base);\n\t\tout.setHours(targetIsPm ? currentHours + 12 : currentHours - 12);\n\t\tonChange(out);\n\t}\n\n\tconst displayHour24 = value?.getHours() ?? 0;\n\tconst displayHour12 = displayHour24 % 12 === 0 ? 12 : displayHour24 % 12;\n\tconst displayPeriod: \"AM\" | \"PM\" = displayHour24 >= 12 ? \"PM\" : \"AM\";\n\n\tconst eventSet = useMemo(() => new Set((events ?? []).map((e) => dayKey(e))), [events]);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-datepicker${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"ds-atom-datepicker-header\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label=\"Previous month\"\n\t\t\t\t\tonClick={() => step(-1)}\n\t\t\t\t\tclassName=\"ds-atom-datepicker-nav\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronLeft size={14} />\n\t\t\t\t</button>\n\t\t\t\t<div className=\"ds-atom-datepicker-label\">\n\t\t\t\t\t{MONTH_NAMES[viewMonth.getMonth()]} {viewMonth.getFullYear()}\n\t\t\t\t</div>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label=\"Next month\"\n\t\t\t\t\tonClick={() => step(1)}\n\t\t\t\t\tclassName=\"ds-atom-datepicker-nav\"\n\t\t\t\t>\n\t\t\t\t\t<ChevronRight size={14} />\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<div className=\"ds-atom-datepicker-weekdays\">\n\t\t\t\t{WEEKDAY_HEADERS.map((w, i) => (\n\t\t\t\t\t<div key={`wd-${i}-${w}`} className=\"ds-atom-datepicker-weekday\">\n\t\t\t\t\t\t{w}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\n\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: <table> is form-tabular semantic; ARIA grid role on a div is the standard pattern for interactive calendars where each cell is a focusable button (matches react-aria + Radix Calendar) */}\n\t\t\t<div className=\"ds-atom-datepicker-grid\" role=\"grid\">\n\t\t\t\t{cells.map(({ date, inMonth }) => {\n\t\t\t\t\tconst selected = isCellSelected\n\t\t\t\t\t\t? isCellSelected(date)\n\t\t\t\t\t\t: !!(value && isSameDay(date, value));\n\t\t\t\t\tconst todayCell = isToday(date);\n\t\t\t\t\tconst isDisabled = !!disabled?.(date) || isPastDisabled(date) || isFutureDisabled(date);\n\t\t\t\t\tconst inRangeMatch = !!inRange?.(date);\n\t\t\t\t\tconst isRangeStartCell = !!isRangeStart?.(date);\n\t\t\t\t\tconst isRangeEndCell = !!isRangeEnd?.(date);\n\t\t\t\t\tconst hasEvent = eventSet.has(dayKey(date));\n\t\t\t\t\tconst cls = [\n\t\t\t\t\t\t\"ds-atom-datepicker-cell\",\n\t\t\t\t\t\t!inMonth && \"is-out\",\n\t\t\t\t\t\tselected && \"is-selected\",\n\t\t\t\t\t\tisRangeStartCell && \"is-range-start\",\n\t\t\t\t\t\tisRangeEndCell && \"is-range-end\",\n\t\t\t\t\t\ttodayCell && \"is-today\",\n\t\t\t\t\t\tisDisabled && \"is-disabled\",\n\t\t\t\t\t\tinRangeMatch && \"is-in-range\",\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={dayKey(date)}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: <td> is for tabular form data; gridcell role on a <button> is required so each calendar day is keyboard-focusable + clickable via Enter/Space (matches react-aria + Radix Calendar pattern)\n\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\taria-selected={selected ? true : undefined}\n\t\t\t\t\t\t\taria-current={todayCell ? \"date\" : undefined}\n\t\t\t\t\t\t\taria-disabled={isDisabled || undefined}\n\t\t\t\t\t\t\tclassName={cls}\n\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\tonClick={() => handleSelect(date)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>{date.getDate()}</span>\n\t\t\t\t\t\t\t{hasEvent ? (\n\t\t\t\t\t\t\t\t<span className=\"ds-atom-datepicker-event-dot\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{showTime ? (\n\t\t\t\t<div className=\"ds-atom-datepicker-time\">\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\taria-label=\"Hours\"\n\t\t\t\t\t\tmin={1}\n\t\t\t\t\t\tmax={12}\n\t\t\t\t\t\tvalue={displayHour12}\n\t\t\t\t\t\tonChange={(e) => updateHour12(Number(e.target.value))}\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"ds-atom-datepicker-time-sep\">:</span>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"number\"\n\t\t\t\t\t\taria-label=\"Minutes\"\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={59}\n\t\t\t\t\t\tvalue={value?.getMinutes() ?? 0}\n\t\t\t\t\t\tonChange={(e) => updateMinute(Number(e.target.value))}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tvariant={displayPeriod === \"PM\" ? \"primary\" : \"secondary\"}\n\t\t\t\t\t\taria-label={`Currently ${displayPeriod} - click to switch`}\n\t\t\t\t\t\taria-pressed={displayPeriod === \"PM\"}\n\t\t\t\t\t\tonClick={() => togglePeriod(displayPeriod === \"AM\" ? \"PM\" : \"AM\")}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"var(--mono)\",\n\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\tletterSpacing: \"0.04em\",\n\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\twidth: 48,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{displayPeriod}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t</div>\n\t);\n});\n\nDatePicker.displayName = \"DatePicker\";\n","import { type ReactNode, forwardRef, useRef, useState } from \"react\";\nimport { ChevronDown } from \"../../icons\";\nimport type { ButtonVariant } from \"../../inputs/Button\";\nimport { Popover } from \"../../overlays/Popover\";\nexport interface SplitButtonAction {\n\t/** Display label for this action. */\n\tlabel: string;\n\t/** Optional icon rendered before the label. */\n\ticon?: ReactNode;\n\t/** Handler called when this action is selected. */\n\tonClick: () => void;\n\t/**\n\t * Per-action variant override. Drives the primary face appearance when selected\n\t * AND adds a left-border color hint in the menu. Defaults to the SplitButton-level `variant`.\n\t */\n\tvariant?: ButtonVariant;\n\t/**\n\t * Semantic tone applied to this menu item. Overrides the variant color in the dropdown only -\n\t * does not affect the primary face. Use for signalling intent (e.g. `\"danger\"` for Delete).\n\t * - `\"danger\"` → red text\n\t * - `\"warning\"` → amber text\n\t * - `\"success\"` → green text\n\t */\n\ttone?: \"danger\" | \"warning\" | \"success\";\n}\n\nexport interface SplitButtonProps {\n\t/** Non-empty array of actions; the first element is shown as the primary face on mount. */\n\tactions: [SplitButtonAction, ...SplitButtonAction[]];\n\t/** Default visual variant applied to actions that don't set their own `variant`.\n\t * @default \"primary\"\n\t */\n\tvariant?: ButtonVariant;\n\t/** Size token applied to both the primary face and the chevron trigger.\n\t * @default \"md\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** Additional className applied to the root wrapper element. */\n\tclassName?: string;\n}\n\n/**\n * Split-action button (DS-56, D-530). Primary face + chevron-divider button\n * exposing a Popover menu of alternative actions. Selecting an alternative\n * makes it the primary face for this instance - re-mount resets to actions[0]\n * (in-instance state only; persistence deferred to v2.1).\n *\n * v0.5.1 patch - full Button variant set (primary | secondary | ghost |\n * danger) on the SplitButton level AND per-action. The currently-selected\n * action's variant drives the primary face's appearance; menu items render\n * with their own variants as visual hints.\n *\n * v0.5.4 - menu item accent only renders for explicit per-action variant\n * overrides; inherited variants show no left-border accent (cleans the\n * default-only case where every item was getting an amber edge via the\n * primary fallback, defeating the differentiation intent).\n *\n * Composes Popover (Wave 3) - NOT DSDropdown - because SplitButton's menu is\n * a 2–5 item action menu, not a listbox semantic.\n */\nexport const SplitButton = forwardRef<HTMLDivElement, SplitButtonProps>(function SplitButton(\n\t{ actions, variant = \"primary\", size = \"md\", className },\n\tref,\n) {\n\tconst [currentIdx, setCurrentIdx] = useState<number>(0);\n\tconst [open, setOpen] = useState(false);\n\tconst chevronRef = useRef<HTMLButtonElement | null>(null);\n\tconst current = actions[currentIdx] ?? actions[0];\n\n\t// Effective variant for the primary face:\n\t// 1. explicit per-action variant wins\n\t// 2. tone maps to a variant so the face reflects the selected action's intent:\n\t// danger → \"danger\" (red), warning/success → \"secondary\" (neutral, not amber CTA)\n\t// 3. falls back to SplitButton-level variant\n\tconst toneVariantMap: Record<NonNullable<typeof current.tone>, ButtonVariant> = {\n\t\tdanger: \"danger\",\n\t\twarning: \"secondary\",\n\t\tsuccess: \"secondary\",\n\t};\n\tconst toneVariant = current.tone ? toneVariantMap[current.tone] : undefined;\n\tconst primaryVariant: ButtonVariant = current.variant ?? toneVariant ?? variant;\n\n\tfunction handlePrimary() {\n\t\tcurrent.onClick();\n\t}\n\n\tfunction handleSelect(i: number) {\n\t\tconst next = actions[i];\n\t\tif (!next) return;\n\t\tsetCurrentIdx(i);\n\t\tsetOpen(false);\n\t\tnext.onClick();\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-split${className ? ` ${className}` : \"\"}`}\n\t\t\tdata-variant={primaryVariant}\n\t\t\tdata-size={size}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"ds-atom-split-primary\"\n\t\t\t\tdata-part=\"primary\"\n\t\t\t\tdata-variant={primaryVariant}\n\t\t\t\tdata-size={size}\n\t\t\t\tonClick={handlePrimary}\n\t\t\t>\n\t\t\t\t{current.icon ? <span className=\"ds-atom-split-icon\">{current.icon}</span> : null}\n\t\t\t\t<span>{current.label}</span>\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tref={chevronRef}\n\t\t\t\tclassName=\"ds-atom-split-chevron\"\n\t\t\t\tdata-variant={primaryVariant}\n\t\t\t\tdata-size={size}\n\t\t\t\taria-label=\"More actions\"\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-expanded={open}\n\t\t\t\tonClick={() => setOpen((o) => !o)}\n\t\t\t>\n\t\t\t\t<ChevronDown size={14} />\n\t\t\t</button>\n\t\t\t<Popover anchorRef={chevronRef} open={open} onOpenChange={setOpen} placement=\"bottom-end\">\n\t\t\t\t<div role=\"menu\" className=\"ds-atom-split-menu\">\n\t\t\t\t\t{actions.map((a, i) => {\n\t\t\t\t\t\t// v0.5.4 - only set data-action-variant when the action has an\n\t\t\t\t\t\t// EXPLICIT per-action override that differs from the SplitButton-\n\t\t\t\t\t\t// level default. Items that inherit (a.variant === undefined) get\n\t\t\t\t\t\t// NO accent - keeps the menu clean when all actions share the same\n\t\t\t\t\t\t// variant. When undefined, React omits the attribute entirely so\n\t\t\t\t\t\t// the [data-action-variant=...] CSS rules don't fire.\n\t\t\t\t\t\tconst explicitVariant: ButtonVariant | undefined =\n\t\t\t\t\t\t\ta.variant && a.variant !== variant ? a.variant : undefined;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={a.label}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\tclassName={`ds-atom-split-menuitem${i === currentIdx ? \" is-current\" : \"\"}`}\n\t\t\t\t\t\t\t\tdata-action-variant={explicitVariant}\n\t\t\t\t\t\t\t\tdata-tone={a.tone}\n\t\t\t\t\t\t\t\tonClick={() => handleSelect(i)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{a.icon ? <span className=\"ds-atom-split-icon\">{a.icon}</span> : null}\n\t\t\t\t\t\t\t\t<span>{a.label}</span>\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t</Popover>\n\t\t</div>\n\t);\n});\n","import {\n\ttype CSSProperties,\n\ttype ReactNode,\n\ttype RefObject,\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { useClickOutside } from \"../hooks/useClickOutside\";\nimport { DSPortal } from \"./DSPortal\";\nimport { smartAnchorPos } from \"./floatingPos\";\n\nexport type DSDropdownPlacement = \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n\nexport interface DSDropdownProps {\n\tanchorRef: RefObject<HTMLElement | null>;\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tactiveIndex: number;\n\tonActiveIndexChange: (idx: number) => void;\n\titemCount: number;\n\tonSelect: (idx: number) => void;\n\tplacement?: DSDropdownPlacement;\n\tmatchAnchorWidth?: boolean;\n\tmaxHeight?: number;\n\ttypeAheadGetText?: (idx: number) => string;\n\tchildren: ReactNode;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\n/**\n * Internal dropdown infrastructure (D-500). Owns:\n * - DSPortal mount to document.body\n * - Anchor-rect positioning (callback-ref-as-state per Popover.tsx line 73)\n * - Outside-click via useClickOutside(panelRef, onClose, open) - 3-arg form\n * - Keyboard model: ArrowUp/Down/Home/End/Enter/Escape on document while open\n * - Type-ahead buffer (single-char rolling, 500ms reset) when typeAheadGetText provided\n *\n * Does NOT inject ARIA attributes - consumer wires role=\"listbox\"/option per D-501.\n *\n * NOT exported from the barrel. Consumers (Select, MultiSelect, Autocomplete)\n * import directly from this path.\n */\nexport function DSDropdown({\n\tanchorRef,\n\topen,\n\tonOpenChange,\n\tactiveIndex,\n\tonActiveIndexChange,\n\titemCount,\n\tonSelect,\n\tplacement = \"bottom-start\",\n\tmatchAnchorWidth = true,\n\tmaxHeight = 280,\n\ttypeAheadGetText,\n\tchildren,\n\tclassName,\n\tstyle,\n}: DSDropdownProps) {\n\tconst [panel, setPanel] = useState<HTMLDivElement | null>(null);\n\tconst panelRef = useRef<HTMLDivElement | null>(null);\n\tconst setPanelRef = (node: HTMLDivElement | null) => {\n\t\tpanelRef.current = node;\n\t\tsetPanel(node);\n\t};\n\tconst [pos, setPos] = useState<{ top: number; left: number; width?: number } | null>(null);\n\n\t// Position computation - uses smartAnchorPos for auto-flip + viewport clamping.\n\t// Closes automatically when the anchor scrolls fully out of the viewport.\n\tconst computePos = useCallback(() => {\n\t\tconst anchor = anchorRef.current;\n\t\tif (!anchor || !panel) return;\n\t\tconst a = anchor.getBoundingClientRect();\n\t\t// Anchor fully outside viewport - close.\n\t\tif (a.bottom < 0 || a.top > window.innerHeight || a.right < 0 || a.left > window.innerWidth) {\n\t\t\tonOpenChange(false);\n\t\t\treturn;\n\t\t}\n\t\tconst p = panel.getBoundingClientRect();\n\t\tconst side = placement.startsWith(\"top\") ? \"top\" : \"bottom\";\n\t\tconst align = placement.endsWith(\"end\") ? \"end\" : \"start\";\n\t\tconst { top, left } = smartAnchorPos(a, { width: p.width, height: p.height }, side, align, 4);\n\t\tsetPos({ top, left, width: matchAnchorWidth ? a.width : undefined });\n\t}, [anchorRef, panel, placement, matchAnchorWidth, onOpenChange]);\n\n\t// Compute on open / panel mount.\n\tuseLayoutEffect(() => {\n\t\tif (!open) {\n\t\t\tsetPos(null);\n\t\t\treturn;\n\t\t}\n\t\tcomputePos();\n\t}, [open, computePos]);\n\n\t// Recompute on scroll or resize so the dropdown tracks the anchor while open.\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\twindow.addEventListener(\"scroll\", computePos, true);\n\t\twindow.addEventListener(\"resize\", computePos);\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"scroll\", computePos, true);\n\t\t\twindow.removeEventListener(\"resize\", computePos);\n\t\t};\n\t}, [open, computePos]);\n\n\t// Outside-click - close (Popover.tsx line 95 pattern).\n\tuseClickOutside(panelRef, () => onOpenChange(false), open);\n\n\t// Keyboard model - listener installed only while open.\n\tconst typeAheadBufferRef = useRef<string>(\"\");\n\tconst typeAheadTimerRef = useRef<number | null>(null);\n\tuseEffect(() => {\n\t\tif (!open) return;\n\t\tfunction onKey(e: KeyboardEvent) {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonOpenChange(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"ArrowDown\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonActiveIndexChange((activeIndex + 1) % Math.max(itemCount, 1));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"ArrowUp\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonActiveIndexChange((activeIndex - 1 + itemCount) % Math.max(itemCount, 1));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"Home\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonActiveIndexChange(0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"End\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonActiveIndexChange(Math.max(itemCount - 1, 0));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tif (activeIndex >= 0 && activeIndex < itemCount) onSelect(activeIndex);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Type-ahead: single-char rolling buffer with 500ms reset\n\t\t\tif (typeAheadGetText && e.key.length === 1 && /\\S/.test(e.key)) {\n\t\t\t\ttypeAheadBufferRef.current += e.key.toLowerCase();\n\t\t\t\tif (typeAheadTimerRef.current !== null) {\n\t\t\t\t\twindow.clearTimeout(typeAheadTimerRef.current);\n\t\t\t\t}\n\t\t\t\ttypeAheadTimerRef.current = window.setTimeout(() => {\n\t\t\t\t\ttypeAheadBufferRef.current = \"\";\n\t\t\t\t}, 500);\n\t\t\t\tconst buf = typeAheadBufferRef.current;\n\t\t\t\tfor (let i = 0; i < itemCount; i++) {\n\t\t\t\t\tconst text = typeAheadGetText(i).toLowerCase();\n\t\t\t\t\tif (text.startsWith(buf)) {\n\t\t\t\t\t\tonActiveIndexChange(i);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdocument.addEventListener(\"keydown\", onKey);\n\t\treturn () => document.removeEventListener(\"keydown\", onKey);\n\t}, [open, activeIndex, itemCount, onActiveIndexChange, onOpenChange, onSelect, typeAheadGetText]);\n\n\tif (!open) return null;\n\n\t// Inherit dark context from the anchor so portal-mounted panel follows the\n\t// same theme as the trigger even when <html> doesn't have .dark (e.g. Docs page).\n\tconst isDarkCtx = anchorRef.current?.closest(\".dark\") != null;\n\n\tconst dropdownEl = (\n\t\t<div\n\t\t\tref={setPanelRef}\n\t\t\tclassName={[\"ds-atom-dropdown\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-placement={placement}\n\t\t\tstyle={{\n\t\t\t\tposition: \"fixed\",\n\t\t\t\ttop: pos?.top ?? -9999,\n\t\t\t\tleft: pos?.left ?? -9999,\n\t\t\t\twidth: pos?.width,\n\t\t\t\tmaxHeight,\n\t\t\t\toverflowY: \"auto\",\n\t\t\t\tvisibility: pos ? \"visible\" : \"hidden\",\n\t\t\t\tzIndex: 1100,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n\n\treturn <DSPortal>{isDarkCtx ? <div className=\"dark\">{dropdownEl}</div> : dropdownEl}</DSPortal>;\n}\n","import { type CSSProperties, forwardRef, useId, useMemo, useRef, useState } from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { Check, ChevronDown, X } from \"../../icons\";\nimport { Popover } from \"../../overlays/Popover\";\nexport interface MultiSelectOption {\n\tvalue: string;\n\tlabel: string;\n}\n\nexport interface MultiSelectProps {\n\t/** Controlled array of selected option values. */\n\tvalue: string[];\n\t/** Called with the full updated selection array after each toggle or remove. */\n\tonChange: (vs: string[]) => void;\n\t/** Full list of available options shown in the dropdown. */\n\toptions: MultiSelectOption[];\n\t/** Placeholder text shown in the trigger when nothing is selected.\n\t * @default \"Select…\"\n\t */\n\tplaceholder?: string;\n\t/** When true, disables the trigger and prevents interaction.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional className applied to the trigger button. */\n\tclassName?: string;\n\t/** Inline styles applied to the trigger button. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Multi-select dropdown (DS-51). Chips-in-trigger layout (D-520) with\n * cap-3 + \"+N more\" Popover expansion. ARIA: combobox + listbox with\n * aria-multiselectable=true per D-501. Composes DSDropdown (16-01) +\n * Popover (Wave 3). Mini-checkbox per option in the dropdown panel.\n */\nexport const MultiSelect = forwardRef<HTMLButtonElement, MultiSelectProps>(function MultiSelect(\n\t{ value, onChange, options, placeholder = \"Select…\", disabled = false, className, style },\n\tref,\n) {\n\tconst triggerRef = useRef<HTMLButtonElement | null>(null);\n\tconst moreChipRef = useRef<HTMLButtonElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst [moreOpen, setMoreOpen] = useState(false);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\tconst listId = useId();\n\tconst optionIdBase = useId();\n\tconst optionId = (i: number) => `${optionIdBase}-${i}`;\n\n\tconst selectedSet = useMemo(() => new Set(value), [value]);\n\tconst selectedOpts = useMemo(\n\t\t() => options.filter((o) => selectedSet.has(o.value)),\n\t\t[options, selectedSet],\n\t);\n\tconst visibleChips = selectedOpts.slice(0, 3);\n\tconst hiddenCount = Math.max(selectedOpts.length - 3, 0);\n\n\tfunction combineRefs(node: HTMLButtonElement | null) {\n\t\ttriggerRef.current = node;\n\t\tif (typeof ref === \"function\") ref(node);\n\t\telse if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = node;\n\t}\n\n\tfunction toggle(idx: number) {\n\t\tconst opt = options[idx];\n\t\tif (!opt) return;\n\t\tif (selectedSet.has(opt.value)) onChange(value.filter((v) => v !== opt.value));\n\t\telse onChange([...value, opt.value]);\n\t}\n\n\tfunction removeChip(v: string, e: React.MouseEvent) {\n\t\te.stopPropagation();\n\t\tonChange(value.filter((x) => x !== v));\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={combineRefs}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={`ds-atom-multiselect${className ? ` ${className}` : \"\"}`}\n\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"combobox\" on the <button> trigger so screen readers announce the listbox-popup pattern; native <select> doesn't support multi-value chip rendering\n\t\t\t\trole=\"combobox\"\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-controls={listId}\n\t\t\t\taria-activedescendant={open ? optionId(activeIndex) : undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tdata-state={open ? \"open\" : \"closed\"}\n\t\t\t\tonClick={() => !disabled && setOpen((o) => !o)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t<span className=\"ds-atom-multiselect-chips\">\n\t\t\t\t\t{selectedOpts.length === 0 ? (\n\t\t\t\t\t\t<span className=\"ds-atom-multiselect-placeholder\">{placeholder}</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{visibleChips.map((o) => (\n\t\t\t\t\t\t\t\t<span key={o.value} className=\"ds-atom-multiselect-chip\">\n\t\t\t\t\t\t\t\t\t<span>{o.label}</span>\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\taria-label={`Remove ${o.label}`}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-multiselect-chip-x\"\n\t\t\t\t\t\t\t\t\t\tonClick={(e) => removeChip(o.value, e)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X size={12} />\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t{hiddenCount > 0 ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tref={moreChipRef}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-multiselect-chip ds-atom-multiselect-chip-more\"\n\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tsetMoreOpen(true);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t+{hiddenCount} more\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t\t<ChevronDown\n\t\t\t\t\tsize={14}\n\t\t\t\t\tclassName={`ds-atom-multiselect-chevron${open ? \" is-open\" : \"\"}`}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t</button>\n\n\t\t\t<Popover anchorRef={moreChipRef} open={moreOpen} onOpenChange={setMoreOpen}>\n\t\t\t\t<div className=\"ds-atom-multiselect-more-list\">\n\t\t\t\t\t{selectedOpts.map((o) => (\n\t\t\t\t\t\t<div key={o.value} className=\"ds-atom-multiselect-more-item\">\n\t\t\t\t\t\t\t<span>{o.label}</span>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\taria-label={`Remove ${o.label}`}\n\t\t\t\t\t\t\t\tonClick={() => onChange(value.filter((x) => x !== o.value))}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<X size={12} />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</Popover>\n\n\t\t\t<DSDropdown\n\t\t\t\tanchorRef={triggerRef}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={setOpen}\n\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\tonActiveIndexChange={setActiveIndex}\n\t\t\t\titemCount={options.length}\n\t\t\t\tonSelect={toggle}\n\t\t\t\ttypeAheadGetText={(i) => options[i]?.label ?? \"\"}\n\t\t\t>\n\t\t\t\t{/* biome-ignore lint/a11y/useFocusableInteractive: listbox is not focusable - the combobox trigger owns focus and uses aria-activedescendant per WAI-ARIA combobox 1.2 */}\n\t\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: D-501 mandates <ul role=\"listbox\" aria-multiselectable> for the combobox panel - keyboard handled via aria-activedescendant on the trigger */}\n\t\t\t\t<ul\n\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: listbox role on a <ul> is the canonical combobox-popup pattern (react-aria, Radix MultiSelect)\n\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\tid={listId}\n\t\t\t\t\taria-multiselectable=\"true\"\n\t\t\t\t\tclassName=\"ds-atom-multiselect-list\"\n\t\t\t\t>\n\t\t\t\t\t{options.map((opt, i) => {\n\t\t\t\t\t\tconst sel = selectedSet.has(opt.value);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"option\" per WAI-ARIA combobox; <li> is canonical container inside <ul role=\"listbox\">\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: option role on <li> is the WAI-ARIA combobox pattern; activation happens via Enter on the combobox (forwarded to onSelect) - onClick is a mouse-equivalent affordance\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: option is reached via aria-activedescendant from the focused combobox; per WAI-ARIA pattern individual options must NOT be in the tab order\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: keyboard activation lives on the combobox (Enter→onSelect via DSDropdown), not on each option - the option's onClick is a redundant mouse-only affordance\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\tid={optionId(i)}\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"option\" per WAI-ARIA combobox; <li> is canonical container inside <ul role=\"listbox\">\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: option role on <li> is the canonical combobox-popup pattern (react-aria, Radix MultiSelect)\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={sel}\n\t\t\t\t\t\t\t\tclassName={`ds-atom-multiselect-option${i === activeIndex ? \" is-active\" : \"\"}${sel ? \" is-selected\" : \"\"}`}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\t\t\t\t\t\tonClick={() => toggle(i)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={`ds-atom-multiselect-checkbox${sel ? \" is-checked\" : \"\"}`}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{sel ? <Check size={11} /> : null}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span className=\"ds-atom-multiselect-option-label\">{opt.label}</span>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</ul>\n\t\t\t</DSDropdown>\n\t\t</>\n\t);\n});\n","import {\n\ttype CSSProperties,\n\ttype MutableRefObject,\n\tforwardRef,\n\tuseId,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { Check, ChevronDown } from \"../../icons\";\nexport interface SelectOption {\n\tvalue: string;\n\tlabel: string;\n\tdotColor?: string;\n}\n\nexport interface SelectProps {\n\t/** Controlled selected option value; pass `null` for no selection. */\n\tvalue: string | null;\n\t/** Called with the value string of the option the user selected. */\n\tonChange: (v: string) => void;\n\t/** Full list of options rendered in the dropdown. */\n\toptions: SelectOption[];\n\t/** Placeholder text shown in the trigger when no option is selected.\n\t * @default \"Select…\"\n\t */\n\tplaceholder?: string;\n\t/** When true, renders a search input at the top of the dropdown that filters options.\n\t * @default true\n\t */\n\tsearchable?: boolean;\n\t/** When true, disables the trigger button and prevents interaction.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional className applied to the trigger button. */\n\tclassName?: string;\n\t/** Inline styles applied to the trigger button. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Single-select dropdown (DS-50). Composes the internal DSDropdown helper\n * for portal/positioning/keyboard while wiring the listbox a11y per D-501:\n * trigger gets role=\"combobox\" + aria-expanded + aria-haspopup=\"listbox\" +\n * aria-controls + aria-activedescendant; panel renders <ul role=\"listbox\">\n * with <li role=\"option\" aria-selected> items.\n *\n * Searchable by default - when `searchable` and the option list >5 (or any),\n * a header search input filters by case-insensitive label substring; an\n * empty filtered result shows a \"No results\" empty state.\n *\n * Each option may carry an optional `dotColor` rendered as an 8×8 round\n * indicator before the label; the currently-selected option also gets a\n * trailing Check icon.\n *\n * Reuses .ds-atom-dropdown panel chrome from 16-01 - only .ds-atom-select\n * styling is added in this plan's primitives.css block.\n */\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\toptions,\n\t\tplaceholder = \"Select…\",\n\t\tsearchable = true,\n\t\tdisabled = false,\n\t\tclassName,\n\t\tstyle,\n\t},\n\tref,\n) {\n\tconst triggerRef = useRef<HTMLButtonElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\tconst [query, setQuery] = useState(\"\");\n\tconst listId = useId();\n\tconst optionIdBase = useId();\n\tconst optionId = (i: number) => `${optionIdBase}-${i}`;\n\n\tconst filtered = useMemo(() => {\n\t\tif (!searchable || query.trim() === \"\") return options;\n\t\tconst q = query.trim().toLowerCase();\n\t\treturn options.filter((o) => o.label.toLowerCase().includes(q));\n\t}, [options, searchable, query]);\n\n\tconst selected = options.find((o) => o.value === value);\n\n\tfunction combineRefs(node: HTMLButtonElement | null) {\n\t\ttriggerRef.current = node;\n\t\tif (typeof ref === \"function\") ref(node);\n\t\telse if (ref) (ref as MutableRefObject<HTMLButtonElement | null>).current = node;\n\t}\n\n\tfunction handleSelect(idx: number) {\n\t\tconst opt = filtered[idx];\n\t\tif (!opt) return;\n\t\tonChange(opt.value);\n\t\tsetOpen(false);\n\t\tsetQuery(\"\");\n\t}\n\n\tfunction handleOpenChange(next: boolean) {\n\t\tsetOpen(next);\n\t\tif (!next) setQuery(\"\");\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<button\n\t\t\t\tref={combineRefs}\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={`ds-atom-select${className ? ` ${className}` : \"\"}`}\n\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"combobox\" on the <button> trigger so screen readers announce the listbox-popup pattern; native <select> doesn't support our custom panel rendering\n\t\t\t\trole=\"combobox\"\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\taria-controls={listId}\n\t\t\t\taria-activedescendant={open && filtered.length > 0 ? optionId(activeIndex) : undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tdata-state={open ? \"open\" : \"closed\"}\n\t\t\t\tonClick={() => !disabled && setOpen((o) => !o)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t<span className=\"ds-atom-select-value\">\n\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{selected.dotColor ? (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-select-dot\"\n\t\t\t\t\t\t\t\t\tstyle={{ background: selected.dotColor }}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t{selected.label}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<span className=\"ds-atom-select-placeholder\">{placeholder}</span>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t\t<ChevronDown\n\t\t\t\t\tsize={14}\n\t\t\t\t\tclassName={`ds-atom-select-chevron${open ? \" is-open\" : \"\"}`}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t</button>\n\t\t\t<DSDropdown\n\t\t\t\tanchorRef={triggerRef}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\tonActiveIndexChange={setActiveIndex}\n\t\t\t\titemCount={filtered.length}\n\t\t\t\tonSelect={handleSelect}\n\t\t\t\ttypeAheadGetText={(i) => filtered[i]?.label ?? \"\"}\n\t\t\t>\n\t\t\t\t{searchable ? (\n\t\t\t\t\t<div className=\"ds-atom-select-search\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\tplaceholder=\"Search…\"\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tsetQuery(e.target.value);\n\t\t\t\t\t\t\t\tsetActiveIndex(0);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: focus moves to the search input on dropdown open per WAI-ARIA combobox pattern; without it, keyboard users would have to tab into the dropdown after opening\n\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\taria-label=\"Search options\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{filtered.length === 0 ? (\n\t\t\t\t\t<div className=\"ds-atom-select-empty\">No results</div>\n\t\t\t\t) : (\n\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates <ul role=\"listbox\"> for the combobox panel - keyboard navigation handled via aria-activedescendant on the trigger, so the list itself is not focusable (matches WAI-ARIA combobox pattern)\n\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: listbox role on a <ul> is the canonical combobox-popup pattern (react-aria, Radix Select)\n\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: listbox is not focusable - the combobox trigger owns focus and uses aria-activedescendant to point at the active option (WAI-ARIA combobox 1.2)\n\t\t\t\t\t<ul role=\"listbox\" id={listId} className=\"ds-atom-select-list\">\n\t\t\t\t\t\t{filtered.map((opt, i) => (\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"option\" per WAI-ARIA combobox; <li> is the canonical container inside <ul role=\"listbox\">\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: option role on <li> is the WAI-ARIA combobox pattern; activation happens via Enter on the combobox (forwarded to onSelect) - onClick is a mouse-equivalent affordance\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: option is reached via aria-activedescendant from the focused combobox; per WAI-ARIA pattern individual options must NOT be in the tab order\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: keyboard activation lives on the combobox (Enter→onSelect via DSDropdown), not on each option - the option's onClick is a redundant mouse-only affordance\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\t\t\tid={optionId(i)}\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: D-501 mandates role=\"option\" per WAI-ARIA combobox; <li> is the canonical container inside <ul role=\"listbox\">\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: option role on <li> is the canonical combobox-popup pattern (react-aria, Radix Select)\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={opt.value === value}\n\t\t\t\t\t\t\t\tclassName={`ds-atom-select-option${i === activeIndex ? \" is-active\" : \"\"}${\n\t\t\t\t\t\t\t\t\topt.value === value ? \" is-selected\" : \"\"\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\t\t\t\t\t\tonClick={() => handleSelect(i)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{opt.dotColor ? (\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-select-dot\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ background: opt.dotColor }}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t\t<span className=\"ds-atom-select-option-label\">{opt.label}</span>\n\t\t\t\t\t\t\t\t{opt.value === value ? (\n\t\t\t\t\t\t\t\t\t<Check size={14} className=\"ds-atom-select-check\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t)}\n\t\t\t</DSDropdown>\n\t\t</>\n\t);\n});\n","// DS-54 - DateRangePicker primitive (Phase 16 Wave 2 / plan 16-06).\n// v0.5.1 patch - single-calendar redesign per user feedback.\n// Composes ONE DatePicker instance; click flow stays identical:\n// 1st = start (clear end); 2nd = end (auto-swap if before start);\n// 3rd = reset to new start. Hover preview between selected start and\n// current hover via inRange prop on the inner DatePicker (between-state\n// cells get .is-in-range class). Overrides the original D-512 two-cal\n// layout - see .planning/phases/16-wave-5-compound-inputs/v0.5.1-feedback.md.\n// Source: design-handoff/design-system/ds-pickers.jsx (single-cal range).\n// v0.5.2 - both range endpoints (start + end) now render with the amber\n// selected marker via DatePicker.isCellSelected; previously only `end`\n// was marked, leaving start visually identical to in-range cells. Also\n// makes 1-day range (start === end) visually obvious as a single amber cell.\n// v0.5.3 - light-amber range bg now wraps under start/end pills via\n// isRangeStart/isRangeEnd modifier props (resolves notch artifact at endpoints).\nimport { type CSSProperties, forwardRef, useState } from \"react\";\nimport { isSameDay, isWithinRange } from \"../../_internals/dateUtils\";\nimport { DatePicker } from \"../DatePicker\";\nexport interface DateRange {\n\tstart: Date | null;\n\tend: Date | null;\n}\n\nexport interface DateRangePickerProps {\n\t/** Controlled range with `start` and `end` dates (either may be null while picking). */\n\tvalue: DateRange;\n\t/** Called on every click with the updated `{ start, end }` range object. */\n\tonChange: (r: DateRange) => void;\n\t/** When true, all dates before today are disabled.\n\t * @default false\n\t */\n\tdisablePast?: boolean;\n\t/** When true, all dates after today are disabled.\n\t * @default false\n\t */\n\tdisableFuture?: boolean;\n\t/** Additional className applied to the root wrapper element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root wrapper element. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Date-range picker (DS-54). Single calendar with click-twice flow:\n * 1st click = start (end cleared); 2nd click = end (auto-swap if before\n * start); 3rd click = reset to new start. Hover preview between selected\n * start and current hover styled via DatePicker's inRange predicate prop.\n * NO time picker for v2.0 (deferred to v2.1).\n *\n * Single-calendar redesign (v0.5.1) overrides the original D-512 two-cal\n * layout - matches handoff `ds-pickers.jsx` and user preference.\n */\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(\n\tfunction DateRangePicker(\n\t\t{ value, onChange, disablePast = false, disableFuture = false, className, style },\n\t\tref,\n\t) {\n\t\tconst [hoverDate, setHoverDate] = useState<Date | null>(null);\n\n\t\tfunction handleSelect(d: Date) {\n\t\t\tconst { start, end } = value;\n\t\t\t// 3rd click - full range exists → reset to new start.\n\t\t\tif (start && end) {\n\t\t\t\tonChange({ start: d, end: null });\n\t\t\t\tsetHoverDate(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// 1st click - no start → set start.\n\t\t\tif (!start) {\n\t\t\t\tonChange({ start: d, end: null });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// 2nd click - start exists, no end → set end (auto-swap if before start).\n\t\t\tif (d.getTime() < start.getTime()) {\n\t\t\t\tonChange({ start: d, end: start });\n\t\t\t} else {\n\t\t\t\tonChange({ start, end: d });\n\t\t\t}\n\t\t\tsetHoverDate(null);\n\t\t}\n\n\t\tfunction inRange(d: Date): boolean {\n\t\t\tconst { start, end } = value;\n\t\t\tif (start && end) {\n\t\t\t\treturn isWithinRange(d, start, end) && !isSameDay(d, start) && !isSameDay(d, end);\n\t\t\t}\n\t\t\t// Hover preview while picking end.\n\t\t\tif (start && !end && hoverDate) {\n\t\t\t\tconst lo = start.getTime() < hoverDate.getTime() ? start : hoverDate;\n\t\t\t\tconst hi = start.getTime() < hoverDate.getTime() ? hoverDate : start;\n\t\t\t\treturn isWithinRange(d, lo, hi) && !isSameDay(d, lo) && !isSameDay(d, hi);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\t// Drive controlled value to whichever endpoint is \"active\" - when end is\n\t\t// set, show end; otherwise show start (or null). The single calendar\n\t\t// renders all interaction.\n\t\tconst activeValue = value.end ?? value.start;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-daterangepicker${className ? ` ${className}` : \"\"}`}\n\t\t\t\tstyle={style}\n\t\t\t\tonMouseLeave={() => setHoverDate(null)}\n\t\t\t>\n\t\t\t\t<DatePicker\n\t\t\t\t\tvalue={activeValue}\n\t\t\t\t\tonChange={handleSelect}\n\t\t\t\t\tdisablePast={disablePast}\n\t\t\t\t\tdisableFuture={disableFuture}\n\t\t\t\t\tinRange={inRange}\n\t\t\t\t\tisCellSelected={(d) => {\n\t\t\t\t\t\tconst { start, end } = value;\n\t\t\t\t\t\tif (start && isSameDay(d, start)) return true;\n\t\t\t\t\t\tif (end && isSameDay(d, end)) return true;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}}\n\t\t\t\t\tisRangeStart={(d) => {\n\t\t\t\t\t\tconst { start, end } = value;\n\t\t\t\t\t\tif (!start || !end) return false;\n\t\t\t\t\t\tif (isSameDay(start, end)) return false; // 1-day range - no edge polish needed\n\t\t\t\t\t\treturn isSameDay(d, start);\n\t\t\t\t\t}}\n\t\t\t\t\tisRangeEnd={(d) => {\n\t\t\t\t\t\tconst { start, end } = value;\n\t\t\t\t\t\tif (!start || !end) return false;\n\t\t\t\t\t\tif (isSameDay(start, end)) return false;\n\t\t\t\t\t\treturn isSameDay(d, end);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nDateRangePicker.displayName = \"DateRangePicker\";\n","import { type CSSProperties, type ReactNode, useId, useRef, useState } from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { Clock } from \"../../icons\";\nexport interface AutocompleteProps<T> {\n\t/** Controlled text value of the input field. */\n\tvalue: string;\n\t/** Called on every keystroke with the new input string. */\n\tonValueChange: (q: string) => void;\n\t/** Consumer-filtered list of items to show; Autocomplete never filters internally. */\n\titems: T[];\n\t/** Optional array of recently-used items shown when the input is empty and focused. */\n\trecentItems?: T[];\n\t/** Called when the user selects an item from the dropdown. */\n\tonSelect: (item: T) => void;\n\t/** When provided, shows a \"+ Add …\" button when `items` is empty; called with the current query. */\n\tonCreate?: (query: string) => void;\n\t/** Extracts a display string from an item for rendering and type-ahead. */\n\tgetItemLabel: (item: T) => string;\n\t/** Extracts a unique React key string from an item. */\n\tgetItemKey: (item: T) => string;\n\t/** Custom render function for each option row; receives the item and whether it is keyboard-active. */\n\trenderItem?: (item: T, isActive: boolean) => ReactNode;\n\t/** Placeholder text shown in the empty input.\n\t * @default \"Search…\"\n\t */\n\tplaceholder?: string;\n\t/** Additional className applied to the underlying `<input>` element. */\n\tclassName?: string;\n\t/** Inline styles applied to the underlying `<input>` element. */\n\tstyle?: CSSProperties;\n}\n\n/**\n * Generic combobox primitive (DS-52, D-521). Consumer-filtered items +\n * optional recents + optional create-as-new. Composes DSDropdown helper.\n *\n * Filtering is consumer-controlled: caller filters `items` prop before\n * passing - Autocomplete never filters internally. Recents are also\n * consumer-provided (no internal localStorage) per D-521.\n *\n * Behavior:\n * - Empty input + focus + non-empty `recentItems` → dropdown shows\n * `RECENT` header + recent items prefixed with a Clock icon.\n * - Empty input + empty/absent `recentItems` → dropdown stays closed.\n * - Non-empty input + items=[] + `onCreate` provided → dropdown shows\n * a single `+ Add \"{query}\" as new` button outside the listbox\n * (plain `<button>`, NOT `role=option` - listbox semantic preserved).\n * - Non-empty input + items=[] + no `onCreate` → \"No results\" empty state.\n *\n * ARIA per D-501: native `<input>` trigger with `role=\"combobox\"`,\n * `aria-autocomplete=\"list\"`, `aria-expanded`, `aria-controls`.\n * Listbox uses `<ul role=\"listbox\">` + `<li role=\"option\">` items.\n */\nexport function Autocomplete<T>({\n\tvalue,\n\tonValueChange,\n\titems,\n\trecentItems,\n\tonSelect,\n\tonCreate,\n\tgetItemLabel,\n\tgetItemKey,\n\trenderItem,\n\tplaceholder = \"Search…\",\n\tclassName,\n\tstyle,\n}: AutocompleteProps<T>) {\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\tconst listId = useId();\n\tconst optionIdBase = useId();\n\tconst optionId = (i: number) => `${optionIdBase}-${i}`;\n\n\tconst queryEmpty = value.trim() === \"\";\n\tconst hasRecents = (recentItems?.length ?? 0) > 0;\n\tconst showRecents = open && queryEmpty && hasRecents;\n\tconst displayed = showRecents ? (recentItems as T[]) : items;\n\tconst showCreate = open && !queryEmpty && items.length === 0 && !!onCreate;\n\tconst showNoResults = open && !queryEmpty && items.length === 0 && !onCreate;\n\n\tconst itemCount = showCreate ? 0 : displayed.length;\n\n\tfunction handleFocus() {\n\t\tif (queryEmpty && hasRecents) setOpen(true);\n\t\telse if (!queryEmpty) setOpen(true);\n\t}\n\n\tfunction handleSelect(idx: number) {\n\t\tconst it = displayed[idx];\n\t\tif (it) {\n\t\t\tonSelect(it);\n\t\t\tsetOpen(false);\n\t\t}\n\t}\n\n\tfunction handleCreate() {\n\t\tif (onCreate) {\n\t\t\tonCreate(value);\n\t\t\tsetOpen(false);\n\t\t}\n\t}\n\n\tconst renderOption = (it: T, i: number) => (\n\t\t// biome-ignore lint/a11y/useFocusableInteractive: combobox listbox option is non-tabbable; aria-activedescendant on the input drives active-option focus per D-501\n\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: keyboard navigation centralized at document level in DSDropdown (ArrowUp/Down/Enter/Escape); onClick is the mouse equivalent\n\t\t<li\n\t\t\tkey={getItemKey(it)}\n\t\t\tid={optionId(i)}\n\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: combobox listbox option is non-tabbable; aria-activedescendant on the input drives active-option focus per D-501\n\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: D-501 mandates <li role=\"option\"> inside listbox\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: native <option> only valid inside <select>; combobox spec requires <li role=\"option\"> per D-501\n\t\t\trole=\"option\"\n\t\t\taria-selected={i === activeIndex}\n\t\t\tclassName={`ds-atom-autocomplete-option${i === activeIndex ? \" is-active\" : \"\"}`}\n\t\t\tonMouseEnter={() => setActiveIndex(i)}\n\t\t\tonClick={() => handleSelect(i)}\n\t\t>\n\t\t\t{showRecents ? (\n\t\t\t\t<Clock size={13} aria-hidden=\"true\" className=\"ds-atom-autocomplete-clock\" />\n\t\t\t) : null}\n\t\t\t{renderItem ? renderItem(it, i === activeIndex) : <span>{getItemLabel(it)}</span>}\n\t\t</li>\n\t);\n\n\tconst listbox = (\n\t\t// biome-ignore lint/a11y/useFocusableInteractive: combobox listbox is not focusable; aria-activedescendant on the input drives active-option focus per D-501\n\t\t<ul\n\t\t\tid={listId}\n\t\t\tclassName=\"ds-atom-autocomplete-list\"\n\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: combobox listbox is not focusable; aria-activedescendant on the input drives active-option focus per D-501\n\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: D-501 mandates <ul role=\"listbox\"> for combobox semantic\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: native <select> can't host combobox/listbox composition; ARIA listbox is the spec'd path per D-501\n\t\t\trole=\"listbox\"\n\t\t>\n\t\t\t{displayed.map((it, i) => renderOption(it, i))}\n\t\t</ul>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\ttype=\"text\"\n\t\t\t\tclassName={`ds-atom-autocomplete${className ? ` ${className}` : \"\"}`}\n\t\t\t\trole=\"combobox\"\n\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\taria-expanded={open}\n\t\t\t\taria-controls={listId}\n\t\t\t\taria-activedescendant={open && itemCount > 0 ? optionId(activeIndex) : undefined}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => {\n\t\t\t\t\tonValueChange(e.target.value);\n\t\t\t\t\tsetOpen(true);\n\t\t\t\t\tsetActiveIndex(0);\n\t\t\t\t}}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tstyle={style}\n\t\t\t/>\n\t\t\t<DSDropdown\n\t\t\t\tanchorRef={inputRef}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={setOpen}\n\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\tonActiveIndexChange={setActiveIndex}\n\t\t\t\titemCount={itemCount}\n\t\t\t\tonSelect={handleSelect}\n\t\t\t\ttypeAheadGetText={(i) => (displayed[i] ? getItemLabel(displayed[i]) : \"\")}\n\t\t\t>\n\t\t\t\t{showRecents ? <div className=\"ds-atom-autocomplete-section-header\">RECENT</div> : null}\n\t\t\t\t{showCreate ? (\n\t\t\t\t\t<button type=\"button\" className=\"ds-atom-autocomplete-create\" onClick={handleCreate}>\n\t\t\t\t\t\t+ Add \"{value}\" as new\n\t\t\t\t\t</button>\n\t\t\t\t) : showNoResults ? (\n\t\t\t\t\t<div className=\"ds-atom-autocomplete-empty\">No results</div>\n\t\t\t\t) : (\n\t\t\t\t\tlistbox\n\t\t\t\t)}\n\t\t\t</DSDropdown>\n\t\t</>\n\t);\n}\n","/**\n * # Usage Audit - SegmentedControl (DS-63, D-17-20)\n *\n * Consumers (post v0.6):\n * - Calendar (DS-68) - view-mode toggle (month/week/day)\n * - Consumer apps - 2-5 way visual toggles (filter, mode, view)\n *\n * API:\n * - options: SegmentedOption[] (2-5 typical; 6+ should use Select)\n * - value: string (controlled)\n * - onChange: (value) => void\n * - size: \"sm\" | \"md\" | \"lg\" (default md)\n * - disabled: boolean (group-level)\n * - ariaLabel: string (REQUIRED - radiogroup needs accessible name)\n *\n * Implementation:\n * - WAI-ARIA radiogroup pattern with automatic activation\n * - Arrow keys cycle + select; Home/End jump to ends\n * - Pill-shaped wrapper with amber-active option\n * - data-size, data-disabled, data-active for CSS state\n */\nimport { forwardRef, useCallback, useRef } from \"react\";\n\nexport interface SegmentedOption<T extends string = string> {\n\tvalue: T;\n\tlabel: string;\n\tdisabled?: boolean;\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n\toptions: SegmentedOption<T>[];\n\tvalue: T;\n\tonChange: (value: T) => void;\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\tdisabled?: boolean;\n\tariaLabel: string;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\n// biome-ignore lint/suspicious/noExplicitAny: forwardRef+generics requires this cast - TS cannot infer generic T through forwardRef's HOC boundary; cast is safe because inner function is fully typed.\nfunction SegmentedControlInner<T extends string>(\n\t{\n\t\toptions,\n\t\tvalue,\n\t\tonChange,\n\t\tsize = \"md\",\n\t\tdisabled = false,\n\t\tariaLabel,\n\t\tclassName,\n\t\tstyle,\n\t}: SegmentedControlProps<T>,\n\tref: React.Ref<HTMLDivElement>,\n) {\n\tconst wrapperRef = useRef<HTMLDivElement | null>(null);\n\n\tconst setRef = (node: HTMLDivElement | null) => {\n\t\twrapperRef.current = node;\n\t\tif (typeof ref === \"function\") ref(node);\n\t\telse if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\t};\n\n\t// Build list of enabled option indices for keyboard navigation\n\tconst enabledIndices = options\n\t\t.map((o, i) => (o.disabled ? -1 : i))\n\t\t.filter((i): i is number => i !== -1);\n\n\tconst activeIndex = options.findIndex((o) => o.value === value);\n\n\tconst move = useCallback(\n\t\t(delta: 1 | -1 | \"home\" | \"end\") => {\n\t\t\tif (disabled || enabledIndices.length === 0) return;\n\t\t\tconst currentEnabledPos = enabledIndices.indexOf(activeIndex);\n\t\t\tlet nextPos: number;\n\t\t\tif (delta === \"home\") nextPos = 0;\n\t\t\telse if (delta === \"end\") nextPos = enabledIndices.length - 1;\n\t\t\telse if (currentEnabledPos === -1) nextPos = 0;\n\t\t\telse nextPos = (currentEnabledPos + delta + enabledIndices.length) % enabledIndices.length;\n\t\t\tconst nextOptionIndex = enabledIndices[nextPos]!;\n\t\t\tconst nextOption = options[nextOptionIndex]!;\n\t\t\tonChange(nextOption.value);\n\t\t\t// Focus the newly-selected button (ARIA radiogroup automatic-activation pattern)\n\t\t\tconst buttons =\n\t\t\t\twrapperRef.current?.querySelectorAll<HTMLButtonElement>(\"button[role='radio']\");\n\t\t\tbuttons?.[nextOptionIndex]?.focus();\n\t\t},\n\t\t[activeIndex, enabledIndices, options, onChange, disabled],\n\t);\n\n\tconst onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\tif (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n\t\t\te.preventDefault();\n\t\t\tmove(1);\n\t\t} else if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n\t\t\te.preventDefault();\n\t\t\tmove(-1);\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\tmove(\"home\");\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\tmove(\"end\");\n\t\t}\n\t};\n\n\t// When value matches no option (uncontrolled edge-case), fallback tabIndex=0\n\t// to the first non-disabled option so the group remains keyboard-reachable.\n\tconst fallbackTabIndex = enabledIndices[0] ?? -1;\n\n\treturn (\n\t\t<div\n\t\t\tref={setRef}\n\t\t\trole=\"radiogroup\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={`ds-atom-segmented${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-size={size}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tonKeyDown={onKeyDown}\n\t\t>\n\t\t\t{options.map((opt, i) => {\n\t\t\t\tconst isActive = opt.value === value;\n\t\t\t\tconst tabIndex = activeIndex >= 0 ? (isActive ? 0 : -1) : i === fallbackTabIndex ? 0 : -1;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={opt.value}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: WAI-ARIA radiogroup pattern - buttons-in-radiogroup required for styled pill segments with data-active state; native <input type=\"radio\"> cannot be pill-shaped without hacks\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\taria-checked={isActive}\n\t\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\t\tdisabled={disabled || opt.disabled}\n\t\t\t\t\t\tdata-active={isActive ? \"true\" : undefined}\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tif (!disabled && !opt.disabled) onChange(opt.value);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName=\"ds-atom-segmented-btn\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{opt.label}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\n// TypeScript cannot propagate generic T through forwardRef's HOC boundary automatically.\n// This cast preserves the generic signature in consumers while using forwardRef internally.\nexport const SegmentedControl = forwardRef(SegmentedControlInner) as <T extends string>(\n\tprops: SegmentedControlProps<T> & { ref?: React.Ref<HTMLDivElement> },\n) => ReturnType<typeof SegmentedControlInner>;\n","/**\n * Breadcrumbs (DS-69)\n *\n * API:\n * - items: BreadcrumbItem[] (label + optional href + onClick)\n * - maxVisible: number (default 4 - show first + trigger + last (maxVisible-2))\n * - ariaLabel: string (default \"Breadcrumb\")\n *\n * Implementation:\n * - <nav><ol> with aria-current=\"page\" on last item per WAI-ARIA\n * - Truncation: middle items collapse into a DSDropdown trigger button\n * - ChevronRight separator from canonical /icons subpath\n */\nimport { type CSSProperties, forwardRef, useRef, useState } from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { ChevronRight, MoreHorizontal } from \"../../icons\";\nexport interface BreadcrumbItem {\n\tlabel: string;\n\thref?: string;\n\tonClick?: (e: React.MouseEvent) => void;\n}\n\nexport interface BreadcrumbsProps {\n\t/** Ordered list of breadcrumb items; last item is marked as the current page. */\n\titems: BreadcrumbItem[];\n\t/** Maximum items shown before collapsing middle items into a \"…\" overflow menu.\n\t * @default 4\n\t */\n\tmaxVisible?: number;\n\t/** Accessible label for the `<nav>` landmark.\n\t * @default \"Breadcrumb\"\n\t */\n\tariaLabel?: string;\n\t/** Additional className applied to the root `<nav>` element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root `<nav>` element. */\n\tstyle?: CSSProperties;\n}\n\ntype VisibleEntry =\n\t| { kind: \"item\"; data: BreadcrumbItem; index: number }\n\t| { kind: \"more\"; data: BreadcrumbItem[] };\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs(\n\t{ items, maxVisible = 4, ariaLabel = \"Breadcrumb\", className, style },\n\tref,\n) {\n\tconst [overflowOpen, setOverflowOpen] = useState(false);\n\tconst [activeIndex, setActiveIndex] = useState(0);\n\tconst moreBtnRef = useRef<HTMLButtonElement | null>(null);\n\n\t// Truncate only when we have strictly more items than maxVisible AND maxVisible >= 3\n\t// (need at least: first + trigger + 1 tail item; below 3 is unsupported)\n\tconst shouldTruncate = items.length > maxVisible && maxVisible >= 3;\n\n\t// Build the visible list:\n\t// - Normal: all items as-is\n\t// - Truncated: [first] [more-trigger w/ hidden items] [last (maxVisible-2) items]\n\tlet visible: VisibleEntry[];\n\tif (!shouldTruncate) {\n\t\tvisible = items.map((item, i) => ({ kind: \"item\" as const, data: item, index: i }));\n\t} else {\n\t\tconst first = items[0]!;\n\t\tconst tailCount = maxVisible - 2; // e.g. maxVisible=4 → 2 tail items\n\t\tconst tailStart = items.length - tailCount;\n\t\tconst hidden = items.slice(1, tailStart);\n\t\tconst tail = items.slice(tailStart);\n\t\tvisible = [\n\t\t\t{ kind: \"item\" as const, data: first, index: 0 },\n\t\t\t{ kind: \"more\" as const, data: hidden },\n\t\t\t...tail.map((item, i) => ({ kind: \"item\" as const, data: item, index: tailStart + i })),\n\t\t];\n\t}\n\n\tconst handleSelectHidden = (i: number, hidden: BreadcrumbItem[]) => {\n\t\tconst item = hidden[i];\n\t\tif (!item) return;\n\t\tif (item.onClick) {\n\t\t\titem.onClick({} as React.MouseEvent);\n\t\t} else if (item.href) {\n\t\t\twindow.location.href = item.href;\n\t\t}\n\t\tsetOverflowOpen(false);\n\t};\n\n\tconst totalVisible = visible.length;\n\n\treturn (\n\t\t<nav\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={`ds-atom-breadcrumbs${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t<ol className=\"ds-atom-breadcrumbs-list\">\n\t\t\t\t{visible.map((entry, idx) => {\n\t\t\t\t\tconst isLastVisible = idx === totalVisible - 1;\n\n\t\t\t\t\tif (entry.kind === \"more\") {\n\t\t\t\t\t\tconst hidden = entry.data;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<li key=\"__more__\" className=\"ds-atom-breadcrumbs-li\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tref={moreBtnRef}\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-breadcrumbs-more\"\n\t\t\t\t\t\t\t\t\taria-label={`Show ${hidden.length} hidden breadcrumb${hidden.length === 1 ? \"\" : \"s\"}`}\n\t\t\t\t\t\t\t\t\taria-expanded={overflowOpen}\n\t\t\t\t\t\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tsetActiveIndex(0);\n\t\t\t\t\t\t\t\t\t\tsetOverflowOpen((o) => !o);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<MoreHorizontal size={14} aria-hidden />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t{!isLastVisible && (\n\t\t\t\t\t\t\t\t\t<ChevronRight size={14} className=\"ds-atom-breadcrumbs-sep\" aria-hidden />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<DSDropdown\n\t\t\t\t\t\t\t\t\tanchorRef={moreBtnRef}\n\t\t\t\t\t\t\t\t\topen={overflowOpen}\n\t\t\t\t\t\t\t\t\tonOpenChange={setOverflowOpen}\n\t\t\t\t\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\t\t\t\t\tonActiveIndexChange={setActiveIndex}\n\t\t\t\t\t\t\t\t\titemCount={hidden.length}\n\t\t\t\t\t\t\t\t\tonSelect={(i) => handleSelectHidden(i, hidden)}\n\t\t\t\t\t\t\t\t\ttypeAheadGetText={(i) => hidden[i]?.label ?? \"\"}\n\t\t\t\t\t\t\t\t\tmatchAnchorWidth={false}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ul role=\"menu\" className=\"ds-atom-breadcrumbs-menu\">\n\t\t\t\t\t\t\t\t\t\t{hidden.map((h) => (\n\t\t\t\t\t\t\t\t\t\t\t<li key={h.label} className=\"ds-atom-breadcrumbs-menuitem\">\n\t\t\t\t\t\t\t\t\t\t\t\t{h.href ? (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thref={h.href}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\th.onClick?.(e);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{h.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\th.onClick?.({} as React.MouseEvent);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{h.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</DSDropdown>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Regular breadcrumb item\n\t\t\t\t\tconst item = entry.data;\n\t\t\t\t\tconst isCurrent = entry.index === items.length - 1;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li key={entry.index} className=\"ds-atom-breadcrumbs-li\">\n\t\t\t\t\t\t\t{item.href ? (\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\thref={item.href}\n\t\t\t\t\t\t\t\t\tonClick={item.onClick}\n\t\t\t\t\t\t\t\t\taria-current={isCurrent ? \"page\" : undefined}\n\t\t\t\t\t\t\t\t\tclassName={isCurrent ? \"ds-atom-breadcrumbs-current\" : \"ds-atom-breadcrumbs-link\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-current={isCurrent ? \"page\" : undefined}\n\t\t\t\t\t\t\t\t\tclassName={isCurrent ? \"ds-atom-breadcrumbs-current\" : \"ds-atom-breadcrumbs-text\"}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!isLastVisible && (\n\t\t\t\t\t\t\t\t<ChevronRight size={14} className=\"ds-atom-breadcrumbs-sep\" aria-hidden />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ol>\n\t\t</nav>\n\t);\n});\n","/**\n * Timeline (DS-66)\n *\n * API:\n * - events: TimelineEvent[] - { id, date, label, description?, color?, onClick? }\n * - orientation: \"horizontal\" | \"vertical\" (default horizontal)\n * - ariaLabel: string (default \"Timeline\")\n * - className / style passthrough\n *\n * Implementation:\n * - <ol> + <li> + <time dateTime=...> per WAI-ARIA time-sequence display\n * - Amber dot + connector line between events via CSS ::after pseudo-element (no extra DOM)\n * - Read-only by default; focusable + keyboard-activatable when event.onClick provided\n * - Dark-mode tokens applied - dot is amber, line is rule, label is ink\n */\nimport { type CSSProperties, forwardRef } from \"react\";\n\nexport interface TimelineEvent {\n\tid: string | number;\n\tdate: Date | string; // string interpreted as ISO\n\tlabel: string;\n\tdescription?: string;\n\tcolor?: string; // dot color override (default amber via CSS var)\n\tonClick?: () => void; // makes the event focusable + keyboard-activatable\n}\n\nexport interface TimelineProps {\n\t/** Ordered array of events rendered as dots connected by a line. */\n\tevents: TimelineEvent[];\n\t/** Layout direction of the timeline.\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n\t/** Additional className applied to the root `<ol>` element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root `<ol>` element. */\n\tstyle?: CSSProperties;\n\t/** Accessible label for the `<ol>` list.\n\t * @default \"Timeline\"\n\t */\n\tariaLabel?: string;\n}\n\nconst DATE_FMT = new Intl.DateTimeFormat(\"en-US\", {\n\tmonth: \"short\",\n\tday: \"numeric\",\n\tyear: \"numeric\",\n});\n\nfunction toDate(d: Date | string): Date {\n\treturn d instanceof Date ? d : new Date(d);\n}\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n\t{ events, orientation = \"horizontal\", className, style, ariaLabel = \"Timeline\" },\n\tref,\n) {\n\treturn (\n\t\t<ol\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={`ds-atom-timeline${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-orientation={orientation}\n\t\t>\n\t\t\t{events.map((ev) => {\n\t\t\t\tconst dateObj = toDate(ev.date);\n\t\t\t\tconst iso = dateObj.toISOString();\n\t\t\t\tconst formatted = DATE_FMT.format(dateObj);\n\n\t\t\t\tconst dot = (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"ds-atom-timeline-dot\"\n\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t);\n\n\t\t\t\tconst inner = (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{dot}\n\t\t\t\t\t\t<time dateTime={iso} className=\"ds-atom-timeline-date\">\n\t\t\t\t\t\t\t{formatted}\n\t\t\t\t\t\t</time>\n\t\t\t\t\t\t<span className=\"ds-atom-timeline-label\">{ev.label}</span>\n\t\t\t\t\t\t{ev.description ? (\n\t\t\t\t\t\t\t<span className=\"ds-atom-timeline-desc\">{ev.description}</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</>\n\t\t\t\t);\n\n\t\t\t\treturn (\n\t\t\t\t\t<li key={ev.id} className=\"ds-atom-timeline-event\">\n\t\t\t\t\t\t{ev.onClick ? (\n\t\t\t\t\t\t\t<button type=\"button\" onClick={ev.onClick} className=\"ds-atom-timeline-trigger\">\n\t\t\t\t\t\t\t\t{inner}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tinner\n\t\t\t\t\t\t)}\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ol>\n\t);\n});\n","/**\n * # Usage Audit - InfiniteList (DS-67)\n *\n * Consumers (post v0.6):\n * - Job listings, search results, message threads - any paginated feed\n * - NOT a virtualization wrapper - bring TanStack Virtual if needed\n *\n * API:\n * - items: T[] (consumer-managed; we don't slice or paginate internally)\n * - renderItem: (item, i) => ReactNode\n * - hasMore: boolean (consumer says \"fetch more available\")\n * - loading: boolean (consumer says \"fetch in flight\")\n * - onLoadMore: () => void (fires when sentinel intersects viewport)\n * - rootMargin: string (default \"200px\" - pre-fetch margin)\n * - loadingSlot, endSlot: optional consumer overrides\n *\n * Implementation:\n * - IntersectionObserver on a sentinel div at list bottom\n * - Observer only created when hasMore && !loading\n * - React 19 strict-mode safe - disconnect on cleanup\n *\n * Virtualization: NOT included. Consumer brings TanStack Virtual or similar.\n */\nimport { type CSSProperties, type ReactNode, forwardRef, useEffect, useRef } from \"react\";\nimport { Skeleton } from \"../../feedback/Skeleton\";\nexport interface InfiniteListProps<T = unknown> {\n\t/** Consumer-managed array of items; InfiniteList never slices or paginates internally. */\n\titems: T[];\n\t/** Render function called for each item; returns the list-item content. */\n\trenderItem: (item: T, index: number) => ReactNode;\n\t/** Whether more items are available to load; controls sentinel and end-slot visibility. */\n\thasMore: boolean;\n\t/** Whether a fetch is currently in flight; pauses the IntersectionObserver while true. */\n\tloading: boolean;\n\t/** Called when the sentinel element enters the viewport; consumer triggers the next page fetch. */\n\tonLoadMore: () => void;\n\t/** Custom loading indicator; replaces the default 3-Skeleton row. */\n\tloadingSlot?: ReactNode;\n\t/** Custom end-of-list message; replaces the default \"End of list\" text. */\n\tendSlot?: ReactNode;\n\t/** IntersectionObserver rootMargin for pre-fetching before the sentinel reaches the viewport.\n\t * @default \"200px\"\n\t */\n\trootMargin?: string;\n\t/** Additional className applied to the root `<ul>` element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root `<ul>` element. */\n\tstyle?: CSSProperties;\n\t/** Accessible label for the list region.\n\t * @default \"List\"\n\t */\n\tariaLabel?: string;\n}\n\nfunction buildClassName(base: string, extra?: string): string {\n\treturn extra ? `${base} ${extra}` : base;\n}\n\nfunction InfiniteListInner<T>(\n\t{\n\t\titems,\n\t\trenderItem,\n\t\thasMore,\n\t\tloading,\n\t\tonLoadMore,\n\t\tloadingSlot,\n\t\tendSlot,\n\t\trootMargin = \"200px\",\n\t\tclassName,\n\t\tstyle,\n\t\tariaLabel = \"List\",\n\t}: InfiniteListProps<T>,\n\tref: React.Ref<HTMLUListElement>,\n) {\n\tconst sentinelRef = useRef<HTMLLIElement | null>(null);\n\n\tuseEffect(() => {\n\t\tconst sentinel = sentinelRef.current;\n\t\tif (!sentinel) return;\n\t\tif (!hasMore || loading) return;\n\n\t\tconst io = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tif (entries[0]?.isIntersecting) {\n\t\t\t\t\tonLoadMore();\n\t\t\t\t}\n\t\t\t},\n\t\t\t{ rootMargin },\n\t\t);\n\t\tio.observe(sentinel);\n\t\treturn () => io.disconnect();\n\t}, [hasMore, loading, onLoadMore, rootMargin]);\n\n\treturn (\n\t\t<ul\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={buildClassName(\"ds-atom-infinitelist\", className)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{items.map((item, i) => (\n\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: consumer items lack stable keys; index is idiomatic for paginated feeds\n\t\t\t\t<li key={i} className=\"ds-atom-infinitelist-item\">\n\t\t\t\t\t{renderItem(item, i)}\n\t\t\t\t</li>\n\t\t\t))}\n\n\t\t\t{hasMore && (\n\t\t\t\t<>\n\t\t\t\t\t{loading &&\n\t\t\t\t\t\t(loadingSlot ?? (\n\t\t\t\t\t\t\t<li aria-hidden=\"true\" className=\"ds-atom-infinitelist-loading\">\n\t\t\t\t\t\t\t\t<Skeleton shape=\"text\" />\n\t\t\t\t\t\t\t\t<Skeleton shape=\"text\" />\n\t\t\t\t\t\t\t\t<Skeleton shape=\"text\" />\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t<li ref={sentinelRef} aria-hidden=\"true\" className=\"ds-atom-infinitelist-sentinel\" />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{!hasMore &&\n\t\t\t\t(endSlot ?? (\n\t\t\t\t\t<li className=\"ds-atom-infinitelist-end\" aria-live=\"polite\">\n\t\t\t\t\t\tEnd of list\n\t\t\t\t\t</li>\n\t\t\t\t))}\n\t\t</ul>\n\t);\n}\n\nexport const InfiniteList = forwardRef(InfiniteListInner) as <T>(\n\tprops: InfiniteListProps<T> & { ref?: React.Ref<HTMLUListElement> },\n) => ReturnType<typeof InfiniteListInner>;\n","/**\n * # Usage Audit - Accordion (DS-64)\n *\n * Consumers (post v0.6):\n * - FAQ pages, settings sections, doc accordions\n *\n * API:\n * - <Accordion mode=\"single\" | \"multi\">\n * <Accordion.Item id=\"...\" title=\"...\">{children}</Accordion.Item>\n * </Accordion>\n * - Controlled: openIds + onOpenIdsChange\n * - Uncontrolled: defaultOpenIds\n * - headingLevel per Item (2-6, default 3) - important for document outline\n *\n * Implementation:\n * - WAI-ARIA disclosure pattern (NOT tablist accordion antipattern)\n * - <h{N}><button aria-expanded></button></h{N}> + <div role=\"region\">\n * - useReducedMotion gates chevron + panel CSS transitions\n */\nimport {\n\tcreateContext,\n\tforwardRef,\n\tuseCallback,\n\tuseContext,\n\tuseId,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { ChevronDown } from \"../../icons\";\ninterface AccordionContextValue {\n\tmode: \"single\" | \"multi\";\n\topenIds: string[];\n\ttoggle: (id: string) => void;\n}\n\nconst AccordionContext = createContext<AccordionContextValue | null>(null);\n\nexport interface AccordionProps {\n\tmode?: \"single\" | \"multi\";\n\tdefaultOpenIds?: string[];\n\topenIds?: string[];\n\tonOpenIdsChange?: (ids: string[]) => void;\n\tchildren: React.ReactNode;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\nconst AccordionRoot = forwardRef<HTMLDivElement, AccordionProps>(function Accordion(\n\t{\n\t\tmode = \"single\",\n\t\tdefaultOpenIds,\n\t\topenIds: controlledOpenIds,\n\t\tonOpenIdsChange,\n\t\tchildren,\n\t\tclassName,\n\t\tstyle,\n\t},\n\tref,\n) {\n\tconst reducedMotion = useReducedMotion();\n\tconst [uncontrolled, setUncontrolled] = useState<string[]>(defaultOpenIds ?? []);\n\tconst isControlled = controlledOpenIds !== undefined;\n\tconst openIds = isControlled ? controlledOpenIds : uncontrolled;\n\n\tconst toggle = useCallback(\n\t\t(id: string) => {\n\t\t\tconst isOpen = openIds.includes(id);\n\t\t\tlet next: string[];\n\t\t\tif (mode === \"single\") {\n\t\t\t\tnext = isOpen ? [] : [id];\n\t\t\t} else {\n\t\t\t\tnext = isOpen ? openIds.filter((x) => x !== id) : [...openIds, id];\n\t\t\t}\n\t\t\tif (!isControlled) setUncontrolled(next);\n\t\t\tonOpenIdsChange?.(next);\n\t\t},\n\t\t[openIds, mode, isControlled, onOpenIdsChange],\n\t);\n\n\tconst ctx = useMemo<AccordionContextValue>(\n\t\t() => ({ mode, openIds, toggle }),\n\t\t[mode, openIds, toggle],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-accordion${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-reduced-motion={reducedMotion ? \"true\" : undefined}\n\t\t>\n\t\t\t<AccordionContext.Provider value={ctx}>{children}</AccordionContext.Provider>\n\t\t</div>\n\t);\n});\n\nexport interface AccordionItemProps {\n\tid: string;\n\ttitle: React.ReactNode;\n\theadingLevel?: 2 | 3 | 4 | 5 | 6;\n\tdisabled?: boolean;\n\tchildren: React.ReactNode;\n}\n\nconst HEADING_TAGS: Record<2 | 3 | 4 | 5 | 6, keyof React.JSX.IntrinsicElements> = {\n\t2: \"h2\",\n\t3: \"h3\",\n\t4: \"h4\",\n\t5: \"h5\",\n\t6: \"h6\",\n};\n\nfunction AccordionItem({\n\tid,\n\ttitle,\n\theadingLevel = 3,\n\tdisabled,\n\tchildren,\n}: Readonly<AccordionItemProps>) {\n\tconst ctx = useContext(AccordionContext);\n\tif (!ctx) throw new Error(\"Accordion.Item must be rendered inside <Accordion>\");\n\tconst open = ctx.openIds.includes(id);\n\tconst generatedId = useId();\n\tconst headerId = `${generatedId}-h`;\n\tconst panelId = `${generatedId}-p`;\n\n\tconst Heading = HEADING_TAGS[headingLevel];\n\n\treturn (\n\t\t<div className=\"ds-atom-accordion-item\" data-open={open || undefined}>\n\t\t\t<Heading className=\"ds-atom-accordion-heading\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tid={headerId}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\taria-controls={panelId}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => ctx.toggle(id)}\n\t\t\t\t\tclassName=\"ds-atom-accordion-trigger\"\n\t\t\t\t\tdata-open={open || undefined}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"ds-atom-accordion-title\">{title}</span>\n\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\tsize={16}\n\t\t\t\t\t\tclassName=\"ds-atom-accordion-chev\"\n\t\t\t\t\t\tdata-open={open ? \"true\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t</Heading>\n\t\t\t<section\n\t\t\t\tid={panelId}\n\t\t\t\taria-labelledby={headerId}\n\t\t\t\thidden={!open}\n\t\t\t\tclassName=\"ds-atom-accordion-panel\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</section>\n\t\t</div>\n\t);\n}\n\n// Compound API: Accordion.Item\nexport const Accordion = Object.assign(AccordionRoot, { Item: AccordionItem });\n","/**\n * # Usage Audit - Carousel (DS-65)\n *\n * Consumers (post v0.6):\n * - Marketing hero rotations: image galleries, tutorial steps, testimonial rotators\n *\n * API:\n * - slides: CarouselSlide[] - array of { id, content, ariaLabel? }\n * - index / defaultIndex / onIndexChange - controlled or uncontrolled position\n * - autoPlayInterval: number - ms between auto-advances; 0 = disabled\n * - showArrows: boolean - render Prev/Next arrow buttons (default true)\n * - showDots: boolean - render dot indicator tablist (default true)\n * - ariaLabel: string - accessible label for the carousel region\n *\n * Implementation:\n * - WAI-ARIA Carousel pattern: <section aria-roledescription=\"carousel\">\n * with <div role=\"group\" aria-roledescription=\"slide\"> per slide\n * - Dot tablist: role=\"tablist\" + role=\"tab\" buttons with aria-selected\n * - Touch swipe via Pointer Events with setPointerCapture (lifted from BottomSheet)\n * - touch-only filter via e.pointerType === \"touch\"\n * - Autoplay gated by useReducedMotion (W3C guidance: skip timer entirely when set)\n * - Pause on hover/focus per WAI-ARIA spec\n * - Keyboard: ArrowLeft/Right when carousel section has focus\n */\n\nimport { forwardRef, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\nimport { ChevronLeft, ChevronRight } from \"../../icons\";\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface CarouselSlide {\n\t/** Unique key for React + DOM identity. */\n\tid: string | number;\n\t/** Content to render inside the slide. Consumer controls markup and media. */\n\tcontent: React.ReactNode;\n\t/**\n\t * Override for the slide's aria-label. Defaults to \"{i+1} of {N}\".\n\t * Use when you have a more descriptive label (e.g. \"Product photo: Running shoe\").\n\t */\n\tariaLabel?: string;\n}\n\nexport interface CarouselProps {\n\t/** Array of slides to display. */\n\tslides: CarouselSlide[];\n\t/** Controlled current index. When provided, component is fully controlled. */\n\tindex?: number;\n\t/** Initial index when uncontrolled. Defaults to 0. */\n\tdefaultIndex?: number;\n\t/** Called when the active index changes (both controlled and uncontrolled). */\n\tonIndexChange?: (i: number) => void;\n\t/** Auto-advance interval in ms. 0 or undefined = no autoplay. Autoplay is\n\t * silently disabled when the OS prefers-reduced-motion preference is set. */\n\tautoPlayInterval?: number;\n\t/** Show Prev/Next arrow buttons. Defaults to true. */\n\tshowArrows?: boolean;\n\t/** Show dot indicator navigation. Defaults to true. */\n\tshowDots?: boolean;\n\t/** Accessible label for the carousel region (required). */\n\tariaLabel: string;\n\t/** Additional className for the root section element. */\n\tclassName?: string;\n\t/** Inline style for the root section element. */\n\tstyle?: React.CSSProperties;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport const Carousel = forwardRef<HTMLElement, CarouselProps>(function Carousel(\n\t{\n\t\tslides,\n\t\tindex: controlledIndex,\n\t\tdefaultIndex = 0,\n\t\tonIndexChange,\n\t\tautoPlayInterval = 0,\n\t\tshowArrows = true,\n\t\tshowDots = true,\n\t\tariaLabel,\n\t\tclassName,\n\t\tstyle,\n\t},\n\tref,\n) {\n\tconst reducedMotion = useReducedMotion();\n\n\t// ─── Controlled / uncontrolled state ──────────────────────────────────────\n\tconst [uncontrolled, setUncontrolled] = useState(defaultIndex);\n\tconst isControlled = controlledIndex !== undefined;\n\tconst index = isControlled ? controlledIndex : uncontrolled;\n\n\t// ─── Hover/focus pause state for autoplay ─────────────────────────────────\n\tconst [paused, setPaused] = useState(false);\n\n\t// ─── Navigation ──────────────────────────────────────────────────────────\n\tconst setIndex = useCallback(\n\t\t(i: number) => {\n\t\t\tconst clamped = Math.max(0, Math.min(slides.length - 1, i));\n\t\t\tif (!isControlled) setUncontrolled(clamped);\n\t\t\tonIndexChange?.(clamped);\n\t\t},\n\t\t[slides.length, isControlled, onIndexChange],\n\t);\n\n\tconst next = useCallback(() => setIndex(index + 1), [setIndex, index]);\n\tconst prev = useCallback(() => setIndex(index - 1), [setIndex, index]);\n\n\t// Autoplay advance wraps to 0 at the end\n\tconst advance = useCallback(() => {\n\t\tsetIndex(index >= slides.length - 1 ? 0 : index + 1);\n\t}, [setIndex, index, slides.length]);\n\n\t// ─── Autoplay timer ───────────────────────────────────────────────────────\n\t// W3C WAI-ARIA carousel guidance: if prefers-reduced-motion is set,\n\t// do NOT start the timer at all. Hover/focus pauses it.\n\tuseEffect(() => {\n\t\tif (!autoPlayInterval || reducedMotion || paused) return;\n\t\tconst id = window.setInterval(advance, autoPlayInterval);\n\t\treturn () => window.clearInterval(id);\n\t}, [autoPlayInterval, reducedMotion, paused, advance]);\n\n\t// ─── Touch swipe via Pointer Events ──────────────────────────────────────\n\t// Pattern lifted from BottomSheet.tsx (handleHandlePointerDown/Up).\n\t// Only fires for touch pointer type - preserves mouse click semantics.\n\tconst dragRef = useRef<{ startX: number; pointerId: number } | null>(null);\n\n\tconst onPointerDown = useCallback((e: React.PointerEvent<HTMLDivElement>) => {\n\t\tif (e.pointerType !== \"touch\") return;\n\t\tdragRef.current = { startX: e.clientX, pointerId: e.pointerId };\n\t\ttry {\n\t\t\t(e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\t\t} catch {\n\t\t\t// jsdom test envs and some older browsers may throw; safe to ignore.\n\t\t}\n\t}, []);\n\n\tconst onPointerUp = useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tconst s = dragRef.current;\n\t\t\tif (!s || s.pointerId !== e.pointerId) return;\n\t\t\tconst delta = e.clientX - s.startX;\n\t\t\ttry {\n\t\t\t\t(e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\n\t\t\t} catch {\n\t\t\t\t// pointer may already be released; ignore\n\t\t\t}\n\t\t\tdragRef.current = null;\n\t\t\tif (delta < -40) next();\n\t\t\telse if (delta > 40) prev();\n\t\t},\n\t\t[next, prev],\n\t);\n\n\t// ─── Keyboard handler ────────────────────────────────────────────────────\n\tconst onKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (e.key === \"ArrowLeft\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tprev();\n\t\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tnext();\n\t\t\t}\n\t\t},\n\t\t[prev, next],\n\t);\n\n\t// ─── Render ───────────────────────────────────────────────────────────────\n\treturn (\n\t\t<section\n\t\t\tref={ref}\n\t\t\taria-roledescription=\"carousel\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={`ds-atom-carousel${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tonMouseEnter={() => setPaused(true)}\n\t\t\tonMouseLeave={() => setPaused(false)}\n\t\t\tonFocus={() => setPaused(true)}\n\t\t\tonBlur={() => setPaused(false)}\n\t\t\tonKeyDown={onKeyDown}\n\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: section must be focusable for keyboard ArrowLeft/Right navigation per WAI-ARIA Carousel pattern\n\t\t\ttabIndex={0}\n\t\t>\n\t\t\t{/* Viewport - intercepts touch pointer events */}\n\t\t\t<div\n\t\t\t\tclassName=\"ds-atom-carousel-viewport\"\n\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\tonPointerUp={onPointerUp}\n\t\t\t\tonPointerCancel={onPointerUp}\n\t\t\t\taria-live={autoPlayInterval && !reducedMotion && !paused ? \"off\" : \"polite\"}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"ds-atom-carousel-track\"\n\t\t\t\t\tstyle={{ transform: `translateX(-${index * 100}%)` }}\n\t\t\t\t\tdata-reduced-motion={reducedMotion ? \"true\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t{slides.map((slide, i) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={slide.id}\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: role=\"group\" on <div> is the correct WAI-ARIA Carousel slide pattern; <fieldset> is semantically incorrect here\n\t\t\t\t\t\t\trole=\"group\"\n\t\t\t\t\t\t\taria-roledescription=\"slide\"\n\t\t\t\t\t\t\taria-label={slide.ariaLabel ?? `${i + 1} of ${slides.length}`}\n\t\t\t\t\t\t\taria-hidden={i !== index}\n\t\t\t\t\t\t\tclassName=\"ds-atom-carousel-slide\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{slide.content}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Arrow navigation */}\n\t\t\t{showArrows && (\n\t\t\t\t<>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Previous slide\"\n\t\t\t\t\t\tonClick={prev}\n\t\t\t\t\t\tdisabled={index === 0}\n\t\t\t\t\t\tclassName=\"ds-atom-carousel-arrow ds-atom-carousel-arrow-prev\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft size={20} aria-hidden=\"true\" />\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Next slide\"\n\t\t\t\t\t\tonClick={next}\n\t\t\t\t\t\tdisabled={index === slides.length - 1}\n\t\t\t\t\t\tclassName=\"ds-atom-carousel-arrow ds-atom-carousel-arrow-next\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight size={20} aria-hidden=\"true\" />\n\t\t\t\t\t</button>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{/* Dot indicator navigation */}\n\t\t\t{showDots && (\n\t\t\t\t<div\n\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\taria-label={`${ariaLabel} pagination`}\n\t\t\t\t\tclassName=\"ds-atom-carousel-dots\"\n\t\t\t\t>\n\t\t\t\t\t{slides.map((_, i) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: index is stable for dot nav - slides order is fixed during render\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\taria-selected={i === index}\n\t\t\t\t\t\t\taria-label={`Go to slide ${i + 1}`}\n\t\t\t\t\t\t\tonClick={() => setIndex(i)}\n\t\t\t\t\t\t\tclassName=\"ds-atom-carousel-dot\"\n\t\t\t\t\t\t\tdata-active={i === index || undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</section>\n\t);\n});\n","/**\n * # Usage Audit - Tabs (DS-62)\n *\n * Consumers (post v0.6):\n * - Settings sections, profile detail panels, dashboard switching\n *\n * API:\n * - tabs: TabItem[] - { id, label, count?, disabled?, content }\n * - value, onChange (controlled)\n * - variant: \"underline\" | \"pill\"\n * - activationMode: \"automatic\" | \"manual\"\n *\n * Implementation:\n * - WAI-ARIA tab pattern with auto activation default\n * - Arrow keys cycle focus + select; Home/End jump to ends\n * - Visual variants via data-variant CSS attribute\n * - Overflow menu via DSDropdown when tabs exceed container width (ResizeObserver)\n */\nimport {\n\ttype CSSProperties,\n\ttype ReactNode,\n\tforwardRef,\n\tuseCallback,\n\tuseId,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { MoreHorizontal } from \"../../icons\";\n// ── Public interfaces ─────────────────────────────────────────────────────────\n\nexport interface TabItem {\n\tid: string;\n\tlabel: string;\n\tcount?: number;\n\tdisabled?: boolean;\n\tcontent: ReactNode;\n}\n\nexport interface TabsProps {\n\t/** Array of tab definitions including id, label, optional count badge, disabled flag, and panel content. */\n\ttabs: TabItem[];\n\t/** Controlled id of the currently active tab. */\n\tvalue: string;\n\t/** Called with the tab id when the user activates a different tab. */\n\tonChange: (id: string) => void;\n\t/** Visual style of the tab triggers.\n\t * @default \"underline\"\n\t */\n\tvariant?: \"underline\" | \"pill\";\n\t/** Whether selecting a tab happens on arrow-key press (`\"automatic\"`) or only on Enter/Space (`\"manual\"`).\n\t * @default \"automatic\"\n\t */\n\tactivationMode?: \"automatic\" | \"manual\";\n\t/** Accessible label for the `role=\"tablist\"` element (required). */\n\tariaLabel: string;\n\t/** Additional className applied to the root wrapper element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root wrapper element. */\n\tstyle?: CSSProperties;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n\t{\n\t\ttabs,\n\t\tvalue,\n\t\tonChange,\n\t\tvariant = \"underline\",\n\t\tactivationMode = \"automatic\",\n\t\tariaLabel,\n\t\tclassName,\n\t\tstyle,\n\t},\n\tref,\n) {\n\tconst baseId = useId();\n\tconst rootRef = useRef<HTMLDivElement | null>(null);\n\tconst tablistRef = useRef<HTMLDivElement | null>(null);\n\tconst moreBtnRef = useRef<HTMLButtonElement | null>(null);\n\n\t// Overflow state\n\tconst [visibleCount, setVisibleCount] = useState(tabs.length);\n\tconst [overflowOpen, setOverflowOpen] = useState(false);\n\tconst [overflowActiveIndex, setOverflowActiveIndex] = useState(0);\n\n\t// ResizeObserver - compute how many tabs fit in the available width.\n\t//\n\t// Key: we observe the ROOT element (stable container width), NOT the\n\t// tablist itself. The tablist shrinks when fewer tabs render, which\n\t// would cause a ResizeObserver feedback loop if observed directly.\n\t//\n\t// Two-pass algorithm prevents the \"More appears → layout shifts →\n\t// More disappears\" oscillation:\n\t// Pass 1 - does every tab fit with no More button?\n\t// Pass 2 - if not, reserve MORE_WIDTH before measuring.\n\tuseLayoutEffect(() => {\n\t\tif (!rootRef.current || !tablistRef.current) return;\n\t\tconst root = rootRef.current;\n\t\tconst tablist = tablistRef.current;\n\t\tconst MORE_WIDTH = 44;\n\n\t\tconst measure = () => {\n\t\t\tconst containerWidth = root.clientWidth;\n\t\t\t// Query ALL tab buttons - even hidden ones - by querying original tabs\n\t\t\t// count. We always render all tabs initially then hide via visibleCount.\n\t\t\t// Use stored widths by measuring while all are in DOM on first pass.\n\t\t\tconst tabButtons = Array.from(tablist.querySelectorAll<HTMLButtonElement>(\"[role='tab']\"));\n\n\t\t\t// Total width of all currently-visible tab buttons (may be a subset)\n\t\t\t// Add an estimated width for hidden tabs using average of visible ones.\n\t\t\tconst visibleTotal = tabButtons.reduce((s, b) => s + b.offsetWidth, 0);\n\t\t\tconst avgWidth = tabButtons.length > 0 ? visibleTotal / tabButtons.length : 0;\n\t\t\tconst estimatedTotal = visibleTotal + avgWidth * (tabs.length - tabButtons.length);\n\n\t\t\t// Pass 1: all tabs fit?\n\t\t\tif (estimatedTotal <= containerWidth) {\n\t\t\t\tsetVisibleCount(tabs.length);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Pass 2: overflow - fit as many as possible within available width\n\t\t\tconst available = containerWidth - MORE_WIDTH;\n\t\t\tlet cumulative = 0;\n\t\t\tlet nextVisible = 0;\n\t\t\tfor (const btn of tabButtons) {\n\t\t\t\tif (cumulative + btn.offsetWidth > available) break;\n\t\t\t\tcumulative += btn.offsetWidth;\n\t\t\t\tnextVisible += 1;\n\t\t\t}\n\t\t\tsetVisibleCount(nextVisible);\n\t\t};\n\n\t\tconst ro = new ResizeObserver(measure);\n\t\tro.observe(root);\n\t\treturn () => ro.disconnect();\n\t}, [tabs.length]);\n\n\t// ID helpers\n\tconst tabId = (id: string) => `${baseId}-tab-${id}`;\n\tconst panelId = (id: string) => `${baseId}-panel-${id}`;\n\n\t// Determine enabled (non-disabled) tab indices in the VISIBLE slice\n\tconst activeIndex = tabs.findIndex((t) => t.id === value);\n\n\tconst moveFocus = useCallback(\n\t\t(delta: 1 | -1 | \"home\" | \"end\", activate: boolean) => {\n\t\t\tconst visibleTabs = tabs.slice(0, visibleCount);\n\t\t\tconst enabled = visibleTabs\n\t\t\t\t.map((t, i) => (t.disabled ? -1 : i))\n\t\t\t\t.filter((i): i is number => i !== -1);\n\t\t\tif (enabled.length === 0) return;\n\t\t\tconst curInEnabled = enabled.indexOf(activeIndex);\n\t\t\tlet nextInEnabled: number;\n\t\t\tif (delta === \"home\") nextInEnabled = 0;\n\t\t\telse if (delta === \"end\") nextInEnabled = enabled.length - 1;\n\t\t\telse if (curInEnabled === -1) nextInEnabled = 0;\n\t\t\telse nextInEnabled = (curInEnabled + delta + enabled.length) % enabled.length;\n\t\t\tconst nextTabIndex = enabled[nextInEnabled]!;\n\t\t\tconst nextTab = tabs[nextTabIndex]!;\n\t\t\t// Move DOM focus\n\t\t\tconst buttons = tablistRef.current?.querySelectorAll<HTMLButtonElement>(\"[role='tab']\");\n\t\t\tbuttons?.[nextTabIndex]?.focus();\n\t\t\tif (activate) onChange(nextTab.id);\n\t\t},\n\t\t[activeIndex, tabs, visibleCount, onChange],\n\t);\n\n\tconst onKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\tconst auto = activationMode === \"automatic\";\n\t\tif (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tmoveFocus(1, auto);\n\t\t} else if (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tmoveFocus(-1, auto);\n\t\t} else if (e.key === \"Home\") {\n\t\t\te.preventDefault();\n\t\t\tmoveFocus(\"home\", auto);\n\t\t} else if (e.key === \"End\") {\n\t\t\te.preventDefault();\n\t\t\tmoveFocus(\"end\", auto);\n\t\t}\n\t};\n\n\tconst hasOverflow = visibleCount < tabs.length;\n\tconst hiddenTabs = tabs.slice(visibleCount);\n\n\treturn (\n\t\t<div\n\t\t\tref={(node) => {\n\t\t\t\trootRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\t\telse if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\t\t\t}}\n\t\t\tclassName={`ds-atom-tabs${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-variant={variant}\n\t\t>\n\t\t\t{/* Tablist */}\n\t\t\t<div\n\t\t\t\tref={tablistRef}\n\t\t\t\trole=\"tablist\"\n\t\t\t\taria-orientation=\"horizontal\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName=\"ds-atom-tabs-list\"\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t>\n\t\t\t\t{tabs.slice(0, visibleCount).map((t) => {\n\t\t\t\t\tconst isActive = t.id === value;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={t.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\t\tid={tabId(t.id)}\n\t\t\t\t\t\t\taria-selected={isActive}\n\t\t\t\t\t\t\taria-controls={panelId(t.id)}\n\t\t\t\t\t\t\ttabIndex={isActive ? 0 : -1}\n\t\t\t\t\t\t\tdisabled={t.disabled}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (!t.disabled) onChange(t.id);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"ds-atom-tabs-trigger\"\n\t\t\t\t\t\t\tdata-active={isActive || undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"ds-atom-tabs-label\">{t.label}</span>\n\t\t\t\t\t\t\t{typeof t.count === \"number\" && <span className=\"ds-atom-tabs-count\">{t.count}</span>}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\n\t\t\t\t{/* More button - part of the tablist keyboard cycle */}\n\t\t\t\t{hasOverflow && (\n\t\t\t\t\t<button\n\t\t\t\t\t\tref={moreBtnRef}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName=\"ds-atom-tabs-more\"\n\t\t\t\t\t\taria-label={`More tabs (${hiddenTabs.length} hidden)`}\n\t\t\t\t\t\taria-expanded={overflowOpen}\n\t\t\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\t\t\tonClick={() => setOverflowOpen((o) => !o)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MoreHorizontal size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Overflow dropdown - portal-mounted via DSDropdown */}\n\t\t\t{hasOverflow && (\n\t\t\t\t<DSDropdown\n\t\t\t\t\tanchorRef={moreBtnRef}\n\t\t\t\t\topen={overflowOpen}\n\t\t\t\t\tonOpenChange={setOverflowOpen}\n\t\t\t\t\tactiveIndex={overflowActiveIndex}\n\t\t\t\t\tonActiveIndexChange={setOverflowActiveIndex}\n\t\t\t\t\titemCount={hiddenTabs.length}\n\t\t\t\t\tonSelect={(i) => {\n\t\t\t\t\t\tconst hiddenTab = hiddenTabs[i];\n\t\t\t\t\t\tif (hiddenTab && !hiddenTab.disabled) {\n\t\t\t\t\t\t\tonChange(hiddenTab.id);\n\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\ttypeAheadGetText={(i) => hiddenTabs[i]?.label ?? \"\"}\n\t\t\t\t\tmatchAnchorWidth={false}\n\t\t\t\t>\n\t\t\t\t\t<ul role=\"menu\" className=\"ds-atom-tabs-overflow-menu\">\n\t\t\t\t\t\t{hiddenTabs.map((t, i) => (\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: the WAI-ARIA menu pattern delegates focus to the child <button>; the menuitem wrapper div is intentionally not focusable - keyboard activation goes through the button\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: div[role=menuitem] inside ul[role=menu] is the canonical pattern when a focusable child (<button>) exists inside the menuitem\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={t.id}\n\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\tdata-active={overflowActiveIndex === i || undefined}\n\t\t\t\t\t\t\t\tclassName=\"ds-atom-tabs-overflow-item\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tdisabled={t.disabled}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tonChange(t.id);\n\t\t\t\t\t\t\t\t\t\tsetOverflowOpen(false);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{t.label}</span>\n\t\t\t\t\t\t\t\t\t{typeof t.count === \"number\" && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"ds-atom-tabs-count\">{t.count}</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</DSDropdown>\n\t\t\t)}\n\n\t\t\t{/* Tab panels - all kept mounted; hidden attribute controls visibility */}\n\t\t\t{tabs.map((t) => {\n\t\t\t\tconst isActive = t.id === value;\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={t.id}\n\t\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\t\tid={panelId(t.id)}\n\t\t\t\t\t\taria-labelledby={tabId(t.id)}\n\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: WAI-ARIA tabpanel requires tabIndex=0 so keyboard users can Tab into panel content (w3.org/WAI/ARIA/apg/patterns/tabs/)\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\thidden={!isActive}\n\t\t\t\t\t\tclassName=\"ds-atom-tabs-panel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{isActive ? t.content : null}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n","/**\n * # Usage Audit - Table (DS-61, D-17-06..D-17-12)\n *\n * Compound API:\n * <Table.Root density=\"comfortable\" sticky ariaLabel=\"Users\">\n * <Table.Header>\n * <Table.Row>\n * <Table.SelectAllCell isAllSelected={isAll} isIndeterminate={isIndet} onToggleAll={toggleAll} />\n * <Table.HeaderCell\n * sortable\n * sortDir={sortCol === \"name\" ? sortDir : null}\n * onToggleSort={() => toggleSort(\"name\")}\n * resizable\n * width={widths.name}\n * onResizeStart={(e) => startResize(\"name\", e)}\n * >\n * Name\n * </Table.HeaderCell>\n * </Table.Row>\n * </Table.Header>\n * <Table.Body>\n * {sorted.map(row => (\n * <Table.Row key={row.id} selected={isSelected(row.id)}>\n * <Table.SelectCell selected={isSelected(row.id)} onToggle={() => toggle(row.id)} />\n * <Table.Cell>{row.name}</Table.Cell>\n * </Table.Row>\n * ))}\n * </Table.Body>\n * </Table.Root>\n * <Table.Pagination page={p} pageCount={n} onPageChange={setP} />\n *\n * Helper hooks:\n * useSortableTable - plan 17-10 (DS-61 part 1)\n * useTableSelection / useResizableColumns - plan 17-11 (DS-61 part 2)\n *\n * Sort indicator: UTF-8 ▲/▼ at ~9px monospace per D-17-07 (not Lucide icons).\n * Sticky: Table.Root sticky prop → data-sticky=\"true\" → CSS position:sticky on thead.\n * Density: Table.Root density prop → data-density attr → CSS row-height variants.\n */\n\nimport { type KeyboardEventHandler, type MouseEventHandler, forwardRef } from \"react\";\nimport { Button } from \"../../inputs/Button\";\nimport { Checkbox } from \"../../inputs/Checkbox\";\n// ── className helper ──────────────────────────────────────────────────────────\n\n/** Compose a base BEM class with an optional extra className from props. */\nfunction cls(base: string, extra?: string): string {\n\treturn extra ? `${base} ${extra}` : base;\n}\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface TableRootProps extends React.TableHTMLAttributes<HTMLTableElement> {\n\t/** Row height density mode. Default: \"comfortable\" (40px). */\n\tdensity?: \"cozy\" | \"comfortable\" | \"spacious\";\n\t/** When true, <thead> becomes position:sticky so the header stays visible on scroll. */\n\tsticky?: boolean;\n\t/** Accessible label for the table (renders as aria-label). */\n\tariaLabel?: string;\n\t/** When true, sets aria-multiselectable=\"true\" for multi-row selection (D-17-09). */\n\tmultiSelectable?: boolean;\n}\n\nexport interface TableHeaderCellProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n\t/** Enables click-to-sort behaviour, keyboard activation, and aria-sort. */\n\tsortable?: boolean;\n\t/**\n\t * Current sort direction for this column.\n\t * null (or undefined) → unsorted → aria-sort=\"none\", no chevron.\n\t */\n\tsortDir?: \"asc\" | \"desc\" | null;\n\t/** Callback fired on click or Enter/Space keydown when sortable. */\n\tonToggleSort?: () => void;\n\t/** When true, renders a drag handle on the right edge for column resizing (D-17-10). */\n\tresizable?: boolean;\n\t/** Called on pointerdown of the resize handle. Wire to useResizableColumns.startResize. */\n\tonResizeStart?: (e: React.PointerEvent<HTMLSpanElement>) => void;\n\t/** When provided, sets the column width inline (used with useResizableColumns). */\n\twidth?: number;\n}\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n\t/** When true, sets aria-selected + data-selected for CSS highlight (D-17-09). */\n\tselected?: boolean;\n}\n\nexport interface TableSelectAllCellProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n\tisAllSelected: boolean;\n\tisIndeterminate: boolean;\n\tonToggleAll: () => void;\n\tariaLabel?: string;\n}\n\nexport interface TableSelectCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n\tselected: boolean;\n\tonToggle: () => void;\n\tariaLabel?: string;\n}\n\n/**\n * Render `<Table.Pagination />` as a SIBLING of `<Table.Root>`, NOT as a child.\n * Pagination produces a `<nav>` element, and `<nav>` inside `<table>` (or any of\n * its descendants except `<caption>`) is invalid HTML - browsers will silently\n * hoist or strip it, and assistive tech may report inconsistent landmarks.\n *\n * GOOD:\n * <div>\n * <Table.Root>...</Table.Root>\n * <Table.Pagination page={p} pageCount={n} onPageChange={setP} />\n * </div>\n *\n * BAD:\n * <Table.Root>\n * <Table.Body>\n * <Table.Row><Table.Cell colSpan={5}>\n * <Table.Pagination ... /> // invalid: <nav> inside <table>\n * </Table.Cell></Table.Row>\n * </Table.Body>\n * </Table.Root>\n *\n * Demonstrated in the `PaginationOutsideTable` Storybook story.\n */\nexport interface TablePaginationProps {\n\tpage: number;\n\tpageCount: number;\n\tonPageChange: (page: number) => void;\n\tpageSize?: number;\n\ttotal?: number;\n\tariaLabel?: string;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\n// ── Pagination truncation ─────────────────────────────────────────────────────\n\nfunction paginationRange(current: number, total: number): (number | \"ellipsis\")[] {\n\tif (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\n\tif (current <= 4) return [1, 2, 3, 4, 5, \"ellipsis\", total];\n\tif (current >= total - 3)\n\t\treturn [1, \"ellipsis\", total - 4, total - 3, total - 2, total - 1, total];\n\treturn [1, \"ellipsis\", current - 1, current, current + 1, \"ellipsis\", total];\n}\n\n// ── TableRoot ─────────────────────────────────────────────────────────────────\n\nexport const TableRoot = forwardRef<HTMLTableElement, TableRootProps>(function TableRoot(\n\t{ density = \"comfortable\", sticky, ariaLabel, multiSelectable, className, children, ...rest },\n\tref,\n) {\n\treturn (\n\t\t<table\n\t\t\tref={ref}\n\t\t\taria-label={ariaLabel}\n\t\t\taria-multiselectable={multiSelectable || undefined}\n\t\t\tclassName={cls(\"ds-atom-table\", className)}\n\t\t\tdata-density={density}\n\t\t\tdata-sticky={sticky ? \"true\" : undefined}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{children}\n\t\t</table>\n\t);\n});\n\n// ── TableHeader ───────────────────────────────────────────────────────────────\n\nexport const TableHeader = forwardRef<\n\tHTMLTableSectionElement,\n\tReact.HTMLAttributes<HTMLTableSectionElement>\n>(function TableHeader({ className, ...props }, ref) {\n\treturn <thead ref={ref} className={cls(\"ds-atom-table-header\", className)} {...props} />;\n});\n\n// ── TableHeaderCell ───────────────────────────────────────────────────────────\n\nexport const TableHeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n\tfunction TableHeaderCell(\n\t\t{\n\t\t\tsortable,\n\t\t\tsortDir,\n\t\t\tonToggleSort,\n\t\t\tresizable,\n\t\t\tonResizeStart,\n\t\t\twidth,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tonKeyDown,\n\t\t\tonClick,\n\t\t\tstyle,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) {\n\t\tconst widthStyle: React.CSSProperties =\n\t\t\twidth != null ? { width: `${width}px`, minWidth: `${width}px`, ...style } : (style ?? {});\n\t\tconst resolvedStyle = Object.keys(widthStyle).length > 0 ? widthStyle : undefined;\n\n\t\t// Resize handle: visual affordance only - aria-hidden keeps it out of the\n\t\t// accessibility tree. role=\"separator\" is intentionally omitted: biome's\n\t\t// a11y/useSemanticElements would require <hr>, which is wrong for a drag target.\n\t\tconst resizeHandle = resizable ? (\n\t\t\t<span\n\t\t\t\tclassName=\"ds-atom-table-resize-handle\"\n\t\t\t\tonPointerDown={onResizeStart}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t/>\n\t\t) : null;\n\n\t\tif (sortable) {\n\t\t\tlet ariaSort: \"ascending\" | \"descending\" | \"none\";\n\t\t\tif (sortDir === \"asc\") {\n\t\t\t\tariaSort = \"ascending\";\n\t\t\t} else if (sortDir === \"desc\") {\n\t\t\t\tariaSort = \"descending\";\n\t\t\t} else {\n\t\t\t\tariaSort = \"none\";\n\t\t\t}\n\n\t\t\tlet indicator: string;\n\t\t\tif (sortDir === \"asc\") {\n\t\t\t\tindicator = \"▲\";\n\t\t\t} else if (sortDir === \"desc\") {\n\t\t\t\tindicator = \"▼\";\n\t\t\t} else {\n\t\t\t\tindicator = \"\";\n\t\t\t}\n\n\t\t\tconst handleKeyDown: KeyboardEventHandler<HTMLTableCellElement> = (e) => {\n\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonToggleSort?.();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t};\n\n\t\t\tconst handleClick: MouseEventHandler<HTMLTableCellElement> = (e) => {\n\t\t\t\tonToggleSort?.();\n\t\t\t\tonClick?.(e);\n\t\t\t};\n\n\t\t\treturn (\n\t\t\t\t<th\n\t\t\t\t\tref={ref}\n\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: ARIA spec requires tabIndex=0 on sortable <th> for keyboard activation (D-17-07; WAI-ARIA columnheader pattern)\n\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: scope=\"col\" cannot carry aria-sort + tabIndex; explicit role=\"columnheader\" is required for the interactive sort pattern\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t\trole=\"columnheader\"\n\t\t\t\t\taria-sort={ariaSort}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tclassName={cls(\"ds-atom-table-headercell ds-atom-table-headercell-sortable\", className)}\n\t\t\t\t\tstyle={resolvedStyle}\n\t\t\t\t\t{...rest}\n\t\t\t\t>\n\t\t\t\t\t<span className=\"ds-atom-table-headercell-label\">{children}</span>\n\t\t\t\t\t<span className=\"ds-atom-table-sort-indicator\" aria-hidden=\"true\">\n\t\t\t\t\t\t{indicator}\n\t\t\t\t\t</span>\n\t\t\t\t\t{resizeHandle}\n\t\t\t\t</th>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<th\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cls(\"ds-atom-table-headercell\", className)}\n\t\t\t\tstyle={resolvedStyle}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t{resizeHandle}\n\t\t\t</th>\n\t\t);\n\t},\n);\n\n// ── TableBody ─────────────────────────────────────────────────────────────────\n\nexport const TableBody = forwardRef<\n\tHTMLTableSectionElement,\n\tReact.HTMLAttributes<HTMLTableSectionElement>\n>(function TableBody({ className, ...props }, ref) {\n\treturn <tbody ref={ref} className={cls(\"ds-atom-table-body\", className)} {...props} />;\n});\n\n// ── TableRow ──────────────────────────────────────────────────────────────────\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n\t{ className, selected, ...props },\n\tref,\n) {\n\treturn (\n\t\t<tr\n\t\t\tref={ref}\n\t\t\tclassName={cls(\"ds-atom-table-row\", className)}\n\t\t\taria-selected={selected ? true : undefined}\n\t\t\tdata-selected={selected ? \"true\" : undefined}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\n\n// ── TableCell ─────────────────────────────────────────────────────────────────\n\nexport const TableCell = forwardRef<\n\tHTMLTableCellElement,\n\tReact.TdHTMLAttributes<HTMLTableCellElement>\n>(function TableCell({ className, ...props }, ref) {\n\treturn <td ref={ref} className={cls(\"ds-atom-table-cell\", className)} {...props} />;\n});\n\n// ── TableSelectAllCell ────────────────────────────────────────────────────────\n\nexport const TableSelectAllCell = forwardRef<HTMLTableCellElement, TableSelectAllCellProps>(\n\tfunction TableSelectAllCell(\n\t\t{\n\t\t\tisAllSelected,\n\t\t\tisIndeterminate,\n\t\t\tonToggleAll,\n\t\t\tariaLabel = \"Select all rows\",\n\t\t\tclassName,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<th\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cls(\"ds-atom-table-headercell ds-atom-table-selectcell\", className)}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<Checkbox\n\t\t\t\t\tchecked={isAllSelected}\n\t\t\t\t\tindeterminate={isIndeterminate}\n\t\t\t\t\tonChange={() => onToggleAll()}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t/>\n\t\t\t</th>\n\t\t);\n\t},\n);\n\n// ── TableSelectCell ───────────────────────────────────────────────────────────\n\nexport const TableSelectCell = forwardRef<HTMLTableCellElement, TableSelectCellProps>(\n\tfunction TableSelectCell(\n\t\t{ selected, onToggle, ariaLabel = \"Select row\", className, ...rest },\n\t\tref,\n\t) {\n\t\treturn (\n\t\t\t<td\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cls(\"ds-atom-table-cell ds-atom-table-selectcell\", className)}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t<Checkbox checked={selected} onChange={() => onToggle()} aria-label={ariaLabel} />\n\t\t\t</td>\n\t\t);\n\t},\n);\n\n// ── TablePagination ───────────────────────────────────────────────────────────\n\nexport const TablePagination = forwardRef<HTMLElement, TablePaginationProps>(\n\tfunction TablePagination(\n\t\t{ page, pageCount, onPageChange, pageSize, total, ariaLabel = \"Pagination\", className, style },\n\t\tref,\n\t) {\n\t\tconst range = paginationRange(page, pageCount);\n\t\t// Build stable keys for ellipsis items: \"ellipsis-start\" vs \"ellipsis-end\"\n\t\t// based on whether it appears before or after the midpoint of the range.\n\t\tlet ellipsisCount = 0;\n\t\treturn (\n\t\t\t<nav\n\t\t\t\tref={ref}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tclassName={cls(\"ds-atom-table-pagination\", className)}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tdisabled={page <= 1}\n\t\t\t\t\tonClick={() => onPageChange(page - 1)}\n\t\t\t\t\taria-label=\"Previous page\"\n\t\t\t\t>\n\t\t\t\t\t←\n\t\t\t\t</Button>\n\t\t\t\t{range.map((entry) => {\n\t\t\t\t\tif (entry === \"ellipsis\") {\n\t\t\t\t\t\tellipsisCount += 1;\n\t\t\t\t\t\tconst ellipsisKey = `ellipsis-${ellipsisCount}`;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey={ellipsisKey}\n\t\t\t\t\t\t\t\tclassName=\"ds-atom-table-pagination-ellipsis\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t…\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tkey={entry}\n\t\t\t\t\t\t\tvariant={entry === page ? \"primary\" : \"ghost\"}\n\t\t\t\t\t\t\taria-current={entry === page ? \"page\" : undefined}\n\t\t\t\t\t\t\taria-label={`Page ${entry}`}\n\t\t\t\t\t\t\tonClick={() => onPageChange(entry)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{entry}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tdisabled={page >= pageCount}\n\t\t\t\t\tonClick={() => onPageChange(page + 1)}\n\t\t\t\t\taria-label=\"Next page\"\n\t\t\t\t>\n\t\t\t\t\t→\n\t\t\t\t</Button>\n\t\t\t\t{total != null && pageSize != null && (\n\t\t\t\t\t<span className=\"ds-atom-table-pagination-summary\">\n\t\t\t\t\t\t{(page - 1) * pageSize + 1}–{Math.min(page * pageSize, total)} of {total}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</nav>\n\t\t);\n\t},\n);\n\n// ── Compound namespace ────────────────────────────────────────────────────────\n\n/**\n * Table - compound primitive (DS-61, parts 1 + 2).\n *\n * Members: Table.Root, Table.Header, Table.HeaderCell, Table.Body, Table.Row, Table.Cell\n * Table.SelectAllCell, Table.SelectCell, Table.Pagination\n *\n * Important: render <Table.Pagination /> as a sibling of <Table.Root>, NOT a child.\n * <nav> inside <table> is invalid HTML. See TablePaginationProps JSDoc for details.\n */\nexport const Table = {\n\tRoot: TableRoot,\n\tHeader: TableHeader,\n\tHeaderCell: TableHeaderCell,\n\tBody: TableBody,\n\tRow: TableRow,\n\tCell: TableCell,\n\tSelectAllCell: TableSelectAllCell,\n\tSelectCell: TableSelectCell,\n\tPagination: TablePagination,\n};\n","/**\n * # Usage Audit - Calendar (DS-68, D-17-20..D-17-25)\n *\n * Three views: month (default), week, day.\n * Built on extracted calendarGrid utility (shared with DatePicker after Plan 02 refactor).\n * Event chips on day cells with overflow Popover (desktop) / BottomSheet (mobile ≤640px).\n * Compound: <Calendar.Agenda events={...} /> consumer-rendered slot.\n *\n * API:\n * <Calendar\n * events={events}\n * view=\"month\"\n * selectedDate={selected}\n * onSelectedDateChange={setSelected}\n * weekStart={1}\n * />\n *\n * <Calendar.Agenda events={events} />\n *\n * Security: event.label is rendered via JSX text interpolation only.\n * Never dangerouslySetInnerHTML. React escapes all text content. (T-17-12-01)\n */\nimport { type CSSProperties, forwardRef, useEffect, useMemo, useRef, useState } from \"react\";\nimport { buildMonthGrid, getWeekDayLabels } from \"../../_internals/calendarGrid\";\nimport { useMatchMedia } from \"../../hooks/useMatchMedia\";\nimport { ChevronLeft, ChevronRight } from \"../../icons\";\nimport { BottomSheet } from \"../../overlays/BottomSheet\";\nimport { HoverCard } from \"../../overlays/HoverCard\";\nimport { Popover } from \"../../overlays/Popover\";\nimport { SegmentedControl } from \"../SegmentedControl\";\n// ─── Types ────────────────────────────────────────────────────────────────\n\nexport interface CalendarEvent {\n\tid: string;\n\tdate: Date | string; // string interpreted as ISO\n\tendDate?: Date | string; // multi-day support (per-day rendering, no spanning bars)\n\tlabel: string;\n\tcolor?: string; // chip color (default amber)\n\tmeta?: unknown; // passthrough for consumer rendering\n}\n\nexport interface CalendarProps {\n\t/** Array of events to display as chips on day cells. */\n\tevents?: CalendarEvent[];\n\t/** Controlled active view; omit for uncontrolled. */\n\tview?: \"month\" | \"week\" | \"day\";\n\t/** Initial view when uncontrolled.\n\t * @default \"month\"\n\t */\n\tdefaultView?: \"month\" | \"week\" | \"day\";\n\t/** Called when the user switches views via the SegmentedControl. */\n\tonViewChange?: (v: \"month\" | \"week\" | \"day\") => void;\n\t/** Controlled selected date; highlighted in amber on the grid. */\n\tselectedDate?: Date | null;\n\t/** Called when a day cell is clicked with the clicked Date. */\n\tonSelectedDateChange?: (d: Date) => void;\n\t/** Day the week starts on: 0 = Sunday, 1 = Monday.\n\t * @default 1\n\t */\n\tweekStart?: 0 | 1;\n\t/** Maximum event chips shown per day cell before a \"+N more\" overflow trigger.\n\t * @default 3\n\t */\n\tmaxVisibleEventsPerDay?: number;\n\t/**\n\t * Fixed height in px for the day-view time grid (the scrollable 24-hour area).\n\t * The all-day row above the grid is unaffected.\n\t * When omitted the grid expands to show all 24 hours.\n\t * @default 480\n\t */\n\tdayViewHeight?: number;\n\t/** Accessible label for the calendar region.\n\t * @default \"Calendar\"\n\t */\n\tariaLabel?: string;\n\t/** Additional className applied to the root element. */\n\tclassName?: string;\n\t/** Inline styles applied to the root element. */\n\tstyle?: CSSProperties;\n}\n\n// ─── Constants ────────────────────────────────────────────────────────────\n\nconst MONTH_NAMES = [\n\t\"January\",\n\t\"February\",\n\t\"March\",\n\t\"April\",\n\t\"May\",\n\t\"June\",\n\t\"July\",\n\t\"August\",\n\t\"September\",\n\t\"October\",\n\t\"November\",\n\t\"December\",\n];\n\n// ─── Pure helpers ─────────────────────────────────────────────────────────\n\nfunction toDate(d: Date | string): Date {\n\treturn d instanceof Date ? d : new Date(d);\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n\treturn (\n\t\ta.getFullYear() === b.getFullYear() &&\n\t\ta.getMonth() === b.getMonth() &&\n\t\ta.getDate() === b.getDate()\n\t);\n}\n\nfunction addMonths(d: Date, n: number): Date {\n\treturn new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\nfunction addDays(date: Date, n: number): Date {\n\tconst d = new Date(date);\n\td.setDate(d.getDate() + n);\n\treturn d;\n}\n\nfunction startOfWeek(date: Date, weekStart: 0 | 1): Date {\n\tconst d = new Date(date);\n\tconst day = d.getDay();\n\tconst diff = (day - weekStart + 7) % 7;\n\td.setDate(d.getDate() - diff);\n\td.setHours(0, 0, 0, 0);\n\treturn d;\n}\n\nfunction getWeekDays(start: Date): Date[] {\n\treturn Array.from({ length: 7 }, (_, i) => {\n\t\tconst d = new Date(start);\n\t\td.setDate(d.getDate() + i);\n\t\treturn d;\n\t});\n}\n\n/** Returns hour (0-23) if event has a specific time, null if all-day (midnight, 00:00). */\nfunction eventHour(ev: CalendarEvent): number | null {\n\tconst d = toDate(ev.date);\n\tconst h = d.getHours();\n\tconst m = d.getMinutes();\n\tif (h === 0 && m === 0) return null; // all-day\n\treturn h;\n}\n\n// ─── CalendarChip - event chip with HoverCard ────────────────────────────\n\nfunction CalendarChip({ ev, date }: { ev: CalendarEvent; date: Date }) {\n\tconst anchorRef = useRef<HTMLSpanElement>(null);\n\tconst fmt = (d: Date) =>\n\t\td.toLocaleDateString(\"en-US\", { weekday: \"short\", month: \"short\", day: \"numeric\" });\n\n\treturn (\n\t\t<>\n\t\t\t{/* biome-ignore lint/a11y/useKeyWithClickEvents: chip onClick only stops propagation to the parent cell button; keyboard navigation is handled by the parent grid */}\n\t\t\t<span\n\t\t\t\tref={anchorRef}\n\t\t\t\tclassName=\"ds-atom-calendar-chip\"\n\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t>\n\t\t\t\t{ev.label}\n\t\t\t</span>\n\t\t\t<HoverCard anchorRef={anchorRef} placement=\"bottom-start\">\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tflexDirection: \"column\",\n\t\t\t\t\t\tgap: 6,\n\t\t\t\t\t\tminWidth: 160,\n\t\t\t\t\t\tmaxWidth: 240,\n\t\t\t\t\t\tpadding: 4,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: 10,\n\t\t\t\t\t\t\t\theight: 10,\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackground: ev.color ?? \"var(--amber)\",\n\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span style={{ fontWeight: 600, fontSize: 13, color: \"var(--ink)\", lineHeight: 1.3 }}>\n\t\t\t\t\t\t\t{ev.label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span style={{ fontSize: 12, color: \"var(--ink-3)\", fontFamily: \"var(--font-mono)\" }}>\n\t\t\t\t\t\t{fmt(date)}\n\t\t\t\t\t\t{ev.endDate && ev.endDate > date\n\t\t\t\t\t\t\t? ` – ${fmt(ev.endDate instanceof Date ? ev.endDate : new Date(ev.endDate))}`\n\t\t\t\t\t\t\t: \"\"}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</HoverCard>\n\t\t</>\n\t);\n}\n\n// ─── Overflow state ───────────────────────────────────────────────────────\n\ninterface OverflowState {\n\topen: boolean;\n\tdate: Date | null;\n\tevents: CalendarEvent[];\n}\n\n// ─── Calendar root ────────────────────────────────────────────────────────\n\nfunction CalendarRoot(props: CalendarProps, ref: React.Ref<HTMLDivElement>) {\n\tconst {\n\t\tevents = [],\n\t\tview: controlledView,\n\t\tdefaultView = \"month\",\n\t\tonViewChange,\n\t\tselectedDate,\n\t\tonSelectedDateChange,\n\t\tweekStart = 1,\n\t\tmaxVisibleEventsPerDay = 3,\n\t\tdayViewHeight = 480,\n\t\tariaLabel = \"Calendar\",\n\t\tclassName,\n\t\tstyle,\n\t} = props;\n\n\t// ── View state (controlled / uncontrolled) ──\n\tconst [uncontrolledView, setUncontrolledView] = useState<\"month\" | \"week\" | \"day\">(defaultView);\n\tconst isViewControlled = controlledView !== undefined;\n\tconst view = isViewControlled ? controlledView : uncontrolledView;\n\n\tconst setView = (v: \"month\" | \"week\" | \"day\") => {\n\t\tif (!isViewControlled) setUncontrolledView(v);\n\t\tonViewChange?.(v);\n\t};\n\n\t// ── Viewport month anchor (drives navigation) ──\n\tconst [viewMonth, setViewMonth] = useState<Date>(() => {\n\t\treturn selectedDate ?? new Date();\n\t});\n\n\tconst today = useMemo(() => new Date(), []);\n\n\t// ── Mobile breakpoint - reactive via useMatchMedia hook (SSR-safe, subscribes to change events) ──\n\tconst isMobile = useMatchMedia(\"(max-width: 640px)\");\n\n\t// ── Overflow popover state ──\n\tconst [overflowState, setOverflowState] = useState<OverflowState>({\n\t\topen: false,\n\t\tdate: null,\n\t\tevents: [],\n\t});\n\tconst overflowAnchorRef = useRef<HTMLButtonElement | null>(null);\n\tconst dayGridRef = useRef<HTMLDivElement | null>(null);\n\n\t// Live current time - updates every minute so the \"now\" line stays accurate.\n\tconst [now, setNow] = useState(() => new Date());\n\tuseEffect(() => {\n\t\tconst id = window.setInterval(() => setNow(new Date()), 60_000);\n\t\treturn () => window.clearInterval(id);\n\t}, []);\n\tconst HOUR_HEIGHT = 40; // must match .ds-atom-calendar-dayview-hour min-height\n\tconst nowOffsetPx = ((now.getHours() * 60 + now.getMinutes()) / 60) * HOUR_HEIGHT;\n\tconst isToday_dayView = sameDay(viewMonth, today);\n\n\t// Scroll day view to current hour when it first opens (once, not on every tick).\n\tuseEffect(() => {\n\t\tif (view !== \"day\" || !dayGridRef.current) return;\n\t\tconst h = new Date().getHours();\n\t\tdayGridRef.current.scrollTop = Math.max(0, (h - 1) * HOUR_HEIGHT);\n\t}, [view]);\n\n\t// ── Navigation ──\n\tconst navigate = (delta: 1 | -1) => {\n\t\tif (view === \"month\") setViewMonth(addMonths(viewMonth, delta));\n\t\telse if (view === \"week\") setViewMonth(addDays(viewMonth, delta * 7));\n\t\telse setViewMonth(addDays(viewMonth, delta));\n\t};\n\n\t// ── Header label (adapts by view) ──\n\tconst headerLabel =\n\t\tview === \"month\"\n\t\t\t? `${MONTH_NAMES[viewMonth.getMonth()]} ${viewMonth.getFullYear()}`\n\t\t\t: view === \"week\"\n\t\t\t\t? `Week of ${viewMonth.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" })}`\n\t\t\t\t: viewMonth.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t});\n\n\t// ── Month grid ──\n\tconst grid = useMemo(\n\t\t() => buildMonthGrid(viewMonth.getFullYear(), viewMonth.getMonth(), weekStart),\n\t\t[viewMonth, weekStart],\n\t);\n\tconst weekdayLabels = useMemo(() => getWeekDayLabels(weekStart, \"narrow\"), [weekStart]);\n\tconst weekdayShortLabels = useMemo(() => getWeekDayLabels(weekStart, \"short\"), [weekStart]);\n\n\t// ── Events per date ──\n\tfunction eventsForDate(date: Date): CalendarEvent[] {\n\t\treturn events\n\t\t\t.filter((ev) => {\n\t\t\t\tconst start = toDate(ev.date);\n\t\t\t\tif (sameDay(start, date)) return true;\n\t\t\t\tif (!ev.endDate) return false;\n\t\t\t\tconst end = toDate(ev.endDate);\n\t\t\t\t// Inclusive range, day-resolution\n\t\t\t\tconst dateNorm = new Date(date.getFullYear(), date.getMonth(), date.getDate());\n\t\t\t\tconst startNorm = new Date(start.getFullYear(), start.getMonth(), start.getDate());\n\t\t\t\tconst endNorm = new Date(end.getFullYear(), end.getMonth(), end.getDate());\n\t\t\t\treturn dateNorm >= startNorm && dateNorm <= endNorm;\n\t\t\t})\n\t\t\t.sort((a, b) => +toDate(a.date) - +toDate(b.date));\n\t}\n\n\t// ── Week view data ──\n\tconst weekStartDate = useMemo(() => startOfWeek(viewMonth, weekStart), [viewMonth, weekStart]);\n\tconst weekDays = useMemo(() => getWeekDays(weekStartDate), [weekStartDate]);\n\n\t// ── Day view data ──\n\tconst focusDate = selectedDate ?? viewMonth;\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={`ds-atom-calendar${className ? ` ${className}` : \"\"}`}\n\t\t\tstyle={style}\n\t\t\tdata-view={view}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t{/* ── Header ── */}\n\t\t\t<div className=\"ds-atom-calendar-header\">\n\t\t\t\t<div className=\"ds-atom-calendar-nav\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Previous month\"\n\t\t\t\t\t\tonClick={() => navigate(-1)}\n\t\t\t\t\t\tclassName=\"ds-atom-calendar-navbtn\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronLeft size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t\t<div className=\"ds-atom-calendar-label\">{headerLabel}</div>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Next month\"\n\t\t\t\t\t\tonClick={() => navigate(1)}\n\t\t\t\t\t\tclassName=\"ds-atom-calendar-navbtn\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRight size={16} />\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<SegmentedControl\n\t\t\t\t\toptions={[\n\t\t\t\t\t\t{ value: \"month\", label: \"Month\" },\n\t\t\t\t\t\t{ value: \"week\", label: \"Week\" },\n\t\t\t\t\t\t{ value: \"day\", label: \"Day\" },\n\t\t\t\t\t]}\n\t\t\t\t\tvalue={view}\n\t\t\t\t\tonChange={(v) => setView(v as \"month\" | \"week\" | \"day\")}\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tariaLabel=\"Calendar view\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{/* ── Body ── */}\n\t\t\t<div className=\"ds-atom-calendar-body\">\n\t\t\t\t{/* ── Month view ── */}\n\t\t\t\t{view === \"month\" && (\n\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: ARIA grid role on <div> is the standard interactive-calendar pattern (APG, react-aria, Radix) - <table> implies static tabular data, not keyboard-navigable grid\n\t\t\t\t\t<div role=\"grid\" className=\"ds-atom-calendar-month\">\n\t\t\t\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: role=\"row\" on <div> groups the column-header cells into a logical grid row per APG */}\n\t\t\t\t\t\t{/* biome-ignore lint/a11y/useFocusableInteractive: header row is a grouping element - individual <th>-equivalent cells are not keyboard targets */}\n\t\t\t\t\t\t<div role=\"row\" className=\"ds-atom-calendar-weekdays\">\n\t\t\t\t\t\t\t{weekdayLabels.map((d, i) => (\n\t\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: weekday headers are a static 7-element array - index is stable\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: role=\"columnheader\" on <div> within an ARIA grid pattern - semantic <th> belongs to <table>, not an ARIA-role grid\n\t\t\t\t\t\t\t\t<div key={i} role=\"columnheader\" className=\"ds-atom-calendar-weekday\">\n\t\t\t\t\t\t\t\t\t{d}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{grid.weeks.map((week, wi) => (\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: week rows are a stable 6-element array - index maps directly to week position\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: role=\"row\" on <div> required by ARIA grid pattern - see outer grid biome-ignore\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: row is a grouping container; the gridcell buttons inside carry focusability\n\t\t\t\t\t\t\t<div key={wi} role=\"row\" className=\"ds-atom-calendar-week\">\n\t\t\t\t\t\t\t\t{week.map((cell) => {\n\t\t\t\t\t\t\t\t\tconst isToday = sameDay(cell.date, today);\n\t\t\t\t\t\t\t\t\tconst isSelected = selectedDate ? sameDay(cell.date, selectedDate) : false;\n\t\t\t\t\t\t\t\t\tconst cellEvents = eventsForDate(cell.date);\n\t\t\t\t\t\t\t\t\tconst visible = cellEvents.slice(0, maxVisibleEventsPerDay);\n\t\t\t\t\t\t\t\t\tconst overflow = cellEvents.length - maxVisibleEventsPerDay;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\tkey={cell.date.toISOString()}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: <td> is for tabular data; gridcell role on <button> makes each calendar day keyboard-focusable (matches DatePicker + react-aria + Radix)\n\t\t\t\t\t\t\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-cell\"\n\t\t\t\t\t\t\t\t\t\t\tdata-today={isToday || undefined}\n\t\t\t\t\t\t\t\t\t\t\tdata-selected={isSelected || undefined}\n\t\t\t\t\t\t\t\t\t\t\tdata-out-of-month={!cell.inMonth || undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-label={cell.date.toDateString()}\n\t\t\t\t\t\t\t\t\t\t\taria-current={isToday ? \"date\" : undefined}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => onSelectedDateChange?.(cell.date)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ds-atom-calendar-cell-num\">{cell.date.getDate()}</span>\n\t\t\t\t\t\t\t\t\t\t\t{cellEvents.length > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-cell-events\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{visible.map((ev) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<CalendarChip key={ev.id} ev={ev} date={cell.date} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{overflow > 0 && (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: role=\"button\" on <span> prevents nesting <button> inside <button> (HTML spec); keyboard handler below makes it fully accessible\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: onKeyDown handler provided on same span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-chip-more\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflowAnchorRef.current =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget as unknown as HTMLButtonElement;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOverflowState({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\topen: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdate: cell.date,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevents: cellEvents,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\toverflowAnchorRef.current =\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\te.currentTarget as unknown as HTMLButtonElement;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOverflowState({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\topen: true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdate: cell.date,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tevents: cellEvents,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+{overflow} more\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* ── Week view ── */}\n\t\t\t\t{view === \"week\" && (\n\t\t\t\t\t<div className=\"ds-atom-calendar-weekview\">\n\t\t\t\t\t\t<div className=\"ds-atom-calendar-week-row\">\n\t\t\t\t\t\t\t{weekDays.map((d) => {\n\t\t\t\t\t\t\t\tconst dayEvents = eventsForDate(d);\n\t\t\t\t\t\t\t\tconst isToday = sameDay(d, today);\n\t\t\t\t\t\t\t\tconst isSelected = selectedDate ? sameDay(d, selectedDate) : false;\n\t\t\t\t\t\t\t\tconst dayIndex = (d.getDay() - weekStart + 7) % 7;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tkey={d.toISOString()}\n\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-weekcell\"\n\t\t\t\t\t\t\t\t\t\tdata-today={isToday || undefined}\n\t\t\t\t\t\t\t\t\t\tdata-selected={isSelected || undefined}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-weekcell-header\"\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => onSelectedDateChange?.(d)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ds-atom-calendar-weekcell-name\">\n\t\t\t\t\t\t\t\t\t\t\t\t{weekdayShortLabels[dayIndex]}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ds-atom-calendar-weekcell-date\">{d.getDate()}</span>\n\t\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t\t<ul className=\"ds-atom-calendar-weekcell-events\">\n\t\t\t\t\t\t\t\t\t\t\t{dayEvents.map((ev) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ev.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-chip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ev.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* ── Day view ── */}\n\t\t\t\t{view === \"day\" &&\n\t\t\t\t\t(() => {\n\t\t\t\t\t\tconst dayEvents = eventsForDate(focusDate);\n\t\t\t\t\t\tconst allDayEvents = dayEvents.filter((ev) => eventHour(ev) === null);\n\t\t\t\t\t\tconst hourlyEvents = dayEvents.filter((ev) => eventHour(ev) !== null);\n\t\t\t\t\t\tconst hours = Array.from({ length: 24 }, (_, i) => i);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-dayview\">\n\t\t\t\t\t\t\t\t{allDayEvents.length > 0 && (\n\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-dayview-allday\">\n\t\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-dayview-alldaylabel\">All day</div>\n\t\t\t\t\t\t\t\t\t\t<ul className=\"ds-atom-calendar-dayview-alldayevents\">\n\t\t\t\t\t\t\t\t\t\t\t{allDayEvents.map((ev) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ev.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-chip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ev.label}\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tref={dayGridRef}\n\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-dayview-grid\"\n\t\t\t\t\t\t\t\t\tstyle={{ height: dayViewHeight, overflowY: \"auto\" }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Current-time indicator - amber line with dot, only for today */}\n\t\t\t\t\t\t\t\t\t{isToday_dayView && (\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-nowline\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ top: nowOffsetPx }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<span className=\"ds-atom-calendar-nowdot\" />\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{hours.map((h) => {\n\t\t\t\t\t\t\t\t\t\tconst hourEvents = hourlyEvents.filter((ev) => eventHour(ev) === h);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t<div key={h} className=\"ds-atom-calendar-dayview-hour\">\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-dayview-hourlabel\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{String(h).padStart(2, \"0\")}:00\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-dayview-hourslot\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t{hourEvents.map((ev) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ev.id}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-chip\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ev.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})()}\n\t\t\t</div>\n\n\t\t\t{/* ── Overflow popover (Popover on desktop, BottomSheet on mobile) ── */}\n\t\t\t{overflowState.open &&\n\t\t\t\toverflowState.date &&\n\t\t\t\t(isMobile ? (\n\t\t\t\t\t<BottomSheet\n\t\t\t\t\t\topen={overflowState.open}\n\t\t\t\t\t\tonClose={() => setOverflowState((s) => ({ ...s, open: false }))}\n\t\t\t\t\t\ttitle={overflowState.date.toLocaleDateString()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ul className=\"ds-atom-calendar-events-list\">\n\t\t\t\t\t\t\t{overflowState.events.map((ev) => (\n\t\t\t\t\t\t\t\t<li key={ev.id} className=\"ds-atom-calendar-events-item\">\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-events-dot\"\n\t\t\t\t\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span>{ev.label}</span>\n\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</ul>\n\t\t\t\t\t</BottomSheet>\n\t\t\t\t) : (\n\t\t\t\t\t<Popover\n\t\t\t\t\t\tanchorRef={overflowAnchorRef as React.RefObject<HTMLElement | null>}\n\t\t\t\t\t\topen={overflowState.open}\n\t\t\t\t\t\tonOpenChange={(o) => setOverflowState((s) => ({ ...s, open: o }))}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"ds-atom-calendar-events-popover\">\n\t\t\t\t\t\t\t<div className=\"ds-atom-calendar-events-header\">\n\t\t\t\t\t\t\t\t{overflowState.date.toLocaleDateString()}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ul className=\"ds-atom-calendar-events-list\">\n\t\t\t\t\t\t\t\t{overflowState.events.map((ev) => (\n\t\t\t\t\t\t\t\t\t<li key={ev.id} className=\"ds-atom-calendar-events-item\">\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-calendar-events-dot\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<span>{ev.label}</span>\n\t\t\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover>\n\t\t\t\t))}\n\t\t</div>\n\t);\n}\n\n// ─── Calendar.Agenda consumer slot ────────────────────────────────────────\n\nfunction AgendaList({\n\tevents,\n\tariaLabel = \"Agenda\",\n}: {\n\tevents: CalendarEvent[];\n\tariaLabel?: string;\n}) {\n\tconst sorted = useMemo(\n\t\t() => [...events].sort((a, b) => +toDate(a.date) - +toDate(b.date)),\n\t\t[events],\n\t);\n\treturn (\n\t\t<ol aria-label={ariaLabel} className=\"ds-atom-calendar-agenda\">\n\t\t\t{sorted.map((ev) => (\n\t\t\t\t<li key={ev.id} className=\"ds-atom-calendar-agenda-item\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"ds-atom-calendar-agenda-dot\"\n\t\t\t\t\t\tstyle={ev.color ? { background: ev.color } : undefined}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<time dateTime={toDate(ev.date).toISOString()} className=\"ds-atom-calendar-agenda-time\">\n\t\t\t\t\t\t{toDate(ev.date).toLocaleDateString()}\n\t\t\t\t\t</time>\n\t\t\t\t\t<span className=\"ds-atom-calendar-agenda-label\">{ev.label}</span>\n\t\t\t\t</li>\n\t\t\t))}\n\t\t</ol>\n\t);\n}\n\n// ─── Public export (compound component) ──────────────────────────────────\n\nconst CalendarRootForward = forwardRef(CalendarRoot);\n\n/**\n * Calendar primitive (DS-68).\n * Three views: month (default), week, day.\n * Compound: <Calendar.Agenda events={...} /> for consumer-rendered agenda list.\n */\nexport const Calendar = Object.assign(CalendarRootForward, { Agenda: AgendaList });\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'anchor-name',\n 'animation',\n 'animation-composition',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-range',\n 'animation-range-end',\n 'animation-range-start',\n 'animation-timeline',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-align',\n 'box-decoration-break',\n 'box-direction',\n 'box-flex',\n 'box-flex-group',\n 'box-lines',\n 'box-ordinal-group',\n 'box-orient',\n 'box-pack',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'contain-intrinsic-block-size',\n 'contain-intrinsic-height',\n 'contain-intrinsic-inline-size',\n 'contain-intrinsic-size',\n 'contain-intrinsic-width',\n 'container',\n 'container-name',\n 'container-type',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'counter-set',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'cx',\n 'cy',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'field-sizing',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flood-color',\n 'flood-opacity',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-optical-sizing',\n 'font-palette',\n 'font-size',\n 'font-size-adjust',\n 'font-smooth',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-synthesis-position',\n 'font-synthesis-small-caps',\n 'font-synthesis-style',\n 'font-synthesis-weight',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-emoji',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'forced-color-adjust',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphenate-character',\n 'hyphenate-limit-chars',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'initial-letter',\n 'initial-letter-align',\n 'inline-size',\n 'inset',\n 'inset-area',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'kerning',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'line-height-step',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-trim',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'masonry-auto-flow',\n 'math-depth',\n 'math-shift',\n 'math-style',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-block',\n 'overflow-clip-margin',\n 'overflow-inline',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overlay',\n 'overscroll-behavior',\n 'overscroll-behavior-block',\n 'overscroll-behavior-inline',\n 'overscroll-behavior-x',\n 'overscroll-behavior-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'paint-order',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'position-anchor',\n 'position-visibility',\n 'print-color-adjust',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'ruby-align',\n 'ruby-position',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scroll-timeline',\n 'scroll-timeline-axis',\n 'scroll-timeline-name',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-anchor',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-size-adjust',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'timeline-scope',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-behavior',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'user-modify',\n 'user-select',\n 'vector-effect',\n 'vertical-align',\n 'view-timeline',\n 'view-timeline-axis',\n 'view-timeline-inset',\n 'view-timeline-name',\n 'view-transition-name',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'white-space-collapse',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index',\n 'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: { keyframePosition: \"from to\" },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\" },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would tigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: { built_in: \"url data-uri\" },\n contains: [\n ...STRINGS,\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nexport { css as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nexport { typescript as default };\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n","/**\n * # RichText - DS-70 (D-17-14..D-17-19)\n *\n * Built on @tiptap/react 3.x + StarterKit + Link + Placeholder + UnderlineExtension.\n * Heaviest primitive in Phase 17 (~50-70 KB gzipped TipTap deps, externalized in tsup.config.ts).\n *\n * ## Controlled-value sync - DO NOT BREAK (RESEARCH.md § \"Controlled Value Sync\")\n *\n * TipTap is NOT natively a controlled component. The naive pattern infinite-loops:\n * useEffect(() => editor.setContent(value), [value]); // BAD\n * because setContent fires onUpdate → onChange → parent setState → new value prop → effect → loop.\n *\n * Three-layer guard that prevents the loop:\n * 1. `lastEmittedRef` - tracks the last value we ourselves emitted so we can detect the echo\n * 2. `editor.getHTML()` comparison - defensive equality check; cheap on small docs\n * 3. `{ emitUpdate: false }` passed to setContent - suppresses onUpdate even if both checks miss\n *\n * If you are tempted to \"simplify\" this sync by removing any of the three layers - don't.\n * Each layer catches a distinct race condition. The pattern is documented in RESEARCH.md.\n *\n * ## Output formats (D-17-17)\n *\n * - \"html\" (default): onChange(editor.getHTML()) - string\n * - \"json\": onChange(editor.getJSON()) - TipTap Doc object\n *\n * When outputFormat=\"json\", we do NOT update lastEmittedRef (consumers using JSON output manage\n * their own state sync - the component doesn't attempt to round-trip JSON through getHTML).\n *\n * ## Sanitization (D-17-18)\n *\n * StarterKit's extension allowlist filters tags/attrs on paste - equivalent to schema-based\n * sanitization. Inline <script>, <style>, <font>, JS-URL anchors, <iframe>, etc. are stripped\n * during ProseMirror schema parse. NO DOMPurify dependency in v0.6.\n *\n * Server-side sanitization is the consumer's responsibility (recommend sanitize-html or DOMPurify).\n *\n * ## Threat model\n *\n * - T-17-13-01: XSS via paste - TipTap allowlist mitigates (cited in file header for traceability)\n * - T-17-13-02: XSS via server-side persistence - caller's responsibility (see above)\n * - T-17-13-03: Crafted initial value HTML - same schema parse on setContent; script tags stripped\n * - T-17-13-04: javascript: links - TipTap Link extension defaults filter out javascript:/data: URLs\n *\n * ## Underline extension\n *\n * TipTap StarterKit 3.x does NOT include the Underline extension - it ships separately as\n * @tiptap/extension-underline. Imported as `UnderlineExtension` to avoid collision with the\n * `Underline` icon component imported from ./icons.\n */\n\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport Link from \"@tiptap/extension-link\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport UnderlineExtension from \"@tiptap/extension-underline\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport css from \"highlight.js/lib/languages/css\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport json from \"highlight.js/lib/languages/json\";\nimport python from \"highlight.js/lib/languages/python\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport xml from \"highlight.js/lib/languages/xml\";\nimport { createLowlight } from \"lowlight\";\n\nconst lowlight = createLowlight();\nlowlight.register(\"html\", xml);\nlowlight.register(\"css\", css);\nlowlight.register(\"js\", javascript);\nlowlight.register(\"javascript\", javascript);\nlowlight.register(\"ts\", typescript);\nlowlight.register(\"typescript\", typescript);\nlowlight.register(\"json\", json);\nlowlight.register(\"python\", python);\nimport { type CSSProperties, type ReactNode, forwardRef, useEffect, useRef, useState } from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { DSPortal } from \"../../_internals/DSPortal\";\nimport {\n\tBold,\n\tChevronDown,\n\tCode,\n\tHeading2,\n\tItalic,\n\tLink2,\n\tList,\n\tListOrdered,\n\tMinus,\n\tMoon,\n\tQuote,\n\tStrikethrough,\n\tSun,\n\tUnderline,\n} from \"../../icons\";\nimport { Button } from \"../../inputs/Button\";\nimport { Select } from \"../../inputs/Select\";\n// ─── Public types ──────────────────────────────────────────────────────────\n\nexport interface RichTextProps {\n\t/** Controlled HTML string (default) or TipTap JSON Doc object when `outputFormat=\"json\"`. */\n\tvalue: string | object;\n\t/** Called on every editor change with the updated HTML string or JSON Doc. */\n\tonChange: (value: string | object) => void;\n\t/** Placeholder text shown in the empty editor surface. */\n\tplaceholder?: string;\n\t/** When true, hides the toolbar and makes the editor non-editable.\n\t * @default false\n\t */\n\treadOnly?: boolean;\n\t/** Output format emitted to `onChange`; `\"html\"` emits a string, `\"json\"` emits a TipTap Doc object.\n\t * @default \"html\"\n\t */\n\toutputFormat?: \"html\" | \"json\";\n\t/** Replace the default toolbar with a custom ReactNode; pass `null` to suppress the toolbar entirely. */\n\ttoolbar?: ReactNode;\n\t/** Additional className applied to the inner editor surface wrapper. */\n\tclassName?: string;\n\t/** Accessible label for the editor region.\n\t * @default \"Rich text editor\"\n\t */\n\tariaLabel?: string;\n\t/** Inline styles applied to the outer root wrapper. */\n\tstyle?: CSSProperties;\n}\n\n// ─── Supported languages for the code block language selector ────────────────\n\nconst CODE_LANGUAGES = [\n\t{ value: \"plaintext\", label: \"Plain text\" },\n\t{ value: \"javascript\", label: \"JavaScript\" },\n\t{ value: \"typescript\", label: \"TypeScript\" },\n\t{ value: \"html\", label: \"HTML\" },\n\t{ value: \"css\", label: \"CSS\" },\n\t{ value: \"json\", label: \"JSON\" },\n\t{ value: \"python\", label: \"Python\" },\n] as const;\n\n// ─── Heading menu items ────────────────────────────────────────────────────\n\nconst HEADING_ITEMS = [\n\t{ label: \"Paragraph\", markName: \"paragraph\" as const },\n\t{ label: \"Heading 2\", markName: \"heading\" as const, level: 2 },\n\t{ label: \"Heading 3\", markName: \"heading\" as const, level: 3 },\n] as const;\n\n// ─── Component ────────────────────────────────────────────────────────────\n\nexport const RichText = forwardRef<HTMLDivElement, RichTextProps>(function RichText(\n\t{\n\t\tvalue,\n\t\tonChange,\n\t\tplaceholder,\n\t\treadOnly = false,\n\t\toutputFormat = \"html\",\n\t\ttoolbar,\n\t\tclassName,\n\t\tariaLabel = \"Rich text editor\",\n\t\tstyle,\n\t},\n\tref,\n) {\n\t// Layer 1 of the three-layer guard: track what we last emitted\n\tconst lastEmittedRef = useRef<string>(typeof value === \"string\" ? value : \"\");\n\n\t// Button anchor refs for floating UI\n\tconst linkBtnRef = useRef<HTMLButtonElement | null>(null);\n\tconst headingBtnRef = useRef<HTMLButtonElement | null>(null);\n\n\t// Link popover state\n\tconst [linkOpen, setLinkOpen] = useState(false);\n\tconst [linkUrl, setLinkUrl] = useState(\"\");\n\n\t// Heading dropdown state\n\tconst [headingOpen, setHeadingOpen] = useState(false);\n\tconst [headingActiveIndex, setHeadingActiveIndex] = useState(0);\n\tconst [codeBlockDark, setCodeBlockDark] = useState(false);\n\n\t// ── TipTap editor instance ─────────────────────────────────────────────\n\tconst editor = useEditor({\n\t\textensions: [\n\t\t\t// Disable StarterKit's bundled Link and Underline so we can configure them ourselves.\n\t\t\t// StarterKit v3.22 includes both by default - providing false opts them out,\n\t\t\t// then we add our own configured versions below (avoids \"Duplicate extension\" warning).\n\t\t\tStarterKit.configure({ link: false, underline: false, codeBlock: false }),\n\t\t\tCodeBlockLowlight.configure({ lowlight, defaultLanguage: \"plaintext\" }),\n\t\t\tLink.configure({ openOnClick: false, autolink: true }),\n\t\t\tPlaceholder.configure({ placeholder: placeholder ?? \"\" }),\n\t\t\t// NOTE: UnderlineExtension - renamed import to avoid collision with Underline icon\n\t\t\tUnderlineExtension,\n\t\t],\n\t\tcontent: value,\n\t\teditable: !readOnly,\n\t\t// MANDATORY: SSR-safe per D-17-19. Without this TipTap throws during SSR hydration.\n\t\timmediatelyRender: false,\n\t\tonUpdate: ({ editor }) => {\n\t\t\tif (outputFormat === \"json\") {\n\t\t\t\t// JSON output: emit TipTap Doc object; don't sync lastEmittedRef\n\t\t\t\t// (consumers using JSON output manage their own state)\n\t\t\t\tonChange(editor.getJSON());\n\t\t\t} else {\n\t\t\t\tconst html = editor.getHTML();\n\t\t\t\t// Layer 1 update: record this emission so we can detect the echo below\n\t\t\t\tlastEmittedRef.current = html;\n\t\t\t\tonChange(html);\n\t\t\t}\n\t\t},\n\t});\n\n\t// ── Controlled value → editor sync (three-layer guard) ─────────────────\n\t// Called every time the parent passes a new value prop.\n\t// We must NOT call setContent when the change originated from our own onUpdate\n\t// (parent echoes our emission back as value) - that would loop.\n\tuseEffect(() => {\n\t\tif (!editor) return;\n\t\t// Only HTML sync is supported; JSON consumers own their own state management\n\t\tif (typeof value !== \"string\") return;\n\t\t// Layer 1: skip if parent just echoed back what we emitted\n\t\tif (value === lastEmittedRef.current) return;\n\t\t// Layer 2: defensive equality - if editor already shows this HTML, do nothing\n\t\tif (value === editor.getHTML()) return;\n\t\t// Layer 3: { emitUpdate: false } prevents setContent from firing onUpdate\n\t\teditor.commands.setContent(value, { emitUpdate: false });\n\t}, [editor, value]);\n\n\t// ── readOnly toggle ────────────────────────────────────────────────────\n\tuseEffect(() => {\n\t\tif (!editor) return;\n\t\tif (editor.isEditable !== !readOnly) {\n\t\t\teditor.setEditable(!readOnly);\n\t\t}\n\t}, [editor, readOnly]);\n\n\t// ── Helpers ───────────────────────────────────────────────────────────\n\tconst isActive = (name: string, attrs?: Record<string, unknown>) =>\n\t\teditor?.isActive(name, attrs) ?? false;\n\n\tconst activeHeadingLabel = (): string => {\n\t\tif (isActive(\"heading\", { level: 2 })) return \"H2\";\n\t\tif (isActive(\"heading\", { level: 3 })) return \"H3\";\n\t\treturn \"P\";\n\t};\n\n\t// ── Default toolbar ───────────────────────────────────────────────────\n\tconst defaultToolbar = (\n\t\t<div role=\"toolbar\" aria-label=\"Formatting\" className=\"ds-atom-richtext-toolbar\">\n\t\t\t{/* ── Inline marks group ──────────────────────────── */}\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Bold\"\n\t\t\t\taria-pressed={isActive(\"bold\")}\n\t\t\t\tdata-active={isActive(\"bold\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleBold().run()}\n\t\t\t>\n\t\t\t\t<Bold size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Italic\"\n\t\t\t\taria-pressed={isActive(\"italic\")}\n\t\t\t\tdata-active={isActive(\"italic\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleItalic().run()}\n\t\t\t>\n\t\t\t\t<Italic size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Underline\"\n\t\t\t\taria-pressed={isActive(\"underline\")}\n\t\t\t\tdata-active={isActive(\"underline\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleUnderline().run()}\n\t\t\t>\n\t\t\t\t<Underline size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Strikethrough\"\n\t\t\t\taria-pressed={isActive(\"strike\")}\n\t\t\t\tdata-active={isActive(\"strike\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleStrike().run()}\n\t\t\t>\n\t\t\t\t<Strikethrough size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Inline code\"\n\t\t\t\taria-pressed={isActive(\"code\")}\n\t\t\t\tdata-active={isActive(\"code\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleCode().run()}\n\t\t\t>\n\t\t\t\t<Code size={16} />\n\t\t\t</Button>\n\n\t\t\t{/* Language selector + dark toggle - only visible when cursor is inside a code block */}\n\t\t\t{isActive(\"codeBlock\") && (\n\t\t\t\t<>\n\t\t\t\t\t<Select\n\t\t\t\t\t\toptions={CODE_LANGUAGES.map((l) => ({ value: l.value, label: l.label }))}\n\t\t\t\t\t\tvalue={editor?.getAttributes(\"codeBlock\").language ?? \"plaintext\"}\n\t\t\t\t\t\tonChange={(lang) =>\n\t\t\t\t\t\t\teditor?.chain().focus().updateAttributes(\"codeBlock\", { language: lang }).run()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={{ height: 28, width: \"fit-content\", minWidth: 110, fontSize: 11 }}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\taria-label={codeBlockDark ? \"Switch code block to light\" : \"Switch code block to dark\"}\n\t\t\t\t\t\taria-pressed={codeBlockDark}\n\t\t\t\t\t\tdata-active={codeBlockDark || undefined}\n\t\t\t\t\t\tonClick={() => setCodeBlockDark((d) => !d)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{codeBlockDark ? <Sun size={16} /> : <Moon size={16} />}\n\t\t\t\t\t</Button>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t<span className=\"ds-atom-richtext-toolbar-divider\" aria-hidden=\"true\" />\n\n\t\t\t{/* ── Heading dropdown ─────────────────────────────── */}\n\t\t\t<Button\n\t\t\t\tref={headingBtnRef}\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label={`Heading style - currently ${activeHeadingLabel()}`}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-expanded={headingOpen}\n\t\t\t\tdata-active={isActive(\"heading\") || undefined}\n\t\t\t\tonClick={() => setHeadingOpen((o) => !o)}\n\t\t\t>\n\t\t\t\t<Heading2 size={16} />\n\t\t\t\t<ChevronDown size={12} />\n\t\t\t</Button>\n\t\t\t<DSDropdown\n\t\t\t\tanchorRef={headingBtnRef}\n\t\t\t\topen={headingOpen}\n\t\t\t\tonOpenChange={setHeadingOpen}\n\t\t\t\tactiveIndex={headingActiveIndex}\n\t\t\t\tonActiveIndexChange={setHeadingActiveIndex}\n\t\t\t\titemCount={HEADING_ITEMS.length}\n\t\t\t\tonSelect={(i) => {\n\t\t\t\t\tconst item = HEADING_ITEMS[i];\n\t\t\t\t\tif (!item) return;\n\t\t\t\t\tif (item.markName === \"paragraph\") {\n\t\t\t\t\t\teditor?.chain().focus().setParagraph().run();\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t?.chain()\n\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t.toggleHeading({ level: item.level as 2 | 3 })\n\t\t\t\t\t\t\t.run();\n\t\t\t\t\t}\n\t\t\t\t\tsetHeadingOpen(false);\n\t\t\t\t}}\n\t\t\t\ttypeAheadGetText={(i) => HEADING_ITEMS[i]?.label ?? \"\"}\n\t\t\t\tmatchAnchorWidth={false}\n\t\t\t>\n\t\t\t\t<ul role=\"menu\" className=\"ds-atom-richtext-headingmenu\">\n\t\t\t\t\t{HEADING_ITEMS.map((item, i) => (\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tkey={item.label}\n\t\t\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t\t\tdata-active={headingActiveIndex === i || undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tif (item.markName === \"paragraph\") {\n\t\t\t\t\t\t\t\t\t\teditor?.chain().focus().setParagraph().run();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\teditor\n\t\t\t\t\t\t\t\t\t\t\t?.chain()\n\t\t\t\t\t\t\t\t\t\t\t.focus()\n\t\t\t\t\t\t\t\t\t\t\t.toggleHeading({ level: item.level as 2 | 3 })\n\t\t\t\t\t\t\t\t\t\t\t.run();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tsetHeadingOpen(false);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</DSDropdown>\n\n\t\t\t<span className=\"ds-atom-richtext-toolbar-divider\" aria-hidden=\"true\" />\n\n\t\t\t{/* ── Block formatting group ───────────────────────── */}\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Bulleted list\"\n\t\t\t\taria-pressed={isActive(\"bulletList\")}\n\t\t\t\tdata-active={isActive(\"bulletList\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleBulletList().run()}\n\t\t\t>\n\t\t\t\t<List size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Ordered list\"\n\t\t\t\taria-pressed={isActive(\"orderedList\")}\n\t\t\t\tdata-active={isActive(\"orderedList\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleOrderedList().run()}\n\t\t\t>\n\t\t\t\t<ListOrdered size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Blockquote\"\n\t\t\t\taria-pressed={isActive(\"blockquote\")}\n\t\t\t\tdata-active={isActive(\"blockquote\") || undefined}\n\t\t\t\tonClick={() => editor?.chain().focus().toggleBlockquote().run()}\n\t\t\t>\n\t\t\t\t<Quote size={16} />\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Horizontal rule\"\n\t\t\t\tonClick={() => editor?.chain().focus().setHorizontalRule().run()}\n\t\t\t>\n\t\t\t\t<Minus size={16} />\n\t\t\t</Button>\n\n\t\t\t{/* ── Link ─────────────────────────────────────────── */}\n\t\t\t<Button\n\t\t\t\tref={linkBtnRef}\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\taria-label=\"Insert link\"\n\t\t\t\taria-pressed={isActive(\"link\")}\n\t\t\t\taria-expanded={linkOpen}\n\t\t\t\tdata-active={isActive(\"link\") || undefined}\n\t\t\t\tonClick={() => {\n\t\t\t\t\t// Pre-fill URL if selection already has a link\n\t\t\t\t\tconst prev = (editor?.getAttributes(\"link\") as { href?: string } | undefined)?.href ?? \"\";\n\t\t\t\t\tsetLinkUrl(prev);\n\t\t\t\t\tsetLinkOpen((o) => !o);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Link2 size={16} />\n\t\t\t</Button>\n\t\t</div>\n\t);\n\n\t// ── Link popover (DSPortal-mounted, fixed-position) ───────────────────\n\tconst linkPopover =\n\t\tlinkOpen && linkBtnRef.current ? (\n\t\t\t<DSPortal>\n\t\t\t\t{/* dialog element satisfies biome useSemanticElements (replaces div+role=\"dialog\") */}\n\t\t\t\t{/* open attribute keeps it in normal flow (no modal backdrop); position:fixed */}\n\t\t\t\t<dialog\n\t\t\t\t\topen\n\t\t\t\t\tclassName=\"ds-atom-richtext-linkpopover\"\n\t\t\t\t\taria-label=\"Edit link URL\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\ttop: linkBtnRef.current.getBoundingClientRect().bottom + 4,\n\t\t\t\t\t\tleft: linkBtnRef.current.getBoundingClientRect().left,\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"url\"\n\t\t\t\t\t\tvalue={linkUrl}\n\t\t\t\t\t\tonChange={(e) => setLinkUrl(e.target.value)}\n\t\t\t\t\t\tplaceholder=\"https://example.com\"\n\t\t\t\t\t\tclassName=\"ds-atom-richtext-linkinput\"\n\t\t\t\t\t\t// biome-ignore lint/a11y/noAutofocus: popover input should be focused when opened\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (e.key === \"Escape\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tsetLinkOpen(false);\n\t\t\t\t\t\t\t\teditor?.commands.focus();\n\t\t\t\t\t\t\t} else if (e.key === \"Enter\") {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tif (linkUrl) {\n\t\t\t\t\t\t\t\t\teditor?.chain().focus().extendMarkRange(\"link\").setLink({ href: linkUrl }).run();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teditor?.chain().focus().unsetLink().run();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetLinkOpen(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"ds-atom-richtext-linkactions\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\teditor?.chain().focus().unsetLink().run();\n\t\t\t\t\t\t\t\tsetLinkOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tRemove\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tif (linkUrl) {\n\t\t\t\t\t\t\t\t\teditor?.chain().focus().extendMarkRange(\"link\").setLink({ href: linkUrl }).run();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tsetLinkOpen(false);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tApply\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</dialog>\n\t\t\t</DSPortal>\n\t\t) : null;\n\n\t// ── SSR / pre-init skeleton ────────────────────────────────────────────\n\tif (!editor) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-richtext ds-atom-richtext--loading${className ? ` ${className}` : \"\"}`}\n\t\t\t\tstyle={style}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-busy=\"true\"\n\t\t\t/>\n\t\t);\n\t}\n\n\t// ── Render ─────────────────────────────────────────────────────────────\n\treturn (\n\t\t<div ref={ref} className=\"ds-atom-richtext\" style={style} aria-label={ariaLabel}>\n\t\t\t{!readOnly && (toolbar ?? defaultToolbar)}\n\t\t\t<div\n\t\t\t\tclassName={[\"ds-atom-richtext-surface\", className].filter(Boolean).join(\" \")}\n\t\t\t\tdata-code-dark={codeBlockDark || undefined}\n\t\t\t>\n\t\t\t\t<EditorContent editor={editor} />\n\t\t\t</div>\n\t\t\t{linkPopover}\n\t\t</div>\n\t);\n});\n","import React, {\n\ttype CSSProperties,\n\ttype ReactElement,\n\ttype ReactNode,\n\tforwardRef,\n\tuseEffect,\n\tuseState,\n} from \"react\";\n\nexport interface AppShellProps {\n\t/** Sidebar nav component - receives collapsed + onToggleCollapse via cloneElement */\n\tsidebar: ReactElement<{ collapsed?: boolean; onToggleCollapse?: () => void }>;\n\t/** Topbar component (AppBar DS-72 or any ReactNode) */\n\ttopbar: ReactNode;\n\t/** Main page content */\n\tmain: ReactNode;\n\t/** Optional footer (DS-73 or any ReactNode) */\n\tfooter?: ReactNode;\n\t/**\n\t * localStorage key for sidebar collapse persistence.\n\t * Pass null to disable persistence.\n\t * @default \"ds-sidebar-collapsed\"\n\t */\n\tstorageKey?: string | null;\n\t/**\n\t * Expanded sidebar width in pixels.\n\t * @default 240\n\t */\n\tsidebarWidth?: number;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nfunction readStorage(storageKey: string | null | undefined): boolean {\n\tif (storageKey === null || storageKey === undefined) return false;\n\tif (typeof window === \"undefined\") return false;\n\ttry {\n\t\treturn window.localStorage?.getItem(storageKey) === \"true\";\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * AppShell (DS-71) - top-level CSS Grid layout primitive.\n *\n * Slots: topbar (sticky header), sidebar (collapsible icon rail), main (scrollable content),\n * footer (optional bottom bar).\n *\n * The sidebar slot child receives `collapsed` and `onToggleCollapse` injected via\n * React.cloneElement - no extra context or ref needed.\n */\nexport const AppShell = forwardRef<HTMLDivElement, AppShellProps>(function AppShell(\n\t{\n\t\tsidebar,\n\t\ttopbar,\n\t\tmain,\n\t\tfooter,\n\t\tstorageKey = \"ds-sidebar-collapsed\",\n\t\tsidebarWidth = 240,\n\t\tclassName,\n\t\tstyle,\n\t},\n\tref,\n) {\n\tconst [collapsed, setCollapsed] = useState<boolean>(() => readStorage(storageKey));\n\n\tuseEffect(() => {\n\t\tif (storageKey === null || storageKey === undefined) return;\n\t\tif (typeof window === \"undefined\") return;\n\t\ttry {\n\t\t\twindow.localStorage?.setItem(storageKey, String(collapsed));\n\t\t} catch {\n\t\t\t// localStorage unavailable - silently ignore\n\t\t}\n\t}, [collapsed, storageKey]);\n\n\tconst sidebarWithProps = React.cloneElement(sidebar, {\n\t\tcollapsed,\n\t\tonToggleCollapse: () => setCollapsed((c) => !c),\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tclassName={[\"ds-atom-appshell\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-sidebar-collapsed={collapsed}\n\t\t\tstyle={\n\t\t\t\t{\n\t\t\t\t\t\"--ds-sidebar-w\": collapsed ? \"48px\" : `${sidebarWidth}px`,\n\t\t\t\t\t...style,\n\t\t\t\t} as CSSProperties\n\t\t\t}\n\t\t>\n\t\t\t<header className=\"ds-atom-appshell-topbar\">{topbar}</header>\n\t\t\t<aside className=\"ds-atom-appshell-sidebar\">{sidebarWithProps}</aside>\n\t\t\t<main className=\"ds-atom-appshell-main\">{main}</main>\n\t\t\t{footer && <footer className=\"ds-atom-appshell-footer\">{footer}</footer>}\n\t\t</div>\n\t);\n});\n","import { type CSSProperties, type ReactNode, forwardRef } from \"react\";\nimport { Button } from \"../../inputs/Button\";\nimport { TextInput } from \"../../inputs/TextInput\";\nexport type AppBarVariant = \"minimal\" | \"withSearch\" | \"default\" | \"centered\";\n\nexport interface AppBarProps {\n\t/** Visual variant. @default \"default\" */\n\tvariant?: AppBarVariant;\n\t/** When true, applies frosted-glass background + shadow. Consumer drives via scroll listener. @default false */\n\tscrolled?: boolean;\n\t/** Custom logo content. If omitted, renders a default ink box with \"DS\" label. */\n\tlogo?: ReactNode;\n\t/** Nav links slot (default + centered variants). */\n\tnav?: ReactNode;\n\t/** Right-side actions slot (avatar, notifications, etc.). */\n\tactions?: ReactNode;\n\t/** Callback fired when the search input value changes (withSearch variant). */\n\tonSearchChange?: (value: string) => void;\n\t/** Placeholder for the search input. @default \"Search...\" */\n\tsearchPlaceholder?: string;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst DefaultLogo = () => (\n\t<div style={{ display: \"flex\", alignItems: \"center\", gap: 8 }}>\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\twidth: 22,\n\t\t\t\theight: 22,\n\t\t\t\tborderRadius: 6,\n\t\t\t\tbackground: \"var(--ink)\",\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tcolor: \"var(--amber)\",\n\t\t\t\tfontFamily: \"var(--display)\",\n\t\t\t\tfontWeight: 800,\n\t\t\t\tfontSize: 13,\n\t\t\t}}\n\t\t>\n\t\t\tDS\n\t\t</div>\n\t\t<span\n\t\t\tstyle={{\n\t\t\t\tfontFamily: \"var(--display)\",\n\t\t\t\tfontWeight: 800,\n\t\t\t\tfontSize: 14,\n\t\t\t\tletterSpacing: \"-0.02em\",\n\t\t\t}}\n\t\t>\n\t\t\tDesign System\n\t\t</span>\n\t</div>\n);\n\n/**\n * AppBar - DS-72\n *\n * Standalone sticky topbar primitive. Pass as the `topbar` slot to AppShell (DS-71).\n * Provides 4 variants: minimal, withSearch, default, centered.\n * Consumer-driven `scrolled` prop applies frosted-glass background + shadow transition.\n */\nexport const AppBar = forwardRef<HTMLElement, AppBarProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"default\",\n\t\t\tscrolled = false,\n\t\t\tlogo,\n\t\t\tnav,\n\t\t\tactions,\n\t\t\tonSearchChange,\n\t\t\tsearchPlaceholder = \"Search...\",\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst scrolledStyles: CSSProperties = scrolled\n\t\t\t? {\n\t\t\t\t\tbackground: \"rgba(255, 255, 255, 0.92)\",\n\t\t\t\t\tbackdropFilter: \"blur(14px)\",\n\t\t\t\t\tborderBottom: \"1px solid var(--rule)\",\n\t\t\t\t\tboxShadow: \"0 4px 16px rgba(0, 0, 0, 0.04)\",\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tbackground: \"var(--surf-2)\",\n\t\t\t\t\tbackdropFilter: \"blur(14px)\",\n\t\t\t\t\tborderBottom: \"1px solid transparent\",\n\t\t\t\t\tboxShadow: \"none\",\n\t\t\t\t};\n\n\t\tconst logoNode = logo ?? <DefaultLogo />;\n\n\t\tif (variant === \"minimal\") {\n\t\t\treturn (\n\t\t\t\t<header\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`ds-atom-appbar${className ? ` ${className}` : \"\"}`}\n\t\t\t\t\tdata-variant=\"minimal\"\n\t\t\t\t\tdata-scrolled={String(scrolled)}\n\t\t\t\t\tstyle={{ ...scrolledStyles, transition: \"all 0.2s ease\", ...style }}\n\t\t\t\t>\n\t\t\t\t\t{logoNode}\n\t\t\t\t\t{actions ?? <Button size=\"sm\">Sign in</Button>}\n\t\t\t\t</header>\n\t\t\t);\n\t\t}\n\n\t\tif (variant === \"centered\") {\n\t\t\treturn (\n\t\t\t\t<header\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`ds-atom-appbar${className ? ` ${className}` : \"\"}`}\n\t\t\t\t\tdata-variant=\"centered\"\n\t\t\t\t\tdata-scrolled={String(scrolled)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...scrolledStyles,\n\t\t\t\t\t\ttransition: \"all 0.2s ease\",\n\t\t\t\t\t\tjustifyContent: \"center\",\n\t\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{logoNode}\n\t\t\t\t\t{(nav || actions) && (\n\t\t\t\t\t\t<div style={{ position: \"absolute\", right: 20, display: \"flex\", gap: 6 }}>\n\t\t\t\t\t\t\t{nav}\n\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</header>\n\t\t\t);\n\t\t}\n\n\t\tif (variant === \"withSearch\") {\n\t\t\treturn (\n\t\t\t\t<header\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`ds-atom-appbar${className ? ` ${className}` : \"\"}`}\n\t\t\t\t\tdata-variant=\"withSearch\"\n\t\t\t\t\tdata-scrolled={String(scrolled)}\n\t\t\t\t\tstyle={{ ...scrolledStyles, transition: \"all 0.2s ease\", ...style }}\n\t\t\t\t>\n\t\t\t\t\t<div style={{ display: \"flex\", alignItems: \"center\", gap: 24 }}>\n\t\t\t\t\t\t{logoNode}\n\t\t\t\t\t\t<TextInput\n\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\tclassName=\"ds-atom-appbar-search\"\n\t\t\t\t\t\t\tplaceholder={searchPlaceholder}\n\t\t\t\t\t\t\tonChange={(e) => onSearchChange?.(e.target.value)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t{actions && (\n\t\t\t\t\t\t<div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>{actions}</div>\n\t\t\t\t\t)}\n\t\t\t\t</header>\n\t\t\t);\n\t\t}\n\n\t\t// default variant - nav links + right actions\n\t\treturn (\n\t\t\t<header\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-appbar${className ? ` ${className}` : \"\"}`}\n\t\t\t\tdata-variant=\"default\"\n\t\t\t\tdata-scrolled={String(scrolled)}\n\t\t\t\tstyle={{ ...scrolledStyles, transition: \"all 0.2s ease\", ...style }}\n\t\t\t>\n\t\t\t\t<div style={{ display: \"flex\", alignItems: \"center\", gap: 28 }}>\n\t\t\t\t\t{logoNode}\n\t\t\t\t\t{nav && <div style={{ display: \"flex\", gap: 18 }}>{nav}</div>}\n\t\t\t\t</div>\n\t\t\t\t{actions && <div style={{ display: \"flex\", gap: 8, alignItems: \"center\" }}>{actions}</div>}\n\t\t\t</header>\n\t\t);\n\t},\n);\n\nAppBar.displayName = \"AppBar\";\n","import { type CSSProperties, forwardRef } from \"react\";\n\nexport type FooterVariant = \"compact\" | \"expanded\";\n\nexport interface FooterColumn {\n\ttitle: string;\n\tlinks: Array<{ label: string; href?: string; onClick?: () => void }>;\n}\n\nexport interface FooterProps {\n\t/** Visual variant. @default \"compact\" */\n\tvariant?: FooterVariant;\n\t/** Copyright line text. @default \"© 2026 - All rights reserved\" */\n\tcopyright?: string;\n\t/** Compact variant: right-side link row. */\n\tlinks?: Array<{ label: string; href?: string; onClick?: () => void }>;\n\t/** Expanded variant: array of column definitions (4 columns recommended). */\n\tcolumns?: FooterColumn[];\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\n/**\n * Footer - DS-73\n *\n * Standalone page footer primitive. Pass as the `footer` slot to AppShell (DS-71).\n * - `compact`: 1-line bar with copyright + utility links.\n * - `expanded`: 4-column marketing footer with column titles + links + bottom copyright row.\n */\nexport const Footer = forwardRef<HTMLElement, FooterProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"compact\",\n\t\t\tcopyright = \"© 2026 - All rights reserved\",\n\t\t\tlinks = [],\n\t\t\tcolumns = [],\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst renderLink = (\n\t\t\titem: { label: string; href?: string; onClick?: () => void },\n\t\t\tkey: string,\n\t\t) => {\n\t\t\tif (item.href) {\n\t\t\t\treturn (\n\t\t\t\t\t<a key={key} href={item.href} className=\"ds-atom-footer-link\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</a>\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<button key={key} type=\"button\" className=\"ds-atom-footer-link\" onClick={item.onClick}>\n\t\t\t\t\t{item.label}\n\t\t\t\t</button>\n\t\t\t);\n\t\t};\n\n\t\tif (variant === \"expanded\") {\n\t\t\treturn (\n\t\t\t\t<footer\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={`ds-atom-footer${className ? ` ${className}` : \"\"}`}\n\t\t\t\t\tdata-variant=\"expanded\"\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t{columns.length > 0 && (\n\t\t\t\t\t\t<div className=\"ds-atom-footer-cols\">\n\t\t\t\t\t\t\t{columns.map((col) => (\n\t\t\t\t\t\t\t\t<div key={col.title} className=\"ds-atom-footer-col\">\n\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-footer-col-title\">{col.title}</div>\n\t\t\t\t\t\t\t\t\t<div style={{ display: \"flex\", flexDirection: \"column\" }}>\n\t\t\t\t\t\t\t\t\t\t{col.links.map((link) => renderLink(link, `${col.title}-${link.label}`))}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingTop: 16,\n\t\t\t\t\t\t\tborderTop: \"1px solid var(--rule)\",\n\t\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\t\tfontSize: 11,\n\t\t\t\t\t\t\tcolor: \"var(--ink-4)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{copyright}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</footer>\n\t\t\t);\n\t\t}\n\n\t\t// compact variant\n\t\treturn (\n\t\t\t<footer\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`ds-atom-footer${className ? ` ${className}` : \"\"}`}\n\t\t\t\tdata-variant=\"compact\"\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t<span>{copyright}</span>\n\t\t\t\t{links.length > 0 && (\n\t\t\t\t\t<div style={{ display: \"flex\", gap: 16 }}>\n\t\t\t\t\t\t{links.map((link) => renderLink(link, link.label))}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</footer>\n\t\t);\n\t},\n);\n\nFooter.displayName = \"Footer\";\n","import type { CSSProperties } from \"react\";\n\n// ─── DS-75: FormValidation helpers ────────────────────────────────────────────\n\nexport interface PasswordStrengthProps {\n\t/** 0=empty, 1=weak, 2=fair, 3=good, 4=strong */\n\tscore: 0 | 1 | 2 | 3 | 4;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\nconst STRENGTH_LABELS = [\"\", \"Weak\", \"Fair\", \"Good\", \"Strong\"] as const;\n\nfunction segmentColor(index: number, score: number): string {\n\tif (score === 0 || index >= score) return \"var(--ink-5)\";\n\tif (score === 1) return \"var(--red)\";\n\tif (score === 4) return \"var(--green-vivid)\";\n\t// score 2 or 3 → amber for active segments\n\treturn \"var(--amber)\";\n}\n\nfunction labelColor(score: number): string {\n\tif (score <= 0) return \"var(--ink-4)\";\n\tif (score === 1) return \"var(--red)\";\n\tif (score <= 3) return \"var(--amber-d)\";\n\treturn \"var(--green-vivid)\";\n}\n\nexport function PasswordStrength({ score, className, style }: PasswordStrengthProps) {\n\tconst label = STRENGTH_LABELS[score];\n\treturn (\n\t\t<div className={[\"ds-atom-pwstrength\", className].filter(Boolean).join(\" \")} style={style}>\n\t\t\t<div className=\"ds-atom-pwstrength-segs\">\n\t\t\t\t{[0, 1, 2, 3].map((i) => (\n\t\t\t\t\t<span\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tclassName=\"ds-atom-pwstrength-seg\"\n\t\t\t\t\t\tstyle={{ background: segmentColor(i, score) }}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t{label && (\n\t\t\t\t<span className=\"ds-atom-pwstrength-label\" style={{ color: labelColor(score) }}>\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nexport interface FieldErrorProps {\n\tmessage?: string | null;\n\tclassName?: string;\n}\n\nexport function FieldError({ message, className }: FieldErrorProps) {\n\tif (!message) return null;\n\treturn (\n\t\t<span role=\"alert\" className={[\"ds-atom-field-error\", className].filter(Boolean).join(\" \")}>\n\t\t\t{message}\n\t\t</span>\n\t);\n}\n\nexport interface FormErrorSummaryProps {\n\terrors: string[];\n\t/** @default \"Please fix the following errors:\" */\n\ttitle?: string;\n\tclassName?: string;\n}\n\nexport function FormErrorSummary({\n\terrors,\n\ttitle = \"Please fix the following errors:\",\n\tclassName,\n}: FormErrorSummaryProps) {\n\tif (errors.length === 0) return null;\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={[\"ds-atom-form-error-summary\", className].filter(Boolean).join(\" \")}\n\t\t>\n\t\t\t<strong>{title}</strong>\n\t\t\t<ul>\n\t\t\t\t{errors.map((err, i) => (\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: static error list - order is stable and no unique IDs available\n\t\t\t\t\t<li key={i}>{err}</li>\n\t\t\t\t))}\n\t\t\t</ul>\n\t\t</div>\n\t);\n}\n","import { type RefObject, useState } from \"react\";\nimport { X } from \"../../icons\";\nimport { Button } from \"../../inputs/Button\";\nimport { Popover } from \"../../overlays/Popover\";\n// ─── DS-76: Coachmark - anchored first-run hint ────────────────────────────\n\nexport interface CoachmarkProps {\n\t/** Ref to the element being highlighted */\n\tanchorRef: RefObject<HTMLElement | null>;\n\ttitle: string;\n\tdesc?: string;\n\t/** Current step number (1-based) */\n\tstep?: number;\n\t/** Total steps in the coachmark sequence */\n\ttotal?: number;\n\tonNext?: () => void;\n\tonDone?: () => void;\n\t/**\n\t * localStorage key for persist-dismiss state.\n\t * Omit or pass null to disable persistence.\n\t */\n\tstorageKey?: string | null;\n\tplacement?: \"bottom-start\" | \"bottom-end\" | \"top-start\" | \"top-end\";\n}\n\nfunction readDismissed(storageKey: string | null | undefined): boolean {\n\tif (typeof window === \"undefined\") return false;\n\tif (!storageKey) return false;\n\treturn localStorage.getItem(storageKey) === \"dismissed\";\n}\n\nexport function Coachmark({\n\tanchorRef,\n\ttitle,\n\tdesc,\n\tstep,\n\ttotal,\n\tonNext,\n\tonDone,\n\tstorageKey,\n\tplacement = \"bottom-start\",\n}: CoachmarkProps) {\n\tconst [dismissed, setDismissed] = useState<boolean>(() => readDismissed(storageKey));\n\n\tfunction dismiss() {\n\t\tsetDismissed(true);\n\t\tif (typeof window !== \"undefined\" && storageKey) {\n\t\t\tlocalStorage.setItem(storageKey, \"dismissed\");\n\t\t}\n\t}\n\n\tconst isLastStep = step !== undefined && total !== undefined && step >= total;\n\tconst hasSteps = step !== undefined && total !== undefined;\n\n\treturn (\n\t\t<Popover\n\t\t\tanchorRef={anchorRef}\n\t\t\topen={!dismissed}\n\t\t\tonOpenChange={(open) => {\n\t\t\t\tif (!open) dismiss();\n\t\t\t}}\n\t\t\tplacement={placement}\n\t\t>\n\t\t\t<div className=\"ds-atom-coachmark\">\n\t\t\t\t{/* Header: title + dismiss */}\n\t\t\t\t<div className=\"ds-atom-coachmark-header\">\n\t\t\t\t\t<div className=\"ds-atom-coachmark-title\">{title}</div>\n\t\t\t\t\t<Button variant=\"ghost\" size=\"xs\" onClick={dismiss} aria-label=\"Dismiss\">\n\t\t\t\t\t\t<X size={12} />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\n\t\t\t\t{desc && <div className=\"ds-atom-coachmark-desc\">{desc}</div>}\n\n\t\t\t\t{/* Footer: step dots + actions */}\n\t\t\t\t{hasSteps && (\n\t\t\t\t\t<div className=\"ds-atom-coachmark-footer\">\n\t\t\t\t\t\t{/* Step dots */}\n\t\t\t\t\t\t<div className=\"ds-atom-coachmark-dots\">\n\t\t\t\t\t\t\t{Array.from({ length: total ?? 0 }, (_, i) => (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: step dots are positional by design; no stable ID available\n\t\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\t\tclassName=\"ds-atom-coachmark-dot\"\n\t\t\t\t\t\t\t\t\tdata-active={i === (step ?? 1) - 1 ? \"true\" : \"false\"}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Next / Done */}\n\t\t\t\t\t\t<div className=\"ds-atom-coachmark-actions\">\n\t\t\t\t\t\t\t{isLastStep ? (\n\t\t\t\t\t\t\t\t<Button size=\"xs\" variant=\"primary\" onClick={onDone}>\n\t\t\t\t\t\t\t\t\tDone\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<Button size=\"xs\" variant=\"primary\" onClick={onNext}>\n\t\t\t\t\t\t\t\t\tNext\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</Popover>\n\t);\n}\n","import { Fragment, type ReactNode, useState } from \"react\";\nimport { ProgressBar } from \"../../feedback/ProgressBar\";\nimport { useFocusTrap } from \"../../hooks/useFocusTrap\";\nimport { Check } from \"../../icons\";\nimport { Button } from \"../../inputs/Button\";\nexport interface WizardStep {\n\tlabel: string;\n\tdesc?: string;\n\t/** Return error string to block advance; return null/undefined to proceed. */\n\tvalidate?: () => string | null | undefined;\n}\n\nexport interface WizardProps {\n\tsteps: WizardStep[];\n\tonComplete: () => void;\n\tonCancel?: () => void;\n\t/** @default \"horizontal\" */\n\torientation?: \"horizontal\" | \"vertical\";\n\tchildren: ReactNode | ((step: number) => ReactNode);\n}\n\n/**\n * Wizard - multi-step form scaffold (DS-74).\n *\n * <Wizard steps={steps} onComplete={handleFinish}>\n * {(step) => <StepContent step={step} />}\n * </Wizard>\n *\n * Renders a horizontal (or vertical) stepper, a ProgressBar, step content,\n * optional inline validation error, and Back/Next navigation - all within a\n * single focus-trapped container.\n *\n * Per-step validation: attach `validate()` to a WizardStep; returning a\n * non-empty string blocks advance and surfaces the error inline.\n * Thrown exceptions are caught and treated as validation failures\n * (threat T-18-04-02).\n *\n * Does NOT wrap content in a <form> - step fields are the consumer's\n * responsibility. Wizard manages step state only.\n */\nexport function Wizard({ steps, onComplete, onCancel, orientation, children }: WizardProps) {\n\tconst [current, setCurrent] = useState(0);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [trapEl, setTrapEl] = useState<HTMLDivElement | null>(null);\n\n\t// Focus trap is always active while the Wizard is mounted.\n\tuseFocusTrap(trapEl, true);\n\n\tconst handleNext = () => {\n\t\t// T-18-04-02: wrap validate() in try/catch so thrown errors are treated\n\t\t// as \"validation failed\" rather than crashing the component.\n\t\tlet validationResult: string | null | undefined;\n\t\ttry {\n\t\t\tvalidationResult = steps[current]?.validate?.();\n\t\t} catch {\n\t\t\tvalidationResult = \"Validation failed: unexpected error\";\n\t\t}\n\n\t\tif (typeof validationResult === \"string\" && validationResult.length > 0) {\n\t\t\tsetError(validationResult);\n\t\t\treturn;\n\t\t}\n\n\t\tsetError(null);\n\n\t\tif (current === steps.length - 1) {\n\t\t\tonComplete();\n\t\t\treturn;\n\t\t}\n\n\t\tsetCurrent((c) => c + 1);\n\t};\n\n\tconst handleBack = () => {\n\t\tif (current === 0) return;\n\t\tsetError(null);\n\t\tsetCurrent((c) => c - 1);\n\t};\n\n\tconst pct = ((current + 1) / steps.length) * 100;\n\n\treturn (\n\t\t<div ref={setTrapEl} className=\"ds-atom-wizard\" data-orientation={orientation ?? \"horizontal\"}>\n\t\t\t{/* Stepper */}\n\t\t\t<div className=\"ds-atom-wizard-stepper\">\n\t\t\t\t{steps.map((step, i) => {\n\t\t\t\t\tconst status = i < current ? \"done\" : i === current ? \"active\" : \"pending\";\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: wizard steps are positional by design; labels may not be unique, and step identity is the index (same pattern as Tabs/Carousel in this codebase)\n\t\t\t\t\t\t<Fragment key={i}>\n\t\t\t\t\t\t\t{i > 0 && <div className=\"ds-atom-wizard-connector\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t<div className=\"ds-atom-wizard-step\" data-status={status}>\n\t\t\t\t\t\t\t\t<div className=\"ds-atom-wizard-dot\">\n\t\t\t\t\t\t\t\t\t{status === \"done\" ? <Check size={13} color=\"var(--cream)\" /> : i + 1}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div className=\"ds-atom-wizard-step-text\">\n\t\t\t\t\t\t\t\t\t<div className=\"ds-atom-wizard-label\">{step.label}</div>\n\t\t\t\t\t\t\t\t\t{step.desc && <div className=\"ds-atom-wizard-desc\">{step.desc}</div>}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\n\t\t\t{/* Progress bar */}\n\t\t\t<ProgressBar value={pct} />\n\n\t\t\t{/* Step content */}\n\t\t\t<div className=\"ds-atom-wizard-content\">\n\t\t\t\t{typeof children === \"function\" ? children(current) : children}\n\t\t\t</div>\n\n\t\t\t{/* Validation error - role=\"alert\" so screen readers announce it */}\n\t\t\t{error && (\n\t\t\t\t<div className=\"ds-atom-wizard-error\" role=\"alert\">\n\t\t\t\t\t{error}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Navigation - INSIDE the focus trap boundary */}\n\t\t\t<div className=\"ds-atom-wizard-nav\">\n\t\t\t\t{onCancel && (\n\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" onClick={onCancel} style={{ marginRight: \"auto\" }}>\n\t\t\t\t\t\tCancel\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t<Button variant=\"secondary\" size=\"sm\" onClick={handleBack} disabled={current === 0}>\n\t\t\t\t\tBack\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"primary\" size=\"sm\" onClick={handleNext}>\n\t\t\t\t\t{current === steps.length - 1 ? \"Finish\" : \"Next\"}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n","import { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport { TextInput } from \"../../inputs/TextInput\";\nimport { Textarea } from \"../../inputs/Textarea\";\nimport { FieldError } from \"../../patterns/FormValidation\";\ntype InlineEditState = \"idle\" | \"editing\" | \"saving\" | \"error\";\n\nexport interface InlineEditProps {\n\t/** Current display value. */\n\tvalue: string;\n\t/**\n\t * Called with the new value when the user commits (Enter key or blur).\n\t * Return a Promise to trigger the saving state. If the Promise rejects,\n\t * the component enters error state with the rejection message.\n\t */\n\tonSave: (value: string) => Promise<void> | void;\n\t/** When true, renders a textarea instead of a single-line input.\n\t * @default false\n\t */\n\tmultiline?: boolean;\n\t/** Placeholder shown in idle state when value is empty. */\n\tplaceholder?: string;\n\t/** When true, the idle span is not clickable (no editing allowed).\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\n/**\n * InlineEdit (DS-77) - click-to-edit pattern with optimistic save + error recovery.\n *\n * State machine:\n * idle → click / Enter / Space → editing\n * editing → Enter → saving\n * editing → Escape / blur → idle (restored original)\n * saving → onSave resolves → idle\n * saving → onSave rejects → error (input re-enabled with last draft)\n * error → Escape / blur → idle (restored original)\n * error → Enter → saving (retry)\n *\n * Blur always cancels (reverts), matching the handoff spec for click-to-edit\n * in table cells and inline fields.\n */\nexport function InlineEdit({\n\tvalue,\n\tonSave,\n\tmultiline = false,\n\tplaceholder,\n\tdisabled = false,\n\tclassName,\n\tstyle,\n}: InlineEditProps) {\n\tconst [state, setState] = useState<InlineEditState>(\"idle\");\n\tconst [draft, setDraft] = useState(value);\n\tconst [errorMsg, setErrorMsg] = useState<string | null>(null);\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\n\n\t// Sync draft with external value changes when in idle state\n\tuseEffect(() => {\n\t\tif (state === \"idle\") setDraft(value);\n\t}, [value, state]);\n\n\t// Auto-focus and select when entering editing state\n\tuseEffect(() => {\n\t\tif (state === \"editing\" || state === \"error\") {\n\t\t\tif (multiline) {\n\t\t\t\ttextareaRef.current?.focus();\n\t\t\t} else {\n\t\t\t\tinputRef.current?.focus();\n\t\t\t\tinputRef.current?.select();\n\t\t\t}\n\t\t}\n\t}, [state, multiline]);\n\n\tasync function handleCommit() {\n\t\tsetState(\"saving\");\n\t\tsetErrorMsg(null);\n\t\ttry {\n\t\t\tawait onSave(draft);\n\t\t\tsetState(\"idle\");\n\t\t} catch (err: unknown) {\n\t\t\tconst msg =\n\t\t\t\terr instanceof Error ? err.message : typeof err === \"string\" ? err : \"Save failed\";\n\t\t\tsetState(\"error\");\n\t\t\tsetErrorMsg(msg);\n\t\t}\n\t}\n\n\tfunction handleCancel() {\n\t\tsetDraft(value);\n\t\tsetState(\"idle\");\n\t\tsetErrorMsg(null);\n\t}\n\n\tfunction handleKeyDown(e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) {\n\t\tif (e.key === \"Escape\") {\n\t\t\te.preventDefault();\n\t\t\thandleCancel();\n\t\t} else if (e.key === \"Enter\") {\n\t\t\t// For textarea, Shift+Enter inserts a newline; plain Enter commits\n\t\t\tif (!multiline || !e.shiftKey) {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleCommit();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleBlur() {\n\t\t// Blur always cancels (reverts to original value)\n\t\tif (state === \"editing\" || state === \"error\") {\n\t\t\thandleCancel();\n\t\t}\n\t}\n\n\t// Editing, saving, or error state: show input / textarea\n\tif (state !== \"idle\") {\n\t\tconst sharedProps = {\n\t\t\tclassName: \"ds-atom-inlineedit-input\",\n\t\t\tvalue: draft,\n\t\t\tdisabled: state === \"saving\",\n\t\t\tonChange: (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n\t\t\t\tsetDraft(e.target.value),\n\t\t\tonKeyDown: handleKeyDown,\n\t\t\tonBlur: handleBlur,\n\t\t\t\"data-state\": state,\n\t\t\terror: state === \"error\",\n\t\t};\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={[\"ds-atom-inlineedit-wrap\", className].filter(Boolean).join(\" \")}\n\t\t\t\tstyle={style}\n\t\t\t>\n\t\t\t\t{multiline ? (\n\t\t\t\t\t<Textarea ref={textareaRef} {...sharedProps} rows={3} />\n\t\t\t\t) : (\n\t\t\t\t\t<TextInput ref={inputRef} {...sharedProps} type=\"text\" />\n\t\t\t\t)}\n\t\t\t\t<FieldError message={state === \"error\" ? errorMsg : null} />\n\t\t\t</span>\n\t\t);\n\t}\n\n\t// Idle state - <span role=\"button\"> is intentional: switching to a native <button> would\n\t// introduce block-level layout and cause a size shift when toggling between idle and editing\n\t// states. Keyboard and ARIA wiring is fully in place (tabIndex, onKeyDown, aria-disabled).\n\treturn (\n\t\t<span\n\t\t\tclassName={[\"ds-atom-inlineedit\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-state=\"idle\"\n\t\t\tonClick={disabled ? undefined : () => setState(\"editing\")}\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\tonKeyDown={(e) => {\n\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (!disabled) setState(\"editing\");\n\t\t\t\t}\n\t\t\t}}\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: span role=button is required here to keep inline flow; a native <button> causes layout shift between idle/editing states\n\t\t\trole=\"button\"\n\t\t\taria-label=\"Click to edit\"\n\t\t\taria-disabled={disabled}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{value || (placeholder ? <span style={{ color: \"var(--ink-4)\" }}>{placeholder}</span> : null)}\n\t\t</span>\n\t);\n}\n","import { type CSSProperties, useRef, useState } from \"react\";\nimport { DSDropdown } from \"../../_internals/DSDropdown\";\nimport { Button } from \"../../inputs/Button\";\nimport { Chip } from \"../../inputs/Chip\";\nimport { TextInput } from \"../../inputs/TextInput\";\nexport interface SearchFilter {\n\tid: string;\n\tlabel: string;\n\ttone?: \"default\" | \"match\" | \"miss\" | \"learning\" | \"tag\";\n}\n\nexport interface SearchSuggestion {\n\tid: string;\n\tlabel: string;\n}\n\nexport interface SearchAndFiltersProps {\n\t/** Controlled value for the search input. */\n\tvalue?: string;\n\t/** Placeholder text for the search input.\n\t * @default \"Search...\"\n\t */\n\tplaceholder?: string;\n\t/**\n\t * Suggestions shown in the DSDropdown autocomplete when the input is\n\t * focused and has a value. Consumer is responsible for filtering.\n\t */\n\tsuggestions?: SearchSuggestion[];\n\t/** Filter chips shown below the search input. */\n\tactiveFilters?: SearchFilter[];\n\t/** Called on every keystroke with the current search string. */\n\tonSearch?: (value: string) => void;\n\t/** Called when a suggestion is selected from the dropdown. */\n\tonSuggestionSelect?: (suggestion: SearchSuggestion) => void;\n\t/** Called when a filter chip × button is clicked. */\n\tonFilterRemove?: (filter: SearchFilter) => void;\n\t/** Called when the \"Clear all\" button is clicked. */\n\tonClearFilters?: () => void;\n\tclassName?: string;\n\tstyle?: CSSProperties;\n}\n\n/**\n * SearchAndFilters (DS-78) - search input with DSDropdown autocomplete + Chip filter tokens.\n *\n * Composes:\n * - DSDropdown (_internals/DSDropdown) for the suggestions overlay\n * - Chip (Chip.tsx) for each active filter token\n *\n * Usage:\n * ```tsx\n * <SearchAndFilters\n * suggestions={filteredSuggestions}\n * activeFilters={activeFilters}\n * onSearch={setQuery}\n * onSuggestionSelect={(s) => addFilter({ id: s.id, label: s.label })}\n * onFilterRemove={(f) => removeFilter(f.id)}\n * onClearFilters={clearAllFilters}\n * />\n * ```\n */\nexport function SearchAndFilters({\n\tvalue,\n\tplaceholder = \"Search...\",\n\tsuggestions,\n\tactiveFilters,\n\tonSearch,\n\tonSuggestionSelect,\n\tonFilterRemove,\n\tonClearFilters,\n\tclassName,\n\tstyle,\n}: SearchAndFiltersProps) {\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst [open, setOpen] = useState(false);\n\tconst [activeIndex, setActiveIndex] = useState(-1);\n\tconst [inputValue, setInputValue] = useState(value ?? \"\");\n\n\tconst hasSuggestions = (suggestions?.length ?? 0) > 0;\n\tconst hasFilters = (activeFilters?.length ?? 0) > 0;\n\n\tfunction handleInputChange(e: React.ChangeEvent<HTMLInputElement>) {\n\t\tconst v = e.target.value;\n\t\tsetInputValue(v);\n\t\tonSearch?.(v);\n\t\tif (hasSuggestions) setOpen(true);\n\t}\n\n\tfunction handleFocus() {\n\t\tif (hasSuggestions && inputValue) setOpen(true);\n\t}\n\n\tfunction handleSelect(idx: number) {\n\t\tconst s = suggestions?.[idx];\n\t\tif (s) {\n\t\t\tonSuggestionSelect?.(s);\n\t\t}\n\t\tsetOpen(false);\n\t\tsetInputValue(\"\");\n\t}\n\n\treturn (\n\t\t<div className={[\"ds-atom-searchfilters\", className].filter(Boolean).join(\" \")} style={style}>\n\t\t\t<div className=\"ds-atom-searchfilters-bar\">\n\t\t\t\t<TextInput\n\t\t\t\t\tref={inputRef}\n\t\t\t\t\ttype=\"search\"\n\t\t\t\t\tclassName=\"ds-atom-searchfilters-input\"\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t/>\n\t\t\t\t{hasFilters && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclassName=\"ds-atom-searchfilters-clear\"\n\t\t\t\t\t\tonClick={onClearFilters}\n\t\t\t\t\t>\n\t\t\t\t\t\tClear all\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{hasSuggestions && (\n\t\t\t\t<DSDropdown\n\t\t\t\t\tanchorRef={inputRef}\n\t\t\t\t\topen={open}\n\t\t\t\t\tonOpenChange={setOpen}\n\t\t\t\t\tactiveIndex={activeIndex}\n\t\t\t\t\tonActiveIndexChange={setActiveIndex}\n\t\t\t\t\titemCount={suggestions!.length}\n\t\t\t\t\tonSelect={handleSelect}\n\t\t\t\t\ttypeAheadGetText={(idx) => suggestions?.[idx]?.label ?? \"\"}\n\t\t\t\t\tmatchAnchorWidth\n\t\t\t\t>\n\t\t\t\t\t{/* biome-ignore lint/a11y/useFocusableInteractive: combobox listbox is not focusable; aria-activedescendant on the input drives active-option focus per D-501 */}\n\t\t\t\t\t{/* biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: D-501 mandates <ul role=\"listbox\"> for combobox semantic */}\n\t\t\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: native <select> can't host combobox/listbox composition; ARIA listbox is the spec'd path per D-501 */}\n\t\t\t\t\t<ul role=\"listbox\" style={{ listStyle: \"none\", margin: 0, padding: 0 }}>\n\t\t\t\t\t\t{suggestions!.map((s, i) => (\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useFocusableInteractive: combobox listbox option is non-tabbable; keyboard driven at document level in DSDropdown per D-501\n\t\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: keyboard navigation centralized at document level in DSDropdown; onClick is the mouse equivalent\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: D-501 mandates <li role=\"option\"> inside listbox\n\t\t\t\t\t\t\t\t// biome-ignore lint/a11y/useSemanticElements: native <option> only valid inside <select>; combobox spec requires <li role=\"option\"> per D-501\n\t\t\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\t\t\taria-selected={i === activeIndex}\n\t\t\t\t\t\t\t\tclassName=\"ds-atom-searchfilters-option\"\n\t\t\t\t\t\t\t\tdata-active={i === activeIndex}\n\t\t\t\t\t\t\t\tonClick={() => handleSelect(i)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{s.label}\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ul>\n\t\t\t\t</DSDropdown>\n\t\t\t)}\n\n\t\t\t{hasFilters && (\n\t\t\t\t<div className=\"ds-atom-searchfilters-chips\">\n\t\t\t\t\t{activeFilters!.map((f) => (\n\t\t\t\t\t\t<Chip key={f.id} tone={f.tone ?? \"default\"} onRemove={() => onFilterRemove?.(f)}>\n\t\t\t\t\t\t\t{f.label}\n\t\t\t\t\t\t</Chip>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import {\n\tDndContext,\n\ttype DragEndEvent,\n\ttype DragOverEvent,\n\tDragOverlay,\n\ttype DragStartEvent,\n\tKeyboardSensor,\n\tPointerSensor,\n\ttype UniqueIdentifier,\n\tclosestCenter,\n\tuseSensor,\n\tuseSensors,\n} from \"@dnd-kit/core\";\nimport {\n\tSortableContext,\n\tarrayMove,\n\tsortableKeyboardCoordinates,\n\tuseSortable,\n\tverticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { type ReactNode, createContext, useCallback, useContext, useState } from \"react\";\nimport { useReducedMotion } from \"../../hooks/useReducedMotion\";\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SortableItemData {\n\tid: string;\n\t[key: string]: unknown;\n}\n\nexport interface SortableProps {\n\t/** Array of items; each must have a unique `id` string */\n\titems: SortableItemData[];\n\t/** Called after a successful drag-and-drop reorder with the new items array */\n\tonReorder: (items: SortableItemData[]) => void;\n\t/** Render each item's content */\n\trenderItem: (item: SortableItemData, index: number) => ReactNode;\n\t/** Stable list identifier - required when used inside SortableDndContext */\n\tid?: string;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\nexport interface SortableItemProps {\n\tid: string;\n\tchildren: ReactNode;\n\treducedMotion: boolean;\n}\n\nexport interface SortableDndContextProps {\n\tchildren: ReactNode;\n\t/**\n\t * Called when an item moves between two lists.\n\t * @param activeId - id of the dragged item\n\t * @param overId - id of the item it was dropped over\n\t * @param activeListId - `id` prop of the source Sortable\n\t * @param overListId - `id` prop of the destination Sortable\n\t */\n\tonMove: (\n\t\tactiveId: UniqueIdentifier,\n\t\toverId: UniqueIdentifier,\n\t\tactiveListId: string | undefined,\n\t\toverListId: string | undefined,\n\t) => void;\n\t/**\n\t * Renders the drag overlay card when an item is being dragged across lists.\n\t * Receives the active item id. If omitted, a ghost placeholder is shown.\n\t */\n\trenderOverlay?: (activeId: UniqueIdentifier) => ReactNode;\n}\n\n// ─── Context sentinel ─────────────────────────────────────────────────────────\n// Internal context - Sortable checks this to decide whether to render its own DndContext.\nconst SortableDndCtx = createContext<boolean>(false);\n\n// ─── SortableItem ─────────────────────────────────────────────────────────────\n\nexport function SortableItem({ id, children, reducedMotion }: SortableItemProps) {\n\tconst { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({\n\t\tid,\n\t});\n\n\tconst style: React.CSSProperties = {\n\t\ttransform: reducedMotion ? undefined : (CSS.Transform.toString(transform) ?? undefined),\n\t\ttransition: reducedMotion ? undefined : (transition ?? undefined),\n\t\t// Source slot shows as dotted placeholder via CSS [data-dragging]; no opacity change.\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tclassName=\"ds-atom-sortable-item\"\n\t\t\tdata-dragging={isDragging ? \"true\" : undefined}\n\t\t\tstyle={style}\n\t\t\t{...attributes}\n\t\t\t{...listeners}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n// ─── SortableDndContext ───────────────────────────────────────────────────────\n// Shared DndContext for cross-list drag - D-12.\n// Hosts the DndContext and provides SortableDndCtx sentinel to children Sortable instances.\n\nexport function SortableDndContext({ children, onMove, renderOverlay }: SortableDndContextProps) {\n\tconst reducedMotion = useReducedMotion();\n\tconst [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n\t);\n\n\tconst handleDragStart = useCallback((e: DragStartEvent) => {\n\t\tsetActiveId(e.active.id);\n\t}, []);\n\n\tconst handleDragOver = useCallback((_e: DragOverEvent) => {\n\t\t// cross-list overId tracking handled by parent state if needed\n\t}, []);\n\n\tconst handleDragEnd = useCallback(\n\t\t(e: DragEndEvent) => {\n\t\t\tconst { active, over } = e;\n\t\t\tsetActiveId(null);\n\t\t\tif (!over || active.id === over.id) return;\n\t\t\tconst activeListId = active.data.current?.sortable?.containerId as string | undefined;\n\t\t\tconst overListId = over.data.current?.sortable?.containerId as string | undefined;\n\t\t\tonMove(active.id, over.id, activeListId, overListId);\n\t\t},\n\t\t[onMove],\n\t);\n\n\treturn (\n\t\t<SortableDndCtx.Provider value={true}>\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tcollisionDetection={closestCenter}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragOver={handleDragOver}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t\t<DragOverlay dropAnimation={reducedMotion ? null : undefined}>\n\t\t\t\t\t{activeId ? (\n\t\t\t\t\t\t<div className=\"ds-atom-sortable-overlay\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t{renderOverlay ? (\n\t\t\t\t\t\t\t\trenderOverlay(activeId)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<div className=\"ds-atom-sortable-overlay-ghost\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</DragOverlay>\n\t\t\t</DndContext>\n\t\t</SortableDndCtx.Provider>\n\t);\n}\n\n// ─── Sortable ─────────────────────────────────────────────────────────────────\n// Self-contained sortable list. When inside a SortableDndContext, renders\n// SortableContext only (parent owns DndContext).\n\nexport function Sortable({ items, onReorder, renderItem, id, className, style }: SortableProps) {\n\tconst reducedMotion = useReducedMotion();\n\tconst hasParentDnd = useContext(SortableDndCtx);\n\n\t// overId is only tracked when this Sortable owns its DndContext (standalone mode).\n\t// In cross-list mode (hasParentDnd=true), the parent SortableDndContext drives state.\n\tconst [activeId, setActiveId] = useState<UniqueIdentifier | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor),\n\t\tuseSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n\t);\n\n\tconst handleDragStart = useCallback((e: DragStartEvent) => {\n\t\tsetActiveId(e.active.id);\n\t}, []);\n\n\tconst handleDragOver = useCallback((_e: DragOverEvent) => {}, []);\n\n\tconst handleDragEnd = useCallback(\n\t\t(e: DragEndEvent) => {\n\t\t\tsetActiveId(null);\n\t\t\tconst { active, over } = e;\n\t\t\tif (!over || active.id === over.id) return;\n\t\t\tconst oldIndex = items.findIndex((item) => item.id === active.id);\n\t\t\tconst newIndex = items.findIndex((item) => item.id === over.id);\n\t\t\t// T-18-08-02: guard against mismatched indexes\n\t\t\tif (oldIndex === -1 || newIndex === -1) return;\n\t\t\tonReorder(arrayMove(items, oldIndex, newIndex));\n\t\t},\n\t\t[items, onReorder],\n\t);\n\n\tconst activeItem = items.find((item) => item.id === activeId);\n\tconst activeIndex = activeItem ? items.indexOf(activeItem) : -1;\n\n\tconst listContent = (\n\t\t<SortableContext items={items.map((i) => i.id)} strategy={verticalListSortingStrategy}>\n\t\t\t<ul\n\t\t\t\tclassName={`ds-atom-sortable${className ? ` ${className}` : \"\"}`}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-list-id={id}\n\t\t\t>\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t<li key={item.id} style={{ listStyle: \"none\", padding: 0, margin: 0 }}>\n\t\t\t\t\t\t<SortableItem id={item.id} reducedMotion={reducedMotion}>\n\t\t\t\t\t\t\t{renderItem(item, index)}\n\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t</li>\n\t\t\t\t))}\n\t\t\t</ul>\n\t\t</SortableContext>\n\t);\n\n\t// When inside SortableDndContext: render SortableContext only (parent owns DndContext).\n\tif (hasParentDnd) {\n\t\treturn listContent;\n\t}\n\n\t// Standalone mode: wrap in own DndContext.\n\treturn (\n\t\t<DndContext\n\t\t\tsensors={sensors}\n\t\t\tcollisionDetection={closestCenter}\n\t\t\tonDragStart={handleDragStart}\n\t\t\tonDragOver={handleDragOver}\n\t\t\tonDragEnd={handleDragEnd}\n\t\t>\n\t\t\t{listContent}\n\t\t\t<DragOverlay dropAnimation={reducedMotion ? null : undefined}>\n\t\t\t\t{activeItem ? (\n\t\t\t\t\t// Render the actual card content as the drag overlay - same size as the source\n\t\t\t\t\t<div className=\"ds-atom-sortable-overlay\" aria-hidden=\"true\">\n\t\t\t\t\t\t{renderItem(activeItem, activeIndex)}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t</DragOverlay>\n\t\t</DndContext>\n\t);\n}\n"]}