@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.
- package/README.md +12 -1
- package/codemods/README.md +18 -4
- package/codemods/format.ts +86 -0
- package/codemods/migrate/from-base-elements.ts +8 -2
- package/codemods/migrate/from-volt.ts +8 -2
- package/codemods/radix-to-base-ui.ts +300 -12
- package/dist/_virtual/_zenith-runtime-family_accordion.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_alert-dialog.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_avatar.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_button.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_checkbox.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_csp-provider.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_dialog.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_direction-provider.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_menu.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_merge-props.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_popover.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_radio-group.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_radio.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_scroll-area.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_select.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_separator.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_switch.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_tabs.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_toast.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_toggle-group.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_toggle.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_tooltip.js +1 -1
- package/dist/_virtual/_zenith-runtime-family_use-render.js +1 -1
- package/dist/components/accordion/accordion.js +1 -1
- package/dist/components/accordion/accordion.js.map +1 -1
- package/dist/components/alert-dialog/alert-dialog.js +1 -1
- package/dist/components/alert-dialog/alert-dialog.js.map +1 -1
- package/dist/components/appearance-boundary/appearance-boundary.js +1 -1
- package/dist/components/appearance-boundary/appearance-boundary.js.map +1 -1
- package/dist/components/avatar/avatar-group.js +1 -1
- package/dist/components/avatar/avatar-group.js.map +1 -1
- package/dist/components/avatar/avatar.js +1 -1
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/badge/badge.js +1 -1
- package/dist/components/badge/badge.js.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
- package/dist/components/button/button.js +1 -1
- package/dist/components/button/button.js.map +1 -1
- package/dist/components/button-group/button-group.js +1 -1
- package/dist/components/button-group/button-group.js.map +1 -1
- package/dist/components/callout/callout.js +1 -1
- package/dist/components/callout/callout.js.map +1 -1
- package/dist/components/card/card.js +1 -1
- package/dist/components/card/card.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +1 -1
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/code-block/code-block.js +1 -1
- package/dist/components/code-block/code-block.js.map +1 -1
- package/dist/components/code-editor/code-editor.js +1 -1
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js +1 -1
- package/dist/components/collapsible-sidebar/collapsible-sidebar.js.map +1 -1
- package/dist/components/command/command.js +1 -1
- package/dist/components/command/command.js.map +1 -1
- package/dist/components/data-table/data-table-body.js +1 -1
- package/dist/components/data-table/data-table-body.js.map +1 -1
- package/dist/components/data-table/data-table-column-header.js +1 -1
- package/dist/components/data-table/data-table-column-header.js.map +1 -1
- package/dist/components/data-table/data-table-column-order.js +1 -1
- package/dist/components/data-table/data-table-column-order.js.map +1 -1
- package/dist/components/data-table/data-table-column-visibility.js +1 -1
- package/dist/components/data-table/data-table-column-visibility.js.map +1 -1
- package/dist/components/data-table/data-table-content.js +1 -1
- package/dist/components/data-table/data-table-content.js.map +1 -1
- package/dist/components/data-table/data-table-error.js +1 -1
- package/dist/components/data-table/data-table-error.js.map +1 -1
- package/dist/components/data-table/data-table-footer.js +1 -1
- package/dist/components/data-table/data-table-footer.js.map +1 -1
- package/dist/components/data-table/data-table-header-draggable.js +1 -1
- package/dist/components/data-table/data-table-header-draggable.js.map +1 -1
- package/dist/components/data-table/data-table-header.js +1 -1
- package/dist/components/data-table/data-table-header.js.map +1 -1
- package/dist/components/data-table/data-table-loading.js +1 -1
- package/dist/components/data-table/data-table-loading.js.map +1 -1
- package/dist/components/data-table/data-table-resize-handle.js +1 -1
- package/dist/components/data-table/data-table-resize-handle.js.map +1 -1
- package/dist/components/data-table/data-table-row.js +1 -1
- package/dist/components/data-table/data-table-row.js.map +1 -1
- package/dist/components/data-table/data-table-toolbar.js +1 -1
- package/dist/components/data-table/data-table-toolbar.js.map +1 -1
- package/dist/components/data-table/data-table.js +1 -1
- package/dist/components/data-table/data-table.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +1 -1
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/range-calendar.js +1 -1
- package/dist/components/date-range-picker/range-calendar.js.map +1 -1
- package/dist/components/date-time-picker/calendar.js +1 -1
- package/dist/components/date-time-picker/calendar.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-input.js +1 -1
- package/dist/components/date-time-picker/date-time-picker-input.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker-panel.js +1 -1
- package/dist/components/date-time-picker/date-time-picker-panel.js.map +1 -1
- package/dist/components/date-time-picker/date-time-picker.js +1 -1
- package/dist/components/date-time-picker/date-time-picker.js.map +1 -1
- package/dist/components/date-time-picker/time-picker.js +1 -1
- package/dist/components/date-time-picker/time-picker.js.map +1 -1
- package/dist/components/density-provider/density-provider.js +1 -1
- package/dist/components/dialog/dialog.js +1 -1
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/drawer/drawer.js +1 -1
- package/dist/components/drawer/drawer.js.map +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js +1 -1
- package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/field/field-combobox.js +190 -181
- package/dist/components/field/field-combobox.js.map +1 -1
- package/dist/components/field/field-select.js +37 -22
- package/dist/components/field/field-select.js.map +1 -1
- package/dist/components/field/field.js +1 -1
- package/dist/components/field/field.js.map +1 -1
- package/dist/components/label/label.js +1 -1
- package/dist/components/label/label.js.map +1 -1
- package/dist/components/list/list.js +1 -1
- package/dist/components/list/list.js.map +1 -1
- package/dist/components/option-card/option-card.js +1 -1
- package/dist/components/option-card/option-card.js.map +1 -1
- package/dist/components/pill/pill.js +1 -1
- package/dist/components/pill/pill.js.map +1 -1
- package/dist/components/popover/popover.js +1 -1
- package/dist/components/popover/popover.js.map +1 -1
- package/dist/components/radio/radio.js +1 -1
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/scroll-area/scroll-area.js +1 -1
- package/dist/components/scroll-area/scroll-area.js.map +1 -1
- package/dist/components/scroll-area/scrollbar-styles.js +1 -1
- package/dist/components/scroll-area/scrollbar-styles.js.map +1 -1
- package/dist/components/scroll-overflow/scroll-overflow.js +22 -22
- package/dist/components/scroll-overflow/scroll-overflow.js.map +1 -1
- package/dist/components/segmented-control/segmented-control.js +133 -122
- package/dist/components/segmented-control/segmented-control.js.map +1 -1
- package/dist/components/select/select.js +1 -1
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/separator/separator.js +1 -1
- package/dist/components/separator/separator.js.map +1 -1
- package/dist/components/skeleton/skeleton.js +1 -1
- package/dist/components/skeleton/skeleton.js.map +1 -1
- package/dist/components/slot/compose-as-child.js +1 -1
- package/dist/components/slot/compose-as-child.js.map +1 -1
- package/dist/components/spinner/spinner.js +1 -1
- package/dist/components/spinner/spinner.js.map +1 -1
- package/dist/components/surface/surface.js +1 -1
- package/dist/components/surface/surface.js.map +1 -1
- package/dist/components/switch/switch.js +1 -1
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/table/table-pagination.js +1 -1
- package/dist/components/table/table-pagination.js.map +1 -1
- package/dist/components/table/table.js +1 -1
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/tabs/tabs.js +1 -1
- package/dist/components/tabs/tabs.js.map +1 -1
- package/dist/components/text/text.js +1 -1
- package/dist/components/text/text.js.map +1 -1
- package/dist/components/toast/toast.js +1 -1
- package/dist/components/toast/toast.js.map +1 -1
- package/dist/components/toggle/toggle-group.js +1 -1
- package/dist/components/toggle/toggle-group.js.map +1 -1
- package/dist/components/toggle/toggle.js +29 -26
- package/dist/components/toggle/toggle.js.map +1 -1
- package/dist/components/tooltip/tooltip.js +1 -1
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/clear-button.js +1 -1
- package/dist/lib/clear-button.js.map +1 -1
- package/dist/packages/tokens/dist/delivery/index.js +1 -1
- package/dist/packages/tokens/dist/delivery/index.js.map +1 -1
- package/dist/packages/tokens/dist/install.js +1 -1
- package/dist/packages/tokens/dist/install.js.map +1 -1
- package/dist/renderer/served.js +19 -14
- package/dist/renderer/served.js.map +1 -1
- package/dist/styles/host-reset.js.map +1 -1
- package/dist/styles/make-styles.js +1 -1
- package/dist/styles/make-styles.js.map +1 -1
- package/dist/styles/text-box.js.map +1 -1
- package/dist/tokens.json +1 -1
- package/package.json +5 -3
- package/scripts/migration-diagnostics-core.mjs +284 -0
- package/scripts/migration-sweep.mjs +10 -10
- 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
|
|
2
|
-
import * as
|
|
3
|
-
import { useRef as G, useState as
|
|
4
|
-
import { Radio as
|
|
5
|
-
import { SLOT_ATTR as
|
|
6
|
-
import { makeZenithStyles as
|
|
7
|
-
import { boxModel as
|
|
8
|
-
import { accentDefault as T, accentA8 as
|
|
9
|
-
import { RadioGroupBase as
|
|
10
|
-
const
|
|
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
|
-
}),
|
|
12
|
+
}), q = P({
|
|
13
13
|
group: {
|
|
14
|
-
...
|
|
14
|
+
...l,
|
|
15
15
|
position: "relative",
|
|
16
16
|
display: "inline-flex",
|
|
17
17
|
alignItems: "center",
|
|
18
|
-
...n.gap(
|
|
18
|
+
...n.gap(g),
|
|
19
19
|
...n.borderRadius("9999px"),
|
|
20
|
-
backgroundColor:
|
|
21
|
-
...n.padding(
|
|
20
|
+
backgroundColor: W,
|
|
21
|
+
...n.padding(g),
|
|
22
22
|
...n.border("0"),
|
|
23
23
|
boxShadow: "none"
|
|
24
24
|
},
|
|
25
25
|
groupStretch: {
|
|
26
|
-
...
|
|
26
|
+
...l,
|
|
27
27
|
display: "flex",
|
|
28
28
|
width: "100%"
|
|
29
29
|
},
|
|
30
30
|
groupVertical: {
|
|
31
|
-
...
|
|
31
|
+
...l,
|
|
32
32
|
flexDirection: "column",
|
|
33
33
|
display: "inline-flex",
|
|
34
34
|
width: "fit-content"
|
|
35
35
|
},
|
|
36
36
|
indicator: {
|
|
37
|
-
...
|
|
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:
|
|
44
|
+
backgroundColor: U,
|
|
45
45
|
// Tailwind `shadow-sm`
|
|
46
46
|
boxShadow: "0 1px 2px 0 #0000000d"
|
|
47
47
|
},
|
|
48
48
|
indicatorAnimated: {
|
|
49
|
-
...
|
|
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
|
-
...
|
|
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(
|
|
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:
|
|
69
|
-
paddingRight:
|
|
70
|
-
paddingTop:
|
|
71
|
-
paddingBottom:
|
|
72
|
-
fontSize:
|
|
73
|
-
lineHeight:
|
|
74
|
-
fontWeight:
|
|
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:
|
|
89
|
+
backgroundColor: W
|
|
90
90
|
},
|
|
91
91
|
":focus-visible": {
|
|
92
92
|
outlineWidth: "2px",
|
|
93
93
|
outlineStyle: "solid",
|
|
94
|
-
outlineColor:
|
|
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
|
-
[`& [${
|
|
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
|
-
[`[${
|
|
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
|
-
...
|
|
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
|
-
}),
|
|
142
|
-
className:
|
|
141
|
+
}), le = m.forwardRef(function({
|
|
142
|
+
className: v,
|
|
143
143
|
layout: o = "hug",
|
|
144
|
-
orientation:
|
|
145
|
-
value:
|
|
146
|
-
defaultValue:
|
|
147
|
-
onValueChange:
|
|
148
|
-
children:
|
|
149
|
-
asChild:
|
|
150
|
-
...
|
|
151
|
-
},
|
|
152
|
-
const
|
|
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
|
-
}),
|
|
155
|
-
if (!
|
|
156
|
-
const
|
|
157
|
-
`[${
|
|
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
|
-
|
|
159
|
+
e && (O({
|
|
160
160
|
opacity: 1,
|
|
161
|
-
width:
|
|
162
|
-
height:
|
|
163
|
-
transform: `translate(${
|
|
164
|
-
}),
|
|
165
|
-
}, [])
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
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 (!
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
}, [o])
|
|
177
|
-
|
|
178
|
-
|
|
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
|
|
182
|
-
return () => cancelAnimationFrame(
|
|
183
|
-
}, [j,
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
[
|
|
189
|
-
), H = (
|
|
190
|
-
|
|
191
|
-
}, X =
|
|
192
|
-
return /* @__PURE__ */
|
|
193
|
-
|
|
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
|
-
[
|
|
208
|
+
[t]: "segmented-control",
|
|
198
209
|
"data-layout": o,
|
|
199
|
-
value:
|
|
200
|
-
defaultValue:
|
|
210
|
+
value: y ? s : void 0,
|
|
211
|
+
defaultValue: C,
|
|
201
212
|
onValueChange: D,
|
|
202
|
-
orientation:
|
|
203
|
-
className:
|
|
204
|
-
|
|
205
|
-
o === "stretch" &&
|
|
206
|
-
|
|
207
|
-
|
|
213
|
+
orientation: u,
|
|
214
|
+
className: E(
|
|
215
|
+
p.group,
|
|
216
|
+
o === "stretch" && p.groupStretch,
|
|
217
|
+
u === "vertical" && p.groupVertical,
|
|
218
|
+
v
|
|
208
219
|
),
|
|
209
|
-
...
|
|
220
|
+
...c,
|
|
210
221
|
children: [
|
|
211
|
-
/* @__PURE__ */
|
|
222
|
+
/* @__PURE__ */ b(
|
|
212
223
|
"span",
|
|
213
224
|
{
|
|
214
225
|
"aria-hidden": "true",
|
|
215
226
|
"data-slot": "segmented-control-indicator",
|
|
216
|
-
[
|
|
217
|
-
className:
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
235
|
+
x
|
|
225
236
|
]
|
|
226
237
|
}
|
|
227
238
|
) });
|
|
228
|
-
}),
|
|
229
|
-
className:
|
|
239
|
+
}), te = /* @__PURE__ */ b("button", { type: "button" }), me = m.forwardRef(function({
|
|
240
|
+
className: v,
|
|
230
241
|
value: o,
|
|
231
|
-
icon:
|
|
232
|
-
children:
|
|
233
|
-
asChild:
|
|
234
|
-
checked:
|
|
235
|
-
...
|
|
236
|
-
},
|
|
237
|
-
const
|
|
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
|
-
|
|
250
|
+
V.Root,
|
|
240
251
|
{
|
|
241
|
-
ref:
|
|
252
|
+
ref: A,
|
|
242
253
|
nativeButton: !0,
|
|
243
|
-
render:
|
|
254
|
+
render: te,
|
|
244
255
|
value: o,
|
|
245
256
|
"data-slot": "segmented-control-item",
|
|
246
|
-
[
|
|
247
|
-
className:
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
257
|
+
[t]: "segmented-control-item",
|
|
258
|
+
className: E(
|
|
259
|
+
c.item,
|
|
260
|
+
d === "stretch" && c.itemStretch,
|
|
261
|
+
v
|
|
251
262
|
),
|
|
252
|
-
...
|
|
263
|
+
...x,
|
|
253
264
|
children: [
|
|
254
|
-
|
|
265
|
+
u && /* @__PURE__ */ b(
|
|
255
266
|
"span",
|
|
256
267
|
{
|
|
257
268
|
"aria-hidden": "true",
|
|
258
269
|
"data-slot": "segmented-control-item-icon",
|
|
259
|
-
[
|
|
260
|
-
className:
|
|
261
|
-
children:
|
|
270
|
+
[t]: "segmented-control-item-icon",
|
|
271
|
+
className: c.icon,
|
|
272
|
+
children: u
|
|
262
273
|
}
|
|
263
274
|
),
|
|
264
|
-
|
|
275
|
+
s && /* @__PURE__ */ b(
|
|
265
276
|
"span",
|
|
266
277
|
{
|
|
267
278
|
"data-slot": "segmented-control-item-label",
|
|
268
|
-
[
|
|
269
|
-
className:
|
|
270
|
-
children:
|
|
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
|
-
|
|
279
|
-
|
|
289
|
+
le as SegmentedControl,
|
|
290
|
+
me as SegmentedControlItem
|
|
280
291
|
};
|
|
281
292
|
//# sourceMappingURL=segmented-control.js.map
|