@sidecar-ai/native 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/index.d.ts +2232 -0
- package/dist/components/index.js +1628 -0
- package/dist/components/index.js.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.js +1829 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +1273 -0
- package/package.json +29 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../packages/native/src/components/index.tsx"],"sourcesContent":["/**\n * Host-adaptive React components for Sidecar widgets.\n *\n * The public props intentionally track the shared OpenAI Apps SDK UI surface\n * where the same primitive can sensibly exist in Claude. Runtime styling is\n * selected with `data-sc-recipe`; `auto` follows the widget host, while scoped\n * packages pin a recipe explicitly.\n */\nimport * as React from \"react\";\n\n/** Host recipe pinned by scoped packages or selected dynamically by native. */\nexport type ComponentRecipe = \"auto\" | \"chatgpt\" | \"claude\" | \"generic\";\n\n/** Size tokens mirrored from the OpenAI Apps SDK UI scale. */\nexport type Size =\n | \"5xs\"\n | \"4xs\"\n | \"3xs\"\n | \"2xs\"\n | \"xs\"\n | \"sm\"\n | \"md\"\n | \"lg\"\n | \"xl\"\n | \"2xl\"\n | \"3xl\"\n | \"4xl\"\n | \"5xl\"\n | \"6xl\";\n\n/** Generic constrained size helper. */\nexport type Sizes<T extends Size = Size> = T;\n\n/** Control height scale used by buttons, inputs, and related controls. */\nexport type ControlSize = Sizes<\"3xs\" | \"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | \"3xl\">;\n\n/** Semantic color tokens common to portable Sidecar controls. */\nexport type SemanticColor =\n | \"primary\"\n | \"secondary\"\n | \"danger\"\n | \"success\"\n | \"warning\"\n | \"caution\"\n | \"discovery\"\n | \"info\";\n\n/** Generic constrained semantic color helper. */\nexport type SemanticColors<T extends SemanticColor = SemanticColor> = T;\n\n/** Visual variants common to portable controls. */\nexport type Variant = \"solid\" | \"soft\" | \"outline\" | \"ghost\";\n\n/** Generic constrained variant helper. */\nexport type Variants<T extends Variant = Variant> = T;\n\n/** Legacy intent alias retained for early Sidecar examples. */\nexport type ControlIntent = SemanticColor | \"ghost\";\n\n/** Common props accepted by all Sidecar native components. */\nexport type PrimitiveProps = {\n /** Internal recipe override used by scoped host packages. */\n recipe?: ComponentRecipe;\n};\n\ntype Alignment = \"start\" | \"center\" | \"end\";\ntype Direction = \"col\" | \"row\";\n\ntype ButtonVisualProps = PrimitiveProps & {\n /**\n * Semantic color for the button.\n * @default \"secondary\"\n */\n color?: SemanticColors<\n \"primary\" | \"secondary\" | \"danger\" | \"success\" | \"info\" | \"discovery\" | \"caution\" | \"warning\"\n >;\n /**\n * Visual style for the button.\n * @default \"solid\"\n */\n variant?: Variants<\"solid\" | \"soft\" | \"outline\" | \"ghost\"> | ControlIntent;\n /** Backward-compatible alias for `color` from early Sidecar examples. */\n intent?: ControlIntent;\n /**\n * Determines if the button should be a fully rounded pill shape.\n * @default true\n */\n pill?: boolean;\n /** Controls disabled cursor treatment without changing disabled semantics. */\n disabledTone?: \"relaxed\";\n /**\n * Extends the control to 100% of available width.\n * @default false\n */\n block?: boolean;\n /** Applies a negative margin to optically align with surrounding content. */\n opticallyAlign?: \"start\" | \"end\";\n /**\n * Controls button height and default icon/text scale.\n * @default \"md\"\n */\n size?: ControlSize;\n /** Explicit icon size override. */\n iconSize?: Sizes<\"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\">;\n /** Explicit horizontal gutter override. */\n gutterSize?: Sizes<\"3xs\" | \"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\">;\n /**\n * Makes the button width match its height.\n * @default false\n */\n uniform?: boolean;\n /**\n * Displays selected styles on the button.\n * @default false\n */\n selected?: boolean;\n /**\n * Displays loading indicator and disables interaction.\n * @default false\n */\n loading?: boolean;\n /**\n * Makes the button inert without changing visual treatment.\n * @default false\n */\n inert?: boolean;\n};\n\n/** Props for Sidecar's portable button primitive. */\nexport type ButtonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"color\"> &\n ButtonVisualProps;\n\n/** Portable button with host-adaptive visual recipes. */\nexport const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n block = false,\n children,\n color,\n disabled,\n disabledTone,\n gutterSize,\n iconSize,\n inert = false,\n intent,\n loading = false,\n opticallyAlign,\n pill = true,\n recipe = \"auto\",\n selected = false,\n size = \"md\",\n type = \"button\",\n uniform = false,\n variant,\n ...props\n },\n ref,\n) {\n const visual = normalizeButtonVisual({ color, intent, variant });\n\n return React.createElement(\n \"button\",\n {\n ref,\n \"aria-busy\": loading || undefined,\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-color\": visual.color,\n \"data-sc-component\": \"button\",\n \"data-sc-disabled-tone\": disabledTone,\n \"data-sc-gutter-size\": gutterSize,\n \"data-sc-icon-size\": iconSize,\n \"data-sc-inert\": inert ? \"\" : undefined,\n \"data-sc-intent\": visual.color,\n \"data-sc-loading\": loading ? \"\" : undefined,\n \"data-sc-optically-align\": opticallyAlign,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-selected\": selected ? \"\" : undefined,\n \"data-sc-size\": size,\n \"data-sc-uniform\": uniform ? \"\" : undefined,\n \"data-sc-variant\": visual.variant,\n disabled: disabled || loading || undefined,\n type,\n ...props,\n },\n loading ? React.createElement(LoadingIndicator, { \"aria-hidden\": true, size: \"1em\" }) : null,\n React.createElement(\"span\", { \"data-sc-component\": \"button-label\" }, children),\n );\n});\n\n/** Props for a link styled as a host-adaptive button. */\nexport type ButtonLinkProps = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"color\"> &\n ButtonVisualProps & {\n /** Forces external-link treatment when automatic detection is insufficient. */\n external?: boolean;\n };\n\n/** Anchor element with the same visual language as `Button`. */\nexport const ButtonLink = React.forwardRef<HTMLAnchorElement, ButtonLinkProps>(function ButtonLink(\n {\n block = false,\n children,\n color,\n disabledTone,\n external,\n gutterSize,\n href,\n iconSize,\n inert = false,\n intent,\n loading = false,\n opticallyAlign,\n pill = true,\n recipe = \"auto\",\n rel,\n selected = false,\n size = \"md\",\n target,\n uniform = false,\n variant,\n ...props\n },\n ref,\n) {\n const visual = normalizeButtonVisual({ color, intent, variant });\n const isExternal = external ?? Boolean(href && /^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(href));\n\n return React.createElement(\n \"a\",\n {\n ref,\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-color\": visual.color,\n \"data-sc-component\": \"button\",\n \"data-sc-disabled-tone\": disabledTone,\n \"data-sc-gutter-size\": gutterSize,\n \"data-sc-icon-size\": iconSize,\n \"data-sc-inert\": inert ? \"\" : undefined,\n \"data-sc-loading\": loading ? \"\" : undefined,\n \"data-sc-optically-align\": opticallyAlign,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-selected\": selected ? \"\" : undefined,\n \"data-sc-size\": size,\n \"data-sc-uniform\": uniform ? \"\" : undefined,\n \"data-sc-variant\": visual.variant,\n href,\n rel: isExternal && target === \"_blank\" ? mergeRel(rel, \"noopener noreferrer\") : rel,\n target,\n ...props,\n },\n loading ? React.createElement(LoadingIndicator, { \"aria-hidden\": true, size: \"1em\" }) : null,\n React.createElement(\"span\", { \"data-sc-component\": \"button-label\" }, children),\n );\n});\n\n/** Clipboard content accepted by `CopyButton`. */\nexport type ClipboardContent = string | Record<string, string>;\n\n/** Props for a host-adaptive copy button. */\nexport type CopyButtonProps = {\n /** Text or MIME map to place on the clipboard. */\n copyValue: ClipboardContent | (() => ClipboardContent);\n /** Custom button content, optionally as a render function. */\n children?: React.ReactNode | ((props: { copied: boolean }) => React.ReactNode);\n} & Omit<ButtonProps, \"children\">;\n\n/** Button that copies text to the clipboard with a short copied state. */\nexport function CopyButton({ children = \"Copy\", copyValue, onClick, ...restProps }: CopyButtonProps) {\n const [copied, setCopied] = React.useState(false);\n\n React.useEffect(() => {\n if (!copied) {\n return;\n }\n const timeout = window.setTimeout(() => setCopied(false), 1400);\n return () => window.clearTimeout(timeout);\n }, [copied]);\n\n return React.createElement(\n Button,\n {\n ...restProps,\n onClick: async (event) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n const resolved = typeof copyValue === \"function\" ? copyValue() : copyValue;\n await copyToClipboard(resolved);\n setCopied(true);\n },\n },\n typeof children === \"function\" ? children({ copied }) : children,\n );\n}\n\n/** Props for text blocks that align with the active host typography. */\nexport type TextProps = React.HTMLAttributes<HTMLParagraphElement> &\n PrimitiveProps & {\n tone?: \"default\" | \"muted\" | \"success\" | \"warning\" | \"danger\";\n };\n\n/** Host-adaptive paragraph text. */\nexport const Text = React.forwardRef<HTMLParagraphElement, TextProps>(function Text(\n { tone = \"default\", recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"p\", {\n ref,\n \"data-sc-component\": \"text\",\n \"data-sc-recipe\": recipe,\n \"data-sc-tone\": tone,\n ...props,\n });\n});\n\n/** Props for compact section headings. */\nexport type HeadingProps = React.HTMLAttributes<HTMLHeadingElement> &\n PrimitiveProps & {\n level?: 1 | 2 | 3 | 4;\n };\n\n/** Host-adaptive heading component with compact widget defaults. */\nexport const Heading = React.forwardRef<HTMLHeadingElement, HeadingProps>(function Heading(\n { level = 2, recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(`h${level}`, {\n ref,\n \"data-sc-component\": \"heading\",\n \"data-sc-level\": level,\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for a host-adaptive single-line text input. */\nexport type InputProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"disabled\" | \"size\"> &\n PrimitiveProps & {\n /** Visual style of the input. */\n variant?: Variants<\"outline\" | \"soft\">;\n /** Control size. */\n size?: ControlSize;\n /** Explicit horizontal gutter override. */\n gutterSize?: Sizes<\"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\">;\n /** Disables the input visually and from interactions. */\n disabled?: boolean;\n /** Marks the input as invalid. */\n invalid?: boolean;\n /** Allow autofill extensions to appear in the input. */\n allowAutofillExtensions?: boolean;\n /** Selects all contents when the input mounts. */\n autoSelect?: boolean;\n /** Callback invoked when browser autofill is detected. */\n onAutofill?: () => void;\n /** Content rendered at the start of the control. */\n startAdornment?: React.ReactNode;\n /** Content rendered at the end of the control. */\n endAdornment?: React.ReactNode;\n /** Fully rounded pill shape. */\n pill?: boolean;\n /** Extends the control to 100% width. */\n block?: boolean;\n /** Applies a negative margin to optically align with surrounding content. */\n opticallyAlign?: \"start\" | \"end\";\n };\n\n/** Portable single-line input styled through the active host recipe. */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n allowAutofillExtensions: _allowAutofillExtensions,\n autoSelect = false,\n block = false,\n disabled = false,\n endAdornment,\n gutterSize,\n id,\n invalid,\n onAutofill: _onAutofill,\n opticallyAlign,\n pill = false,\n recipe = \"auto\",\n size = \"md\",\n startAdornment,\n variant = \"outline\",\n ...props\n },\n ref,\n) {\n const field = React.useContext(FieldContext);\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const mergedRef = useMergedRefs(ref, inputRef);\n const inputId = id ?? field?.controlId;\n const resolvedInvalid = invalid ?? field?.invalid ?? false;\n\n React.useEffect(() => {\n if (autoSelect) {\n inputRef.current?.select();\n }\n }, [autoSelect]);\n\n return React.createElement(\n \"span\",\n {\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-component\": \"input-shell\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-gutter-size\": gutterSize,\n \"data-sc-has-end-adornment\": endAdornment ? \"\" : undefined,\n \"data-sc-has-start-adornment\": startAdornment ? \"\" : undefined,\n \"data-sc-invalid\": resolvedInvalid ? \"\" : undefined,\n \"data-sc-optically-align\": opticallyAlign,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-size\": size,\n \"data-sc-variant\": variant,\n },\n startAdornment ? React.createElement(\"span\", { \"data-sc-component\": \"input-adornment\" }, startAdornment) : null,\n React.createElement(\"input\", {\n ref: mergedRef,\n \"aria-describedby\": describedBy(props[\"aria-describedby\"], field, resolvedInvalid),\n \"aria-invalid\": resolvedInvalid || undefined,\n disabled,\n id: inputId,\n \"data-sc-component\": \"input\",\n ...props,\n }),\n endAdornment ? React.createElement(\"span\", { \"data-sc-component\": \"input-adornment\" }, endAdornment) : null,\n );\n});\n\n/** Backward-compatible alias for early Sidecar examples. */\nexport const TextField = Input;\nexport type TextFieldProps = InputProps;\n\n/** Props for a multi-line text input. */\nexport type TextareaProps = Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"disabled\" | \"size\"> &\n PrimitiveProps & {\n /** Visual style of the textarea. */\n variant?: Variants<\"outline\" | \"soft\">;\n /** Control size. */\n size?: ControlSize;\n /** Explicit horizontal gutter override. */\n gutterSize?: Sizes<\"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\">;\n disabled?: boolean;\n invalid?: boolean;\n allowAutofillExtensions?: boolean;\n autoSelect?: boolean;\n onAutofill?: () => void;\n autoResize?: boolean;\n maxRows?: number;\n pill?: boolean;\n block?: boolean;\n opticallyAlign?: \"start\" | \"end\";\n };\n\n/** Portable textarea styled through the active host recipe. */\nexport const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n {\n allowAutofillExtensions: _allowAutofillExtensions,\n autoResize = false,\n autoSelect = false,\n block = false,\n disabled = false,\n gutterSize,\n id,\n invalid,\n maxRows: _maxRows,\n onAutofill: _onAutofill,\n opticallyAlign,\n pill = false,\n recipe = \"auto\",\n rows = 3,\n size = \"md\",\n variant = \"outline\",\n ...props\n },\n ref,\n) {\n const field = React.useContext(FieldContext);\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n const mergedRef = useMergedRefs(ref, textareaRef);\n const inputId = id ?? field?.controlId;\n const resolvedInvalid = invalid ?? field?.invalid ?? false;\n\n React.useEffect(() => {\n if (autoSelect) {\n textareaRef.current?.select();\n }\n }, [autoSelect]);\n\n React.useLayoutEffect(() => {\n const node = textareaRef.current;\n if (!node || !autoResize) {\n return;\n }\n node.style.height = \"auto\";\n node.style.height = `${node.scrollHeight}px`;\n }, [autoResize, props.value, props.defaultValue]);\n\n return React.createElement(\"textarea\", {\n ref: mergedRef,\n \"aria-describedby\": describedBy(props[\"aria-describedby\"], field, resolvedInvalid),\n \"aria-invalid\": resolvedInvalid || undefined,\n disabled,\n id: inputId,\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-component\": \"textarea\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-gutter-size\": gutterSize,\n \"data-sc-invalid\": resolvedInvalid ? \"\" : undefined,\n \"data-sc-optically-align\": opticallyAlign,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-size\": size,\n \"data-sc-variant\": variant,\n rows,\n ...props,\n });\n});\n\n/** State accepted by host-adaptive checkboxes. */\nexport type CheckboxState = boolean | \"indeterminate\";\n\n/** Props for a host-adaptive checkbox. */\nexport type CheckboxProps = PrimitiveProps & {\n id?: string;\n defaultChecked?: CheckboxState;\n checked?: CheckboxState;\n label?: React.ReactNode;\n onCheckedChange?: (nextState: boolean) => void;\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: string;\n className?: string;\n orientation?: \"left\" | \"right\";\n};\n\n/** Portable checkbox with optional inline label. */\nexport function Checkbox({\n checked,\n className,\n defaultChecked = false,\n disabled = false,\n id,\n label,\n name,\n onBlur,\n onCheckedChange,\n onFocus,\n orientation = \"left\",\n recipe = \"auto\",\n required = false,\n value = \"on\",\n}: CheckboxProps) {\n const generatedId = React.useId();\n const controlId = id ?? generatedId;\n const [state, setState] = useControllableValue<CheckboxState>({\n controlled: checked,\n defaultValue: defaultChecked,\n onChange: (next) => onCheckedChange?.(next === true),\n });\n const isChecked = state === true;\n const isMixed = state === \"indeterminate\";\n const button = React.createElement(\"button\", {\n \"aria-checked\": isMixed ? \"mixed\" : isChecked,\n \"aria-labelledby\": label ? `${controlId}-label` : undefined,\n disabled,\n id: controlId,\n onBlur,\n onClick: () => {\n if (!disabled) {\n setState(!isChecked);\n }\n },\n onFocus,\n role: \"checkbox\",\n type: \"button\",\n \"data-sc-checked\": isChecked ? \"\" : undefined,\n \"data-sc-component\": \"checkbox\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-indeterminate\": isMixed ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n });\n const labelNode = label\n ? React.createElement(\"span\", { id: `${controlId}-label`, \"data-sc-component\": \"checkbox-label-text\" }, label)\n : null;\n\n return React.createElement(\n \"label\",\n {\n className,\n \"data-sc-component\": \"checkbox-label\",\n \"data-sc-orientation\": orientation,\n \"data-sc-recipe\": recipe,\n },\n orientation === \"right\" ? labelNode : button,\n React.createElement(\"input\", {\n checked: isChecked,\n disabled,\n name,\n readOnly: true,\n required,\n tabIndex: -1,\n type: \"checkbox\",\n value,\n \"data-sc-component\": \"visually-hidden-input\",\n }),\n orientation === \"right\" ? button : labelNode,\n );\n}\n\n/** Props for a host-adaptive switch. */\nexport type SwitchProps = PrimitiveProps & {\n id?: string;\n defaultChecked?: boolean;\n checked?: boolean;\n label?: React.ReactNode;\n onCheckedChange?: (nextState: boolean) => void;\n onBlur?: React.FocusEventHandler<HTMLButtonElement>;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n value?: string;\n className?: string;\n labelPosition?: \"start\" | \"end\";\n};\n\n/** Binary switch control with optional inline label. */\nexport function Switch({\n checked,\n className,\n defaultChecked = false,\n disabled = false,\n id,\n label,\n labelPosition = \"end\",\n name,\n onBlur,\n onCheckedChange,\n onFocus,\n recipe = \"auto\",\n required = false,\n value = \"on\",\n}: SwitchProps) {\n const generatedId = React.useId();\n const controlId = id ?? generatedId;\n const [state, setState] = useControllableValue<boolean>({\n controlled: checked,\n defaultValue: defaultChecked,\n onChange: onCheckedChange,\n });\n const button = React.createElement(\n \"button\",\n {\n \"aria-checked\": state,\n \"aria-labelledby\": label ? `${controlId}-label` : undefined,\n disabled,\n id: controlId,\n onBlur,\n onClick: () => {\n if (!disabled) {\n setState(!state);\n }\n },\n onFocus,\n role: \"switch\",\n type: \"button\",\n \"data-sc-checked\": state ? \"\" : undefined,\n \"data-sc-component\": \"switch\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n },\n React.createElement(\"span\", { \"data-sc-component\": \"switch-thumb\" }),\n );\n const labelNode = label\n ? React.createElement(\"span\", { id: `${controlId}-label`, \"data-sc-component\": \"switch-label-text\" }, label)\n : null;\n\n return React.createElement(\n \"label\",\n {\n className,\n \"data-sc-component\": \"switch-label\",\n \"data-sc-label-position\": labelPosition,\n \"data-sc-recipe\": recipe,\n },\n labelPosition === \"start\" ? labelNode : button,\n React.createElement(\"input\", {\n checked: state,\n disabled,\n name,\n readOnly: true,\n required,\n tabIndex: -1,\n type: \"checkbox\",\n value,\n \"data-sc-component\": \"visually-hidden-input\",\n }),\n labelPosition === \"start\" ? button : labelNode,\n );\n}\n\n/** Props for grouped radio choices. */\nexport type RadioGroupProps<T extends string = string> = PrimitiveProps & {\n defaultValue?: T;\n value?: T;\n name?: string;\n onChange?: (value: T) => void;\n /** Accessible label for the radio options. */\n \"aria-label\": string;\n /**\n * Determines the layout direction of the radio items.\n * @default \"row\"\n */\n direction?: Direction;\n disabled?: boolean;\n className?: string;\n children: React.ReactNode;\n required?: boolean;\n};\n\n/** Props for one radio option. */\nexport type RadioGroupItemProps<T extends string = string> = {\n value: T;\n disabled?: boolean;\n required?: boolean;\n block?: boolean;\n className?: string;\n children: React.ReactNode;\n};\n\ntype RadioGroupContextValue = {\n disabled: boolean;\n name?: string;\n onChange(value: string): void;\n recipe: ComponentRecipe;\n required: boolean;\n value?: string;\n};\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(null);\n\nfunction RadioGroupRoot<T extends string>({\n children,\n className,\n defaultValue,\n direction = \"row\",\n disabled = false,\n name,\n onChange,\n recipe = \"auto\",\n required = false,\n value,\n ...restProps\n}: RadioGroupProps<T>) {\n const [selected, setSelected] = useControllableValue<string | undefined>({\n controlled: value,\n defaultValue,\n onChange: (next) => {\n if (next !== undefined) {\n onChange?.(next as T);\n }\n },\n });\n\n return React.createElement(\n RadioGroupContext.Provider,\n {\n value: {\n disabled,\n name,\n onChange: setSelected,\n recipe,\n required,\n value: selected,\n },\n },\n React.createElement(\n \"div\",\n {\n ...restProps,\n className,\n role: \"radiogroup\",\n \"data-sc-component\": \"radio-group\",\n \"data-sc-direction\": direction,\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n },\n children,\n ),\n );\n}\n\nfunction RadioGroupItem<T extends string>({\n block = false,\n children,\n className,\n disabled = false,\n required,\n value,\n}: RadioGroupItemProps<T>) {\n const context = useRequiredContext(RadioGroupContext, \"RadioGroup.Item must be rendered inside RadioGroup\");\n const itemDisabled = context.disabled || disabled;\n const checked = context.value === value;\n\n return React.createElement(\n \"button\",\n {\n \"aria-checked\": checked,\n className,\n disabled: itemDisabled,\n onClick: () => {\n if (!itemDisabled) {\n context.onChange(value);\n }\n },\n role: \"radio\",\n type: \"button\",\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-checked\": checked ? \"\" : undefined,\n \"data-sc-component\": \"radio-item\",\n \"data-sc-disabled\": itemDisabled ? \"\" : undefined,\n \"data-sc-recipe\": context.recipe,\n },\n React.createElement(\"span\", { \"data-sc-component\": \"radio-indicator\" }),\n React.createElement(\"span\", { \"data-sc-component\": \"radio-label\" }, children),\n context.name\n ? React.createElement(\"input\", {\n checked,\n disabled: itemDisabled,\n name: context.name,\n readOnly: true,\n required: required ?? context.required,\n tabIndex: -1,\n type: \"radio\",\n value,\n \"data-sc-component\": \"visually-hidden-input\",\n })\n : null,\n );\n}\n\n/** Fieldset-compatible radio group with typed option values. */\nexport const RadioGroup = Object.assign(RadioGroupRoot, {\n Item: RadioGroupItem,\n});\n\n/** Props for grouped segmented buttons. */\nexport type SegmentedControlProps<T extends string = string> = PrimitiveProps & {\n value?: T;\n defaultValue?: T;\n onChange?: (nextValue: T) => void;\n onClick?: () => void;\n \"aria-label\": string;\n size?: ControlSize;\n gutterSize?: Sizes<\"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\">;\n disabled?: boolean;\n block?: boolean;\n pill?: boolean;\n className?: string;\n children: React.ReactNode;\n};\n\n/** Props for one segmented-control option. */\nexport type SegmentedControlOptionProps = {\n value: string;\n \"aria-label\"?: string;\n children: React.ReactNode;\n disabled?: boolean;\n};\n\ntype SegmentedControlContextValue = {\n disabled: boolean;\n onClick?: () => void;\n onChange(value: string): void;\n recipe: ComponentRecipe;\n selected?: string;\n};\n\nconst SegmentedControlContext = React.createContext<SegmentedControlContextValue | null>(null);\n\nfunction SegmentedControlRoot<T extends string>({\n block = false,\n children,\n className,\n defaultValue,\n disabled = false,\n gutterSize,\n onChange,\n onClick,\n pill = false,\n recipe = \"auto\",\n size = \"md\",\n value,\n ...restProps\n}: SegmentedControlProps<T>) {\n const [selected, setSelected] = useControllableValue<string | undefined>({\n controlled: value,\n defaultValue,\n onChange: (next) => {\n if (next !== undefined) {\n onChange?.(next as T);\n }\n },\n });\n\n return React.createElement(\n SegmentedControlContext.Provider,\n {\n value: {\n disabled,\n onChange: setSelected,\n onClick,\n recipe,\n selected,\n },\n },\n React.createElement(\n \"div\",\n {\n ...restProps,\n className,\n role: \"group\",\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-component\": \"segmented-control\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-gutter-size\": gutterSize,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-size\": size,\n },\n children,\n ),\n );\n}\n\nfunction SegmentedControlOption({\n children,\n disabled = false,\n value,\n ...restProps\n}: SegmentedControlOptionProps) {\n const context = useRequiredContext(\n SegmentedControlContext,\n \"SegmentedControl.Option must be rendered inside SegmentedControl\",\n );\n const selected = context.selected === value;\n const optionDisabled = context.disabled || disabled;\n\n return React.createElement(\n \"button\",\n {\n ...restProps,\n \"aria-pressed\": selected,\n disabled: optionDisabled,\n onClick: () => {\n context.onClick?.();\n if (!optionDisabled) {\n context.onChange(value);\n }\n },\n type: \"button\",\n \"data-sc-component\": \"segmented-option\",\n \"data-sc-disabled\": optionDisabled ? \"\" : undefined,\n \"data-sc-recipe\": context.recipe,\n \"data-sc-selected\": selected ? \"\" : undefined,\n },\n children,\n );\n}\n\n/** Compact segmented-control container with compound options. */\nexport const SegmentedControl = Object.assign(SegmentedControlRoot, {\n Option: SegmentedControlOption,\n});\n\n/** Select option displayed in `Select`. */\nexport type Option<T extends string = string> = {\n value: T;\n label: string;\n disabled?: boolean;\n description?: React.ReactNode;\n tooltip?: {\n content: React.ReactNode;\n maxWidth?: number;\n };\n};\n\n/** Labeled select option group. */\nexport type OptionGroup<T extends Option = Option> = {\n label: string;\n options: T[];\n optionsLimit?: {\n label: string;\n limit: number;\n };\n};\n\n/** Flat or grouped select options. */\nexport type Options<T extends Option = Option> = T[] | OptionGroup<T>[];\n\ntype CallbackWithOption<T extends Option> = (option: T) => void;\ntype CallbackWithOptions<T extends Option> = (options: T[]) => void;\ntype CallbackWithActionId = (actionId: string) => void;\ntype SearchPredicate<T extends Option> = (option: T, searchTerm: string) => boolean;\n\n/** Action rendered below a select option list. */\nexport type SelectAction = {\n id: string;\n label: string;\n Icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n className?: string;\n onSelect: CallbackWithActionId;\n};\n\n/** Preferred side for the select popup. */\nexport type PopoverSide = \"top\" | \"bottom\";\n\n/** Preferred alignment for the select popup. */\nexport type PopoverAlign = Alignment;\n\ntype CommonSelectProps<T extends Option> = PrimitiveProps & {\n options: Options<T>;\n disabled?: boolean;\n id?: string;\n required?: boolean;\n name?: string;\n placeholder?: string;\n loadingPlaceholder?: string;\n loading?: boolean;\n variant?: SelectControlProps[\"variant\"];\n pill?: boolean;\n size?: SelectControlProps[\"size\"];\n dropdownIconType?: SelectControlProps[\"dropdownIconType\"];\n actions?: SelectAction[];\n optionClassName?: string;\n OptionView?: React.FC<T>;\n TriggerStartIcon?: SelectControlProps[\"StartIcon\"];\n triggerClassName?: string;\n opticallyAlign?: \"start\" | \"end\";\n clearable?: boolean;\n block?: boolean;\n side?: PopoverSide;\n align?: PopoverAlign;\n alignOffset?: number;\n avoidCollisions?: boolean;\n listWidth?: number | \"auto\";\n listMinWidth?: number | \"auto\";\n listMaxWidth?: number | \"auto\";\n searchPredicate?: SearchPredicate<T>;\n searchPlaceholder?: string;\n searchEmptyMessage?: React.ReactNode;\n /** Sidecar-only testing and controlled-preview helper. */\n defaultOpen?: boolean;\n};\n\ntype SingleSelectProps<T extends Option> = {\n multiple?: false;\n value: string;\n onChange: CallbackWithOption<T>;\n TriggerView?: React.FC<T>;\n};\n\ntype MultiSelectTriggerViewProps<T extends Option> = {\n values: T[];\n selectedAll: boolean;\n};\n\ntype MultiSelectProps<T extends Option> = {\n multiple: true;\n value: string[];\n onChange: CallbackWithOptions<T>;\n TriggerView?: React.FC<MultiSelectTriggerViewProps<T>>;\n};\n\n/** Props for a host-adaptive select. */\nexport type SelectProps<T extends Option = Option> = (SingleSelectProps<T> | MultiSelectProps<T>) &\n CommonSelectProps<T>;\n\n/** Host-adaptive select with search, actions, and single or multi selection. */\nexport function Select<T extends Option = Option>({\n actions,\n block = true,\n clearable = false,\n defaultOpen = false,\n disabled = false,\n dropdownIconType = \"dropdown\",\n id,\n loading = false,\n loadingPlaceholder = \"Loading...\",\n multiple,\n name,\n onChange,\n OptionView,\n options,\n opticallyAlign,\n pill = false,\n placeholder = \"Select...\",\n recipe = \"auto\",\n required = false,\n searchEmptyMessage = \"No results\",\n searchPlaceholder = \"Search...\",\n searchPredicate = defaultSearchPredicate,\n size = \"md\",\n TriggerStartIcon,\n TriggerView,\n triggerClassName,\n value,\n variant = \"outline\",\n}: SelectProps<T>) {\n const [open, setOpen] = React.useState(defaultOpen);\n const [search, setSearch] = React.useState(\"\");\n const allOptions = React.useMemo(() => flattenOptions(options), [options]);\n const filteredOptions = React.useMemo(\n () => allOptions.filter((option) => searchPredicate(option, search)),\n [allOptions, search, searchPredicate],\n );\n const selectedOptions = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n return allOptions.filter((option) => values.includes(option.value));\n }, [allOptions, value]);\n const selected = selectedOptions[0];\n const triggerContent = renderSelectTriggerContent({\n loading,\n loadingPlaceholder,\n multiple: Boolean(multiple),\n placeholder,\n selected,\n selectedOptions,\n TriggerView: TriggerView as React.FC<unknown> | undefined,\n });\n\n const commitOption = (option: T) => {\n if (option.disabled) {\n return;\n }\n if (multiple) {\n const current = selectedOptions.some((selectedOption) => selectedOption.value === option.value)\n ? selectedOptions.filter((selectedOption) => selectedOption.value !== option.value)\n : [...selectedOptions, option];\n (onChange as CallbackWithOptions<T>)(current);\n return;\n }\n (onChange as CallbackWithOption<T>)(option);\n setOpen(false);\n };\n\n return React.createElement(\n \"div\",\n {\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-component\": \"select\",\n \"data-sc-open\": open ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n },\n React.createElement(SelectControl, {\n block,\n children: triggerContent,\n className: triggerClassName,\n disabled,\n dropdownIconType,\n id,\n loading,\n onClearClick:\n clearable && selectedOptions.length > 0\n ? () => {\n if (multiple) {\n (onChange as CallbackWithOptions<T>)([]);\n } else {\n (onChange as CallbackWithOption<T>)({ label: \"\", value: \"\" } as T);\n }\n }\n : undefined,\n onInteract: () => setOpen((next) => !next),\n opticallyAlign,\n pill,\n recipe,\n selected: selectedOptions.length > 0,\n size,\n StartIcon: TriggerStartIcon,\n variant,\n }),\n name\n ? renderHiddenSelectInputs({\n disabled,\n multiple: Boolean(multiple),\n name,\n required,\n selectedOptions,\n value,\n })\n : null,\n open\n ? React.createElement(\n \"div\",\n {\n role: \"listbox\",\n \"aria-multiselectable\": multiple || undefined,\n \"data-sc-component\": \"select-list\",\n \"data-sc-recipe\": recipe,\n },\n React.createElement(Input, {\n \"aria-label\": searchPlaceholder,\n onChange: (event) => setSearch(event.currentTarget.value),\n placeholder: searchPlaceholder,\n recipe,\n size: \"sm\",\n value: search,\n }),\n filteredOptions.length === 0\n ? React.createElement(\"div\", { \"data-sc-component\": \"select-empty\" }, searchEmptyMessage)\n : filteredOptions.map((option) => {\n const selectedOption = selectedOptions.some((selectedCandidate) => selectedCandidate.value === option.value);\n return React.createElement(\n \"button\",\n {\n className: undefined,\n disabled: option.disabled,\n key: option.value,\n onClick: () => commitOption(option),\n role: \"option\",\n type: \"button\",\n \"aria-selected\": selectedOption,\n \"data-sc-component\": \"select-option\",\n \"data-sc-disabled\": option.disabled ? \"\" : undefined,\n \"data-sc-selected\": selectedOption ? \"\" : undefined,\n },\n OptionView\n ? React.createElement(OptionView, option)\n : React.createElement(\n React.Fragment,\n null,\n React.createElement(\"span\", { \"data-sc-component\": \"select-option-label\" }, option.label),\n option.description\n ? React.createElement(\"span\", { \"data-sc-component\": \"select-option-description\" }, option.description)\n : null,\n ),\n );\n }),\n actions?.length\n ? React.createElement(\n \"div\",\n { \"data-sc-component\": \"select-actions\" },\n actions.map((action) =>\n React.createElement(\n \"button\",\n {\n className: action.className,\n key: action.id,\n onClick: () => action.onSelect(action.id),\n type: \"button\",\n \"data-sc-component\": \"select-action\",\n },\n action.Icon ? React.createElement(action.Icon, { \"aria-hidden\": true }) : null,\n action.label,\n ),\n ),\n )\n : null,\n )\n : null,\n );\n}\n\n/** Select trigger variant icon type. */\nexport type DropdownIconType = \"chevronDown\" | \"dropdown\" | \"none\";\n\n/** Props for a standalone select-like trigger. */\nexport type SelectControlProps = Omit<React.HTMLAttributes<HTMLSpanElement>, \"onClick\"> &\n PrimitiveProps & {\n variant?: Variants<\"soft\" | \"outline\" | \"ghost\">;\n pill?: boolean;\n block?: boolean;\n opticallyAlign?: \"start\" | \"end\";\n disabled?: boolean;\n invalid?: boolean;\n selected?: boolean;\n onClearClick?: () => void;\n onInteract?: () => void;\n size?: ControlSize;\n loading?: boolean;\n dropdownIconType?: DropdownIconType;\n StartIcon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n children: React.ReactNode;\n };\n\n/** Host-adaptive select trigger used by `Select` and custom controls. */\nexport const SelectControl = React.forwardRef<HTMLSpanElement, SelectControlProps>(function SelectControl(\n {\n block = true,\n children,\n disabled = false,\n dropdownIconType = \"dropdown\",\n invalid = false,\n loading = false,\n onClearClick,\n onInteract,\n opticallyAlign,\n pill = false,\n recipe = \"auto\",\n selected = false,\n size = \"md\",\n StartIcon,\n tabIndex,\n variant = \"outline\",\n ...props\n },\n ref,\n) {\n return React.createElement(\n \"span\",\n {\n ref,\n role: \"button\",\n tabIndex: disabled ? -1 : (tabIndex ?? 0),\n onClick: () => {\n if (!disabled) {\n onInteract?.();\n }\n },\n onKeyDown: (event) => {\n props.onKeyDown?.(event);\n if (!disabled && !event.defaultPrevented && (event.key === \"Enter\" || event.key === \" \")) {\n event.preventDefault();\n onInteract?.();\n }\n },\n \"data-sc-block\": block ? \"\" : undefined,\n \"data-sc-component\": \"select-control\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-invalid\": invalid ? \"\" : undefined,\n \"data-sc-optically-align\": opticallyAlign,\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-selected\": selected ? \"\" : undefined,\n \"data-sc-size\": size,\n \"data-sc-variant\": variant,\n ...props,\n },\n StartIcon ? React.createElement(StartIcon, { \"aria-hidden\": true }) : null,\n React.createElement(\"span\", { \"data-sc-component\": \"select-control-value\" }, children),\n loading ? React.createElement(LoadingIndicator, { \"aria-hidden\": true, size: \"1em\" }) : null,\n onClearClick\n ? React.createElement(\n \"button\",\n {\n \"aria-label\": \"Clear selection\",\n onClick: (event) => {\n event.stopPropagation();\n onClearClick();\n },\n type: \"button\",\n \"data-sc-component\": \"select-clear\",\n },\n \"×\",\n )\n : null,\n dropdownIconType === \"none\"\n ? null\n : React.createElement(\"span\", { \"aria-hidden\": true, \"data-sc-component\": \"select-dropdown-icon\" }, dropdownIconType === \"chevronDown\" ? \"⌄\" : \"▾\"),\n );\n});\n\n/** Props for status badges. */\nexport type BadgeProps = Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\"> &\n PrimitiveProps & {\n children?: React.ReactNode;\n variant?: Variants<\"solid\" | \"soft\" | \"outline\">;\n size?: Sizes<\"sm\" | \"md\" | \"lg\">;\n pill?: boolean;\n color?: SemanticColors<\"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\" | \"discovery\">;\n /** Backward-compatible alias for `color`. */\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\";\n };\n\n/** Compact status badge using the active host recipe. */\nexport const Badge = React.forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n children,\n color,\n pill = false,\n recipe = \"auto\",\n size = \"sm\",\n tone,\n variant = \"soft\",\n ...props\n },\n ref,\n) {\n const resolvedColor = color ?? toneToColor(tone) ?? \"secondary\";\n\n return React.createElement(\n \"span\",\n {\n ref,\n \"data-sc-color\": resolvedColor,\n \"data-sc-component\": \"badge\",\n \"data-sc-pill\": pill ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-size\": size,\n \"data-sc-tone\": tone,\n \"data-sc-variant\": variant,\n ...props,\n },\n children,\n );\n});\n\n/** Props for alert blocks. */\nexport type AlertProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"color\" | \"title\"> &\n PrimitiveProps & {\n color?: SemanticColors<\"primary\" | \"danger\" | \"success\" | \"info\" | \"discovery\" | \"caution\" | \"warning\">;\n variant?: Variants<\"solid\" | \"soft\" | \"outline\">;\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n actionsPlacement?: \"end\" | \"bottom\";\n indicator?: React.ReactNode | false;\n actionsClassName?: string;\n /** Backward-compatible alias for `color`. */\n tone?: \"default\" | \"success\" | \"warning\" | \"danger\";\n };\n\n/** Portable alert block for compact status and guidance. */\nexport const Alert = React.forwardRef<HTMLDivElement, AlertProps>(function Alert(\n {\n actions,\n actionsClassName,\n actionsPlacement,\n children,\n color,\n description,\n indicator,\n recipe = \"auto\",\n role = \"note\",\n title,\n tone,\n variant = \"soft\",\n ...props\n },\n ref,\n) {\n const resolvedColor = color ?? toneToColor(tone) ?? \"primary\";\n return React.createElement(\n \"div\",\n {\n ref,\n role,\n \"data-sc-actions-placement\": actionsPlacement,\n \"data-sc-color\": resolvedColor,\n \"data-sc-component\": \"alert\",\n \"data-sc-recipe\": recipe,\n \"data-sc-tone\": tone,\n \"data-sc-variant\": variant,\n ...props,\n },\n indicator === false\n ? null\n : React.createElement(\n \"span\",\n { \"aria-hidden\": true, \"data-sc-component\": \"alert-indicator\" },\n indicator ?? \"•\",\n ),\n React.createElement(\n \"div\",\n { \"data-sc-component\": \"alert-content\" },\n title ? React.createElement(\"div\", { \"data-sc-component\": \"alert-title\" }, title) : null,\n description ? React.createElement(\"div\", { \"data-sc-component\": \"alert-description\" }, description) : null,\n children,\n ),\n actions\n ? React.createElement(\n \"div\",\n { className: actionsClassName, \"data-sc-component\": \"alert-actions\" },\n actions,\n )\n : null,\n );\n});\n\n/** Backward-compatible alias for alerts. */\nexport const Callout = Alert;\nexport type CalloutProps = AlertProps;\n\n/** Props for a compact avatar. */\nexport type AvatarProps = Omit<React.HTMLAttributes<HTMLSpanElement>, \"color\"> &\n PrimitiveProps & {\n size?: number;\n overflowCount?: number;\n name?: string;\n color?: SemanticColors<\"primary\" | \"secondary\" | \"success\" | \"info\" | \"discovery\" | \"danger\">;\n variant?: Variants<\"soft\" | \"solid\">;\n imageUrl?: string;\n Icon?: React.ComponentType<React.SVGProps<SVGSVGElement>>;\n onClick?: () => void;\n onPointerDown?: () => void;\n /** Backward-compatible alias for `imageUrl`. */\n src?: string;\n /** Backward-compatible alt text for image avatars. */\n alt?: string;\n /** Backward-compatible fallback content. */\n fallback?: React.ReactNode;\n };\n\n/** Circular avatar with image, initials, overflow, icon, and fallback support. */\nexport const Avatar = React.forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n {\n alt = \"\",\n color = \"secondary\",\n fallback,\n Icon,\n imageUrl,\n name,\n overflowCount,\n recipe = \"auto\",\n size = 28,\n src,\n variant = \"soft\",\n ...props\n },\n ref,\n) {\n const url = imageUrl ?? src;\n const label = overflowCount !== undefined ? formatOverflow(overflowCount) : initialsFromName(name);\n const interactive = Boolean(props.onClick || props.onPointerDown);\n\n return React.createElement(\n \"span\",\n {\n ref,\n role: interactive ? \"button\" : undefined,\n tabIndex: interactive ? 0 : undefined,\n \"data-sc-color\": color,\n \"data-sc-component\": \"avatar\",\n \"data-sc-interactive\": interactive ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-variant\": variant,\n style: { \"--sc-avatar-size\": `${size}px`, ...props.style } as React.CSSProperties,\n ...props,\n },\n url ? React.createElement(\"img\", { alt, src: url }) : null,\n !url && Icon ? React.createElement(Icon, { \"aria-hidden\": true }) : null,\n !url && !Icon ? fallback ?? label : null,\n );\n});\n\n/** Props for stacked avatar groups. */\nexport type AvatarGroupProps = PrimitiveProps & {\n className?: string;\n stack?: \"start\" | \"end\";\n size?: number;\n children: React.ReactNode;\n};\n\n/** Stacked avatar group using the active host recipe. */\nexport function AvatarGroup({ children, className, recipe = \"auto\", size, stack = \"start\" }: AvatarGroupProps) {\n return React.createElement(\n \"div\",\n {\n className,\n \"data-sc-component\": \"avatar-group\",\n \"data-sc-recipe\": recipe,\n \"data-sc-stack\": stack,\n style: size ? ({ \"--sc-avatar-size\": `${size}px` } as React.CSSProperties) : undefined,\n },\n children,\n );\n}\n\n/** Props for empty-message containers. */\nexport type EmptyMessageProps = PrimitiveProps & {\n children: React.ReactNode;\n className?: string;\n fill?: \"static\" | \"absolute\" | \"none\";\n};\n\n/** Props for empty-message icon slots. */\nexport type EmptyMessageIconProps = PrimitiveProps & {\n size?: Sizes<\"sm\" | \"md\">;\n color?: SemanticColors<\"secondary\" | \"danger\" | \"warning\">;\n children: React.ReactNode;\n className?: string;\n};\n\n/** Props for empty-message title slots. */\nexport type EmptyMessageTitleProps = PrimitiveProps & {\n children: React.ReactNode;\n className?: string;\n color?: SemanticColors<\"secondary\" | \"danger\" | \"warning\">;\n};\n\nconst EmptyMessageContext = React.createContext<ComponentRecipe>(\"auto\");\n\nfunction EmptyMessageRoot({ children, className, fill = \"static\", recipe = \"auto\" }: EmptyMessageProps) {\n return React.createElement(\n EmptyMessageContext.Provider,\n { value: recipe },\n React.createElement(\n \"div\",\n {\n className,\n \"data-sc-component\": \"empty-message\",\n \"data-sc-fill\": fill,\n \"data-sc-recipe\": recipe,\n },\n children,\n ),\n );\n}\n\nfunction EmptyMessageIcon({ children, className, color = \"secondary\", recipe, size = \"sm\" }: EmptyMessageIconProps) {\n const inheritedRecipe = React.useContext(EmptyMessageContext);\n return React.createElement(\n \"div\",\n {\n className,\n \"data-sc-color\": color,\n \"data-sc-component\": \"empty-message-icon\",\n \"data-sc-recipe\": recipe ?? inheritedRecipe,\n \"data-sc-size\": size,\n },\n children,\n );\n}\n\nfunction EmptyMessageTitle({ children, className, color = \"secondary\", recipe }: EmptyMessageTitleProps) {\n const inheritedRecipe = React.useContext(EmptyMessageContext);\n return React.createElement(\n \"div\",\n {\n className,\n \"data-sc-color\": color,\n \"data-sc-component\": \"empty-message-title\",\n \"data-sc-recipe\": recipe ?? inheritedRecipe,\n },\n children,\n );\n}\n\nfunction EmptyMessageDescription({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return React.createElement(\"div\", { className, \"data-sc-component\": \"empty-message-description\" }, children);\n}\n\nfunction EmptyMessageActionRow({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}) {\n return React.createElement(\"div\", { className, \"data-sc-component\": \"empty-message-actions\" }, children);\n}\n\n/** Empty-state primitive with compound slots matching the OpenAI UI shape. */\nexport const EmptyMessage = Object.assign(EmptyMessageRoot, {\n ActionRow: EmptyMessageActionRow,\n Description: EmptyMessageDescription,\n Icon: EmptyMessageIcon,\n Title: EmptyMessageTitle,\n});\n\n/** Backward-compatible props for early Sidecar empty states. */\nexport type EmptyStateProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> &\n PrimitiveProps & {\n title: React.ReactNode;\n action?: React.ReactNode;\n };\n\n/** Backward-compatible wrapper around `EmptyMessage`. */\nexport const EmptyState = React.forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { action, children, recipe = \"auto\", title, ...props },\n ref,\n) {\n return React.createElement(\n \"div\",\n { ref, ...props },\n React.createElement(\n EmptyMessage,\n {\n recipe,\n children: [\n React.createElement(EmptyMessage.Title, { children: title, key: \"title\" }),\n children\n ? React.createElement(EmptyMessage.Description, { children, key: \"description\" })\n : null,\n action\n ? React.createElement(EmptyMessage.ActionRow, { children: action, key: \"action\" })\n : null,\n ],\n },\n ),\n );\n});\n\n/** Props for loading dot indicators. */\nexport type LoadingDotsProps = Omit<React.ComponentProps<\"div\">, \"children\"> & PrimitiveProps;\n\n/** Three-dot loading indicator. */\nexport function LoadingDots({ recipe = \"auto\", ...props }: LoadingDotsProps) {\n return React.createElement(\n \"div\",\n {\n \"aria-hidden\": true,\n \"data-sc-component\": \"loading-dots\",\n \"data-sc-recipe\": recipe,\n ...props,\n },\n React.createElement(\"span\", null),\n React.createElement(\"span\", null),\n React.createElement(\"span\", null),\n );\n}\n\n/** Props for circular indeterminate indicators. */\nexport type LoadingIndicatorProps = {\n className?: string;\n size?: number | string;\n strokeWidth?: number;\n} & Omit<React.ComponentProps<\"div\">, \"children\"> &\n PrimitiveProps;\n\n/** Circular indeterminate loading indicator. */\nexport function LoadingIndicator({\n className,\n recipe = \"auto\",\n size = \"1em\",\n strokeWidth = 2,\n style,\n ...props\n}: LoadingIndicatorProps) {\n return React.createElement(\n \"div\",\n {\n className,\n \"data-sc-component\": \"loading-indicator\",\n \"data-sc-recipe\": recipe,\n style: { \"--sc-indicator-size\": typeof size === \"number\" ? `${size}px` : size, ...style } as React.CSSProperties,\n ...props,\n },\n React.createElement(\n \"svg\",\n {\n viewBox: \"0 0 24 24\",\n \"aria-hidden\": true,\n },\n React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 9,\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth,\n }),\n ),\n );\n}\n\n/** Props for determinate or simulated circular progress. */\nexport type CircularProgressProps = Omit<React.ComponentProps<\"div\">, \"children\"> &\n PrimitiveProps & {\n maxDuration?: number;\n done?: boolean;\n progress?: number;\n size?: number | string;\n strokeWidth?: number;\n trackActiveColor?: string;\n trackColor?: string;\n };\n\n/** Circular progress indicator with optional determinate value. */\nexport function CircularProgress({\n className,\n done = false,\n progress,\n recipe = \"auto\",\n size = 28,\n strokeWidth = 2,\n style,\n trackActiveColor = \"currentColor\",\n trackColor = \"color-mix(in srgb, currentColor 18%, transparent)\",\n ...props\n}: CircularProgressProps) {\n const value = done ? 100 : Math.max(0, Math.min(100, progress ?? 66));\n const radius = 10;\n const circumference = 2 * Math.PI * radius;\n const dashOffset = circumference - (value / 100) * circumference;\n\n return React.createElement(\n \"div\",\n {\n className,\n role: \"progressbar\",\n \"aria-valuemax\": 100,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": value,\n \"data-sc-component\": \"circular-progress\",\n \"data-sc-recipe\": recipe,\n style: { \"--sc-progress-size\": typeof size === \"number\" ? `${size}px` : size, ...style } as React.CSSProperties,\n ...props,\n },\n React.createElement(\n \"svg\",\n { viewBox: \"0 0 24 24\", \"aria-hidden\": true },\n React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n fill: \"none\",\n r: radius,\n stroke: trackColor,\n strokeWidth,\n }),\n React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n fill: \"none\",\n r: radius,\n stroke: trackActiveColor,\n strokeDasharray: circumference,\n strokeDashoffset: dashOffset,\n strokeLinecap: \"round\",\n strokeWidth,\n transform: \"rotate(-90 12 12)\",\n }),\n ),\n );\n}\n\n/** Backward-compatible alias for indeterminate loading. */\nexport const Spinner = LoadingIndicator;\nexport type SpinnerProps = LoadingIndicatorProps;\n\n/** Props for progress bars. */\nexport type ProgressProps = React.ProgressHTMLAttributes<HTMLProgressElement> & PrimitiveProps;\n\n/** Native progress element with host-adaptive colors. */\nexport const Progress = React.forwardRef<HTMLProgressElement, ProgressProps>(function Progress(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"progress\", {\n ref,\n \"data-sc-component\": \"progress\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for shimmer text. */\nexport type ShimmerTextProps = PrimitiveProps & {\n as?: \"p\" | \"span\" | \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\" | \"h6\" | \"div\";\n children: React.ReactNode;\n className?: string;\n};\n\n/** Text skeleton shimmer that preserves the surrounding typography. */\nexport function ShimmerText({ as: Tag = \"span\", children, className, recipe = \"auto\" }: ShimmerTextProps) {\n return React.createElement(\n Tag,\n {\n className,\n \"data-sc-component\": \"shimmer-text\",\n \"data-sc-recipe\": recipe,\n },\n children,\n );\n}\n\n/** Props for text links. */\nexport type TextLinkProps = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, \"children\"> &\n PrimitiveProps & {\n children: React.ReactNode;\n primary?: boolean;\n underline?: boolean;\n forceExternal?: boolean;\n };\n\n/** Anchor with host-adaptive text-link affordances. */\nexport const TextLink = React.forwardRef<HTMLAnchorElement, TextLinkProps>(function TextLink(\n {\n children,\n forceExternal,\n href,\n primary = false,\n recipe = \"auto\",\n rel,\n target,\n underline = true,\n ...props\n },\n ref,\n) {\n const external = forceExternal ?? Boolean(href && /^(?:[a-z][a-z0-9+.-]*:)?\\/\\//i.test(href));\n return React.createElement(\n \"a\",\n {\n ref,\n \"data-sc-component\": \"text-link\",\n \"data-sc-primary\": primary ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n \"data-sc-underline\": underline ? \"\" : undefined,\n href,\n rel: external && target === \"_blank\" ? mergeRel(rel, \"noopener noreferrer\") : rel,\n target,\n ...props,\n },\n children,\n );\n});\n\n/** Props for images inside widgets. */\nexport type ImageProps = React.ImgHTMLAttributes<HTMLImageElement> &\n PrimitiveProps & {\n forceRenderAfterLoadFail?: boolean;\n };\n\n/** Responsive image primitive with stable block sizing defaults. */\nexport const Image = React.forwardRef<HTMLImageElement, ImageProps>(function Image(\n { forceRenderAfterLoadFail: _forceRenderAfterLoadFail, recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"img\", {\n ref,\n \"data-sc-component\": \"image\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for skeleton loading blocks. */\nexport type SkeletonProps = React.HTMLAttributes<HTMLDivElement> &\n PrimitiveProps & {\n width?: string;\n height?: string;\n };\n\n/** Host-adaptive skeleton block for widget loading states. */\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { height, recipe = \"auto\", style, width, ...props },\n ref,\n) {\n return React.createElement(\"div\", {\n ref,\n \"aria-hidden\": true,\n \"data-sc-component\": \"skeleton\",\n \"data-sc-recipe\": recipe,\n style: { width, height, ...style },\n ...props,\n });\n});\n\n/** Props for form-field wrappers. */\nexport type FormFieldProps = React.HTMLAttributes<HTMLDivElement> &\n PrimitiveProps & {\n invalid?: boolean;\n disabled?: boolean;\n required?: boolean;\n };\n\ntype FieldContextValue = {\n controlId: string;\n descriptionId: string;\n errorId: string;\n disabled: boolean;\n invalid: boolean;\n required: boolean;\n};\n\nconst FieldContext = React.createContext<FieldContextValue | null>(null);\n\n/** Form field wrapper that wires labels, descriptions, errors, and controls. */\nexport function FormField({\n children,\n disabled = false,\n id,\n invalid = false,\n recipe = \"auto\",\n required = false,\n ...props\n}: FormFieldProps) {\n const generatedId = React.useId();\n const controlId = id ?? generatedId;\n const context = React.useMemo(\n () => ({\n controlId,\n descriptionId: `${controlId}-description`,\n disabled,\n errorId: `${controlId}-error`,\n invalid,\n required,\n }),\n [controlId, disabled, invalid, required],\n );\n\n return React.createElement(\n FieldContext.Provider,\n { value: context },\n React.createElement(\n \"div\",\n {\n \"data-sc-component\": \"form-field\",\n \"data-sc-disabled\": disabled ? \"\" : undefined,\n \"data-sc-invalid\": invalid ? \"\" : undefined,\n \"data-sc-recipe\": recipe,\n ...props,\n },\n children,\n ),\n );\n}\n\n/** Props for field labels. */\nexport type FieldLabelProps = React.LabelHTMLAttributes<HTMLLabelElement> & PrimitiveProps;\n\n/** Label that automatically binds to the nearest `FormField` control. */\nexport const FieldLabel = React.forwardRef<HTMLLabelElement, FieldLabelProps>(function FieldLabel(\n { children, htmlFor, recipe = \"auto\", ...props },\n ref,\n) {\n const field = React.useContext(FieldContext);\n return React.createElement(\n \"label\",\n {\n ref,\n htmlFor: htmlFor ?? field?.controlId,\n \"data-sc-component\": \"field-label\",\n \"data-sc-recipe\": recipe,\n ...props,\n },\n children,\n field?.required ? React.createElement(\"span\", { \"aria-hidden\": true, \"data-sc-component\": \"field-required\" }, \"*\") : null,\n );\n});\n\n/** Props for field descriptions. */\nexport type FieldDescriptionProps = React.HTMLAttributes<HTMLParagraphElement> & PrimitiveProps;\n\n/** Description text that automatically binds to the nearest `FormField`. */\nexport const FieldDescription = React.forwardRef<HTMLParagraphElement, FieldDescriptionProps>(function FieldDescription(\n { id, recipe = \"auto\", ...props },\n ref,\n) {\n const field = React.useContext(FieldContext);\n return React.createElement(\"p\", {\n ref,\n id: id ?? field?.descriptionId,\n \"data-sc-component\": \"field-description\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for field errors. */\nexport type FieldErrorProps = React.HTMLAttributes<HTMLParagraphElement> & PrimitiveProps;\n\n/** Error text that automatically binds to the nearest invalid `FormField`. */\nexport const FieldError = React.forwardRef<HTMLParagraphElement, FieldErrorProps>(function FieldError(\n { id, recipe = \"auto\", ...props },\n ref,\n) {\n const field = React.useContext(FieldContext);\n return React.createElement(\"p\", {\n ref,\n id: id ?? field?.errorId,\n role: \"alert\",\n \"data-sc-component\": \"field-error\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for neutral surfaces such as panels and repeated cards. */\nexport type SurfaceProps = React.HTMLAttributes<HTMLDivElement> &\n PrimitiveProps & {\n variant?: \"plain\" | \"card\" | \"inset\";\n };\n\n/** Transparent-by-default surface that can opt into card framing. */\nexport const Surface = React.forwardRef<HTMLDivElement, SurfaceProps>(function Surface(\n { recipe = \"auto\", variant = \"plain\", ...props },\n ref,\n) {\n return React.createElement(\"div\", {\n ref,\n \"data-sc-component\": \"surface\",\n \"data-sc-recipe\": recipe,\n \"data-sc-variant\": variant,\n ...props,\n });\n});\n\n/** Props for simple vertical layout stacks. */\nexport type StackProps = React.HTMLAttributes<HTMLDivElement> &\n PrimitiveProps & {\n gap?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n };\n\n/** Vertical stack with host-appropriate spacing tokens. */\nexport const Stack = React.forwardRef<HTMLDivElement, StackProps>(function Stack(\n { gap = \"md\", recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"div\", {\n ref,\n \"data-sc-component\": \"stack\",\n \"data-sc-gap\": gap,\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for horizontal inline layout. */\nexport type InlineProps = React.HTMLAttributes<HTMLDivElement> &\n PrimitiveProps & {\n align?: \"start\" | \"center\" | \"end\";\n gap?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n wrap?: boolean;\n };\n\n/** Horizontal layout primitive for controls and compact metadata. */\nexport const Inline = React.forwardRef<HTMLDivElement, InlineProps>(function Inline(\n { align = \"center\", gap = \"sm\", recipe = \"auto\", wrap = true, ...props },\n ref,\n) {\n return React.createElement(\"div\", {\n ref,\n \"data-sc-align\": align,\n \"data-sc-component\": \"inline\",\n \"data-sc-gap\": gap,\n \"data-sc-recipe\": recipe,\n \"data-sc-wrap\": wrap ? \"\" : undefined,\n ...props,\n });\n});\n\n/** Props for a host-adaptive divider. */\nexport type DividerProps = React.HTMLAttributes<HTMLHRElement> & PrimitiveProps;\n\n/** Thin separator using the active host border token. */\nexport const Divider = React.forwardRef<HTMLHRElement, DividerProps>(function Divider(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"hr\", {\n ref,\n \"data-sc-component\": \"divider\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for inline code text. */\nexport type CodeProps = React.HTMLAttributes<HTMLElement> & PrimitiveProps;\n\n/** Inline code primitive for ids, paths, and short literals. */\nexport const Code = React.forwardRef<HTMLElement, CodeProps>(function Code(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"code\", {\n ref,\n \"data-sc-component\": \"code\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for tab-list composition. */\nexport type TabsProps = React.HTMLAttributes<HTMLDivElement> & PrimitiveProps;\n\n/** Minimal tabs container for author-composed tab buttons and panels. */\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"div\", {\n ref,\n \"data-sc-component\": \"tabs\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for numeric slider input. */\nexport type SliderProps = Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> & PrimitiveProps;\n\n/** Range slider using host accent colors. */\nexport const Slider = React.forwardRef<HTMLInputElement, SliderProps>(function Slider(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"input\", {\n ref,\n type: \"range\",\n \"data-sc-component\": \"slider\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Props for tabular data. */\nexport type TableProps = React.TableHTMLAttributes<HTMLTableElement> & PrimitiveProps;\n\n/** Simple table wrapper with host border and text defaults. */\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(function Table(\n { recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\"table\", {\n ref,\n \"data-sc-component\": \"table\",\n \"data-sc-recipe\": recipe,\n ...props,\n });\n});\n\n/** Key-value item rendered by `KeyValue`. */\nexport type KeyValueItem = {\n key: React.ReactNode;\n value: React.ReactNode;\n};\n\n/** Props for compact definition-list metadata. */\nexport type KeyValueProps = React.HTMLAttributes<HTMLDListElement> &\n PrimitiveProps & {\n items: readonly KeyValueItem[];\n };\n\n/** Compact key-value list for facts and metadata. */\nexport const KeyValue = React.forwardRef<HTMLDListElement, KeyValueProps>(function KeyValue(\n { items, recipe = \"auto\", ...props },\n ref,\n) {\n return React.createElement(\n \"dl\",\n {\n ref,\n \"data-sc-component\": \"key-value\",\n \"data-sc-recipe\": recipe,\n ...props,\n },\n items.map((item, index) =>\n React.createElement(\n \"div\",\n { \"data-sc-component\": \"key-value-row\", key: index },\n React.createElement(\"dt\", null, item.key),\n React.createElement(\"dd\", null, item.value),\n ),\n ),\n );\n});\n\n/** Creates a scoped set of primitives pinned to one host recipe. */\nexport function createPrimitiveComponents(recipe: Exclude<ComponentRecipe, \"auto\">) {\n return {\n Alert: pinRecipe(Alert, recipe),\n Avatar: pinRecipe(Avatar, recipe),\n AvatarGroup: pinRecipe(AvatarGroup, recipe),\n Badge: pinRecipe(Badge, recipe),\n Button: pinRecipe(Button, recipe),\n ButtonLink: pinRecipe(ButtonLink, recipe),\n Callout: pinRecipe(Callout, recipe),\n Checkbox: pinRecipe(Checkbox, recipe),\n CircularProgress: pinRecipe(CircularProgress, recipe),\n Code: pinRecipe(Code, recipe),\n CopyButton: pinRecipe(CopyButton, recipe),\n Divider: pinRecipe(Divider, recipe),\n EmptyMessage: pinRecipe(EmptyMessage, recipe),\n EmptyState: pinRecipe(EmptyState, recipe),\n FieldDescription: pinRecipe(FieldDescription, recipe),\n FieldError: pinRecipe(FieldError, recipe),\n FieldLabel: pinRecipe(FieldLabel, recipe),\n FormField: pinRecipe(FormField, recipe),\n Heading: pinRecipe(Heading, recipe),\n Image: pinRecipe(Image, recipe),\n Inline: pinRecipe(Inline, recipe),\n Input: pinRecipe(Input, recipe),\n KeyValue: pinRecipe(KeyValue, recipe),\n LoadingDots: pinRecipe(LoadingDots, recipe),\n LoadingIndicator: pinRecipe(LoadingIndicator, recipe),\n Progress: pinRecipe(Progress, recipe),\n RadioGroup: pinRecipe(RadioGroup, recipe),\n SegmentedControl: pinRecipe(SegmentedControl, recipe),\n Select: pinRecipe(Select, recipe),\n SelectControl: pinRecipe(SelectControl, recipe),\n ShimmerText: pinRecipe(ShimmerText, recipe),\n Skeleton: pinRecipe(Skeleton, recipe),\n Slider: pinRecipe(Slider, recipe),\n Spinner: pinRecipe(Spinner, recipe),\n Stack: pinRecipe(Stack, recipe),\n Surface: pinRecipe(Surface, recipe),\n Switch: pinRecipe(Switch, recipe),\n Table: pinRecipe(Table, recipe),\n Tabs: pinRecipe(Tabs, recipe),\n Text: pinRecipe(Text, recipe),\n Textarea: pinRecipe(Textarea, recipe),\n TextField: pinRecipe(TextField, recipe),\n TextLink: pinRecipe(TextLink, recipe),\n };\n}\n\nfunction normalizeButtonVisual({\n color,\n intent,\n variant,\n}: Pick<ButtonVisualProps, \"color\" | \"intent\" | \"variant\">): {\n color: SemanticColor;\n variant: Variant;\n} {\n if (variant && isSemanticColor(variant)) {\n return { color: variant, variant: defaultVariantForColor(variant) };\n }\n\n if (variant === \"ghost\") {\n return { color: color ?? \"secondary\", variant: \"ghost\" };\n }\n\n if (intent === \"ghost\") {\n return { color: color ?? \"secondary\", variant: \"ghost\" };\n }\n\n const resolvedColor = color ?? (intent && isSemanticColor(intent) ? intent : \"secondary\");\n return { color: resolvedColor, variant: (variant as Variant | undefined) ?? defaultVariantForColor(resolvedColor) };\n}\n\nfunction defaultVariantForColor(color: SemanticColor): Variant {\n return color === \"secondary\" ? \"soft\" : \"solid\";\n}\n\nfunction isSemanticColor(value: string): value is SemanticColor {\n return [\"primary\", \"secondary\", \"danger\", \"success\", \"warning\", \"caution\", \"discovery\", \"info\"].includes(value);\n}\n\nfunction toneToColor(tone?: \"default\" | \"success\" | \"warning\" | \"danger\") {\n switch (tone) {\n case \"success\":\n return \"success\";\n case \"warning\":\n return \"warning\";\n case \"danger\":\n return \"danger\";\n case \"default\":\n case undefined:\n return undefined;\n }\n}\n\n/** Merges anchor rel tokens without duplicating caller-supplied values. */\nfunction mergeRel(current: string | undefined, required: string): string {\n return [...new Set([...(current?.split(/\\s+/).filter(Boolean) ?? []), ...required.split(/\\s+/)])].join(\" \");\n}\n\nfunction useControllableValue<T>({\n controlled,\n defaultValue,\n onChange,\n}: {\n controlled?: T;\n defaultValue: T;\n onChange?: (nextValue: T) => void;\n}) {\n const [uncontrolled, setUncontrolled] = React.useState(defaultValue);\n const value = controlled ?? uncontrolled;\n const setValue = React.useCallback(\n (nextValue: T) => {\n if (controlled === undefined) {\n setUncontrolled(nextValue);\n }\n onChange?.(nextValue);\n },\n [controlled, onChange],\n );\n\n return [value, setValue] as const;\n}\n\nfunction useRequiredContext<T>(context: React.Context<T | null>, message: string): T {\n const value = React.useContext(context);\n if (value === null) {\n throw new Error(message);\n }\n return value;\n}\n\nfunction useMergedRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n return React.useCallback(\n (node: T) => {\n for (const ref of refs) {\n if (!ref) {\n continue;\n }\n if (typeof ref === \"function\") {\n ref(node);\n } else {\n ref.current = node;\n }\n }\n },\n [refs],\n );\n}\n\nfunction describedBy(\n existing: string | undefined,\n field: FieldContextValue | null,\n invalid: boolean,\n) {\n const ids = [existing, field?.descriptionId, invalid ? field?.errorId : undefined].filter(Boolean);\n return ids.length ? ids.join(\" \") : undefined;\n}\n\nfunction flattenOptions<T extends Option>(options: Options<T>): T[] {\n return options.flatMap((entry) => (isOptionGroup(entry) ? entry.options : [entry]));\n}\n\nfunction isOptionGroup<T extends Option>(entry: T | OptionGroup<T>): entry is OptionGroup<T> {\n return Array.isArray((entry as OptionGroup<T>).options);\n}\n\nfunction defaultSearchPredicate<T extends Option>(option: T, searchTerm: string) {\n if (!searchTerm) {\n return true;\n }\n return `${option.label} ${option.description ?? \"\"}`.toLowerCase().includes(searchTerm.toLowerCase());\n}\n\nfunction renderSelectTriggerContent<T extends Option>({\n loading,\n loadingPlaceholder,\n multiple,\n placeholder,\n selected,\n selectedOptions,\n TriggerView,\n}: {\n loading: boolean;\n loadingPlaceholder: string;\n multiple: boolean;\n placeholder: string;\n selected?: T;\n selectedOptions: T[];\n TriggerView?: React.FC<unknown>;\n}) {\n if (loading && selectedOptions.length === 0) {\n return loadingPlaceholder;\n }\n if (TriggerView) {\n const View = TriggerView as React.ComponentType<Record<string, unknown>>;\n return multiple\n ? React.createElement(View, {\n selectedAll: false,\n values: selectedOptions,\n })\n : selected\n ? React.createElement(View, selected)\n : placeholder;\n }\n if (multiple) {\n return selectedOptions.length ? `${selectedOptions.length} selected` : placeholder;\n }\n return selected?.label || placeholder;\n}\n\nfunction renderHiddenSelectInputs<T extends Option>({\n disabled,\n multiple,\n name,\n required,\n selectedOptions,\n value,\n}: {\n disabled: boolean;\n multiple: boolean;\n name: string;\n required: boolean;\n selectedOptions: T[];\n value: string | string[];\n}) {\n if (multiple) {\n return selectedOptions.map((option) =>\n React.createElement(\"input\", {\n disabled,\n key: option.value,\n name,\n readOnly: true,\n required,\n type: \"hidden\",\n value: option.value,\n }),\n );\n }\n return React.createElement(\"input\", {\n disabled,\n name,\n readOnly: true,\n required,\n type: \"hidden\",\n value: Array.isArray(value) ? \"\" : value,\n });\n}\n\nfunction initialsFromName(name?: string) {\n if (!name) {\n return null;\n }\n const initials = name\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .map((part) => part[0]?.toUpperCase())\n .join(\"\");\n return initials || null;\n}\n\nfunction formatOverflow(count: number) {\n return count > 99 ? \"99+\" : `+${count}`;\n}\n\nasync function copyToClipboard(value: ClipboardContent) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(typeof value === \"string\" ? value : Object.values(value).join(\"\\n\"));\n }\n}\n\n/** Pins an adaptive primitive to a host recipe for scoped packages. */\nfunction pinRecipe<C>(\n Component: C,\n recipe: Exclude<ComponentRecipe, \"auto\">,\n): C {\n const ComponentWithRecipe = Component as React.ComponentType<Record<string, unknown>>;\n const Wrapped = ((props: Record<string, unknown>) =>\n React.createElement(ComponentWithRecipe, { ...props, recipe })) as C;\n Object.assign(Wrapped as object, Component as object);\n return Wrapped;\n}\n"],"mappings":"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","names":["Button","ButtonLink","Text","Heading","Input","Textarea","SelectControl","Badge","Alert","Avatar","EmptyState","Progress","TextLink","Image","Skeleton","FieldLabel","FieldDescription","FieldError","Surface","Stack","Inline","Divider","Code","Tabs","Slider","Table","KeyValue"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export { Alert, AlertProps, Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, Badge, BadgeProps, Button, ButtonLink, ButtonLinkProps, ButtonProps, Callout, CalloutProps, Checkbox, CheckboxProps, CheckboxState, CircularProgress, CircularProgressProps, Code, CodeProps, ComponentRecipe, ControlIntent, ControlSize, CopyButton, CopyButtonProps, Divider, DividerProps, DropdownIconType, EmptyMessage, EmptyMessageIconProps, EmptyMessageProps, EmptyMessageTitleProps, EmptyState, EmptyStateProps, FieldDescription, FieldDescriptionProps, FieldError, FieldErrorProps, FieldLabel, FieldLabelProps, FormField, FormFieldProps, Heading, HeadingProps, Image, ImageProps, Inline, InlineProps, Input, InputProps, KeyValue, KeyValueItem, KeyValueProps, LoadingDots, LoadingDotsProps, LoadingIndicator, LoadingIndicatorProps, Option, OptionGroup, Options, PopoverAlign, PopoverSide, PrimitiveProps, Progress, ProgressProps, RadioGroup, RadioGroupItemProps, RadioGroupProps, SegmentedControl, SegmentedControlOptionProps, SegmentedControlProps, Select, SelectAction, SelectControl, SelectControlProps, SelectProps, SemanticColor, SemanticColors, ShimmerText, ShimmerTextProps, Size, Sizes, Skeleton, SkeletonProps, Slider, SliderProps, Spinner, SpinnerProps, Stack, StackProps, Surface, SurfaceProps, Switch, SwitchProps, Table, TableProps, Tabs, TabsProps, Text, TextField, TextFieldProps, TextLink, TextLinkProps, TextProps, Textarea, TextareaProps, Variant, Variants, createPrimitiveComponents } from './components/index.js';
|
|
2
|
+
import 'react';
|
|
3
|
+
|
|
4
|
+
/** Host detected from runtime globals. */
|
|
5
|
+
type HostName = "chatgpt" | "claude" | "unknown";
|
|
6
|
+
/** Standard result shape for host capabilities. */
|
|
7
|
+
type HostFeatureResult<T = void> = {
|
|
8
|
+
ok: true;
|
|
9
|
+
value: T;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
reason: "unsupported" | "denied" | "cancelled" | "failed";
|
|
13
|
+
message?: string;
|
|
14
|
+
};
|
|
15
|
+
/** Static availability classification for host capabilities. */
|
|
16
|
+
type CapabilityState = "supported" | "browser-fallback" | "unsupported";
|
|
17
|
+
/** Capabilities Sidecar can detect without making a host call. */
|
|
18
|
+
type HostCapability = "display.fullscreen" | "display.pip" | "files.select" | "files.download" | "links.openExternal";
|
|
19
|
+
/** Display modes hosts may support for widgets. */
|
|
20
|
+
type DisplayMode = "inline" | "fullscreen" | "pip";
|
|
21
|
+
/** Runtime host detection helpers. */
|
|
22
|
+
declare const host: {
|
|
23
|
+
/** Detects the current host from browser globals. */
|
|
24
|
+
current(): HostName;
|
|
25
|
+
};
|
|
26
|
+
/** Host capability detection that does not perform the capability action. */
|
|
27
|
+
declare const capabilities: {
|
|
28
|
+
/** Returns one stable support state for a known capability. */
|
|
29
|
+
get(capability: HostCapability): CapabilityState;
|
|
30
|
+
/** Returns every known capability state as a plain object. */
|
|
31
|
+
all(): Record<HostCapability, CapabilityState>;
|
|
32
|
+
};
|
|
33
|
+
/** Display-mode host capability helpers. */
|
|
34
|
+
declare const display: {
|
|
35
|
+
/** Requests a widget display mode when the host supports it. */
|
|
36
|
+
request(mode: DisplayMode): Promise<HostFeatureResult>;
|
|
37
|
+
};
|
|
38
|
+
/** File picker options normalized across hosts. */
|
|
39
|
+
type FileSelectOptions = {
|
|
40
|
+
accept?: string[];
|
|
41
|
+
multiple?: boolean;
|
|
42
|
+
};
|
|
43
|
+
/** Download options for generated client-side files. */
|
|
44
|
+
type FileDownloadOptions = {
|
|
45
|
+
filename: string;
|
|
46
|
+
mimeType?: string;
|
|
47
|
+
};
|
|
48
|
+
/** File host capability helpers. */
|
|
49
|
+
declare const files: {
|
|
50
|
+
/** Requests files from the host when supported. */
|
|
51
|
+
select(options?: FileSelectOptions): Promise<HostFeatureResult<File[]>>;
|
|
52
|
+
/** Downloads a Blob/string using the browser's native download behavior. */
|
|
53
|
+
download(data: BlobPart | Blob, options: FileDownloadOptions): Promise<HostFeatureResult>;
|
|
54
|
+
};
|
|
55
|
+
/** External navigation helpers. */
|
|
56
|
+
declare const links: {
|
|
57
|
+
/** Opens an external URL through the host bridge when possible. */
|
|
58
|
+
openExternal(url: string): Promise<HostFeatureResult>;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export { type CapabilityState, type DisplayMode, type FileDownloadOptions, type FileSelectOptions, type HostCapability, type HostFeatureResult, type HostName, capabilities, display, files, host, links };
|