@epilot/zenith-react 0.2.0-next.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  3. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  4. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  5. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  6. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  7. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  24. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  25. package/dist/components/accordion/accordion.js +1 -1
  26. package/dist/components/accordion/accordion.js.map +1 -1
  27. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  28. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  29. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  30. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  31. package/dist/components/avatar/avatar-group.js +1 -1
  32. package/dist/components/avatar/avatar-group.js.map +1 -1
  33. package/dist/components/avatar/avatar.js +1 -1
  34. package/dist/components/avatar/avatar.js.map +1 -1
  35. package/dist/components/badge/badge.js +1 -1
  36. package/dist/components/badge/badge.js.map +1 -1
  37. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  38. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  39. package/dist/components/button/button.js +1 -1
  40. package/dist/components/button/button.js.map +1 -1
  41. package/dist/components/button-group/button-group.js +1 -1
  42. package/dist/components/button-group/button-group.js.map +1 -1
  43. package/dist/components/callout/callout.js +1 -1
  44. package/dist/components/callout/callout.js.map +1 -1
  45. package/dist/components/card/card.js +1 -1
  46. package/dist/components/card/card.js.map +1 -1
  47. package/dist/components/checkbox/checkbox.js +41 -39
  48. package/dist/components/checkbox/checkbox.js.map +1 -1
  49. package/dist/components/code-block/code-block.js +1 -1
  50. package/dist/components/code-block/code-block.js.map +1 -1
  51. package/dist/components/code-editor/code-editor.js +1 -1
  52. package/dist/components/code-editor/code-editor.js.map +1 -1
  53. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  54. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  55. package/dist/components/command/command.js +1 -1
  56. package/dist/components/command/command.js.map +1 -1
  57. package/dist/components/data-table/data-table-body.js +1 -1
  58. package/dist/components/data-table/data-table-body.js.map +1 -1
  59. package/dist/components/data-table/data-table-column-header.js +1 -1
  60. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  61. package/dist/components/data-table/data-table-column-order.js +1 -1
  62. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  63. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  64. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  65. package/dist/components/data-table/data-table-content.js +1 -1
  66. package/dist/components/data-table/data-table-content.js.map +1 -1
  67. package/dist/components/data-table/data-table-error.js +1 -1
  68. package/dist/components/data-table/data-table-error.js.map +1 -1
  69. package/dist/components/data-table/data-table-footer.js +1 -1
  70. package/dist/components/data-table/data-table-footer.js.map +1 -1
  71. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  72. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  73. package/dist/components/data-table/data-table-header.js +1 -1
  74. package/dist/components/data-table/data-table-header.js.map +1 -1
  75. package/dist/components/data-table/data-table-loading.js +1 -1
  76. package/dist/components/data-table/data-table-loading.js.map +1 -1
  77. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  78. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  79. package/dist/components/data-table/data-table-row.js +1 -1
  80. package/dist/components/data-table/data-table-row.js.map +1 -1
  81. package/dist/components/data-table/data-table-toolbar.js +1 -1
  82. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  83. package/dist/components/data-table/data-table.js +1 -1
  84. package/dist/components/data-table/data-table.js.map +1 -1
  85. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  86. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  87. package/dist/components/date-range-picker/range-calendar.js +1 -1
  88. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  89. package/dist/components/date-time-picker/calendar.js +1 -1
  90. package/dist/components/date-time-picker/calendar.js.map +1 -1
  91. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  92. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  93. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  94. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  95. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  96. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  97. package/dist/components/date-time-picker/time-picker.js +1 -1
  98. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  99. package/dist/components/density-provider/density-provider.js +1 -1
  100. package/dist/components/dialog/dialog.js +1 -1
  101. package/dist/components/dialog/dialog.js.map +1 -1
  102. package/dist/components/drawer/drawer.js +1 -1
  103. package/dist/components/drawer/drawer.js.map +1 -1
  104. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  105. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  106. package/dist/components/field/field-combobox.js +1 -1
  107. package/dist/components/field/field-combobox.js.map +1 -1
  108. package/dist/components/field/field-select.js +1 -1
  109. package/dist/components/field/field-select.js.map +1 -1
  110. package/dist/components/field/field.js +1 -1
  111. package/dist/components/field/field.js.map +1 -1
  112. package/dist/components/label/label.js +1 -1
  113. package/dist/components/label/label.js.map +1 -1
  114. package/dist/components/list/list.js +1 -1
  115. package/dist/components/list/list.js.map +1 -1
  116. package/dist/components/option-card/option-card.js +1 -1
  117. package/dist/components/option-card/option-card.js.map +1 -1
  118. package/dist/components/pill/pill.js +1 -1
  119. package/dist/components/pill/pill.js.map +1 -1
  120. package/dist/components/popover/popover.js +1 -1
  121. package/dist/components/popover/popover.js.map +1 -1
  122. package/dist/components/radio/radio.js +15 -12
  123. package/dist/components/radio/radio.js.map +1 -1
  124. package/dist/components/scroll-area/scroll-area.js +1 -1
  125. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  126. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  127. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  128. package/dist/components/scroll-overflow/scroll-overflow.js +1 -1
  129. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  130. package/dist/components/segmented-control/segmented-control.js +1 -1
  131. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  132. package/dist/components/select/select.js +178 -176
  133. package/dist/components/select/select.js.map +1 -1
  134. package/dist/components/separator/separator.js +1 -1
  135. package/dist/components/separator/separator.js.map +1 -1
  136. package/dist/components/skeleton/skeleton.js +1 -1
  137. package/dist/components/skeleton/skeleton.js.map +1 -1
  138. package/dist/components/slot/compose-as-child.js +1 -1
  139. package/dist/components/slot/compose-as-child.js.map +1 -1
  140. package/dist/components/spinner/spinner.js +1 -1
  141. package/dist/components/spinner/spinner.js.map +1 -1
  142. package/dist/components/surface/surface.js +1 -1
  143. package/dist/components/surface/surface.js.map +1 -1
  144. package/dist/components/switch/switch.js +59 -57
  145. package/dist/components/switch/switch.js.map +1 -1
  146. package/dist/components/table/table-pagination.js +1 -1
  147. package/dist/components/table/table-pagination.js.map +1 -1
  148. package/dist/components/table/table.js +1 -1
  149. package/dist/components/table/table.js.map +1 -1
  150. package/dist/components/tabs/tabs.js +1 -1
  151. package/dist/components/tabs/tabs.js.map +1 -1
  152. package/dist/components/text/text.js +1 -1
  153. package/dist/components/text/text.js.map +1 -1
  154. package/dist/components/toast/toast.js +1 -1
  155. package/dist/components/toast/toast.js.map +1 -1
  156. package/dist/components/toggle/toggle-group.js +1 -1
  157. package/dist/components/toggle/toggle-group.js.map +1 -1
  158. package/dist/components/toggle/toggle.js +1 -1
  159. package/dist/components/toggle/toggle.js.map +1 -1
  160. package/dist/components/tooltip/tooltip.js +1 -1
  161. package/dist/components/tooltip/tooltip.js.map +1 -1
  162. package/dist/index.js +1 -1
  163. package/dist/lib/clear-button.js +1 -1
  164. package/dist/lib/clear-button.js.map +1 -1
  165. package/dist/lib/hidden-input-box.js +26 -0
  166. package/dist/lib/hidden-input-box.js.map +1 -0
  167. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  168. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  169. package/dist/packages/tokens/dist/install.js +1 -1
  170. package/dist/packages/tokens/dist/install.js.map +1 -1
  171. package/dist/renderer/served.js +1 -1
  172. package/dist/renderer/served.js.map +1 -1
  173. package/dist/styles/host-reset.js.map +1 -1
  174. package/dist/styles/make-styles.js +1 -1
  175. package/dist/styles/make-styles.js.map +1 -1
  176. package/dist/styles/text-box.js.map +1 -1
  177. package/dist/tokens.json +1 -1
  178. package/package.json +3 -4
