@qball-inc/react 1.0.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/smoke/Surface.tsx","../src/primitives/Button.tsx","../src/primitives/Input.tsx","../src/primitives/Field.tsx","../src/primitives/Select.tsx","../src/primitives/Switch.tsx","../src/primitives/Segmented.tsx","../src/icons/IconBase.tsx","../src/icons/generated/ui/chevron-up.tsx","../src/icons/generated/ui/chevron-down.tsx","../src/icons/generated/ui/chevron-left.tsx","../src/icons/generated/ui/chevron-right.tsx","../src/icons/generated/ui/arrow-up.tsx","../src/icons/generated/ui/arrow-down.tsx","../src/icons/generated/ui/arrow-left.tsx","../src/icons/generated/ui/arrow-right.tsx","../src/icons/generated/ui/arrow-up-right.tsx","../src/icons/generated/ui/arrow-up-left.tsx","../src/icons/generated/ui/arrow-down-right.tsx","../src/icons/generated/ui/arrow-down-left.tsx","../src/icons/generated/ui/external-link.tsx","../src/icons/generated/ui/menu.tsx","../src/icons/generated/ui/x.tsx","../src/icons/generated/ui/search.tsx","../src/icons/generated/ui/plus.tsx","../src/icons/generated/ui/minus.tsx","../src/icons/generated/ui/square-pen.tsx","../src/icons/generated/ui/trash-2.tsx","../src/icons/generated/ui/download.tsx","../src/icons/generated/ui/upload.tsx","../src/icons/generated/ui/copy.tsx","../src/icons/generated/ui/share-2.tsx","../src/icons/generated/ui/funnel.tsx","../src/icons/generated/ui/arrow-up-down.tsx","../src/icons/generated/ui/settings.tsx","../src/icons/generated/ui/refresh-cw.tsx","../src/icons/generated/ui/check.tsx","../src/icons/generated/ui/send.tsx","../src/icons/generated/ui/eye.tsx","../src/icons/generated/ui/eye-off.tsx","../src/icons/generated/ui/bell.tsx","../src/icons/generated/ui/bell-off.tsx","../src/icons/generated/ui/ellipsis.tsx","../src/icons/generated/ui/ellipsis-vertical.tsx","../src/icons/generated/ui/save.tsx","../src/icons/generated/ui/info.tsx","../src/icons/generated/ui/triangle-alert.tsx","../src/icons/generated/ui/circle-x.tsx","../src/icons/generated/ui/circle-check.tsx","../src/icons/generated/ui/circle-check-big.tsx","../src/icons/generated/ui/clock.tsx","../src/icons/generated/ui/loader.tsx","../src/icons/generated/ui/sun.tsx","../src/icons/generated/ui/moon.tsx","../src/icons/generated/ui/lock.tsx","../src/icons/generated/ui/lock-open.tsx","../src/icons/generated/ui/circle-question-mark.tsx","../src/icons/generated/ui/ban.tsx","../src/icons/generated/ui/check-check.tsx","../src/icons/generated/ui/octagon-alert.tsx","../src/icons/generated/ui/play.tsx","../src/icons/generated/ui/pause.tsx","../src/icons/generated/ui/square.tsx","../src/icons/generated/ui/globe.tsx","../src/icons/generated/ui/image.tsx","../src/icons/generated/ui/file.tsx","../src/icons/generated/ui/link.tsx","../src/icons/generated/ui/package.tsx","../src/icons/generated/ui/rocket.tsx","../src/icons/generated/ui/grid-3x3.tsx","../src/icons/generated/ui/notebook-pen.tsx","../src/icons/generated/ui/code-xml.tsx","../src/icons/generated/ui/trending-up.tsx","../src/icons/generated/ui/trending-down.tsx","../src/icons/generated/ui/chart-line.tsx","../src/icons/generated/ui/chart-column.tsx","../src/icons/generated/ui/chart-candlestick.tsx","../src/icons/generated/ui/chart-pie.tsx","../src/icons/generated/ui/wallet.tsx","../src/icons/generated/ui/briefcase.tsx","../src/icons/generated/ui/calendar.tsx","../src/icons/generated/ui/bookmark.tsx","../src/icons/generated/ui/percent.tsx","../src/icons/generated/ui/dollar-sign.tsx","../src/icons/generated/ui/activity.tsx","../src/icons/generated/ui/target.tsx","../src/icons/generated/ui/scale.tsx","../src/icons/generated/ui/banknote.tsx","../src/icons/generated/ai/ai-sparkle.tsx","../src/icons/generated/ai/bot.tsx","../src/icons/generated/ai/bot-message-square.tsx","../src/icons/generated/ai/cpu.tsx","../src/icons/ai/agent-stocky.tsx","../src/icons/ai/agent-orb.tsx","../src/icons/ai/agent-droid.tsx","../src/icons/ai/agent-hex.tsx","../src/icons/generated/brand/github.tsx","../src/icons/generated/brand/npm.tsx","../src/icons/generated/brand/figma.tsx","../src/icons/generated/brand/notion.tsx","../src/icons/generated/brand/vercel.tsx","../src/icons/generated/brand/chromestore.tsx","../src/icons/brand/vscode.tsx","../src/icons/generated/brand/linear.tsx","../src/icons/brand/linkedin.tsx","../src/icons/generated/brand/x-twitter.tsx","../src/icons/generated/brand/youtube.tsx","../src/icons/generated/brand/google.tsx","../src/icons/generated/brand/reddit.tsx","../src/icons/brand/openai.tsx","../src/icons/generated/brand/anthropic.tsx","../src/icons/generated/brand/claude.tsx","../src/icons/generated/brand/gemini.tsx","../src/icons/generated/brand/deepseek.tsx","../src/icons/generated/brand/moonshot.tsx","../src/icons/brand/glm.tsx","../src/icons/generated/brand/mistral.tsx","../src/icons/generated/brand/perplexity.tsx","../src/icons/generated/brand/huggingface.tsx","../src/icons/generated/brand/ollama.tsx","../src/icons/generated/brand/qwen.tsx","../src/icons/generated/brand/meta.tsx","../src/primitives/SecretInput.tsx","../src/primitives/Search.tsx","../src/overlay/Modal.tsx","../src/overlay/Toast.tsx","../src/overlay/Callout.tsx","../src/overlay/Skeleton.tsx","../src/overlay/Spinner.tsx","../src/overlay/StateFig.tsx","../src/data/Stat.tsx","../src/data/Meter.tsx","../src/data/Badge.tsx","../src/data/Card.tsx","../src/data/Divider.tsx","../src/data/Tabs.tsx","../src/data/Sparkline.tsx","../src/data/Tooltip.tsx","../src/data/Avatar.tsx","../src/data/DataTable.tsx","../src/data/Candlestick.tsx","../src/chrome/AppBar.tsx","../src/chrome/UserMenu.tsx","../src/chrome/ThemeToggle.tsx","../src/chrome/Scrim.tsx","../src/chrome/CommandDock.tsx","../src/chrome/NotificationCenter.tsx","../src/ai/Terminal.tsx","../src/ai/Composer.tsx","../src/ai/Streaming.ts","../src/ai/GroundingFlag.tsx","../src/ai/MarkdownRenderer.tsx","../src/ai/ToolUseIndicator.tsx","../src/briefings/DigestCard.tsx","../src/primitives/backgrounds/tokens.ts","../src/primitives/backgrounds/useCanvas2D.ts","../src/primitives/backgrounds/GridBg.tsx","../src/primitives/backgrounds/AsciiBg.tsx","../src/primitives/backgrounds/GlyphsBg.tsx","../src/icons/generated/registry.ts","../src/icons/Icon.tsx","../src/media/MediaSlot.tsx"],"names":["Button","jsx","forwardRef","Input","Select","jsxs","SelectItem","Switch","SegmentedItem","useId","SecretInput","useState","ModalContent","ModalTitle","ModalDescription","ModalClose","sonnerToast","SonnerToaster","Fragment","VARIANT_CLASS","max","Tabs","TabsList","TabsTrigger","TabsContent","min","range","TooltipContent","SIZE_CLASS","round","useMemo","format","NotificationBell","AppBar","useEffect","UserMenuTrigger","UserMenuContent","UserMenuGroup","UserMenuItem","UserMenuSeparator","ThemeToggle","Scrim","CommandDock","useRef","Popover2","useCallback","TooltipPrimitive2"],"mappings":"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","file":"index.js","sourcesContent":["import type { CSSProperties, PropsWithChildren } from \"react\";\n\nexport interface SurfaceProps extends PropsWithChildren {\n /** Inline style overrides merged after the token-driven base. */\n style?: CSSProperties;\n}\n\n/**\n * Smoke primitive that proves the build harness end-to-end: the JSX transform,\n * the DOM lib, the dual ESM/CJS emit, the `.d.ts` output, and the consumer\n * import path (RB-3). It is styled ONLY via `@qball-inc/tokens` CSS custom\n * properties — no hardcoded hex, no box-shadow, no pill radius (DESIGN.md FR4).\n * The custom properties resolve at runtime from the consumer's token CSS import.\n */\nexport function Surface({ children, style }: SurfaceProps) {\n const base: CSSProperties = {\n background: \"var(--bg-surface)\",\n color: \"var(--text-primary)\",\n border: \"1px solid var(--border-default)\",\n };\n return <div style={{ ...base, ...style }}>{children}</div>;\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { forwardRef } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Button — token-driven, framework-agnostic at the CSS layer.\n *\n * Styling is delivered entirely by the published `@qball-inc/tokens` CSS: this\n * component only composes the shipped semantic class names (`.btn`, `.btn--*`)\n * shown in the `preview/buttons*.html` oracle cards. There is NO component CSS,\n * no hardcoded hex, no box-shadow, no Tailwind, and no shadcn runtime — the\n * `.btn` rules (radius `--radius-sm`, border-only focus, the sanctioned loading\n * spinner) live in `colors_and_type.css` and resolve from the consumer's token\n * CSS import. DESIGN.md conformance is therefore inherited, not re-authored.\n *\n * `icon` and `loading` are layered MODIFIERS (per the oracle: `btn btn--secondary\n * btn--icon`, `btn btn--primary btn--loading`), not standalone color variants.\n */\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"tertiary\" | \"ghost\" | \"destructive\";\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Color treatment. Default `primary`. The `destructive` variant signals a\n * dangerous action with color — always pair it with a text label (or, for an\n * icon-only destructive control, an `aria-label`) so the meaning is not\n * carried by color alone (DESIGN.md finance-color-plus-cue).\n */\n variant?: ButtonVariant;\n /** Icon-only square treatment (`.btn--icon`). Pair with `variant` for color; provide an `aria-label`. */\n icon?: boolean;\n /** Loading state (`.btn--loading`): hides the label, shows the spinner, sets `aria-busy`, and blocks interaction. */\n loading?: boolean;\n /**\n * Render the single child element instead of a `<button>` (Radix Slot). The\n * `.btn` classes merge onto the child, so `<Button asChild><a href=\"…\">…</a></Button>`\n * renders an `<a>` with identical styling. Note: the forwarded `ref` is typed\n * as `HTMLButtonElement` for the default case; under `asChild` it resolves to\n * the child's element type at runtime (e.g. `HTMLAnchorElement`).\n */\n asChild?: boolean;\n children?: ReactNode;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n { variant = \"primary\", icon, loading, asChild, disabled, type, className, children, ...rest },\n ref,\n) {\n const isDisabled = disabled === true || loading === true;\n const cls = [\n \"btn\",\n `btn--${variant}`,\n icon === true ? \"btn--icon\" : \"\",\n loading === true ? \"btn--loading\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n // asChild: the consumer owns the element (e.g. an anchor). `type`/`disabled`\n // are button-only attributes, so they are not forwarded; disabled intent is\n // expressed via `aria-disabled` instead.\n if (asChild === true) {\n return (\n <Slot\n ref={ref}\n className={cls}\n aria-busy={loading === true ? true : undefined}\n aria-disabled={isDisabled ? true : undefined}\n {...rest}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type ?? \"button\"}\n className={cls}\n disabled={isDisabled}\n aria-busy={loading === true ? true : undefined}\n {...rest}\n >\n {children}\n </button>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\n\n/**\n * Input — token-driven text/numeric input.\n *\n * Composes the shipped `.input` class from `@qball-inc/tokens`\n * (`components.css`), matching the `preview/form-input.html` and\n * `preview/form-controls.html` oracle cards. Border-only sage focus, error\n * border, and tabular numerics all live in the published token CSS — this\n * component authors no CSS and contains no hex.\n *\n * `numeric` opts into finance-grade tabular figures (`.num`) and an\n * `inputMode=\"decimal\"` keypad, following the oracle's `class=\"input num\"\n * inputmode=\"decimal\"` cell rather than a native `type=\"number\"` (which loses\n * `inputMode` control and adds spinner chrome).\n */\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n /** Numeric variant: tabular figures (`.num`) + decimal keypad for finance contexts. */\n numeric?: boolean;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { numeric, type, inputMode, className, \"aria-invalid\": ariaInvalid, ...rest },\n ref,\n) {\n const invalid = ariaInvalid === true || ariaInvalid === \"true\";\n const cls = [\n \"input\",\n numeric === true ? \"num\" : \"\",\n invalid ? \"input--error\" : \"\",\n className ?? \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <input\n ref={ref}\n type={type ?? \"text\"}\n inputMode={inputMode ?? (numeric === true ? \"decimal\" : undefined)}\n className={cls}\n aria-invalid={ariaInvalid}\n {...rest}\n />\n );\n});\n","import { cloneElement, useId } from \"react\";\nimport type { InputHTMLAttributes, ReactElement } from \"react\";\n\n/**\n * Field — label + control + helper/error composition wrapper.\n *\n * Renders the shipped `.field` structure from `@qball-inc/tokens`\n * (`components.css`), matching the `preview/form-controls.html` oracle: a\n * `.field__label` associated to the control via `htmlFor`/`id`, optional\n * `.field__help`, and a `.field__error` with `role=\"alert\"`. When `errorText`\n * is present it sets `aria-invalid` on the child control (which in turn applies\n * the `.input--error` border) and points `aria-describedby` at the messages.\n * No component CSS, no hex.\n */\ntype FieldControl = ReactElement<{\n id?: string;\n \"aria-invalid\"?: InputHTMLAttributes<HTMLInputElement>[\"aria-invalid\"];\n \"aria-describedby\"?: string | undefined;\n}>;\n\nexport interface FieldProps {\n /** Visible label text, associated to the control. */\n label: string;\n /** Optional helper text shown below the control (`aria-describedby`). */\n helpText?: string;\n /** Optional error text; when set, marks the control invalid and renders a `role=\"alert\"` message. */\n errorText?: string;\n /** Render a required marker (`*`) after the label. */\n required?: boolean;\n /** The control element (typically an `Input`); receives `id`, `aria-invalid`, and `aria-describedby`. */\n children: FieldControl;\n}\n\nexport function Field({ label, helpText, errorText, required, children }: FieldProps) {\n const baseId = useId();\n const controlId = `${baseId}-control`;\n const helpId = helpText !== undefined ? `${baseId}-help` : undefined;\n const errorId = errorText !== undefined ? `${baseId}-error` : undefined;\n\n const ownDescribedBy = [errorId, helpId]\n .filter((v): v is string => v !== undefined && v !== \"\")\n .join(\" \");\n const childDescribedBy = children.props[\"aria-describedby\"];\n const describedBy =\n [childDescribedBy, ownDescribedBy]\n .filter((v): v is string => v !== undefined && v !== \"\")\n .join(\" \") || undefined;\n\n // cloneElement is the minimal composition seam for injecting the wiring onto\n // the control. It erodes the child's static prop types (the child is typed as\n // the FieldControl subset, not the full control interface), so the injected\n // props are validated against FieldControl above rather than the child's own\n // type. No runtime risk; a Context/render-prop migration is tracked tech-debt.\n const control = cloneElement(children, {\n id: controlId,\n \"aria-invalid\": errorText !== undefined ? true : children.props[\"aria-invalid\"],\n \"aria-describedby\": describedBy,\n });\n\n return (\n <div className=\"field\">\n <label className=\"field__label\" htmlFor={controlId}>\n {label}\n {required === true ? <span className=\"field__req\"> *</span> : null}\n </label>\n {control}\n {helpText !== undefined ? (\n <span className=\"field__help\" id={helpId}>\n {helpText}\n </span>\n ) : null}\n {errorText !== undefined ? (\n <span className=\"field__error\" id={errorId} role=\"alert\">\n {/* Non-color cue (DESIGN.md): the alert icon carries the error signal\n alongside the --data-down color, matching the form-controls oracle. */}\n <svg\n width=\"13\"\n height=\"13\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 8v4\" />\n <path d=\"M12 16h.01\" />\n </svg>\n {errorText}\n </span>\n ) : null}\n </div>\n );\n}\n","import * as RSelect from \"@radix-ui/react-select\";\nimport { forwardRef } from \"react\";\nimport type { ReactNode } from \"react\";\n\n/**\n * Select — custom dropdown (no native `<select>`).\n *\n * Radix `@radix-ui/react-select` provides the behavior (keyboard navigation,\n * focus management, typeahead, portalled panel — AC-2) while the visual surface\n * is the shipped `@qball-inc/tokens` CSS: the trigger applies `.select` (whose\n * chevron is a CSS background-image, so no icon dep is needed), and the panel +\n * items apply `.menu` / `.menu__item` / `.menu__check` — matching the\n * `preview/select.html` oracle. This is the same \"Radix for behavior, shipped\n * classes for style\" pattern as Button's `asChild` Slot. No component CSS, no hex.\n *\n * NOTE (visual conformance / token-package concern): Radix exposes item highlight\n * via `data-highlighted` and selection via `data-state`, whereas the shipped\n * `.menu__item` tint keys on `:hover` + `[aria-selected]`. The selected item's\n * check (`.menu__check`, via Radix `ItemIndicator`) always renders; refining the\n * keyboard-highlight tint to `[data-highlighted]` is a tokens-package edit (a\n * separate WP / semver event), not a React-component change here.\n */\nexport interface SelectProps {\n /** Controlled selected value. */\n value?: string;\n /** Uncontrolled initial value. */\n defaultValue?: string;\n /** Fired with the newly selected value. */\n onValueChange?: (value: string) => void;\n /** Shown on the trigger when no value is selected. */\n placeholder?: string;\n /** Disables the trigger (applies the shipped `.select:disabled` styling). */\n disabled?: boolean;\n /** Accessible name for the trigger when there is no associated `<label>`. */\n \"aria-label\"?: string;\n /** `SelectItem` children. */\n children?: ReactNode;\n /** className merged onto the `.select` trigger. */\n className?: string;\n}\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(function Select(\n { value, defaultValue, onValueChange, placeholder, disabled, children, className, ...rest },\n ref,\n) {\n const triggerCls = [\"select\", className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <RSelect.Root\n // exactOptionalPropertyTypes: spread each optional prop only when defined so\n // an explicit `undefined` is never passed (it is not assignable to Radix's\n // `prop?: T`). Do NOT collapse to direct `prop={prop}` forwarding — it will\n // not typecheck under the base tsconfig.\n {...(value !== undefined ? { value } : {})}\n {...(defaultValue !== undefined ? { defaultValue } : {})}\n {...(onValueChange !== undefined ? { onValueChange } : {})}\n {...(disabled !== undefined ? { disabled } : {})}\n >\n <RSelect.Trigger ref={ref} className={triggerCls} {...rest}>\n <RSelect.Value placeholder={placeholder} />\n </RSelect.Trigger>\n <RSelect.Portal>\n <RSelect.Content className=\"menu\" position=\"popper\" sideOffset={4}>\n <RSelect.Viewport>{children}</RSelect.Viewport>\n </RSelect.Content>\n </RSelect.Portal>\n </RSelect.Root>\n );\n});\n\nexport interface SelectItemProps {\n /** The value selected when this item is chosen. */\n value: string;\n /** Disables this option. */\n disabled?: boolean;\n /** The visible option label. */\n children?: ReactNode;\n /** className merged onto the `.menu__item` element. */\n className?: string;\n}\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(function SelectItem(\n { value, disabled, children, className },\n ref,\n) {\n const itemCls = [\"menu__item\", className ?? \"\"].filter(Boolean).join(\" \");\n return (\n <RSelect.Item\n ref={ref}\n className={itemCls}\n value={value}\n {...(disabled !== undefined ? { disabled } : {})}\n >\n <RSelect.ItemText>{children}</RSelect.ItemText>\n <RSelect.ItemIndicator className=\"menu__check\">\n {/* Matches the oracle's check glyph (preview/select.html). */}\n <svg\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M20 6 9 17l-5-5\" />\n </svg>\n </RSelect.ItemIndicator>\n </RSelect.Item>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ChangeEvent, InputHTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Switch — token-driven on/off toggle.\n *\n * Composes the shipped `.switch` structure from `@qball-inc/tokens`\n * (`components.css`), matching the `preview/toggle.html` oracle: a `<label class=\"switch\">`\n * wrapping a visually-hidden native `<input type=\"checkbox\">` and a `.switch__ui`\n * track. The brand-native SQUARED knob (4px / `var(--radius-sm)` — explicitly NOT\n * a 9999px pill, FR4) and the sage on-state live entirely in the published token\n * CSS, driven by the `.switch input:checked + .switch__ui` sibling selector. This\n * component authors no CSS and contains no hex.\n *\n * This is deliberately NOT a Radix Switch wrapper: Radix renders a\n * `<button role=\"switch\" data-state>` with no native `:checked` input, so the\n * shipped sibling-selector CSS would never fire. The native checkbox is\n * keyboard-accessible for free; `role=\"switch\"` upgrades the exposed semantics so\n * assistive tech announces on/off rather than checked/unchecked.\n */\nexport interface SwitchProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n \"type\" | \"role\" | \"children\" | \"onChange\"\n> {\n /** Controlled on/off state. Omit (with `defaultChecked`) for an uncontrolled switch. */\n checked?: boolean;\n /** Fired with the new boolean state whenever the user toggles. */\n onCheckedChange?: (checked: boolean) => void;\n /** Native change handler; fired alongside `onCheckedChange`. */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /** Optional visible label rendered beside the track (the oracle pattern). */\n children?: ReactNode;\n /** className applied to the outer `<label>` (`.switch`), not the hidden input. */\n className?: string;\n}\n\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n { checked, onCheckedChange, onChange, disabled, className, children, ...rest },\n ref,\n) {\n const labelCls = [\"switch\", className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <label className={labelCls}>\n <input\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n checked={checked}\n disabled={disabled}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(event.target.checked);\n onChange?.(event);\n }}\n {...rest}\n />\n {/* The track; the squared knob is its `::after` pseudo-element (token CSS). */}\n <span className=\"switch__ui\" aria-hidden=\"true\" />\n {children}\n </label>\n );\n});\n","import { createContext, forwardRef, useContext, useState } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Segmented — exclusive (single-select) segmented control.\n *\n * Composes the shipped `.segmented` structure from `@qball-inc/tokens`\n * (`components.css`), matching the `preview/toggle.html` oracle: a\n * `<div class=\"segmented\" role=\"group\">` of contiguous `<button aria-pressed>`\n * items sharing a border with no gap. The selected segment's sage tint is driven\n * by the `.segmented button[aria-pressed=\"true\"]` token CSS — so the component\n * MUST express selection via `aria-pressed`, which is exactly what this wrapper\n * does. This is deliberately NOT a Radix ToggleGroup wrapper: Radix's items emit\n * `data-state`/radio semantics whose `aria-pressed` contract is unverified\n * against the shipped CSS selector. No component CSS, no hex.\n *\n * Single-select with no full-deselect: re-pressing the active item is a no-op, so\n * at least one item always stays pressed (AC-8), provided a `value` or\n * `defaultValue` is supplied.\n */\ninterface SegmentedContextValue {\n value: string | undefined;\n onSelect: (value: string) => void;\n}\n\nconst SegmentedContext = createContext<SegmentedContextValue | null>(null);\n\nexport interface SegmentedProps {\n /** Controlled selected value. */\n value?: string;\n /** Uncontrolled initial value; ensures one item starts pressed. */\n defaultValue?: string;\n /** Fired with the newly selected value (never with empty — no full-deselect). */\n onValueChange?: (value: string) => void;\n /** Accessible group label (the control has no visible heading). */\n \"aria-label\"?: string;\n /** `SegmentedItem` children. */\n children?: ReactNode;\n /** className applied to the `.segmented` group container. */\n className?: string;\n}\n\nexport function Segmented({\n value,\n defaultValue,\n onValueChange,\n children,\n className,\n \"aria-label\": ariaLabel,\n}: SegmentedProps) {\n const [internal, setInternal] = useState<string | undefined>(defaultValue);\n const isControlled = value !== undefined;\n const current = isControlled ? value : internal;\n\n const onSelect = (next: string) => {\n // No full-deselect: re-pressing the active segment is a no-op (AC-8).\n if (next === current) return;\n if (!isControlled) setInternal(next);\n onValueChange?.(next);\n };\n\n const groupCls = [\"segmented\", className ?? \"\"].filter(Boolean).join(\" \");\n\n return (\n <div className={groupCls} role=\"group\" aria-label={ariaLabel}>\n <SegmentedContext.Provider value={{ value: current, onSelect }}>\n {children}\n </SegmentedContext.Provider>\n </div>\n );\n}\n\nexport interface SegmentedItemProps extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"value\" | \"type\" | \"aria-pressed\"\n> {\n /** The value this segment selects. */\n value: string;\n children?: ReactNode;\n}\n\nexport const SegmentedItem = forwardRef<HTMLButtonElement, SegmentedItemProps>(\n function SegmentedItem({ value, children, onClick, ...rest }, ref) {\n const ctx = useContext(SegmentedContext);\n // CS3 fail-fast: a SegmentedItem outside a Segmented has no selection context.\n if (ctx === null) {\n throw new Error(\"SegmentedItem must be rendered inside a <Segmented>.\");\n }\n const pressed = ctx.value === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-pressed={pressed}\n onClick={(event) => {\n ctx.onSelect(value);\n onClick?.(event);\n }}\n {...rest}\n >\n {children}\n </button>\n );\n },\n);\n","import { useId, type ReactNode } from \"react\";\nimport type { IconProps } from \"./icon-props\";\n\ninterface IconBaseProps extends IconProps {\n /** The icon geometry (paths/circles/lines), supplied by the generated component. */\n children: ReactNode;\n /**\n * Filled (brand-logo) idiom: `fill=\"currentColor\"` and no stroke, for the filled\n * brand marks (§4/§12). Default is the DS stroke idiom (`fill=\"none\"` +\n * `stroke=\"currentColor\"`) used by every UI + AI icon. Internal — not on the\n * public `IconProps`; each brand component opts in.\n */\n filled?: boolean;\n}\n\n/**\n * The one shared `<svg>` renderer behind every icon. Owns the DS stroke idiom\n * (the `SVG_PROPS` const hand-rolled 21× across the library — see\n * `ai/ToolUseIndicator.tsx`), the `size`→`width`/`height` mapping, the `ic`\n * base class, and the accessibility flip:\n *\n * - **Decorative (default)**: `aria-hidden=\"true\"`, no role. Matches every current\n * call site, where adjacent text or a labelled control carries the meaning.\n * - **Labelled**: when a `title` (or an incoming `aria-label`) is supplied, emit\n * `role=\"img\"` and drop `aria-hidden`. A `title` additionally renders a `<title>`\n * child linked via `aria-labelledby` (an `aria-hidden` + `role=\"img\"` element\n * would be contradictory).\n *\n * currentColor-only and zero-hex by construction (DESIGN_DENY clean); SSR-safe\n * (no `window`/DOM access at render).\n *\n * `{...rest}` is spread BEFORE the computed `role`/`aria-hidden`/`aria-labelledby`\n * so that a11y invariant is authoritative: a consumer can override the visual\n * attrs (e.g. `viewBox`) but cannot force the contradictory `role=\"img\"` +\n * `aria-hidden=\"true\"` state §9 forbids.\n */\nexport function IconBase({\n size = 24,\n strokeWidth = 1.5,\n className,\n title,\n children,\n filled = false,\n ...rest\n}: IconBaseProps) {\n const titleId = useId();\n const labelled = title !== undefined || rest[\"aria-label\"] !== undefined;\n const cls = [\"ic\", className].filter(Boolean).join(\" \");\n return (\n <svg\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill={filled ? \"currentColor\" : \"none\"}\n stroke={filled ? undefined : \"currentColor\"}\n strokeWidth={filled ? undefined : strokeWidth}\n strokeLinecap={filled ? undefined : \"round\"}\n strokeLinejoin={filled ? undefined : \"round\"}\n className={cls}\n {...rest}\n role={labelled ? \"img\" : undefined}\n aria-hidden={labelled ? undefined : true}\n aria-labelledby={title !== undefined ? titleId : undefined}\n >\n {title !== undefined ? <title id={titleId}>{title}</title> : null}\n {children}\n </svg>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chevron-up` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChevronUp(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m18 15-6-6-6 6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chevron-down` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChevronDown(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m6 9 6 6 6-6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chevron-left` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChevronLeft(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m15 18-6-6 6-6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chevron-right` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChevronRight(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-up` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowUp(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m5 12 7-7 7 7\" />\n <path d=\"M12 19V5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-down` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowDown(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-left` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowLeft(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m12 19-7-7 7-7\" />\n <path d=\"M19 12H5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-right` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowRight(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-up-right` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowUpRight(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M7 7h10v10\" />\n <path d=\"M7 17 17 7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-up-left` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowUpLeft(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M7 17V7h10\" />\n <path d=\"M17 17 7 7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-down-right` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowDownRight(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m7 7 10 10\" />\n <path d=\"M17 7v10H7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-down-left` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowDownLeft(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M17 7 7 17\" />\n <path d=\"M17 17H7V7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `external-link` — generated from lucide-react@1.17.0 (ISC). */\nexport function ExternalLink(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M15 3h6v6\" />\n <path d=\"M10 14 21 3\" />\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `menu` — generated from lucide-react@1.17.0 (ISC). */\nexport function Menu(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M4 5h16\" />\n <path d=\"M4 12h16\" />\n <path d=\"M4 19h16\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `x` — generated from lucide-react@1.17.0 (ISC). */\nexport function X(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `search` — generated from lucide-react@1.17.0 (ISC). */\nexport function SearchIcon(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m21 21-4.34-4.34\" />\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `plus` — generated from lucide-react@1.17.0 (ISC). */\nexport function Plus(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M5 12h14\" />\n <path d=\"M12 5v14\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `minus` — generated from lucide-react@1.17.0 (ISC). */\nexport function Minus(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M5 12h14\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `square-pen` — generated from lucide-react@1.17.0 (ISC). */\nexport function SquarePen(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\" />\n <path d=\"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `trash-2` — generated from lucide-react@1.17.0 (ISC). */\nexport function Trash2(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10 11v6\" />\n <path d=\"M14 11v6\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M3 6h18\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `download` — generated from lucide-react@1.17.0 (ISC). */\nexport function Download(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `upload` — generated from lucide-react@1.17.0 (ISC). */\nexport function Upload(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 3v12\" />\n <path d=\"m17 8-5-5-5 5\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `copy` — generated from lucide-react@1.17.0 (ISC). */\nexport function Copy(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `share-2` — generated from lucide-react@1.17.0 (ISC). */\nexport function Share2(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n <circle cx=\"6\" cy=\"12\" r=\"3\" />\n <circle cx=\"18\" cy=\"19\" r=\"3\" />\n <line x1=\"8.59\" x2=\"15.42\" y1=\"13.51\" y2=\"17.49\" />\n <line x1=\"15.41\" x2=\"8.59\" y1=\"6.51\" y2=\"10.49\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `funnel` — generated from lucide-react@1.17.0 (ISC). */\nexport function Funnel(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `arrow-up-down` — generated from lucide-react@1.17.0 (ISC). */\nexport function ArrowUpDown(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m21 16-4 4-4-4\" />\n <path d=\"M17 20V4\" />\n <path d=\"m3 8 4-4 4 4\" />\n <path d=\"M7 4v16\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `settings` — generated from lucide-react@1.17.0 (ISC). */\nexport function Settings(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `refresh-cw` — generated from lucide-react@1.17.0 (ISC). */\nexport function RefreshCw(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\" />\n <path d=\"M21 3v5h-5\" />\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\" />\n <path d=\"M8 16H3v5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `check` — generated from lucide-react@1.17.0 (ISC). */\nexport function Check(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M20 6 9 17l-5-5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `send` — generated from lucide-react@1.17.0 (ISC). */\nexport function Send(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z\" />\n <path d=\"m21.854 2.147-10.94 10.939\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `eye` — generated from lucide-react@1.17.0 (ISC). */\nexport function Eye(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `eye-off` — generated from lucide-react@1.17.0 (ISC). */\nexport function EyeOff(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49\" />\n <path d=\"M14.084 14.158a3 3 0 0 1-4.242-4.242\" />\n <path d=\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143\" />\n <path d=\"m2 2 20 20\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `bell` — generated from lucide-react@1.17.0 (ISC). */\nexport function Bell(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `bell-off` — generated from lucide-react@1.17.0 (ISC). */\nexport function BellOff(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10.268 21a2 2 0 0 0 3.464 0\" />\n <path d=\"M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742\" />\n <path d=\"m2 2 20 20\" />\n <path d=\"M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `ellipsis` — generated from lucide-react@1.17.0 (ISC). */\nexport function Ellipsis(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"19\" cy=\"12\" r=\"1\" />\n <circle cx=\"5\" cy=\"12\" r=\"1\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `ellipsis-vertical` — generated from lucide-react@1.17.0 (ISC). */\nexport function EllipsisVertical(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"1\" />\n <circle cx=\"12\" cy=\"5\" r=\"1\" />\n <circle cx=\"12\" cy=\"19\" r=\"1\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `save` — generated from lucide-react@1.17.0 (ISC). */\nexport function Save(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\" />\n <path d=\"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\" />\n <path d=\"M7 3v4a1 1 0 0 0 1 1h7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `info` — generated from lucide-react@1.17.0 (ISC). */\nexport function Info(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `triangle-alert` — generated from lucide-react@1.17.0 (ISC). */\nexport function TriangleAlert(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\" />\n <path d=\"M12 9v4\" />\n <path d=\"M12 17h.01\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `circle-x` — generated from lucide-react@1.17.0 (ISC). */\nexport function CircleX(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m15 9-6 6\" />\n <path d=\"m9 9 6 6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `circle-check` — generated from lucide-react@1.17.0 (ISC). */\nexport function CircleCheck(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"m9 12 2 2 4-4\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `circle-check-big` — generated from lucide-react@1.17.0 (ISC). */\nexport function CircleCheckBig(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M21.801 10A10 10 0 1 1 17 3.335\" />\n <path d=\"m9 11 3 3L22 4\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `clock` — generated from lucide-react@1.17.0 (ISC). */\nexport function Clock(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 6v6l4 2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `loader` — generated from lucide-react@1.17.0 (ISC). */\nexport function Loader(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 2v4\" />\n <path d=\"m16.2 7.8 2.9-2.9\" />\n <path d=\"M18 12h4\" />\n <path d=\"m16.2 16.2 2.9 2.9\" />\n <path d=\"M12 18v4\" />\n <path d=\"m4.9 19.1 2.9-2.9\" />\n <path d=\"M2 12h4\" />\n <path d=\"m4.9 4.9 2.9 2.9\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `sun` — generated from lucide-react@1.17.0 (ISC). */\nexport function Sun(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"4\" />\n <path d=\"M12 2v2\" />\n <path d=\"M12 20v2\" />\n <path d=\"m4.93 4.93 1.41 1.41\" />\n <path d=\"m17.66 17.66 1.41 1.41\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"m6.34 17.66-1.41 1.41\" />\n <path d=\"m19.07 4.93-1.41 1.41\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `moon` — generated from lucide-react@1.17.0 (ISC). */\nexport function Moon(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `lock` — generated from lucide-react@1.17.0 (ISC). */\nexport function Lock(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `lock-open` — generated from lucide-react@1.17.0 (ISC). */\nexport function LockOpen(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"18\" height=\"11\" x=\"3\" y=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 9.9-1\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `circle-question-mark` — generated from lucide-react@1.17.0 (ISC). */\nexport function CircleQuestionMark(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <path d=\"M12 17h.01\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `ban` — generated from lucide-react@1.17.0 (ISC). */\nexport function Ban(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M4.929 4.929 19.07 19.071\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `check-check` — generated from lucide-react@1.17.0 (ISC). */\nexport function CheckCheck(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M18 6 7 17l-5-5\" />\n <path d=\"m22 10-7.5 7.5L13 16\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `octagon-alert` — generated from lucide-react@1.17.0 (ISC). */\nexport function OctagonAlert(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 16h.01\" />\n <path d=\"M12 8v4\" />\n <path d=\"M15.312 2a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586l-4.688-4.688A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `play` — generated from lucide-react@1.17.0 (ISC). */\nexport function Play(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `pause` — generated from lucide-react@1.17.0 (ISC). */\nexport function Pause(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect x=\"14\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n <rect x=\"5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `square` — generated from lucide-react@1.17.0 (ISC). */\nexport function Square(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `globe` — generated from lucide-react@1.17.0 (ISC). */\nexport function Globe(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\" />\n <path d=\"M2 12h20\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `image` — generated from lucide-react@1.17.0 (ISC). */\nexport function Image(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\" />\n <circle cx=\"9\" cy=\"9\" r=\"2\" />\n <path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `file` — generated from lucide-react@1.17.0 (ISC). */\nexport function File(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\" />\n <path d=\"M14 2v5a1 1 0 0 0 1 1h5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `link` — generated from lucide-react@1.17.0 (ISC). */\nexport function Link(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `package` — generated from lucide-react@1.17.0 (ISC). */\nexport function Package(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z\" />\n <path d=\"M12 22V12\" />\n <polyline points=\"3.29 7 12 12 20.71 7\" />\n <path d=\"m7.5 4.27 9 5.15\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `rocket` — generated from lucide-react@1.17.0 (ISC). */\nexport function Rocket(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09\" />\n <path d=\"M9 12a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.4 22.4 0 0 1-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 .05 5 .05\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `grid-3x3` — generated from lucide-react@1.17.0 (ISC). */\nexport function Grid3x3(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" />\n <path d=\"M3 9h18\" />\n <path d=\"M3 15h18\" />\n <path d=\"M9 3v18\" />\n <path d=\"M15 3v18\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `notebook-pen` — generated from lucide-react@1.17.0 (ISC). */\nexport function NotebookPen(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4\" />\n <path d=\"M2 6h4\" />\n <path d=\"M2 10h4\" />\n <path d=\"M2 14h4\" />\n <path d=\"M2 18h4\" />\n <path d=\"M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `code-xml` — generated from lucide-react@1.17.0 (ISC). */\nexport function CodeXml(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m18 16 4-4-4-4\" />\n <path d=\"m6 8-4 4 4 4\" />\n <path d=\"m14.5 4-5 16\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `trending-up` — generated from lucide-react@1.17.0 (ISC). */\nexport function TrendingUp(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M16 7h6v6\" />\n <path d=\"m22 7-8.5 8.5-5-5L2 17\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `trending-down` — generated from lucide-react@1.17.0 (ISC). */\nexport function TrendingDown(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M16 17h6v-6\" />\n <path d=\"m22 17-8.5-8.5-5 5L2 7\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chart-line` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChartLine(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M3 3v16a2 2 0 0 0 2 2h16\" />\n <path d=\"m19 9-5 5-4-4-3 3\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chart-column` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChartColumn(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M3 3v16a2 2 0 0 0 2 2h16\" />\n <path d=\"M18 17V9\" />\n <path d=\"M13 17V5\" />\n <path d=\"M8 17v-3\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chart-candlestick` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChartCandlestick(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M9 5v4\" />\n <rect width=\"4\" height=\"6\" x=\"7\" y=\"9\" rx=\"1\" />\n <path d=\"M9 15v2\" />\n <path d=\"M17 3v2\" />\n <rect width=\"4\" height=\"8\" x=\"15\" y=\"5\" rx=\"1\" />\n <path d=\"M17 13v3\" />\n <path d=\"M3 3v16a2 2 0 0 0 2 2h16\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chart-pie` — generated from lucide-react@1.17.0 (ISC). */\nexport function ChartPie(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z\" />\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `wallet` — generated from lucide-react@1.17.0 (ISC). */\nexport function Wallet(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\" />\n <path d=\"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `briefcase` — generated from lucide-react@1.17.0 (ISC). */\nexport function Briefcase(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\" />\n <rect width=\"20\" height=\"14\" x=\"2\" y=\"6\" rx=\"2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `calendar` — generated from lucide-react@1.17.0 (ISC). */\nexport function Calendar(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M8 2v4\" />\n <path d=\"M16 2v4\" />\n <rect width=\"18\" height=\"18\" x=\"3\" y=\"4\" rx=\"2\" />\n <path d=\"M3 10h18\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `bookmark` — generated from lucide-react@1.17.0 (ISC). */\nexport function Bookmark(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M17 3a2 2 0 0 1 2 2v15a1 1 0 0 1-1.496.868l-4.512-2.578a2 2 0 0 0-1.984 0l-4.512 2.578A1 1 0 0 1 5 20V5a2 2 0 0 1 2-2z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `percent` — generated from lucide-react@1.17.0 (ISC). */\nexport function Percent(props: IconProps) {\n return (\n <IconBase {...props}>\n <line x1=\"19\" x2=\"5\" y1=\"5\" y2=\"19\" />\n <circle cx=\"6.5\" cy=\"6.5\" r=\"2.5\" />\n <circle cx=\"17.5\" cy=\"17.5\" r=\"2.5\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `dollar-sign` — generated from lucide-react@1.17.0 (ISC). */\nexport function DollarSign(props: IconProps) {\n return (\n <IconBase {...props}>\n <line x1=\"12\" x2=\"12\" y1=\"2\" y2=\"22\" />\n <path d=\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `activity` — generated from lucide-react@1.17.0 (ISC). */\nexport function Activity(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `target` — generated from lucide-react@1.17.0 (ISC). */\nexport function Target(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <circle cx=\"12\" cy=\"12\" r=\"6\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `scale` — generated from lucide-react@1.17.0 (ISC). */\nexport function Scale(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 3v18\" />\n <path d=\"m19 8 3 8a5 5 0 0 1-6 0zV7\" />\n <path d=\"M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1\" />\n <path d=\"m5 8 3 8a5 5 0 0 1-6 0zV7\" />\n <path d=\"M7 21h10\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `banknote` — generated from lucide-react@1.17.0 (ISC). */\nexport function Banknote(props: IconProps) {\n return (\n <IconBase {...props}>\n <rect width=\"20\" height=\"12\" x=\"2\" y=\"6\" rx=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <path d=\"M6 12h.01M18 12h.01\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `ai-sparkle` — generated from lucide-react@1.17.0 (ISC). */\nexport function AiSparkle(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z\" />\n <path d=\"M20 2v4\" />\n <path d=\"M22 4h-4\" />\n <circle cx=\"4\" cy=\"20\" r=\"2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `bot` — generated from lucide-react@1.17.0 (ISC). */\nexport function Bot(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 8V4H8\" />\n <rect width=\"16\" height=\"12\" x=\"4\" y=\"8\" rx=\"2\" />\n <path d=\"M2 14h2\" />\n <path d=\"M20 14h2\" />\n <path d=\"M15 13v2\" />\n <path d=\"M9 13v2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `bot-message-square` — generated from lucide-react@1.17.0 (ISC). */\nexport function BotMessageSquare(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 6V2H8\" />\n <path d=\"M15 11v2\" />\n <path d=\"M2 12h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"M20 16a2 2 0 0 1-2 2H8.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 4 20.286V8a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2z\" />\n <path d=\"M9 11v2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from lucide-react@1.17.0 (ISC). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `cpu` — generated from lucide-react@1.17.0 (ISC). */\nexport function Cpu(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 20v2\" />\n <path d=\"M12 2v2\" />\n <path d=\"M17 20v2\" />\n <path d=\"M17 2v2\" />\n <path d=\"M2 12h2\" />\n <path d=\"M2 17h2\" />\n <path d=\"M2 7h2\" />\n <path d=\"M20 12h2\" />\n <path d=\"M20 17h2\" />\n <path d=\"M20 7h2\" />\n <path d=\"M7 20v2\" />\n <path d=\"M7 2v2\" />\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" />\n <rect x=\"8\" y=\"8\" width=\"8\" height=\"8\" rx=\"1\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `agent-stocky` — original DS art: the Stocky CRT-bot mascot rendered STATIC. A\n * faithful 0.75-scale of the signed-off preview design (the preview drew it at the\n * mascot's native 32-viewBox; the icon system is a fixed 24-viewBox), in the stroke\n * idiom (antenna + screen + eyes + legs, no animation). A distinct, tree-shakeable\n * icon; the animated `StockyIcon` in `CommandDock` stays unmigrated (§10).\n * currentColor-only.\n */\nexport function AgentStocky(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M12 6 8.6 2.25\" />\n <path d=\"M12 6 15.4 2.25\" />\n <circle cx=\"8.6\" cy=\"2.25\" r=\"1.05\" fill=\"currentColor\" />\n <circle cx=\"15.4\" cy=\"2.25\" r=\"1.05\" fill=\"currentColor\" />\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"15\" rx=\"3.4\" />\n <rect\n x=\"5.25\"\n y=\"8.25\"\n width=\"13.5\"\n height=\"10.1\"\n rx=\"1.9\"\n fill=\"currentColor\"\n opacity=\"0.12\"\n />\n <circle cx=\"9.45\" cy=\"13.2\" r=\"1.46\" fill=\"currentColor\" />\n <circle cx=\"14.55\" cy=\"13.2\" r=\"1.46\" fill=\"currentColor\" />\n <path d=\"M7.1 21v1.5M16.9 21v1.5\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `agent-orb` — original DS art (signed-off preview design): a core node radiating\n * concentric signal arcs, in the 24-viewBox stroke idiom. No third-party source / IP.\n * currentColor-only.\n */\nexport function AgentOrb(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M6.6 7.6a8 8 0 0 0 0 8.8\" />\n <path d=\"M17.4 7.6a8 8 0 0 1 0 8.8\" />\n <path d=\"M3.8 5a12 12 0 0 0 0 14\" />\n <path d=\"M20.2 5a12 12 0 0 1 0 14\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `agent-droid` — original DS art (signed-off preview design): a domed droid head\n * with a single antenna and a visor band, in the 24-viewBox stroke idiom. No\n * third-party source / IP. currentColor-only.\n */\nexport function AgentDroid(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M5 12a7 7 0 0 1 14 0v5a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2z\" />\n <path d=\"M12 5V3.5\" />\n <circle cx=\"12\" cy=\"2.6\" r=\"1\" />\n <rect x=\"8\" y=\"11.5\" width=\"8\" height=\"3.6\" rx=\"1.8\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `agent-hex` — original DS art (signed-off preview design): a hexagonal agent badge\n * with a two-eye face, in the 24-viewBox stroke idiom. No third-party source / IP.\n * currentColor-only.\n */\nexport function AgentHex(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m12 3 7.5 4.3v8.6L12 20.2 4.5 15.9V7.3z\" />\n <circle cx=\"9.6\" cy=\"11.4\" r=\"1\" />\n <circle cx=\"14.4\" cy=\"11.4\" r=\"1\" />\n <path d=\"M9.6 15h4.8\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `github` — the GitHub mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function GitHub(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `npm` — the npm mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function NPM(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `figma` — the Figma mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Figma(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 1.471H8.148c-2.476 0-4.49-2.014-4.49-4.49S5.672 0 8.148 0h4.588v8.981zm-4.587-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.354 3.02 3.019 3.02h3.117V1.471H8.148zm4.587 15.019H8.148c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.98zM8.148 8.981c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.981H8.148zM8.172 24c-2.489 0-4.515-2.014-4.515-4.49s2.014-4.49 4.49-4.49h4.588v4.441c0 2.503-2.047 4.539-4.563 4.539zm-.024-7.51a3.023 3.023 0 0 0-3.019 3.019c0 1.665 1.365 3.019 3.044 3.019 1.705 0 3.093-1.376 3.093-3.068v-2.97H8.148zm7.704 0h-.098c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h.098c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49zm-.097-7.509c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h.098c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-.098z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `notion` — the Notion mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Notion(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `vercel` — the Vercel mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Vercel(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"m12 1.608 12 20.784H0Z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `chromestore` — the Chrome Web Store mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function ChromeWebStore(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M0 1.637v19.09c0 .9.736 1.636 1.636 1.636h.131a10.4 10.4 0 0 1-.13-1.636 10.3 10.3 0 0 1 1.667-5.64l4.202 7.276h1.128A3.77 3.77 0 0 1 12 16.958a3.77 3.77 0 0 1 3.366 5.406h1.048a4.7 4.7 0 0 0-1.587-5.406h6.83a10.34 10.34 0 0 1 .577 5.406h.13c.9 0 1.636-.737 1.636-1.637V1.637Zm9.273 2.181h5.454a1.09 1.09 0 1 1 0 2.182H9.273a1.09 1.09 0 1 1 0-2.182M12 10.364a10.36 10.36 0 0 1 9.233 5.652H12a4.71 4.71 0 0 0-4.677 4.149L3.91 14.25A10.34 10.34 0 0 1 12 10.364\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `vscode` — a VSCodium stand-in (the real VS Code mark is trademark-withheld from\n * CC0 sets, §12); swap in an official asset if one is provided. Nominative use only\n * — VS Code / VSCodium are trademarks of their owners (see MARKS.md).\n */\nexport function VSCode(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M11.583.54a1.467 1.467 0 0 0-.441 2.032c2.426 3.758 2.999 6.592 2.75 9.075-1.004 4.756-3.187 5.721-5.094 5.721-1.863 0-1.364-3.065.036-3.962.836-.522 1.906-.861 2.728-.861.814 0 1.474-.658 1.474-1.47 0-.812-.66-1.47-1.474-1.47-.96 0-1.901.202-2.78.545.18-.847.246-1.762.014-2.735-.352-1.477-1.367-2.889-3.128-4.257a1.476 1.476 0 0 0-2.069.256c-.5.64-.384 1.564.259 2.063 1.435 1.114 1.908 1.939 2.07 2.618.162.679.032 1.407-.293 2.408-.416 1.349-.9 2.553-1.11 3.708-.105.568-.114 1.187-.14 1.68-1.034-1.006-1.438-2.336-1.438-4.279 0-.811-.66-1.47-1.474-1.47-.814.001-1.473.659-1.473 1.47 0 2.654.776 5.179 2.855 6.863 1.883 1.793 6.67 1.13 6.67 4.01 0 .812 1.19 1.208 2.004 1.208.834 0 1.885-.558 1.885-1.208 0-3.267 3.443-5.253 9.11-5.244A1.472 1.472 0 0 0 24 15.773 1.472 1.472 0 0 0 22.53 14.3c-.388 0-.765.013-1.138.035.634-1.49.915-3.13.857-4.903a1.473 1.473 0 0 0-1.522-1.42 1.472 1.472 0 0 0-1.425 1.517c.076 2.32-.01 4.393-1.74 5.485-.49.31-1.062.58-1.604.58.42-1.145.738-2.353.869-3.655.083-.83.091-1.818-.003-2.585-.148-1.188-.325-2.535.126-3.55.405-.874 1.313-1.24 2.645-1.24.814 0 1.473-.659 1.473-1.47 0-.811-.659-1.47-1.473-1.47-1.98 0-3.481 1.042-4.332 2.3-.445-.95-.987-1.929-1.642-2.943a1.474 1.474 0 0 0-2.037-.44z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `linear` — the Linear mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Linear(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M2.886 4.18A11.982 11.982 0 0 1 11.99 0C18.624 0 24 5.376 24 12.009c0 3.64-1.62 6.903-4.18 9.105L2.887 4.18ZM1.817 5.626l16.556 16.556c-.524.33-1.075.62-1.65.866L.951 7.277c.247-.575.537-1.126.866-1.65ZM.322 9.163l14.515 14.515c-.71.172-1.443.282-2.195.322L0 11.358a12 12 0 0 1 .322-2.195Zm-.17 4.862 9.823 9.824a12.02 12.02 0 0 1-9.824-9.824Z\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `linkedin` — the LinkedIn mark (in-repo stroke glyph carried from the consumer;\n * Lucide removed brand icons, so it is NOT in lucide@1.17.0, §12). Stroke idiom —\n * a minor, owner-accepted inconsistency vs the filled brand marks. Nominative use\n * only — a trademark of its owner (see MARKS.md).\n */\nexport function LinkedIn(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-4 0v7h-4v-7a6 6 0 0 1 6-6z\" />\n <rect width=\"4\" height=\"12\" x=\"2\" y=\"9\" />\n <circle cx=\"4\" cy=\"4\" r=\"2\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `x-twitter` — the X mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function XTwitter(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `youtube` — the YouTube mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function YouTube(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `google` — the Google mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Google(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `reddit` — the Reddit mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Reddit(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `openai` — the OpenAI mark (owner-supplied asset; not in CC0 sets, §12). The\n * source `#000000` fill is normalized to `currentColor` via the filled IconBase.\n * Nominative use only — a trademark of its owner (see MARKS.md).\n */\nexport function OpenAI(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `anthropic` — the Anthropic mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Anthropic(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `claude` — the Claude mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Claude(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `gemini` — the Google Gemini mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Gemini(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M11.04 19.32Q12 21.51 12 24q0-2.49.93-4.68.96-2.19 2.58-3.81t3.81-2.55Q21.51 12 24 12q-2.49 0-4.68-.93a12.3 12.3 0 0 1-3.81-2.58 12.3 12.3 0 0 1-2.58-3.81Q12 2.49 12 0q0 2.49-.96 4.68-.93 2.19-2.55 3.81a12.3 12.3 0 0 1-3.81 2.58Q2.49 12 0 12q2.49 0 4.68.96 2.19.93 3.81 2.55t2.55 3.81\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `deepseek` — the DeepSeek mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function DeepSeek(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M23.748 4.651c-.254-.124-.364.113-.512.233-.051.04-.094.09-.137.137-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.155-.708-.311-.955-.65-.172-.24-.219-.509-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.094.172.187.129.323-.082.28-.18.553-.266.833-.055.179-.137.218-.328.14a5.5 5.5 0 0 1-1.737-1.179c-.857-.828-1.631-1.743-2.597-2.46a12 12 0 0 0-.689-.47c-.985-.957.13-1.743.387-1.836.27-.098.094-.433-.778-.428-.872.003-1.67.295-2.687.685a3 3 0 0 1-.465.136 9.6 9.6 0 0 0-2.883-.101c-1.885.21-3.39 1.1-4.497 2.622C.082 8.776-.231 10.854.152 13.02c.403 2.284 1.568 4.175 3.36 5.653 1.857 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.132-.284 4.994-1.86.47.234.962.328 1.78.398.629.058 1.235-.031 1.705-.129.735-.155.684-.836.418-.961-2.155-1.004-1.682-.595-2.112-.926 1.095-1.295 2.768-3.598 3.284-6.733.05-.346.115-.834.108-1.114-.004-.171.035-.238.23-.257a4.2 4.2 0 0 0 1.545-.475c1.397-.763 1.96-2.016 2.093-3.517.02-.23-.004-.467-.247-.588M11.58 18.168c-2.088-1.642-3.101-2.183-3.52-2.16-.39.024-.32.472-.234.763.09.288.207.487.371.74.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.168-1.361-.801-2.5-1.86-3.301-3.306-.775-1.393-1.225-2.888-1.299-4.482-.02-.385.094-.522.477-.592a4.7 4.7 0 0 1 1.53-.038c2.131.311 3.946 1.264 5.467 2.774.868.86 1.525 1.887 2.202 2.89.72 1.066 1.494 2.082 2.48 2.915.348.291.626.513.892.677-.802.09-2.14.109-3.055-.615zm1.001-6.44a.306.306 0 0 1 .415-.287.3.3 0 0 1 .113.074.3.3 0 0 1 .086.214c0 .17-.136.307-.308.307a.303.303 0 0 1-.306-.307m3.11 1.596c-.2.081-.4.151-.591.16a1.25 1.25 0 0 1-.798-.254c-.274-.23-.47-.358-.551-.758a1.7 1.7 0 0 1 .015-.588c.07-.327-.007-.537-.238-.727-.188-.156-.426-.199-.689-.199a.6.6 0 0 1-.254-.078.253.253 0 0 1-.114-.358 1 1 0 0 1 .192-.21c.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.392.451.462.576.685.915.176.264.336.536.446.848.066.194-.02.353-.25.45\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `moonshot` — the Moonshot AI mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Moonshot(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"m1.053 16.91 9.538 2.55a21 20.981 0 0 0 .06 2.031l5.956 1.592a12 11.99 0 0 1-15.554-6.172m-1.02-5.79 11.352 3.035a21 20.981 0 0 0-.469 2.01l10.817 2.89a12 11.99 0 0 1-1.845 2.004L.658 15.918a12 11.99 0 0 1-.625-4.796m1.593-5.146L13.573 9.17a21 20.981 0 0 0-1.01 1.874l11.297 3.02a21 20.981 0 0 1-.67 2.362l-11.55-3.087L.125 10.26a12 11.99 0 0 1 1.499-4.285ZM6.067 1.58l11.285 3.016a21 20.981 0 0 0-1.688 1.719l7.824 2.091a21 20.981 0 0 1 .513 2.664L2.107 5.218a12 11.99 0 0 1 3.96-3.638M21.68 4.866 7.222 1.003A12 11.99 0 0 1 21.68 4.866\" />\n </IconBase>\n );\n}\n","import { IconBase } from \"../IconBase\";\nimport type { IconProps } from \"../icon-props\";\n\n/**\n * `glm` — the GLM / Zhipu mark (owner-supplied asset; not in CC0 sets, §12). Already\n * `currentColor`; the multi-path mark uses an even-odd fill rule. Nominative use only\n * — a trademark of its owner (see MARKS.md).\n */\nexport function GLM(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <g fillRule=\"evenodd\">\n <path d=\"M19.028 3.853a1.31 1.31 0 101.309 1.309 1.31 1.31 0 00-1.31-1.31zm.594 1.987a.664.664 0 11.001-1.329.664.664 0 01-.001 1.329z\" />\n <path d=\"M19.67 4.814a.348.348 0 000 .695.348.348 0 000-.695zM14.117 16.317a.037.037 0 00-.027-.061c-.314-.005-1.499-.093-2.105-1.082a2.088 2.088 0 01-.089-2.027.04.04 0 000-.033l-1.005-1.81c-.008-.016-.027-.02-.044-.017-2.018.396-3.194 2.104-2.838 3.788.096.458.285.864.578 1.237.748.95 1.859 1.26 2.675 1.235 1.69-.05 2.63-.977 2.856-1.23zM4.766 6.906a9.903 9.903 0 012.487-2.153L5.63 1.829a.58.58 0 00-.514-.298l-4.809.04a.31.31 0 00-.268.46l3.62 6.525c.41-.756.823-1.311 1.106-1.65zM17.52 10.93c-.422.01-.824-.01-1.044.027-.183.031-.657.121-1.14.574a.037.037 0 00.016.062c.329.087.633.237.928.416.63.383 1.205 1.346 1.383 1.8.01.03.051.032.066.004l1.72-3.27c.015-.03-.015-.064-.047-.051-.806.328-1.476.43-1.883.439h.001zM23.687 1.512l-4.546.037a.58.58 0 00-.507.306l-.126.27c.364-.009 2.426.152 4.158 2.308l1.298-2.467a.31.31 0 00-.277-.455v.001zM10.846 21.497l.843 1.517a.31.31 0 00.533.016l1.31-2.064a8.27 8.27 0 01-2.686.53z\" />\n <path d=\"M22.327 5.379c-1.461-2.435-3.529-2.393-3.529-2.393-.951-.186-1.436-1.263-3.626-1.797-2.046-.5-3.188.112-2.368.451 1.322.548 2.075 2.73 2.462 4.374.494 2.1 1.569 2.14 2.758 2.011.924-.098 2.775-1.058 3.721-1.256 1.03-.216 1.353-.101.58-1.39h.002zm-3.373 1.538a1.757 1.757 0 11.001-3.514 1.757 1.757 0 010 3.514zM12.756 13.364c-.261.623.032 1.57 1.316 1.656.08 0 .12-.053.12-.12 0-.065-.058-.097-.12-.119-.062-.022-.654-.226-.524-.918.042-.23.248-.438.5-.533-.142-.265-.143-.622.06-.965-.343 0-1.015.194-1.353 1v-.001zM16.836 14.624c0-.684-.451-1.41-.805-1.64-.307-.107-.816.06-1.103.487.337.22.553.572.59 1.48.046 1.174-.844 2.184-2.035 2.76 1.764-.34 3.353-1.79 3.353-3.087zM6.201 16.591C2.802 12.248 4.841 6.44 9.795 4.472c-6.168 2.08-8.01 8.89-4.547 13.168 2.299 2.84 6.254 2.937 8.373 2.2-2.571-.213-5.33-.578-7.42-3.248zM15.09 10.445c.03-.012.03-.054 0-.067-.06-.028-.175-.05-.387.004-.411.102-1.42.264-1.34-.226.055-.349.614-.46 1.023-1.128.202-.33-.06-.875-.59-.875-.408 0-.828.186-1.285.67-.64.676-.766 1.31-.518 1.776.234.442.784.633 1.702.48.628-.103.82-.381 1.396-.635v.001z\" />\n <path d=\"M14.685 12.364s-.492.177-.436.934c.183-.046.239-.028.488.092.114-.338.407-.623.84-.623.078 0 .155.009.23.024-.29-.219-.591-.4-1.12-.427h-.002zM18.253 9.573c-2.444.515-2.48-1.58-4.28-1.985-2.423-.544-5.526.905-6.888 3.545-.554 1.074-1.076 3.178.283 4.97-.854-2.323.434-4.032 1.264-4.702.782-.629 1.738-1.026 2.682-1.267a.035.035 0 00.027-.034c.016-.51.276-1.055.767-1.574.521-.552 1.055-.819 1.631-.819.422 0 .793.215.994.573.185.33.185.725 0 1.026-.11.18-.228.326-.345.447-.022.021-.006.06.024.06 1.132.071 2.063.347 2.893.284 3.134-.24 4.25-1.91 4.652-2.217.365-.278-2.385 1.413-3.706 1.69l.002.003z\" />\n <path d=\"M15.159 16.452c-.916.916-2.416 2.208-5.318 1.665-2.105-.394-3.719-3.312-3.25-6.832.252-1.883 1.712-3.64 3.082-4.206 2.995-1.24 4.57.081 5.298.897.516.579 1.106 1.773 3.014 1.757 1.456-.012 3.978-1.726 4.678-2.372.24-.221-.021-.343-.418-.308-1.514.136-2.916 1.752-4.976 1.664-1.017-.043-2.298-.742-2.75-2.25-.542-1.812-.553-2.19-1.176-2.297-.653-.112-1.648-.173-3.087.275-1.863.583-4.784 3.436-4.97 6.84-.324 5.884 2.306 8.243 6.36 8.743.459.056 1.462-.066 1.909-.162a5.727 5.727 0 001.565-.967c1.01-.908 1.626-1.918 1.77-3.376.05-.49-.069-1.14-.135-1.425-.023.302-.623 1.376-1.597 2.35v.004z\" />\n </g>\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `mistral` — the Mistral AI mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Mistral(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M17.143 3.429v3.428h-3.429v3.429h-3.428V6.857H6.857V3.43H3.43v13.714H0v3.428h10.286v-3.428H6.857v-3.429h3.429v3.429h3.429v-3.429h3.428v3.429h-3.428v3.428H24v-3.428h-3.43V3.429z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `perplexity` — the Perplexity mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Perplexity(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm12.7086.0248-5.7766-5.1509V9.0618l5.7766 5.7766v6.5588zm2.8882-5.0652h-1.733v-1.9723L13.3948 8.245h7.8478v8.087z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `huggingface` — the Hugging Face mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function HuggingFace(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378 0 1.112.178 2.181.503 3.185.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284.278.173.48.408.71.694.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542.01.026.653 1.552 1.657 2.54.616.605 1.01 1.223 1.082 1.912.055.537-.096 1.059-.38 1.572.637.121 1.294.187 1.967.187.657 0 1.298-.063 1.921-.178-.287-.517-.44-1.041-.384-1.581.07-.69.465-1.307 1.081-1.913 1.004-.987 1.647-2.513 1.657-2.539.021-.074.083-.285.233-.542.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952.23-.286.432-.52.71-.694.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174 1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013 1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164 1.607-.007 2.984-1.155 3.572-1.164.196-.003.305.12.305.454 0 .886-.424 2.328-1.563 3.202-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026-.01.008-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116 1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243 1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444-.034-.016-.104-.008-.2.022q-.094.03-.216.087-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096 3 3 0 0 0-.26.219 2 2 0 0 0-.12.121 2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203 0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647 2.822 2.813 2.562 3.244-1.176-.506-1.176-.506-2.866-2.567-3.49-1.898.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405-.238.839-2.71-1.587-3.216-.642-.506.946 3.49 2.056 3.522 2.064 1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194 1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647-2.822 2.813-2.562 3.244 1.176-.506 1.176-.506 2.866-2.567 3.49-1.898-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405.238.839 2.71-1.587 3.216-.642.506.946-3.49 2.056-3.522 2.064-1.29.33-4.568 1.028-5.713-.624\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `ollama` — the Ollama mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Ollama(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M16.361 10.26a.894.894 0 0 0-.558.47l-.072.148.001.207c0 .193.004.217.059.353.076.193.152.312.291.448.24.238.51.3.872.205a.86.86 0 0 0 .517-.436.752.752 0 0 0 .08-.498c-.064-.453-.33-.782-.724-.897a1.06 1.06 0 0 0-.466 0zm-9.203.005c-.305.096-.533.32-.65.639a1.187 1.187 0 0 0-.06.52c.057.309.31.59.598.667.362.095.632.033.872-.205.14-.136.215-.255.291-.448.055-.136.059-.16.059-.353l.001-.207-.072-.148a.894.894 0 0 0-.565-.472 1.02 1.02 0 0 0-.474.007Zm4.184 2c-.131.071-.223.25-.195.383.031.143.157.288.353.407.105.063.112.072.117.136.004.038-.01.146-.029.243-.02.094-.036.194-.036.222.002.074.07.195.143.253.064.052.076.054.255.059.164.005.198.001.264-.03.169-.082.212-.234.15-.525-.052-.243-.042-.28.087-.355.137-.08.281-.219.324-.314a.365.365 0 0 0-.175-.48.394.394 0 0 0-.181-.033c-.126 0-.207.03-.355.124l-.085.053-.053-.032c-.219-.13-.259-.145-.391-.143a.396.396 0 0 0-.193.032zm.39-2.195c-.373.036-.475.05-.654.086-.291.06-.68.195-.951.328-.94.46-1.589 1.226-1.787 2.114-.04.176-.045.234-.045.53 0 .294.005.357.043.524.264 1.16 1.332 2.017 2.714 2.173.3.033 1.596.033 1.896 0 1.11-.125 2.064-.727 2.493-1.571.114-.226.169-.372.22-.602.039-.167.044-.23.044-.523 0-.297-.005-.355-.045-.531-.288-1.29-1.539-2.304-3.072-2.497a6.873 6.873 0 0 0-.855-.031zm.645.937a3.283 3.283 0 0 1 1.44.514c.223.148.537.458.671.662.166.251.26.508.303.82.02.143.01.251-.043.482-.08.345-.332.705-.672.957a3.115 3.115 0 0 1-.689.348c-.382.122-.632.144-1.525.138-.582-.006-.686-.01-.853-.042-.57-.107-1.022-.334-1.35-.68-.264-.28-.385-.535-.45-.946-.03-.192.025-.509.137-.776.136-.326.488-.73.836-.963.403-.269.934-.46 1.422-.512.187-.02.586-.02.773-.002zm-5.503-11a1.653 1.653 0 0 0-.683.298C5.617.74 5.173 1.666 4.985 2.819c-.07.436-.119 1.04-.119 1.503 0 .544.064 1.24.155 1.721.02.107.031.202.023.208a8.12 8.12 0 0 1-.187.152 5.324 5.324 0 0 0-.949 1.02 5.49 5.49 0 0 0-.94 2.339 6.625 6.625 0 0 0-.023 1.357c.091.78.325 1.438.727 2.04l.13.195-.037.064c-.269.452-.498 1.105-.605 1.732-.084.496-.095.629-.095 1.294 0 .67.009.803.088 1.266.095.555.288 1.143.503 1.534.071.128.243.393.264.407.007.003-.014.067-.046.141a7.405 7.405 0 0 0-.548 1.873c-.062.417-.071.552-.071.991 0 .56.031.832.148 1.279L3.42 24h1.478l-.05-.091c-.297-.552-.325-1.575-.068-2.597.117-.472.25-.819.498-1.296l.148-.29v-.177c0-.165-.003-.184-.057-.293a.915.915 0 0 0-.194-.25 1.74 1.74 0 0 1-.385-.543c-.424-.92-.506-2.286-.208-3.451.124-.486.329-.918.544-1.154a.787.787 0 0 0 .223-.531c0-.195-.07-.355-.224-.522a3.136 3.136 0 0 1-.817-1.729c-.14-.96.114-2.005.69-2.834.563-.814 1.353-1.336 2.237-1.475.199-.033.57-.028.776.01.226.04.367.028.512-.041.179-.085.268-.19.374-.431.093-.215.165-.333.36-.576.234-.29.46-.489.822-.729.413-.27.884-.467 1.352-.561.17-.035.25-.04.569-.04.319 0 .398.005.569.04a4.07 4.07 0 0 1 1.914.997c.117.109.398.457.488.602.034.057.095.177.132.267.105.241.195.346.374.43.14.068.286.082.503.045.343-.058.607-.053.943.016 1.144.23 2.14 1.173 2.581 2.437.385 1.108.276 2.267-.296 3.153-.097.15-.193.27-.333.419-.301.322-.301.722-.001 1.053.493.539.801 1.866.708 3.036-.062.772-.26 1.463-.533 1.854a2.096 2.096 0 0 1-.224.258.916.916 0 0 0-.194.25c-.054.109-.057.128-.057.293v.178l.148.29c.248.476.38.823.498 1.295.253 1.008.231 2.01-.059 2.581a.845.845 0 0 0-.044.098c0 .006.329.009.732.009h.73l.02-.074.036-.134c.019-.076.057-.3.088-.516.029-.217.029-1.016 0-1.258-.11-.875-.295-1.57-.597-2.226-.032-.074-.053-.138-.046-.141.008-.005.057-.074.108-.152.376-.569.607-1.284.724-2.228.031-.26.031-1.378 0-1.628-.083-.645-.182-1.082-.348-1.525a6.083 6.083 0 0 0-.329-.7l-.038-.064.131-.194c.402-.604.636-1.262.727-2.04a6.625 6.625 0 0 0-.024-1.358 5.512 5.512 0 0 0-.939-2.339 5.325 5.325 0 0 0-.95-1.02 8.097 8.097 0 0 1-.186-.152.692.692 0 0 1 .023-.208c.208-1.087.201-2.443-.017-3.503-.19-.924-.535-1.658-.98-2.082-.354-.338-.716-.482-1.15-.455-.996.059-1.8 1.205-2.116 3.01a6.805 6.805 0 0 0-.097.726c0 .036-.007.066-.015.066a.96.96 0 0 1-.149-.078A4.857 4.857 0 0 0 12 3.03c-.832 0-1.687.243-2.456.698a.958.958 0 0 1-.148.078c-.008 0-.015-.03-.015-.066a6.71 6.71 0 0 0-.097-.725C8.997 1.392 8.337.319 7.46.048a2.096 2.096 0 0 0-.585-.041Zm.293 1.402c.248.197.523.759.682 1.388.03.113.06.244.069.292.007.047.026.152.041.233.067.365.098.76.102 1.24l.002.475-.12.175-.118.178h-.278c-.324 0-.646.041-.954.124l-.238.06c-.033.007-.038-.003-.057-.144a8.438 8.438 0 0 1 .016-2.323c.124-.788.413-1.501.696-1.711.067-.05.079-.049.157.013zm9.825-.012c.17.126.358.46.498.888.28.854.36 2.028.212 3.145-.019.14-.024.151-.057.144l-.238-.06a3.693 3.693 0 0 0-.954-.124h-.278l-.119-.178-.119-.175.002-.474c.004-.669.066-1.19.214-1.772.157-.623.434-1.185.68-1.382.078-.062.09-.063.159-.012z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `qwen` — the QWen mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Qwen(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M23.919 14.545 20.817 9.17l1.47-2.544a.56.56 0 0 0 0-.566l-1.633-2.83a.57.57 0 0 0-.49-.283h-6.207L12.487.402a.57.57 0 0 0-.49-.284H8.732a.56.56 0 0 0-.49.284L5.139 5.775h-2.94a.56.56 0 0 0-.49.284L.077 8.887a.56.56 0 0 0 0 .567L3.18 14.83l-1.47 2.545a.56.56 0 0 0 0 .566l1.634 2.83a.57.57 0 0 0 .49.283h6.205l1.47 2.545a.57.57 0 0 0 .49.284h3.266a.57.57 0 0 0 .49-.284l3.104-5.375h2.94a.57.57 0 0 0 .49-.283l1.634-2.828a.55.55 0 0 0-.004-.568M8.733.686l1.634 2.828-1.634 2.828H21.8L20.164 9.17H7.425L5.63 6.06Zm1.306 19.801-6.205-.002 1.634-2.83h3.265L2.201 6.344h3.267q3.182 5.517 6.367 11.032zm10.124-5.66L18.53 12l-6.532 11.315-1.634-2.83c2.129-3.673 4.25-7.351 6.373-11.028h3.592l3.102 5.374z\" />\n </IconBase>\n );\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from simple-icons@16.24.0 (CC0-1.0). Do not edit.\nimport { IconBase } from \"../../IconBase\";\nimport type { IconProps } from \"../../icon-props\";\n\n/** `meta` — the Meta mark, generated from simple-icons@16.24.0 (CC0-1.0). Nominative use only (§12, MARKS.md). */\nexport function Meta(props: IconProps) {\n return (\n <IconBase filled {...props}>\n <path d=\"M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z\" />\n </IconBase>\n );\n}\n","import { forwardRef, useId, useState } from \"react\";\nimport type { KeyboardEvent } from \"react\";\n\nimport { Eye, EyeOff } from \"../icons/generated\";\n\n/**\n * SecretInput — masked BYO-key / secret entry with reveal, set, rotate, remove.\n *\n * A token-driven className wrapper over the shipped `@qball-inc/tokens` surface\n * (`components.css` / `colors_and_type.css`), matching the\n * `preview/secret-input.html` oracle card: a `.field` composition wrapping an\n * `.input-wrap` (the `.input num` masked field + an `.input-wrap__affix` reveal\n * toggle) and a `.btn` action row. There is NO behavioral library and NO\n * component CSS — masking is the native `<input type=\"password\">`, the reveal\n * toggle flips `type` to `text`, and every visual comes from the shipped token\n * classes. The two inline styles are structural-only (`display:flex` row +\n * `gap`/`color` from `var(--*)` tokens), mirroring the oracle's own\n * `style=\"color:var(--data-down)\"` Delete affordance — no hex, no shadow.\n *\n * Security posture (BINDING): the raw secret lives ONLY as the controlled\n * input's value — it is never duplicated into another node, attribute, or text,\n * and is never passed to `console.*`. The masked state relies on the native\n * password mask; the reveal toggle is the only path to plaintext, and only\n * while held in view. The leak gate in `SecretInput.test.tsx` asserts the\n * secret is confined to that single input's value and is absent from every\n * other attribute, all text content, web storage, cookies, and `console.*`.\n *\n * State model:\n * - `isSet={false}` (unset): editable input + a single \"Set\" affordance.\n * - `isSet` (set): masked read-only value + \"Rotate\" + \"Remove\". \"Rotate\" opens\n * an in-place edit (Update / Cancel) without round-tripping the stored secret.\n */\nexport interface SecretInputProps {\n /** Current input value (controlled). In the masked set-state this is what the consumer chooses to display. */\n value: string;\n /** Fired with the new string on each edit (the value, not the DOM event). */\n onChange: (value: string) => void;\n /** Commit handler — fired with the current value when the user confirms (Set / Update / Enter). */\n onSet: (value: string) => void;\n /** Clear/remove handler — fired when the user removes a stored secret; resets to the unset state. */\n onRemove: () => void;\n /** Visible label, associated to the input via `htmlFor`/`id`. */\n label: string;\n /** Whether a secret is currently stored. `false` → unset/entry; `true` → masked display with rotate/remove. */\n isSet?: boolean;\n /** Disable the whole control. */\n disabled?: boolean;\n /** Placeholder shown in the unset/entry state. */\n placeholder?: string;\n /** Form field name; pairs with `autocomplete=\"new-password\"` to suppress credential autofill. */\n name?: string;\n /** Optional helper text below the field (`aria-describedby`). */\n helpText?: string;\n /** Render a required marker (`*`) after the label. */\n required?: boolean;\n /** Label for the commit button in the unset state. Default `\"Set\"`. */\n setLabel?: string;\n /** Label for the commit button while rotating an existing secret. Default `\"Update\"`. */\n updateLabel?: string;\n /** Label for the rotate affordance in the set state. Default `\"Rotate\"`. */\n rotateLabel?: string;\n /** Label for the remove affordance in the set state. Default `\"Remove\"`. */\n removeLabel?: string;\n /** Label for the cancel affordance while rotating. Default `\"Cancel\"`. */\n cancelLabel?: string;\n /** `aria-label` for the reveal toggle when masked. Default `\"Show secret\"`. */\n showSecretLabel?: string;\n /** `aria-label` for the reveal toggle when revealed. Default `\"Hide secret\"`. */\n hideSecretLabel?: string;\n}\n\nexport const SecretInput = forwardRef<HTMLInputElement, SecretInputProps>(function SecretInput(\n {\n value,\n onChange,\n onSet,\n onRemove,\n label,\n isSet = false,\n disabled = false,\n placeholder,\n name,\n helpText,\n required = false,\n setLabel = \"Set\",\n updateLabel = \"Update\",\n rotateLabel = \"Rotate\",\n removeLabel = \"Remove\",\n cancelLabel = \"Cancel\",\n showSecretLabel = \"Show secret\",\n hideSecretLabel = \"Hide secret\",\n },\n ref,\n) {\n const [showSecret, setShowSecret] = useState(false);\n const [editing, setEditing] = useState(false);\n\n const baseId = useId();\n const inputId = `${baseId}-secret`;\n const helpId = helpText !== undefined ? `${baseId}-help` : undefined;\n\n // Editable when there is no stored secret, or when the user is rotating one.\n const editable = isSet !== true || editing;\n const canCommit = value.trim().length > 0;\n\n const commit = () => {\n if (!canCommit) return;\n onSet(value);\n setEditing(false);\n setShowSecret(false);\n };\n const cancelRotate = () => {\n setEditing(false);\n setShowSecret(false);\n };\n const remove = () => {\n onRemove();\n setShowSecret(false);\n };\n const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && editable && canCommit) {\n event.preventDefault();\n commit();\n }\n };\n\n return (\n <div className=\"field\">\n <label className=\"field__label\" htmlFor={inputId}>\n {label}\n {required ? <span className=\"field__req\"> *</span> : null}\n </label>\n\n <div className=\"input-wrap\">\n <input\n ref={ref}\n id={inputId}\n name={name}\n className=\"input num\"\n type={showSecret ? \"text\" : \"password\"}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={!editable}\n // new-password suppresses autofill/storage of real credentials (AC-5).\n autoComplete=\"new-password\"\n aria-describedby={helpId}\n onChange={(event) => {\n onChange(event.target.value);\n }}\n onKeyDown={handleKeyDown}\n />\n <button\n type=\"button\"\n className=\"input-wrap__affix\"\n aria-label={showSecret ? hideSecretLabel : showSecretLabel}\n aria-pressed={showSecret}\n disabled={disabled}\n onClick={() => {\n setShowSecret((shown) => !shown);\n }}\n >\n {showSecret ? <EyeOff size={16} /> : <Eye size={16} />}\n </button>\n </div>\n\n {helpText !== undefined ? (\n <span className=\"field__help\" id={helpId}>\n {helpText}\n </span>\n ) : null}\n\n {/* Structural row only: flex + token gap, mirroring the oracle's `.actions`\n demo style (which is preview-local, not shipped). No brand values. */}\n <div style={{ display: \"flex\", gap: \"var(--space-sm)\" }}>\n {editable ? (\n <>\n <button\n type=\"button\"\n className=\"btn btn--primary\"\n disabled={disabled || !canCommit}\n onClick={commit}\n >\n {isSet ? updateLabel : setLabel}\n </button>\n {isSet && editing ? (\n <button\n type=\"button\"\n className=\"btn btn--ghost\"\n disabled={disabled}\n onClick={cancelRotate}\n >\n {cancelLabel}\n </button>\n ) : null}\n </>\n ) : (\n <>\n <button\n type=\"button\"\n className=\"btn btn--secondary\"\n disabled={disabled}\n onClick={() => {\n setEditing(true);\n }}\n >\n {rotateLabel}\n </button>\n {/* Subtle destructive affordance: ghost button tinted with the down\n token, matching the oracle's `style=\"color:var(--data-down)\"`. */}\n <button\n type=\"button\"\n className=\"btn btn--ghost\"\n style={{ color: \"var(--data-down)\" }}\n disabled={disabled}\n onClick={remove}\n >\n {removeLabel}\n </button>\n </>\n )}\n </div>\n </div>\n );\n});\n","import { Command } from \"cmdk\";\nimport { useMemo } from \"react\";\n\n/**\n * Search — command-palette search/autocomplete built on `cmdk`.\n *\n * cmdk supplies the headless behavior (built-in fuzzy filtering, roving\n * keyboard navigation, combobox/listbox ARIA), and the visuals come entirely\n * from the shipped `@qball-inc/tokens` classes: the input is painted with\n * `.input`, the results panel with `.menu`, and each result with `.menu__item`\n * (the same dropdown surface `Select` paints). cmdk is additive — it ships no\n * conflicting CSS, so applying the token classes on top is sufficient and no\n * component CSS is authored (the loading/empty rows use structural padding +\n * the `--text-muted` token only, mirroring the oracle's inline-token style).\n *\n * Filtering is cmdk's built-in matcher over each item's `label`; selecting a\n * result (click or Enter) fires `onSelect` with the full item object.\n */\nexport interface SearchItem {\n /** Stable identity; used as the React key. */\n id: string;\n /** Visible text; also the value cmdk filters against. */\n label: string;\n /** Optional group heading the item is bucketed under. */\n group?: string;\n}\n\nexport interface SearchProps {\n /** The selectable items. */\n items: SearchItem[];\n /** Fired with the selected item when a result is chosen (click or Enter). */\n onSelect: (item: SearchItem) => void;\n /** Placeholder for the search input. */\n placeholder?: string;\n /** Text shown when the query matches no items. Default `\"No results found.\"`. */\n emptyText?: string;\n /** Show a loading row instead of (or alongside) results. */\n isLoading?: boolean;\n /** Disable the input and all results. */\n disabled?: boolean;\n /** Accessible label for the search input + command region. Default `\"Search\"`. */\n label?: string;\n}\n\nconst mutedRowStyle = { padding: \"var(--space-sm)\", color: \"var(--text-muted)\" } as const;\n\nexport function Search({\n items,\n onSelect,\n placeholder,\n emptyText = \"No results found.\",\n isLoading = false,\n disabled = false,\n label = \"Search\",\n}: SearchProps) {\n // Partition into ungrouped items + named groups, preserving first-seen order.\n const { ungrouped, groups } = useMemo(() => {\n const ungroupedItems: SearchItem[] = [];\n const grouped = new Map<string, SearchItem[]>();\n for (const item of items) {\n if (item.group === undefined || item.group === \"\") {\n ungroupedItems.push(item);\n } else {\n const bucket = grouped.get(item.group) ?? [];\n bucket.push(item);\n grouped.set(item.group, bucket);\n }\n }\n return { ungrouped: ungroupedItems, groups: grouped };\n }, [items]);\n\n const renderItem = (item: SearchItem) => (\n // cmdk keys an item's selection/highlight identity on `value`; using the\n // unique `id` (not `label`) keeps two same-label items distinct, while\n // `keywords` preserves label-based filtering through cmdk's default matcher.\n <Command.Item\n key={item.id}\n value={item.id}\n keywords={[item.label]}\n disabled={disabled}\n className=\"menu__item\"\n onSelect={() => {\n onSelect(item);\n }}\n >\n {item.label}\n </Command.Item>\n );\n\n return (\n <Command label={label}>\n <Command.Input\n className=\"input\"\n placeholder={placeholder}\n aria-label={label}\n disabled={disabled}\n />\n <Command.List className=\"menu\">\n {isLoading ? (\n <Command.Loading>\n <div style={mutedRowStyle}>Loading…</div>\n </Command.Loading>\n ) : null}\n <Command.Empty>\n <div style={mutedRowStyle}>{emptyText}</div>\n </Command.Empty>\n {ungrouped.map(renderItem)}\n {[...groups.entries()].map(([groupName, groupItems]) => (\n <Command.Group key={groupName} heading={groupName}>\n {groupItems.map(renderItem)}\n </Command.Group>\n ))}\n </Command.List>\n </Command>\n );\n}\n","import * as AlertDialog from \"@radix-ui/react-alert-dialog\";\nimport * as Dialog from \"@radix-ui/react-dialog\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, CSSProperties, ElementRef, ReactNode } from \"react\";\n\nimport { TriangleAlert, X } from \"../icons/generated\";\n\n/**\n * Modal — accessible dialog built on Radix `Dialog` (standard) + `AlertDialog`\n * (destructive confirm), painted entirely with the shipped `@qball-inc/tokens`\n * classes (`.modal`, `.modal__head/title/sub/x/body/foot`, `.scrim`) from the\n * `preview/modal.html` oracle.\n *\n * Radix supplies the behavior — portalled content, focus-trap, body scroll-lock,\n * Escape-to-close, and overlay(scrim)-click-to-close — while the visual surface\n * is the token CSS. This is the same \"Radix for behavior, shipped classes for\n * style\" pattern as `Select`. There is NO component CSS and NO hardcoded color.\n *\n * The lift is the brand's no-shadow treatment: a heavier `--border-strong` panel\n * over a dim `.scrim` (`var(--color-scrim)`) — there is NO `box-shadow` anywhere\n * (FR4 / DESIGN.md). The only inline styles are structural (fixed-centering the\n * content, and the destructive warn badge tinted via `var(--data-down*)` tokens),\n * mirroring the oracle's own preview-local layout style — no hex, no shadow.\n *\n * Composition (matches the oracle):\n * <Modal open={open} onOpenChange={setOpen}>\n * <ModalContent aria-label=\"Create alert\">\n * <div className=\"modal__head\">\n * <div><ModalTitle>Create alert</ModalTitle><ModalDescription>AAPL</ModalDescription></div>\n * <ModalClose />\n * </div>\n * <div className=\"modal__body\">…</div>\n * <div className=\"modal__foot\">\n * <ModalClose asChild><button className=\"btn btn--ghost\">Cancel</button></ModalClose>\n * <button className=\"btn btn--primary\">Save</button>\n * </div>\n * </ModalContent>\n * </Modal>\n *\n * `ModalContent` must contain a `ModalTitle` (Radix's a11y contract). For a\n * destructive confirmation, prefer the all-in-one `AlertModal`.\n */\n\n// Structural-only: fixed-center the portalled content above the scrim. No brand\n// values (no color/shadow/radius literals), so the DESIGN_DENY lint is satisfied.\n// The 440px cap mirrors the form-dialog width in preview/modal.html (AlertModal\n// overrides to 360px to match the narrower confirm-dialog oracle).\nconst CONTENT_STYLE: CSSProperties = {\n position: \"fixed\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"100%\",\n maxWidth: \"min(92vw, 440px)\",\n};\n\n// The confirm dialog has no body, so its head carries extra bottom padding\n// before the foot hairline — matches preview/modal.html's `padding-bottom:18px`.\nconst ALERT_HEAD_STYLE: CSSProperties = {\n paddingBottom: \"18px\",\n};\n\n// Destructive warn badge — token-tinted (var(--data-down*)), mirroring the\n// oracle's preview-local `.icon-warn`. Structural layout + token refs only.\nconst WARN_BADGE_STYLE: CSSProperties = {\n flex: \"none\",\n width: \"30px\",\n height: \"30px\",\n display: \"grid\",\n placeItems: \"center\",\n borderRadius: \"var(--radius-sm)\",\n background: \"var(--data-down-bg)\",\n color: \"var(--data-down)\",\n};\n\nconst ALERT_HEAD_ROW_STYLE: CSSProperties = {\n display: \"flex\",\n gap: \"12px\",\n alignItems: \"flex-start\",\n};\n\n/** Modal root — owns the open state. Thin alias of Radix `Dialog.Root`. */\nexport const Modal = Dialog.Root;\n\n/** Opens the modal; wrap a custom trigger element with `asChild`. Alias of `Dialog.Trigger`. */\nexport const ModalTrigger = Dialog.Trigger;\n\nexport interface ModalContentProps extends ComponentPropsWithoutRef<typeof Dialog.Content> {\n /** Close when Escape is pressed. Default `true`; set `false` to suppress (AC-6). */\n closeOnEscape?: boolean;\n /** Close when the scrim/overlay is clicked. Default `true`; set `false` to suppress (AC-6). */\n closeOnOverlayClick?: boolean;\n}\n\n/**\n * The portalled dialog surface: a `.scrim` overlay + the `.modal` content panel,\n * fixed-centered. Must contain a `ModalTitle`. Escape / overlay-click close by\n * default; pass `closeOnEscape={false}` / `closeOnOverlayClick={false}` to suppress.\n */\nexport const ModalContent = forwardRef<ElementRef<typeof Dialog.Content>, ModalContentProps>(\n function ModalContent(\n {\n className,\n style,\n children,\n closeOnEscape = true,\n closeOnOverlayClick = true,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...rest\n },\n ref,\n ) {\n return (\n <Dialog.Portal>\n {/*\n Scroll-lock is owned HERE by Radix Dialog's built-in react-remove-scroll\n (robust: scrollbar-width compensation, iOS, nested locks). This overlay already\n shares the `.scrim` class with the standalone <Scrim> atom; Scrim is\n the scroll-lock owner for NON-Radix / custom overlays. Intentionally NOT delegated\n to <Scrim> — replacing Radix's lock with a manual overflow:hidden would regress\n (D-07).\n */}\n <Dialog.Overlay className=\"scrim\" />\n <Dialog.Content\n ref={ref}\n className={[\"modal\", className].filter(Boolean).join(\" \")}\n style={{ ...CONTENT_STYLE, ...style }}\n onEscapeKeyDown={(event) => {\n if (!closeOnEscape) event.preventDefault();\n onEscapeKeyDown?.(event);\n }}\n onPointerDownOutside={(event) => {\n if (!closeOnOverlayClick) event.preventDefault();\n onPointerDownOutside?.(event);\n }}\n {...rest}\n >\n {children}\n </Dialog.Content>\n </Dialog.Portal>\n );\n },\n);\n\n/** Dialog title (`.modal__title`). Required inside `ModalContent` for accessibility. */\nexport const ModalTitle = forwardRef<\n ElementRef<typeof Dialog.Title>,\n ComponentPropsWithoutRef<typeof Dialog.Title>\n>(function ModalTitle({ className, ...rest }, ref) {\n return (\n <Dialog.Title\n ref={ref}\n className={[\"modal__title\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\n/** Dialog description / subtitle (`.modal__sub`). */\nexport const ModalDescription = forwardRef<\n ElementRef<typeof Dialog.Description>,\n ComponentPropsWithoutRef<typeof Dialog.Description>\n>(function ModalDescription({ className, ...rest }, ref) {\n return (\n <Dialog.Description\n ref={ref}\n className={[\"modal__sub\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\n/**\n * Closes the modal. Defaults to the `.modal__x` icon button (for the head);\n * pass `asChild` to style any element (e.g. a `.btn` Cancel in the footer).\n */\nexport const ModalClose = forwardRef<\n ElementRef<typeof Dialog.Close>,\n ComponentPropsWithoutRef<typeof Dialog.Close>\n>(function ModalClose({ className, children, asChild, \"aria-label\": ariaLabel, ...rest }, ref) {\n if (asChild === true) {\n return (\n <Dialog.Close ref={ref} asChild {...rest}>\n {children}\n </Dialog.Close>\n );\n }\n return (\n <Dialog.Close\n ref={ref}\n className={[\"modal__x\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel ?? \"Close\"}\n {...rest}\n >\n {children ?? <X size={16} />}\n </Dialog.Close>\n );\n});\n\nexport interface AlertModalProps {\n /** Controlled open state. */\n open?: boolean;\n /** Uncontrolled initial open state. */\n defaultOpen?: boolean;\n /** Fired when the open state changes. */\n onOpenChange?: (open: boolean) => void;\n /** Optional trigger element (wrapped with `asChild`). Omit when controlling `open` externally. */\n trigger?: ReactNode;\n /** Confirmation title (required for accessibility). */\n title: ReactNode;\n /** Supporting copy explaining the consequence. */\n description?: ReactNode;\n /** Optional extra body content between the description and the action row. */\n children?: ReactNode;\n /** Label for the confirm action. Default `\"Confirm\"`. */\n confirmLabel?: string;\n /** Label for the cancel action. Default `\"Cancel\"`. */\n cancelLabel?: string;\n /** Fired when the confirm action is chosen (the dialog then closes). */\n onConfirm?: () => void;\n /** Style the confirm button as destructive + show the warn badge. Default `true`. */\n destructive?: boolean;\n /** Accessible name for the dialog surface. */\n \"aria-label\"?: string;\n /** Structural style overrides merged onto the content panel (e.g. `maxWidth`). */\n style?: CSSProperties;\n}\n\n/**\n * AlertModal — a destructive/blocking confirmation built on Radix `AlertDialog`\n * (Escape + overlay-click are intentionally NOT close-on-outside by Radix design;\n * the user must choose Cancel or Confirm). Matches the `preview/modal.html`\n * confirm-modal oracle: a warn badge + title + description and a ghost Cancel /\n * destructive Confirm action row.\n */\nexport function AlertModal({\n open,\n defaultOpen,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n onConfirm,\n destructive = true,\n \"aria-label\": ariaLabel,\n style,\n}: AlertModalProps) {\n return (\n // Conditional spread omits undefined props under exactOptionalPropertyTypes\n // (same idiom as Select's optional passthrough).\n <AlertDialog.Root\n {...(open !== undefined ? { open } : {})}\n {...(defaultOpen !== undefined ? { defaultOpen } : {})}\n {...(onOpenChange !== undefined ? { onOpenChange } : {})}\n >\n {trigger !== undefined ? <AlertDialog.Trigger asChild>{trigger}</AlertDialog.Trigger> : null}\n <AlertDialog.Portal>\n <AlertDialog.Overlay className=\"scrim\" />\n <AlertDialog.Content\n className=\"modal\"\n style={{ ...CONTENT_STYLE, maxWidth: \"min(92vw, 360px)\", ...style }}\n aria-label={ariaLabel}\n >\n <div className=\"modal__head\" style={ALERT_HEAD_STYLE}>\n <div style={ALERT_HEAD_ROW_STYLE}>\n {destructive ? (\n <span style={WARN_BADGE_STYLE} aria-hidden=\"true\">\n <TriangleAlert size={17} strokeWidth={1.6} />\n </span>\n ) : null}\n <div>\n <AlertDialog.Title className=\"modal__title\">{title}</AlertDialog.Title>\n {description !== undefined ? (\n <AlertDialog.Description className=\"modal__sub\">\n {description}\n </AlertDialog.Description>\n ) : null}\n </div>\n </div>\n </div>\n {children !== undefined ? <div className=\"modal__body\">{children}</div> : null}\n <div className=\"modal__foot\">\n <AlertDialog.Cancel asChild>\n <button type=\"button\" className=\"btn btn--ghost\">\n {cancelLabel}\n </button>\n </AlertDialog.Cancel>\n <AlertDialog.Action asChild>\n <button\n type=\"button\"\n className={destructive ? \"btn btn--destructive\" : \"btn btn--primary\"}\n onClick={onConfirm}\n >\n {confirmLabel}\n </button>\n </AlertDialog.Action>\n </div>\n </AlertDialog.Content>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n}\n","import { Toaster as SonnerToaster, toast as sonnerToast } from \"sonner\";\nimport type { ToasterProps } from \"sonner\";\nimport type { ReactNode } from \"react\";\n\nimport { CircleCheckBig, CircleX, Info, TriangleAlert, X } from \"../icons/generated\";\n\n/**\n * Toast — transient notifications built on Sonner, painted with the shipped\n * `@qball-inc/tokens` `.toast` classes from the `preview/toast.html` oracle.\n *\n * Sonner supplies the behavior (imperative `toast()` API, top-anchored stacking,\n * auto-dismiss timer, reduced-motion handling) while every visual comes from the\n * token CSS: each toast renders the `.toast` / `.toast--{success,warning,error,\n * info}` markup with a `.toast__icon` (inline SVG, per the oracle), `.toast__body`\n * (`.toast__title` + `.toast__msg`), and a manual `.toast__x` close button. The\n * `<Toaster>` is rendered `unstyled` so Sonner contributes NO chrome of its own —\n * there is no component CSS, no hardcoded color, no box-shadow.\n *\n * Semantics ride the left-accent stripe (the shipped `.toast--*` border-left\n * color), never a background fill alone (finance-color-plus-cue, FR4): the icon\n * is the redundant non-color cue.\n *\n * Consumer setup: render `<Toaster />` once at the app root, then call\n * `toast.info(\"…\")` / `.success` / `.warning` / `.error` from anywhere. Sonner is\n * bundled into this package, so its toast store is internal — always use this\n * re-exported `toast` + `Toaster` pair (a separately-installed `sonner` in the\n * consumer app would have its own store and would not register here).\n */\n\nconst DEFAULT_DURATION_MS = 4000;\n\ntype ToastVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nexport interface ToastOptions {\n /** Secondary body line under the title (`.toast__msg`). */\n description?: ReactNode;\n /** Auto-dismiss duration in ms. Default 4000. Pass `Infinity` to require manual dismiss. */\n duration?: number;\n /** Accessible label for the close button. Default `\"Dismiss\"`. */\n dismissLabel?: string;\n}\n\n// Variant → B2 generated glyph (17px, stroke 1.6): success → circle-check-big,\n// warning → triangle-alert, error → circle-x, info → info-circle. The icon is the\n// FR4 non-color cue; the `.toast__icon` wrapper owns the semantic accent color.\nfunction VariantIcon({ variant }: { variant: ToastVariant }) {\n switch (variant) {\n case \"success\":\n return <CircleCheckBig size={17} strokeWidth={1.6} />;\n case \"warning\":\n return <TriangleAlert size={17} strokeWidth={1.6} />;\n case \"error\":\n return <CircleX size={17} strokeWidth={1.6} />;\n case \"info\":\n default:\n return <Info size={17} strokeWidth={1.6} />;\n }\n}\n\nfunction ToastCard({\n variant,\n title,\n description,\n onDismiss,\n dismissLabel = \"Dismiss\",\n}: {\n variant: ToastVariant;\n title: ReactNode;\n description?: ReactNode;\n onDismiss: () => void;\n dismissLabel?: string;\n}) {\n // error is assertive; the rest are polite status updates.\n const role = variant === \"error\" ? \"alert\" : \"status\";\n return (\n <div className={`toast toast--${variant}`} role={role}>\n <span className=\"toast__icon\">\n <VariantIcon variant={variant} />\n </span>\n <div className=\"toast__body\">\n <p className=\"toast__title\">{title}</p>\n {description !== undefined ? <p className=\"toast__msg\">{description}</p> : null}\n </div>\n <button type=\"button\" className=\"toast__x\" aria-label={dismissLabel} onClick={onDismiss}>\n <X size={14} strokeWidth={1.6} />\n </button>\n </div>\n );\n}\n\nfunction show(variant: ToastVariant, title: ReactNode, options?: ToastOptions): string | number {\n return sonnerToast.custom(\n (id) => (\n <ToastCard\n variant={variant}\n title={title}\n {...(options?.description !== undefined ? { description: options.description } : {})}\n {...(options?.dismissLabel !== undefined ? { dismissLabel: options.dismissLabel } : {})}\n onDismiss={() => {\n sonnerToast.dismiss(id);\n }}\n />\n ),\n { duration: options?.duration ?? DEFAULT_DURATION_MS },\n );\n}\n\n/**\n * Imperative toast API. Each variant maps to a shipped `.toast--*` accent stripe\n * + matching icon. Returns the toast id (pass to `toast.dismiss(id)`).\n */\nexport const toast = {\n info: (title: ReactNode, options?: ToastOptions) => show(\"info\", title, options),\n success: (title: ReactNode, options?: ToastOptions) => show(\"success\", title, options),\n warning: (title: ReactNode, options?: ToastOptions) => show(\"warning\", title, options),\n error: (title: ReactNode, options?: ToastOptions) => show(\"error\", title, options),\n /** Dismiss a specific toast by id, or all toasts when called with no id. */\n dismiss: (id?: string | number) => sonnerToast.dismiss(id),\n};\n\n/**\n * Toast provider. Render once at the app root. Defaults to `top-center` (FR /\n * AC-7) and `unstyled` toasts so the shipped `.toast` classes own all visuals;\n * any `ToasterProps` may be overridden (e.g. `visibleToasts`, `expand`). Keep\n * `unstyled` on — overriding it to `false` re-enables Sonner's default card\n * chrome and breaks the token styling.\n */\nexport function Toaster({ position = \"top-center\", toastOptions, ...rest }: ToasterProps) {\n return (\n <SonnerToaster\n position={position}\n toastOptions={{ unstyled: true, ...toastOptions }}\n {...rest}\n />\n );\n}\n\nexport type { ToasterProps };\n","import type { ReactNode } from \"react\";\n\nimport { CircleX, Info, TriangleAlert, X } from \"../icons/generated\";\n\n/**\n * Callout — inline banner / message surface, painted with the shipped\n * `@qball-inc/tokens` `.callout` classes from the `preview/banner.html` oracle.\n *\n * This is a purely presentational component (no behavioral library): a tinted\n * semantic surface with an accent edge, a leading icon (the redundant non-color\n * cue — finance-color-plus-cue, FR4), an optional title, and a `children` body\n * slot. Every visual comes from the token CSS — `.callout` / `.callout--{warn,\n * error,neutral}` / `.callout__{icon,body,title,msg,x}`; there is no component\n * CSS, no hardcoded color, no box-shadow.\n *\n * Callout is the DESIGNATED HOST for app-level disclaimers (the persistent v1\n * \"not financial advice\" notice, rate-limit / degraded-data warnings). The\n * `children` slot accepts rich inline content (text, links, inline elements) so\n * a disclaimer can carry a \"read more\" link. The `neutral` variant is the home\n * for non-urgent informational disclaimers.\n *\n * Variant → shipped class (note the abbreviated `warn`): `info` is the base\n * `.callout` (no modifier), `warning` → `.callout--warn`, `error` →\n * `.callout--error`, `neutral` → `.callout--neutral`.\n */\nexport type CalloutVariant = \"info\" | \"warning\" | \"error\" | \"neutral\";\n\nexport interface CalloutProps {\n /** Semantic treatment. Default `info` (the base `.callout`). */\n variant?: CalloutVariant;\n /** Optional bold lead line (`.callout__title`). */\n title?: ReactNode;\n /** Body content (`.callout__msg`) — rich inline content allowed (links, etc.). */\n children?: ReactNode;\n /** Render a dismiss (`.callout__x`) button. Default `false` (disclaimers are persistent). */\n dismissible?: boolean;\n /** Fired when the dismiss button is clicked. */\n onDismiss?: () => void;\n /** Accessible label for the dismiss button. Default `\"Dismiss\"`. */\n dismissLabel?: string;\n /** Render the leading semantic icon. Default `true`. */\n icon?: boolean;\n /** className merged onto the `.callout` root. */\n className?: string;\n}\n\n// info is the base `.callout` (no modifier — hence omitted here, so its lookup\n// is `undefined` and drops out of the className join); the rest are abbreviated\n// to match the shipped class names.\nconst VARIANT_CLASS: Partial<Record<CalloutVariant, string>> = {\n warning: \"callout--warn\",\n error: \"callout--error\",\n neutral: \"callout--neutral\",\n};\n\n// error is assertive; warning/info are polite status; neutral is a passive note.\nconst VARIANT_ROLE: Record<CalloutVariant, \"status\" | \"alert\" | \"note\"> = {\n info: \"status\",\n warning: \"status\",\n error: \"alert\",\n neutral: \"note\",\n};\n\n// Variant → B2 generated glyph (17px, stroke 1.6): warning → triangle-alert,\n// error → circle-x, info + neutral share the info-circle. The leading icon is the\n// FR4 non-color cue; the wrapper (`.callout__icon`) owns the semantic color.\nfunction CalloutIcon({ variant }: { variant: CalloutVariant }) {\n if (variant === \"warning\") return <TriangleAlert size={17} strokeWidth={1.6} />;\n if (variant === \"error\") return <CircleX size={17} strokeWidth={1.6} />;\n return <Info size={17} strokeWidth={1.6} />;\n}\n\nexport function Callout({\n variant = \"info\",\n title,\n children,\n dismissible = false,\n onDismiss,\n dismissLabel = \"Dismiss\",\n icon = true,\n className,\n}: CalloutProps) {\n const cls = [\"callout\", VARIANT_CLASS[variant], className].filter(Boolean).join(\" \");\n return (\n <div className={cls} role={VARIANT_ROLE[variant]}>\n {icon ? (\n <span className=\"callout__icon\">\n <CalloutIcon variant={variant} />\n </span>\n ) : null}\n <div className=\"callout__body\">\n {title !== undefined ? <p className=\"callout__title\">{title}</p> : null}\n {children !== undefined ? <p className=\"callout__msg\">{children}</p> : null}\n </div>\n {dismissible ? (\n <button type=\"button\" className=\"callout__x\" aria-label={dismissLabel} onClick={onDismiss}>\n <X size={14} strokeWidth={1.6} />\n </button>\n ) : null}\n </div>\n );\n}\n","import type { CSSProperties, HTMLAttributes } from \"react\";\n\n/**\n * Skeleton — content placeholder, painted with the shipped `@qball-inc/tokens`\n * `.skel` classes from the `preview/loading.html` oracle.\n *\n * A purely presentational shimmer placeholder for content that is still loading.\n * Every visual comes from the token CSS — `.skel` + `.skel--{text,line,title,\n * block,circle}`; there is no component CSS, no hardcoded color, no box-shadow.\n *\n * Reduced-motion is handled by the token CSS, not here: the shipped\n * `@media (prefers-reduced-motion: reduce)` rule stops `.skel` shimmer entirely\n * (falls back to a static `--bg-surface` tint), satisfying FR4/NFR5. The\n * component only applies the class; the conformance is inherited.\n *\n * Skeletons are decorative, so the element is `aria-hidden` — announce the\n * loading state on the surrounding region (e.g. `aria-busy` on the list) rather\n * than on each placeholder. Prefer a skeleton over a {@link Spinner} for content\n * that has a known shape (mirror the real layout so it doesn't jump on load).\n */\nexport type SkeletonShape = \"text\" | \"line\" | \"title\" | \"block\" | \"circle\";\n\nexport interface SkeletonProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n /**\n * Placeholder shape (the shipped `.skel--*` set). Default `line`. The AC's\n * \"rect\" is `block` (full-height fill); `circle` is for avatars/icons.\n */\n shape?: SkeletonShape;\n /** Convenience width (e.g. `\"46%\"`, `120`). Merged onto `style`; overrides `style.width`. */\n width?: string | number;\n /** Convenience height (e.g. `32`). Merged onto `style`; overrides `style.height`. */\n height?: string | number;\n}\n\nconst SHAPE_CLASS: Record<SkeletonShape, string> = {\n text: \"skel--text\",\n line: \"skel--line\",\n title: \"skel--title\",\n block: \"skel--block\",\n circle: \"skel--circle\",\n};\n\nexport function Skeleton({\n shape = \"line\",\n width,\n height,\n className,\n style,\n ...rest\n}: SkeletonProps) {\n const cls = [\"skel\", SHAPE_CLASS[shape], className].filter(Boolean).join(\" \");\n const mergedStyle: CSSProperties = {\n ...style,\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n };\n return <span aria-hidden {...rest} className={cls} style={mergedStyle} />;\n}\n","import type { HTMLAttributes } from \"react\";\n\n/**\n * Spinner — the ONE sanctioned loading spinner for the library, painted with the\n * shipped `@qball-inc/tokens` `.spinner` classes from the `preview/loading.html`\n * oracle.\n *\n * There is exactly one spinner concept in `@qball-inc/react`. This component is\n * it; no other component file may introduce an alternative rotating-SVG / loading\n * pattern. The {@link Button} `loading` prop paints the SAME sanctioned loop via\n * the shipped `.btn--loading` class (it does not compose this component), so a\n * loading button needs no `<Spinner>`. For an inline wait next to text, or a\n * spinner alongside button-like content, use `size=\"sm\"` (the `.load-inline`\n * pattern in the oracle). Every visual comes from the token CSS — `.spinner` +\n * `.spinner--{sm,lg}`; there is no component CSS, no hardcoded color.\n *\n * Reduced-motion is handled by the token CSS, not here: the shipped\n * `@media (prefers-reduced-motion: reduce)` rule stops `.spinner` rotation\n * entirely (static ring, no spin), satisfying FR4/NFR5.\n *\n * Use a spinner only for true indeterminate waits (a submit in flight, an SSE\n * reconnect). For content with a known shape, prefer a {@link Skeleton}.\n */\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SpinnerProps extends Omit<HTMLAttributes<HTMLSpanElement>, \"children\"> {\n /**\n * Size. Default `md` — the base `.spinner` (18px). `sm` (13px, `.spinner--sm`)\n * is the inline / inside-a-button size; `lg` (28px, `.spinner--lg`) is for\n * full-panel waits. (There is no `--md` modifier — `md` is the base class.)\n */\n size?: SpinnerSize;\n /** Accessible label announced to assistive tech. Default `\"Loading\"`. */\n label?: string;\n}\n\n// md is the base `.spinner` (no modifier — omitted so its lookup is `undefined`\n// and drops out of the className join).\nconst SIZE_CLASS: Partial<Record<SpinnerSize, string>> = {\n sm: \"spinner--sm\",\n lg: \"spinner--lg\",\n};\n\nexport function Spinner({ size = \"md\", label = \"Loading\", className, ...rest }: SpinnerProps) {\n const cls = [\"spinner\", SIZE_CLASS[size], className].filter(Boolean).join(\" \");\n return <span role=\"status\" aria-label={label} {...rest} className={cls} />;\n}\n","import type { ReactNode } from \"react\";\nimport { Button } from \"../primitives/Button\";\n\n/**\n * StateFig — empty- and error-state figures, painted with the shipped\n * `@qball-inc/tokens` `.state-fig` classes from the `preview/states.html` oracle.\n *\n * A centered figure: an icon chip, a headline, an optional supporting line, and\n * an actions row. Every visual comes from the token CSS — `.state-fig` +\n * `.state-fig__{icon,title,msg,actions}` + the `--error` modifier; there is no\n * component CSS, no hardcoded color, no box-shadow.\n *\n * Two named exports share the anatomy:\n * - {@link EmptyStateFig} — the base `.state-fig` (neutral). For \"nothing here\n * yet\" / \"no results\". The consumer supplies the CTA via `action`.\n * - {@link ErrorStateFig} — `.state-fig--error` (red icon chip). For a genuine\n * failure. A `retry` callback is MANDATORY and renders the primary Retry CTA;\n * an optional `onDismiss` renders a secondary Dismiss CTA.\n *\n * The icon is a consumer-provided React node (e.g. a `lucide-react` icon) so the\n * figure stays token-only and icon-swappable. There is no default icon. The\n * title renders as a `<p class=\"state-fig__title\">` (consistent with the sibling\n * `Callout`) rather than a fixed heading level, so it never disturbs the\n * consumer's document outline.\n */\n\ninterface StateFigBaseProps {\n /** Icon node rendered in the `.state-fig__icon` chip (e.g. a lucide-react icon). Optional. */\n icon?: ReactNode;\n /** Headline (`.state-fig__title`). */\n title: ReactNode;\n /** Optional supporting line (`.state-fig__msg`). */\n body?: ReactNode;\n /** className merged onto the `.state-fig` root. */\n className?: string;\n}\n\nexport interface EmptyStateFigProps extends StateFigBaseProps {\n /** CTA slot rendered in `.state-fig__actions` (e.g. a `<Button>` or a link). Optional. */\n action?: ReactNode;\n}\n\nexport interface ErrorStateFigProps extends StateFigBaseProps {\n /** REQUIRED. Fired when the Retry CTA is activated. */\n retry: () => void;\n /** Label for the Retry CTA. Default `\"Retry\"`. */\n retryLabel?: string;\n /** Optional. When provided, renders a secondary Dismiss CTA. */\n onDismiss?: () => void;\n /** Label for the Dismiss CTA. Default `\"Dismiss\"`. */\n dismissLabel?: string;\n}\n\nfunction StateFigBody({ icon, title, body }: Pick<StateFigBaseProps, \"icon\" | \"title\" | \"body\">) {\n return (\n <>\n {/* `!== undefined` (not a falsy `icon ?` guard like Callout uses for its\n boolean `icon` prop): here `icon` is a ReactNode slot, so absence is the\n only skip condition — a provided node always renders. */}\n {icon !== undefined ? <span className=\"state-fig__icon\">{icon}</span> : null}\n <p className=\"state-fig__title\">{title}</p>\n {body !== undefined ? <p className=\"state-fig__msg\">{body}</p> : null}\n </>\n );\n}\n\nexport function EmptyStateFig({ icon, title, body, action, className }: EmptyStateFigProps) {\n const cls = [\"state-fig\", className].filter(Boolean).join(\" \");\n return (\n <div className={cls}>\n <StateFigBody icon={icon} title={title} body={body} />\n {action !== undefined ? <div className=\"state-fig__actions\">{action}</div> : null}\n </div>\n );\n}\n\nexport function ErrorStateFig({\n icon,\n title,\n body,\n retry,\n retryLabel = \"Retry\",\n onDismiss,\n dismissLabel = \"Dismiss\",\n className,\n}: ErrorStateFigProps) {\n const cls = [\"state-fig\", \"state-fig--error\", className].filter(Boolean).join(\" \");\n return (\n <div className={cls}>\n <StateFigBody icon={icon} title={title} body={body} />\n <div className=\"state-fig__actions\">\n <Button variant=\"secondary\" onClick={retry}>\n {retryLabel}\n </Button>\n {onDismiss !== undefined ? (\n <Button variant=\"ghost\" onClick={onDismiss}>\n {dismissLabel}\n </Button>\n ) : null}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Stat — a single metric tile, painted with the shipped `@qball-inc/tokens`\n * `.stat` classes from the `preview/stats-meters.html` oracle.\n *\n * A label, the main figure (Berkeley Mono tabular display font via `.stat__value`),\n * an optional unit, an optional delta with a finance-direction treatment, and\n * optional foot/sparkline slots. Every visual comes from the token CSS — `.stat`\n * + `.stat__{label,row,value,unit,delta,foot,spark}` + the `--up/--down/--flat`\n * delta modifiers; there is no component CSS, no hardcoded color, no box-shadow.\n *\n * Two binding rules from DESIGN.md (FR4):\n * - **Missing value renders '—'.** When `value` is `null` or `undefined` the figure\n * renders '—' (U+2014 EM DASH) — NEVER '0', an empty string, or any other\n * placeholder. A stat with no data must read as \"no data\", not \"zero\".\n * - **Finance color is always paired with a non-color cue.** The delta direction\n * drives both the `.stat__delta--{up,down,flat}` color AND a leading ▲/▼/—\n * glyph, so color is never the sole signal (RB-8). Matches the oracle's\n * '▲ +8.4%' / '▼ −4.7%' / '— flat'.\n */\n\nexport type StatDirection = \"up\" | \"down\" | \"flat\";\n\nexport interface StatProps {\n /** Eyebrow label (`.stat__label`). Optional. */\n label?: ReactNode;\n /**\n * The main figure (`.stat__value`). `null`/`undefined` renders '—' (EM DASH),\n * never '0'. Numbers render as-is; pre-format (thousands separators, etc.) upstream.\n */\n value: number | string | null | undefined;\n /** Optional unit suffix (`.stat__unit`, e.g. '%'). */\n unit?: ReactNode;\n /**\n * Delta direction. Drives the `.stat__delta--*` finance color AND the ▲/▼/—\n * non-color cue (FR4). Omit for a stat with no change indicator.\n */\n direction?: StatDirection;\n /** Delta text shown after the directional cue (e.g. '+8.4%'). Rendered only when `direction` is set. */\n delta?: ReactNode;\n /** Footnote (`.stat__foot`). Optional. */\n foot?: ReactNode;\n /** Inline sparkline slot (`.stat__spark`). Optional (e.g. a future <Sparkline>). */\n spark?: ReactNode;\n /** className merged onto the `.stat` root. */\n className?: string;\n}\n\n// ▲/▼/— is the non-color directional cue paired with --data-up/down/flat (FR4 /\n// RB-8): finance color is never the sole signal. Geometric glyphs (not emoji),\n// matching the stats-meters.html oracle.\nconst DELTA_CUE: Record<StatDirection, string> = { up: \"▲\", down: \"▼\", flat: \"—\" };\n\n// U+2014 EM DASH — the missing-value render. NEVER '0' or ''.\nconst EM_DASH = \"—\";\n\nexport function Stat({ label, value, unit, direction, delta, foot, spark, className }: StatProps) {\n const cls = [\"stat\", className].filter(Boolean).join(\" \");\n return (\n <div className={cls}>\n {label !== undefined ? <span className=\"stat__label\">{label}</span> : null}\n <div className=\"stat__row\">\n <span className=\"stat__value\">{value == null ? EM_DASH : value}</span>\n {unit !== undefined ? <span className=\"stat__unit\">{unit}</span> : null}\n {direction !== undefined ? (\n <span className={`stat__delta stat__delta--${direction}`}>\n <span>{DELTA_CUE[direction]}</span>\n {delta !== undefined ? <span>{delta}</span> : null}\n </span>\n ) : null}\n </div>\n {spark !== undefined ? <span className=\"stat__spark\">{spark}</span> : null}\n {foot !== undefined ? <span className=\"stat__foot\">{foot}</span> : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Meter — a horizontal usage / progress bar, painted with the shipped\n * `@qball-inc/tokens` `.meter` classes from the `preview/stats-meters.html` oracle.\n *\n * A head row (label + readout) over a track/fill bar. Every visual comes from the\n * token CSS — `.meter` + `.meter__{head,label,val,track,fill}` + the `--warn`\n * (gold) / `--over` (red) threshold modifiers; there is no component CSS, no\n * hardcoded color, no box-shadow. The `.meter__track` 999px pill is the sanctioned\n * track carve-out — it lives in `components.css`, not here, so the component never\n * trips the ≤12px radius deny-rule (FR4).\n *\n * `value`/`max` drive the fill width (clamped 0–100%); `variant` selects the\n * threshold treatment. The track carries `role=\"meter\"` + `aria-valuenow/min/max`.\n */\n\nexport type MeterVariant = \"normal\" | \"warn\" | \"over\";\n\nexport interface MeterProps {\n /** Current value (numerator). */\n value: number;\n /** Maximum (denominator). Default `100`. */\n max?: number;\n /** Eyebrow label (`.meter__label`). Optional. */\n label?: ReactNode;\n /** Readout text (`.meter__val`). Default `\"{value} / {max}\"`. */\n readout?: ReactNode;\n /** Threshold treatment: `warn` (gold fill) / `over` (red fill). Default `normal` (base `.meter`). */\n variant?: MeterVariant;\n /** Accessible name for the meter when `label` is not a plain string. */\n ariaLabel?: string;\n /** className merged onto the `.meter` root. */\n className?: string;\n}\n\n// variant -> shipped class. normal is the base `.meter` (no modifier).\nconst VARIANT_CLASS: Partial<Record<MeterVariant, string>> = {\n warn: \"meter--warn\",\n over: \"meter--over\",\n};\n\nexport function Meter({\n value,\n max = 100,\n label,\n readout,\n variant = \"normal\",\n ariaLabel,\n className,\n}: MeterProps) {\n const cls = [\"meter\", VARIANT_CLASS[variant], className].filter(Boolean).join(\" \");\n // Clamp the fill to 0–100% of max; round to hundredths so floating-point\n // products (e.g. 0.42 * 100) don't leak into the inline width string.\n const raw = max > 0 ? (value / max) * 100 : 0;\n const pct = Math.round(Math.max(0, Math.min(100, raw)) * 100) / 100;\n const name = ariaLabel ?? (typeof label === \"string\" ? label : undefined);\n return (\n <div className={cls}>\n <div className=\"meter__head\">\n {label !== undefined ? <span className=\"meter__label\">{label}</span> : null}\n <span className=\"meter__val\">{readout !== undefined ? readout : `${value} / ${max}`}</span>\n </div>\n <div\n className=\"meter__track\"\n role=\"meter\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={name}\n >\n <div className=\"meter__fill\" style={{ width: `${pct}%` }} />\n </div>\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Badge — a small status / finance pill, painted with the shipped\n * `@qball-inc/tokens` `.badge` classes (`components.css`) as shown in the\n * `preview/colors-data.html` oracle (and in context in `preview/data-table.html`\n * / the app-chrome previews).\n *\n * NOTE — this is the `.badge` finance/status pill, NOT the editorial `.tag`\n * (`preview/tags.html`, `colors_and_type.css`): those are two distinct shipped\n * components (SD1 finding D-09). Badge targets `.badge`, never `.tag`.\n *\n * Every visual comes from the token CSS — `.badge` + the `--*` variant modifiers\n * + the optional `.badge__dot`; there is no component CSS, no hardcoded color, no\n * box-shadow.\n *\n * Variants split into two families:\n * - **Semantic**: `neutral` (base `.badge`), `info`, `success`, `warning`, `error`.\n * - **Finance**: `up`, `down`, `flat`.\n *\n * Variant → shipped class (note the abbreviated `warn`, mirroring `Callout`):\n * `neutral` is the base `.badge` (no modifier); `warning` → `.badge--warn`;\n * `info`/`up`/`down` map to their existing classes; `success` → `.badge--success`,\n * `error` → `.badge--error`, and `flat` → `.badge--flat` are shipped additions\n * to `components.css` (success = gain green, error = loss red, flat = neutral stone).\n *\n * **Finance variants pair color with a non-color cue (FR4 / RB-8).** `up`/`down`/\n * `flat` render a leading ▲/▼/— glyph so the finance color is never the sole\n * signal. Semantic variants carry their meaning in the label text.\n */\n\nexport type BadgeVariant =\n | \"neutral\"\n | \"info\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"up\"\n | \"down\"\n | \"flat\";\n\nexport interface BadgeProps {\n /** Semantic or finance treatment. Default `neutral` (base `.badge`). */\n variant?: BadgeVariant;\n /** Badge content. */\n children?: ReactNode;\n /** Render a leading status dot (`.badge__dot`). Default `false`. */\n dot?: boolean;\n /** className merged onto the `.badge` root. */\n className?: string;\n}\n\n// variant -> shipped class. neutral is the base `.badge` (no modifier).\nconst VARIANT_CLASS: Partial<Record<BadgeVariant, string>> = {\n info: \"badge--info\",\n success: \"badge--success\",\n warning: \"badge--warn\",\n error: \"badge--error\",\n up: \"badge--up\",\n down: \"badge--down\",\n flat: \"badge--flat\",\n};\n\n// Finance variants pair color with a directional non-color cue (FR4 / RB-8).\nconst FINANCE_CUE: Partial<Record<BadgeVariant, string>> = {\n up: \"▲\",\n down: \"▼\",\n flat: \"—\",\n};\n\nexport function Badge({ variant = \"neutral\", children, dot = false, className }: BadgeProps) {\n const cls = [\"badge\", VARIANT_CLASS[variant], className].filter(Boolean).join(\" \");\n const cue = FINANCE_CUE[variant];\n return (\n <span className={cls}>\n {dot ? <span className=\"badge__dot\" /> : null}\n {cue !== undefined ? <span>{cue}</span> : null}\n {children}\n </span>\n );\n}\n","import type { HTMLAttributes, ReactNode } from \"react\";\n\n/**\n * Card — a surface container, painted with the shipped `@qball-inc/tokens`\n * `.card` class (`colors_and_type.css`) from the `preview/card-featured.html`\n * and `preview/borders.html` oracles.\n *\n * The base `.card` is a static content surface: `var(--bg-surface)` background, a\n * 0.5px `var(--border-default)` hairline border (intentional sub-pixel — renders\n * as a hairline on retina; do NOT round up to 1px), `var(--radius-md)` (8px ≤12px)\n * radius, and `var(--space-md)` padding. There is **no box-shadow** anywhere — the\n * lift comes from the border weight + tonal surface step (DESIGN.md No-Shadows).\n *\n * Two optional states (the `.card--interactive` / `.card--selected`\n * additions to `colors_and_type.css`):\n * - `interactive` — a selectable card; the border lifts to sage\n * (`var(--color-signal)`) on hover, with a pointer cursor.\n * - `selected` — applies the selected-surface treatment (sage border + faint sage\n * tint).\n *\n * All other `<div>` attributes (e.g. `onClick`, `role`, `tabIndex`, `aria-*`) pass\n * through, so a consumer can make an interactive card fully keyboard-accessible.\n */\n\nexport interface CardProps extends HTMLAttributes<HTMLDivElement> {\n /** Card content. */\n children?: ReactNode;\n /** Selectable card: sage border on hover + pointer cursor. Default `false` (static content card). */\n interactive?: boolean;\n /** Apply the selected-surface treatment (`.card--selected`). Default `false`. */\n selected?: boolean;\n}\n\nexport function Card({\n children,\n interactive = false,\n selected = false,\n className,\n ...rest\n}: CardProps) {\n const cls = [\n \"card\",\n interactive ? \"card--interactive\" : null,\n selected ? \"card--selected\" : null,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div className={cls} {...rest}>\n {children}\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\n\n/**\n * Divider — a horizontal separator, painted with the shipped `@qball-inc/tokens`\n * `hr, .rule` style (`colors_and_type.css`) from the `preview/borders.html` oracle.\n *\n * Renders a native `<hr>` (implicit `role=\"separator\"`, horizontal orientation)\n * carrying the `.rule` class: a 1px `var(--border-top)` hairline via\n * `var(--border-default)`, no box-shadow, no hardcoded hex (FR4). The `<hr>`\n * element is the correct semantics for a thematic break and is announced as a\n * separator by assistive tech.\n *\n * Horizontal only in v1 (the borders.html oracle ships horizontal dividers); a\n * vertical variant is deferred (no shipped vertical-rule substrate).\n */\n\nexport interface DividerProps extends HTMLAttributes<HTMLHRElement> {\n /** className merged onto the `.rule` separator. */\n className?: string;\n}\n\nexport function Divider({ className, ...rest }: DividerProps) {\n const cls = [\"rule\", className].filter(Boolean).join(\" \");\n return <hr className={cls} {...rest} />;\n}\n","import * as TabsPrimitive from \"@radix-ui/react-tabs\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\n\n/**\n * Tabs — accessible tabbed section switcher built on Radix `Tabs`, painted with\n * the shipped `@qball-inc/tokens` classes (`.tabs`, `.tab-list`, `.tab`,\n * `.tab-panel`) from the `preview/tabs.html` oracle.\n *\n * Radix supplies the behavior — roving-tabindex keyboard nav (Arrow / Home / End),\n * the `role=\"tablist\" / \"tab\" / \"tabpanel\"` wiring, and `aria-selected` on the\n * active trigger — while the visual surface is the token CSS. This is the same\n * \"Radix for behavior, shipped classes for style\" pattern as `Modal` / `Select`.\n * There is NO component CSS and NO hardcoded color.\n *\n * The active tab's sage label + underline is driven by the shipped\n * `.tab[aria-selected=\"true\"]` rule, so selection MUST be expressed via\n * `aria-selected` — which Radix's `Trigger` does. Keyboard focus uses the\n * library's shared sage `:focus-visible` ring (also shipped in `components.css`).\n *\n * Distinct from `Segmented` (a compact boxed inline toggle): Tabs are an\n * underline list for switching larger content regions.\n *\n * Composition (matches the oracle):\n * <Tabs defaultValue=\"overview\">\n * <TabsList aria-label=\"Position detail\">\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"holdings\">Holdings</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"holdings\">…</TabsContent>\n * </Tabs>\n */\n\nexport type TabsProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Root>;\nexport type TabsListProps = ComponentPropsWithoutRef<typeof TabsPrimitive.List>;\nexport type TabsTriggerProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>;\nexport type TabsContentProps = ComponentPropsWithoutRef<typeof TabsPrimitive.Content>;\n\n/** Tabs root — owns the active-tab state (`value` / `defaultValue` / `onValueChange`). */\nexport const Tabs = forwardRef<ElementRef<typeof TabsPrimitive.Root>, TabsProps>(function Tabs(\n { className, ...rest },\n ref,\n) {\n return (\n <TabsPrimitive.Root\n ref={ref}\n className={[\"tabs\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n\n/** The `role=\"tablist\"` row of triggers (`.tab-list`). */\nexport const TabsList = forwardRef<ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n function TabsList({ className, ...rest }, ref) {\n return (\n <TabsPrimitive.List\n ref={ref}\n className={[\"tab-list\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\n/**\n * A single tab trigger (`.tab`). The active trigger shows the sage label +\n * underline via `.tab[aria-selected=\"true\"]`; `disabled` dims it.\n */\nexport const TabsTrigger = forwardRef<ElementRef<typeof TabsPrimitive.Trigger>, TabsTriggerProps>(\n function TabsTrigger({ className, ...rest }, ref) {\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n className={[\"tab\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\n/** The panel shown for the active tab (`.tab-panel`). */\nexport const TabsContent = forwardRef<ElementRef<typeof TabsPrimitive.Content>, TabsContentProps>(\n function TabsContent({ className, ...rest }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={[\"tab-panel\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n","import type { ReactNode } from \"react\";\n\n/**\n * Sparkline — a tiny inline trend chart, drawn as a pure hand-authored SVG\n * `<polyline>` over the shipped `@qball-inc/tokens` `.sparkline` wrapper, matching\n * the `preview/stats-meters.html` oracle (and the in-context sparks in the\n * app-chrome previews).\n *\n * **No chart library (BINDING).** The geometry is computed inline (min/max\n * normalization to a viewport + linear interpolation between points). Recharts,\n * D3, Victory, Chart.js, etc. are NOT imported — and although `d3` is an optional\n * peerDependency of `@qball-inc/react` (for the Candlestick), the\n * Sparkline must NOT pull it in: it is a lightweight atom.\n *\n * **Color comes from `direction`, never from the data (BINDING, FR4 / RB-8).** The\n * stroke color is applied via the shipped `.trend-{up,down,flat}` helper class\n * (which sets `color: var(--data-{up,down,flat})`) with `stroke=\"currentColor\"`,\n * so there is no hardcoded hex and no inline color. The `direction` prop is the\n * single source of truth — the color is deliberately NOT computed from `data[0]`\n * vs `data[last]`, which could contradict an explicit prop on stale/out-of-order\n * data. `direction` IS the directional cue the finance-color-plus-cue rule\n * requires (a parent embedding the spark should still pair it with a label/arrow).\n *\n * **Degenerate data renders safely.** Empty data, a single point, or an\n * all-identical (genuinely flat) series cannot form a trend line, so the geometry\n * collapses to a horizontal line at the vertical midpoint — a valid SVG, never a\n * throw. The color still follows `direction` (pass `direction=\"flat\"` for a flat\n * series). There is no `box-shadow` anywhere (FR4).\n */\n\nexport type SparklineDirection = \"up\" | \"down\" | \"flat\";\n\nexport interface SparklineProps {\n /** The series to plot. Empty / single-point / all-identical renders a flat midline. */\n data: number[];\n /**\n * Trend direction — the SOLE source of the stroke color (`.trend-{up,down,flat}`\n * → `var(--data-{up,down,flat})`). Never computed from `data` (BINDING FR4).\n */\n direction: SparklineDirection;\n /** Accessible name for the `role=\"img\"` SVG (required — an unlabeled graphic is an a11y violation). */\n ariaLabel: string;\n /** Optional caption shown under the spark (`.sparkline__cap`, e.g. \"NVDA · 30d\"). */\n caption?: ReactNode;\n /** SVG viewport width in user units. Default 64 (a compact inline size; override for a larger context — the oracle uses 90–150). */\n width?: number;\n /** SVG viewport height in user units. Default 20 (override to ~30 for the oracle's standalone spark). */\n height?: number;\n /** className merged onto the `.sparkline` wrapper. */\n className?: string;\n}\n\n// Stroke breathing room (user units) so the 1.5-wide line never clips at the edges.\nconst PAD = 2;\n// Matches the oracle's spark stroke (preview/stats-meters.html / app-chrome).\nconst STROKE_WIDTH = 1.6;\n\n/** Round to 2dp and stringify — keeps the points attribute tidy + deterministic. */\nfunction round(n: number): string {\n return (Math.round(n * 100) / 100).toString();\n}\n\n/**\n * Build the `<polyline>` points string. Empty / single-point / zero-range data\n * collapses to a horizontal midline (no trend can be drawn). Higher values map to\n * a smaller y (SVG y grows downward), so the line reads like a chart.\n */\nfunction buildPoints(data: number[], width: number, height: number): string {\n const midY = height / 2;\n const flat = `${round(PAD)},${round(midY)} ${round(width - PAD)},${round(midY)}`;\n\n // Drop non-finite values (NaN/Infinity — e.g. gaps in a real series) before\n // normalizing; with fewer than 2 finite points no trend can be drawn.\n const finite = data.filter((n) => Number.isFinite(n));\n if (finite.length < 2) return flat;\n\n const min = Math.min(...finite);\n const max = Math.max(...finite);\n const range = max - min;\n if (range === 0) return flat;\n\n const usableW = width - PAD * 2;\n const usableH = height - PAD * 2;\n return finite\n .map((v, i) => {\n const x = PAD + (i / (finite.length - 1)) * usableW;\n const y = PAD + (1 - (v - min) / range) * usableH;\n return `${round(x)},${round(y)}`;\n })\n .join(\" \");\n}\n\nexport function Sparkline({\n data,\n direction,\n ariaLabel,\n caption,\n width = 64,\n height = 20,\n className,\n}: SparklineProps) {\n const wrapCls = [\"sparkline\", className].filter(Boolean).join(\" \");\n const points = buildPoints(data, width, height);\n return (\n <span className={wrapCls}>\n <svg\n className={`trend-${direction}`}\n role=\"img\"\n aria-label={ariaLabel}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n fill=\"none\"\n >\n <polyline\n points={points}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={STROKE_WIDTH}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {caption !== undefined ? <span className=\"sparkline__cap\">{caption}</span> : null}\n </span>\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef } from \"react\";\n\n/**\n * Tooltip — a hover/focus hint built on Radix `@radix-ui/react-tooltip`, painted\n * with the shipped `@qball-inc/tokens` inverted-bubble visual from the\n * `preview/tooltip-avatar.html` oracle. Same \"Radix for behavior, shipped classes\n * for style\" pattern as `Modal` / `Select`.\n *\n * **Portaled to `<body>` (BINDING, RB-5).** `TooltipContent` renders inside a Radix\n * `Portal`, so the bubble escapes any transformed / `backdrop-filter` ancestor —\n * notably the floating `.dock`, which uses `transform: translateX(-50%)` and would\n * otherwise clip or mis-place a parent-anchored tooltip. This is the same\n * portal-to-body guarantee applied to `GroundingFlag`.\n *\n * **Why `.tip-pop`, not `.tip__pop`.** The shipped `.tip__pop` is a parent-anchored\n * pure-CSS hover popover (`position:absolute` relative to `.tip`), which cannot be\n * positioned once the node is portaled to `<body>` — Radix's popper owns placement.\n * So the content carries the position-agnostic `.tip-pop` token class (an\n * owner-approved additive variant): the SAME inverted-bubble look (`background: var(--text-primary)`,\n * `radius-sm`, caret) MINUS the positioning. The lift is the brand no-shadow\n * treatment — there is NO `box-shadow` (FR4). The caret is Radix's `Arrow`,\n * token-filled via `.tip-pop__arrow`.\n *\n * Composition (wrap the tree once in `TooltipProvider`):\n * <TooltipProvider>\n * <Tooltip>\n * <TooltipTrigger asChild><button>…</button></TooltipTrigger>\n * <TooltipContent>Delayed ~15 min on the hobby tier.</TooltipContent>\n * </Tooltip>\n * </TooltipProvider>\n */\n\n/** Wraps the tree (typically once at app root); owns the shared `delayDuration`. Alias of Radix `Tooltip.Provider`. */\nexport const TooltipProvider = TooltipPrimitive.Provider;\n\n/** A single tooltip; owns its open state. Alias of Radix `Tooltip.Root`. */\nexport const Tooltip = TooltipPrimitive.Root;\n\n/** The element the tooltip describes; wrap a custom element with `asChild`. Alias of Radix `Tooltip.Trigger`. */\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport type TooltipContentProps = ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>;\n\n/**\n * The portaled tooltip bubble (`.tip-pop`) + caret (`.tip-pop__arrow`). Defaults\n * `sideOffset` to 8 (matching the shipped `.tip__pop` gap). Placement, flip, and\n * collision handling are Radix's; the visual is the shipped token CSS.\n */\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n TooltipContentProps\n>(function TooltipContent({ className, children, sideOffset = 8, ...rest }, ref) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={[\"tip-pop\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"tip-pop__arrow\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n});\n","import { Children, useState } from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\n/**\n * Avatar — a user/entity glyph, painted with the shipped `@qball-inc/tokens`\n * `.avatar` family from the `preview/tooltip-avatar.html` oracle. Two display\n * modes: an `<img>` (with graceful fallback to initials when it fails to load),\n * or token-tiled initials derived from `name`. Every visual comes from the token\n * CSS / token-valued custom properties — no hardcoded hex, no `box-shadow`.\n *\n * - **Size**: `sm` (`.avatar--sm`), `md` (the base `.avatar`, no modifier), `lg`\n * (`.avatar--lg`), `xl` (`.avatar--xl`). md = base mirrors the Spinner size model.\n * - **Initials color is deterministic**: the same `name` always maps to the same\n * token-backed tile (a `charCodeAt`-sum hash into a small palette of `var(--*)`\n * background/foreground pairs). No hardcoded color.\n * - **Status dot** (`online`/`offline`/`busy`/`away`): a presence indicator, NOT a\n * finance signal — so the dot shape itself is the cue and no paired arrow is\n * required (this carve-out is intentional, distinct from the finance-color-plus-\n * cue rule). `online` is the base `.avatar__status` (gain green); the other three\n * map to `--data-flat` / `--data-down` / `--data-warn`. Omitted ⇒ no dot.\n */\n\nexport type AvatarSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AvatarStatus = \"online\" | \"offline\" | \"busy\" | \"away\";\n\n// md is the base `.avatar` (no modifier), like Spinner's md=base.\nconst SIZE_CLASS: Partial<Record<AvatarSize, string>> = {\n sm: \"avatar--sm\",\n lg: \"avatar--lg\",\n xl: \"avatar--xl\",\n};\n\n// online is the base `.avatar__status`; the rest add a token-mapped variant.\nconst STATUS_CLASS: Partial<Record<AvatarStatus, string>> = {\n offline: \"avatar__status--offline\",\n busy: \"avatar__status--busy\",\n away: \"avatar__status--away\",\n};\n\n// Deterministic initials palette — token-valued background/foreground pairs only\n// (no hex; `var()` refs are DESIGN_DENY-clean, same idiom as Modal's tinted badge).\n// Loss-red is deliberately excluded (it would read as an error tile).\nconst INITIALS_PALETTE: ReadonlyArray<CSSProperties> = [\n { background: \"var(--signal-bg)\", color: \"var(--color-signal)\" },\n { background: \"var(--data-info-bg)\", color: \"var(--data-info)\" },\n { background: \"var(--data-up-bg)\", color: \"var(--data-up)\" },\n { background: \"var(--data-warn-bg)\", color: \"var(--data-warn)\" },\n { background: \"var(--bg-surface)\", color: \"var(--text-secondary)\" },\n];\n\n// Overflow (+N) tile tint — info blue, matching the oracle's group overflow tile.\nconst OVERFLOW_STYLE: CSSProperties = {\n background: \"var(--data-info-bg)\",\n color: \"var(--data-info)\",\n};\n\n// Scheme allowlist for `src` (defense-in-depth, mirroring the httpUrl\n// guard): http(s), root/relative paths, and data:image/ only. A `javascript:` or\n// `data:text/html` src is rejected and the avatar falls back to initials.\nconst SAFE_SRC_RE = /^(?:https?:\\/\\/|\\/|\\.\\.?\\/|data:image\\/)/i;\n\n/** Up to two initials: first letter of the first + last word (1 letter for a single name). */\nfunction initialsFrom(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return \"\";\n const first = parts[0] ?? \"\";\n if (parts.length === 1) return first.charAt(0).toUpperCase();\n const last = parts[parts.length - 1] ?? \"\";\n return (first.charAt(0) + last.charAt(0)).toUpperCase();\n}\n\n/** Stable name → palette index (same name ⇒ same tile, across renders and mounts). */\nfunction paletteIndex(name: string): number {\n let sum = 0;\n for (let i = 0; i < name.length; i += 1) sum += name.charCodeAt(i);\n return sum % INITIALS_PALETTE.length;\n}\n\nexport interface AvatarProps {\n /** Image source. When set (and the image loads), renders an `<img>`; otherwise falls back to initials. */\n src?: string;\n /** Alt text for the image. Falls back to `name` then empty (decorative). */\n alt?: string;\n /** Display name — drives the initials AND the deterministic tile color; also the image-fallback content. */\n name?: string;\n /** Size variant. Default `md` (the base `.avatar`). */\n size?: AvatarSize;\n /** Presence status dot. Omitted ⇒ no dot. */\n status?: AvatarStatus;\n /** Round (circular) avatar (`.avatar--round`). Default `false` (squared, `--radius-sm`). */\n round?: boolean;\n /** className merged onto the `.avatar` root. */\n className?: string;\n}\n\nexport function Avatar({\n src,\n alt,\n name,\n size = \"md\",\n status,\n round = false,\n className,\n}: AvatarProps) {\n const [imgFailed, setImgFailed] = useState(false);\n const showImage = src !== undefined && src !== \"\" && SAFE_SRC_RE.test(src) && !imgFailed;\n\n const cls = [\"avatar\", SIZE_CLASS[size], round ? \"avatar--round\" : null, className]\n .filter(Boolean)\n .join(\" \");\n\n // Tile color applies only to the initials render (the image covers the tile).\n const tileStyle =\n !showImage && name !== undefined ? INITIALS_PALETTE[paletteIndex(name)] : undefined;\n\n const statusCls =\n status !== undefined\n ? [\"avatar__status\", STATUS_CLASS[status]].filter(Boolean).join(\" \")\n : null;\n\n // a11y: an initials tile announces the full name (+ status), not the letters.\n // Image mode is labelled by the <img alt>, so the wrapper takes no role there.\n const labelProps =\n !showImage && name !== undefined\n ? { role: \"img\" as const, \"aria-label\": status !== undefined ? `${name} (${status})` : name }\n : {};\n\n return (\n <span className={cls} style={tileStyle} {...labelProps}>\n {showImage ? (\n <img src={src} alt={alt ?? name ?? \"\"} onError={() => setImgFailed(true)} />\n ) : (\n initialsFrom(name ?? \"\")\n )}\n {statusCls !== null ? <span className={statusCls} aria-hidden=\"true\" /> : null}\n </span>\n );\n}\n\nexport interface AvatarGroupProps {\n /** The `Avatar` instances to stack. */\n children: ReactNode;\n /** Cap the visible avatars; the remainder collapse into a `+N` overflow tile. */\n max?: number;\n /** Round the overflow tile to match round group members. Default `false`. */\n round?: boolean;\n /** className merged onto the `.avatar-group` root. */\n className?: string;\n}\n\n/**\n * AvatarGroup — overlapping stack of `Avatar`s (`.avatar-group`, negative-margin\n * overlap from the token CSS). With `max`, the overflow collapses into a single\n * token-tinted `+N` tile (info blue, matching the oracle).\n */\nexport function AvatarGroup({ children, max, round = false, className }: AvatarGroupProps) {\n const items = Children.toArray(children);\n const visible = max !== undefined && items.length > max ? items.slice(0, max) : items;\n const overflow = items.length - visible.length;\n\n const cls = [\"avatar-group\", className].filter(Boolean).join(\" \");\n const tileCls = [\"avatar\", round ? \"avatar--round\" : null].filter(Boolean).join(\" \");\n\n return (\n <span className={cls}>\n {visible}\n {overflow > 0 ? (\n <span className={tileCls} style={OVERFLOW_STYLE} role=\"img\" aria-label={`${overflow} more`}>\n +{overflow}\n </span>\n ) : null}\n </span>\n );\n}\n","import { type ReactNode, useMemo } from \"react\";\n\nimport {\n type ColumnDef,\n type ColumnMeta,\n type OnChangeFn,\n type Row,\n type RowData,\n type RowSelectionState,\n flexRender,\n getCoreRowModel,\n useReactTable,\n} from \"@tanstack/react-table\";\n\nimport { EmptyStateFig, ErrorStateFig } from \"../overlay/StateFig\";\nimport { Skeleton } from \"../overlay/Skeleton\";\n\n/**\n * DataTable — a compact, finance-aware data table, painted with the shipped\n * `@qball-inc/tokens` `.dt` classes from the `preview/data-table.html` oracle and\n * built on **TanStack Table** (`@tanstack/react-table`) as the headless core.\n *\n * The visual surface is entirely the token CSS — `.dt` + `.dt thead th`,\n * `.dt td.num`, `.dt .up/.down/.flat`, the `:hover` tint, the `[aria-selected]`\n * sage selection, and `.dt__remove` actions — so there is no component CSS, no\n * hardcoded color, no box-shadow. The component only wires the headless row model\n * to that surface and composes the state figures.\n *\n * Headless-only for v1: it renders the core row model (no built-in sorting or\n * filtering UI — the oracle shows none). Consumers drive sorting/selection via\n * TanStack's APIs through the pass-through props.\n *\n * Three binding rules from DESIGN.md (FR4) carried by this surface:\n * - **Finance color is always paired with a non-color cue.** A column marked\n * `meta.finance` renders the `.num .up/.down/.flat` color AND a leading `+`/`−`\n * sign (mirroring the oracle's `+1.24%` / `−2.34%`), so color is never the sole\n * signal (RB-8). The cue is the sign, not an arrow — matching `data-table.html`.\n * - **One Skeleton, one StateFig.** Loading composes {@link Skeleton}; empty/error\n * compose {@link EmptyStateFig} / {@link ErrorStateFig} — never re-implemented.\n * - **Reduced-motion is inherited**, not overridden: the only animation is the\n * Skeleton shimmer, whose `prefers-reduced-motion` rule lives in the token CSS.\n */\n\n// Augment TanStack's (otherwise-empty) ColumnMeta so `column.meta` is typed with\n// the DataTable display fields everywhere a ColumnDef is used. The TData/TValue\n// type params are required to mirror TanStack's generic signature for declaration\n// merging (TS6205 \"unused\" is a non-fatal hint under noUnusedParameters:false).\ndeclare module \"@tanstack/react-table\" {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- type params mirror TanStack's generic signature for declaration merging\n interface ColumnMeta<TData extends RowData, TValue> {\n /** Right-aligned tabular `.num` cell (display font + tabular-nums). */\n numeric?: boolean;\n /**\n * Directional finance cell: pairs the `--data-up/down/flat` color (`.up/.down/.flat`)\n * with a leading `+`/`−` sign cue (FR4). Implies {@link numeric}. The column's\n * accessor value MUST be a number; non-numbers fall back to the default cell.\n */\n finance?: boolean;\n /**\n * Formats a finance cell's number into its display string. The result must keep\n * the directional sign as the non-color cue. Default: signed 2-decimal percent\n * (`+1.24%` / `−2.34%`), matching the oracle's `sign()`.\n */\n financeFormat?: (value: number) => string;\n /**\n * Mobile card-list label. At <=640px (container width) the table\n * reflows to stacked cards and each cell surfaces its column header inline via\n * `td::before { content: attr(data-label) }`. CSS cannot read thead text, so the\n * label is sourced from a `data-label` attribute the component sets: the column's\n * `header` when it is a plain string, else this `meta.label`. A column with a\n * non-string (ReactNode) header and NO `meta.label` renders an empty mobile label.\n */\n label?: string;\n }\n}\n\n/** Public alias for a DataTable column's `meta` shape (the augmented ColumnMeta). */\nexport type DataTableColumnMeta = ColumnMeta<unknown, unknown>;\n\nexport interface DataTableProps<TData> {\n /** TanStack column definitions. Mark numeric/finance columns via `meta`. */\n columns: ColumnDef<TData, unknown>[];\n /** Row data. An empty array (with `loading=false`, no `error`) renders the empty figure. */\n data: TData[];\n /** When true, the header renders but each body cell shows a {@link Skeleton}. Wins over error/empty. */\n loading?: boolean;\n /** Number of skeleton rows rendered while `loading`. Default `4`. */\n skeletonRowCount?: number;\n /** When set (and `loading=false`), renders {@link ErrorStateFig} in the body. */\n error?: string | Error;\n /** Title for the error figure. Default `\"Couldn't load data\"`. */\n errorTitle?: ReactNode;\n /**\n * Wired to the error figure's Retry CTA. If omitted, the Retry button still\n * renders but does nothing — provide it whenever an `error` is possible.\n */\n onRetry?: () => void;\n /** Headline for the empty figure (overrides the default). */\n emptyMessage?: ReactNode;\n /**\n * Optional trailing actions cell per row (e.g. a `.dt__remove` button),\n * right-aligned. Adds a synthetic column with the reserved id `__actions` — do\n * not define a column with that id.\n */\n actions?: (row: TData) => ReactNode;\n /** Pin the hover-reveal actions visible (default: reveal on row hover). */\n actionsAlwaysVisible?: boolean;\n /** Enable TanStack row selection; selected rows get `aria-selected=\"true\"` (sage tint). */\n enableRowSelection?: boolean | ((row: Row<TData>) => boolean);\n /**\n * Controlled row-selection state. For controlled mode pass BOTH `rowSelection`\n * AND `onRowSelectionChange`; passing only one freezes selection (TanStack's\n * controlled-state contract). Omit both to let TanStack manage selection\n * internally (uncontrolled).\n */\n rowSelection?: RowSelectionState;\n /** Controlled row-selection change handler. Pair with `rowSelection`. */\n onRowSelectionChange?: OnChangeFn<RowSelectionState>;\n /** Stable row id (TanStack `getRowId`). Defaults to the row index. */\n getRowId?: (originalRow: TData, index: number) => string;\n /** className merged onto the `.dt` table root. */\n className?: string;\n}\n\nconst FINANCE_EPSILON = 0.05; // mirror the oracle's dirClass() flat band\n\ntype FinanceDirection = \"up\" | \"down\" | \"flat\";\n\nfunction financeDirection(value: number): FinanceDirection {\n if (value > FINANCE_EPSILON) return \"up\";\n if (value < -FINANCE_EPSILON) return \"down\";\n return \"flat\";\n}\n\n// Signed 2-decimal percent. The leading +/- IS the FR4 non-color cue paired with\n// the .up/.down/.flat color. Mirrors the oracle's sign(): \"+1.24%\" / \"-2.34%\".\nfunction defaultFinanceFormat(value: number): string {\n return `${value > 0 ? \"+\" : \"\"}${value.toFixed(2)}%`;\n}\n\nconst ACTIONS_COLUMN_ID = \"__actions\";\n\n// Stable no-op for the error figure's required `retry` when no `onRetry` is given.\nconst NOOP = (): void => undefined;\n\nexport function DataTable<TData>({\n columns,\n data,\n loading = false,\n skeletonRowCount = 4,\n error,\n errorTitle = \"Couldn't load data\",\n onRetry,\n emptyMessage,\n actions,\n actionsAlwaysVisible = false,\n enableRowSelection,\n rowSelection,\n onRowSelectionChange,\n getRowId,\n className,\n}: DataTableProps<TData>) {\n // Append a synthetic, right-aligned actions column so colSpan/header alignment\n // stay correct (vs. hand-appending a <td>). Only when `actions` is provided.\n const allColumns = useMemo<ColumnDef<TData, unknown>[]>(() => {\n if (!actions) return columns;\n const actionsColumn: ColumnDef<TData, unknown> = {\n id: ACTIONS_COLUMN_ID,\n header: \"\",\n cell: ({ row }) => actions(row.original),\n meta: { numeric: true },\n enableSorting: false,\n };\n return [...columns, actionsColumn];\n }, [columns, actions]);\n\n const table = useReactTable<TData>({\n data,\n columns: allColumns,\n getCoreRowModel: getCoreRowModel(),\n ...(enableRowSelection !== undefined ? { enableRowSelection } : {}),\n ...(getRowId !== undefined ? { getRowId } : {}),\n ...(rowSelection !== undefined ? { state: { rowSelection } } : {}),\n ...(onRowSelectionChange !== undefined ? { onRowSelectionChange } : {}),\n });\n\n const leafColumns = table.getAllLeafColumns();\n const colCount = leafColumns.length;\n const selectable = enableRowSelection !== undefined && enableRowSelection !== false;\n\n const tableClass = [\"dt\", actionsAlwaysVisible ? \"dt--actions-visible\" : null, className]\n .filter(Boolean)\n .join(\" \");\n\n // Per-leaf-column numeric flag (for header alignment + skeleton-cell alignment).\n const columnIsNumeric = leafColumns.map(\n (col) => col.columnDef.meta?.numeric === true || col.columnDef.meta?.finance === true,\n );\n\n function renderBody(): ReactNode {\n if (loading) {\n return Array.from({ length: skeletonRowCount }, (_, rowIndex) => (\n <tr key={`skeleton-${String(rowIndex)}`}>\n {leafColumns.map((col, colIndex) => (\n <td key={col.id} className={columnIsNumeric[colIndex] ? \"num\" : undefined}>\n <Skeleton />\n </td>\n ))}\n </tr>\n ));\n }\n\n if (error !== undefined) {\n const message = typeof error === \"string\" ? error : error.message;\n return (\n <tr>\n <td colSpan={colCount}>\n <ErrorStateFig title={errorTitle} body={message} retry={onRetry ?? NOOP} />\n </td>\n </tr>\n );\n }\n\n if (data.length === 0) {\n return (\n <tr>\n <td colSpan={colCount}>\n <EmptyStateFig title={emptyMessage ?? \"No data\"} />\n </td>\n </tr>\n );\n }\n\n return table.getRowModel().rows.map((row) => (\n <tr key={row.id} aria-selected={selectable ? row.getIsSelected() : undefined}>\n {row.getVisibleCells().map((cell) => {\n const { columnDef } = cell.column;\n const meta = columnDef.meta;\n // Mobile card-list label: the string header, else `meta.label`.\n // A falsy result (empty string / undefined) sets no `data-label`, so the\n // reflow `td[data-label]::before` skips it (actions cell, unlabeled headers).\n const headerLabel = typeof columnDef.header === \"string\" ? columnDef.header : meta?.label;\n const dataLabel = headerLabel || undefined;\n if (meta?.finance) {\n const raw = cell.getValue();\n if (typeof raw === \"number\") {\n const direction = financeDirection(raw);\n const format = meta.financeFormat ?? defaultFinanceFormat;\n return (\n <td key={cell.id} data-label={dataLabel} className={`num ${direction}`}>\n {format(raw)}\n </td>\n );\n }\n }\n // Default / fallback cell. A `finance` column lands here when its value\n // is not a number — keep the right-aligned `.num` treatment in that case.\n return (\n <td\n key={cell.id}\n data-label={dataLabel}\n className={meta?.numeric || meta?.finance ? \"num\" : undefined}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </td>\n );\n })}\n </tr>\n ));\n }\n\n // The `.dt-wrap` host carries `container-type: inline-size` so the mobile\n // card-list reflow keys off the TABLE's own width, not the viewport.\n // `className` / `dt` / `dt--actions-visible` stay on the <table> (public contract).\n return (\n <div className=\"dt-wrap\">\n <table className={tableClass} aria-busy={loading || undefined}>\n <thead>\n {table.getHeaderGroups().map((headerGroup) => (\n <tr key={headerGroup.id}>\n {headerGroup.headers.map((header, colIndex) => (\n <th key={header.id} className={columnIsNumeric[colIndex] ? \"num\" : undefined}>\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n </th>\n ))}\n </tr>\n ))}\n </thead>\n <tbody>{renderBody()}</tbody>\n </table>\n </div>\n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport * as d3 from \"d3\";\n\n/**\n * Candlestick — a finance OHLC candlestick chart drawn with **D3** as a React\n * \"island\", matching the `preview/chart-candlestick-color.html` (color) and\n * `preview/chart-candlestick-chrome.html` (compact vs. detail chrome) oracles.\n *\n * **D3 owns the SVG subtree; React never reconciles its children (BINDING, RB-4).**\n * All drawing happens inside a single `useEffect` keyed on\n * `[data, range, theme, width, height, interactive, showGrid, showAxis]`. The\n * effect's cleanup nulls every registered listener (`.on(type, null)`),\n * interrupts any running transition, and clears the SVG (`selectAll('*').remove()`)\n * so no D3 selection, event handler, or timer survives an unmount or a re-key —\n * the no-leaked-listeners obligation. The only React-owned node is the HTML OHLC\n * tooltip rendered OUTSIDE the `<svg>`.\n *\n * **No charting library but D3 (BINDING).** Recharts/Victory/Chart.js are NOT\n * imported. `d3` is an OPTIONAL peerDependency of `@qball-inc/react` (it is large,\n * ~580 KB, and consumers that already ship D3 must not double-bundle it). A\n * consumer that renders `Candlestick` must install `d3` themselves; the optional\n * meta only suppresses the install warning — it does not make the chart work\n * without D3.\n *\n * **Color comes from tokens, never hardcoded hex (BINDING, FR4 / RB-8).** Up\n * candles (close ≥ open) carry the shipped `.trend-up` class, down candles\n * `.trend-down` (both set `color: var(--data-{up,down})`); the wick + body draw\n * with `currentColor`, so the candle color is the token, theme-aware via the\n * ambient `[data-theme]` cascade — exactly the Sparkline mechanism. Axes, grid,\n * crosshair, and the SVG frame are styled inline with `var(--token)` references\n * (`--text-muted`, `--border-default`, `--bg-surface`, …), so there is no\n * hardcoded color anywhere and no component CSS is added to `@qball-inc/tokens`.\n *\n * **Color is never the sole finance signal (FR4).** The OHLC tooltip pairs the\n * up/down color with a directional `▲`/`▼` arrow and a signed change value, so the\n * direction reads without relying on color perception.\n *\n * **Controlled `range`; `theme` is a redraw signal.** `range` is a controlled prop\n * — the range toggle calls `onRangeChange(next)` and the parent re-passes `range`\n * (the component never mutates a passed `range`). The `theme` prop does not carry\n * the palette (the tokens do, via `[data-theme]`); it is a dependency of the draw\n * effect so a host theme flip re-keys the redraw (AC-6/AC-8) and no stale\n * JS-derived value survives.\n *\n * **Degenerate data renders safely.** Empty or single-point data draws an empty,\n * valid `<svg>` (axes/candles are skipped) rather than throwing.\n */\n\n/** A discrete time range the chart can be toggled between. */\nexport type CandlestickRange = \"1D\" | \"5D\" | \"1M\" | \"3M\" | \"1Y\";\n\n/** One OHLCV bar. Price fields are in the instrument's quote currency. */\nexport interface CandlestickDatum {\n /** Bar timestamp — a `Date` or any `Date`-parseable string (e.g. ISO 8601). */\n date: Date | string;\n /** Opening price. @unit quote currency (e.g. USD) */\n open: number;\n /** Session high. @unit quote currency (e.g. USD) */\n high: number;\n /** Session low. @unit quote currency (e.g. USD) */\n low: number;\n /** Closing price. @unit quote currency (e.g. USD) */\n close: number;\n /** Traded volume (optional; not plotted in v1). @unit shares */\n volume?: number;\n}\n\nexport interface CandlestickProps {\n /** The OHLC series, oldest-first. Empty / single-point renders a safe empty chart. */\n data: CandlestickDatum[];\n /** The selected range (controlled). The toggle calls `onRangeChange`; the parent re-passes this. */\n range?: CandlestickRange;\n /** Which range toggles to render. Default: all five. Pass `[]` to hide the toggle row. */\n ranges?: CandlestickRange[];\n /** Called when a range toggle is pressed, with the selected range. */\n onRangeChange?: (range: CandlestickRange) => void;\n /**\n * Redraw signal. The tokens own the palette (via `[data-theme]`); this prop is a\n * draw-effect dependency so a host theme flip re-keys the redraw. Optional.\n */\n theme?: \"light\" | \"dark\";\n /** Explicit SVG viewport width (user units). Omit to fill the container via `ResizeObserver`. */\n width?: number;\n /** SVG viewport height (user units). Default 300. */\n height?: number;\n /** Crosshair + OHLC tooltip on pointer. Default `true`. `false` = the compact, static card view. */\n interactive?: boolean;\n /** Draw the dashed horizontal grid. Default: follows `interactive`. */\n showGrid?: boolean;\n /** Draw the price + date axes. Default `true`. `false` = bare candles (inline preview). */\n showAxis?: boolean;\n /** Accessible name for the chart's `role=\"img\"` SVG. Default `\"Candlestick chart\"`. */\n ariaLabel?: string;\n /** Called after every (re)draw completes — useful for redraw assertions / screenshot timing. */\n onDraw?: () => void;\n /** className merged onto the `.candlestick` figure wrapper. */\n className?: string;\n}\n\nconst DEFAULT_WIDTH = 480;\nconst DEFAULT_HEIGHT = 300;\nconst ALL_RANGES: CandlestickRange[] = [\"1D\", \"5D\", \"1M\", \"3M\", \"1Y\"];\n/** Plot margins (user units): top, right, bottom (date axis), left (price axis). */\nconst MARGIN = { top: 14, right: 10, bottom: 22, left: 34 } as const;\n/** Minimum candle-body height so a doji (open ≈ close) is still visible. */\nconst MIN_BODY_HEIGHT = 1.2;\n\n/** Internal, fully-resolved bar (date coerced to `Date`). */\ninterface Bar {\n date: Date;\n open: number;\n high: number;\n low: number;\n close: number;\n}\n\n/** Coerce a datum's `date` to a `Date`; drop bars with an unparseable date or non-finite prices. */\nfunction normalize(data: CandlestickDatum[]): Bar[] {\n const out: Bar[] = [];\n for (const d of data) {\n const date = d.date instanceof Date ? d.date : new Date(d.date);\n if (Number.isNaN(date.getTime())) continue;\n if (![d.open, d.high, d.low, d.close].every((n) => Number.isFinite(n))) continue;\n out.push({ date, open: d.open, high: d.high, low: d.low, close: d.close });\n }\n return out;\n}\n\n/** Hovered-bar state for the React-owned tooltip + the snapped crosshair position. */\ninterface Hover {\n index: number;\n /** Candle-center x in SVG user units. */\n cx: number;\n /** Close-price y in SVG user units. */\n cy: number;\n}\n\nexport function Candlestick({\n data,\n range,\n ranges = ALL_RANGES,\n onRangeChange,\n theme,\n width: widthProp,\n height: heightProp,\n interactive = true,\n showGrid,\n showAxis = true,\n ariaLabel = \"Candlestick chart\",\n onDraw,\n className,\n}: CandlestickProps) {\n const containerRef = useRef<HTMLDivElement>(null);\n const svgRef = useRef<SVGSVGElement>(null);\n const [measuredWidth, setMeasuredWidth] = useState<number | null>(null);\n const [hover, setHover] = useState<Hover | null>(null);\n\n const bars = useMemo(() => normalize(data), [data]);\n\n // d3 formatters are created lazily in the component body, NOT at module scope, so\n // merely importing the barrel never invokes the optional `d3` peer — only rendering\n // <Candlestick> does (a consumer who imports e.g. Button without installing d3 is\n // unaffected). Stable identity via useMemo so they never re-key the draw effect.\n const fmt = useMemo(\n () => ({ date: d3.timeFormat(\"%b %d\"), price: d3.format(\".2f\"), axis: d3.format(\"~s\") }),\n [],\n );\n\n // Stable ref to `onDraw` so an inline `onDraw={() => …}` prop does not re-key the\n // draw effect (which would tear down + redraw on every parent render).\n const onDrawRef = useRef(onDraw);\n useEffect(() => {\n onDrawRef.current = onDraw;\n }, [onDraw]);\n\n const width = widthProp ?? measuredWidth ?? DEFAULT_WIDTH;\n const height = heightProp ?? DEFAULT_HEIGHT;\n const grid = showGrid ?? interactive;\n\n // Container-fill sizing (AC-1): when no explicit width is given, observe the\n // wrapper and redraw on resize. Own cleanup disconnects the observer (RB-4).\n useEffect(() => {\n if (widthProp != null) return;\n const el = containerRef.current;\n if (!el) return;\n const ro = new ResizeObserver((entries) => {\n const cr = entries[0]?.contentRect;\n if (cr && cr.width > 0) setMeasuredWidth(cr.width);\n });\n ro.observe(el);\n return () => {\n ro.disconnect();\n };\n }, [widthProp]);\n\n // The D3 island. Keyed on every input that changes the drawing so a re-key tears\n // down (cleanup) and redraws from scratch — React never touches the SVG children.\n useEffect(() => {\n const svgEl = svgRef.current;\n if (!svgEl) return;\n\n const svg = d3\n .select(svgEl)\n .attr(\"viewBox\", `0 0 ${width} ${height}`)\n .attr(\"preserveAspectRatio\", \"xMidYMid meet\");\n svg.selectAll(\"*\").remove();\n\n // The overlay rect carries the pointer listeners; held here so cleanup can null\n // them. Stays null when bars is empty or interactive=false — cleanup optional-chains.\n let overlay: d3.Selection<SVGRectElement, unknown, null, undefined> | null = null;\n\n if (bars.length > 0) {\n const plotBottom = height - MARGIN.bottom;\n const x = d3\n .scaleBand<number>()\n .domain(d3.range(bars.length))\n .range([MARGIN.left, width - MARGIN.right])\n .padding(0.3);\n const lo = d3.min(bars, (d) => d.low) ?? 0;\n const hi = d3.max(bars, (d) => d.high) ?? 1;\n // Guard a zero-width price domain (a single bar, or an all-equal series): a\n // [X, X] domain collapses every price onto one pixel. Pad it (mirrors the\n // Sparkline range===0 safety) so candles + the crosshair stay legible.\n const pad = lo === hi ? Math.abs(lo) * 0.05 || 1 : 0;\n const y = d3\n .scaleLinear()\n .domain([lo - pad, hi + pad])\n .nice()\n .range([plotBottom, MARGIN.top]);\n const bw = x.bandwidth();\n const cxOf = (i: number) => (x(i) ?? 0) + bw / 2;\n\n // Dashed horizontal grid (token border color).\n if (grid) {\n svg\n .append(\"g\")\n .selectAll(\"line\")\n .data(y.ticks(4))\n .join(\"line\")\n .attr(\"x1\", MARGIN.left)\n .attr(\"x2\", width - MARGIN.right)\n .attr(\"y1\", (d) => y(d))\n .attr(\"y2\", (d) => y(d))\n .style(\"stroke\", \"var(--border-default)\")\n .style(\"stroke-dasharray\", \"2 3\");\n }\n\n // Axes (price left, date bottom); domain line removed to match the oracle.\n if (showAxis) {\n const everyN = Math.max(1, Math.ceil(bars.length / 5));\n const ay = svg\n .append(\"g\")\n .attr(\"transform\", `translate(${MARGIN.left},0)`)\n .call(\n d3\n .axisLeft(y)\n .ticks(5)\n .tickSize(0)\n .tickFormat((v) => fmt.axis(v as number)),\n );\n ay.select(\".domain\").remove();\n const ax = svg\n .append(\"g\")\n .attr(\"transform\", `translate(0,${plotBottom})`)\n .call(\n d3\n .axisBottom(x)\n .tickValues(x.domain().filter((_, i) => i % everyN === 0))\n .tickSize(0)\n .tickFormat((i) => {\n // `i` is already `number` for a scaleBand<number> domain (no cast needed).\n const b = bars[i];\n return b ? fmt.date(b.date) : \"\";\n }),\n );\n ax.select(\".domain\").remove();\n svg\n .selectAll<SVGTextElement, unknown>(\".tick text\")\n .style(\"fill\", \"var(--text-muted)\")\n .style(\"font-family\", \"var(--font-display)\")\n .style(\"font-size\", \"9.5px\");\n svg\n .selectAll<SVGLineElement, unknown>(\".tick line\")\n .style(\"stroke\", \"var(--border-default)\");\n }\n\n // Candles. The shipped `.trend-{up,down}` class sets `color: var(--data-*)`;\n // wick + body draw with `currentColor`, so candle color IS the token (FR4).\n const candle = svg\n .append(\"g\")\n .selectAll<SVGGElement, Bar>(\"g\")\n .data(bars)\n .join(\"g\")\n .attr(\"class\", (d) => (d.close >= d.open ? \"trend-up\" : \"trend-down\"));\n candle\n .append(\"line\")\n .attr(\"x1\", (_, i) => cxOf(i))\n .attr(\"x2\", (_, i) => cxOf(i))\n .attr(\"y1\", (d) => y(d.high))\n .attr(\"y2\", (d) => y(d.low))\n .attr(\"stroke\", \"currentColor\")\n .attr(\"stroke-width\", 1);\n candle\n .append(\"rect\")\n .attr(\"x\", (_, i) => x(i) ?? 0)\n .attr(\"y\", (d) => y(Math.max(d.open, d.close)))\n .attr(\"width\", bw)\n .attr(\"height\", (d) => Math.max(MIN_BODY_HEIGHT, Math.abs(y(d.open) - y(d.close))))\n .attr(\"fill\", \"currentColor\")\n .attr(\"stroke\", \"currentColor\")\n .attr(\"stroke-width\", 1);\n\n // Crosshair + pointer overlay (interactive/detail view only).\n if (interactive) {\n const crosshair = svg.append(\"g\").attr(\"class\", \"crosshair\").style(\"opacity\", 0);\n const vline = crosshair\n .append(\"line\")\n .attr(\"y1\", MARGIN.top)\n .attr(\"y2\", plotBottom)\n .style(\"stroke\", \"var(--text-muted)\")\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3 3\");\n const hline = crosshair\n .append(\"line\")\n .attr(\"x1\", MARGIN.left)\n .attr(\"x2\", width - MARGIN.right)\n .style(\"stroke\", \"var(--text-muted)\")\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3 3\");\n const dot = crosshair\n .append(\"circle\")\n .attr(\"r\", 3.5)\n .style(\"fill\", \"none\")\n .style(\"stroke\", \"var(--text-primary)\")\n .style(\"stroke-width\", 1.5);\n\n const nearestIndex = (mx: number) => {\n const raw = Math.round((mx - MARGIN.left - bw / 2) / x.step());\n return Math.max(0, Math.min(bars.length - 1, raw));\n };\n\n overlay = svg\n .append(\"rect\")\n .attr(\"x\", MARGIN.left)\n .attr(\"y\", MARGIN.top)\n .attr(\"width\", Math.max(0, width - MARGIN.right - MARGIN.left))\n .attr(\"height\", Math.max(0, plotBottom - MARGIN.top))\n .attr(\"fill\", \"transparent\")\n .style(\"cursor\", \"crosshair\");\n overlay\n .on(\"pointermove\", (event: PointerEvent) => {\n const [mx] = d3.pointer(event, svgEl);\n const index = nearestIndex(mx);\n const d = bars[index];\n if (!d) return;\n const cx = cxOf(index);\n const cy = y(d.close);\n crosshair.style(\"opacity\", 1);\n vline.attr(\"x1\", cx).attr(\"x2\", cx);\n hline.attr(\"y1\", cy).attr(\"y2\", cy);\n dot.attr(\"cx\", cx).attr(\"cy\", cy);\n setHover((prev) => (prev?.index === index ? prev : { index, cx, cy }));\n })\n .on(\"pointerleave\", () => {\n crosshair.style(\"opacity\", 0);\n setHover(null);\n });\n }\n }\n\n onDrawRef.current?.();\n\n return () => {\n // RB-4 cleanup: null listeners, cancel transitions, clear the subtree. Also\n // drop hover so the pointermove listener can't queue a state update on a\n // torn-down component during the unmount window.\n setHover(null);\n overlay?.on(\"pointermove\", null).on(\"pointerleave\", null);\n svg.selectAll(\"*\").interrupt();\n svg.selectAll(\"*\").remove();\n };\n }, [bars, range, theme, width, height, interactive, grid, showAxis, fmt]);\n\n const hoverBar = hover ? bars[hover.index] : null;\n const change = hoverBar ? hoverBar.close - hoverBar.open : 0;\n const up = change >= 0;\n const pct = hoverBar && hoverBar.open !== 0 ? (change / hoverBar.open) * 100 : 0;\n // Snap the tooltip to the hovered candle (percent of the viewBox, so it tracks\n // the responsive SVG); flip to the left of the crosshair past the mid-line.\n const leftPct = hover ? (hover.cx / width) * 100 : 0;\n const flip = leftPct > 60;\n\n const wrapCls = [\"candlestick\", className].filter(Boolean).join(\" \");\n\n return (\n <figure\n ref={containerRef}\n className={wrapCls}\n style={{\n position: \"relative\",\n margin: 0,\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"10px\",\n }}\n >\n {ranges.length > 0 ? (\n <div className=\"segmented\" role=\"group\" aria-label=\"Time range\">\n {ranges.map((r) => (\n <button\n key={r}\n type=\"button\"\n aria-pressed={r === range}\n onClick={() => onRangeChange?.(r)}\n >\n {r}\n </button>\n ))}\n </div>\n ) : null}\n\n <svg\n ref={svgRef}\n role=\"img\"\n aria-label={ariaLabel}\n style={{\n width: \"100%\",\n height: \"auto\",\n display: \"block\",\n border: \".5px solid var(--border-default)\",\n borderRadius: \"var(--radius-md)\",\n background: \"var(--bg-surface)\",\n }}\n />\n\n {interactive && hover && hoverBar ? (\n <div\n role=\"tooltip\"\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: `${leftPct}%`,\n top: \"8px\",\n transform: flip ? \"translateX(calc(-100% - 12px))\" : \"translateX(12px)\",\n pointerEvents: \"none\",\n minWidth: \"118px\",\n padding: \"8px 10px\",\n background: \"var(--bg-primary)\",\n border: \"1px solid var(--border-strong)\",\n borderRadius: \"var(--radius-sm)\",\n fontFamily: \"var(--font-display)\",\n fontSize: \"11px\",\n lineHeight: 1.5,\n color: \"var(--text-secondary)\",\n zIndex: 5,\n }}\n >\n <div\n style={{\n fontFamily: \"var(--font-ui)\",\n fontSize: \"9.5px\",\n letterSpacing: \"1px\",\n textTransform: \"uppercase\",\n color: \"var(--text-muted)\",\n marginBottom: \"4px\",\n }}\n >\n {fmt.date(hoverBar.date)}\n </div>\n {([\"open\", \"high\", \"low\", \"close\"] as const).map((k) => (\n <div key={k} style={{ display: \"flex\", justifyContent: \"space-between\", gap: \"14px\" }}>\n <span style={{ color: \"var(--text-muted)\" }}>{k.charAt(0).toUpperCase()}</span>\n <b style={{ color: \"var(--text-primary)\", fontVariantNumeric: \"tabular-nums\" }}>\n {fmt.price(hoverBar[k])}\n </b>\n </div>\n ))}\n <div\n style={{\n marginTop: \"4px\",\n fontWeight: 600,\n fontVariantNumeric: \"tabular-nums\",\n color: up ? \"var(--data-up)\" : \"var(--data-down)\",\n }}\n >\n {up ? \"▲\" : \"▼\"} {up ? \"+\" : \"\"}\n {fmt.price(change)} ({up ? \"+\" : \"\"}\n {pct.toFixed(2)}%)\n </div>\n </div>\n ) : null}\n </figure>\n );\n}\n","import { forwardRef, useEffect, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, CSSProperties, ReactNode } from \"react\";\n\nimport { Bell } from \"../icons/generated\";\n\n/**\n * AppBar — the application top bar.\n *\n * Painted with the shipped `@qball-inc/tokens` classes `.appbar` / `.appbar__brand` /\n * `.appnav` / `.appbar__spacer` / `.appbar__right` (matching the\n * `preview/app-chrome-traditional.html` oracle). All content is injected via slots\n * (`brand`, `nav`, `actions`) — no hardcoded brand assets or nav items.\n *\n * Hybrid chrome (owner decision, S83) — defaults to a plain in-flow bar; opts into the\n * Stocky prototype's glass-floating + hide-on-scroll behavior:\n * - `floating` — glass overlay (position:absolute top:0, z-index, backdrop-filter\n * blur + translucent bg, transition). Mirrors\n * docs/stocky-app/prototype/dashboard.css `.appbar`. The host shell\n * should be `position: relative; overflow: hidden`. The shipped\n * `.appbar` bottom hairline persists in float mode (the prototype\n * keeps it too).\n * - `hidden` — applies the hide transform (`translateY(-130%)` + fade). Use with\n * `floating`. Drives the same `.appbar--hidden` look as the prototype.\n * - `hideOnScroll` — opt-in self-managed behavior reproducing the prototype: hide WHILE\n * scrolling (either direction), spring back 220ms after scroll STOPS.\n * Implies `floating`. `scrollContainer` selects the scroll source\n * (default `window`; the prototype scrolls an inner `.main` pane).\n * The listener is cleaned up on unmount (no leak).\n *\n * Glass + hide styles are applied as inline structural styles (no hex, no box-shadow) —\n * DESIGN_DENY clean; `backdrop-filter` here is the sanctioned chrome-glass use.\n */\n\nexport interface NotificationBellProps extends ComponentPropsWithoutRef<\"button\"> {\n /**\n * Unread count. Renders the `.badge-count` overlay when `>= 1`; omits it when `0` or\n * `undefined`. The live value is produced by NotificationCenter; this is the\n * passive data surface.\n */\n unreadCount?: number;\n /** Custom bell icon node; defaults to the shipped outline bell SVG. */\n children?: ReactNode;\n}\n\n/**\n * The bell icon button + unread-count badge, for the AppBar `actions` cluster. A `.iconbtn`\n * hosting the bell SVG; the `unreadCount` prop drives the overlaid `.badge-count` span.\n */\nexport const NotificationBell = forwardRef<HTMLButtonElement, NotificationBellProps>(\n function NotificationBell(\n { className, unreadCount, children, \"aria-label\": ariaLabel, ...rest },\n ref,\n ) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={[\"iconbtn\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel ?? \"Notifications\"}\n {...rest}\n >\n {children ?? <Bell size={19} />}\n {unreadCount !== undefined && unreadCount >= 1 ? (\n <span className=\"badge-count\">{unreadCount}</span>\n ) : null}\n </button>\n );\n },\n);\n\nexport interface AppBarProps extends Omit<ComponentPropsWithoutRef<\"header\">, \"hidden\"> {\n /** Brand slot (logo / wordmark) — rendered in `.appbar__brand`. */\n brand?: ReactNode;\n /** Primary navigation slot — wrapped in `<nav className=\"appnav\">`. */\n nav?: ReactNode;\n /** Right-cluster slot (search, NotificationBell, ThemeToggle, UserMenu) — `.appbar__right`. */\n actions?: ReactNode;\n /** Render as a glass floating overlay (position:absolute, z-index, backdrop blur). */\n floating?: boolean;\n /** Apply the hide transform (`translateY(-130%)` + fade). Use with `floating`. */\n hidden?: boolean;\n /** Self-manage hide-while-scrolling + 220ms spring-back (implies `floating`). */\n hideOnScroll?: boolean;\n /** Scroll source for `hideOnScroll`. Default `window`. */\n scrollContainer?: HTMLElement | Window | null;\n}\n\nexport const AppBar = forwardRef<HTMLElement, AppBarProps>(function AppBar(\n {\n brand,\n nav,\n actions,\n floating,\n hidden,\n hideOnScroll,\n scrollContainer,\n className,\n style,\n ...rest\n },\n ref,\n) {\n const [scrolling, setScrolling] = useState(false);\n\n useEffect(() => {\n if (hideOnScroll !== true) return;\n const target: HTMLElement | Window = scrollContainer ?? window;\n let timer: ReturnType<typeof setTimeout> | undefined;\n function onScroll() {\n setScrolling(true);\n if (timer !== undefined) clearTimeout(timer);\n timer = setTimeout(() => setScrolling(false), 220);\n }\n target.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n target.removeEventListener(\"scroll\", onScroll);\n if (timer !== undefined) clearTimeout(timer);\n };\n }, [hideOnScroll, scrollContainer]);\n\n const isFloating = floating === true || hideOnScroll === true;\n const isHidden = hidden === true || scrolling;\n\n const floatStyle: CSSProperties = isFloating\n ? {\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n zIndex: 30,\n background: \"color-mix(in oklab, var(--bg-primary) 80%, transparent)\",\n backdropFilter: \"blur(14px) saturate(1.15)\",\n WebkitBackdropFilter: \"blur(14px) saturate(1.15)\",\n transition: \"transform 0.34s var(--ease-out), opacity 0.28s var(--ease-out)\",\n }\n : {};\n const hiddenStyle: CSSProperties = isHidden\n ? { transform: \"translateY(-130%)\", opacity: 0, pointerEvents: \"none\" }\n : {};\n\n return (\n <header\n ref={ref}\n className={[\"appbar\", className].filter(Boolean).join(\" \")}\n style={{ ...floatStyle, ...hiddenStyle, ...style }}\n data-hidden={isHidden ? \"true\" : undefined}\n {...rest}\n >\n {brand !== undefined ? <div className=\"appbar__brand\">{brand}</div> : null}\n {nav !== undefined ? <nav className=\"appnav\">{nav}</nav> : null}\n <span className=\"appbar__spacer\" />\n {actions !== undefined ? <div className=\"appbar__right\">{actions}</div> : null}\n </header>\n );\n});\n","import * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementRef, ReactNode } from \"react\";\n\n/**\n * UserMenu — the app-bar user action menu, built on Radix `DropdownMenu`.\n *\n * Radix supplies the behavior (keyboard navigation — Arrow Up/Down cycle items,\n * Enter activates, Escape closes, focus returns to the trigger — plus the portalled\n * panel and focus management) while the visual surface is the shipped `@qball-inc/tokens`\n * classes: the trigger applies `.usermenu` (whose hover/open tint keys on the\n * `aria-expanded` Radix sets), and the panel + parts apply `.dropdown` / `.dropdown__head`\n * / `.dropdown__sec` / `.dropdown__row` / `.dropdown__rule` — matching the\n * `preview/app-chrome-traditional.html` oracle. Same \"Radix for behavior, shipped classes\n * for style\" pattern as Select. No component CSS, no hex.\n *\n * The dropdown lift is the brand's no-shadow treatment: the shipped `.dropdown` is a\n * heavier `1px solid var(--border-strong)` panel — there is NO `box-shadow` (FR4 / RB-8).\n *\n * Composition (matches the oracle):\n * <UserMenu>\n * <UserMenuTrigger><span className=\"wm\"><span className=\"avatar\">AK</span> Ashay</span></UserMenuTrigger>\n * <UserMenuContent>\n * <UserMenuHeader avatar={<span className=\"avatar avatar--lg\">AK</span>} name=\"Ashay Kubal\" email=\"ashay@…\" />\n * <UserMenuGroup>\n * <UserMenuItem icon={<SettingsIcon />} onSelect={…}>Settings</UserMenuItem>\n * <UserMenuItem icon={<KeyIcon />} onSelect={…}>API key</UserMenuItem>\n * </UserMenuGroup>\n * <UserMenuSeparator />\n * <UserMenuGroup>\n * <UserMenuItem danger icon={<SignOutIcon />} onSelect={…}>Sign out</UserMenuItem>\n * </UserMenuGroup>\n * </UserMenuContent>\n * </UserMenu>\n */\n\n/** Menu root — owns the open state. Thin alias of Radix `DropdownMenu.Root`. */\nexport const UserMenu = DropdownMenu.Root;\n\nexport interface UserMenuTriggerProps extends ComponentPropsWithoutRef<\n typeof DropdownMenu.Trigger\n> {\n /** Use a custom element as the trigger (no extra `.usermenu` wrapper DOM). */\n asChild?: boolean;\n}\n\n/**\n * The menu trigger. By default renders a `.usermenu` button hosting the avatar/name\n * slot; pass `asChild` to make a custom element the trigger instead.\n */\nexport const UserMenuTrigger = forwardRef<\n ElementRef<typeof DropdownMenu.Trigger>,\n UserMenuTriggerProps\n>(function UserMenuTrigger({ className, asChild, children, ...rest }, ref) {\n if (asChild === true) {\n return (\n <DropdownMenu.Trigger ref={ref} asChild {...rest}>\n {children}\n </DropdownMenu.Trigger>\n );\n }\n return (\n <DropdownMenu.Trigger\n ref={ref}\n className={[\"usermenu\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n {children}\n </DropdownMenu.Trigger>\n );\n});\n\nexport interface UserMenuContentProps extends ComponentPropsWithoutRef<\n typeof DropdownMenu.Content\n> {\n /** Distance from the trigger, in px. Default `6`. */\n sideOffset?: number;\n}\n\n/** The portalled `.dropdown` panel. Defaults to right-aligned under the trigger. */\nexport const UserMenuContent = forwardRef<\n ElementRef<typeof DropdownMenu.Content>,\n UserMenuContentProps\n>(function UserMenuContent({ className, children, sideOffset = 6, align = \"end\", ...rest }, ref) {\n return (\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n ref={ref}\n className={[\"dropdown\", className].filter(Boolean).join(\" \")}\n sideOffset={sideOffset}\n align={align}\n {...rest}\n >\n {children}\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n );\n});\n\nexport interface UserMenuHeaderProps {\n /** Avatar node (e.g. `<span className=\"avatar avatar--lg\">AK</span>`). */\n avatar?: ReactNode;\n /** Display name. */\n name: ReactNode;\n /** Secondary line, typically the email. */\n email?: ReactNode;\n}\n\n/**\n * Non-interactive identity header (`.dropdown__head`). Radix `Label` (skipped by nav).\n * Render as a DIRECT child of `UserMenuContent` — NOT inside a `UserMenuGroup` — matching\n * the oracle's `.dropdown__head` placement at the top of the `.dropdown` panel.\n */\nexport function UserMenuHeader({ avatar, name, email }: UserMenuHeaderProps) {\n return (\n <DropdownMenu.Label className=\"dropdown__head\">\n {avatar}\n <div>\n <div className=\"dropdown__name\">{name}</div>\n {email !== undefined ? <div className=\"dropdown__mail\">{email}</div> : null}\n </div>\n </DropdownMenu.Label>\n );\n}\n\nexport type UserMenuGroupProps = ComponentPropsWithoutRef<typeof DropdownMenu.Group>;\n\n/** A padded item group (`.dropdown__sec`). Wrap rows so they inset off the panel edge. */\nexport const UserMenuGroup = forwardRef<ElementRef<typeof DropdownMenu.Group>, UserMenuGroupProps>(\n function UserMenuGroup({ className, ...rest }, ref) {\n return (\n <DropdownMenu.Group\n ref={ref}\n className={[\"dropdown__sec\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\nexport interface UserMenuItemProps extends ComponentPropsWithoutRef<typeof DropdownMenu.Item> {\n /** Tint the row as destructive (`.dropdown__row--danger`, e.g. Sign out). */\n danger?: boolean;\n /** Leading icon node (rendered before the label). */\n icon?: ReactNode;\n}\n\n/** A menu row (`.dropdown__row`). Enter / click fire `onSelect`; Radix handles focus. */\nexport const UserMenuItem = forwardRef<ElementRef<typeof DropdownMenu.Item>, UserMenuItemProps>(\n function UserMenuItem({ className, danger, icon, children, ...rest }, ref) {\n const cls = [\"dropdown__row\", danger === true ? \"dropdown__row--danger\" : \"\", className]\n .filter(Boolean)\n .join(\" \");\n return (\n <DropdownMenu.Item ref={ref} className={cls} {...rest}>\n {icon}\n {children}\n </DropdownMenu.Item>\n );\n },\n);\n\nexport type UserMenuSeparatorProps = ComponentPropsWithoutRef<typeof DropdownMenu.Separator>;\n\n/** A hairline divider between groups (`.dropdown__rule`). */\nexport const UserMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenu.Separator>,\n UserMenuSeparatorProps\n>(function UserMenuSeparator({ className, ...rest }, ref) {\n return (\n <DropdownMenu.Separator\n ref={ref}\n className={[\"dropdown__rule\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, MouseEvent } from \"react\";\n\nimport { Moon, Sun } from \"../icons/generated\";\n\n/**\n * ThemeToggle — the single global light/dark switch.\n *\n * Painted with the shipped `@qball-inc/tokens` classes `.iconbtn` + `.theme-toggle`\n * (matching the `preview/app-chrome-traditional.html` oracle). BOTH the sun and the\n * moon are inline SVG icons wrapped in `.ic-sun` / `.ic-moon`; the shipped CSS swaps\n * which one shows based on `html[data-theme]` (components.css:637-640) — so there is\n * no icon library dependency and no React state needed for the icon swap.\n *\n * BINDING global-theme contract: a click flips `data-theme` on `document.documentElement`\n * (`<html>`) — never a subtree element, a React context, or a CSS class. The `data-theme`\n * attribute on `<html>` is the mechanism every preview card + the gallery use for theming\n * (gallery.html:155). The current theme is read from the same attribute, defaulting to\n * `\"light\"` when absent.\n *\n * Inline SVG only — no hardcoded color (the icons stroke with `currentColor`), no\n * `box-shadow`. DESIGN_DENY (RB-8 layer (a)) clean.\n */\n\nexport type Theme = \"light\" | \"dark\";\n\n/** Reads the live theme from `<html data-theme>`, defaulting to `\"light\"`. */\nfunction readTheme(): Theme {\n return document.documentElement.getAttribute(\"data-theme\") === \"dark\" ? \"dark\" : \"light\";\n}\n\nexport interface ThemeToggleProps extends Omit<ComponentPropsWithoutRef<\"button\">, \"onChange\"> {\n /** Fired with the new theme AFTER the toggle writes `data-theme` to `<html>`. */\n onThemeChange?: (theme: Theme) => void;\n}\n\nexport const ThemeToggle = forwardRef<HTMLButtonElement, ThemeToggleProps>(function ThemeToggle(\n { className, onClick, onThemeChange, \"aria-label\": ariaLabel, ...rest },\n ref,\n) {\n function handleClick(event: MouseEvent<HTMLButtonElement>) {\n // Run the consumer's handler first so it can cancel the flip via preventDefault().\n onClick?.(event);\n if (event.defaultPrevented) return;\n const next: Theme = readTheme() === \"dark\" ? \"light\" : \"dark\";\n document.documentElement.setAttribute(\"data-theme\", next);\n onThemeChange?.(next);\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n className={[\"iconbtn\", \"theme-toggle\", className].filter(Boolean).join(\" \")}\n aria-label={ariaLabel ?? \"Toggle theme\"}\n onClick={handleClick}\n {...rest}\n >\n <span className=\"ic-sun\">\n <Sun size={19} />\n </span>\n <span className=\"ic-moon\">\n <Moon size={19} />\n </span>\n </button>\n );\n});\n","import { forwardRef, useEffect } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\n/**\n * Scrim — the canonical library-wide scroll-lock primitive + dim backdrop.\n *\n * Painted with the shipped `.scrim` class (components.css:273-277): a full-viewport\n * `position: fixed; inset: 0` layer dimmed with `var(--color-scrim)`. The shipped\n * `.scrim` is DELIBERATELY flat — no `backdrop-filter` blur (the brand dims with a\n * flat tone), so this is a pure className wrapper with no inline color and no shadow.\n *\n * Scrim OWNS scroll-lock: while `open` is true it sets `document.body` `overflow:hidden`,\n * capturing the prior value, and restores that exact prior value when `open` becomes\n * false OR when the component unmounts (no leaked lock).\n *\n * NOTE: Radix overlays (Modal/Dialog) keep their OWN robust scroll-lock\n * (react-remove-scroll). This Scrim is the scroll-lock owner for NON-Radix / custom\n * overlays; the Modal's overlay already shares this same `.scrim` class for the visual\n * backdrop.\n */\nexport interface ScrimProps extends ComponentPropsWithoutRef<\"div\"> {\n /** When true, render the dim backdrop AND lock `document.body` scroll. */\n open: boolean;\n}\n\nexport const Scrim = forwardRef<HTMLDivElement, ScrimProps>(function Scrim(\n { open, className, ...rest },\n ref,\n) {\n useEffect(() => {\n if (!open) return;\n // Capture the prior overflow so a nested/pre-existing lock is restored verbatim\n // (LIFO-correct for stacked overlays: each Scrim restores the value it captured).\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previousOverflow;\n };\n }, [open]);\n\n if (!open) return null;\n\n return <div ref={ref} className={[\"scrim\", className].filter(Boolean).join(\" \")} {...rest} />;\n});\n","import * as Popover from \"@radix-ui/react-popover\";\nimport { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, FormEvent, ReactNode } from \"react\";\n\nimport { Plus, SearchIcon } from \"../icons/generated\";\n\n/**\n * CommandDock — the floating command island (the app's bottom-center action cluster).\n *\n * Faithful to the real Stocky prototype (`preview/app-chrome-island.html` + the shipped\n * `.dock` / `.dock-pop` token CSS): a PERSISTENT bar of actions — Search · Ask Stocky · Add —\n * each its OWN trigger that opens its OWN popover ABOVE the dock (NOT a single collapsed pill\n * that expands to one panel). Painted with the shipped classes; ZERO token-CSS change.\n *\n * - `.dock` — the floating island bar. It is `position: absolute` (shipped CSS), so the\n * host shell must be `position: relative; overflow: hidden` (like the\n * prototype `.shell` and AppBar's floating mode). Glass + radius + the\n * translucent surface all live in the shipped `.dock` class.\n * - `.dock--hidden`— the hide transform (`translateY(165%)` + fade). Applied via class when\n * `hidden` is set or while `hideOnScroll` is actively scrolling.\n * - `.dock-pop` — each action's popover wrapper (caret + z-index); Radix's popper owns\n * placement (`side=\"top\"`), so the class's own absolute positioning is\n * overridden by Radix inline styles — same portal-escape pattern as the\n * React `<Tooltip>` (`.tip-pop`).\n *\n * Behavior is Radix `Popover` (portal to `<body>`, focus management, Escape/outside-click). Only\n * ONE popover is open at a time (a single controlled `openId`); scrolling closes the open popover\n * and hides the dock, matching the prototype.\n *\n * Hide-on-scroll mirrors the AppBar mechanism exactly: hide WHILE scrolling (either\n * direction), spring back 220ms after scroll STOPS — NOT a directional down-past-threshold.\n * `scrollContainer` selects the scroll source (default `window`). The listener is cleaned up on\n * unmount (no leak).\n *\n * The \"Ask Stocky\" popover is a MINIMAL composer + the BYO-key gate (`aiEnabled`); the full\n * conversation terminal (transcript, streaming) composes in later.\n */\n\n/**\n * The Stocky CRT-bot mascot, painted with the shipped `.stocky-icon` family (the screen tone, the\n * sage phosphor eyes, and the scanline animation come from the token CSS — no color in source).\n */\nfunction StockyIcon() {\n return (\n <span className=\"stocky-icon\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 32 32\" fill=\"none\">\n <g stroke=\"currentColor\" strokeWidth=\"1.6\" strokeLinecap=\"round\">\n <path d=\"M16 8 11.5 3\" />\n <path d=\"M16 8 20.5 3\" />\n </g>\n <circle cx=\"11.5\" cy=\"3\" r=\"1.4\" fill=\"currentColor\" />\n <circle cx=\"20.5\" cy=\"3\" r=\"1.4\" fill=\"currentColor\" />\n <rect x=\"4\" y=\"8\" width=\"24\" height=\"20\" rx=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.6\" />\n <rect className=\"stocky-screen\" x=\"7\" y=\"11\" width=\"18\" height=\"13.5\" rx=\"2.5\" />\n <rect className=\"stocky-scan\" x=\"7.6\" y=\"11.4\" width=\"16.8\" height=\"1.3\" rx=\"0.6\" />\n <circle className=\"stocky-eye\" cx=\"12.6\" cy=\"17.6\" r=\"1.95\" />\n <circle className=\"stocky-eye stocky-eye--r\" cx=\"19.4\" cy=\"17.6\" r=\"1.95\" />\n <path\n d=\"M9.5 28v2M22.5 28v2\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n />\n </svg>\n </span>\n );\n}\n\n/** A discrete command surfaced in the dock's Search popover (and reused for Add suggestions). */\nexport interface CommandAction {\n /** Stable identity. */\n id: string;\n /** Human label; the Search filter matches a case-insensitive substring of this. */\n label: string;\n /** Optional leading icon node. */\n icon?: ReactNode;\n /** Invoked when the row is chosen (click / Enter); the dock closes afterward. */\n onSelect: () => void;\n}\n\ntype DockPopId = \"search\" | \"ai\" | \"add\";\n\nexport interface CommandDockProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"hidden\"> {\n /** The filterable command list shown in the Search popover. */\n actions?: CommandAction[];\n /** Search input placeholder. */\n searchPlaceholder?: string;\n /** Message shown in the Search popover when the filter matches nothing. */\n noResultsLabel?: string;\n /** Enable the AI composer. When `false` (default) the composer is disabled with a BYO-key message. */\n aiEnabled?: boolean;\n /** Called with the trimmed prompt when the AI composer is submitted; clears the input. */\n onAiSubmit?: (prompt: string) => void;\n /** AI composer placeholder. */\n aiPlaceholder?: string;\n /** BYO-key gate message shown when `aiEnabled` is false. */\n aiDisabledLabel?: string;\n /** Suggestions shown in the Add popover (filtered by the add input, case-insensitive). */\n addSuggestions?: CommandAction[];\n /** Add input placeholder. */\n addPlaceholder?: string;\n /** Notified as the user types in the Add input. */\n onAddQueryChange?: (query: string) => void;\n /** Self-manage hide-while-scrolling + 220ms idle spring-back (mirrors AppBar). */\n hideOnScroll?: boolean;\n /** Scroll source for `hideOnScroll`. Default `window`. */\n scrollContainer?: HTMLElement | Window | null;\n /** Manually apply the `.dock--hidden` hide transform. */\n hidden?: boolean;\n}\n\nconst POP_SIDE_OFFSET = 14;\n\nexport const CommandDock = forwardRef<HTMLDivElement, CommandDockProps>(function CommandDock(\n {\n actions = [],\n searchPlaceholder = \"Search symbols & briefings…\",\n noResultsLabel = \"No results\",\n aiEnabled = false,\n onAiSubmit,\n aiPlaceholder = \"type a question…\",\n aiDisabledLabel = \"Add your API key to enable AI\",\n addSuggestions = [],\n addPlaceholder = \"Add a ticker — name or symbol…\",\n onAddQueryChange,\n hideOnScroll,\n scrollContainer,\n hidden,\n className,\n ...rest\n },\n ref,\n) {\n const [openId, setOpenId] = useState<DockPopId | null>(null);\n const [scrolling, setScrolling] = useState(false);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [addQuery, setAddQuery] = useState(\"\");\n const [prompt, setPrompt] = useState(\"\");\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (hideOnScroll !== true) return;\n const target: HTMLElement | Window = scrollContainer ?? window;\n let timer: ReturnType<typeof setTimeout> | undefined;\n function onScroll() {\n setScrolling(true);\n setOpenId(null); // scrolling closes the open popover (prototype parity)\n // Scrolling bypasses handleOpenChange, so reset the transient search/add filters\n // here too — otherwise a stale query persists into the next open (CR-1).\n setSearchQuery(\"\");\n setAddQuery(\"\");\n if (timer !== undefined) clearTimeout(timer);\n timer = setTimeout(() => setScrolling(false), 220);\n }\n target.addEventListener(\"scroll\", onScroll, { passive: true });\n return () => {\n target.removeEventListener(\"scroll\", onScroll);\n if (timer !== undefined) clearTimeout(timer);\n };\n }, [hideOnScroll, scrollContainer]);\n\n const isHidden = hidden === true || scrolling;\n\n const filteredActions = useMemo(() => {\n const q = searchQuery.trim().toLowerCase();\n if (q === \"\") return actions;\n return actions.filter((a) => a.label.toLowerCase().includes(q));\n }, [actions, searchQuery]);\n\n const filteredAdd = useMemo(() => {\n const q = addQuery.trim().toLowerCase();\n if (q === \"\") return addSuggestions;\n return addSuggestions.filter((a) => a.label.toLowerCase().includes(q));\n }, [addSuggestions, addQuery]);\n\n const handleOpenChange = useCallback((id: DockPopId, open: boolean) => {\n setOpenId(open ? id : null);\n // Reset the transient search/add filters on close. The AI `prompt` is authored\n // content and is INTENTIONALLY preserved across close so a half-typed question\n // isn't lost on an accidental dismiss (CR-3 — documented draft-preservation).\n if (!open && id === \"search\") setSearchQuery(\"\");\n if (!open && id === \"add\") setAddQuery(\"\");\n }, []);\n\n function runAction(action: CommandAction) {\n action.onSelect();\n setOpenId(null);\n }\n\n function handleAiSubmit(event: FormEvent) {\n event.preventDefault();\n if (!aiEnabled) return;\n const text = prompt.trim();\n if (text === \"\") return;\n onAiSubmit?.(text);\n setPrompt(\"\");\n }\n\n return (\n <div\n ref={ref}\n className={[\"dock\", isHidden ? \"dock--hidden\" : \"\", className].filter(Boolean).join(\" \")}\n data-hidden={isHidden ? \"true\" : undefined}\n {...rest}\n >\n {/* Search — a command palette: a search input over the filterable actions list. */}\n <Popover.Root open={openId === \"search\"} onOpenChange={(o) => handleOpenChange(\"search\", o)}>\n <Popover.Trigger className=\"btn btn--ghost btn--icon\" aria-label=\"Search\">\n <SearchIcon size={21} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n className=\"dock-pop\"\n side=\"top\"\n sideOffset={POP_SIDE_OFFSET}\n onOpenAutoFocus={(e) => {\n e.preventDefault();\n searchInputRef.current?.focus();\n }}\n >\n <div className=\"dropdown\" style={{ width: \"min(440px, 86vw)\" }}>\n <div style={{ padding: \"12px 14px\" }}>\n <div className=\"input-wrap\">\n <input\n ref={searchInputRef}\n className=\"input\"\n type=\"text\"\n placeholder={searchPlaceholder}\n value={searchQuery}\n aria-label=\"Search\"\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n <span className=\"input-wrap__affix\" aria-hidden=\"true\">\n <SearchIcon size={21} />\n </span>\n </div>\n </div>\n {actions.length > 0 ? (\n filteredActions.length > 0 ? (\n <div className=\"dropdown__sec\">\n {filteredActions.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n className=\"dropdown__row\"\n onClick={() => runAction(a)}\n >\n {a.icon}\n {a.label}\n </button>\n ))}\n </div>\n ) : (\n <div className=\"dropdown__sec\">\n <div\n className=\"dropdown__row\"\n role=\"status\"\n style={{ color: \"var(--text-muted)\", cursor: \"default\" }}\n >\n {noResultsLabel}\n </div>\n </div>\n )\n ) : null}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n {/* Ask Stocky — minimal AI composer + BYO-key gate (full terminal composes in later). */}\n <Popover.Root open={openId === \"ai\"} onOpenChange={(o) => handleOpenChange(\"ai\", o)}>\n <Popover.Trigger\n className=\"btn btn--ghost btn--icon iconbtn--stocky\"\n aria-label=\"Ask Stocky\"\n >\n <StockyIcon />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className=\"dock-pop\" side=\"top\" sideOffset={POP_SIDE_OFFSET}>\n <form\n className=\"dropdown\"\n style={{\n width: \"min(440px, 86vw)\",\n padding: \"12px 14px\",\n display: \"grid\",\n gap: \"10px\",\n }}\n onSubmit={handleAiSubmit}\n >\n <textarea\n className=\"input\"\n rows={2}\n placeholder={aiPlaceholder}\n aria-label=\"Ask Stocky\"\n value={prompt}\n disabled={!aiEnabled}\n onChange={(e) => setPrompt(e.target.value)}\n style={{ resize: \"none\" }}\n />\n {!aiEnabled ? (\n <p style={{ margin: 0, fontSize: \"11.5px\", color: \"var(--text-muted)\" }}>\n {aiDisabledLabel}\n </p>\n ) : null}\n <div style={{ display: \"flex\", justifyContent: \"flex-end\" }}>\n <button type=\"submit\" className=\"btn btn--primary\" disabled={!aiEnabled}>\n Ask\n </button>\n </div>\n </form>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <span className=\"dock__div\" />\n\n {/* Add — the primary action; an add input + optional filtered suggestions. */}\n <Popover.Root open={openId === \"add\"} onOpenChange={(o) => handleOpenChange(\"add\", o)}>\n <Popover.Trigger className=\"btn btn--primary btn--icon\" aria-label=\"Add stock\">\n <Plus size={22} strokeWidth={1.8} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className=\"dock-pop\" side=\"top\" sideOffset={POP_SIDE_OFFSET}>\n <div className=\"dropdown\" style={{ width: \"min(440px, 86vw)\" }}>\n <div\n style={{\n padding: \"12px 14px\",\n borderBottom:\n filteredAdd.length > 0 ? \"0.5px solid var(--border-default)\" : undefined,\n }}\n >\n <div className=\"input-wrap\">\n <input\n className=\"input\"\n type=\"text\"\n placeholder={addPlaceholder}\n value={addQuery}\n aria-label=\"Add stock\"\n onChange={(e) => {\n setAddQuery(e.target.value);\n onAddQueryChange?.(e.target.value);\n }}\n />\n <span className=\"input-wrap__affix\" aria-hidden=\"true\">\n <Plus size={22} strokeWidth={1.8} />\n </span>\n </div>\n </div>\n {filteredAdd.length > 0 ? (\n <div className=\"dropdown__sec\">\n {filteredAdd.map((a) => (\n <button\n key={a.id}\n type=\"button\"\n className=\"dropdown__row\"\n onClick={() => runAction(a)}\n >\n {a.icon}\n {a.label}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n );\n});\n","import * as Popover from \"@radix-ui/react-popover\";\nimport type { KeyboardEvent, ReactNode } from \"react\";\n\nimport { ArrowDownRight, ArrowUpRight, BellOff, Info, TriangleAlert } from \"../icons/generated\";\nimport { NotificationBell } from \"./AppBar\";\n\n/**\n * NotificationCenter — the app-bar bell dropdown, built on Radix `Popover`.\n *\n * The shipped `NotificationBell` is the Popover trigger; the panel paints the shipped\n * `.dropdown` / `.notif` token classes (matching `preview/app-chrome-island.html`). ZERO token-CSS\n * change. Radix supplies the behavior (portal to `<body>`, focus management, Escape/outside-click).\n *\n * Per-item visual treatment is SEMANTIC (owner sign-off, S84): each item's `kind`\n * (`up` | `down` | `warn` | `info`) drives the shipped `.notif__mark--*` left mark — finance/status\n * meaning, NOT a source-identity tag. Unread items are the sage-tinted `.notif__item--unread` row;\n * clicking an unread row marks it read (`onMarkRead(id)`). The unread count is derived from `items`\n * here (no shared store) and drives the bell's `.badge-count` badge — empty `items` → count 0 → no\n * badge contract.\n */\n\n/** Semantic meaning of a notification — drives the shipped `.notif__mark--*` left mark. */\nexport type NotificationKind = \"up\" | \"down\" | \"warn\" | \"info\";\n\nexport interface NotificationItemData {\n /** Stable identity (passed to `onMarkRead`). */\n id: string;\n /** Semantic meaning → `.notif__mark--{kind}`. Omit for a neutral mark. */\n kind?: NotificationKind;\n /** Primary message (rich nodes allowed, e.g. a bold ticker + `.notif__num`). */\n title: ReactNode;\n /** Optional secondary detail, rendered after the title. */\n body?: ReactNode;\n /** Display timestamp (e.g. \"2 min ago\"). */\n timestamp: ReactNode;\n /** Read state. Unread renders the `.notif__item--unread` tint + the mark-read affordance. */\n read: boolean;\n /** Invoked with the item id when an unread row is marked read (click / Enter / Space). */\n onMarkRead: (id: string) => void;\n}\n\n// Semantic mark → B2 generated glyph (15px): up → arrow-up-right, down →\n// arrow-down-right (1.8 stroke); warn → triangle-alert, info → info-circle (1.7\n// stroke). The glyph is the non-color cue; the `.notif__mark--{kind}` wrapper owns\n// the semantic color + tint. The exact per-kind glyph mapping is preserved (S84).\nfunction MarkIcon({ kind }: { kind?: NotificationKind | undefined }) {\n if (kind === \"up\") return <ArrowUpRight size={15} strokeWidth={1.8} />;\n if (kind === \"down\") return <ArrowDownRight size={15} strokeWidth={1.8} />;\n if (kind === \"warn\") return <TriangleAlert size={15} strokeWidth={1.7} />;\n // info (default)\n return <Info size={15} strokeWidth={1.7} />;\n}\n\nfunction NotificationRow({ item }: { item: NotificationItemData }) {\n const { id, kind, title, body, timestamp, read, onMarkRead } = item;\n const markClass = kind !== undefined ? `notif__mark notif__mark--${kind}` : \"notif__mark\";\n const inner = (\n <>\n <span className={markClass} aria-hidden=\"true\">\n <MarkIcon kind={kind} />\n </span>\n <div>\n <div className=\"notif__txt\">\n {title}\n {body !== undefined && body !== null ? <> {body}</> : null}\n </div>\n <span className=\"notif__time\">{timestamp}</span>\n </div>\n </>\n );\n\n if (read) {\n return <div className=\"notif__item\">{inner}</div>;\n }\n\n function onKeyDown(event: KeyboardEvent<HTMLDivElement>) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onMarkRead(id);\n }\n }\n\n const ariaLabel = typeof title === \"string\" ? `Mark read: ${title}` : \"Mark notification read\";\n return (\n <div\n className=\"notif__item notif__item--unread\"\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel}\n onClick={() => onMarkRead(id)}\n onKeyDown={onKeyDown}\n >\n {inner}\n </div>\n );\n}\n\nexport interface NotificationCenterProps {\n /** The notifications to show. Unread count (drives the bell badge) is derived from this. */\n items: NotificationItemData[];\n /** Panel head title. Default \"Notifications\". */\n title?: string;\n /** When provided, a \"Mark all read\" head action renders and calls this. */\n onMarkAllRead?: () => void;\n /** \"Mark all read\" label. */\n markAllLabel?: string;\n /** Empty-state message when `items` is empty. Default \"No notifications\". */\n emptyLabel?: string;\n /** When provided, a footer \"View all\" link renders pointing here. */\n viewAllHref?: string;\n /** Footer link label. */\n viewAllLabel?: string;\n /** Bell trigger aria-label. Defaults to NotificationBell's \"Notifications\". */\n bellLabel?: string;\n /** Popover alignment relative to the bell. Default \"end\". */\n align?: \"start\" | \"center\" | \"end\";\n /** Popover distance from the bell, in px. Default 6. */\n sideOffset?: number;\n}\n\nexport function NotificationCenter({\n items,\n title = \"Notifications\",\n onMarkAllRead,\n markAllLabel = \"Mark all read\",\n emptyLabel = \"No notifications\",\n viewAllHref,\n viewAllLabel = \"View all\",\n bellLabel,\n align = \"end\",\n sideOffset = 6,\n}: NotificationCenterProps) {\n const unreadCount = items.filter((i) => !i.read).length;\n\n return (\n <Popover.Root>\n <Popover.Trigger asChild>\n <NotificationBell unreadCount={unreadCount} aria-label={bellLabel} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content className=\"dropdown notif\" align={align} sideOffset={sideOffset}>\n <div className=\"notif__head\">\n <span className=\"notif__title\">{title}</span>\n {onMarkAllRead !== undefined ? (\n <button type=\"button\" className=\"notif__clear\" onClick={onMarkAllRead}>\n {markAllLabel}\n </button>\n ) : null}\n </div>\n <div className=\"notif__list\">\n {items.length === 0 ? (\n <div\n style={{\n display: \"grid\",\n placeItems: \"center\",\n gap: \"10px\",\n padding: \"34px 16px\",\n color: \"var(--text-muted)\",\n }}\n >\n <BellOff size={26} strokeWidth={1.4} />\n <span style={{ fontSize: \"12.5px\" }}>{emptyLabel}</span>\n </div>\n ) : (\n items.map((item) => <NotificationRow key={item.id} item={item} />)\n )}\n </div>\n {viewAllHref !== undefined ? (\n <div className=\"notif__foot\">\n <a href={viewAllHref}>{viewAllLabel}</a>\n </div>\n ) : null}\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { useEffect, useRef } from \"react\";\n\nimport { Button } from \"../primitives/Button\";\nimport { Callout } from \"../overlay/Callout\";\n\n/**\n * Terminal — the Stocky AI conversation transcript, painted with the shipped\n * `@qball-inc/tokens` `.term*` classes from the `preview/conversation-terminal.html`\n * oracle. A scrollable, growable transcript of `you ›` / `stocky ›` turns with\n * token-only styling (no component CSS, no hardcoded color, no box-shadow).\n *\n * Behaviour this surface owns: auto-scroll to the newest content on append, the\n * blinking streaming cursor at the end of the in-progress assistant turn, a\n * persistent (non-dismissible) AI disclaimer rendered via the shipped `Callout`\n * (the DESIGNATED disclaimer host — owner decision S86, in place of the oracle's\n * inline footer), and an error row that visually distinguishes a transient\n * `Retrying…` frame (warning) from a fatal `Try again` frame (error).\n *\n * Streaming state comes from the `useStreaming` hook (`messages` / `streaming` /\n * `error`), but `Terminal` is a pure display surface — it accepts that state as\n * props. Grounding annotations (`[source]` / `[unverified]`) are OUT of scope:\n * Grounding annotations are composed in afterward via `GroundingFlag`.\n */\n\n/** Speaker for a transcript turn. */\nexport type TerminalRole = \"user\" | \"assistant\";\n\n/**\n * A single streamed token. The streaming hook accumulates these into the\n * in-progress assistant message; `Terminal` flattens them to display text.\n */\nexport interface StreamToken {\n /** The text fragment carried by this token. */\n text: string;\n}\n\n/** One transcript turn. `content` is a plain string or an accumulating token list. */\nexport interface TerminalMessage {\n /** Optional stable identity used as the React key; falls back to the index. */\n id?: string | number;\n role: TerminalRole;\n content: string | StreamToken[];\n}\n\n/**\n * A provider error surfaced into the transcript. Discriminated on `kind` so a\n * retryable frame is never confused with a string sentinel\n * (the `discriminated {kind}` pattern over a `string | \"literal\"` union).\n */\nexport interface StreamError {\n kind: \"error\";\n /** Retryable → a transient `Retrying…` indicator; fatal → a `Try again` action. */\n retryable: boolean;\n message: string;\n}\n\nexport interface TerminalProps {\n /** The transcript, oldest first. */\n messages: TerminalMessage[];\n /** While true, the last assistant turn shows the blinking streaming cursor. */\n streaming?: boolean;\n /** A provider error to surface as an error row (`null` / omitted = none). */\n error?: StreamError | null;\n /** Fired by the fatal-error row's `Try again` action. */\n onRetry?: () => void;\n /** Composer slot rendered in the terminal footer (e.g. a `<Composer/>`). */\n composer?: ReactNode;\n /** The persistent AI disclaimer. Defaults to the standard \"not advice\" notice. */\n disclaimer?: ReactNode;\n /** Header title (`.term__title`). Default `\"stocky\"`. */\n title?: ReactNode;\n /** Max height of the scrollable transcript body (a number is treated as px). */\n maxHeight?: number | string;\n /** className merged onto the `.term` root. */\n className?: string;\n}\n\nconst DEFAULT_DISCLAIMER =\n \"Stocky is AI and can get things wrong — not financial advice. Double-check before you trade.\";\n\nconst ROLE_PREFIX: Record<TerminalRole, { label: string; preClass: string; txtClass: string }> = {\n user: { label: \"you ›\", preClass: \"term__pre--you\", txtClass: \"term__txt--you\" },\n assistant: { label: \"stocky ›\", preClass: \"term__pre--bot\", txtClass: \"term__txt--bot\" },\n};\n\nfunction toText(content: string | StreamToken[]): string {\n return typeof content === \"string\" ? content : content.map((t) => t.text).join(\"\");\n}\n\nexport function Terminal({\n messages,\n streaming = false,\n error = null,\n onRetry,\n composer,\n disclaimer = DEFAULT_DISCLAIMER,\n title = \"stocky\",\n maxHeight,\n className,\n}: TerminalProps) {\n const endRef = useRef<HTMLDivElement>(null);\n\n // Auto-scroll the transcript to the newest content on every append / token /\n // error. useEffect runs client-only, so this is SSR-safe; scrollIntoView is\n // the observable hook the auto-scroll test asserts against (jsdom does no\n // layout, so scrollTop math would be untestable).\n useEffect(() => {\n endRef.current?.scrollIntoView({ block: \"end\" });\n }, [messages, streaming, error]);\n\n const lastIndex = messages.length - 1;\n const bodyStyle =\n maxHeight === undefined\n ? undefined\n : { maxHeight: typeof maxHeight === \"number\" ? `${maxHeight}px` : maxHeight };\n\n return (\n <div className={[\"term\", className].filter(Boolean).join(\" \")}>\n <div className=\"term__head\">\n <span className=\"term__caret\" aria-hidden=\"true\">\n ›_\n </span>\n <span className=\"term__title\">{title}</span>\n </div>\n\n <div className=\"term__body\" style={bodyStyle} aria-live=\"polite\" aria-atomic=\"false\">\n {messages.map((m, i) => {\n const { label, preClass, txtClass } = ROLE_PREFIX[m.role];\n const showCursor = streaming && i === lastIndex && m.role === \"assistant\";\n return (\n <div key={m.id ?? i}>\n {i > 0 ? <hr className=\"term__sep\" /> : null}\n <div className=\"term__turn\">\n <span className={preClass}>{label}</span>\n <span className={txtClass}>\n {toText(m.content)}\n {showCursor ? (\n <span className=\"term__cursor\" data-testid=\"term-cursor\" aria-hidden=\"true\" />\n ) : null}\n </span>\n </div>\n </div>\n );\n })}\n\n {error ? (\n <Callout\n variant={error.retryable ? \"warning\" : \"error\"}\n title={error.retryable ? \"Retrying…\" : \"Error\"}\n className=\"term__errrow\"\n >\n {error.message}\n {!error.retryable && onRetry !== undefined ? (\n <>\n {\" \"}\n <Button variant=\"secondary\" onClick={onRetry}>\n Try again\n </Button>\n </>\n ) : null}\n </Callout>\n ) : null}\n\n <div ref={endRef} />\n </div>\n\n {composer}\n\n <Callout variant=\"neutral\" icon={false} className=\"term__disc\">\n {disclaimer}\n </Callout>\n </div>\n );\n}\n","import { useRef, useState } from \"react\";\nimport type { ChangeEvent, KeyboardEvent, ReactNode } from \"react\";\n\nimport { ArrowRight } from \"../icons/generated\";\n\n/**\n * Composer — the terminal's multiline input + inline send control, painted with\n * the shipped `.term__composer` / `.term__prompt` / `.term__input` classes from\n * the `preview/conversation-terminal.html` oracle. Standalone so it can sit in a\n * `Terminal` footer (via the `composer` slot) or on its own.\n *\n * Send fires on Enter (without Shift) or a click of the inline `.iconbtn` send\n * arrow; the textarea then clears and its auto-grown height resets. The BYO-key\n * gate (`keyProvided={false}`) disables the input + send and shows an \"Add your\n * key\" prompt — `onSend` is never invoked while gated. The Composer does NOT\n * render the key-entry flow (that is `SecretInput`); it only reflects\n * the `keyProvided` boolean and exposes the disabled visual state.\n */\nexport interface ComposerProps {\n /** Fired with the trimmed text on Enter (no Shift) or a send-click. */\n onSend: (text: string) => void;\n /** BYO-key gate. When `false`, the input + send are disabled and a prompt shows. Default `true`. */\n keyProvided?: boolean;\n /** Placeholder for the textarea. */\n placeholder?: string;\n /** The `.term__prompt` label. Default `\"you ›\"`. */\n prompt?: ReactNode;\n /** The gated-state prompt (must read as \"add your key\"). Default `\"Add your key to start chatting.\"`. */\n keyPrompt?: ReactNode;\n /** Accessible label for the send button + the textarea. Defaults `\"Send\"` / `\"Message\"`. */\n sendLabel?: string;\n inputLabel?: string;\n /** className merged onto the `.term__composer` root. */\n className?: string;\n}\n\nexport function Composer({\n onSend,\n keyProvided = true,\n placeholder = \"type a question…\",\n prompt = \"you ›\",\n keyPrompt = \"Add your key to start chatting.\",\n sendLabel = \"Send\",\n inputLabel = \"Message\",\n className,\n}: ComposerProps) {\n const [value, setValue] = useState(\"\");\n const taRef = useRef<HTMLTextAreaElement>(null);\n const disabled = !keyProvided;\n\n // Auto-grow: collapse to the content height on every edit (the oracle's inline\n // script behaviour, in React). Runs only in input handlers, so it is SSR-safe.\n function grow() {\n const ta = taRef.current;\n if (ta === null) return;\n ta.style.height = \"auto\";\n ta.style.height = `${ta.scrollHeight}px`;\n }\n\n function send() {\n if (disabled) return;\n const text = value.trim();\n if (text === \"\") return;\n onSend(text);\n setValue(\"\");\n const ta = taRef.current;\n if (ta !== null) ta.style.height = \"auto\";\n }\n\n function handleChange(e: ChangeEvent<HTMLTextAreaElement>) {\n setValue(e.target.value);\n grow();\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLTextAreaElement>) {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n send();\n }\n }\n\n return (\n <div className={[\"term__composer\", className].filter(Boolean).join(\" \")}>\n <span className=\"term__prompt\">{prompt}</span>\n <textarea\n ref={taRef}\n className=\"term__input\"\n rows={1}\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n aria-label={inputLabel}\n />\n <button\n type=\"button\"\n className=\"iconbtn term__send\"\n onClick={send}\n disabled={disabled}\n aria-label={sendLabel}\n >\n <ArrowRight size={16} strokeWidth={1.6} />\n </button>\n {disabled ? <p className=\"term__keyhint\">{keyPrompt}</p> : null}\n </div>\n );\n}\n","import { useCallback, useRef, useState } from \"react\";\n\nimport type { StreamError, TerminalMessage } from \"./Terminal\";\n\n/**\n * Streaming — the SSE token-by-token consumption layer behind the `Terminal`.\n *\n * Three pieces:\n * - `parseStreamFrame` — a pure SSE-frame parser (`data:` / `event: error` /\n * `[DONE]`) → a discriminated {@link StreamEvent}. Provider error frames map\n * to `{ type: \"error\"; retryable; message }`, never a thrown exception.\n * - `streamFromResponse` — adapts a real `fetch` SSE `Response` body into an\n * `AsyncIterable<StreamEvent>` (wire framing on `\\n\\n`).\n * - `useStreaming` — the React hook: owns the transcript, appends each token to\n * the in-progress assistant turn (re-rendering per token), surfaces retryable\n * vs fatal errors, and clears the streaming flag on close (which removes the\n * Terminal's cursor).\n *\n * The error shape is discriminated on `kind` (`StreamError`) / `type`\n * (`StreamEvent`) rather than a `string | \"ERROR\"` union, so a retryable frame\n * can never be confused with a sentinel string.\n */\n\n/** A parsed event from the SSE stream. */\nexport type StreamEvent =\n | { type: \"token\"; text: string }\n | { type: \"error\"; retryable: boolean; message: string }\n | { type: \"done\" };\n\n/**\n * Parse a single SSE frame (the text between `\\n\\n` separators) into a\n * `StreamEvent`, or `null` if the frame carries no `data:` line. An\n * `event: error` frame whose `data:` is a JSON `{ retryable, message }` becomes\n * a discriminated error event; a `data: [DONE]` sentinel becomes a done event;\n * anything else is a token whose text is the raw `data:` payload.\n */\nexport function parseStreamFrame(frame: string): StreamEvent | null {\n let event = \"message\";\n const dataLines: string[] = [];\n for (const raw of frame.split(\"\\n\")) {\n const line = raw.replace(/\\r$/, \"\");\n if (line.startsWith(\"event:\")) {\n event = line.slice(\"event:\".length).trim();\n } else if (line.startsWith(\"data:\")) {\n dataLines.push(line.slice(\"data:\".length).trim());\n }\n }\n if (dataLines.length === 0) return null;\n\n const data = dataLines.join(\"\\n\");\n if (data === \"[DONE]\") return { type: \"done\" };\n\n if (event === \"error\") {\n try {\n const parsed = JSON.parse(data) as { retryable?: unknown; message?: unknown };\n return {\n type: \"error\",\n retryable: parsed.retryable === true,\n message: typeof parsed.message === \"string\" ? parsed.message : \"Stream error\",\n };\n } catch {\n // A non-JSON error payload is treated as a fatal message.\n return { type: \"error\", retryable: false, message: data };\n }\n }\n\n return { type: \"token\", text: data };\n}\n\n/**\n * Adapt a `fetch` SSE `Response` into an `AsyncIterable<StreamEvent>`. Reads the\n * body reader, decodes incrementally, and splits on the `\\n\\n` SSE frame\n * boundary, yielding one `StreamEvent` per non-empty frame.\n */\nexport async function* streamFromResponse(response: Response): AsyncIterable<StreamEvent> {\n const body = response.body;\n if (body === null) return;\n\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n let sep = buffer.indexOf(\"\\n\\n\");\n while (sep !== -1) {\n const frame = buffer.slice(0, sep);\n buffer = buffer.slice(sep + 2);\n const ev = parseStreamFrame(frame);\n if (ev !== null) yield ev;\n sep = buffer.indexOf(\"\\n\\n\");\n }\n }\n buffer += decoder.decode(); // flush any retained partial multi-byte sequence\n const tail = parseStreamFrame(buffer);\n if (tail !== null) yield tail;\n } finally {\n reader.releaseLock();\n }\n}\n\n/** The state + actions returned by {@link useStreaming}. */\nexport interface UseStreamingResult {\n /** The transcript, oldest first. */\n messages: TerminalMessage[];\n /** True while a stream is in flight (drives the Terminal cursor). */\n streaming: boolean;\n /** The current provider error, or `null`. Retryable → transient; fatal → terminal. */\n error: StreamError | null;\n /** Append a user turn (e.g. from the Composer's `onSend`). */\n send: (text: string) => void;\n /** Consume a parsed event stream, accumulating tokens into a fresh assistant turn. */\n start: (events: AsyncIterable<StreamEvent>) => Promise<void>;\n /** Clear the current error (e.g. before a retry). */\n reset: () => void;\n}\n\n/** Replace the content of the most recent assistant turn (the in-progress one). */\nfunction updateLastAssistant(prev: TerminalMessage[], text: string): TerminalMessage[] {\n const next = prev.slice();\n for (let i = next.length - 1; i >= 0; i -= 1) {\n const m = next[i];\n if (m !== undefined && m.role === \"assistant\") {\n next[i] = { role: \"assistant\", content: text };\n return next;\n }\n }\n return next;\n}\n\n/**\n * Token-by-token streaming state machine. One stream at a time: `start` opens a\n * fresh assistant turn and accumulates tokens into it, re-rendering per token. A\n * retryable error sets a transient indicator but keeps the stream open (the next\n * token clears it); a fatal error terminates the stream and leaves the error for\n * a `Try again` retry. The streaming flag always clears when the iterable ends.\n */\nexport function useStreaming(initial: TerminalMessage[] = []): UseStreamingResult {\n const [messages, setMessages] = useState<TerminalMessage[]>(initial);\n const [streaming, setStreaming] = useState(false);\n const [error, setError] = useState<StreamError | null>(null);\n const activeRef = useRef(false);\n\n const send = useCallback((text: string) => {\n setMessages((prev) => [...prev, { role: \"user\", content: text }]);\n }, []);\n\n const reset = useCallback(() => {\n setError(null);\n }, []);\n\n const start = useCallback(async (events: AsyncIterable<StreamEvent>) => {\n if (activeRef.current) return; // one stream at a time — guard against a concurrent start()\n activeRef.current = true;\n setError(null);\n setStreaming(true);\n setMessages((prev) => [...prev, { role: \"assistant\", content: \"\" }]);\n\n let acc = \"\";\n try {\n for await (const ev of events) {\n if (ev.type === \"token\") {\n acc += ev.text;\n setError(null); // a fresh token clears any transient \"Retrying…\" indicator\n setMessages((prev) => updateLastAssistant(prev, acc));\n } else if (ev.type === \"error\") {\n setError({ kind: \"error\", retryable: ev.retryable, message: ev.message });\n if (!ev.retryable) return; // fatal terminates the stream (finally clears `streaming`)\n // retryable: keep the stream open and await the next token delivery\n } else {\n return; // done\n }\n }\n } finally {\n setStreaming(false);\n activeRef.current = false;\n if (acc === \"\") {\n // The assistant row was added speculatively; if the stream yielded no\n // tokens (empty body, immediate error, closed iterable), prune the blank\n // `stocky ›` row so it does not linger in the transcript.\n setMessages((prev) => {\n const last = prev[prev.length - 1];\n return last !== undefined && last.role === \"assistant\" && last.content === \"\"\n ? prev.slice(0, -1)\n : prev;\n });\n }\n }\n }, []);\n\n return { messages, streaming, error, send, start, reset };\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport type { ReactNode } from \"react\";\n\n/**\n * GroundingFlag — the inline `[source]` / `[unverified]` grounding annotation for\n * AI answers, painted with the shipped `@qball-inc/tokens` grounding surface\n * (`.ground-wave` wave-shimmer + the `.gtip*` explainer bubble) from the\n * `preview/conversation-terminal.html` + `preview/briefing.html` oracles.\n *\n * **Standalone marker, NOT a value wrapper (oracle semantics).** The flag is the\n * small shimmering `[source]`/`[unverified]` label itself; the flagged value\n * (a price, a percent) lives in the surrounding prose — e.g. `NVDA leads [source]\n * at +8.4%`. `children`, when supplied, OVERRIDES the label glyph; it is not a\n * wrapped value.\n *\n * **Shimmer + reduced-motion are shipped CSS, not JS.** The wave-shimmer is the\n * shipped `.ground-wave` + `.ground-wave--{source|unverified}` keyframe; a\n * `@media (prefers-reduced-motion: reduce)` block in the same stylesheet swaps the\n * animation for a static `var(--wave-base)` fill. The component applies BOTH\n * classes (the modifier supplies `--wave-base`/`--wave-hi`); there is no\n * `matchMedia` in here.\n *\n * **Portaled to `<body>` (BINDING, RB-5).** The explainer bubble composes\n * `@radix-ui/react-tooltip` directly, so it portals to `<body>` and Radix's popper\n * keeps it on-screen (collision-clamped) — the same portal-to-body guarantee as the\n * sibling `Tooltip`. We do NOT reuse the shipped `TooltipContent` wrapper:\n * it force-joins `.tip-pop` (the DARK inverted bubble), whereas grounding uses the\n * deliberately LIGHT guardrail bubble. The position-agnostic `.gtip-pop` token class\n * carries that light look minus the parent-anchored `.gtip` positioning (Radix owns\n * placement); `.gtip__k`/`.gtip__src`/`.gtip--{cited,unverified}` descendants compose\n * in unchanged.\n *\n * Self-contained: bundles its own `TooltipProvider`, so it drops into any tree\n * (Terminal message content, a DigestCard narrated number) without app-root setup.\n *\n * <p>NVDA leads <GroundingFlag variant=\"source\" explainer=\"Live last-sale quote.\">\n * <span className=\"gtip__src\">Nasdaq · 3:42pm ET</span>\n * </GroundingFlag> at +8.4%.</p>\n */\n\nexport type GroundingVariant = \"source\" | \"unverified\";\n\nexport interface GroundingFlagProps {\n /** `'source'` renders the cited `[source]` flag; `'unverified'` renders `[unverified]`. */\n variant: GroundingVariant;\n /**\n * The explainer body shown in the hover/focus bubble. Caller-supplied — this\n * component owns the portal/clamp/shimmer, not the copy. A `.gtip__k` kicker\n * (`Source` / `Unverified`) is rendered automatically above it.\n */\n explainer: ReactNode;\n /** Optional override for the shimmer label glyph; defaults to `[source]` / `[unverified]`. */\n children?: ReactNode;\n /** Pin the explainer open (uncontrolled initial state) — useful for docs/specimens. */\n defaultOpen?: boolean;\n}\n\n/** Hover-open delay; focus opens immediately (Radix). */\nconst HOVER_DELAY_MS = 200;\n\nconst DEFAULT_LABEL: Record<GroundingVariant, string> = {\n source: \"[source]\",\n unverified: \"[unverified]\",\n};\n\n/** Kicker shown above the explainer, matching the oracle `.gtip__k`. */\nconst KICKER: Record<GroundingVariant, string> = {\n source: \"Source\",\n unverified: \"Unverified\",\n};\n\n/**\n * Bubble (`.gtip-*`) modifier. The shipped naming is intentionally split: the\n * SHIMMER classes are `.ground-wave--source` / `.ground-wave--unverified`, but the\n * BUBBLE descendant-coloring classes are `.gtip--cited` / `.gtip--unverified`\n * ('cited' is the 'source' semantic). So `variant='source'` → `.gtip--cited`.\n * (There is no `.ground-wave--cited` or `.gtip--source`.)\n */\nconst TIP_MODIFIER: Record<GroundingVariant, string> = {\n source: \"gtip--cited\",\n unverified: \"gtip--unverified\",\n};\n\nexport function GroundingFlag({ variant, explainer, children, defaultOpen }: GroundingFlagProps) {\n return (\n <TooltipPrimitive.Provider delayDuration={HOVER_DELAY_MS}>\n <TooltipPrimitive.Root defaultOpen={defaultOpen ?? false}>\n <TooltipPrimitive.Trigger asChild>\n {/* .gwrap = focusable trigger wrapper; .ground-wave = the inner shimmer\n label (nested per the oracle, so the gradient text-clip runs on a\n plain inline span, not a flex container). */}\n <span className=\"gwrap\" tabIndex={0}>\n <span className={`ground-wave ground-wave--${variant}`}>\n {children ?? DEFAULT_LABEL[variant]}\n </span>\n </span>\n </TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n className={`gtip-pop ${TIP_MODIFIER[variant]}`}\n side=\"top\"\n sideOffset={8}\n collisionPadding={8}\n >\n <span className=\"gtip__k\">{KICKER[variant]}</span>\n {explainer}\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n </TooltipPrimitive.Provider>\n );\n}\n","import Markdown, { defaultUrlTransform } from \"react-markdown\";\nimport type { Components } from \"react-markdown\";\n\n/**\n * MarkdownRenderer — renders streamed assistant text (the Terminal's bot turns)\n * as sanitized, token-styled markdown. Scoped to assistant prose; NOT\n * a general-purpose HTML renderer (the element allowlist is the hard boundary).\n *\n * **Token styling is inherited, not declared (compose the shipped surface).** The\n * renderer emits BARE semantic elements (`<h1>`-`<h4>`, `<p>`, `<blockquote>`,\n * `<code>`, `<pre><code>`, `<a>`, `<em>`, `<strong>`, lists, `<hr>`). The shipped\n * `@qball-inc/tokens` `colors_and_type.css` already styles every one of those bare\n * elements token-backed (`h1,.h1` … `blockquote,.pullquote` … `pre,.codeblock` …\n * `a,.link`), exactly as the `preview/code-block.html` + `preview/pull-quote.html`\n * oracles do. So this component ships ZERO prose CSS, zero hardcoded hex, zero font\n * strings — the styling rides the global stylesheet the consumer already imports.\n * Anchors carry `.link` so the shared sage `:focus-visible` ring applies to prose\n * links (the ring was extended to `.link:focus-visible` in this WP).\n *\n * **Safe-rendering strategy (BINDING, AC-3/AC-4).** No `dangerouslySetInnerHTML`,\n * ever. Three layers, default-deny:\n * 1. No `rehype-raw` + `skipHtml` → raw HTML in the source (`<script>`,\n * `<img onerror>`, `<iframe>`, `<style>`, `<svg onload>`) is never turned into\n * live DOM; it is stripped, not escaped-and-shown.\n * 2. `allowedElements` (the {@link ALLOWED_ELEMENTS} allowlist) → only the scoped\n * prose set can render; anything else is dropped (`unwrapDisallowed` keeps the\n * inner text so content is never silently lost).\n * 3. `urlTransform` → react-markdown's own hardened `defaultUrlTransform`, applied\n * at the prop AND re-applied defensively inside the anchor override. It tests the\n * ENTIRE pre-colon slice against a safe-scheme set, so only http/https/mailto/\n * irc/xmpp and scheme-less (relative/fragment/protocol-relative) URLs survive;\n * `javascript:`/`data:`/`vbscript:` — and control-char or zero-width-prefixed\n * scheme tricks a hand-rolled regex would miss — collapse to an empty href.\n * The dual-assert XSS suite (AC-9) verifies each payload BOTH does not execute\n * (`window.__xss` stays undefined) AND does not appear as a DOM element.\n *\n * **Streaming cursor is the shipped `.term__cursor` (compose, don't re-invent).**\n * When `streaming`, a `.term__cursor` block is appended after the content — the\n * same class the Terminal renders for an in-flight bot turn. Its blink keyframe and\n * the `@media (prefers-reduced-motion: reduce) { animation: none }` static fallback\n * (NFR5) are shipped CSS, so there is no `matchMedia` here and no new cursor rule.\n * (When this renderer is later wired INTO the Terminal in place of its plain-text\n * flatten, the Terminal's own cursor is de-duplicated against this one — a future\n * WP; out of scope here.)\n */\n\n/** The hard scope boundary: only these elements may render. Everything else drops. */\nexport const ALLOWED_ELEMENTS = [\n \"h1\",\n \"h2\",\n \"h3\",\n \"h4\",\n \"p\",\n \"code\",\n \"pre\",\n \"blockquote\",\n \"a\",\n \"em\",\n \"strong\",\n \"ol\",\n \"ul\",\n \"li\",\n \"hr\",\n] as const;\n\n/**\n * Element overrides. Anchors get `.link` (focus-ring + the shipped link token) and a\n * defence-in-depth href re-sanitize. No other element is overridden — the bare tags\n * inherit the shipped prose styles.\n */\nconst MD_COMPONENTS: Components = {\n a: ({ children, href }) => (\n // `urlTransform` (defaultUrlTransform) already ran on this href upstream; we\n // re-apply it here so the anchor stays safe even if that prop is ever removed or\n // its contract changes — a self-contained second barrier on the link sink.\n <a\n className=\"link\"\n href={href === undefined ? undefined : defaultUrlTransform(href)}\n rel=\"noopener noreferrer\"\n >\n {children}\n </a>\n ),\n};\n\nexport interface MarkdownRendererProps {\n /** The markdown source to render (a streamed assistant turn's accumulated text). */\n content: string;\n /** While true, append the shipped `.term__cursor` after the content. Default false. */\n streaming?: boolean;\n /** className merged onto the wrapper. */\n className?: string;\n}\n\nexport function MarkdownRenderer({ content, streaming = false, className }: MarkdownRendererProps) {\n return (\n <div className={className}>\n <Markdown\n allowedElements={ALLOWED_ELEMENTS}\n unwrapDisallowed\n skipHtml\n urlTransform={defaultUrlTransform}\n components={MD_COMPONENTS}\n >\n {content}\n </Markdown>\n {streaming ? (\n <span className=\"term__cursor\" aria-hidden=\"true\" data-testid=\"md-cursor\" />\n ) : null}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { Check, CircleX, Clock, TriangleAlert } from \"../icons/generated\";\n\n/**\n * ToolUseIndicator — the compact, inline lifecycle chip for a skill / tool call\n * inside the AI terminal transcript (the `Terminal`). It names the\n * specific skill (`news-research`, `sec-filings-lookup`, …) and reports the state\n * of its run, so a multi-second tool call never reads as a hang.\n *\n * Built to the **owner-signed-off** design spec\n * (`docs/tool-use-indicator-design.md`) + `preview/tool-use-indicator.html`. It is a\n * transient, status-bearing chip — it reports state, it is NOT a control.\n *\n * **All visuals come from the shipped `@qball-inc/tokens` `.tuf*` classes** (added in\n * Built from the signed-off design — the Terminal/GroundingFlag token-CSS-port\n * precedent). `data-state` drives the per-state color + tint; the color flows to the\n * leading glyph + verb via `currentColor`. There is no component CSS and no hardcoded\n * color (FR4 / DESIGN_DENY-clean — flat tonal tints, no elevation).\n *\n * **Glyph = the primary non-color cue (FR4).** Each state carries a distinct leading\n * glyph — an inline SVG (Lucide geometry, stroke 1.5, 16px; matching the ThemeToggle /\n * StateFig inline-SVG precedent, NOT a `lucide-react` import) — except `running`, which\n * reuses the shipped `.spinner` (the one sanctioned loop) or, in `streaming` mode, the\n * shipped `.term__cursor` blink. `partial` (caution gold) ALWAYS pairs its color with\n * the glyph AND the literal verb word, so color never carries the meaning alone.\n *\n * **Reduced-motion is shipped CSS, not JS.** The `.spinner`, `.term__cursor`, and `.tuf`\n * appear/cross-fade all stop under `@media (prefers-reduced-motion: reduce)` in the token\n * stylesheet; the state stays fully legible from the static glyph + color + label. There\n * is no `matchMedia` in here (the Skeleton / GroundingFlag contract).\n *\n * `idle` renders nothing — the chip is absent/collapsed (the approved \"absent or\n * collapsed\" latitude); no looping idle animation.\n *\n * <ToolUseIndicator state=\"running\" skill=\"news-research\" meta=\"3.1s\" />\n * <ToolUseIndicator state=\"partial\" skill=\"news-research\" meta=\"rate-limited\" />\n * <ToolUseIndicator state=\"running\" streaming>analyzing filings</ToolUseIndicator>\n */\n\nexport type ToolUseState = \"idle\" | \"pending\" | \"running\" | \"success\" | \"error\" | \"partial\";\n\nexport interface ToolUseIndicatorProps {\n /** Lifecycle state. `idle` renders nothing (the chip is absent/collapsed). */\n state: ToolUseState;\n /** The skill / tool id, e.g. `\"news-research\"`. Rendered before the state verb. */\n skill?: string;\n /**\n * Override the state verb (the default per state: queued / running / done /\n * failed / partial). Ignored when `children` supplies a free-form label. For\n * `state=\"partial\"`, keep a caution word (\"partial\" / \"rate-limited\") so the\n * FR4 non-color cue survives — the glyph is always present, but the word\n * reinforces it; never suppress the text cue entirely.\n */\n verb?: string;\n /** Optional trailing meta — elapsed time, result count, or `\"rate-limited\"`. */\n meta?: ReactNode;\n /**\n * `running` only: render the streaming text-cursor (the shipped `.term__cursor`)\n * after the label instead of the leading `.spinner` glyph — for the\n * SSE-token-streaming variant.\n */\n streaming?: boolean;\n /**\n * Free-form label override (e.g. `\"analyzing filings\"`). When supplied, it\n * replaces the constructed `{skill} · {verb}` label. `null`/`undefined` both\n * fall through to the constructed label, so a conditional `children` never\n * yields an empty chip.\n */\n children?: ReactNode;\n /** Merged onto the `.tuf` root. */\n className?: string;\n}\n\n/** Default state verb when `verb` / `children` are not supplied. */\nconst DEFAULT_VERB: Record<Exclude<ToolUseState, \"idle\">, string> = {\n pending: \"queued\",\n running: \"running\",\n success: \"done\",\n error: \"failed\",\n partial: \"partial\",\n};\n\n/**\n * The leading glyph for a state — the B2 generated status icons (16px, the\n * `.tuf__glyph` wrapper sizes them via the shipped CSS): pending → clock, success →\n * check, error → circle-x, partial → triangle-alert. `running` (non-streaming)\n * reuses the shipped `.spinner`; `running` + `streaming` has no leading glyph (the\n * `.term__cursor` trails the label instead). Returns `null` when no leading glyph\n * applies. The glyph is the primary FR4 non-color cue.\n */\nfunction leadingGlyph(state: Exclude<ToolUseState, \"idle\">, streaming: boolean): ReactNode {\n switch (state) {\n case \"pending\":\n return <Clock size={16} />;\n case \"running\":\n return streaming ? null : <span className=\"spinner spinner--sm\" aria-hidden />;\n case \"success\":\n return <Check size={16} />;\n case \"error\":\n return <CircleX size={16} />;\n case \"partial\":\n return <TriangleAlert size={16} />;\n }\n}\n\nexport function ToolUseIndicator({\n state,\n skill,\n verb,\n meta,\n streaming = false,\n children,\n className,\n}: ToolUseIndicatorProps) {\n // idle: the chip is absent/collapsed — no active indicator (approved latitude).\n if (state === \"idle\") return null;\n\n const glyph = leadingGlyph(state, streaming);\n const resolvedVerb = verb ?? DEFAULT_VERB[state];\n const cls = [\"tuf\", className].filter(Boolean).join(\" \");\n\n return (\n // role=status: announce the async tool call's lifecycle politely to assistive\n // tech (pending → running → success/error) from the visible text label.\n // (aria-busy is intentionally not on the chip — it lives on the parent\n // Terminal region, which owns the \"a response is in progress\" state.)\n <span className={cls} data-state={state} role=\"status\">\n {glyph !== null ? <span className=\"tuf__glyph\">{glyph}</span> : null}\n <span className=\"tuf__label\">\n {children ?? (\n <>\n {skill !== undefined && skill !== \"\" ? `${skill} · ` : null}\n <span className=\"tuf__verb\">{resolvedVerb}</span>\n </>\n )}\n {state === \"running\" && streaming ? <span className=\"term__cursor\" aria-hidden /> : null}\n </span>\n {meta !== undefined ? <span className=\"tuf__meta\">{meta}</span> : null}\n </span>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { EmptyStateFig } from \"../overlay/StateFig\";\nimport { Skeleton } from \"../overlay/Skeleton\";\n\n/**\n * DigestCard — the LLM market-briefing / digest card, painted with the shipped\n * `@qball-inc/tokens` `.digest` family from the `preview/briefing.html` oracle.\n *\n * A briefing is a self-contained `<article>` with an eyebrow period, a headline,\n * a prose body, and a footer (timestamp + actions). Four states, controlled by\n * `state`:\n * - `unread` — `.digest--unread` (sage left-border) + a visible sage `.digest__dot`.\n * - `read` — `.digest--read` (dimmed); NO dot.\n * - `loading` — composes the shipped {@link Skeleton} placeholders in the digest layout.\n * - `empty` — composes the shipped {@link EmptyStateFig} (\"no briefings yet\").\n *\n * **Pure className wrapper (S70 D-08).** Every visual comes from the shipped\n * `.digest*` token CSS — there is no component CSS and no hardcoded color (FR4 /\n * DESIGN_DENY-clean — flat tonal tints, no elevation). The sage accent (dot +\n * border) is delivered by the `.digest__dot`\n * / `.digest--unread` classes (which resolve `var(--color-signal)`, the sage\n * token), so the component inlines no color of its own.\n *\n * **The sage dot is the non-color cue (FR4).** It is rendered ONLY in the `unread`\n * state — its DOM presence/absence (not its color) signals unread vs read, so the\n * status survives a monochrome rendering. (The oracle hides the read dot via CSS,\n * but jsdom can't observe external CSS, so we render it conditionally instead.)\n *\n * **Grounding is composed by the caller, not owned here.** A narrated number in the\n * body is annotated by dropping a {@link GroundingFlag} marker inline in `children`,\n * NEXT TO the value (the oracle: `NVDA leads [source] at +8.4%`). DigestCard is the\n * host; it does not wrap values itself.\n *\n * <DigestCard state=\"unread\" period=\"Morning briefing · 30 May\"\n * title=\"Your watchlist is up 1.8% pre-open\" time=\"Generated 7:02am ET\">\n * <b>NVDA</b> leads{\" \"}\n * <GroundingFlag variant=\"source\" explainer=\"Live last-sale quote.\">\n * <span className=\"gtip__src\">Nasdaq · 3:42pm ET</span>\n * </GroundingFlag>{\" \"}\n * at <b>+8.4%</b> on the week.\n * </DigestCard>\n */\n\nexport type DigestState = \"unread\" | \"read\" | \"loading\" | \"empty\";\n\nexport interface DigestCardProps {\n /** Display state. */\n state: DigestState;\n /** Eyebrow line, e.g. `\"Morning briefing · 30 May\"` (`.digest__period`). unread/read. */\n period?: ReactNode;\n /** Headline (`.digest__title`). unread/read. */\n title?: ReactNode;\n /** Body prose (`.digest__body`). Compose `<GroundingFlag>` markers inline. unread/read. */\n children?: ReactNode;\n /** Footer timestamp (`.digest__time`). unread/read. */\n time?: ReactNode;\n /** Footer actions slot (`.digest__actions`) — e.g. ghost icon buttons. unread/read. */\n actions?: ReactNode;\n /** `empty` state: icon node for the EmptyStateFig (e.g. an inline SVG). */\n emptyIcon?: ReactNode;\n /** `empty` state: headline. Default `\"No briefings yet\"`. */\n emptyTitle?: ReactNode;\n /** `empty` state: supporting line. */\n emptyBody?: ReactNode;\n /** `empty` state: optional CTA (e.g. a `<Button>`). */\n emptyAction?: ReactNode;\n /** Merged onto the `.digest` root. */\n className?: string;\n}\n\nfunction join(...parts: (string | false | undefined)[]): string {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport function DigestCard({\n state,\n period,\n title,\n children,\n time,\n actions,\n emptyIcon,\n emptyTitle,\n emptyBody,\n emptyAction,\n className,\n}: DigestCardProps) {\n if (state === \"loading\") {\n // Composes the shipped Skeleton (which inherits the token reduced-motion rule),\n // mirroring the digest layout so the card doesn't jump on load. aria-busy\n // announces the loading region (Skeletons are individually aria-hidden).\n return (\n <article className={join(\"digest\", className)} aria-busy>\n <div className=\"digest__head\">\n <Skeleton shape=\"circle\" width={7} height={7} />\n <Skeleton width={140} height={9} />\n </div>\n <Skeleton shape=\"title\" width=\"70%\" />\n <div className=\"digest__skel\">\n <Skeleton shape=\"text\" width=\"100%\" />\n <Skeleton shape=\"text\" width=\"96%\" />\n <Skeleton shape=\"text\" width=\"62%\" />\n </div>\n {/* footer-timestamp placeholder — mirrors the oracle so the card height\n (and the footer row) doesn't jump when the real briefing loads. */}\n <Skeleton width={120} height={9} style={{ marginTop: 2 }} />\n </article>\n );\n }\n\n if (state === \"empty\") {\n // Composes the shipped EmptyStateFig (self-centered figure) inside the card.\n return (\n <article className={join(\"digest\", className)}>\n <EmptyStateFig\n icon={emptyIcon}\n title={emptyTitle ?? \"No briefings yet\"}\n body={emptyBody}\n action={emptyAction}\n />\n </article>\n );\n }\n\n const isUnread = state === \"unread\";\n const hasFoot = time !== undefined || actions !== undefined;\n\n return (\n <article className={join(\"digest\", isUnread ? \"digest--unread\" : \"digest--read\", className)}>\n <div className=\"digest__head\">\n {/* Dot rendered ONLY for unread — its presence is the non-color cue (FR4). */}\n {isUnread ? <span className=\"digest__dot\" data-testid=\"digest-dot\" aria-hidden /> : null}\n {period !== undefined ? <span className=\"digest__period\">{period}</span> : null}\n </div>\n {/* `<p>` (not a fixed heading level) so the card never disturbs the consumer's\n document outline — the StateFig title precedent; the class styles it. */}\n {title !== undefined ? <p className=\"digest__title\">{title}</p> : null}\n {children !== undefined ? <p className=\"digest__body\">{children}</p> : null}\n {hasFoot ? (\n <div className=\"digest__foot\">\n {time !== undefined ? <span className=\"digest__time\">{time}</span> : null}\n {actions !== undefined ? <div className=\"digest__actions\">{actions}</div> : null}\n </div>\n ) : null}\n </article>\n );\n}\n","/**\n * Runtime token reader for the canvas backgrounds. A `<canvas>` cannot reference a\n * `var(--token)` the way CSS does — it needs a concrete color string — so these\n * primitives resolve the design-system tokens at paint time via `getComputedStyle`.\n *\n * **Token-only, no hardcoded fallbacks (owner decision S91).** The\n * design system treats its token stylesheet as a hard import contract, and the\n * library keeps zero hardcoded color literals in component source (RB-8 / the\n * `DESIGN_DENY` lint rule). So a missing token resolves to an empty string and the\n * caller skips the draw, rather than falling back to a baked-in hex that could\n * drift from the token source of truth. The font is the one exception the rule\n * allows: a `font-family` string is not a color, so it carries a Fira Code public\n * default (which is exactly what `--font-display` ships as).\n */\nexport interface BackgroundStyles {\n /** `--color-signal` (sage) resolved, or `\"\"` if the token stylesheet is absent. */\n signal: string;\n /** `--color-highlight` (amber) resolved, or `\"\"`. */\n highlight: string;\n /** `--font-display` resolved, or the `\"Fira Code\", monospace` public default. */\n font: string;\n}\n\n/**\n * Reads the background tokens off `:root` at paint time. Called once per animation\n * frame (intentionally) so a host theme flip is reflected live; a single\n * `getComputedStyle` on the document element is cheap enough for a decorative\n * background.\n */\nexport function readBackgroundStyles(): BackgroundStyles {\n const cs = getComputedStyle(document.documentElement);\n const read = (name: string): string => cs.getPropertyValue(name).trim();\n return {\n signal: read(\"--color-signal\"),\n highlight: read(\"--color-highlight\"),\n font: read(\"--font-display\") || '\"Fira Code\", monospace',\n };\n}\n","import { useEffect, useRef, type DependencyList } from \"react\";\n\n/**\n * The per-frame context handed to a {@link CanvasDraw} callback. Sizes are in CSS\n * pixels (the draw callback works in CSS-pixel space; the hook has already applied\n * the device-pixel-ratio transform to the context).\n */\nexport interface CanvasFrame {\n /** Seconds elapsed since the animation started. */\n t: number;\n /** CSS-pixel width of the canvas (from `getBoundingClientRect`). */\n w: number;\n /** CSS-pixel height of the canvas. */\n h: number;\n /**\n * `true` when the user prefers reduced motion. The hook draws a single static\n * frame in that case (see the hook docs); a draw callback should additionally\n * zero any time-derived motion so the one frame it paints is still.\n */\n reduceMotion: boolean;\n}\n\n/** A draw callback: paints one frame onto a 2D context. */\nexport type CanvasDraw = (ctx: CanvasRenderingContext2D, frame: CanvasFrame) => void;\n\n/**\n * `useCanvas2D` — a DPR-aware (capped at 2×), `ResizeObserver`-refit driver for an\n * animated `<canvas>`. Returns a ref to attach to a `<canvas>` element.\n *\n * **SSR/static-safe.** Every canvas / `window` / `ResizeObserver` access lives\n * inside the effect, so the host component renders an inert `<canvas>` on the\n * server and only begins drawing after hydration. If the 2D context is\n * unavailable (server, jsdom without a canvas mock, or a browser without canvas),\n * the hook no-ops — the `<canvas>` still renders, nothing throws.\n *\n * **Honors `prefers-reduced-motion` as a TRUE short-circuit.** When reduced motion\n * is requested the hook paints exactly one static frame and starts **no** animation\n * loop (`requestAnimationFrame` is never called). A later resize repaints that one\n * frame so the canvas is never left blank. This differs from the original port,\n * which kept the rAF loop spinning on a frozen frame.\n *\n * **No leaked work (RB-4).** The effect cleanup flips the running flag, cancels any\n * pending frame, and disconnects the `ResizeObserver`, so no loop, frame, or\n * observer survives an unmount or a dependency change.\n *\n * @param draw Per-frame paint callback. Read theme/colors/state fresh inside it.\n * @param deps Dependencies that re-key the effect (default `[]`). The draw closure\n * reads its inputs fresh each frame, so most backgrounds pass none.\n */\nexport function useCanvas2D(draw: CanvasDraw, deps: DependencyList = []) {\n const ref = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n const canvas = ref.current;\n if (!canvas) return;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) return; // inert in non-canvas environments (server / jsdom / no-2d)\n\n let rafId = 0;\n let running = true;\n const t0 = performance.now();\n const reduceMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\n const renderFrame = (now: number) => {\n const { width, height } = canvas.getBoundingClientRect();\n // Clear the full backing store in DEVICE pixels. The active transform is\n // DPR-scaled, so a CSS-pixel clearRect can leave a sub-pixel edge uncleared\n // on fractional widths (visible as trails on a 2× display) — reset to\n // identity, clear the whole store, then restore the DPR transform.\n ctx.save();\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n draw(ctx, { t: (now - t0) / 1000, w: width, h: height, reduceMotion });\n };\n\n const fit = () => {\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n const { width, height } = canvas.getBoundingClientRect();\n canvas.width = Math.max(1, Math.floor(width * dpr));\n canvas.height = Math.max(1, Math.floor(height * dpr));\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n };\n fit();\n\n // A canvas is cleared by a resize. Under reduced motion there is no loop to\n // repaint, so re-render the single static frame after each re-fit.\n const ro = new ResizeObserver(() => {\n fit();\n if (reduceMotion) renderFrame(performance.now());\n });\n ro.observe(canvas);\n\n if (reduceMotion) {\n renderFrame(performance.now());\n } else {\n const loop = (now: number) => {\n if (!running) return;\n renderFrame(now);\n rafId = requestAnimationFrame(loop);\n };\n rafId = requestAnimationFrame(loop);\n }\n\n return () => {\n running = false;\n cancelAnimationFrame(rafId);\n ro.disconnect();\n };\n }, deps);\n\n return ref;\n}\n","import { readBackgroundStyles } from \"./tokens\";\nimport type { BackgroundProps } from \"./types\";\nimport { useCanvas2D } from \"./useCanvas2D\";\n\n/**\n * `GridBg` — a slowly pulsing dot matrix in the signal (sage) token color, faded\n * toward the top-left so an overlaid headline stays readable. A decorative,\n * `aria-hidden` `<canvas>` background.\n *\n * Token-driven (reads `--color-signal` at paint time; draws nothing if the token\n * stylesheet is absent). Honors `prefers-reduced-motion` via {@link useCanvas2D} —\n * one static frame, no animation loop. Brand rule: signal color only, very slow,\n * no spring.\n */\nexport function GridBg(props: BackgroundProps) {\n const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {\n const { signal } = readBackgroundStyles();\n if (!signal) return; // token-only: no hardcoded fallback (skip if unloaded)\n ctx.fillStyle = signal;\n\n const step = 28;\n const cols = Math.ceil(w / step);\n const rows = Math.ceil(h / step);\n // Soft offset so the grid isn't aligned to pixel 0.\n const offX = (w - cols * step) / 2;\n const offY = (h - rows * step) / 2;\n\n for (let i = 0; i < cols; i++) {\n for (let j = 0; j < rows; j++) {\n const x = offX + i * step + step / 2;\n const y = offY + j * step + step / 2;\n\n // Slow pseudo-noise from a couple of sines; static under reduced motion.\n const tt = reduceMotion ? 0 : t * 0.15;\n const n =\n Math.sin(i * 0.31 + j * 0.21 + tt) * 0.5 + Math.sin(i * 0.13 - j * 0.41 + tt * 0.7) * 0.5;\n // Falloff toward the top-left to keep an overlaid headline readable.\n const focal = 1 - Math.min(1, Math.max(0, (1 - x / w) * 0.7 + (1 - y / h) * 0.7));\n const a = Math.max(0, n * 0.5 + 0.5) * 0.35 * focal;\n if (a < 0.02) continue;\n\n ctx.globalAlpha = a;\n const r = 1.1 + Math.max(0, n) * 0.9;\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n ctx.globalAlpha = 1;\n });\n\n return <canvas {...props} ref={ref} aria-hidden=\"true\" />;\n}\n","import { useRef } from \"react\";\n\nimport { readBackgroundStyles } from \"./tokens\";\nimport type { BackgroundProps } from \"./types\";\nimport { useCanvas2D } from \"./useCanvas2D\";\n\n/** One falling column of mono glyphs. */\ninterface AsciiColumn {\n x: number;\n head: number;\n speed: number;\n len: number;\n glyphs: string[];\n}\n\ninterface AsciiState {\n /** Canvas width the columns were laid out for (relaid out if it changes). */\n w: number;\n cols: AsciiColumn[];\n /** Last frame time (seconds) — used to derive a frame-rate-independent delta. */\n lastT: number;\n}\n\nconst ASCII_CHARS = \"01·→/\\\\><+=-:.\";\n\n/**\n * `AsciiBg` — slow falling streams of mono characters: bright amber (highlight) at\n * each column head fading to sage (signal) down the tail. A decorative,\n * `aria-hidden` `<canvas>` background.\n *\n * Token-driven (reads `--color-signal`, `--color-highlight`, and `--font-display`\n * at paint time; draws nothing if the color tokens are absent). The glyph font is\n * the design-system display font (`--font-display`), falling back to the public\n * Fira Code default — never the private commercial display face. Honors\n * `prefers-reduced-motion` via {@link useCanvas2D} (one static frame, no loop).\n */\nexport function AsciiBg(props: BackgroundProps) {\n const stateRef = useRef<AsciiState | null>(null);\n\n const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {\n const { signal, highlight, font } = readBackgroundStyles();\n if (!signal || !highlight) return; // token-only: no hardcoded fallback\n\n const colW = 14; // column spacing — tighter for density\n const lineH = 20; // row spacing\n\n // Initialize columns lazily; relay out if the width changed materially.\n if (!stateRef.current || Math.abs(stateRef.current.w - w) > colW) {\n const nCols = Math.floor(w / colW);\n const cols: AsciiColumn[] = [];\n for (let i = 0; i < nCols; i++) {\n // Dense — keep ~85% of columns active.\n if (Math.random() > 0.85) continue;\n cols.push({\n x: i * colW + colW / 2,\n head: Math.random() * h,\n speed: 10 + Math.random() * 22, // px/sec — slow but varied\n len: 10 + Math.floor(Math.random() * 18),\n glyphs: Array.from({ length: 30 }, () =>\n ASCII_CHARS.charAt(Math.floor(Math.random() * ASCII_CHARS.length)),\n ),\n });\n }\n stateRef.current = { w, cols, lastT: t };\n }\n\n // Frame-rate-independent delta (px/sec speeds × seconds), clamped to absorb a\n // tab-switch gap; zero under reduced motion.\n const dt = reduceMotion ? 0 : Math.min(0.05, t - stateRef.current.lastT);\n stateRef.current.lastT = t;\n // Glyph cycling is itself motion — freeze the cycle index under reduced motion.\n const cycle = reduceMotion ? 0 : Math.floor(t * 2);\n ctx.font = `400 13px ${font}`;\n ctx.textBaseline = \"top\";\n\n for (const col of stateRef.current.cols) {\n col.head += col.speed * dt;\n if (col.head - col.len * lineH > h) {\n col.head = -Math.random() * 200;\n }\n for (let k = 0; k < col.len; k++) {\n const y = col.head - k * lineH;\n if (y < -lineH || y > h) continue;\n // Brightest at the head, fading toward the tail.\n const fade = 1 - k / col.len;\n const focal = 0.45 + 0.55 * Math.min(1, y / h);\n ctx.globalAlpha = 0.55 * fade * focal;\n ctx.fillStyle = k === 0 ? highlight : signal;\n const g = col.glyphs[(k + cycle) % col.glyphs.length] ?? \"\";\n ctx.fillText(g, col.x, y);\n }\n }\n ctx.globalAlpha = 1;\n });\n\n return <canvas {...props} ref={ref} aria-hidden=\"true\" />;\n}\n","import { useRef } from \"react\";\n\nimport { readBackgroundStyles } from \"./tokens\";\nimport type { BackgroundProps } from \"./types\";\nimport { useCanvas2D } from \"./useCanvas2D\";\n\n/** One drifting glyph in the constellation. */\ninterface Glyph {\n g: string;\n x: number;\n y: number;\n vx: number;\n vy: number;\n size: number;\n highlight: boolean;\n base: number;\n phase: number;\n}\n\ninterface GlyphsState {\n /** Canvas width the constellation was laid out for. */\n w: number;\n items: Glyph[];\n /** Last frame time (seconds) — used to derive a clamped delta. */\n lastT: number;\n}\n\nconst GLYPHS = [\"→\", \"↳\", \"/\", \"\\\\\", \"·\", \"<\", \">\", \"+\", \"*\", \"∞\", \"◇\"];\n\n/**\n * `GlyphsBg` — brand glyphs drifting slowly like a constellation, mostly in the\n * signal (sage) token color with roughly one in six in amber (highlight), each\n * breathing in opacity. A decorative, `aria-hidden` `<canvas>` background.\n *\n * Token-driven (reads `--color-signal`, `--color-highlight`, and `--font-display`\n * at paint time; draws nothing if the color tokens are absent). The glyph font is\n * the design-system display font (`--font-display`), falling back to the public\n * Fira Code default — never the private commercial display face. Honors\n * `prefers-reduced-motion` via {@link useCanvas2D} (one static frame, no loop).\n */\nexport function GlyphsBg(props: BackgroundProps) {\n const stateRef = useRef<GlyphsState | null>(null);\n\n const ref = useCanvas2D((ctx, { t, w, h, reduceMotion }) => {\n const { signal, highlight, font } = readBackgroundStyles();\n if (!signal || !highlight) return; // token-only: no hardcoded fallback\n\n if (!stateRef.current || Math.abs(stateRef.current.w - w) > 8) {\n const n = Math.min(28, Math.max(14, Math.floor((w * h) / 60000)));\n const items: Glyph[] = [];\n for (let i = 0; i < n; i++) {\n items.push({\n g: GLYPHS[Math.floor(Math.random() * GLYPHS.length)] ?? \"·\",\n x: Math.random() * w,\n y: Math.random() * h,\n vx: (Math.random() - 0.5) * 4, // very slow drift, px/sec\n vy: (Math.random() - 0.5) * 4,\n size: 14 + Math.random() * 36,\n highlight: Math.random() < 0.18, // ~1 in 6 is amber\n base: 0.18 + Math.random() * 0.22,\n phase: Math.random() * Math.PI * 2,\n });\n }\n stateRef.current = { w, items, lastT: t };\n }\n\n const dt = reduceMotion ? 0 : Math.min(0.05, t - stateRef.current.lastT);\n stateRef.current.lastT = t;\n // Freeze the opacity \"breathing\" too, so the reduced-motion frame is static.\n const tt = reduceMotion ? 0 : t;\n\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"center\";\n for (const it of stateRef.current.items) {\n it.x += it.vx * dt;\n it.y += it.vy * dt;\n // Wrap edges with a soft margin.\n const m = 60;\n if (it.x < -m) it.x = w + m;\n if (it.x > w + m) it.x = -m;\n if (it.y < -m) it.y = h + m;\n if (it.y > h + m) it.y = -m;\n\n ctx.globalAlpha = it.base * (0.6 + 0.4 * Math.sin(tt * 0.4 + it.phase));\n ctx.fillStyle = it.highlight ? highlight : signal;\n ctx.font = `300 ${it.size}px ${font}`;\n ctx.fillText(it.g, it.x, it.y);\n }\n ctx.globalAlpha = 1;\n });\n\n return <canvas {...props} ref={ref} aria-hidden=\"true\" />;\n}\n","// AUTO-GENERATED by scripts/generate-icons.mjs from src/icons/manifest.json. Do not edit.\nimport type { ComponentType } from \"react\";\nimport type { IconProps } from \"../icon-props\";\nimport { ChevronUp } from \"./ui/chevron-up\";\nimport { ChevronDown } from \"./ui/chevron-down\";\nimport { ChevronLeft } from \"./ui/chevron-left\";\nimport { ChevronRight } from \"./ui/chevron-right\";\nimport { ArrowUp } from \"./ui/arrow-up\";\nimport { ArrowDown } from \"./ui/arrow-down\";\nimport { ArrowLeft } from \"./ui/arrow-left\";\nimport { ArrowRight } from \"./ui/arrow-right\";\nimport { ArrowUpRight } from \"./ui/arrow-up-right\";\nimport { ArrowUpLeft } from \"./ui/arrow-up-left\";\nimport { ArrowDownRight } from \"./ui/arrow-down-right\";\nimport { ArrowDownLeft } from \"./ui/arrow-down-left\";\nimport { ExternalLink } from \"./ui/external-link\";\nimport { Menu } from \"./ui/menu\";\nimport { X } from \"./ui/x\";\nimport { SearchIcon } from \"./ui/search\";\nimport { Plus } from \"./ui/plus\";\nimport { Minus } from \"./ui/minus\";\nimport { SquarePen } from \"./ui/square-pen\";\nimport { Trash2 } from \"./ui/trash-2\";\nimport { Download } from \"./ui/download\";\nimport { Upload } from \"./ui/upload\";\nimport { Copy } from \"./ui/copy\";\nimport { Share2 } from \"./ui/share-2\";\nimport { Funnel } from \"./ui/funnel\";\nimport { ArrowUpDown } from \"./ui/arrow-up-down\";\nimport { Settings } from \"./ui/settings\";\nimport { RefreshCw } from \"./ui/refresh-cw\";\nimport { Check } from \"./ui/check\";\nimport { Send } from \"./ui/send\";\nimport { Eye } from \"./ui/eye\";\nimport { EyeOff } from \"./ui/eye-off\";\nimport { Bell } from \"./ui/bell\";\nimport { BellOff } from \"./ui/bell-off\";\nimport { Ellipsis } from \"./ui/ellipsis\";\nimport { EllipsisVertical } from \"./ui/ellipsis-vertical\";\nimport { Save } from \"./ui/save\";\nimport { Info } from \"./ui/info\";\nimport { TriangleAlert } from \"./ui/triangle-alert\";\nimport { CircleX } from \"./ui/circle-x\";\nimport { CircleCheck } from \"./ui/circle-check\";\nimport { CircleCheckBig } from \"./ui/circle-check-big\";\nimport { Clock } from \"./ui/clock\";\nimport { Loader } from \"./ui/loader\";\nimport { Sun } from \"./ui/sun\";\nimport { Moon } from \"./ui/moon\";\nimport { Lock } from \"./ui/lock\";\nimport { LockOpen } from \"./ui/lock-open\";\nimport { CircleQuestionMark } from \"./ui/circle-question-mark\";\nimport { Ban } from \"./ui/ban\";\nimport { CheckCheck } from \"./ui/check-check\";\nimport { OctagonAlert } from \"./ui/octagon-alert\";\nimport { Play } from \"./ui/play\";\nimport { Pause } from \"./ui/pause\";\nimport { Square } from \"./ui/square\";\nimport { Globe } from \"./ui/globe\";\nimport { Image } from \"./ui/image\";\nimport { File } from \"./ui/file\";\nimport { Link } from \"./ui/link\";\nimport { Package } from \"./ui/package\";\nimport { Rocket } from \"./ui/rocket\";\nimport { Grid3x3 } from \"./ui/grid-3x3\";\nimport { NotebookPen } from \"./ui/notebook-pen\";\nimport { CodeXml } from \"./ui/code-xml\";\nimport { TrendingUp } from \"./ui/trending-up\";\nimport { TrendingDown } from \"./ui/trending-down\";\nimport { ChartLine } from \"./ui/chart-line\";\nimport { ChartColumn } from \"./ui/chart-column\";\nimport { ChartCandlestick } from \"./ui/chart-candlestick\";\nimport { ChartPie } from \"./ui/chart-pie\";\nimport { Wallet } from \"./ui/wallet\";\nimport { Briefcase } from \"./ui/briefcase\";\nimport { Calendar } from \"./ui/calendar\";\nimport { Bookmark } from \"./ui/bookmark\";\nimport { Percent } from \"./ui/percent\";\nimport { DollarSign } from \"./ui/dollar-sign\";\nimport { Activity } from \"./ui/activity\";\nimport { Target } from \"./ui/target\";\nimport { Scale } from \"./ui/scale\";\nimport { Banknote } from \"./ui/banknote\";\nimport { AiSparkle } from \"./ai/ai-sparkle\";\nimport { Bot } from \"./ai/bot\";\nimport { BotMessageSquare } from \"./ai/bot-message-square\";\nimport { Cpu } from \"./ai/cpu\";\nimport { AgentStocky } from \"../ai/agent-stocky\";\nimport { AgentOrb } from \"../ai/agent-orb\";\nimport { AgentDroid } from \"../ai/agent-droid\";\nimport { AgentHex } from \"../ai/agent-hex\";\nimport { GitHub } from \"./brand/github\";\nimport { NPM } from \"./brand/npm\";\nimport { Figma } from \"./brand/figma\";\nimport { Notion } from \"./brand/notion\";\nimport { Vercel } from \"./brand/vercel\";\nimport { ChromeWebStore } from \"./brand/chromestore\";\nimport { VSCode } from \"../brand/vscode\";\nimport { Linear } from \"./brand/linear\";\nimport { LinkedIn } from \"../brand/linkedin\";\nimport { XTwitter } from \"./brand/x-twitter\";\nimport { YouTube } from \"./brand/youtube\";\nimport { Google } from \"./brand/google\";\nimport { Reddit } from \"./brand/reddit\";\nimport { OpenAI } from \"../brand/openai\";\nimport { Anthropic } from \"./brand/anthropic\";\nimport { Claude } from \"./brand/claude\";\nimport { Gemini } from \"./brand/gemini\";\nimport { DeepSeek } from \"./brand/deepseek\";\nimport { Moonshot } from \"./brand/moonshot\";\nimport { GLM } from \"../brand/glm\";\nimport { Mistral } from \"./brand/mistral\";\nimport { Perplexity } from \"./brand/perplexity\";\nimport { HuggingFace } from \"./brand/huggingface\";\nimport { Ollama } from \"./brand/ollama\";\nimport { Qwen } from \"./brand/qwen\";\nimport { Meta } from \"./brand/meta\";\n\n/** Every shipped icon name (canonical + aliases). A 1.0 stability contract. */\nexport type IconName =\n | \"chevron-up\"\n | \"chevron-down\"\n | \"chevron-left\"\n | \"chevron-right\"\n | \"arrow-up\"\n | \"arrow-down\"\n | \"arrow-left\"\n | \"arrow-right\"\n | \"arrow-up-right\"\n | \"arrow-up-left\"\n | \"arrow-down-right\"\n | \"arrow-down-left\"\n | \"external-link\"\n | \"menu\"\n | \"x\"\n | \"search\"\n | \"plus\"\n | \"minus\"\n | \"square-pen\"\n | \"trash-2\"\n | \"download\"\n | \"upload\"\n | \"copy\"\n | \"share-2\"\n | \"funnel\"\n | \"filter\"\n | \"arrow-up-down\"\n | \"settings\"\n | \"refresh-cw\"\n | \"check\"\n | \"send\"\n | \"eye\"\n | \"eye-off\"\n | \"bell\"\n | \"bell-off\"\n | \"ellipsis\"\n | \"ellipsis-vertical\"\n | \"save\"\n | \"info\"\n | \"triangle-alert\"\n | \"circle-x\"\n | \"circle-check\"\n | \"circle-check-big\"\n | \"clock\"\n | \"loader\"\n | \"sun\"\n | \"moon\"\n | \"lock\"\n | \"lock-open\"\n | \"circle-question-mark\"\n | \"circle-help\"\n | \"ban\"\n | \"check-check\"\n | \"octagon-alert\"\n | \"play\"\n | \"pause\"\n | \"square\"\n | \"globe\"\n | \"image\"\n | \"file\"\n | \"link\"\n | \"package\"\n | \"rocket\"\n | \"grid-3x3\"\n | \"notebook-pen\"\n | \"code-xml\"\n | \"trending-up\"\n | \"trending-down\"\n | \"chart-line\"\n | \"chart-column\"\n | \"chart-candlestick\"\n | \"chart-pie\"\n | \"wallet\"\n | \"briefcase\"\n | \"calendar\"\n | \"bookmark\"\n | \"percent\"\n | \"dollar-sign\"\n | \"activity\"\n | \"target\"\n | \"scale\"\n | \"banknote\"\n | \"ai-sparkle\"\n | \"bot\"\n | \"bot-message-square\"\n | \"cpu\"\n | \"agent-stocky\"\n | \"agent-orb\"\n | \"agent-droid\"\n | \"agent-hex\";\n\n/** Runtime list of every IconName — the contract surface for dynamic name use. */\nexport const ICON_NAMES = [\n \"chevron-up\",\n \"chevron-down\",\n \"chevron-left\",\n \"chevron-right\",\n \"arrow-up\",\n \"arrow-down\",\n \"arrow-left\",\n \"arrow-right\",\n \"arrow-up-right\",\n \"arrow-up-left\",\n \"arrow-down-right\",\n \"arrow-down-left\",\n \"external-link\",\n \"menu\",\n \"x\",\n \"search\",\n \"plus\",\n \"minus\",\n \"square-pen\",\n \"trash-2\",\n \"download\",\n \"upload\",\n \"copy\",\n \"share-2\",\n \"funnel\",\n \"filter\",\n \"arrow-up-down\",\n \"settings\",\n \"refresh-cw\",\n \"check\",\n \"send\",\n \"eye\",\n \"eye-off\",\n \"bell\",\n \"bell-off\",\n \"ellipsis\",\n \"ellipsis-vertical\",\n \"save\",\n \"info\",\n \"triangle-alert\",\n \"circle-x\",\n \"circle-check\",\n \"circle-check-big\",\n \"clock\",\n \"loader\",\n \"sun\",\n \"moon\",\n \"lock\",\n \"lock-open\",\n \"circle-question-mark\",\n \"circle-help\",\n \"ban\",\n \"check-check\",\n \"octagon-alert\",\n \"play\",\n \"pause\",\n \"square\",\n \"globe\",\n \"image\",\n \"file\",\n \"link\",\n \"package\",\n \"rocket\",\n \"grid-3x3\",\n \"notebook-pen\",\n \"code-xml\",\n \"trending-up\",\n \"trending-down\",\n \"chart-line\",\n \"chart-column\",\n \"chart-candlestick\",\n \"chart-pie\",\n \"wallet\",\n \"briefcase\",\n \"calendar\",\n \"bookmark\",\n \"percent\",\n \"dollar-sign\",\n \"activity\",\n \"target\",\n \"scale\",\n \"banknote\",\n \"ai-sparkle\",\n \"bot\",\n \"bot-message-square\",\n \"cpu\",\n \"agent-stocky\",\n \"agent-orb\",\n \"agent-droid\",\n \"agent-hex\",\n] as const satisfies readonly IconName[];\n\n/**\n * name → component for the dynamic `<Icon name>` registry. Intentionally retains\n * the whole set (NON-shaking); for tree-shaking use the per-icon named export.\n */\nexport const ICON_REGISTRY: Record<IconName, ComponentType<IconProps>> = {\n \"chevron-up\": ChevronUp,\n \"chevron-down\": ChevronDown,\n \"chevron-left\": ChevronLeft,\n \"chevron-right\": ChevronRight,\n \"arrow-up\": ArrowUp,\n \"arrow-down\": ArrowDown,\n \"arrow-left\": ArrowLeft,\n \"arrow-right\": ArrowRight,\n \"arrow-up-right\": ArrowUpRight,\n \"arrow-up-left\": ArrowUpLeft,\n \"arrow-down-right\": ArrowDownRight,\n \"arrow-down-left\": ArrowDownLeft,\n \"external-link\": ExternalLink,\n menu: Menu,\n x: X,\n search: SearchIcon,\n plus: Plus,\n minus: Minus,\n \"square-pen\": SquarePen,\n \"trash-2\": Trash2,\n download: Download,\n upload: Upload,\n copy: Copy,\n \"share-2\": Share2,\n funnel: Funnel,\n filter: Funnel,\n \"arrow-up-down\": ArrowUpDown,\n settings: Settings,\n \"refresh-cw\": RefreshCw,\n check: Check,\n send: Send,\n eye: Eye,\n \"eye-off\": EyeOff,\n bell: Bell,\n \"bell-off\": BellOff,\n ellipsis: Ellipsis,\n \"ellipsis-vertical\": EllipsisVertical,\n save: Save,\n info: Info,\n \"triangle-alert\": TriangleAlert,\n \"circle-x\": CircleX,\n \"circle-check\": CircleCheck,\n \"circle-check-big\": CircleCheckBig,\n clock: Clock,\n loader: Loader,\n sun: Sun,\n moon: Moon,\n lock: Lock,\n \"lock-open\": LockOpen,\n \"circle-question-mark\": CircleQuestionMark,\n \"circle-help\": CircleQuestionMark,\n ban: Ban,\n \"check-check\": CheckCheck,\n \"octagon-alert\": OctagonAlert,\n play: Play,\n pause: Pause,\n square: Square,\n globe: Globe,\n image: Image,\n file: File,\n link: Link,\n package: Package,\n rocket: Rocket,\n \"grid-3x3\": Grid3x3,\n \"notebook-pen\": NotebookPen,\n \"code-xml\": CodeXml,\n \"trending-up\": TrendingUp,\n \"trending-down\": TrendingDown,\n \"chart-line\": ChartLine,\n \"chart-column\": ChartColumn,\n \"chart-candlestick\": ChartCandlestick,\n \"chart-pie\": ChartPie,\n wallet: Wallet,\n briefcase: Briefcase,\n calendar: Calendar,\n bookmark: Bookmark,\n percent: Percent,\n \"dollar-sign\": DollarSign,\n activity: Activity,\n target: Target,\n scale: Scale,\n banknote: Banknote,\n \"ai-sparkle\": AiSparkle,\n bot: Bot,\n \"bot-message-square\": BotMessageSquare,\n cpu: Cpu,\n \"agent-stocky\": AgentStocky,\n \"agent-orb\": AgentOrb,\n \"agent-droid\": AgentDroid,\n \"agent-hex\": AgentHex,\n};\n\n/** Every shipped brand-mark name. Distinct from IconName (logos are not icons, AC-4). */\nexport type BrandIconName =\n | \"github\"\n | \"npm\"\n | \"figma\"\n | \"notion\"\n | \"vercel\"\n | \"chromestore\"\n | \"vscode\"\n | \"linear\"\n | \"linkedin\"\n | \"x-twitter\"\n | \"youtube\"\n | \"google\"\n | \"reddit\"\n | \"openai\"\n | \"anthropic\"\n | \"claude\"\n | \"gemini\"\n | \"deepseek\"\n | \"moonshot\"\n | \"glm\"\n | \"mistral\"\n | \"perplexity\"\n | \"huggingface\"\n | \"ollama\"\n | \"qwen\"\n | \"meta\";\n\n/** Runtime list of every BrandIconName. */\nexport const BRAND_ICON_NAMES = [\n \"github\",\n \"npm\",\n \"figma\",\n \"notion\",\n \"vercel\",\n \"chromestore\",\n \"vscode\",\n \"linear\",\n \"linkedin\",\n \"x-twitter\",\n \"youtube\",\n \"google\",\n \"reddit\",\n \"openai\",\n \"anthropic\",\n \"claude\",\n \"gemini\",\n \"deepseek\",\n \"moonshot\",\n \"glm\",\n \"mistral\",\n \"perplexity\",\n \"huggingface\",\n \"ollama\",\n \"qwen\",\n \"meta\",\n] as const satisfies readonly BrandIconName[];\n\n/** name → component for dynamic brand-mark lookup (non-shaking, like ICON_REGISTRY). */\nexport const BRAND_REGISTRY: Record<BrandIconName, ComponentType<IconProps>> = {\n github: GitHub,\n npm: NPM,\n figma: Figma,\n notion: Notion,\n vercel: Vercel,\n chromestore: ChromeWebStore,\n vscode: VSCode,\n linear: Linear,\n linkedin: LinkedIn,\n \"x-twitter\": XTwitter,\n youtube: YouTube,\n google: Google,\n reddit: Reddit,\n openai: OpenAI,\n anthropic: Anthropic,\n claude: Claude,\n gemini: Gemini,\n deepseek: DeepSeek,\n moonshot: Moonshot,\n glm: GLM,\n mistral: Mistral,\n perplexity: Perplexity,\n huggingface: HuggingFace,\n ollama: Ollama,\n qwen: Qwen,\n meta: Meta,\n};\n","import type { IconProps } from \"./icon-props\";\nimport { ICON_REGISTRY, type IconName } from \"./generated/registry\";\n\ninterface IconComponentProps extends IconProps {\n /** Icon name from the generated set — a canonical id or a recorded alias. */\n name: IconName;\n}\n\n/**\n * Dynamic, data-driven icon: `<Icon name=\"trending-up\" />`. Use this when the icon\n * is chosen at runtime. For static use, prefer the per-icon named export\n * (`<TrendingUp />`) — it tree-shakes, whereas this registry intentionally retains\n * the whole set (importing `Icon` pulls every icon).\n */\nexport function Icon({ name, ...props }: IconComponentProps) {\n const Glyph = ICON_REGISTRY[name];\n // ICON_REGISTRY is exhaustive over IconName, so this is unreachable for a valid\n // name; the guard satisfies `noUncheckedIndexedAccess` and fails safe.\n if (!Glyph) return null;\n return <Glyph {...props} />;\n}\n","import { useEffect, useState } from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\n/**\n * MediaSlot — an art-directed, sized, shaped container that displays\n * heterogeneous media (static image / animated GIF / self-hosted video / an\n * embedded remote video) with one unifying contract: shape mask, object-fit,\n * object-position, aspect-ratio (CLS reserve), lazy-load, poster, placeholder,\n * and a11y. Painted with the shipped `@qball-inc/tokens` `.media-slot` family\n * from the `preview/media-slot.html` oracle — every visual comes from the token\n * CSS / token-valued custom properties (no hardcoded hex, no `box-shadow`).\n *\n * **Pure React, SSR/static-safe by construction** (research Option A):\n * renders native `<img>`/`<video>`/`<iframe>`; NO `window`/`document`/\n * `customElements` access at module-eval OR render. The only client-side work —\n * the embed facade's click→swap and the reduced-motion probe — lives in an event\n * handler / effect, so it never runs during SSR.\n *\n * **Discriminated `type` → 4 render paths:**\n * - `image`/`gif` → `<img>` (gif animates natively in the UA).\n * - `video` → `<video poster preload=\"none\">`, **default muted, NO autoplay**,\n * native `controls`. gif-as-video = `autoPlay loop muted` (adds `playsInline`;\n * autoplay is suppressed under `prefers-reduced-motion`).\n * - `embed` → a **facade**: the provider's real thumbnail + a real `<button>` play\n * overlay on the shipped dark `--color-scrim`; the real `<iframe>` is swapped in\n * only on click — **no network until click** (consumer owns CSP/consent). The\n * facade resets when `src`/`provider` changes, so a reused instance never\n * auto-loads a new embed.\n *\n * The DISPLAY primitive only. Upload / drag-drop / reframe-crop / persistence /\n * oEmbed resolution are the deferred authoring layer; `adapter` is a\n * reserved, no-op seam that declares that future API for forward-compatibility.\n */\n\nexport type MediaSlotType = \"image\" | \"gif\" | \"video\" | \"embed\";\nexport type MediaSlotShape = \"rect\" | \"rounded\" | \"circle\" | \"pill\";\nexport type MediaSlotFit = \"cover\" | \"contain\" | \"fill\";\n\n/**\n * RESERVED no-op seam for the authoring layer (read/persist adapters).\n * Declared in 1.0 so 1.1 can ship the authoring behavior backward-compatibly;\n * MediaSlot ignores it entirely at 1.0 (zero persistence behavior).\n */\nexport interface MediaSlotAdapter {\n read?: (...args: never[]) => unknown;\n write?: (...args: never[]) => unknown;\n}\n\nexport interface MediaSlotProps {\n /** Image/GIF/video URL, or an embed URL. Absent ⇒ the empty-state placeholder. */\n src?: string;\n /** Discriminated render path. */\n type: MediaSlotType;\n\n // ----- Art direction -----\n /** Frame shape. Default `rounded`. Ignored when `mask` is set. */\n shape?: MediaSlotShape;\n /** Corner radius (px) for `shape=\"rounded\"`. Defaults to the `--radius-md` token. */\n radius?: number;\n /** A CSS `clip-path` that overrides `shape`. */\n mask?: string;\n /** `object-fit` of the inner media. Default `cover`. */\n fit?: MediaSlotFit;\n /** `object-position` of the inner media. Default `50% 50%`. */\n position?: string;\n /** CSS `aspect-ratio` (e.g. `\"16 / 9\"`). Reserves the box → no CLS. Circle defaults to `1 / 1`. */\n aspectRatio?: string;\n\n // ----- Loading / fallbacks -----\n /** `loading=\"lazy\"` on `<img>` / `preload=\"none\"` on `<video>`. Default `true`. */\n lazy?: boolean;\n /** `<video>` poster frame (`type=\"video\"`). */\n poster?: string;\n /** Empty-state UI when `src` is absent. Defaults to a token-styled glyph placeholder. */\n placeholder?: ReactNode;\n\n // ----- video (type=\"video\") — default muted, NOT autoplaying -----\n /** Native `controls`. Default `true` (auto-`false` for a gif-as-video loop). */\n controls?: boolean;\n /** Autoplay. Default `false`. Suppressed under `prefers-reduced-motion`. */\n autoPlay?: boolean;\n /** Muted. Default `true`. */\n muted?: boolean;\n /** Loop. Default `false`. `autoPlay + loop + muted` = gif-as-video. */\n loop?: boolean;\n\n // ----- embed (type=\"embed\") — facade; provider inferred from src -----\n /** Provider override/fallback when URL inference can't determine it. Recognized\n * values: `\"youtube\"`, `\"vimeo\"`; any other value treats `src` as the embed URL. */\n provider?: string;\n /** Explicit facade thumbnail when the provider has no derivable thumb URL (e.g. Vimeo). */\n thumbnail?: string;\n\n // ----- a11y -----\n /** Required for informative media; `alt=\"\"` (the default) marks it decorative. */\n alt?: string;\n\n // ----- passthrough + reserved seam -----\n /** Optional in-frame type chip (e.g. \"gif\"). Rendered only when provided. */\n badge?: ReactNode;\n /** Merged onto the `.media-slot` root. The consumer owns WIDTH/layout here. */\n className?: string;\n /** RESERVED no-op in 1.0 (authoring seam). */\n adapter?: MediaSlotAdapter;\n}\n\n// Scheme allowlists (defense-in-depth, mirroring the httpUrl + Avatar guards):\n// any consumer-supplied media/poster/thumbnail URL must be http(s) / root-or-relative /\n// data:image|video / blob:; an embed iframe target must be https. A `javascript:` /\n// `data:text/html` URL is dropped (the affordance falls back to the empty state / no poster).\nconst SAFE_MEDIA_SRC = /^(?:https?:\\/\\/|\\/|\\.\\.?\\/|data:(?:image|video)\\/|blob:)/i;\nconst SAFE_EMBED_SRC = /^https:\\/\\//i;\n\nconst YOUTUBE_RE = /(?:youtube\\.com\\/(?:watch\\?v=|embed\\/|shorts\\/)|youtu\\.be\\/)([\\w-]{11})/;\nconst VIMEO_RE = /vimeo\\.com\\/(?:video\\/)?(\\d+)/;\n\n/** A custom-property-aware style for the `.media-slot` frame (the CSS reads `var(--ms-*)`). */\ntype MediaSlotStyle = CSSProperties & {\n \"--ms-aspect\"?: string;\n \"--ms-fit\"?: string;\n \"--ms-pos\"?: string;\n \"--ms-radius\"?: string;\n};\n\n/** Returns the URL only if it passes the media scheme allowlist; else undefined (dropped). */\nfunction safeMediaUrl(url: string | undefined): string | undefined {\n return url !== undefined && SAFE_MEDIA_SRC.test(url) ? url : undefined;\n}\n\ninterface ResolvedEmbed {\n iframeSrc: string;\n poster?: string;\n posterFallback?: string;\n}\n\n/**\n * Resolve an embed `src` (+ optional provider/thumbnail) to a facade. YouTube and\n * Vimeo are recognized from the URL; an unknown provider treats `src` as the embed\n * URL directly (and needs an explicit `thumbnail`). Pure string work — SSR-safe.\n */\nfunction resolveEmbed(src: string, provider?: string, thumbnail?: string): ResolvedEmbed | null {\n const yt = YOUTUBE_RE.exec(src);\n if ((provider === undefined || provider === \"youtube\") && yt?.[1] !== undefined) {\n const id = yt[1];\n return {\n iframeSrc: `https://www.youtube.com/embed/${id}?autoplay=1`,\n poster: thumbnail ?? `https://img.youtube.com/vi/${id}/maxresdefault.jpg`,\n // Only the derived maxres thumbnail has an hqdefault fallback; an explicit\n // thumbnail does not (and is honored as-is).\n ...(thumbnail === undefined\n ? { posterFallback: `https://img.youtube.com/vi/${id}/hqdefault.jpg` }\n : {}),\n };\n }\n const vm = VIMEO_RE.exec(src);\n if ((provider === undefined || provider === \"vimeo\") && vm?.[1] !== undefined) {\n // Vimeo has no static thumbnail URL → relies on an explicit `thumbnail`.\n return {\n iframeSrc: `https://player.vimeo.com/video/${vm[1]}?autoplay=1`,\n ...(thumbnail !== undefined ? { poster: thumbnail } : {}),\n };\n }\n // Unknown provider: treat src as the embed URL directly; needs an explicit thumbnail.\n return { iframeSrc: src, ...(thumbnail !== undefined ? { poster: thumbnail } : {}) };\n}\n\n/** SSR-safe `prefers-reduced-motion` probe: false on the server / first paint; the\n * real value is read in a client-only effect (no `window` at module-eval or render). */\nfunction usePrefersReducedMotion(): boolean {\n const [reduced, setReduced] = useState(false);\n useEffect(() => {\n // Guarded for SSR (no window) and jsdom (no matchMedia) — both leave it false.\n if (typeof window === \"undefined\" || typeof window.matchMedia !== \"function\") return;\n const mq = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const update = (): void => {\n setReduced(mq.matches);\n };\n update();\n mq.addEventListener(\"change\", update);\n return () => {\n mq.removeEventListener(\"change\", update);\n };\n }, []);\n return reduced;\n}\n\n/** Default empty-state glyph (token-stroked by `.media-slot__placeholder svg`). */\nfunction DefaultMediaGlyph() {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <path d=\"M21 15l-5-5L5 21\" />\n </svg>\n );\n}\n\ninterface RenderResult {\n node: ReactNode;\n empty: boolean;\n}\n\nexport function MediaSlot({\n src,\n type,\n shape = \"rounded\",\n radius,\n mask,\n fit = \"cover\",\n position = \"50% 50%\",\n aspectRatio,\n lazy = true,\n poster,\n placeholder,\n controls,\n autoPlay = false,\n muted = true,\n loop = false,\n provider,\n thumbnail,\n alt,\n badge,\n className,\n}: MediaSlotProps) {\n const reducedMotion = usePrefersReducedMotion();\n const [activated, setActivated] = useState(false);\n const [posterErrored, setPosterErrored] = useState(false);\n\n // Reset the facade (and its poster fallback) when the media identity changes, so a\n // reused instance never auto-loads a NEW embed's <iframe> without a fresh click\n // (the \"no network until click\" contract). Prev-prop pattern — synchronous and\n // SSR-safe (no effect); runs before the iframe would render and converges immediately.\n const identity = `${src ?? \"\"}|${provider ?? \"\"}`;\n const [prevIdentity, setPrevIdentity] = useState(identity);\n if (identity !== prevIdentity) {\n setPrevIdentity(identity);\n setActivated(false);\n setPosterErrored(false);\n }\n\n function renderPlaceholder(): ReactNode {\n if (placeholder !== undefined) {\n return <div className=\"media-slot__placeholder\">{placeholder}</div>;\n }\n const iconOnly = shape === \"circle\";\n return (\n <div\n className={\n iconOnly\n ? \"media-slot__placeholder media-slot__placeholder--icon\"\n : \"media-slot__placeholder\"\n }\n >\n <DefaultMediaGlyph />\n {iconOnly ? null : <span>No media</span>}\n </div>\n );\n }\n\n function renderImageOrGif(): RenderResult {\n const safeSrc = safeMediaUrl(src);\n if (safeSrc === undefined) return { node: renderPlaceholder(), empty: true };\n return {\n node: <img src={safeSrc} alt={alt ?? \"\"} loading={lazy ? \"lazy\" : undefined} />,\n empty: false,\n };\n }\n\n function renderVideo(): RenderResult {\n const safeSrc = safeMediaUrl(src);\n if (safeSrc === undefined) return { node: renderPlaceholder(), empty: true };\n const gifAsVideo = autoPlay && loop && muted;\n return {\n node: (\n <video\n src={safeSrc}\n poster={safeMediaUrl(poster)}\n preload={lazy ? \"none\" : \"metadata\"}\n muted={muted}\n controls={controls ?? !gifAsVideo}\n autoPlay={autoPlay && !reducedMotion}\n loop={loop}\n playsInline={gifAsVideo}\n />\n ),\n empty: false,\n };\n }\n\n function renderEmbed(): RenderResult {\n if (src === undefined || src === \"\") return { node: renderPlaceholder(), empty: true };\n const resolved = resolveEmbed(src, provider, thumbnail);\n if (resolved === null || !SAFE_EMBED_SRC.test(resolved.iframeSrc)) {\n return { node: renderPlaceholder(), empty: true };\n }\n if (activated) {\n return {\n node: (\n <iframe\n src={resolved.iframeSrc}\n title={alt !== undefined && alt !== \"\" ? alt : \"Embedded video\"}\n allow=\"autoplay; fullscreen; encrypted-media; picture-in-picture\"\n referrerPolicy=\"strict-origin-when-cross-origin\"\n allowFullScreen\n />\n ),\n empty: false,\n };\n }\n const rawPoster =\n posterErrored && resolved.posterFallback !== undefined\n ? resolved.posterFallback\n : resolved.poster;\n const posterSrc = safeMediaUrl(rawPoster);\n return {\n node: (\n <>\n {posterSrc !== undefined ? (\n <img\n className=\"media-slot__poster\"\n src={posterSrc}\n alt={alt ?? \"\"}\n loading={lazy ? \"lazy\" : undefined}\n onError={\n resolved.posterFallback !== undefined\n ? () => {\n setPosterErrored(true);\n }\n : undefined\n }\n />\n ) : null}\n <button\n type=\"button\"\n className=\"media-slot__play\"\n aria-label={alt !== undefined && alt !== \"\" ? `Play: ${alt}` : \"Play video\"}\n onClick={() => {\n setActivated(true);\n }}\n >\n <span className=\"tri\" aria-hidden=\"true\" />\n </button>\n </>\n ),\n empty: false,\n };\n }\n\n const { node: inner, empty } =\n type === \"embed\" ? renderEmbed() : type === \"video\" ? renderVideo() : renderImageOrGif();\n\n const shapeClass = mask !== undefined ? null : `media-slot--${shape}`;\n const emptyClass = empty ? \"media-slot--empty\" : null;\n const cls = [\"media-slot\", shapeClass, emptyClass, className].filter(Boolean).join(\" \");\n\n // Custom properties the shipped .media-slot* CSS reads (`var(--ms-*)`); they\n // inherit down to the inner <img>/<video>/<iframe>. No colors here → DESIGN_DENY-clean.\n const slotStyle: MediaSlotStyle = {\n \"--ms-fit\": fit,\n \"--ms-pos\": position,\n ...(aspectRatio !== undefined || shape === \"circle\"\n ? { \"--ms-aspect\": aspectRatio ?? \"1 / 1\" }\n : {}),\n ...(shape === \"rounded\" && radius !== undefined ? { \"--ms-radius\": `${radius}px` } : {}),\n ...(mask !== undefined ? { clipPath: mask } : {}),\n };\n\n return (\n <div className={cls} style={slotStyle} data-media-type={type}>\n {inner}\n {badge !== undefined ? <span className=\"media-slot__badge\">{badge}</span> : null}\n </div>\n );\n}\n"]}