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

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 (185) hide show
  1. package/README.md +12 -1
  2. package/codemods/README.md +18 -4
  3. package/codemods/format.ts +86 -0
  4. package/codemods/migrate/from-base-elements.ts +8 -2
  5. package/codemods/migrate/from-volt.ts +8 -2
  6. package/codemods/radix-to-base-ui.ts +300 -12
  7. package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
  8. package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
  9. package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
  10. package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
  11. package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
  12. package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
  13. package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
  14. package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
  15. package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
  16. package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
  17. package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
  18. package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
  19. package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
  20. package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
  21. package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
  22. package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
  23. package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
  24. package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
  25. package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
  26. package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
  27. package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
  28. package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
  29. package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
  30. package/dist/components/accordion/accordion.js +1 -1
  31. package/dist/components/accordion/accordion.js.map +1 -1
  32. package/dist/components/alert-dialog/alert-dialog.js +1 -1
  33. package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
  34. package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
  35. package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
  36. package/dist/components/avatar/avatar-group.js +1 -1
  37. package/dist/components/avatar/avatar-group.js.map +1 -1
  38. package/dist/components/avatar/avatar.js +1 -1
  39. package/dist/components/avatar/avatar.js.map +1 -1
  40. package/dist/components/badge/badge.js +1 -1
  41. package/dist/components/badge/badge.js.map +1 -1
  42. package/dist/components/breadcrumb/breadcrumb.js +1 -1
  43. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  44. package/dist/components/button/button.js +1 -1
  45. package/dist/components/button/button.js.map +1 -1
  46. package/dist/components/button-group/button-group.js +1 -1
  47. package/dist/components/button-group/button-group.js.map +1 -1
  48. package/dist/components/callout/callout.js +1 -1
  49. package/dist/components/callout/callout.js.map +1 -1
  50. package/dist/components/card/card.js +1 -1
  51. package/dist/components/card/card.js.map +1 -1
  52. package/dist/components/checkbox/checkbox.js +1 -1
  53. package/dist/components/checkbox/checkbox.js.map +1 -1
  54. package/dist/components/code-block/code-block.js +1 -1
  55. package/dist/components/code-block/code-block.js.map +1 -1
  56. package/dist/components/code-editor/code-editor.js +1 -1
  57. package/dist/components/code-editor/code-editor.js.map +1 -1
  58. package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
  59. package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
  60. package/dist/components/command/command.js +1 -1
  61. package/dist/components/command/command.js.map +1 -1
  62. package/dist/components/data-table/data-table-body.js +1 -1
  63. package/dist/components/data-table/data-table-body.js.map +1 -1
  64. package/dist/components/data-table/data-table-column-header.js +1 -1
  65. package/dist/components/data-table/data-table-column-header.js.map +1 -1
  66. package/dist/components/data-table/data-table-column-order.js +1 -1
  67. package/dist/components/data-table/data-table-column-order.js.map +1 -1
  68. package/dist/components/data-table/data-table-column-visibility.js +1 -1
  69. package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
  70. package/dist/components/data-table/data-table-content.js +1 -1
  71. package/dist/components/data-table/data-table-content.js.map +1 -1
  72. package/dist/components/data-table/data-table-error.js +1 -1
  73. package/dist/components/data-table/data-table-error.js.map +1 -1
  74. package/dist/components/data-table/data-table-footer.js +1 -1
  75. package/dist/components/data-table/data-table-footer.js.map +1 -1
  76. package/dist/components/data-table/data-table-header-draggable.js +1 -1
  77. package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
  78. package/dist/components/data-table/data-table-header.js +1 -1
  79. package/dist/components/data-table/data-table-header.js.map +1 -1
  80. package/dist/components/data-table/data-table-loading.js +1 -1
  81. package/dist/components/data-table/data-table-loading.js.map +1 -1
  82. package/dist/components/data-table/data-table-resize-handle.js +1 -1
  83. package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
  84. package/dist/components/data-table/data-table-row.js +1 -1
  85. package/dist/components/data-table/data-table-row.js.map +1 -1
  86. package/dist/components/data-table/data-table-toolbar.js +1 -1
  87. package/dist/components/data-table/data-table-toolbar.js.map +1 -1
  88. package/dist/components/data-table/data-table.js +1 -1
  89. package/dist/components/data-table/data-table.js.map +1 -1
  90. package/dist/components/date-range-picker/date-range-picker.js +1 -1
  91. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  92. package/dist/components/date-range-picker/range-calendar.js +1 -1
  93. package/dist/components/date-range-picker/range-calendar.js.map +1 -1
  94. package/dist/components/date-time-picker/calendar.js +1 -1
  95. package/dist/components/date-time-picker/calendar.js.map +1 -1
  96. package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
  97. package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
  98. package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
  99. package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
  100. package/dist/components/date-time-picker/date-time-picker.js +1 -1
  101. package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
  102. package/dist/components/date-time-picker/time-picker.js +1 -1
  103. package/dist/components/date-time-picker/time-picker.js.map +1 -1
  104. package/dist/components/density-provider/density-provider.js +1 -1
  105. package/dist/components/dialog/dialog.js +1 -1
  106. package/dist/components/dialog/dialog.js.map +1 -1
  107. package/dist/components/drawer/drawer.js +1 -1
  108. package/dist/components/drawer/drawer.js.map +1 -1
  109. package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
  110. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
  111. package/dist/components/field/field-combobox.js +190 -181
  112. package/dist/components/field/field-combobox.js.map +1 -1
  113. package/dist/components/field/field-select.js +37 -22
  114. package/dist/components/field/field-select.js.map +1 -1
  115. package/dist/components/field/field.js +1 -1
  116. package/dist/components/field/field.js.map +1 -1
  117. package/dist/components/label/label.js +1 -1
  118. package/dist/components/label/label.js.map +1 -1
  119. package/dist/components/list/list.js +1 -1
  120. package/dist/components/list/list.js.map +1 -1
  121. package/dist/components/option-card/option-card.js +1 -1
  122. package/dist/components/option-card/option-card.js.map +1 -1
  123. package/dist/components/pill/pill.js +1 -1
  124. package/dist/components/pill/pill.js.map +1 -1
  125. package/dist/components/popover/popover.js +1 -1
  126. package/dist/components/popover/popover.js.map +1 -1
  127. package/dist/components/radio/radio.js +1 -1
  128. package/dist/components/radio/radio.js.map +1 -1
  129. package/dist/components/scroll-area/scroll-area.js +1 -1
  130. package/dist/components/scroll-area/scroll-area.js.map +1 -1
  131. package/dist/components/scroll-area/scrollbar-styles.js +1 -1
  132. package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
  133. package/dist/components/scroll-overflow/scroll-overflow.js +22 -22
  134. package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
  135. package/dist/components/segmented-control/segmented-control.js +133 -122
  136. package/dist/components/segmented-control/segmented-control.js.map +1 -1
  137. package/dist/components/select/select.js +1 -1
  138. package/dist/components/select/select.js.map +1 -1
  139. package/dist/components/separator/separator.js +1 -1
  140. package/dist/components/separator/separator.js.map +1 -1
  141. package/dist/components/skeleton/skeleton.js +1 -1
  142. package/dist/components/skeleton/skeleton.js.map +1 -1
  143. package/dist/components/slot/compose-as-child.js +1 -1
  144. package/dist/components/slot/compose-as-child.js.map +1 -1
  145. package/dist/components/spinner/spinner.js +1 -1
  146. package/dist/components/spinner/spinner.js.map +1 -1
  147. package/dist/components/surface/surface.js +1 -1
  148. package/dist/components/surface/surface.js.map +1 -1
  149. package/dist/components/switch/switch.js +1 -1
  150. package/dist/components/switch/switch.js.map +1 -1
  151. package/dist/components/table/table-pagination.js +1 -1
  152. package/dist/components/table/table-pagination.js.map +1 -1
  153. package/dist/components/table/table.js +1 -1
  154. package/dist/components/table/table.js.map +1 -1
  155. package/dist/components/tabs/tabs.js +1 -1
  156. package/dist/components/tabs/tabs.js.map +1 -1
  157. package/dist/components/text/text.js +1 -1
  158. package/dist/components/text/text.js.map +1 -1
  159. package/dist/components/toast/toast.js +1 -1
  160. package/dist/components/toast/toast.js.map +1 -1
  161. package/dist/components/toggle/toggle-group.js +1 -1
  162. package/dist/components/toggle/toggle-group.js.map +1 -1
  163. package/dist/components/toggle/toggle.js +29 -26
  164. package/dist/components/toggle/toggle.js.map +1 -1
  165. package/dist/components/tooltip/tooltip.js +1 -1
  166. package/dist/components/tooltip/tooltip.js.map +1 -1
  167. package/dist/index.d.ts +1 -1
  168. package/dist/index.js +1 -1
  169. package/dist/lib/clear-button.js +1 -1
  170. package/dist/lib/clear-button.js.map +1 -1
  171. package/dist/packages/tokens/dist/delivery/index.js +1 -1
  172. package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
  173. package/dist/packages/tokens/dist/install.js +1 -1
  174. package/dist/packages/tokens/dist/install.js.map +1 -1
  175. package/dist/renderer/served.js +19 -14
  176. package/dist/renderer/served.js.map +1 -1
  177. package/dist/styles/host-reset.js.map +1 -1
  178. package/dist/styles/make-styles.js +1 -1
  179. package/dist/styles/make-styles.js.map +1 -1
  180. package/dist/styles/text-box.js.map +1 -1
  181. package/dist/tokens.json +1 -1
  182. package/package.json +5 -3
  183. package/scripts/migration-diagnostics-core.mjs +284 -0
  184. package/scripts/migration-sweep.mjs +10 -10
  185. package/testing/setup.cjs +87 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scroll-overflow.js","sources":["../../../src/components/scroll-overflow/scroll-overflow.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { CSPProvider } from \"@base-ui/react/csp-provider\"\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { ScrollArea as Primitive } from \"@base-ui/react/scroll-area\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useScrollbarStyles } from \"../scroll-area/scrollbar-styles\"\n\nexport type UseScrollOverflowOptions = {\n /** Scroll distance per step in pixels. Default: 200 */\n scrollStep?: number\n /** Scroll orientation. Default: \"horizontal\" */\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nexport type UseScrollOverflowReturn = {\n /** Ref to attach to the scroll container (Base UI Viewport) */\n scrollRef: React.RefObject<HTMLDivElement | null>\n /** Whether the content overflows the container */\n hasOverflow: boolean\n /** Whether there is hidden content before the visible area (left or top) */\n canScrollStart: boolean\n /** Whether there is hidden content after the visible area (right or bottom) */\n canScrollEnd: boolean\n /** Scroll toward the start (left or up) by scrollStep */\n scrollToStart: () => void\n /** Scroll toward the end (right or down) by scrollStep */\n scrollToEnd: () => void\n}\n\nfunction getScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\" || !window.matchMedia) return \"auto\"\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\"\n}\n\nexport function useScrollOverflow(\n options: UseScrollOverflowOptions = {}\n): UseScrollOverflowReturn {\n const { scrollStep = 200, orientation = \"horizontal\" } = options\n const scrollRef = React.useRef<HTMLDivElement | null>(null)\n const [hasOverflow, setHasOverflow] = React.useState(false)\n const [canScrollStart, setCanScrollStart] = React.useState(false)\n const [canScrollEnd, setCanScrollEnd] = React.useState(false)\n\n const isHorizontal = orientation === \"horizontal\"\n\n const updateScrollState = React.useCallback(() => {\n const el = scrollRef.current\n if (!el) return\n\n if (isHorizontal) {\n const scrollLeft = Math.round(el.scrollLeft)\n const scrollWidth = el.scrollWidth\n const clientWidth = el.clientWidth\n\n setHasOverflow(scrollWidth > clientWidth)\n setCanScrollStart(scrollLeft > 0)\n setCanScrollEnd(scrollLeft + clientWidth < scrollWidth - 1)\n } else {\n const scrollTop = Math.round(el.scrollTop)\n const scrollHeight = el.scrollHeight\n const clientHeight = el.clientHeight\n\n setHasOverflow(scrollHeight > clientHeight)\n setCanScrollStart(scrollTop > 0)\n setCanScrollEnd(scrollTop + clientHeight < scrollHeight - 1)\n }\n }, [isHorizontal])\n\n React.useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n\n updateScrollState()\n\n let observer: ResizeObserver | null = null\n if (typeof ResizeObserver !== \"undefined\") {\n observer = new ResizeObserver(() => {\n updateScrollState()\n })\n observer.observe(el)\n for (const child of el.children) {\n observer.observe(child)\n }\n }\n\n el.addEventListener(\"scroll\", updateScrollState, { passive: true })\n\n return () => {\n observer?.disconnect()\n el.removeEventListener(\"scroll\", updateScrollState)\n }\n }, [updateScrollState])\n\n const scrollToStartFn = React.useCallback(() => {\n scrollRef.current?.scrollBy({\n [isHorizontal ? \"left\" : \"top\"]: -scrollStep,\n behavior: getScrollBehavior(),\n })\n }, [scrollStep, isHorizontal])\n\n const scrollToEndFn = React.useCallback(() => {\n scrollRef.current?.scrollBy({\n [isHorizontal ? \"left\" : \"top\"]: scrollStep,\n behavior: getScrollBehavior(),\n })\n }, [scrollStep, isHorizontal])\n\n return {\n scrollRef,\n hasOverflow,\n canScrollStart,\n canScrollEnd,\n scrollToStart: scrollToStartFn,\n scrollToEnd: scrollToEndFn,\n }\n}\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M 8.86 10.51 C 8.94 10.51 9.02 10.49 9.08 10.43 C 9.14 10.38 9.17 10.3 9.17 10.21 V 5.79 C 9.17 5.7 9.14 5.62 9.08 5.57 C 9.01 5.51 8.94 5.49 8.86 5.49 C 8.84 5.49 8.77 5.52 8.65 5.58 L 6.55 7.68 C 6.5 7.73 6.47 7.78 6.44 7.83 C 6.42 7.88 6.41 7.94 6.41 8 C 6.41 8.06 6.42 8.12 6.44 8.17 C 6.47 8.22 6.5 8.27 6.55 8.32 L 8.65 10.42 C 8.68 10.45 8.71 10.47 8.75 10.49 C 8.78 10.51 8.82 10.51 8.86 10.51 Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M7.14 10.51C7.06 10.51 6.98 10.49 6.92 10.43C6.86 10.38 6.83 10.3 6.83 10.21V5.79C6.83 5.7 6.86 5.62 6.92 5.57C6.99 5.51 7.06 5.49 7.14 5.49C7.16 5.49 7.23 5.52 7.35 5.58L9.45 7.68C9.5 7.73 9.53 7.78 9.56 7.83C9.58 7.88 9.59 7.94 9.59 8C9.59 8.06 9.58 8.12 9.56 8.17C9.53 8.22 9.5 8.27 9.45 8.32L7.35 10.42C7.32 10.45 7.29 10.47 7.25 10.49C7.22 10.51 7.18 10.51 7.14 10.51Z\" />\n </svg>\n)\n\nconst ChevronUpIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.49 7.14C5.49 7.06 5.51 6.98 5.57 6.92C5.62 6.86 5.7 6.83 5.79 6.83H10.21C10.3 6.83 10.38 6.86 10.43 6.92C10.49 6.99 10.51 7.06 10.51 7.14C10.51 7.16 10.48 7.23 10.42 7.35L8.32 9.45C8.27 9.5 8.22 9.53 8.17 9.56C8.12 9.58 8.06 9.59 8 9.59C7.94 9.59 7.88 9.58 7.83 9.56C7.78 9.53 7.73 9.5 7.68 9.45L5.58 7.35C5.55 7.32 5.53 7.29 5.51 7.25C5.49 7.22 5.49 7.18 5.49 7.14Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M10.51 8.86C10.51 8.94 10.49 9.02 10.43 9.08C10.38 9.14 10.3 9.17 10.21 9.17H5.79C5.7 9.17 5.62 9.14 5.57 9.08C5.51 9.01 5.49 8.94 5.49 8.86C5.49 8.84 5.52 8.77 5.58 8.65L7.68 6.55C7.73 6.5 7.78 6.47 7.83 6.44C7.88 6.42 7.94 6.41 8 6.41C8.06 6.41 8.12 6.42 8.17 6.44C8.22 6.47 8.27 6.5 8.32 6.55L10.42 8.65C10.45 8.68 10.47 8.71 10.49 8.75C10.51 8.78 10.51 8.82 10.51 8.86Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n container: {\n position: \"relative\",\n display: \"flex\",\n },\n containerHorizontal: {\n alignItems: \"center\",\n },\n containerVertical: {\n flexDirection: \"column\",\n },\n fade: {\n position: \"absolute\",\n zIndex: 10,\n pointerEvents: \"none\",\n },\n fadeHorizontalStart: {\n left: 0,\n top: 0,\n bottom: 0,\n },\n fadeHorizontalEnd: {\n right: 0,\n top: 0,\n bottom: 0,\n },\n fadeVerticalStart: {\n top: 0,\n left: 0,\n right: 0,\n },\n fadeVerticalEnd: {\n bottom: 0,\n left: 0,\n right: 0,\n },\n shadowHorizontalStart: {\n boxShadow: \"inset 8px 0 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowHorizontalEnd: {\n boxShadow: \"inset -8px 0 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowVerticalStart: {\n boxShadow: \"inset 0 8px 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowVerticalEnd: {\n boxShadow: \"inset 0 -8px 6px -6px rgba(0,0,0,0.08)\",\n },\n arrowButton: {\n ...nativeControl,\n position: \"absolute\",\n zIndex: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n ...shorthands.borderStyle(\"none\"),\n ...shorthands.borderWidth(0),\n ...shorthands.padding(0),\n },\n arrowHorizontalStart: {\n ...boxModel,\n left: 0,\n top: 0,\n bottom: 0,\n width: \"1.5rem\",\n },\n arrowHorizontalEnd: {\n ...boxModel,\n right: 0,\n top: 0,\n bottom: 0,\n width: \"1.5rem\",\n },\n arrowVerticalStart: {\n ...boxModel,\n top: 0,\n left: 0,\n right: 0,\n height: \"1.5rem\",\n },\n arrowVerticalEnd: {\n ...boxModel,\n bottom: 0,\n left: 0,\n right: 0,\n height: \"1.5rem\",\n },\n arrowBadge: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: tokens.grayA8,\n ...shorthands.borderRadius(tokens.radiusSm),\n backdropFilter: \"blur(4px)\",\n color: tokens.gray1,\n \":hover\": {\n backgroundColor: tokens.grayA12,\n },\n },\n arrowIcon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n scrollAreaRoot: {\n ...shorthands.overflow(\"hidden\"),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n scrollAreaRootHorizontal: {\n ...boxModel,\n minWidth: 0,\n },\n scrollAreaRootVertical: {\n ...boxModel,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n },\n scrollAreaRootScrollbarHorizontal: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n scrollAreaRootScrollbarVertical: {\n display: \"flex\",\n flexDirection: \"row\",\n },\n viewport: {\n ...boxModel,\n ...shorthands.borderRadius(tokens.radiusMd),\n // The tracks replace the native scrollbars. Zenith's stylesheet hides them, so no inline\n // <style> needs a nonce (Radix's took the viewport's).\n scrollbarWidth: \"none\",\n \"::-webkit-scrollbar\": { display: \"none\" },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineOffset: \"2px\",\n outlineStyle: \"solid\",\n outlineColor: tokens.accentA8,\n },\n },\n // The content wrapper keeps Radix's display:table, which grows to the content's width.\n content: { display: \"table\" },\n viewportHorizontal: {\n \"& > div\": {\n display: \"flex\",\n flexDirection: \"row\",\n },\n },\n viewportVertical: {\n ...boxModel,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n minHeight: 0,\n },\n viewportFlex: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n scrollbar: {\n ...boxModel,\n transitionProperty: \"color, background-color, border-color\",\n transitionDuration: \"150ms\",\n },\n scrollbarHidden: {\n display: \"none\",\n },\n scrollbarHorizontal: {\n ...boxModel,\n height: \"0.5rem\",\n flexDirection: \"column\",\n // The 1px inset along the scroll axis is margin, not padding: Base UI sizes the thumb from the\n // track's offset size without subtracting padding (see ScrollArea's tracks).\n ...shorthands.padding(\"1px\", \"0\"),\n ...shorthands.margin(\"0\", \"1px\"),\n },\n scrollbarVertical: {\n ...boxModel,\n width: \"0.5rem\",\n flexDirection: \"row\",\n ...shorthands.padding(\"0\", \"1px\"),\n ...shorthands.margin(\"1px\", \"0\"),\n },\n thumb: {\n backgroundColor: tokens.grayA8,\n },\n})\n\n// Declared in Zenith in their Radix-era shape, a div's props, not derived from Base UI's, whose\n// types would carry its internals into the published declarations.\nexport type ScrollOverflowProps = Omit<React.ComponentProps<\"div\">, \"dir\"> &\n UseScrollOverflowOptions & {\n /** Text direction of the region and of its thumb position. */\n dir?: \"ltr\" | \"rtl\"\n /**\n * Only `\"hover\"` has an effect, as in earlier releases: with `scrollbar`, the track is not shown\n * until the content overflows. Every other value looks the same, because the track is always\n * mounted.\n */\n type?: \"auto\" | \"always\" | \"scroll\" | \"hover\"\n /** Accepted for compatibility and ignored: Base UI manages track visibility itself. */\n scrollHideDelay?: number\n /** Accepted for compatibility and ignored: the root's children are the viewport and track. */\n asChild?: boolean\n /** Show navigation arrow buttons on edges. Default: false */\n arrows?: boolean\n /** Show gradient fade indicators on edges. Default: true */\n gradients?: boolean\n /** Gradient width in pixels. Default: 40 */\n gradientWidth?: number\n /** Gradient base color (CSS value). Should match the parent background. Default: \"var(--volt-body)\" */\n gradientColor?: string\n /** Show inset shadow on overflow edges. Default: true */\n shadow?: boolean\n /** Show a styled scrollbar track. Default: false */\n scrollbar?: boolean\n }\n\nexport const ScrollOverflow = React.forwardRef<\n HTMLDivElement,\n ScrollOverflowProps\n>(function ScrollOverflow(\n {\n className,\n children,\n arrows = false,\n gradients = true,\n gradientWidth = 40,\n gradientColor = \"var(--volt-body)\",\n shadow = true,\n scrollbar = false,\n scrollStep,\n orientation = \"horizontal\",\n dir = \"ltr\",\n // Radix-only: its visibility and slotting have no Base UI counterpart (see the prop docs).\n type,\n scrollHideDelay: _scrollHideDelay,\n asChild: _asChild,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const scrollbarStyles = useScrollbarStyles()\n const {\n scrollRef,\n hasOverflow,\n canScrollStart,\n canScrollEnd,\n scrollToStart,\n scrollToEnd,\n } = useScrollOverflow({ scrollStep, orientation })\n\n const isHorizontal = orientation === \"horizontal\"\n // Radix's hover scrollbar was the one type that dropped the track (no forceMount) while the\n // content fit; the others kept it mounted. Base UI's track stays mounted, so hide it likewise.\n const showTrack = scrollbar && !(type === \"hover\" && !hasOverflow)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Only handle when the viewport itself is focused, not children\n if (e.target !== e.currentTarget) return\n\n const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\"\n const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\"\n\n switch (e.key) {\n case prevKey:\n e.preventDefault()\n scrollToStart()\n break\n case nextKey:\n e.preventDefault()\n scrollToEnd()\n break\n case \"Home\":\n e.preventDefault()\n scrollRef.current?.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: 0,\n behavior: \"smooth\",\n })\n break\n case \"End\":\n e.preventDefault()\n scrollRef.current?.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: isHorizontal\n ? scrollRef.current.scrollWidth\n : scrollRef.current.scrollHeight,\n behavior: \"smooth\",\n })\n break\n }\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"scroll-overflow\"\n {...{ [SLOT_ATTR]: \"scroll-overflow\" }}\n data-orientation={orientation}\n data-has-overflow={hasOverflow || undefined}\n data-can-scroll-start={canScrollStart || undefined}\n data-can-scroll-end={canScrollEnd || undefined}\n className={mergeClasses(\n styles.container,\n isHorizontal ? styles.containerHorizontal : styles.containerVertical,\n className\n )}\n >\n {/* Start gradient + shadow */}\n {gradients && canScrollStart && (\n <div\n data-slot=\"scroll-overflow-fade-start\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-fade-start\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.fade,\n isHorizontal\n ? styles.fadeHorizontalStart\n : styles.fadeVerticalStart,\n shadow &&\n (isHorizontal\n ? styles.shadowHorizontalStart\n : styles.shadowVerticalStart)\n )}\n style={\n isHorizontal\n ? {\n width: gradientWidth,\n background: `linear-gradient(to right, ${gradientColor}, transparent)`,\n }\n : {\n height: gradientWidth,\n background: `linear-gradient(to bottom, ${gradientColor}, transparent)`,\n }\n }\n />\n )}\n\n {/* Start arrow button */}\n {arrows && canScrollStart && (\n <button\n data-slot=\"scroll-overflow-arrow-start\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-start\" }}\n type=\"button\"\n tabIndex={-1}\n aria-label={isHorizontal ? \"Scroll left\" : \"Scroll up\"}\n onClick={scrollToStart}\n className={mergeClasses(\n styles.arrowButton,\n isHorizontal\n ? styles.arrowHorizontalStart\n : styles.arrowVerticalStart\n )}\n >\n <span\n data-slot=\"scroll-overflow-arrow-icon\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-icon\" }}\n className={styles.arrowBadge}\n >\n {isHorizontal ? (\n <ChevronLeftIcon className={styles.arrowIcon} />\n ) : (\n <ChevronUpIcon className={styles.arrowIcon} />\n )}\n </span>\n </button>\n )}\n\n {/* Base UI ScrollArea; Radix's inline <style> is not rendered, the viewport's styles hide the native scrollbars. */}\n <DirectionProvider direction={dir}>\n <CSPProvider disableStyleElements>\n <Primitive.Root\n data-slot=\"scroll-overflow-root\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-root\" }}\n {...props}\n dir={dir}\n className={mergeClasses(\n styles.scrollAreaRoot,\n isHorizontal\n ? styles.scrollAreaRootHorizontal\n : styles.scrollAreaRootVertical,\n showTrack &&\n (isHorizontal\n ? styles.scrollAreaRootScrollbarHorizontal\n : styles.scrollAreaRootScrollbarVertical)\n )}\n >\n <Primitive.Viewport\n ref={scrollRef}\n data-slot=\"scroll-overflow-viewport\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-viewport\" }}\n tabIndex={hasOverflow ? 0 : -1}\n onKeyDown={handleKeyDown}\n className={mergeClasses(\n styles.viewport,\n isHorizontal && styles.viewportHorizontal,\n scrollbar && styles.viewportFlex,\n !isHorizontal && styles.viewportVertical\n )}\n // Only the axis with a track scrolls, as Radix enabled overflow per mounted scrollbar.\n style={{\n overflowX: isHorizontal ? \"scroll\" : \"hidden\",\n overflowY: isHorizontal ? \"hidden\" : \"scroll\",\n }}\n >\n <Primitive.Content\n className={styles.content}\n // Over Base UI's fit-content, as Radix's wrapper filled the viewport.\n style={{ minWidth: \"100%\" }}\n >\n {children}\n </Primitive.Content>\n </Primitive.Viewport>\n\n <Primitive.Scrollbar\n keepMounted\n orientation={orientation}\n data-slot=\"scroll-overflow-scrollbar\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-scrollbar\" }}\n className={mergeClasses(\n scrollbarStyles.track,\n showTrack ? styles.scrollbar : styles.scrollbarHidden,\n isHorizontal\n ? styles.scrollbarHorizontal\n : styles.scrollbarVertical\n )}\n >\n <Primitive.Thumb\n data-slot=\"scroll-overflow-thumb\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-thumb\" }}\n className={mergeClasses(scrollbarStyles.thumb, styles.thumb)}\n />\n </Primitive.Scrollbar>\n </Primitive.Root>\n </CSPProvider>\n </DirectionProvider>\n\n {/* End gradient + shadow */}\n {gradients && canScrollEnd && (\n <div\n data-slot=\"scroll-overflow-fade-end\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-fade-end\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.fade,\n isHorizontal ? styles.fadeHorizontalEnd : styles.fadeVerticalEnd,\n shadow &&\n (isHorizontal\n ? styles.shadowHorizontalEnd\n : styles.shadowVerticalEnd)\n )}\n style={\n isHorizontal\n ? {\n width: gradientWidth,\n background: `linear-gradient(to left, ${gradientColor}, transparent)`,\n }\n : {\n height: gradientWidth,\n background: `linear-gradient(to top, ${gradientColor}, transparent)`,\n }\n }\n />\n )}\n\n {/* End arrow button */}\n {arrows && canScrollEnd && (\n <button\n data-slot=\"scroll-overflow-arrow-end\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-end\" }}\n type=\"button\"\n tabIndex={-1}\n aria-label={isHorizontal ? \"Scroll right\" : \"Scroll down\"}\n onClick={scrollToEnd}\n className={mergeClasses(\n styles.arrowButton,\n isHorizontal ? styles.arrowHorizontalEnd : styles.arrowVerticalEnd\n )}\n >\n <span\n data-slot=\"scroll-overflow-arrow-icon\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-icon\" }}\n className={styles.arrowBadge}\n >\n {isHorizontal ? (\n <ChevronRightIcon className={styles.arrowIcon} />\n ) : (\n <ChevronDownIcon className={styles.arrowIcon} />\n )}\n </span>\n </button>\n )}\n </div>\n )\n})\n"],"names":["getScrollBehavior","useScrollOverflow","options","scrollStep","orientation","scrollRef","React","hasOverflow","setHasOverflow","canScrollStart","setCanScrollStart","canScrollEnd","setCanScrollEnd","isHorizontal","updateScrollState","el","scrollLeft","scrollWidth","clientWidth","scrollTop","scrollHeight","clientHeight","observer","child","scrollToStartFn","_a","scrollToEndFn","ChevronLeftIcon","props","jsx","ChevronRightIcon","ChevronUpIcon","ChevronDownIcon","useStyles","makeZenithStyles","nativeControl","shorthands","boxModel","tokens.grayA8","tokens.radiusSm","tokens.gray1","tokens.grayA12","tokens.radiusMd","tokens.accentA8","ScrollOverflow","className","children","arrows","gradients","gradientWidth","gradientColor","shadow","scrollbar","dir","type","_scrollHideDelay","_asChild","ref","styles","scrollbarStyles","useScrollbarStyles","scrollToStart","scrollToEnd","showTrack","handleKeyDown","e","prevKey","nextKey","_b","jsxs","SLOT_ATTR","mergeClasses","DirectionProvider","CSPProvider","Primitive"],"mappings":"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"}
