@epilot/zenith-react 0.2.0-next.5 → 0.2.0-next.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sources":["../../../src/components/select/select.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-424 284-228q-11 11-28 11t-28-11q-11-11-11-28t11-28l196-196-196-196q-11-11-11-28t11-28q11-11 28-11t28 11l196 196 196-196q11-11 28-11t28 11q11 11 11 28t-11 28L536-480l196 196q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-424Z\" />\n </svg>\n)\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M459-381 314-526q-3-3-4.5-6.5T308-540q0-8 5.5-14t14.5-6h304q9 0 14.5 6t5.5 14q0 2-6 14L501-381q-5 5-10 7t-11 2q-6 0-11-2t-10-7Z\" />\n </svg>\n)\n\nconst ChevronUpIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-528 324-372q-11 11-28 11t-28-11q-11-11-11-28t11-28l184-184q12-12 28-12t28 12l184 184q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-528Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n trigger: {\n ...nativeControl,\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: \"transparent\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n whiteSpace: \"normal\",\n textAlign: \"left\",\n cursor: \"pointer\",\n transitionProperty: \"color, box-shadow\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n \"&[data-placeholder]\": {\n color: tokens.grayA8,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n },\n [`& [${SLOT_ATTR}=\"select-value\"]`]: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n\n // The open-state chevron rotation is declared HERE, on the trigger that carries the state\n // attribute, reaching the icon by SLOT_ATTR.\n [`&[data-popup-open] [${SLOT_ATTR}=\"select-icon\"]`]: {\n transform: \"rotate(180deg)\",\n },\n },\n triggerIconWrapper: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n triggerIcon: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n color: tokens.grayA11,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n triggerClear: {\n ...boxModel,\n position: \"absolute\",\n right: \"2.75rem\",\n paddingTop: \"0.125rem\",\n paddingBottom: \"0.125rem\",\n paddingLeft: \"0.125rem\",\n paddingRight: \"0.125rem\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n color: tokens.accentA11,\n cursor: \"pointer\",\n ...shorthands.borderRadius(tokens.radiusMd),\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineColor: tokens.focusRing,\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n },\n },\n triggerClearIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n color: tokens.accentA11,\n },\n // The positioner is what stacks against other layers, as Radix's popper wrapper did; it also\n // keeps that wrapper's `max-content` floor so the content sizes the same way.\n positioner: {\n zIndex: OVERLAY_Z_INDEX,\n minWidth: \"max-content\",\n },\n hideWhenDetached: {\n \"&[data-anchor-hidden]\": {\n visibility: \"hidden\",\n pointerEvents: \"none\",\n },\n },\n popup: {\n ...boxModel,\n // Radix laid its content out as a column: scroll-up arrow, viewport, scroll-down arrow.\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: tokens.body,\n // DENSITY-SPEC.md §2.3 — popup padding/gap only; the slide-in transition offsets a few lines\n // below deliberately keep the plain (non-density) `spacingElement2` value: they are not in the\n // approved matrix, and re-using the same primitive for two unrelated purposes doesn't make the\n // animation distance a density lever too.\n ...shorthands.padding(tokens.selectContentPadding),\n ...shorthands.gap(tokens.selectContentGap),\n color: tokens.grayA12,\n position: \"relative\",\n zIndex: OVERLAY_Z_INDEX,\n transformOrigin: \"var(--transform-origin)\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n ...shorthands.borderRadius(tokens.radius2xl),\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n // v1 shadow-md\n boxShadow: \"0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a\",\n outlineStyle: \"none\",\n maxHeight: \"var(--available-height, 20rem)\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n },\n \"&[data-starting-style][data-side='bottom']\": {\n transform: `translateY(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='left']\": {\n transform: `translateX(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='right']\": {\n transform: `translateX(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='top']\": {\n transform: `translateY(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n transitionDuration: \"100ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n \"&[data-ending-style]\": {\n transitionDuration: \"0.01ms\",\n },\n },\n },\n viewport: {\n ...boxModel,\n // Radix's viewport: the scroller between the arrows, its scrollbar hidden.\n position: \"relative\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollbarWidth: \"none\",\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n width: \"100%\",\n minWidth: \"var(--anchor-width)\",\n scrollMarginTop: tokens.spacingElement1,\n scrollMarginBottom: tokens.spacingElement1,\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n cursor: \"default\",\n userSelect: \"none\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n // DENSITY-SPEC.md §2.3 — left padding and vertical padding are density levers; right padding\n // stays a fixed 32px at every tier (reserves the check-indicator's space, not modeled in\n // density.yaml).\n paddingLeft: tokens.selectItemPaddingLeft,\n paddingRight: \"2rem\",\n paddingTop: tokens.selectItemPaddingY,\n paddingBottom: tokens.selectItemPaddingY,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n outlineStyle: \"none\",\n \":not(:first-child)\": {\n marginTop: \"0.125rem\",\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-selected]\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n itemIndicatorWrapper: {\n ...boxModel,\n position: \"absolute\",\n right: tokens.spacingElement2,\n display: \"flex\",\n width: \"1rem\",\n height: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemIndicatorIcon: {\n ...boxModel,\n // An inline svg sits on the text baseline and grows its wrapper by the line-height gap.\n display: \"block\",\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.grayA11,\n },\n label: {\n ...boxModel,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.gray11,\n },\n separator: {\n ...boxModel,\n pointerEvents: \"none\",\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement1,\n marginBottom: tokens.spacingElement1,\n height: \"1px\",\n backgroundColor: tokens.graySoft,\n },\n scrollArrow: {\n display: \"flex\",\n flexShrink: 0,\n cursor: \"default\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n scrollArrowUp: {\n ...boxModel,\n paddingBottom: tokens.spacingElement1,\n },\n scrollArrowDown: {\n ...boxModel,\n paddingTop: tokens.spacingElement1,\n },\n scrollArrowIcon: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n scrollArrowDownIcon: {\n transform: \"rotate(180deg)\",\n },\n})\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * `asChild` on a part that adds content of its own (the trigger's chevron, the item's check, the\n * content's arrows and list): the child element becomes the part and its children go where the\n * part's own children would. Radix's Slot threw on these parts, having two children to merge.\n */\nfunction slotAround(\n asChild: boolean,\n children: React.ReactNode,\n wrap: (children: React.ReactNode) => React.ReactNode\n) {\n const child = asChild ? onlySlotChild(children) : undefined\n if (!child) return { children: wrap(children) }\n const own = (child.props as { children?: React.ReactNode }).children\n return { render: React.cloneElement(child, undefined, wrap(own)) }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"span\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `finalFocus`. `preventDefault()` leaves focus\n * where it is; otherwise the default move happens, because Base UI reads a callback that returns\n * `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its select store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype SelectOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"window-resize\"; event: UIEvent }\n | { reason: \"item-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"list-navigation\"; event: KeyboardEvent }\n | { reason: \"cancel-open\"; event: MouseEvent }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the select in its current state. */\n cancel: () => void\n /** Lets the event propagate where the select would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n}\n\ntype Direction = \"ltr\" | \"rtl\"\n\n/**\n * The label each rendered SelectItem carries, by value. Radix echoed the selected item's label\n * into SelectValue by portalling its ItemText; Base UI echoes a label only from an `items` map on\n * the root, so the items report theirs here instead, wherever and however the caller renders them.\n */\nfunction createItemLabels() {\n const entries = new Map<object, { value: string; label: React.ReactNode }>()\n const listeners = new Set<() => void>()\n let version = 0\n const changed = () => {\n version += 1\n listeners.forEach((listener) => listener())\n }\n\n return {\n set(key: object, value: string, label: React.ReactNode) {\n const entry = entries.get(key)\n if (entry?.value === value && entry.label === label) return\n entries.set(key, { value, label })\n changed()\n },\n delete(key: object) {\n if (entries.delete(key)) changed()\n },\n labelFor(value: string) {\n for (const entry of entries.values()) {\n if (entry.value === value) return entry.label\n }\n return undefined\n },\n subscribe(listener: () => void) {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n version: () => version,\n }\n}\n\ntype ItemLabels = ReturnType<typeof createItemLabels>\n\nconst SelectRootContext = React.createContext<{\n labels: ItemLabels\n dir: Direction | undefined\n} | null>(null)\n\n/**\n * True for SelectContent's children while they render detached, to collect the items' labels\n * the way Radix did with its closed content: items report their label and render nothing, and\n * every other part renders nothing either.\n */\nconst SelectCollectingContext = React.createContext(false)\n\n// Radix modelled \"no selection\" as the empty string, Base UI as null.\nfunction toBaseValue(value: string | undefined) {\n return value === \"\" ? null : value\n}\n\nexport type SelectProps = {\n children?: React.ReactNode\n /** The selected item's value; `\"\"` means no selection and shows the placeholder. */\n value?: string\n defaultValue?: string\n /** Called with the chosen item's value; `\"\"` when the selection is cleared. */\n onValueChange?: (value: string) => void\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the select opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `item-press`, `escape-key`, `outside-press`, `focus-out`, …) and `eventDetails.cancel()` keeps\n * the select in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: SelectOpenChangeDetails) => void\n /** The reading direction of the select. Inherits the document's when omitted. */\n dir?: Direction\n /** Submits the value under this name with the enclosing form. */\n name?: string\n autoComplete?: string\n disabled?: boolean\n required?: boolean\n /** The id of the form the value submits with, when the select sits outside it. */\n form?: string\n}\n\nexport const Select: React.ForwardRefExoticComponent<\n SelectProps & React.RefAttributes<HTMLElement>\n> = React.forwardRef<HTMLElement, SelectProps>(function Select(\n { children, dir, value, defaultValue, onValueChange, onOpenChange, ...props },\n _ref\n) {\n const [labels] = React.useState(createItemLabels)\n const context = React.useMemo(() => ({ labels, dir }), [labels, dir])\n\n const root = (\n <SelectPrimitive.Root<string>\n data-slot=\"select\"\n {...(value !== undefined ? { value: toBaseValue(value) } : {})}\n {...(defaultValue !== undefined\n ? { defaultValue: toBaseValue(defaultValue) }\n : {})}\n onValueChange={(next) => onValueChange?.(next ?? \"\")}\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt popover, which runs on Radix, or a control handling the key\n // itself) prevents the Escape it consumes, but Base UI dismisses regardless, so one Escape\n // would close both. Honour the handled event. Consumers still mix Zenith with Volt on\n // one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n >\n <SelectRootContext.Provider value={context}>\n {children}\n </SelectRootContext.Provider>\n </SelectPrimitive.Root>\n )\n\n return dir ? (\n <DirectionProvider direction={dir}>{root}</DirectionProvider>\n ) : (\n root\n )\n})\n\nexport type SelectGroupProps = NativePartProps<\"div\">\n\nexport const SelectGroup = React.forwardRef<HTMLDivElement, SelectGroupProps>(\n function SelectGroup(\n { asChild = false, className, children, ...props },\n ref\n ) {\n if (React.useContext(SelectCollectingContext)) return <>{children}</>\n\n return (\n <SelectPrimitive.Group\n ref={ref}\n data-slot=\"select-group\"\n {...{ [SLOT_ATTR]: \"select-group\" }}\n className={className}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n }\n)\n\nexport type SelectValueProps = Omit<NativePartProps<\"span\">, \"placeholder\"> & {\n /** Shown while nothing is selected. */\n placeholder?: React.ReactNode\n}\n\nexport const SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n function SelectValue(\n { asChild = false, className, children, placeholder, style, ...props },\n ref\n ) {\n const labels = React.useContext(SelectRootContext)?.labels\n React.useSyncExternalStore(\n labels?.subscribe ?? noSubscription,\n labels?.version ?? noVersion,\n labels?.version ?? noVersion\n )\n const child = asChild ? onlySlotChild(children) : undefined\n const own = asChild ? undefined : children\n\n // Radix: the placeholder while nothing is selected, else the caller's children, else the\n // selected item's label, or nothing when no rendered item carries the value.\n const display = (value: string | null) => {\n if (value == null) return placeholder\n if (own != null) return own\n return labels?.labelFor(value) ?? null\n }\n\n return (\n <SelectPrimitive.Value\n ref={ref}\n data-slot=\"select-value\"\n {...{ [SLOT_ATTR]: \"select-value\" }}\n className={className}\n // Radix's value let clicks through to the trigger.\n style={{ pointerEvents: \"none\", ...style }}\n {...props}\n {...(child ? { render: child } : {})}\n >\n {display}\n </SelectPrimitive.Value>\n )\n }\n)\n\nfunction noSubscription() {\n return () => {}\n}\n\nfunction noVersion() {\n return 0\n}\n\nexport type SelectTriggerProps = NativePartProps<\"button\">\n\nexport const SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n SelectTriggerProps\n>(function SelectTrigger(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n const dir = React.useContext(SelectRootContext)?.dir\n const child = asChild ? onlySlotChild(children) : undefined\n // Base UI drives a native <button> unless told otherwise; a child that is another intrinsic\n // element gets the ARIA button behaviour Radix's Slot gave it.\n const nativeButton =\n !child || typeof child.type !== \"string\" || child.type === \"button\"\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n {...{ [SLOT_ATTR]: \"select-trigger\" }}\n nativeButton={nativeButton}\n className={mergeClasses(styles.trigger, className)}\n {...(dir ? { dir } : {})}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n {content}\n <SelectPrimitive.Icon\n data-slot=\"select-icon\"\n {...{ [SLOT_ATTR]: \"select-icon\" }}\n className={styles.triggerIconWrapper}\n render={<ChevronDownIcon className={styles.triggerIcon} />}\n />\n </>\n ))}\n />\n )\n})\n\nexport type SelectTriggerClearProps = React.ComponentProps<\"span\">\n\nexport const SelectTriggerClear = React.forwardRef<\n HTMLSpanElement,\n SelectTriggerClearProps\n>(function SelectTriggerClear({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n data-slot=\"select-trigger-clear\"\n {...{ [SLOT_ATTR]: \"select-trigger-clear\" }}\n className={mergeClasses(styles.triggerClear, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n // Base UI opens the select on mousedown, where Radix opened it on pointerdown.\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.triggerClearIcon} />\n </span>\n )\n})\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\"\ntype Boundary = Element | null\n\n// Radix let only `avoidCollisions={false}` switch both flip and shift off.\nconst NO_COLLISION_AVOIDANCE = {\n side: \"none\",\n align: \"none\",\n fallbackAxisSide: \"none\",\n} as const\n// Radix flipped to the opposite side and swapped start/end, never to the perpendicular axis.\nconst RADIX_COLLISION_AVOIDANCE = {\n side: \"flip\",\n align: \"flip\",\n fallbackAxisSide: \"none\",\n} as const\n\n// Radix's select kept its content this far from the viewport's edges unless told otherwise.\nconst CONTENT_MARGIN = 10\n\nexport type SelectContentProps = NativePartProps<\"div\"> & {\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /**\n * `\"popper\"` places the content beside the trigger; `\"item-aligned\"` places it over the\n * trigger with the selected item aligned to it, for mouse input where there is room.\n */\n position?: \"item-aligned\" | \"popper\"\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n align?: \"start\" | \"center\" | \"end\"\n alignOffset?: number\n arrowPadding?: number\n /** Flips and shifts the content to keep it in view. */\n avoidCollisions?: boolean\n /** The elements the content stays within; the viewport when omitted. */\n collisionBoundary?: Boundary | Boundary[]\n /** Distance from the boundary's edges; 10px unless set. */\n collisionPadding?: number | Partial<Record<Side, number>>\n /**\n * `\"partial\"` keeps the content attached to the trigger while any of it is in view; `\"always\"`\n * keeps the content in view even when that detaches it.\n */\n sticky?: \"partial\" | \"always\"\n /** Hides the content while the trigger is fully out of view. */\n hideWhenDetached?: boolean\n /**\n * Kept for compatibility. The position follows the trigger's resizes, layout shifts and scrolls\n * either way; `\"always\"` no longer re-measures on every animation frame.\n */\n updatePositionStrategy?: \"optimized\" | \"always\"\n /** Called before focus returns to the trigger on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const SelectContent = React.forwardRef<\n HTMLDivElement,\n SelectContentProps\n>(function SelectContent(\n {\n asChild = false,\n className,\n children,\n container,\n position = \"popper\",\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding = CONTENT_MARGIN,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy: _updatePositionStrategy,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const dir = React.useContext(SelectRootContext)?.dir\n // DENSITY-SPEC.md §4.4 — SelectContent is a portal root: stamp the explicit override ONLY when\n // one exists in the React tree, so an ambient shell default (which already reaches this portal\n // via ordinary DOM inheritance, since the portal container is still a descendant of `<html>`)\n // isn't masked by a stale/default value.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n // Radix rendered closed content into a detached fragment so its items could hand their labels\n // to SelectValue; the items render there for the same reason, whether or not the select is open.\n const [labelFragment, setLabelFragment] =\n React.useState<DocumentFragment | null>(null)\n React.useLayoutEffect(() => {\n setLabelFragment(document.createDocumentFragment())\n }, [])\n const collecting = React.useContext(SelectCollectingContext)\n if (collecting) return null\n\n const ownChildren = asChild\n ? (\n onlySlotChild(children)?.props as\n { children?: React.ReactNode } | undefined\n )?.children\n : children\n\n return (\n <>\n {labelFragment &&\n createPortal(\n <SelectCollectingContext.Provider value={true}>\n {ownChildren}\n </SelectCollectingContext.Provider>,\n labelFragment\n )}\n <SelectPrimitive.Portal\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a node\n // straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n >\n <SelectPrimitive.Positioner\n className={mergeClasses(\n styles.positioner,\n hideWhenDetached && styles.hideWhenDetached\n )}\n alignItemWithTrigger={position === \"item-aligned\"}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n arrowPadding={arrowPadding}\n // Radix's default boundary is the viewport alone, not every clipping ancestor.\n collisionBoundary={(Array.isArray(collisionBoundary)\n ? collisionBoundary\n : [collisionBoundary]\n ).filter((element): element is Element => element !== null)}\n collisionPadding={collisionPadding}\n collisionAvoidance={\n avoidCollisions ? RADIX_COLLISION_AVOIDANCE : NO_COLLISION_AVOIDANCE\n }\n sticky={sticky === \"always\"}\n >\n <SelectPrimitive.Popup\n ref={ref}\n data-slot=\"select-content\"\n {...{ [SLOT_ATTR]: \"select-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n <SelectScrollUpButton />\n <SelectPrimitive.List\n data-slot=\"select-viewport\"\n {...{ [SLOT_ATTR]: \"select-viewport\" }}\n className={styles.viewport}\n >\n {content}\n </SelectPrimitive.List>\n <SelectScrollDownButton />\n </>\n ))}\n />\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n </>\n )\n})\n\nexport type SelectLabelProps = NativePartProps<\"div\">\n\nexport const SelectLabel = React.forwardRef<HTMLDivElement, SelectLabelProps>(\n function SelectLabel(\n { asChild = false, className, children, ...props },\n ref\n ) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.GroupLabel\n ref={ref}\n data-slot=\"select-label\"\n {...{ [SLOT_ATTR]: \"select-label\" }}\n className={mergeClasses(styles.label, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n }\n)\n\nexport type SelectItemProps = NativePartProps<\"div\"> & {\n /** The value the item selects. */\n value: string\n disabled?: boolean\n /** The text typeahead matches against; the item's text content when omitted. */\n textValue?: string\n}\n\nexport const SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(\n function SelectItem(\n {\n asChild = false,\n className,\n children,\n value,\n disabled,\n textValue,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const labels = React.useContext(SelectRootContext)?.labels\n const collecting = React.useContext(SelectCollectingContext)\n const [key] = React.useState(() => ({}))\n const label = asChild\n ? (\n onlySlotChild(children)?.props as\n { children?: React.ReactNode } | undefined\n )?.children\n : children\n\n React.useLayoutEffect(() => {\n labels?.set(key, value, label)\n })\n React.useLayoutEffect(() => () => labels?.delete(key), [labels, key])\n\n if (collecting) return null\n\n return (\n <SelectPrimitive.Item\n ref={ref}\n value={value}\n disabled={disabled}\n {...(textValue !== undefined ? { label: textValue } : {})}\n data-slot=\"select-item\"\n {...{ [SLOT_ATTR]: \"select-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n <span className={styles.itemIndicatorWrapper}>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className={styles.itemIndicatorIcon} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText render={<span />}>\n {content}\n </SelectPrimitive.ItemText>\n </>\n ))}\n />\n )\n }\n)\n\nexport type SelectSeparatorProps = NativePartProps<\"div\">\n\nexport const SelectSeparator = React.forwardRef<\n HTMLDivElement,\n SelectSeparatorProps\n>(function SelectSeparator(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.Separator\n ref={ref}\n // Radix's separator was decorative.\n aria-hidden\n data-slot=\"select-separator\"\n {...{ [SLOT_ATTR]: \"select-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type SelectScrollUpButtonProps = NativePartProps<\"div\">\n\nexport const SelectScrollUpButton = React.forwardRef<\n HTMLDivElement,\n SelectScrollUpButtonProps\n>(function SelectScrollUpButton(\n { asChild = false, className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.ScrollUpArrow\n ref={ref}\n data-slot=\"select-scroll-up-button\"\n {...{ [SLOT_ATTR]: \"select-scroll-up-button\" }}\n className={mergeClasses(\n styles.scrollArrow,\n styles.scrollArrowUp,\n className\n )}\n // In the content's column, as Radix's button was; Base UI places its arrows over the list.\n style={{ position: \"static\", ...style }}\n {...props}\n {...slotProps(\n asChild,\n children ?? <ChevronUpIcon className={styles.scrollArrowIcon} />\n )}\n />\n )\n})\n\nexport type SelectScrollDownButtonProps = NativePartProps<\"div\">\n\nexport const SelectScrollDownButton = React.forwardRef<\n HTMLDivElement,\n SelectScrollDownButtonProps\n>(function SelectScrollDownButton(\n { asChild = false, className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.ScrollDownArrow\n ref={ref}\n data-slot=\"select-scroll-down-button\"\n {...{ [SLOT_ATTR]: \"select-scroll-down-button\" }}\n className={mergeClasses(\n styles.scrollArrow,\n styles.scrollArrowDown,\n className\n )}\n // In the content's column, as Radix's button was; Base UI places its arrows over the list.\n style={{ position: \"static\", ...style }}\n {...props}\n {...slotProps(\n asChild,\n children ?? (\n <ChevronUpIcon\n className={mergeClasses(\n styles.scrollArrowIcon,\n styles.scrollArrowDownIcon\n )}\n />\n )\n )}\n />\n )\n})\n"],"names":["XIcon","props","jsx","CheckIcon","ChevronDownIcon","ChevronUpIcon","useStyles","makeZenithStyles","nativeControl","shorthands","tokens.spacingElement2","tokens.radiusLg","tokens.textSm","tokens.leadingSm","tokens.focusRing","tokens.grayA8","SLOT_ATTR","boxModel","tokens.grayA11","tokens.accentA11","tokens.radiusMd","tokens.accentSoft","OVERLAY_Z_INDEX","tokens.body","tokens.selectContentPadding","tokens.selectContentGap","tokens.grayA12","tokens.radius2xl","tokens.spacingElement1","tokens.selectItemPaddingLeft","tokens.selectItemPaddingY","tokens.accentA3","tokens.textXs","tokens.leadingXs","tokens.fontWeightSemibold","tokens.gray11","tokens.graySoft","onlySlotChild","children","elements","React","slotProps","asChild","child","slotAround","wrap","own","radixFocusCallback","handler","event","before","moved","createItemLabels","entries","listeners","version","changed","listener","key","value","label","entry","SelectRootContext","SelectCollectingContext","toBaseValue","Select","dir","defaultValue","onValueChange","onOpenChange","_ref","labels","context","root","SelectPrimitive","next","open","eventDetails","DirectionProvider","SelectGroup","className","ref","SelectValue","placeholder","style","_a","noSubscription","noVersion","display","SelectTrigger","styles","nativeButton","mergeClasses","content","jsxs","Fragment","SelectTriggerClear","onClick","NO_COLLISION_AVOIDANCE","RADIX_COLLISION_AVOIDANCE","CONTENT_MARGIN","SelectContent","container","position","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","_updatePositionStrategy","onCloseAutoFocus","override","useDensity","appearance","useAppearanceAttributes","labelFragment","setLabelFragment","ownChildren","_c","_b","createPortal","element","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","disabled","textValue","collecting","SelectSeparator"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sources":["../../../src/components/select/select.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { createPortal } from \"react-dom\"\n\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { Select as SelectPrimitive } from \"@base-ui/react/select\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { useAppearanceAttributes } from \"../appearance-boundary/appearance-boundary\"\nimport { useDensity } from \"../density-provider/density-provider\"\nimport { useOptionalFieldContext } from \"../field/field\"\nimport { HiddenInputBox } from \"../../lib/hidden-input-box\"\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport { OVERLAY_Z_INDEX } from \"../../styles/overlay-layer\"\nimport * as tokens from \"../../tokens\"\n\nconst XIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-424 284-228q-11 11-28 11t-28-11q-11-11-11-28t11-28l196-196-196-196q-11-11-11-28t11-28q11-11 28-11t28 11l196 196 196-196q11-11 28-11t28 11q11 11 11 28t-11 28L536-480l196 196q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-424Z\" />\n </svg>\n)\n\nconst CheckIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"m382-354 339-339q12-12 28-12t28 12q12 12 12 28.5T777-636L410-268q-12 12-28 12t-28-12L182-440q-12-12-11.5-28.5T183-497q12-12 28.5-12t28.5 12l142 143Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M459-381 314-526q-3-3-4.5-6.5T308-540q0-8 5.5-14t14.5-6h304q9 0 14.5 6t5.5 14q0 2-6 14L501-381q-5 5-10 7t-11 2q-6 0-11-2t-10-7Z\" />\n </svg>\n)\n\nconst ChevronUpIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24px\"\n viewBox=\"0 -960 960 960\"\n width=\"24px\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M480-528 324-372q-11 11-28 11t-28-11q-11-11-11-28t11-28l184-184q12-12 28-12t28 12l184 184q11 11 11 28t-11 28q-11 11-28 11t-28-11L480-528Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n trigger: {\n ...nativeControl,\n display: \"flex\",\n width: \"100%\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusLg),\n backgroundColor: \"transparent\",\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n outlineStyle: \"none\",\n whiteSpace: \"normal\",\n textAlign: \"left\",\n cursor: \"pointer\",\n transitionProperty: \"color, box-shadow\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n outlineColor: tokens.focusRing,\n },\n \":disabled\": {\n cursor: \"not-allowed\",\n opacity: 0.5,\n },\n \"&[data-placeholder]\": {\n color: tokens.grayA8,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n },\n [`& [${SLOT_ATTR}=\"select-value\"]`]: {\n display: \"flex\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n\n // The open-state chevron rotation is declared HERE, on the trigger that carries the state\n // attribute, reaching the icon by SLOT_ATTR.\n [`&[data-popup-open] [${SLOT_ATTR}=\"select-icon\"]`]: {\n transform: \"rotate(180deg)\",\n },\n },\n triggerIconWrapper: {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n triggerIcon: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n color: tokens.grayA11,\n transitionProperty: \"transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n },\n },\n triggerClear: {\n ...boxModel,\n position: \"absolute\",\n right: \"2.75rem\",\n paddingTop: \"0.125rem\",\n paddingBottom: \"0.125rem\",\n paddingLeft: \"0.125rem\",\n paddingRight: \"0.125rem\",\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"transparent\",\n color: tokens.accentA11,\n cursor: \"pointer\",\n ...shorthands.borderRadius(tokens.radiusMd),\n \":hover\": {\n backgroundColor: tokens.accentSoft,\n },\n \":focus-visible\": {\n outlineColor: tokens.focusRing,\n outlineWidth: \"2px\",\n outlineStyle: \"solid\",\n outlineOffset: \"2px\",\n },\n },\n triggerClearIcon: {\n ...boxModel,\n width: \"1.25rem\",\n height: \"1.25rem\",\n color: tokens.accentA11,\n },\n // The positioner is what stacks against other layers, as Radix's popper wrapper did; it also\n // keeps that wrapper's `max-content` floor so the content sizes the same way.\n positioner: {\n zIndex: OVERLAY_Z_INDEX,\n minWidth: \"max-content\",\n },\n hideWhenDetached: {\n \"&[data-anchor-hidden]\": {\n visibility: \"hidden\",\n pointerEvents: \"none\",\n },\n },\n popup: {\n ...boxModel,\n // Radix laid its content out as a column: scroll-up arrow, viewport, scroll-down arrow.\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: tokens.body,\n // DENSITY-SPEC.md §2.3 — popup padding/gap only; the slide-in transition offsets a few lines\n // below deliberately keep the plain (non-density) `spacingElement2` value: they are not in the\n // approved matrix, and re-using the same primitive for two unrelated purposes doesn't make the\n // animation distance a density lever too.\n ...shorthands.padding(tokens.selectContentPadding),\n ...shorthands.gap(tokens.selectContentGap),\n color: tokens.grayA12,\n position: \"relative\",\n zIndex: OVERLAY_Z_INDEX,\n transformOrigin: \"var(--transform-origin)\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n ...shorthands.borderRadius(tokens.radius2xl),\n ...shorthands.border(\"1px\", \"solid\", \"transparent\"),\n // v1 shadow-md\n boxShadow: \"0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a\",\n outlineStyle: \"none\",\n maxHeight: \"var(--available-height, 20rem)\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: \"150ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"&[data-starting-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n },\n \"&[data-starting-style][data-side='bottom']\": {\n transform: `translateY(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='left']\": {\n transform: `translateX(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='right']\": {\n transform: `translateX(-${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-starting-style][data-side='top']\": {\n transform: `translateY(${tokens.spacingElement2}) scale(0.95)`,\n },\n \"&[data-ending-style]\": {\n opacity: 0,\n transform: \"scale(0.95)\",\n transitionDuration: \"100ms\",\n transitionTimingFunction: \"cubic-bezier(0.4, 0, 1, 1)\",\n },\n \"@media (prefers-reduced-motion: reduce)\": {\n transitionDuration: \"0.01ms\",\n \"&[data-ending-style]\": {\n transitionDuration: \"0.01ms\",\n },\n },\n },\n viewport: {\n ...boxModel,\n // Radix's viewport: the scroller between the arrows, its scrollbar hidden.\n position: \"relative\",\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n overflowX: \"hidden\",\n overflowY: \"auto\",\n scrollbarWidth: \"none\",\n \"&::-webkit-scrollbar\": {\n display: \"none\",\n },\n width: \"100%\",\n minWidth: \"var(--anchor-width)\",\n scrollMarginTop: tokens.spacingElement1,\n scrollMarginBottom: tokens.spacingElement1,\n },\n item: {\n ...boxModel,\n position: \"relative\",\n display: \"flex\",\n width: \"100%\",\n cursor: \"default\",\n userSelect: \"none\",\n alignItems: \"center\",\n ...shorthands.gap(tokens.spacingElement2),\n ...shorthands.borderRadius(tokens.radiusMd),\n // DENSITY-SPEC.md §2.3 — left padding and vertical padding are density levers; right padding\n // stays a fixed 32px at every tier (reserves the check-indicator's space, not modeled in\n // density.yaml).\n paddingLeft: tokens.selectItemPaddingLeft,\n paddingRight: \"2rem\",\n paddingTop: tokens.selectItemPaddingY,\n paddingBottom: tokens.selectItemPaddingY,\n fontSize: tokens.textSm,\n lineHeight: tokens.leadingSm,\n color: tokens.grayA12,\n outlineStyle: \"none\",\n \":not(:first-child)\": {\n marginTop: \"0.125rem\",\n },\n \"&[data-highlighted]\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-selected]\": {\n backgroundColor: tokens.accentA3,\n },\n \"&[data-disabled]\": {\n pointerEvents: \"none\",\n opacity: 0.5,\n },\n \"& svg\": {\n pointerEvents: \"none\",\n flexShrink: 0,\n },\n \"& svg:not([class*='text-'])\": {\n color: tokens.grayA11,\n },\n },\n itemIndicatorWrapper: {\n ...boxModel,\n position: \"absolute\",\n right: tokens.spacingElement2,\n display: \"flex\",\n width: \"1rem\",\n height: \"1rem\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n itemIndicatorIcon: {\n ...boxModel,\n // An inline svg sits on the text baseline and grows its wrapper by the line-height gap.\n display: \"block\",\n width: \"1rem\",\n height: \"1rem\",\n color: tokens.grayA11,\n },\n label: {\n ...boxModel,\n paddingLeft: tokens.spacingElement2,\n paddingRight: tokens.spacingElement2,\n paddingTop: \"0.375rem\",\n paddingBottom: \"0.375rem\",\n fontSize: tokens.textXs,\n lineHeight: tokens.leadingXs,\n fontWeight: tokens.fontWeightSemibold,\n color: tokens.gray11,\n },\n separator: {\n ...boxModel,\n pointerEvents: \"none\",\n marginLeft: `calc(-1 * ${tokens.spacingElement1})`,\n marginRight: `calc(-1 * ${tokens.spacingElement1})`,\n marginTop: tokens.spacingElement1,\n marginBottom: tokens.spacingElement1,\n height: \"1px\",\n backgroundColor: tokens.graySoft,\n },\n scrollArrow: {\n display: \"flex\",\n flexShrink: 0,\n cursor: \"default\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n scrollArrowUp: {\n ...boxModel,\n paddingBottom: tokens.spacingElement1,\n },\n scrollArrowDown: {\n ...boxModel,\n paddingTop: tokens.spacingElement1,\n },\n scrollArrowIcon: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n scrollArrowDownIcon: {\n transform: \"rotate(180deg)\",\n },\n})\n\n// A single child can arrive wrapped in a one-element array depending on the JSX runtime (MDX call\n// sites do this). Radix's Slot normalised that, so the `asChild` shim has to as well.\nfunction onlySlotChild(children: React.ReactNode) {\n const elements = React.Children.toArray(children).filter(React.isValidElement)\n return elements.length === 1 ? elements[0] : undefined\n}\n\n/**\n * Radix's `asChild` over Base UI's `render`: the single child element becomes the part and keeps\n * its own children, since Base UI lets the rendered element's props win the merge.\n */\nfunction slotProps(asChild: boolean, children: React.ReactNode) {\n const child = asChild ? onlySlotChild(children) : undefined\n return child ? { render: child } : { children }\n}\n\n/**\n * `asChild` on a part that adds content of its own (the trigger's chevron, the item's check, the\n * content's arrows and list): the child element becomes the part and its children go where the\n * part's own children would. Radix's Slot threw on these parts, having two children to merge.\n */\nfunction slotAround(\n asChild: boolean,\n children: React.ReactNode,\n wrap: (children: React.ReactNode) => React.ReactNode\n) {\n const child = asChild ? onlySlotChild(children) : undefined\n if (!child) return { children: wrap(children) }\n const own = (child.props as { children?: React.ReactNode }).children\n return { render: React.cloneElement(child, undefined, wrap(own)) }\n}\n\n/**\n * A part's props as they were under Radix: its native element's own (DOM attributes, React's\n * handler types, a `CSSProperties` style, a string `className`, `ref`) plus `asChild`. Base UI's\n * prop types widen `style` and `className` to functions of the part's state, wrap every handler's\n * event in `BaseUIEvent` and add props of their own; none of that reaches the public surface.\n */\ntype NativePartProps<Tag extends \"button\" | \"div\" | \"span\"> =\n React.ComponentProps<Tag> & {\n /** Renders the single child element as this part, merging its props and behaviour onto it. */\n asChild?: boolean\n }\n\n/**\n * Radix-shaped focus interception over Base UI's `finalFocus`. `preventDefault()` leaves focus\n * where it is; otherwise the default move happens, because Base UI reads a callback that returns\n * `undefined` as \"move nothing\".\n */\nfunction radixFocusCallback(handler: ((event: Event) => void) | undefined) {\n if (!handler) return undefined\n\n return () => {\n const event = new Event(\"focus\", { cancelable: true })\n const before = document.activeElement\n handler(event)\n const moved = document.activeElement\n // Base UI calls `finalFocus` inside React's commit, and React then restores the focus it saw\n // before the commit. Radix ran this handler after the commit, so a handler that moves focus\n // itself has its move applied again once the commit is done.\n if (moved !== before && moved instanceof HTMLElement) {\n queueMicrotask(() => moved.focus())\n }\n return !event.defaultPrevented\n }\n}\n\n/**\n * What `onOpenChange` receives as its second argument: Base UI's change details, declared in\n * Zenith. Base UI's own type drags its select store into the published declarations, and\n * TypeScript 4 cannot parse that store. `event` narrows with `reason`, as it does in Base UI.\n */\ntype SelectOpenChangeDetails = (\n | {\n reason: \"trigger-press\"\n event: MouseEvent | PointerEvent | TouchEvent | KeyboardEvent\n }\n | { reason: \"outside-press\"; event: MouseEvent | PointerEvent | TouchEvent }\n | { reason: \"escape-key\"; event: KeyboardEvent }\n | { reason: \"window-resize\"; event: UIEvent }\n | { reason: \"item-press\"; event: MouseEvent | KeyboardEvent | PointerEvent }\n | { reason: \"focus-out\"; event: FocusEvent | KeyboardEvent }\n | { reason: \"list-navigation\"; event: KeyboardEvent }\n | { reason: \"cancel-open\"; event: MouseEvent }\n | { reason: \"none\"; event: Event }\n) & {\n /** Keeps the select in its current state. */\n cancel: () => void\n /** Lets the event propagate where the select would otherwise stop it. */\n allowPropagation: () => void\n isCanceled: boolean\n isPropagationAllowed: boolean\n /** The element that caused the change, if any. */\n trigger: Element | undefined\n}\n\ntype Direction = \"ltr\" | \"rtl\"\n\n/**\n * The label each rendered SelectItem carries, by value. Radix echoed the selected item's label\n * into SelectValue by portalling its ItemText; Base UI echoes a label only from an `items` map on\n * the root, so the items report theirs here instead, wherever and however the caller renders them.\n */\nfunction createItemLabels() {\n const entries = new Map<object, { value: string; label: React.ReactNode }>()\n const listeners = new Set<() => void>()\n let version = 0\n const changed = () => {\n version += 1\n listeners.forEach((listener) => listener())\n }\n\n return {\n set(key: object, value: string, label: React.ReactNode) {\n const entry = entries.get(key)\n if (entry?.value === value && entry.label === label) return\n entries.set(key, { value, label })\n changed()\n },\n delete(key: object) {\n if (entries.delete(key)) changed()\n },\n labelFor(value: string) {\n for (const entry of entries.values()) {\n if (entry.value === value) return entry.label\n }\n return undefined\n },\n subscribe(listener: () => void) {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n version: () => version,\n }\n}\n\ntype ItemLabels = ReturnType<typeof createItemLabels>\n\nconst SelectRootContext = React.createContext<{\n labels: ItemLabels\n dir: Direction | undefined\n} | null>(null)\n\n/**\n * True for SelectContent's children while they render detached, to collect the items' labels\n * the way Radix did with its closed content: items report their label and render nothing, and\n * every other part renders nothing either.\n */\nconst SelectCollectingContext = React.createContext(false)\n\n// Radix modelled \"no selection\" as the empty string, Base UI as null.\nfunction toBaseValue(value: string | undefined) {\n return value === \"\" ? null : value\n}\n\nexport type SelectProps = {\n children?: React.ReactNode\n /** The selected item's value; `\"\"` means no selection and shows the placeholder. */\n value?: string\n defaultValue?: string\n /** Called with the chosen item's value; `\"\"` when the selection is cleared. */\n onValueChange?: (value: string) => void\n open?: boolean\n defaultOpen?: boolean\n /**\n * Called when the select opens or closes. `eventDetails.reason` says why (`trigger-press`,\n * `item-press`, `escape-key`, `outside-press`, `focus-out`, …) and `eventDetails.cancel()` keeps\n * the select in its current state.\n */\n onOpenChange?: (open: boolean, eventDetails: SelectOpenChangeDetails) => void\n /** The reading direction of the select. Inherits the document's when omitted. */\n dir?: Direction\n /** Submits the value under this name with the enclosing form. */\n name?: string\n autoComplete?: string\n disabled?: boolean\n required?: boolean\n /** The id of the form the value submits with, when the select sits outside it. */\n form?: string\n}\n\nexport const Select: React.ForwardRefExoticComponent<\n SelectProps & React.RefAttributes<HTMLElement>\n> = React.forwardRef<HTMLElement, SelectProps>(function Select(\n { children, dir, value, defaultValue, onValueChange, onOpenChange, ...props },\n _ref\n) {\n const [labels] = React.useState(createItemLabels)\n const context = React.useMemo(() => ({ labels, dir }), [labels, dir])\n const inField = useOptionalFieldContext() !== null\n\n const root = (\n <SelectPrimitive.Root<string>\n data-slot=\"select\"\n {...(value !== undefined ? { value: toBaseValue(value) } : {})}\n {...(defaultValue !== undefined\n ? { defaultValue: toBaseValue(defaultValue) }\n : {})}\n onValueChange={(next) => onValueChange?.(next ?? \"\")}\n onOpenChange={(open, eventDetails) => {\n // A layer inside (a Volt popover, which runs on Radix, or a control handling the key\n // itself) prevents the Escape it consumes, but Base UI dismisses regardless, so one Escape\n // would close both. Honour the handled event. Consumers still mix Zenith with Volt on\n // one page, so this stays after the Radix teardown (D12).\n if (\n eventDetails.reason === \"escape-key\" &&\n eventDetails.event.defaultPrevented\n ) {\n eventDetails.cancel()\n return\n }\n onOpenChange?.(open, eventDetails)\n }}\n {...props}\n >\n <SelectRootContext.Provider value={context}>\n {children}\n </SelectRootContext.Provider>\n </SelectPrimitive.Root>\n )\n\n // A named select's hidden input sits after the trigger; the box keeps it in (#132). A Field is\n // positioned already and places the trigger by its slot, so inside one there is no box.\n const contained =\n props.name === undefined || inField ? (\n root\n ) : (\n <HiddenInputBox slot=\"select-box\" layout=\"block\">\n {root}\n </HiddenInputBox>\n )\n\n return dir ? (\n <DirectionProvider direction={dir}>{contained}</DirectionProvider>\n ) : (\n contained\n )\n})\n\nexport type SelectGroupProps = NativePartProps<\"div\">\n\nexport const SelectGroup = React.forwardRef<HTMLDivElement, SelectGroupProps>(\n function SelectGroup(\n { asChild = false, className, children, ...props },\n ref\n ) {\n if (React.useContext(SelectCollectingContext)) return <>{children}</>\n\n return (\n <SelectPrimitive.Group\n ref={ref}\n data-slot=\"select-group\"\n {...{ [SLOT_ATTR]: \"select-group\" }}\n className={className}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n }\n)\n\nexport type SelectValueProps = Omit<NativePartProps<\"span\">, \"placeholder\"> & {\n /** Shown while nothing is selected. */\n placeholder?: React.ReactNode\n}\n\nexport const SelectValue = React.forwardRef<HTMLSpanElement, SelectValueProps>(\n function SelectValue(\n { asChild = false, className, children, placeholder, style, ...props },\n ref\n ) {\n const labels = React.useContext(SelectRootContext)?.labels\n React.useSyncExternalStore(\n labels?.subscribe ?? noSubscription,\n labels?.version ?? noVersion,\n labels?.version ?? noVersion\n )\n const child = asChild ? onlySlotChild(children) : undefined\n const own = asChild ? undefined : children\n\n // Radix: the placeholder while nothing is selected, else the caller's children, else the\n // selected item's label, or nothing when no rendered item carries the value.\n const display = (value: string | null) => {\n if (value == null) return placeholder\n if (own != null) return own\n return labels?.labelFor(value) ?? null\n }\n\n return (\n <SelectPrimitive.Value\n ref={ref}\n data-slot=\"select-value\"\n {...{ [SLOT_ATTR]: \"select-value\" }}\n className={className}\n // Radix's value let clicks through to the trigger.\n style={{ pointerEvents: \"none\", ...style }}\n {...props}\n {...(child ? { render: child } : {})}\n >\n {display}\n </SelectPrimitive.Value>\n )\n }\n)\n\nfunction noSubscription() {\n return () => {}\n}\n\nfunction noVersion() {\n return 0\n}\n\nexport type SelectTriggerProps = NativePartProps<\"button\">\n\nexport const SelectTrigger = React.forwardRef<\n HTMLButtonElement,\n SelectTriggerProps\n>(function SelectTrigger(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n const dir = React.useContext(SelectRootContext)?.dir\n const child = asChild ? onlySlotChild(children) : undefined\n // Base UI drives a native <button> unless told otherwise; a child that is another intrinsic\n // element gets the ARIA button behaviour Radix's Slot gave it.\n const nativeButton =\n !child || typeof child.type !== \"string\" || child.type === \"button\"\n\n return (\n <SelectPrimitive.Trigger\n ref={ref}\n data-slot=\"select-trigger\"\n {...{ [SLOT_ATTR]: \"select-trigger\" }}\n nativeButton={nativeButton}\n className={mergeClasses(styles.trigger, className)}\n {...(dir ? { dir } : {})}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n {content}\n <SelectPrimitive.Icon\n data-slot=\"select-icon\"\n {...{ [SLOT_ATTR]: \"select-icon\" }}\n className={styles.triggerIconWrapper}\n render={<ChevronDownIcon className={styles.triggerIcon} />}\n />\n </>\n ))}\n />\n )\n})\n\nexport type SelectTriggerClearProps = React.ComponentProps<\"span\">\n\nexport const SelectTriggerClear = React.forwardRef<\n HTMLSpanElement,\n SelectTriggerClearProps\n>(function SelectTriggerClear({ className, onClick, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <span\n ref={ref}\n role=\"button\"\n tabIndex={0}\n data-slot=\"select-trigger-clear\"\n {...{ [SLOT_ATTR]: \"select-trigger-clear\" }}\n className={mergeClasses(styles.triggerClear, className)}\n onPointerDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n // Base UI opens the select on mousedown, where Radix opened it on pointerdown.\n onMouseDown={(event) => {\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event: React.MouseEvent<HTMLSpanElement>) => {\n event.preventDefault()\n event.stopPropagation()\n onClick?.(event)\n }}\n {...props}\n >\n <XIcon className={styles.triggerClearIcon} />\n </span>\n )\n})\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\"\ntype Boundary = Element | null\n\n// Radix let only `avoidCollisions={false}` switch both flip and shift off.\nconst NO_COLLISION_AVOIDANCE = {\n side: \"none\",\n align: \"none\",\n fallbackAxisSide: \"none\",\n} as const\n// Radix flipped to the opposite side and swapped start/end, never to the perpendicular axis.\nconst RADIX_COLLISION_AVOIDANCE = {\n side: \"flip\",\n align: \"flip\",\n fallbackAxisSide: \"none\",\n} as const\n\n// Radix's select kept its content this far from the viewport's edges unless told otherwise.\nconst CONTENT_MARGIN = 10\n\nexport type SelectContentProps = NativePartProps<\"div\"> & {\n /** The element the content portals into; `document.body` when omitted or null. */\n container?: Element | DocumentFragment | null\n /**\n * `\"popper\"` places the content beside the trigger; `\"item-aligned\"` places it over the\n * trigger with the selected item aligned to it, for mouse input where there is room.\n */\n position?: \"item-aligned\" | \"popper\"\n side?: \"top\" | \"right\" | \"bottom\" | \"left\"\n sideOffset?: number\n align?: \"start\" | \"center\" | \"end\"\n alignOffset?: number\n arrowPadding?: number\n /** Flips and shifts the content to keep it in view. */\n avoidCollisions?: boolean\n /** The elements the content stays within; the viewport when omitted. */\n collisionBoundary?: Boundary | Boundary[]\n /** Distance from the boundary's edges; 10px unless set. */\n collisionPadding?: number | Partial<Record<Side, number>>\n /**\n * `\"partial\"` keeps the content attached to the trigger while any of it is in view; `\"always\"`\n * keeps the content in view even when that detaches it.\n */\n sticky?: \"partial\" | \"always\"\n /** Hides the content while the trigger is fully out of view. */\n hideWhenDetached?: boolean\n /**\n * Kept for compatibility. The position follows the trigger's resizes, layout shifts and scrolls\n * either way; `\"always\"` no longer re-measures on every animation frame.\n */\n updatePositionStrategy?: \"optimized\" | \"always\"\n /** Called before focus returns to the trigger on close; `preventDefault()` skips the return. */\n onCloseAutoFocus?: (event: Event) => void\n}\n\nexport const SelectContent = React.forwardRef<\n HTMLDivElement,\n SelectContentProps\n>(function SelectContent(\n {\n asChild = false,\n className,\n children,\n container,\n position = \"popper\",\n side = \"bottom\",\n sideOffset = 0,\n align = \"center\",\n alignOffset = 0,\n arrowPadding = 0,\n avoidCollisions = true,\n collisionBoundary = [],\n collisionPadding = CONTENT_MARGIN,\n sticky = \"partial\",\n hideWhenDetached = false,\n updatePositionStrategy: _updatePositionStrategy,\n onCloseAutoFocus,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const dir = React.useContext(SelectRootContext)?.dir\n // DENSITY-SPEC.md §4.4 — SelectContent is a portal root: stamp the explicit override ONLY when\n // one exists in the React tree, so an ambient shell default (which already reaches this portal\n // via ordinary DOM inheritance, since the portal container is still a descendant of `<html>`)\n // isn't masked by a stale/default value.\n const override = useDensity()\n // SPEC.md §2 rule 3 — the same portal asymmetry, for the appearance pair: re-stamp the\n // nearest explicit AppearanceBoundary's mode+surface, or neither attribute when there is\n // none, leaving live shell inheritance in place.\n const appearance = useAppearanceAttributes()\n\n // Radix rendered closed content into a detached fragment so its items could hand their labels\n // to SelectValue; the items render there for the same reason, whether or not the select is open.\n const [labelFragment, setLabelFragment] =\n React.useState<DocumentFragment | null>(null)\n React.useLayoutEffect(() => {\n setLabelFragment(document.createDocumentFragment())\n }, [])\n const collecting = React.useContext(SelectCollectingContext)\n if (collecting) return null\n\n const ownChildren = asChild\n ? (\n onlySlotChild(children)?.props as\n { children?: React.ReactNode } | undefined\n )?.children\n : children\n\n return (\n <>\n {labelFragment &&\n createPortal(\n <SelectCollectingContext.Provider value={true}>\n {ownChildren}\n </SelectCollectingContext.Provider>,\n labelFragment\n )}\n <SelectPrimitive.Portal\n // Radix took any Element or DocumentFragment, null meaning the body. Base UI hands a node\n // straight to createPortal, which takes either, but reads null as \"wait for one\".\n container={(container ?? undefined) as HTMLElement | undefined}\n >\n <SelectPrimitive.Positioner\n className={mergeClasses(\n styles.positioner,\n hideWhenDetached && styles.hideWhenDetached\n )}\n alignItemWithTrigger={position === \"item-aligned\"}\n side={side}\n sideOffset={sideOffset}\n align={align}\n alignOffset={alignOffset}\n arrowPadding={arrowPadding}\n // Radix's default boundary is the viewport alone, not every clipping ancestor.\n collisionBoundary={(Array.isArray(collisionBoundary)\n ? collisionBoundary\n : [collisionBoundary]\n ).filter((element): element is Element => element !== null)}\n collisionPadding={collisionPadding}\n collisionAvoidance={\n avoidCollisions ? RADIX_COLLISION_AVOIDANCE : NO_COLLISION_AVOIDANCE\n }\n sticky={sticky === \"always\"}\n >\n <SelectPrimitive.Popup\n ref={ref}\n data-slot=\"select-content\"\n {...{ [SLOT_ATTR]: \"select-content\" }}\n {...(override !== undefined ? { \"data-density\": override } : {})}\n {...appearance}\n {...(dir ? { dir } : {})}\n finalFocus={radixFocusCallback(onCloseAutoFocus)}\n className={mergeClasses(styles.popup, className)}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n <SelectScrollUpButton />\n <SelectPrimitive.List\n data-slot=\"select-viewport\"\n {...{ [SLOT_ATTR]: \"select-viewport\" }}\n className={styles.viewport}\n >\n {content}\n </SelectPrimitive.List>\n <SelectScrollDownButton />\n </>\n ))}\n />\n </SelectPrimitive.Positioner>\n </SelectPrimitive.Portal>\n </>\n )\n})\n\nexport type SelectLabelProps = NativePartProps<\"div\">\n\nexport const SelectLabel = React.forwardRef<HTMLDivElement, SelectLabelProps>(\n function SelectLabel(\n { asChild = false, className, children, ...props },\n ref\n ) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.GroupLabel\n ref={ref}\n data-slot=\"select-label\"\n {...{ [SLOT_ATTR]: \"select-label\" }}\n className={mergeClasses(styles.label, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n }\n)\n\nexport type SelectItemProps = NativePartProps<\"div\"> & {\n /** The value the item selects. */\n value: string\n disabled?: boolean\n /** The text typeahead matches against; the item's text content when omitted. */\n textValue?: string\n}\n\nexport const SelectItem = React.forwardRef<HTMLDivElement, SelectItemProps>(\n function SelectItem(\n {\n asChild = false,\n className,\n children,\n value,\n disabled,\n textValue,\n ...props\n },\n ref\n ) {\n const styles = useStyles()\n const labels = React.useContext(SelectRootContext)?.labels\n const collecting = React.useContext(SelectCollectingContext)\n const [key] = React.useState(() => ({}))\n const label = asChild\n ? (\n onlySlotChild(children)?.props as\n { children?: React.ReactNode } | undefined\n )?.children\n : children\n\n React.useLayoutEffect(() => {\n labels?.set(key, value, label)\n })\n React.useLayoutEffect(() => () => labels?.delete(key), [labels, key])\n\n if (collecting) return null\n\n return (\n <SelectPrimitive.Item\n ref={ref}\n value={value}\n disabled={disabled}\n {...(textValue !== undefined ? { label: textValue } : {})}\n data-slot=\"select-item\"\n {...{ [SLOT_ATTR]: \"select-item\" }}\n className={mergeClasses(styles.item, className)}\n {...props}\n {...slotAround(asChild, children, (content) => (\n <>\n <span className={styles.itemIndicatorWrapper}>\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className={styles.itemIndicatorIcon} />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText render={<span />}>\n {content}\n </SelectPrimitive.ItemText>\n </>\n ))}\n />\n )\n }\n)\n\nexport type SelectSeparatorProps = NativePartProps<\"div\">\n\nexport const SelectSeparator = React.forwardRef<\n HTMLDivElement,\n SelectSeparatorProps\n>(function SelectSeparator(\n { asChild = false, className, children, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.Separator\n ref={ref}\n // Radix's separator was decorative.\n aria-hidden\n data-slot=\"select-separator\"\n {...{ [SLOT_ATTR]: \"select-separator\" }}\n className={mergeClasses(styles.separator, className)}\n {...props}\n {...slotProps(asChild, children)}\n />\n )\n})\n\nexport type SelectScrollUpButtonProps = NativePartProps<\"div\">\n\nexport const SelectScrollUpButton = React.forwardRef<\n HTMLDivElement,\n SelectScrollUpButtonProps\n>(function SelectScrollUpButton(\n { asChild = false, className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.ScrollUpArrow\n ref={ref}\n data-slot=\"select-scroll-up-button\"\n {...{ [SLOT_ATTR]: \"select-scroll-up-button\" }}\n className={mergeClasses(\n styles.scrollArrow,\n styles.scrollArrowUp,\n className\n )}\n // In the content's column, as Radix's button was; Base UI places its arrows over the list.\n style={{ position: \"static\", ...style }}\n {...props}\n {...slotProps(\n asChild,\n children ?? <ChevronUpIcon className={styles.scrollArrowIcon} />\n )}\n />\n )\n})\n\nexport type SelectScrollDownButtonProps = NativePartProps<\"div\">\n\nexport const SelectScrollDownButton = React.forwardRef<\n HTMLDivElement,\n SelectScrollDownButtonProps\n>(function SelectScrollDownButton(\n { asChild = false, className, children, style, ...props },\n ref\n) {\n const styles = useStyles()\n if (React.useContext(SelectCollectingContext)) return null\n\n return (\n <SelectPrimitive.ScrollDownArrow\n ref={ref}\n data-slot=\"select-scroll-down-button\"\n {...{ [SLOT_ATTR]: \"select-scroll-down-button\" }}\n className={mergeClasses(\n styles.scrollArrow,\n styles.scrollArrowDown,\n className\n )}\n // In the content's column, as Radix's button was; Base UI places its arrows over the list.\n style={{ position: \"static\", ...style }}\n {...props}\n {...slotProps(\n asChild,\n children ?? (\n <ChevronUpIcon\n className={mergeClasses(\n styles.scrollArrowIcon,\n styles.scrollArrowDownIcon\n )}\n />\n )\n )}\n />\n )\n})\n"],"names":["XIcon","props","jsx","CheckIcon","ChevronDownIcon","ChevronUpIcon","useStyles","makeZenithStyles","nativeControl","shorthands","tokens.spacingElement2","tokens.radiusLg","tokens.textSm","tokens.leadingSm","tokens.focusRing","tokens.grayA8","SLOT_ATTR","boxModel","tokens.grayA11","tokens.accentA11","tokens.radiusMd","tokens.accentSoft","OVERLAY_Z_INDEX","tokens.body","tokens.selectContentPadding","tokens.selectContentGap","tokens.grayA12","tokens.radius2xl","tokens.spacingElement1","tokens.selectItemPaddingLeft","tokens.selectItemPaddingY","tokens.accentA3","tokens.textXs","tokens.leadingXs","tokens.fontWeightSemibold","tokens.gray11","tokens.graySoft","onlySlotChild","children","elements","React","slotProps","asChild","child","slotAround","wrap","own","radixFocusCallback","handler","event","before","moved","createItemLabels","entries","listeners","version","changed","listener","key","value","label","entry","SelectRootContext","SelectCollectingContext","toBaseValue","Select","dir","defaultValue","onValueChange","onOpenChange","_ref","labels","context","inField","useOptionalFieldContext","root","SelectPrimitive","next","open","eventDetails","contained","HiddenInputBox","DirectionProvider","SelectGroup","className","ref","SelectValue","placeholder","style","_a","noSubscription","noVersion","display","SelectTrigger","styles","nativeButton","mergeClasses","content","jsxs","Fragment","SelectTriggerClear","onClick","NO_COLLISION_AVOIDANCE","RADIX_COLLISION_AVOIDANCE","CONTENT_MARGIN","SelectContent","container","position","side","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPadding","sticky","hideWhenDetached","_updatePositionStrategy","onCloseAutoFocus","override","useDensity","appearance","useAppearanceAttributes","labelFragment","setLabelFragment","ownChildren","_c","_b","createPortal","element","SelectScrollUpButton","SelectScrollDownButton","SelectLabel","SelectItem","disabled","textValue","collecting","SelectSeparator"],"mappings":"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"}
@@ -1,11 +1,13 @@
1
- import { jsx as t, jsxs as v } from "react/jsx-runtime";
1
+ import { jsx as t, jsxs as S } from "react/jsx-runtime";
2
2
  import * as a from "react";