@@ -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/core\"\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,6 +1,6 @@
1
1
  import { jsx as m } from "react/jsx-runtime";
2
2
  import * as p from "react";
3
- import { mergeClasses as d, SLOT_ATTR as f } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { mergeClasses as d, SLOT_ATTR as f } from "@epilot/zenith-runtime/v1";
4
4
  import { makeZenithStyles as h } from "../../styles/make-styles.js";
5
5
  import { boxModel as a } from "../../styles/host-reset.js";
6
6
  import { grayA5 as e } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"separator.js","sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Separator — v1's separator ported to Griffel atoms with no primitive underneath. A separator\n * needs no behaviour beyond correct semantics, so it is a plain `<div>`.\n */\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\"\n\nconst useStyles = makeZenithStyles({\n horizontal: {\n ...boxModel,\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"1px\",\n width: \"100%\",\n },\n vertical: {\n ...boxModel,\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"100%\",\n width: \"1px\",\n },\n})\n\nexport type SeparatorProps = React.ComponentProps<\"div\"> & {\n orientation?: SeparatorOrientation\n /**\n * When `true` the separator is purely decorative and is hidden from assistive technology\n * (`aria-hidden=\"true\"`, no `role`). When `false` it is a meaningful separator and gets\n * `role=\"separator\"` plus `aria-orientation`.\n */\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) {\n const styles = useStyles()\n\n const meaningful = !decorative\n\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n {...{ [SLOT_ATTR]: \"separator\" }}\n data-orientation={orientation}\n role={meaningful ? \"separator\" : undefined}\n aria-orientation={meaningful ? orientation : undefined}\n aria-hidden={decorative ? \"true\" : undefined}\n className={mergeClasses(styles[orientation], className)}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA5","Separator","React","className","orientation","decorative","props","ref","styles","meaningful","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;AAgBA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,YAAY;AAAA,IACV,GAAGC;AAAA,IACH,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,GAAGD;AAAA,IACH,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,CAAC,GAYYC,IAAYC,EAAM;AAAA,EAC7B,SACE,EAAE,WAAAC,GAAW,aAAAC,IAAc,cAAc,YAAAC,IAAa,IAAM,GAAGC,EAAA,GAC/DC,GACA;AACA,UAAMC,IAASX,EAAA,GAETY,IAAa,CAACJ;AAEpB,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,aAAU;AAAA,QACJ,CAACI,CAAS,GAAG;AAAA,QACnB,oBAAkBP;AAAA,QAClB,MAAMK,IAAa,cAAc;AAAA,QACjC,oBAAkBA,IAAaL,IAAc;AAAA,QAC7C,eAAaC,IAAa,SAAS;AAAA,QACnC,WAAWO,EAAaJ,EAAOJ,CAAW,GAAGD,CAAS;AAAA,QACrD,GAAGG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;"}