1
+ {"version":3,"file":"scroll-overflow.js","sources":["../../../src/components/scroll-overflow/scroll-overflow.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { CSPProvider } from \"@base-ui/react/csp-provider\"\nimport { DirectionProvider } from \"@base-ui/react/direction-provider\"\nimport { ScrollArea as Primitive } from \"@base-ui/react/scroll-area\"\nimport { mergeClasses, shorthands } from \"@epilot/zenith-runtime/v1/core\"\n\nimport { SLOT_ATTR } from \"../../renderer/contract\"\nimport { makeZenithStyles } from \"../../styles/make-styles\"\nimport { boxModel, nativeControl } from \"../../styles/host-reset\"\nimport * as tokens from \"../../tokens\"\nimport { useScrollbarStyles } from \"../scroll-area/scrollbar-styles\"\n\nexport type UseScrollOverflowOptions = {\n /** Scroll distance per step in pixels. Default: 200 */\n scrollStep?: number\n /** Scroll orientation. Default: \"horizontal\" */\n orientation?: \"horizontal\" | \"vertical\"\n}\n\nexport type UseScrollOverflowReturn = {\n /** Ref to attach to the scroll container (Base UI Viewport) */\n scrollRef: React.RefObject<HTMLDivElement | null>\n /** Whether the content overflows the container */\n hasOverflow: boolean\n /** Whether there is hidden content before the visible area (left or top) */\n canScrollStart: boolean\n /** Whether there is hidden content after the visible area (right or bottom) */\n canScrollEnd: boolean\n /** Scroll toward the start (left or up) by scrollStep */\n scrollToStart: () => void\n /** Scroll toward the end (right or down) by scrollStep */\n scrollToEnd: () => void\n}\n\nfunction getScrollBehavior(): ScrollBehavior {\n if (typeof window === \"undefined\" || !window.matchMedia) return \"auto\"\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ? \"auto\"\n : \"smooth\"\n}\n\nexport function useScrollOverflow(\n options: UseScrollOverflowOptions = {}\n): UseScrollOverflowReturn {\n const { scrollStep = 200, orientation = \"horizontal\" } = options\n const scrollRef = React.useRef<HTMLDivElement | null>(null)\n const [hasOverflow, setHasOverflow] = React.useState(false)\n const [canScrollStart, setCanScrollStart] = React.useState(false)\n const [canScrollEnd, setCanScrollEnd] = React.useState(false)\n\n const isHorizontal = orientation === \"horizontal\"\n\n const updateScrollState = React.useCallback(() => {\n const el = scrollRef.current\n if (!el) return\n\n if (isHorizontal) {\n const scrollLeft = Math.round(el.scrollLeft)\n const scrollWidth = el.scrollWidth\n const clientWidth = el.clientWidth\n\n setHasOverflow(scrollWidth > clientWidth)\n setCanScrollStart(scrollLeft > 0)\n setCanScrollEnd(scrollLeft + clientWidth < scrollWidth - 1)\n } else {\n const scrollTop = Math.round(el.scrollTop)\n const scrollHeight = el.scrollHeight\n const clientHeight = el.clientHeight\n\n setHasOverflow(scrollHeight > clientHeight)\n setCanScrollStart(scrollTop > 0)\n setCanScrollEnd(scrollTop + clientHeight < scrollHeight - 1)\n }\n }, [isHorizontal])\n\n React.useEffect(() => {\n const el = scrollRef.current\n if (!el) return\n\n updateScrollState()\n\n let observer: ResizeObserver | null = null\n if (typeof ResizeObserver !== \"undefined\") {\n observer = new ResizeObserver(() => {\n updateScrollState()\n })\n observer.observe(el)\n for (const child of el.children) {\n observer.observe(child)\n }\n }\n\n el.addEventListener(\"scroll\", updateScrollState, { passive: true })\n\n return () => {\n observer?.disconnect()\n el.removeEventListener(\"scroll\", updateScrollState)\n }\n }, [updateScrollState])\n\n const scrollToStartFn = React.useCallback(() => {\n scrollRef.current?.scrollBy({\n [isHorizontal ? \"left\" : \"top\"]: -scrollStep,\n behavior: getScrollBehavior(),\n })\n }, [scrollStep, isHorizontal])\n\n const scrollToEndFn = React.useCallback(() => {\n scrollRef.current?.scrollBy({\n [isHorizontal ? \"left\" : \"top\"]: scrollStep,\n behavior: getScrollBehavior(),\n })\n }, [scrollStep, isHorizontal])\n\n return {\n scrollRef,\n hasOverflow,\n canScrollStart,\n canScrollEnd,\n scrollToStart: scrollToStartFn,\n scrollToEnd: scrollToEndFn,\n }\n}\n\nconst ChevronLeftIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M 8.86 10.51 C 8.94 10.51 9.02 10.49 9.08 10.43 C 9.14 10.38 9.17 10.3 9.17 10.21 V 5.79 C 9.17 5.7 9.14 5.62 9.08 5.57 C 9.01 5.51 8.94 5.49 8.86 5.49 C 8.84 5.49 8.77 5.52 8.65 5.58 L 6.55 7.68 C 6.5 7.73 6.47 7.78 6.44 7.83 C 6.42 7.88 6.41 7.94 6.41 8 C 6.41 8.06 6.42 8.12 6.44 8.17 C 6.47 8.22 6.5 8.27 6.55 8.32 L 8.65 10.42 C 8.68 10.45 8.71 10.47 8.75 10.49 C 8.78 10.51 8.82 10.51 8.86 10.51 Z\" />\n </svg>\n)\n\nconst ChevronRightIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M7.14 10.51C7.06 10.51 6.98 10.49 6.92 10.43C6.86 10.38 6.83 10.3 6.83 10.21V5.79C6.83 5.7 6.86 5.62 6.92 5.57C6.99 5.51 7.06 5.49 7.14 5.49C7.16 5.49 7.23 5.52 7.35 5.58L9.45 7.68C9.5 7.73 9.53 7.78 9.56 7.83C9.58 7.88 9.59 7.94 9.59 8C9.59 8.06 9.58 8.12 9.56 8.17C9.53 8.22 9.5 8.27 9.45 8.32L7.35 10.42C7.32 10.45 7.29 10.47 7.25 10.49C7.22 10.51 7.18 10.51 7.14 10.51Z\" />\n </svg>\n)\n\nconst ChevronUpIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M5.49 7.14C5.49 7.06 5.51 6.98 5.57 6.92C5.62 6.86 5.7 6.83 5.79 6.83H10.21C10.3 6.83 10.38 6.86 10.43 6.92C10.49 6.99 10.51 7.06 10.51 7.14C10.51 7.16 10.48 7.23 10.42 7.35L8.32 9.45C8.27 9.5 8.22 9.53 8.17 9.56C8.12 9.58 8.06 9.59 8 9.59C7.94 9.59 7.88 9.58 7.83 9.56C7.78 9.53 7.73 9.5 7.68 9.45L5.58 7.35C5.55 7.32 5.53 7.29 5.51 7.25C5.49 7.22 5.49 7.18 5.49 7.14Z\" />\n </svg>\n)\n\nconst ChevronDownIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n viewBox=\"0 0 16 16\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"currentColor\"\n {...props}\n >\n <path d=\"M10.51 8.86C10.51 8.94 10.49 9.02 10.43 9.08C10.38 9.14 10.3 9.17 10.21 9.17H5.79C5.7 9.17 5.62 9.14 5.57 9.08C5.51 9.01 5.49 8.94 5.49 8.86C5.49 8.84 5.52 8.77 5.58 8.65L7.68 6.55C7.73 6.5 7.78 6.47 7.83 6.44C7.88 6.42 7.94 6.41 8 6.41C8.06 6.41 8.12 6.42 8.17 6.44C8.22 6.47 8.27 6.5 8.32 6.55L10.42 8.65C10.45 8.68 10.47 8.71 10.49 8.75C10.51 8.78 10.51 8.82 10.51 8.86Z\" />\n </svg>\n)\n\nconst useStyles = makeZenithStyles({\n container: {\n position: \"relative\",\n display: \"flex\",\n },\n containerHorizontal: {\n alignItems: \"center\",\n },\n containerVertical: {\n flexDirection: \"column\",\n },\n fade: {\n position: \"absolute\",\n zIndex: 10,\n pointerEvents: \"none\",\n },\n fadeHorizontalStart: {\n left: 0,\n top: 0,\n bottom: 0,\n },\n fadeHorizontalEnd: {\n right: 0,\n top: 0,\n bottom: 0,\n },\n fadeVerticalStart: {\n top: 0,\n left: 0,\n right: 0,\n },\n fadeVerticalEnd: {\n bottom: 0,\n left: 0,\n right: 0,\n },\n shadowHorizontalStart: {\n boxShadow: \"inset 8px 0 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowHorizontalEnd: {\n boxShadow: \"inset -8px 0 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowVerticalStart: {\n boxShadow: \"inset 0 8px 6px -6px rgba(0,0,0,0.08)\",\n },\n shadowVerticalEnd: {\n boxShadow: \"inset 0 -8px 6px -6px rgba(0,0,0,0.08)\",\n },\n arrowButton: {\n ...nativeControl,\n position: \"absolute\",\n zIndex: 20,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n backgroundColor: \"transparent\",\n ...shorthands.borderStyle(\"none\"),\n ...shorthands.borderWidth(0),\n ...shorthands.padding(0),\n },\n arrowHorizontalStart: {\n ...boxModel,\n left: 0,\n top: 0,\n bottom: 0,\n width: \"1.5rem\",\n },\n arrowHorizontalEnd: {\n ...boxModel,\n right: 0,\n top: 0,\n bottom: 0,\n width: \"1.5rem\",\n },\n arrowVerticalStart: {\n ...boxModel,\n top: 0,\n left: 0,\n right: 0,\n height: \"1.5rem\",\n },\n arrowVerticalEnd: {\n ...boxModel,\n bottom: 0,\n left: 0,\n right: 0,\n height: \"1.5rem\",\n },\n arrowBadge: {\n ...boxModel,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: tokens.grayA8,\n ...shorthands.borderRadius(tokens.radiusSm),\n backdropFilter: \"blur(4px)\",\n color: tokens.gray1,\n \":hover\": {\n backgroundColor: tokens.grayA12,\n },\n },\n arrowIcon: {\n ...boxModel,\n width: \"1rem\",\n height: \"1rem\",\n },\n scrollAreaRoot: {\n ...shorthands.overflow(\"hidden\"),\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n scrollAreaRootHorizontal: {\n ...boxModel,\n minWidth: 0,\n },\n scrollAreaRootVertical: {\n ...boxModel,\n minHeight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n },\n scrollAreaRootScrollbarHorizontal: {\n display: \"flex\",\n flexDirection: \"column\",\n },\n scrollAreaRootScrollbarVertical: {\n display: \"flex\",\n flexDirection: \"row\",\n },\n viewport: {\n ...boxModel,\n ...shorthands.borderRadius(tokens.radiusMd),\n // The tracks replace the native scrollbars. Zenith's stylesheet hides them, so no inline\n // <style> needs a nonce (Radix's took the viewport's).\n scrollbarWidth: \"none\",\n \"::-webkit-scrollbar\": { display: \"none\" },\n \":focus-visible\": {\n outlineWidth: \"2px\",\n outlineOffset: \"2px\",\n outlineStyle: \"solid\",\n outlineColor: tokens.accentA8,\n },\n },\n // The content wrapper keeps Radix's display:table, which grows to the content's width.\n content: { display: \"table\" },\n viewportHorizontal: {\n \"& > div\": {\n display: \"flex\",\n flexDirection: \"row\",\n },\n },\n viewportVertical: {\n ...boxModel,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n minHeight: 0,\n },\n viewportFlex: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"0%\",\n },\n scrollbar: {\n ...boxModel,\n transitionProperty: \"color, background-color, border-color\",\n transitionDuration: \"150ms\",\n },\n scrollbarHidden: {\n display: \"none\",\n },\n scrollbarHorizontal: {\n ...boxModel,\n height: \"0.5rem\",\n flexDirection: \"column\",\n // The 1px inset along the scroll axis is margin, not padding: Base UI sizes the thumb from the\n // track's offset size without subtracting padding (see ScrollArea's tracks).\n ...shorthands.padding(\"1px\", \"0\"),\n ...shorthands.margin(\"0\", \"1px\"),\n },\n scrollbarVertical: {\n ...boxModel,\n width: \"0.5rem\",\n flexDirection: \"row\",\n ...shorthands.padding(\"0\", \"1px\"),\n ...shorthands.margin(\"1px\", \"0\"),\n },\n thumb: {\n backgroundColor: tokens.grayA8,\n },\n})\n\n// Declared in Zenith in their Radix-era shape, a div's props, not derived from Base UI's, whose\n// types would carry its internals into the published declarations.\nexport type ScrollOverflowProps = Omit<React.ComponentProps<\"div\">, \"dir\"> &\n UseScrollOverflowOptions & {\n /** Text direction of the region and of its thumb position. */\n dir?: \"ltr\" | \"rtl\"\n /**\n * Only `\"hover\"` has an effect, as in earlier releases: with `scrollbar`, the track is not shown\n * until the content overflows. Every other value looks the same, because the track is always\n * mounted.\n */\n type?: \"auto\" | \"always\" | \"scroll\" | \"hover\"\n /** Accepted for compatibility and ignored: Base UI manages track visibility itself. */\n scrollHideDelay?: number\n /** Accepted for compatibility and ignored: the root's children are the viewport and track. */\n asChild?: boolean\n /** Show navigation arrow buttons on edges. Default: false */\n arrows?: boolean\n /** Show gradient fade indicators on edges. Default: true */\n gradients?: boolean\n /** Gradient width in pixels. Default: 40 */\n gradientWidth?: number\n /** Gradient base color (CSS value). Should match the parent background. Default: the Zenith body token. */\n gradientColor?: string\n /** Show inset shadow on overflow edges. Default: true */\n shadow?: boolean\n /** Show a styled scrollbar track. Default: false */\n scrollbar?: boolean\n }\n\nexport const ScrollOverflow = React.forwardRef<\n HTMLDivElement,\n ScrollOverflowProps\n>(function ScrollOverflow(\n {\n className,\n children,\n arrows = false,\n gradients = true,\n gradientWidth = 40,\n gradientColor = tokens.body,\n shadow = true,\n scrollbar = false,\n scrollStep,\n orientation = \"horizontal\",\n dir = \"ltr\",\n // Radix-only: its visibility and slotting have no Base UI counterpart (see the prop docs).\n type,\n scrollHideDelay: _scrollHideDelay,\n asChild: _asChild,\n ...props\n },\n ref\n) {\n const styles = useStyles()\n const scrollbarStyles = useScrollbarStyles()\n const {\n scrollRef,\n hasOverflow,\n canScrollStart,\n canScrollEnd,\n scrollToStart,\n scrollToEnd,\n } = useScrollOverflow({ scrollStep, orientation })\n\n const isHorizontal = orientation === \"horizontal\"\n // Radix's hover scrollbar was the one type that dropped the track (no forceMount) while the\n // content fit; the others kept it mounted. Base UI's track stays mounted, so hide it likewise.\n const showTrack = scrollbar && !(type === \"hover\" && !hasOverflow)\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // Only handle when the viewport itself is focused, not children\n if (e.target !== e.currentTarget) return\n\n const prevKey = isHorizontal ? \"ArrowLeft\" : \"ArrowUp\"\n const nextKey = isHorizontal ? \"ArrowRight\" : \"ArrowDown\"\n\n switch (e.key) {\n case prevKey:\n e.preventDefault()\n scrollToStart()\n break\n case nextKey:\n e.preventDefault()\n scrollToEnd()\n break\n case \"Home\":\n e.preventDefault()\n scrollRef.current?.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: 0,\n behavior: \"smooth\",\n })\n break\n case \"End\":\n e.preventDefault()\n scrollRef.current?.scrollTo({\n [isHorizontal ? \"left\" : \"top\"]: isHorizontal\n ? scrollRef.current.scrollWidth\n : scrollRef.current.scrollHeight,\n behavior: \"smooth\",\n })\n break\n }\n }\n\n return (\n <div\n ref={ref}\n data-slot=\"scroll-overflow\"\n {...{ [SLOT_ATTR]: \"scroll-overflow\" }}\n data-orientation={orientation}\n data-has-overflow={hasOverflow || undefined}\n data-can-scroll-start={canScrollStart || undefined}\n data-can-scroll-end={canScrollEnd || undefined}\n className={mergeClasses(\n styles.container,\n isHorizontal ? styles.containerHorizontal : styles.containerVertical,\n className\n )}\n >\n {/* Start gradient + shadow */}\n {gradients && canScrollStart && (\n <div\n data-slot=\"scroll-overflow-fade-start\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-fade-start\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.fade,\n isHorizontal\n ? styles.fadeHorizontalStart\n : styles.fadeVerticalStart,\n shadow &&\n (isHorizontal\n ? styles.shadowHorizontalStart\n : styles.shadowVerticalStart)\n )}\n style={\n isHorizontal\n ? {\n width: gradientWidth,\n background: `linear-gradient(to right, ${gradientColor}, transparent)`,\n }\n : {\n height: gradientWidth,\n background: `linear-gradient(to bottom, ${gradientColor}, transparent)`,\n }\n }\n />\n )}\n\n {/* Start arrow button */}\n {arrows && canScrollStart && (\n <button\n data-slot=\"scroll-overflow-arrow-start\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-start\" }}\n type=\"button\"\n tabIndex={-1}\n aria-label={isHorizontal ? \"Scroll left\" : \"Scroll up\"}\n onClick={scrollToStart}\n className={mergeClasses(\n styles.arrowButton,\n isHorizontal\n ? styles.arrowHorizontalStart\n : styles.arrowVerticalStart\n )}\n >\n <span\n data-slot=\"scroll-overflow-arrow-icon\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-icon\" }}\n className={styles.arrowBadge}\n >\n {isHorizontal ? (\n <ChevronLeftIcon className={styles.arrowIcon} />\n ) : (\n <ChevronUpIcon className={styles.arrowIcon} />\n )}\n </span>\n </button>\n )}\n\n {/* Base UI ScrollArea; Radix's inline <style> is not rendered, the viewport's styles hide the native scrollbars. */}\n <DirectionProvider direction={dir}>\n <CSPProvider disableStyleElements>\n <Primitive.Root\n data-slot=\"scroll-overflow-root\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-root\" }}\n {...props}\n dir={dir}\n className={mergeClasses(\n styles.scrollAreaRoot,\n isHorizontal\n ? styles.scrollAreaRootHorizontal\n : styles.scrollAreaRootVertical,\n showTrack &&\n (isHorizontal\n ? styles.scrollAreaRootScrollbarHorizontal\n : styles.scrollAreaRootScrollbarVertical)\n )}\n >\n <Primitive.Viewport\n ref={scrollRef}\n data-slot=\"scroll-overflow-viewport\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-viewport\" }}\n tabIndex={hasOverflow ? 0 : -1}\n onKeyDown={handleKeyDown}\n className={mergeClasses(\n styles.viewport,\n isHorizontal && styles.viewportHorizontal,\n scrollbar && styles.viewportFlex,\n !isHorizontal && styles.viewportVertical\n )}\n // Only the axis with a track scrolls, as Radix enabled overflow per mounted scrollbar.\n style={{\n overflowX: isHorizontal ? \"scroll\" : \"hidden\",\n overflowY: isHorizontal ? \"hidden\" : \"scroll\",\n }}\n >\n <Primitive.Content\n className={styles.content}\n // Over Base UI's fit-content, as Radix's wrapper filled the viewport.\n style={{ minWidth: \"100%\" }}\n >\n {children}\n </Primitive.Content>\n </Primitive.Viewport>\n\n <Primitive.Scrollbar\n keepMounted\n orientation={orientation}\n data-slot=\"scroll-overflow-scrollbar\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-scrollbar\" }}\n className={mergeClasses(\n scrollbarStyles.track,\n showTrack ? styles.scrollbar : styles.scrollbarHidden,\n isHorizontal\n ? styles.scrollbarHorizontal\n : styles.scrollbarVertical\n )}\n >\n <Primitive.Thumb\n data-slot=\"scroll-overflow-thumb\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-thumb\" }}\n className={mergeClasses(scrollbarStyles.thumb, styles.thumb)}\n />\n </Primitive.Scrollbar>\n </Primitive.Root>\n </CSPProvider>\n </DirectionProvider>\n\n {/* End gradient + shadow */}\n {gradients && canScrollEnd && (\n <div\n data-slot=\"scroll-overflow-fade-end\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-fade-end\" }}\n aria-hidden=\"true\"\n className={mergeClasses(\n styles.fade,\n isHorizontal ? styles.fadeHorizontalEnd : styles.fadeVerticalEnd,\n shadow &&\n (isHorizontal\n ? styles.shadowHorizontalEnd\n : styles.shadowVerticalEnd)\n )}\n style={\n isHorizontal\n ? {\n width: gradientWidth,\n background: `linear-gradient(to left, ${gradientColor}, transparent)`,\n }\n : {\n height: gradientWidth,\n background: `linear-gradient(to top, ${gradientColor}, transparent)`,\n }\n }\n />\n )}\n\n {/* End arrow button */}\n {arrows && canScrollEnd && (\n <button\n data-slot=\"scroll-overflow-arrow-end\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-end\" }}\n type=\"button\"\n tabIndex={-1}\n aria-label={isHorizontal ? \"Scroll right\" : \"Scroll down\"}\n onClick={scrollToEnd}\n className={mergeClasses(\n styles.arrowButton,\n isHorizontal ? styles.arrowHorizontalEnd : styles.arrowVerticalEnd\n )}\n >\n <span\n data-slot=\"scroll-overflow-arrow-icon\"\n {...{ [SLOT_ATTR]: \"scroll-overflow-arrow-icon\" }}\n className={styles.arrowBadge}\n >\n {isHorizontal ? (\n <ChevronRightIcon className={styles.arrowIcon} />\n ) : (\n <ChevronDownIcon className={styles.arrowIcon} />\n )}\n </span>\n </button>\n )}\n </div>\n )\n})\n"],"names":["getScrollBehavior","useScrollOverflow","options","scrollStep","orientation","scrollRef","React","hasOverflow","setHasOverflow","canScrollStart","setCanScrollStart","canScrollEnd","setCanScrollEnd","isHorizontal","updateScrollState","el","scrollLeft","scrollWidth","clientWidth","scrollTop","scrollHeight","clientHeight","observer","child","scrollToStartFn","_a","scrollToEndFn","ChevronLeftIcon","props","jsx","ChevronRightIcon","ChevronUpIcon","ChevronDownIcon","useStyles","makeZenithStyles","nativeControl","shorthands","boxModel","tokens.grayA8","tokens.radiusSm","tokens.gray1","tokens.grayA12","tokens.radiusMd","tokens.accentA8","ScrollOverflow","className","children","arrows","gradients","gradientWidth","gradientColor","tokens.body","shadow","scrollbar","dir","type","_scrollHideDelay","_asChild","ref","styles","scrollbarStyles","useScrollbarStyles","scrollToStart","scrollToEnd","showTrack","handleKeyDown","e","prevKey","nextKey","_b","jsxs","SLOT_ATTR","mergeClasses","DirectionProvider","CSPProvider","Primitive"],"mappings":"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"}
@@ -1,77 +1,77 @@
1
- import { jsx as h, jsxs as $ } from "react/jsx-runtime";
2
- import * as f from "react";
3
- import { useRef as G, useState as v, useCallback as E, useLayoutEffect as I } from "react";
4
- import { Radio as O } from "../../_virtual/_zenith-runtime-family_radio.js";
5
- import { SLOT_ATTR as e, mergeClasses as w, shorthands as n } from "@epilot/zenith-runtime/v1";
6
- import { makeZenithStyles as V } from "../../styles/make-styles.js";
7
- import { boxModel as s, nativeControl as P } from "../../styles/host-reset.js";
8
- import { accentDefault as T, accentA8 as Y, accentSoft as A, fontWeightSemibold as Z, leadingXs as J, textXs as K, spacingElement1 as p, spacingElement3 as W, body as Q } from "../../tokens/index.js";
9
- import { RadioGroupBase as U } from "../radio/radio-group-base.js";
10
- const z = f.createContext({
1
+ import { jsx as b, jsxs as $ } from "react/jsx-runtime";
2
+ import * as m from "react";
3
+ import { useRef as G, useState as w, useCallback as R, useLayoutEffect as I } from "react";
4
+ import { Radio as V } from "../../_virtual/_zenith-runtime-family_radio.js";
5
+ import { SLOT_ATTR as t, mergeClasses as E, shorthands as n } from "@epilot/zenith-runtime/v1/core.js";
6
+ import { makeZenithStyles as P } from "../../styles/make-styles.js";
7
+ import { boxModel as l, nativeControl as Y } from "../../styles/host-reset.js";
8
+ import { accentDefault as T, accentA8 as Z, accentSoft as W, fontWeightSemibold as J, leadingXs as K, textXs as Q, spacingElement1 as g, spacingElement3 as z, body as U } from "../../tokens/index.js";
9
+ import { RadioGroupBase as ee } from "../radio/radio-group-base.js";
10
+ const F = m.createContext({
11
11
  layout: "hug"
12
- }), N = V({
12
+ }), q = P({
13
13
  group: {
14
- ...s,
14
+ ...l,
15
15
  position: "relative",
16
16
  display: "inline-flex",
17
17
  alignItems: "center",
18
- ...n.gap(p),
18
+ ...n.gap(g),
19
19
  ...n.borderRadius("9999px"),
20
- backgroundColor: A,
21
- ...n.padding(p),
20
+ backgroundColor: W,
21
+ ...n.padding(g),
22
22
  ...n.border("0"),
23
23
  boxShadow: "none"
24
24
  },
25
25
  groupStretch: {
26
- ...s,
26
+ ...l,
27
27
  display: "flex",
28
28
  width: "100%"
29
29
  },
30
30
  groupVertical: {
31
- ...s,
31
+ ...l,
32
32
  flexDirection: "column",
33
33
  display: "inline-flex",
34
34
  width: "fit-content"
35
35
  },
36
36
  indicator: {
37
- ...s,
37
+ ...l,
38
38
  pointerEvents: "none",
39
39
  position: "absolute",
40
40
  top: 0,
41
41
  left: 0,
42
42
  zIndex: 0,
43
43
  ...n.borderRadius("9999px"),
44
- backgroundColor: Q,
44
+ backgroundColor: U,
45
45
  // Tailwind `shadow-sm`
46
46
  boxShadow: "0 1px 2px 0 #0000000d"
47
47
  },
48
48
  indicatorAnimated: {
49
- ...s,
49
+ ...l,
50
50
  transitionProperty: "transform, width, height",
51
51
  transitionDuration: "150ms",
52
52
  transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)"
53
53
  },
54
54
  item: {
55
- ...P,
55
+ ...Y,
56
56
  position: "relative",
57
57
  zIndex: 1,
58
58
  display: "inline-flex",
59
59
  alignItems: "center",
60
60
  justifyContent: "center",
61
- ...n.gap(p),
61
+ ...n.gap(g),
62
62
  ...n.borderRadius("9999px"),
63
63
  minWidth: "3rem",
64
64
  // v1 uses Tailwind's `px-3` = 0.75rem here. The semantic spacing scale has NO 0.75rem
65
65
  // token -- it runs 0.25/0.5/0.5/1/1.5/2 -- so this is a literal by necessity.
66
66
  // `spacingGroup1` is 0.5rem and reaching for it by name (as three components did)
67
67
  // silently loses 4px per side. See STATUS: the scale gap is the root cause.
68
- paddingLeft: W,
69
- paddingRight: W,
70
- paddingTop: p,
71
- paddingBottom: p,
72
- fontSize: K,
73
- lineHeight: J,
74
- fontWeight: Z,
68
+ paddingLeft: z,
69
+ paddingRight: z,
70
+ paddingTop: g,
71
+ paddingBottom: g,
72
+ fontSize: Q,
73
+ lineHeight: K,
74
+ fontWeight: J,
75
75
  color: T,
76
76
  cursor: "pointer",
77
77
  userSelect: "none",
@@ -86,12 +86,12 @@ const z = f.createContext({
86
86
  transitionDuration: "150ms",
87
87
  transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)",
88
88
  ":hover:not([data-checked])": {
89
- backgroundColor: A
89
+ backgroundColor: W
90
90
  },
91
91
  ":focus-visible": {
92
92
  outlineWidth: "2px",
93
93
  outlineStyle: "solid",
94
- outlineColor: Y
94
+ outlineColor: Z
95
95
  },
96
96
  "&[data-disabled]": {
97
97
  pointerEvents: "none",
@@ -105,12 +105,12 @@ const z = f.createContext({
105
105
  "&[data-checked][data-disabled]": {
106
106
  backgroundColor: "transparent"
107
107
  },
108
- [`& [${e}="radio-group-indicator"]`]: {
108
+ [`& [${t}="radio-group-indicator"]`]: {
109
109
  display: "none"
110
110
  },
111
111
  // Keyed on SLOT_ATTR, never data-slot (rule 4): the composed RadioGroup emits both, and
112
112
  // data-slot values are shared with v1 so such a rule would also match v1-rendered DOM.
113
- [`[${e}='radio-group-indicator']`]: {
113
+ [`[${t}='radio-group-indicator']`]: {
114
114
  display: "none"
115
115
  }
116
116
  },
@@ -120,7 +120,7 @@ const z = f.createContext({
120
120
  flexBasis: "0%"
121
121
  },
122
122
  icon: {
123
- ...s,
123
+ ...l,
124
124
  flexShrink: 0,
125
125
  width: "1rem",
126
126
  height: "1rem",
@@ -138,136 +138,147 @@ const z = f.createContext({
138
138
  textOverflow: "ellipsis",
139
139
  whiteSpace: "nowrap"
140
140
  }
141
- }), dt = f.forwardRef(function({
142
- className: x,
141
+ }), le = m.forwardRef(function({
142
+ className: v,
143
143
  layout: o = "hug",
144
- orientation: c = "horizontal",
145
- value: r,
146
- defaultValue: y,
147
- onValueChange: d,
148
- children: S,
149
- asChild: R,
150
- ...i
151
- }, a) {
152
- const l = N(), m = G(null), [M, _] = v(y), [C, q] = v(!1), [B, F] = v({
144
+ orientation: u = "horizontal",
145
+ value: s,
146
+ defaultValue: C,
147
+ onValueChange: f,
148
+ children: x,
149
+ asChild: A,
150
+ ...c
151
+ }, d) {
152
+ const p = q(), r = G(null), [L, M] = w(C), [k, _] = w(!1), [B, O] = w({
153
153
  opacity: 0
154
- }), g = r !== void 0, j = g ? r : M, k = E(() => {
155
- if (!m.current) return;
156
- const t = m.current.querySelector(
157
- `[${e}="segmented-control-item"][data-checked]`
154
+ }), y = s !== void 0, j = y ? s : L, h = R(() => {
155
+ if (!r.current) return;
156
+ const e = r.current.querySelector(
157
+ `[${t}="segmented-control-item"][data-checked]`
158
158
  );
159
- t && (F({
159
+ e && (O({
160
160
  opacity: 1,
161
- width: t.offsetWidth,
162
- height: t.offsetHeight,
163
- transform: `translate(${t.offsetLeft}px, ${t.offsetTop}px)`
164
- }), q(!0));
165
- }, []);
166
- I(() => {
167
- if (!m.current) return;
168
- const t = Array.from(
169
- m.current.querySelectorAll(
170
- `[${e}="segmented-control-item"]`
161
+ width: e.offsetWidth,
162
+ height: e.offsetHeight,
163
+ transform: `translate(${e.offsetLeft}px, ${e.offsetTop}px)`
164
+ }), _(!0));
165
+ }, []), S = R(() => {
166
+ if (!r.current) return;
167
+ const e = Array.from(
168
+ r.current.querySelectorAll(
169
+ `[${t}="segmented-control-item"]`
171
170
  )
172
171
  );
173
- if (!t.length || (t.forEach((u) => u.style.minWidth = ""), o !== "equal")) return;
174
- const b = Math.max(...t.map((u) => u.offsetWidth));
175
- t.forEach((u) => u.style.minWidth = `${b}px`);
176
- }, [o]), I(() => {
177
- if (!C) {
178
- k();
172
+ if (!e.length || (e.forEach((a) => a.style.minWidth = ""), o !== "equal")) return;
173
+ const i = Math.max(...e.map((a) => a.offsetWidth));
174
+ e.forEach((a) => a.style.minWidth = `${i}px`);
175
+ }, [o]);
176
+ I(S, [S]), I(() => {
177
+ if (!k) {
178
+ h();
179
179
  return;
180
180
  }
181
- const t = requestAnimationFrame(k);
182
- return () => cancelAnimationFrame(t);
183
- }, [j, C, k]);
184
- const D = E(
185
- (t, b) => {
186
- d == null || d(t, b), !g && !b.isCanceled && _(t);
181
+ const e = requestAnimationFrame(h);
182
+ return () => cancelAnimationFrame(e);
183
+ }, [j, k, h]), m.useEffect(() => {
184
+ if (!r.current || typeof ResizeObserver > "u") return;
185
+ let e;
186
+ const i = new ResizeObserver(() => {
187
+ e !== void 0 && cancelAnimationFrame(e), e = requestAnimationFrame(() => {
188
+ e = void 0, S(), h();
189
+ });
190
+ });
191
+ return r.current.querySelectorAll(`[${t}="segmented-control-item"]`).forEach((a) => i.observe(a, { box: "border-box" })), () => {
192
+ i.disconnect(), e !== void 0 && cancelAnimationFrame(e);
193
+ };
194
+ }, [x, h, S]);
195
+ const D = R(
196
+ (e, i) => {
197
+ f == null || f(e, i), !y && !i.isCanceled && M(e);
187
198
  },
188
- [g, d]
189
- ), H = (t) => {
190
- m.current = t, typeof a == "function" ? a(t) : a && (a.current = t);
191
- }, X = f.useMemo(() => ({ layout: o }), [o]);
192
- return /* @__PURE__ */ h(z.Provider, { value: X, children: /* @__PURE__ */ $(
193
- U,
199
+ [y, f]
200
+ ), H = (e) => {
201
+ r.current = e, typeof d == "function" ? d(e) : d && (d.current = e);
202
+ }, X = m.useMemo(() => ({ layout: o }), [o]);
203
+ return /* @__PURE__ */ b(F.Provider, { value: X, children: /* @__PURE__ */ $(
204
+ ee,
194
205
  {
195
206
  ref: H,
196
207
  "data-slot": "segmented-control",
197
- [e]: "segmented-control",
208
+ [t]: "segmented-control",
198
209
  "data-layout": o,
199
- value: g ? r : void 0,
200
- defaultValue: y,
210
+ value: y ? s : void 0,
211
+ defaultValue: C,
201
212
  onValueChange: D,
202
- orientation: c,
203
- className: w(
204
- l.group,
205
- o === "stretch" && l.groupStretch,
206
- c === "vertical" && l.groupVertical,
207
- x
213
+ orientation: u,
214
+ className: E(
215
+ p.group,
216
+ o === "stretch" && p.groupStretch,
217
+ u === "vertical" && p.groupVertical,
218
+ v
208
219
  ),
209
- ...i,
220
+ ...c,
210
221
  children: [
211
- /* @__PURE__ */ h(
222
+ /* @__PURE__ */ b(
212
223
  "span",
213
224
  {
214
225
  "aria-hidden": "true",
215
226
  "data-slot": "segmented-control-indicator",
216
- [e]: "segmented-control-indicator",
217
- className: w(
218
- l.indicator,
219
- C && l.indicatorAnimated
227
+ [t]: "segmented-control-indicator",
228
+ className: E(
229
+ p.indicator,
230
+ k && p.indicatorAnimated
220
231
  ),
221
232
  style: B
222
233
  }
223
234
  ),
224
- S
235
+ x
225
236
  ]
226
237
  }
227
238
  ) });
228
- }), tt = /* @__PURE__ */ h("button", { type: "button" }), lt = f.forwardRef(function({
229
- className: x,
239
+ }), te = /* @__PURE__ */ b("button", { type: "button" }), me = m.forwardRef(function({
240
+ className: v,
230
241
  value: o,
231
- icon: c,
232
- children: r,
233
- asChild: y,
234
- checked: d,
235
- ...S
236
- }, R) {
237
- const i = N(), { layout: a } = f.useContext(z);
242
+ icon: u,
243
+ children: s,
244
+ asChild: C,
245
+ checked: f,
246
+ ...x
247
+ }, A) {
248
+ const c = q(), { layout: d } = m.useContext(F);
238
249
  return /* @__PURE__ */ $(
239
- O.Root,
250
+ V.Root,
240
251
  {
241
- ref: R,
252
+ ref: A,
242
253
  nativeButton: !0,
243
- render: tt,
254
+ render: te,
244
255
  value: o,
245
256
  "data-slot": "segmented-control-item",
246
- [e]: "segmented-control-item",
247
- className: w(
248
- i.item,
249
- a === "stretch" && i.itemStretch,
250
- x
257
+ [t]: "segmented-control-item",
258
+ className: E(
259
+ c.item,
260
+ d === "stretch" && c.itemStretch,
261
+ v
251
262
  ),
252
- ...S,
263
+ ...x,
253
264
  children: [
254
- c && /* @__PURE__ */ h(
265
+ u && /* @__PURE__ */ b(
255
266
  "span",
256
267
  {
257
268
  "aria-hidden": "true",
258
269
  "data-slot": "segmented-control-item-icon",
259
- [e]: "segmented-control-item-icon",
260
- className: i.icon,
261
- children: c
270
+ [t]: "segmented-control-item-icon",
271
+ className: c.icon,
272
+ children: u
262
273
  }
263
274
  ),
264
- r && /* @__PURE__ */ h(
275
+ s && /* @__PURE__ */ b(
265
276
  "span",
266
277
  {
267
278
  "data-slot": "segmented-control-item-label",
268
- [e]: "segmented-control-item-label",
269
- className: i.label,
270
- children: r
279
+ [t]: "segmented-control-item-label",
280
+ className: c.label,
281
+ children: s
271
282
  }
272
283
  )
273
284
  ]
@@ -275,7 +286,7 @@ const z = f.createContext({
275
286
  );
276
287
  });
277
288
  export {
278
- dt as SegmentedControl,
279
- lt as SegmentedControlItem
289
+ le as SegmentedControl,
290
+ me as SegmentedControlItem
280
291
  };
281
292
  //# sourceMappingURL=segmented-control.js.map