3
- import { Switch as k } from "../../_virtual/_zenith-runtime-family_switch.js";
4
- import { mergeClasses as x, SLOT_ATTR as s, shorthands as r } from "@epilot/zenith-runtime/v1";
3
+ import { Switch as x } from "../../_virtual/_zenith-runtime-family_switch.js";
4
+ import { mergeClasses as C, SLOT_ATTR as c, shorthands as i } from "@epilot/zenith-runtime/v1";
5
+ import { useOptionalFieldContext as T } from "../field/field.js";
6
+ import { HiddenInputBox as R } from "../../lib/hidden-input-box.js";
5
7
  import { makeZenithStyles as w } from "../../styles/make-styles.js";
6
- import { boxModel as i, nativeControl as y } from "../../styles/host-reset.js";
7
- import { errorA3 as S, errorSolid as T, errorA8 as m, grayA3 as R, accentSolid as E, grayA8 as b, focusRing as z, errorA11 as A, errorContrast as D, accentA11 as I, grayContrast as N } from "../../tokens/index.js";
8
- const V = a.forwardRef(
8
+ import { boxModel as r, nativeControl as E } from "../../styles/host-reset.js";
9
+ import { errorA3 as z, errorSolid as A, errorA8 as m, grayA3 as I, accentSolid as D, grayA8 as b, focusRing as N, errorA11 as V, errorContrast as _, accentA11 as B, grayContrast as H } from "../../tokens/index.js";
10
+ const O = a.forwardRef(
9
11
  function(n, e) {
10
12
  const o = p();
11
13
  return /* @__PURE__ */ t(
@@ -13,7 +15,7 @@ const V = a.forwardRef(
13
15
  {
14
16
  ref: e,
15
17
  "data-slot": "switch-thumb-icon-checked",
16
- [s]: "switch-thumb-icon-checked",
18
+ [c]: "switch-thumb-icon-checked",
17
19
  role: "presentation",
18
20
  className: o.checked,
19
21
  viewBox: "0 0 1 6",
@@ -23,7 +25,7 @@ const V = a.forwardRef(
23
25
  }
24
26
  );
25
27
  }
26
- ), _ = a.forwardRef(
28
+ ), F = a.forwardRef(
27
29
  function(n, e) {
28
30
  const o = p();
29
31
  return /* @__PURE__ */ t(
@@ -31,7 +33,7 @@ const V = a.forwardRef(
31
33
  {
32
34
  ref: e,
33
35
  "data-slot": "switch-thumb-icon-unchecked",
34
- [s]: "switch-thumb-icon-unchecked",
36
+ [c]: "switch-thumb-icon-unchecked",
35
37
  role: "presentation",
36
38
  className: o.unchecked,
37
39
  viewBox: "0 0 4 6",
@@ -51,7 +53,7 @@ const V = a.forwardRef(
51
53
  }
52
54
  );
53
55
  }
54
- ), B = a.forwardRef(
56
+ ), M = a.forwardRef(
55
57
  function(n, e) {
56
58
  const o = p();
57
59
  return /* @__PURE__ */ t(
@@ -59,7 +61,7 @@ const V = a.forwardRef(
59
61
  {
60
62
  ref: e,
61
63
  "data-slot": "switch-thumb-icon-disabled",
62
- [s]: "switch-thumb-icon-disabled",
64
+ [c]: "switch-thumb-icon-disabled",
63
65
  className: o.disabled,
64
66
  viewBox: "0 0 4 5",
65
67
  fill: "none",
@@ -79,36 +81,36 @@ const V = a.forwardRef(
79
81
  display: "none",
80
82
  position: "absolute",
81
83
  pointerEvents: "none",
82
- ...r.inset(0),
84
+ ...i.inset(0),
83
85
  color: "currentColor",
84
- ...r.margin("auto")
86
+ ...i.margin("auto")
85
87
  },
86
88
  unchecked: {
87
89
  display: "none",
88
90
  position: "absolute",
89
91
  pointerEvents: "none",
90
- ...r.inset(0),
92
+ ...i.inset(0),
91
93
  color: "currentColor",
92
- ...r.margin("auto")
94
+ ...i.margin("auto")
93
95
  },
94
96
  disabled: {
95
97
  display: "inline-block",
96
98
  position: "absolute",
97
99
  pointerEvents: "none",
98
- ...r.inset(0),
100
+ ...i.inset(0),
99
101
  color: "currentColor",
100
- ...r.margin("auto")
102
+ ...i.margin("auto")
101
103
  }
102
- }), H = w({
104
+ }), Z = w({
103
105
  root: {
104
- ...y,
106
+ ...E,
105
107
  boxSizing: "border-box",
106
108
  display: "inline-flex",
107
109
  alignItems: "center",
108
110
  flexShrink: 0,
109
111
  cursor: "pointer",
110
112
  borderRadius: "9999px",
111
- ...r.border("1px", "solid", "transparent"),
113
+ ...i.border("1px", "solid", "transparent"),
112
114
  boxShadow: "0 1px 2px 0 #0000000d",
113
115
  transitionProperty: "all",
114
116
  transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)",
@@ -120,7 +122,7 @@ const V = a.forwardRef(
120
122
  outlineWidth: "2px",
121
123
  outlineStyle: "solid",
122
124
  outlineOffset: "2px",
123
- outlineColor: z
125
+ outlineColor: N
124
126
  },
125
127
  ":disabled, &[data-disabled]": {
126
128
  pointerEvents: "none",
@@ -129,35 +131,35 @@ const V = a.forwardRef(
129
131
  },
130
132
  default: {
131
133
  color: b,
132
- "&[data-checked]": { backgroundColor: E },
133
- "&[data-unchecked]": { backgroundColor: R }
134
+ "&[data-checked]": { backgroundColor: D },
135
+ "&[data-unchecked]": { backgroundColor: I }
134
136
  },
135
137
  destructive: {
136
138
  color: m,
137
- "&[data-checked]": { backgroundColor: T },
138
- "&[data-unchecked]": { backgroundColor: S }
139
+ "&[data-checked]": { backgroundColor: A },
140
+ "&[data-unchecked]": { backgroundColor: z }
139
141
  },
140
142
  sm: {
141
- ...i,
143
+ ...r,
142
144
  width: "1.625rem",
143
145
  height: "1rem",
144
146
  "& svg": { width: "0.25rem", height: "0.375rem" }
145
147
  },
146
148
  base: {
147
- ...i,
149
+ ...r,
148
150
  width: "2.125rem",
149
151
  height: "1.25rem",
150
152
  "& svg": { width: "0.4375rem", height: "0.5rem" }
151
153
  },
152
154
  lg: {
153
- ...i,
155
+ ...r,
154
156
  width: "2.625rem",
155
157
  height: "1.5rem",
156
158
  "& svg": { width: "0.5rem", height: "0.625rem" }
157
159
  }
158
- }), M = w({
160
+ }), j = w({
159
161
  thumb: {
160
- ...i,
162
+ ...r,
161
163
  position: "relative",
162
164
  display: "block",
163
165
  pointerEvents: "none",
@@ -183,19 +185,19 @@ const V = a.forwardRef(
183
185
  }
184
186
  },
185
187
  default: {
186
- backgroundColor: N,
188
+ backgroundColor: H,
187
189
  color: b,
188
- "&[data-checked]": { color: I },
190
+ "&[data-checked]": { color: B },
189
191
  "&[data-unchecked]": { color: b }
190
192
  },
191
193
  destructive: {
192
- backgroundColor: D,
194
+ backgroundColor: _,
193
195
  color: m,
194
- "&[data-checked]": { color: A },
196
+ "&[data-checked]": { color: V },
195
197
  "&[data-unchecked]": { color: m }
196
198
  },
197
199
  sm: {
198
- ...i,
200
+ ...r,
199
201
  width: "0.75rem",
200
202
  height: "0.75rem",
201
203
  "& svg[data-zenith-slot='switch-thumb-icon-disabled']": {
@@ -203,7 +205,7 @@ const V = a.forwardRef(
203
205
  }
204
206
  },
205
207
  base: {
206
- ...i,
208
+ ...r,
207
209
  width: "1rem",
208
210
  height: "1rem",
209
211
  "& svg[data-zenith-slot='switch-thumb-icon-disabled']": {
@@ -211,62 +213,62 @@ const V = a.forwardRef(
211
213
  }
212
214
  },
213
215
  lg: {
214
- ...i,
216
+ ...r,
215
217
  width: "1.25rem",
216
218
  height: "1.25rem",
217
219
  "& svg[data-zenith-slot='switch-thumb-icon-disabled']": {
218
220
  width: "0.4375rem"
219
221
  }
220
222
  }
221
- }), O = /* @__PURE__ */ t("button", {}), K = a.forwardRef(
223
+ }), L = /* @__PURE__ */ t("button", {}), Q = a.forwardRef(
222
224
  function({
223
225
  variant: n = "default",
224
226
  size: e = "base",
225
227
  className: o,
226
228
  showThumbIcon: l = !1,
227
- asChild: Z,
229
+ asChild: P,
228
230
  value: g,
229
- ...c
230
- }, C) {
231
- const h = H(), u = M(), f = n === "primary" ? "default" : n;
232
- return /* @__PURE__ */ t(
233
- k.Root,
231
+ ...s
232
+ }, v) {
233
+ const h = Z(), y = T() !== null, u = j(), f = n === "primary" ? "default" : n, k = /* @__PURE__ */ t(
234
+ x.Root,
234
235
  {
235
- ref: C,
236
+ ref: v,
236
237
  nativeButton: !0,
237
- render: O,
238
+ render: L,
238
239
  value: g === void 0 ? void 0 : String(g),
239
240
  "data-slot": "switch",
240
- [s]: "switch",
241
- className: x(
241
+ [c]: "switch",
242
+ className: C(
242
243
  h.root,
243
244
  h[f],
244
245
  h[e],
245
246
  o
246
247
  ),
247
- ...c,
248
- children: /* @__PURE__ */ v(
249
- k.Thumb,
248
+ ...s,
249
+ children: /* @__PURE__ */ S(
250
+ x.Thumb,
250
251
  {
251
252
  "data-slot": "switch-thumb",
252
- [s]: "switch-thumb",
253
- className: x(
253
+ [c]: "switch-thumb",
254
+ className: C(
254
255
  u.thumb,
255
256
  u[f],
256
257
  u[e]
257
258
  ),
258
259
  children: [
259
- l && !c.disabled && /* @__PURE__ */ t(V, {}),
260
- l && !c.disabled && /* @__PURE__ */ t(_, {}),
261
- l && c.disabled && /* @__PURE__ */ t(B, {})
260
+ l && !s.disabled && /* @__PURE__ */ t(O, {}),
261
+ l && !s.disabled && /* @__PURE__ */ t(F, {}),
262
+ l && s.disabled && /* @__PURE__ */ t(M, {})
262
263
  ]
263
264
  }
264
265
  )
265
266
  }
266
267
  );
268
+ return s.name === void 0 || y ? k : /* @__PURE__ */ t(R, { slot: "switch-box", layout: "inline-flex", children: k });
267
269
  }
268
270
  );
269
271
  export {
270
- K as Switch
272
+ Q as Switch
271
273
  };
272
274
  //# sourceMappingURL=switch.js.map