1
+ {"version":3,"file":"separator.js","sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\n\n/**\n * Separator — v1's separator ported to Griffel atoms with no primitive underneath. A separator\n * needs no behaviour beyond correct semantics, so it is a plain `<div>`.\n */\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\"\n\nconst useStyles = makeZenithStyles({\n horizontal: {\n ...boxModel,\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"1px\",\n width: \"100%\",\n },\n vertical: {\n ...boxModel,\n backgroundColor: tokens.grayA5,\n flexShrink: 0,\n height: \"100%\",\n width: \"1px\",\n },\n})\n\nexport type SeparatorProps = React.ComponentProps<\"div\"> & {\n orientation?: SeparatorOrientation\n /**\n * When `true` the separator is purely decorative and is hidden from assistive technology\n * (`aria-hidden=\"true\"`, no `role`). When `false` it is a meaningful separator and gets\n * `role=\"separator\"` plus `aria-orientation`.\n */\n decorative?: boolean\n}\n\nexport const Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n function Separator(\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) {\n const styles = useStyles()\n\n const meaningful = !decorative\n\n return (\n <div\n ref={ref}\n data-slot=\"separator\"\n {...{ [SLOT_ATTR]: \"separator\" }}\n data-orientation={orientation}\n role={meaningful ? \"separator\" : undefined}\n aria-orientation={meaningful ? orientation : undefined}\n aria-hidden={decorative ? \"true\" : undefined}\n className={mergeClasses(styles[orientation], className)}\n {...props}\n />\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.grayA5","Separator","React","className","orientation","decorative","props","ref","styles","meaningful","jsx","SLOT_ATTR","mergeClasses"],"mappings":";;;;;;AAgBA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,YAAY;AAAA,IACV,GAAGC;AAAA,IACH,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAAA,EAET,UAAU;AAAA,IACR,GAAGD;AAAA,IACH,iBAAiBC;AAAAA,IACjB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,OAAO;AAAA,EAAA;AAEX,CAAC,GAYYC,IAAYC,EAAM;AAAA,EAC7B,SACE,EAAE,WAAAC,GAAW,aAAAC,IAAc,cAAc,YAAAC,IAAa,IAAM,GAAGC,EAAA,GAC/DC,GACA;AACA,UAAMC,IAASX,EAAA,GAETY,IAAa,CAACJ;AAEpB,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAH;AAAA,QACA,aAAU;AAAA,QACJ,CAACI,CAAS,GAAG;AAAA,QACnB,oBAAkBP;AAAA,QAClB,MAAMK,IAAa,cAAc;AAAA,QACjC,oBAAkBA,IAAaL,IAAc;AAAA,QAC7C,eAAaC,IAAa,SAAS;AAAA,QACnC,WAAWO,EAAaJ,EAAOJ,CAAW,GAAGD,CAAS;AAAA,QACrD,GAAGG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;"}
@@ -1,6 +1,6 @@
1
1
  import { jsxs as d, jsx as n } from "react/jsx-runtime";
2
2
  import * as p from "react";
3
- import { mergeClasses as t, SLOT_ATTR as u, shorthands as i } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { mergeClasses as t, SLOT_ATTR as u, shorthands as i } from "@epilot/zenith-runtime/v1";
4
4
  import { makeZenithStyles as f } from "../../styles/make-styles.js";
5
5
  import { boxModel as o } from "../../styles/host-reset.js";
6
6
  import { indigoA4 as g, pinkA4 as k, purpleA4 as b, gray3 as h, gray4 as y, radiusMd as c } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useZenithPaletteTokensWhen } from \"../../tokens/use-palette-tokens\"\n\n/**\n * Skeleton — v1's loading placeholder ported to Griffel atoms. Two variants, `default` and `ai`.\n */\n\nexport type SkeletonVariant = \"default\" | \"ai\"\n\nconst useStyles = makeZenithStyles({\n default: {\n ...boxModel,\n backgroundColor: tokens.gray4,\n ...shorthands.borderRadius(tokens.radiusMd),\n animationName: {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"cubic-bezier(0.4,0,0.6,1)\",\n animationIterationCount: \"infinite\",\n },\n ai: {\n ...boxModel,\n backgroundColor: tokens.gray3,\n ...shorthands.borderRadius(tokens.radiusMd),\n position: \"relative\",\n ...shorthands.overflow(\"hidden\"),\n },\n spot: {\n ...boxModel,\n position: \"absolute\",\n inset: \"-50%\",\n ...shorthands.borderRadius(\"50%\"),\n opacity: 0.6,\n filter: \"blur(18px)\",\n pointerEvents: \"none\",\n },\n spot1: {\n backgroundImage: `radial-gradient(circle, ${tokens.purpleA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(-20%, 0%) scale(1)\" },\n \"33%\": { transform: \"translate(40%, -25%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-10%, 30%) scale(0.9)\" },\n },\n animationDuration: \"10s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot2: {\n backgroundImage: `radial-gradient(circle, ${tokens.pinkA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(20%, 0%) scale(1.1)\" },\n \"33%\": { transform: \"translate(-35%, 25%) scale(0.9)\" },\n \"66%\": { transform: \"translate(30%, -20%) scale(1.3)\" },\n },\n animationDuration: \"12s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot3: {\n backgroundImage: `radial-gradient(circle, ${tokens.indigoA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(0%, 20%) scale(1)\" },\n \"33%\": { transform: \"translate(25%, -30%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-30%, 10%) scale(0.8)\" },\n },\n animationDuration: \"14s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SkeletonProps = React.ComponentProps<\"div\"> & {\n /**\n * `default` is the ordinary loading pulse. `ai` is the placeholder for content being generated,\n * drawn with three drifting colour spots.\n */\n variant?: SkeletonVariant\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton(\n { variant = \"default\", className, children, ...props },\n ref\n ) {\n // The decorative families live in the palette sheet, which is not installed by default\n // (CONVENTIONS rule 3). Only the `ai` variant paints them — purple-a4, pink-a4, indigo-a4.\n // The hook is called unconditionally every render (WP2B2 — hook order); the `variant === \"ai\"`\n // branch lives inside its commit-phase effect, not around this call, so the default variant\n // still installs nothing it never reads.\n useZenithPaletteTokensWhen(variant === \"ai\")\n\n const styles = useStyles()\n\n if (variant === \"ai\") {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.ai, className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot1)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot2)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot3)}\n />\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.default, className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.gray4","shorthands","tokens.radiusMd","tokens.gray3","tokens.purpleA4","tokens.pinkA4","tokens.indigoA4","Skeleton","React","variant","className","children","props","ref","useZenithPaletteTokensWhen","styles","jsxs","SLOT_ATTR","mergeClasses","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"skeleton.js","sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useZenithPaletteTokensWhen } from \"../../tokens/use-palette-tokens\"\n\n/**\n * Skeleton — v1's loading placeholder ported to Griffel atoms. Two variants, `default` and `ai`.\n */\n\nexport type SkeletonVariant = \"default\" | \"ai\"\n\nconst useStyles = makeZenithStyles({\n default: {\n ...boxModel,\n backgroundColor: tokens.gray4,\n ...shorthands.borderRadius(tokens.radiusMd),\n animationName: {\n \"0%,100%\": { opacity: 1 },\n \"50%\": { opacity: 0.5 },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"cubic-bezier(0.4,0,0.6,1)\",\n animationIterationCount: \"infinite\",\n },\n ai: {\n ...boxModel,\n backgroundColor: tokens.gray3,\n ...shorthands.borderRadius(tokens.radiusMd),\n position: \"relative\",\n ...shorthands.overflow(\"hidden\"),\n },\n spot: {\n ...boxModel,\n position: \"absolute\",\n inset: \"-50%\",\n ...shorthands.borderRadius(\"50%\"),\n opacity: 0.6,\n filter: \"blur(18px)\",\n pointerEvents: \"none\",\n },\n spot1: {\n backgroundImage: `radial-gradient(circle, ${tokens.purpleA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(-20%, 0%) scale(1)\" },\n \"33%\": { transform: \"translate(40%, -25%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-10%, 30%) scale(0.9)\" },\n },\n animationDuration: \"10s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot2: {\n backgroundImage: `radial-gradient(circle, ${tokens.pinkA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(20%, 0%) scale(1.1)\" },\n \"33%\": { transform: \"translate(-35%, 25%) scale(0.9)\" },\n \"66%\": { transform: \"translate(30%, -20%) scale(1.3)\" },\n },\n animationDuration: \"12s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n spot3: {\n backgroundImage: `radial-gradient(circle, ${tokens.indigoA4} 0%, transparent 65%)`,\n animationName: {\n \"0%,100%\": { transform: \"translate(0%, 20%) scale(1)\" },\n \"33%\": { transform: \"translate(25%, -30%) scale(1.2)\" },\n \"66%\": { transform: \"translate(-30%, 10%) scale(0.8)\" },\n },\n animationDuration: \"14s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SkeletonProps = React.ComponentProps<\"div\"> & {\n /**\n * `default` is the ordinary loading pulse. `ai` is the placeholder for content being generated,\n * drawn with three drifting colour spots.\n */\n variant?: SkeletonVariant\n}\n\nexport const Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(\n function Skeleton(\n { variant = \"default\", className, children, ...props },\n ref\n ) {\n // The decorative families live in the palette sheet, which is not installed by default\n // (CONVENTIONS rule 3). Only the `ai` variant paints them — purple-a4, pink-a4, indigo-a4.\n // The hook is called unconditionally every render (WP2B2 — hook order); the `variant === \"ai\"`\n // branch lives inside its commit-phase effect, not around this call, so the default variant\n // still installs nothing it never reads.\n useZenithPaletteTokensWhen(variant === \"ai\")\n\n const styles = useStyles()\n\n if (variant === \"ai\") {\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.ai, className)}\n {...props}\n >\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot1)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot2)}\n />\n <span\n aria-hidden=\"true\"\n className={mergeClasses(styles.spot, styles.spot3)}\n />\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"skeleton\"\n {...{ [SLOT_ATTR]: \"skeleton\" }}\n className={mergeClasses(styles.default, className)}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.gray4","shorthands","tokens.radiusMd","tokens.gray3","tokens.purpleA4","tokens.pinkA4","tokens.indigoA4","Skeleton","React","variant","className","children","props","ref","useZenithPaletteTokensWhen","styles","jsxs","SLOT_ATTR","mergeClasses","jsx"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as e from "react";
2
- import { mergeClasses as i } from "@epilot/zenith-runtime/v1/core.js";
2
+ import { mergeClasses as i } from "@epilot/zenith-runtime/v1";
3
3
  import { useRender as c } from "../../_virtual/_zenith-runtime-family_use-render.js";
4
4
  const C = e.forwardRef(function({ children: o, className: t, forceProps: n, ...l }, a) {
5
5
  const r = e.Children.only(o);
@@ -1 +1 @@
1
- {"version":3,"file":"compose-as-child.js","sources":["../../../src/components/slot/compose-as-child.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1/core\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\n/**\n * Base UI's `useRender` is still responsible for the established prop contract: it composes event\n * handlers and refs, and gives an existing child's inline style precedence. Its built-in className\n * merge is string concatenation, however, which cannot collapse competing Griffel atomic groups.\n * @internal composition plumbing for `asChild`, not a component. Its only callers are Surface and\n */\nexport type ComposeAsChildProps = Omit<\n React.HTMLAttributes<HTMLElement>,\n \"children\" | \"className\"\n> & {\n children: React.ReactElement\n className?: string\n /** Values which must win over raw child props (appearance's canonical DOM pair). */\n forceProps?: Record<string, unknown>\n}\n\nexport const ComposeAsChild = React.forwardRef<\n HTMLElement,\n ComposeAsChildProps\n>(function ComposeAsChild(\n { children, className, forceProps, ...slotProps },\n forwardedRef\n) {\n const child = React.Children.only(children)\n\n if (child.type === React.Fragment)\n throw new Error(\"asChild requires one real element, not a React.Fragment\")\n\n const classedChild = child as React.ReactElement<{ className?: string }>\n const childWithMergedClasses = React.cloneElement(classedChild, {\n ...forceProps,\n // Child classes first makes the composer's role recipe authoritative; its caller class is\n // appended by the composer and can then deliberately override the recipe. Inline child\n // styles still win through useRender's normal style merge.\n className: mergeClasses(classedChild.props.className, className),\n })\n\n return useRender({\n render: childWithMergedClasses,\n props: slotProps,\n ref: forwardedRef,\n })\n})\n"],"names":["ComposeAsChild","React","children","className","forceProps","slotProps","forwardedRef","child","classedChild","childWithMergedClasses","mergeClasses","useRender"],"mappings":";;;AAqBO,MAAMA,IAAiBC,EAAM,WAGlC,SACA,EAAE,UAAAC,GAAU,WAAAC,GAAW,YAAAC,GAAY,GAAGC,EAAA,GACtCC,GACA;AACA,QAAMC,IAAQN,EAAM,SAAS,KAAKC,CAAQ;AAE1C,MAAIK,EAAM,SAASN,EAAM;AACvB,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAMO,IAAeD,GACfE,IAAyBR,EAAM,aAAaO,GAAc;AAAA,IAC9D,GAAGJ;AAAA;AAAA;AAAA;AAAA,IAIH,WAAWM,EAAaF,EAAa,MAAM,WAAWL,CAAS;AAAA,EAAA,CAChE;AAED,SAAOQ,EAAU;AAAA,IACf,QAAQF;AAAA,IACR,OAAOJ;AAAA,IACP,KAAKC;AAAA,EAAA,CACN;AACH,CAAC;"}
1
+ {"version":3,"file":"compose-as-child.js","sources":["../../../src/components/slot/compose-as-child.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\nimport { useRender } from \"@base-ui/react/use-render\"\n\n/**\n * Base UI's `useRender` is still responsible for the established prop contract: it composes event\n * handlers and refs, and gives an existing child's inline style precedence. Its built-in className\n * merge is string concatenation, however, which cannot collapse competing Griffel atomic groups.\n * @internal composition plumbing for `asChild`, not a component. Its only callers are Surface and\n */\nexport type ComposeAsChildProps = Omit<\n React.HTMLAttributes<HTMLElement>,\n \"children\" | \"className\"\n> & {\n children: React.ReactElement\n className?: string\n /** Values which must win over raw child props (appearance's canonical DOM pair). */\n forceProps?: Record<string, unknown>\n}\n\nexport const ComposeAsChild = React.forwardRef<\n HTMLElement,\n ComposeAsChildProps\n>(function ComposeAsChild(\n { children, className, forceProps, ...slotProps },\n forwardedRef\n) {\n const child = React.Children.only(children)\n\n if (child.type === React.Fragment)\n throw new Error(\"asChild requires one real element, not a React.Fragment\")\n\n const classedChild = child as React.ReactElement<{ className?: string }>\n const childWithMergedClasses = React.cloneElement(classedChild, {\n ...forceProps,\n // Child classes first makes the composer's role recipe authoritative; its caller class is\n // appended by the composer and can then deliberately override the recipe. Inline child\n // styles still win through useRender's normal style merge.\n className: mergeClasses(classedChild.props.className, className),\n })\n\n return useRender({\n render: childWithMergedClasses,\n props: slotProps,\n ref: forwardedRef,\n })\n})\n"],"names":["ComposeAsChild","React","children","className","forceProps","slotProps","forwardedRef","child","classedChild","childWithMergedClasses","mergeClasses","useRender"],"mappings":";;;AAqBO,MAAMA,IAAiBC,EAAM,WAGlC,SACA,EAAE,UAAAC,GAAU,WAAAC,GAAW,YAAAC,GAAY,GAAGC,EAAA,GACtCC,GACA;AACA,QAAMC,IAAQN,EAAM,SAAS,KAAKC,CAAQ;AAE1C,MAAIK,EAAM,SAASN,EAAM;AACvB,UAAM,IAAI,MAAM,yDAAyD;AAE3E,QAAMO,IAAeD,GACfE,IAAyBR,EAAM,aAAaO,GAAc;AAAA,IAC9D,GAAGJ;AAAA;AAAA;AAAA;AAAA,IAIH,WAAWM,EAAaF,EAAa,MAAM,WAAWL,CAAS;AAAA,EAAA,CAChE;AAED,SAAOQ,EAAU;AAAA,IACf,QAAQF;AAAA,IACR,OAAOJ;AAAA,IACP,KAAKC;AAAA,EAAA,CACN;AACH,CAAC;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
2
2
  import * as m from "react";
3
- import { mergeClasses as h, SLOT_ATTR as c } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { mergeClasses as h, SLOT_ATTR as c } from "@epilot/zenith-runtime/v1";
4
4
  import { makeZenithStyles as l } from "../../styles/make-styles.js";
5
5
  import { boxModel as t } from "../../styles/host-reset.js";
6
6
  const f = l({
@@ -1 +1 @@
1
- {"version":3,"file":"spinner.js","sources":["../../../src/components/spinner/spinner.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\n\n/**\n * Spinner — v1's SVG spinner ported to a size-driven style object.\n *\n * v1 sizes this with Tailwind `size-*` utilities and deprecated the `size` prop in favour of a\n * `className` like `size-4`. There is no Tailwind here, so that escape hatch does not exist:\n * `size` is the supported API and the `@deprecated` tag is dropped (CONVENTIONS rule 9).\n */\n\nexport type SpinnerSize = \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\"\n\nconst useStyles = makeZenithStyles({\n sm: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n base: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n lg: {\n ...boxModel,\n width: \"2.5rem\",\n height: \"2.5rem\",\n },\n xl: {\n ...boxModel,\n width: \"4rem\",\n height: \"4rem\",\n },\n \"2xl\": {\n width: \"6rem\",\n height: \"6rem\",\n },\n spin: {\n transformOrigin: \"center\",\n animationName: {\n \"100%\": { transform: \"rotate(360deg)\" },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n },\n dash: {\n animationName: {\n \"0%\": {\n strokeDasharray: \"0 150\",\n strokeDashoffset: 0,\n },\n \"47.5%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -16,\n },\n \"95%,100%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -59,\n },\n },\n animationDuration: \"1.5s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SpinnerProps = React.ComponentProps<\"svg\"> & {\n size?: SpinnerSize\n}\n\nexport const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(\n function Spinner({ size = \"base\", className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n role=\"status\"\n data-slot=\"spinner\"\n {...{ [SLOT_ATTR]: \"spinner\" }}\n className={mergeClasses(styles[size], className)}\n {...props}\n >\n <g className={styles.spin}>\n <circle cx=\"12\" cy=\"12\" r=\"9.5\" strokeWidth=\"3\" opacity=\"0.1\" />\n <circle\n className={styles.dash}\n cx=\"12\"\n cy=\"12\"\n r=\"9.5\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </g>\n </svg>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","Spinner","React","size","className","props","ref","styles","jsx","SLOT_ATTR","mergeClasses","jsxs"],"mappings":";;;;;AAkBA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,IAAI;AAAA,IACF,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,eAAe;AAAA,MACb,QAAQ,EAAE,WAAW,iBAAA;AAAA,IAAiB;AAAA,IAExC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAAA,EAE3B,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,MAAM;AAAA,QACJ,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,QACV,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAAA,IAEF,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAE7B,CAAC,GAMYC,IAAUC,EAAM;AAAA,EAC3B,SAAiB,EAAE,MAAAC,IAAO,QAAQ,WAAAC,GAAW,GAAGC,EAAA,GAASC,GAAK;AAC5D,UAAMC,IAAST,EAAA;AAEf,WACE,gBAAAU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,OAAM;AAAA,QACN,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,QACP,MAAK;AAAA,QACL,aAAU;AAAA,QACJ,CAACG,CAAS,GAAG;AAAA,QACnB,WAAWC,EAAaH,EAAOJ,CAAI,GAAGC,CAAS;AAAA,QAC9C,GAAGC;AAAA,QAEJ,UAAA,gBAAAM,EAAC,KAAA,EAAE,WAAWJ,EAAO,MACnB,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,OAAM,aAAY,KAAI,SAAQ,MAAA,CAAM;AAAA,UAC9D,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAO;AAAA,cAClB,IAAG;AAAA,cACH,IAAG;AAAA,cACH,GAAE;AAAA,cACF,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,MAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACP,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
1
+ {"version":3,"file":"spinner.js","sources":["../../../src/components/spinner/spinner.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\n\n/**\n * Spinner — v1's SVG spinner ported to a size-driven style object.\n *\n * v1 sizes this with Tailwind `size-*` utilities and deprecated the `size` prop in favour of a\n * `className` like `size-4`. There is no Tailwind here, so that escape hatch does not exist:\n * `size` is the supported API and the `@deprecated` tag is dropped (CONVENTIONS rule 9).\n */\n\nexport type SpinnerSize = \"sm\" | \"base\" | \"lg\" | \"xl\" | \"2xl\"\n\nconst useStyles = makeZenithStyles({\n sm: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n base: {\n ...boxModel,\n width: \"1.5rem\",\n height: \"1.5rem\",\n },\n lg: {\n ...boxModel,\n width: \"2.5rem\",\n height: \"2.5rem\",\n },\n xl: {\n ...boxModel,\n width: \"4rem\",\n height: \"4rem\",\n },\n \"2xl\": {\n width: \"6rem\",\n height: \"6rem\",\n },\n spin: {\n transformOrigin: \"center\",\n animationName: {\n \"100%\": { transform: \"rotate(360deg)\" },\n },\n animationDuration: \"2s\",\n animationTimingFunction: \"linear\",\n animationIterationCount: \"infinite\",\n },\n dash: {\n animationName: {\n \"0%\": {\n strokeDasharray: \"0 150\",\n strokeDashoffset: 0,\n },\n \"47.5%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -16,\n },\n \"95%,100%\": {\n strokeDasharray: \"42 150\",\n strokeDashoffset: -59,\n },\n },\n animationDuration: \"1.5s\",\n animationTimingFunction: \"ease-in-out\",\n animationIterationCount: \"infinite\",\n },\n})\n\nexport type SpinnerProps = React.ComponentProps<\"svg\"> & {\n size?: SpinnerSize\n}\n\nexport const Spinner = React.forwardRef<SVGSVGElement, SpinnerProps>(\n function Spinner({ size = \"base\", className, ...props }, ref) {\n const styles = useStyles()\n\n return (\n <svg\n ref={ref}\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n role=\"status\"\n data-slot=\"spinner\"\n {...{ [SLOT_ATTR]: \"spinner\" }}\n className={mergeClasses(styles[size], className)}\n {...props}\n >\n <g className={styles.spin}>\n <circle cx=\"12\" cy=\"12\" r=\"9.5\" strokeWidth=\"3\" opacity=\"0.1\" />\n <circle\n className={styles.dash}\n cx=\"12\"\n cy=\"12\"\n r=\"9.5\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </g>\n </svg>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","Spinner","React","size","className","props","ref","styles","jsx","SLOT_ATTR","mergeClasses","jsxs"],"mappings":";;;;;AAkBA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,IAAI;AAAA,IACF,GAAGC;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,IAAI;AAAA,IACF,GAAGA;AAAA,IACH,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,OAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,MAAM;AAAA,IACJ,iBAAiB;AAAA,IACjB,eAAe;AAAA,MACb,QAAQ,EAAE,WAAW,iBAAA;AAAA,IAAiB;AAAA,IAExC,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAAA,EAE3B,MAAM;AAAA,IACJ,eAAe;AAAA,MACb,MAAM;AAAA,QACJ,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,SAAS;AAAA,QACP,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,MAEpB,YAAY;AAAA,QACV,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,MAAA;AAAA,IACpB;AAAA,IAEF,mBAAmB;AAAA,IACnB,yBAAyB;AAAA,IACzB,yBAAyB;AAAA,EAAA;AAE7B,CAAC,GAMYC,IAAUC,EAAM;AAAA,EAC3B,SAAiB,EAAE,MAAAC,IAAO,QAAQ,WAAAC,GAAW,GAAGC,EAAA,GAASC,GAAK;AAC5D,UAAMC,IAAST,EAAA;AAEf,WACE,gBAAAU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAF;AAAA,QACA,OAAM;AAAA,QACN,OAAM;AAAA,QACN,QAAO;AAAA,QACP,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAO;AAAA,QACP,MAAK;AAAA,QACL,aAAU;AAAA,QACJ,CAACG,CAAS,GAAG;AAAA,QACnB,WAAWC,EAAaH,EAAOJ,CAAI,GAAGC,CAAS;AAAA,QAC9C,GAAGC;AAAA,QAEJ,UAAA,gBAAAM,EAAC,KAAA,EAAE,WAAWJ,EAAO,MACnB,UAAA;AAAA,UAAA,gBAAAC,EAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,OAAM,aAAY,KAAI,SAAQ,MAAA,CAAM;AAAA,UAC9D,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWD,EAAO;AAAA,cAClB,IAAG;AAAA,cACH,IAAG;AAAA,cACH,GAAE;AAAA,cACF,aAAY;AAAA,cACZ,eAAc;AAAA,cACd,MAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACP,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
2
  import * as l from "react";
3
- import { mergeClasses as m, SLOT_ATTR as u, shorthands as r } from "@epilot/zenith-runtime/v1/core.js";
3
+ import { mergeClasses as m, SLOT_ATTR as u, shorthands as r } from "@epilot/zenith-runtime/v1";
4
4
  import { makeZenithStyles as f } from "../../styles/make-styles.js";
5
5
  import { boxModel as d } from "../../styles/host-reset.js";
6
6
  import { shadowContainer as C, surfaceRadiusContainer as h, surfaceContainer as p, blurObject as S, shadowObject as j, surfaceRadiusObject as O, surfaceObject as R, borderContainer as w, borderWidthContainer as x, borderObject as y, borderWidthObject as k } from "../../tokens/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"surface.js","sources":["../../../src/components/surface/surface.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { ComposeAsChild } from \"../slot/compose-as-child\"\n\n/** A visual role, not an ARIA role or an elevation scale. */\nexport type SurfaceKind = \"panel\" | \"section\"\n\ntype SurfaceBaseProps = Omit<\n React.ComponentProps<\"div\">,\n \"children\" | \"kind\"\n> & {\n /** `panel` is an object frame; `section` is a container grouping. */\n kind: SurfaceKind\n}\n\nexport type SurfaceProps =\n | (SurfaceBaseProps & { asChild?: false; children?: React.ReactNode })\n | (SurfaceBaseProps & { asChild: true; children: React.ReactElement })\n\n/**\n * A role recipe with no layout opinions. The property shapes deliberately match the other role\n * recipes: per-side border atoms let `mergeClasses` replace a Card's border without a wrapper or\n * stylesheet-order dependency.\n */\nconst useStyles = makeZenithStyles({\n panel: {\n ...boxModel,\n backgroundColor: tokens.surfaceObject,\n ...shorthands.borderWidth(tokens.borderWidthObject),\n ...shorthands.borderStyle(\"solid\"),\n ...shorthands.borderColor(tokens.borderObject),\n borderRadius: tokens.surfaceRadiusObject,\n boxShadow: tokens.shadowObject,\n backdropFilter: `blur(${tokens.blurObject})`,\n },\n section: {\n ...boxModel,\n backgroundColor: tokens.surfaceContainer,\n ...shorthands.borderWidth(tokens.borderWidthContainer),\n ...shorthands.borderStyle(\"solid\"),\n ...shorthands.borderColor(tokens.borderContainer),\n borderRadius: tokens.surfaceRadiusContainer,\n boxShadow: tokens.shadowContainer,\n },\n})\n\n/**\n * One optional wrapper for an approved visual role. In asChild mode Surface intentionally keeps\n * the target's data-slot/SLOT_ATTR identity: a Card remains a Card, while a native child need not\n * pretend to be a component it is not.\n */\nexport const Surface = React.forwardRef<HTMLDivElement, SurfaceProps>(\n function Surface(\n { kind, asChild = false, className, children, ...props },\n ref\n ) {\n const styles = useStyles()\n const composedClassName = mergeClasses(styles[kind], className)\n\n if (asChild)\n return (\n <ComposeAsChild {...props} ref={ref} className={composedClassName}>\n {children as React.ReactElement}\n </ComposeAsChild>\n )\n\n return (\n <div\n {...props}\n ref={ref}\n data-slot=\"surface\"\n {...{ [SLOT_ATTR]: \"surface\" }}\n className={composedClassName}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.surfaceObject","shorthands","tokens.borderWidthObject","tokens.borderObject","tokens.surfaceRadiusObject","tokens.shadowObject","tokens.blurObject","tokens.surfaceContainer","tokens.borderWidthContainer","tokens.borderContainer","tokens.surfaceRadiusContainer","tokens.shadowContainer","Surface","React","kind","asChild","className","children","props","ref","styles","composedClassName","mergeClasses","ComposeAsChild","jsx","SLOT_ATTR"],"mappings":";;;;;;;AA8BA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,OAAO;AAAA,IACL,GAAGC;AAAA,IACH,iBAAiBC;AAAAA,IACjB,GAAGC,EAAW,YAAYC,CAAwB;AAAA,IAClD,GAAGD,EAAW,YAAY,OAAO;AAAA,IACjC,GAAGA,EAAW,YAAYE,CAAmB;AAAA,IAC7C,cAAcC;AAAAA,IACd,WAAWC;AAAAA,IACX,gBAAgB,QAAQC,CAAiB;AAAA,EAAA;AAAA,EAE3C,SAAS;AAAA,IACP,GAAGP;AAAA,IACH,iBAAiBQ;AAAAA,IACjB,GAAGN,EAAW,YAAYO,CAA2B;AAAA,IACrD,GAAGP,EAAW,YAAY,OAAO;AAAA,IACjC,GAAGA,EAAW,YAAYQ,CAAsB;AAAA,IAChD,cAAcC;AAAAA,IACd,WAAWC;AAAAA,EAAO;AAEtB,CAAC,GAOYC,IAAUC,EAAM;AAAA,EAC3B,SACE,EAAE,MAAAC,GAAM,SAAAC,IAAU,IAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GACjDC,GACA;AACA,UAAMC,IAASvB,EAAA,GACTwB,IAAoBC,EAAaF,EAAON,CAAI,GAAGE,CAAS;AAE9D,WAAID,sBAECQ,GAAA,EAAgB,GAAGL,GAAO,KAAAC,GAAU,WAAWE,GAC7C,UAAAJ,GACH,IAIF,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGN;AAAA,QACJ,KAAAC;AAAA,QACA,aAAU;AAAA,QACJ,CAACM,CAAS,GAAG;AAAA,QACnB,WAAWJ;AAAA,QAEV,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;"}
1
+ {"version":3,"file":"surface.js","sources":["../../../src/components/surface/surface.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { ComposeAsChild } from \"../slot/compose-as-child\"\n\n/** A visual role, not an ARIA role or an elevation scale. */\nexport type SurfaceKind = \"panel\" | \"section\"\n\ntype SurfaceBaseProps = Omit<\n React.ComponentProps<\"div\">,\n \"children\" | \"kind\"\n> & {\n /** `panel` is an object frame; `section` is a container grouping. */\n kind: SurfaceKind\n}\n\nexport type SurfaceProps =\n | (SurfaceBaseProps & { asChild?: false; children?: React.ReactNode })\n | (SurfaceBaseProps & { asChild: true; children: React.ReactElement })\n\n/**\n * A role recipe with no layout opinions. The property shapes deliberately match the other role\n * recipes: per-side border atoms let `mergeClasses` replace a Card's border without a wrapper or\n * stylesheet-order dependency.\n */\nconst useStyles = makeZenithStyles({\n panel: {\n ...boxModel,\n backgroundColor: tokens.surfaceObject,\n ...shorthands.borderWidth(tokens.borderWidthObject),\n ...shorthands.borderStyle(\"solid\"),\n ...shorthands.borderColor(tokens.borderObject),\n borderRadius: tokens.surfaceRadiusObject,\n boxShadow: tokens.shadowObject,\n backdropFilter: `blur(${tokens.blurObject})`,\n },\n section: {\n ...boxModel,\n backgroundColor: tokens.surfaceContainer,\n ...shorthands.borderWidth(tokens.borderWidthContainer),\n ...shorthands.borderStyle(\"solid\"),\n ...shorthands.borderColor(tokens.borderContainer),\n borderRadius: tokens.surfaceRadiusContainer,\n boxShadow: tokens.shadowContainer,\n },\n})\n\n/**\n * One optional wrapper for an approved visual role. In asChild mode Surface intentionally keeps\n * the target's data-slot/SLOT_ATTR identity: a Card remains a Card, while a native child need not\n * pretend to be a component it is not.\n */\nexport const Surface = React.forwardRef<HTMLDivElement, SurfaceProps>(\n function Surface(\n { kind, asChild = false, className, children, ...props },\n ref\n ) {\n const styles = useStyles()\n const composedClassName = mergeClasses(styles[kind], className)\n\n if (asChild)\n return (\n <ComposeAsChild {...props} ref={ref} className={composedClassName}>\n {children as React.ReactElement}\n </ComposeAsChild>\n )\n\n return (\n <div\n {...props}\n ref={ref}\n data-slot=\"surface\"\n {...{ [SLOT_ATTR]: \"surface\" }}\n className={composedClassName}\n >\n {children}\n </div>\n )\n }\n)\n"],"names":["useStyles","makeZenithStyles","boxModel","tokens.surfaceObject","shorthands","tokens.borderWidthObject","tokens.borderObject","tokens.surfaceRadiusObject","tokens.shadowObject","tokens.blurObject","tokens.surfaceContainer","tokens.borderWidthContainer","tokens.borderContainer","tokens.surfaceRadiusContainer","tokens.shadowContainer","Surface","React","kind","asChild","className","children","props","ref","styles","composedClassName","mergeClasses","ComposeAsChild","jsx","SLOT_ATTR"],"mappings":";;;;;;;AA8BA,MAAMA,IAAYC,EAAiB;AAAA,EACjC,OAAO;AAAA,IACL,GAAGC;AAAA,IACH,iBAAiBC;AAAAA,IACjB,GAAGC,EAAW,YAAYC,CAAwB;AAAA,IAClD,GAAGD,EAAW,YAAY,OAAO;AAAA,IACjC,GAAGA,EAAW,YAAYE,CAAmB;AAAA,IAC7C,cAAcC;AAAAA,IACd,WAAWC;AAAAA,IACX,gBAAgB,QAAQC,CAAiB;AAAA,EAAA;AAAA,EAE3C,SAAS;AAAA,IACP,GAAGP;AAAA,IACH,iBAAiBQ;AAAAA,IACjB,GAAGN,EAAW,YAAYO,CAA2B;AAAA,IACrD,GAAGP,EAAW,YAAY,OAAO;AAAA,IACjC,GAAGA,EAAW,YAAYQ,CAAsB;AAAA,IAChD,cAAcC;AAAAA,IACd,WAAWC;AAAAA,EAAO;AAEtB,CAAC,GAOYC,IAAUC,EAAM;AAAA,EAC3B,SACE,EAAE,MAAAC,GAAM,SAAAC,IAAU,IAAO,WAAAC,GAAW,UAAAC,GAAU,GAAGC,EAAA,GACjDC,GACA;AACA,UAAMC,IAASvB,EAAA,GACTwB,IAAoBC,EAAaF,EAAON,CAAI,GAAGE,CAAS;AAE9D,WAAID,sBAECQ,GAAA,EAAgB,GAAGL,GAAO,KAAAC,GAAU,WAAWE,GAC7C,UAAAJ,GACH,IAIF,gBAAAO;AAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAGN;AAAA,QACJ,KAAAC;AAAA,QACA,aAAU;AAAA,QACJ,CAACM,CAAS,GAAG;AAAA,QACnB,WAAWJ;AAAA,QAEV,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;"}