@spark-ui/components 18.1.1 → 18.1.3

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 (193) hide show
  1. package/dist/{DialogContent.styles-ClKRO43s.mjs → DialogContent.styles-BVyH8M3z.mjs} +5 -5
  2. package/dist/{DialogContent.styles-ClKRO43s.mjs.map → DialogContent.styles-BVyH8M3z.mjs.map} +1 -1
  3. package/dist/{DialogContent.styles-FnwXayCC.js → DialogContent.styles-Bh6DymkD.js} +2 -2
  4. package/dist/{DialogContent.styles-FnwXayCC.js.map → DialogContent.styles-Bh6DymkD.js.map} +1 -1
  5. package/dist/{FormFieldRequiredIndicator-DY3STDp1.js → FormFieldRequiredIndicator-BxZgeZ9H.js} +2 -2
  6. package/dist/{FormFieldRequiredIndicator-DY3STDp1.js.map → FormFieldRequiredIndicator-BxZgeZ9H.js.map} +1 -1
  7. package/dist/{FormFieldRequiredIndicator-COKYxTNs.mjs → FormFieldRequiredIndicator-CfE6AOta.mjs} +2 -2
  8. package/dist/{FormFieldRequiredIndicator-COKYxTNs.mjs.map → FormFieldRequiredIndicator-CfE6AOta.mjs.map} +1 -1
  9. package/dist/accordion/index.js +1 -1
  10. package/dist/accordion/index.js.map +1 -1
  11. package/dist/accordion/index.mjs +45 -50
  12. package/dist/accordion/index.mjs.map +1 -1
  13. package/dist/alert-dialog/AlertDialogAction.d.ts +1 -1
  14. package/dist/alert-dialog/AlertDialogCancel.d.ts +1 -1
  15. package/dist/alert-dialog/AlertDialogTrigger.d.ts +1 -1
  16. package/dist/alert-dialog/index.js +1 -1
  17. package/dist/alert-dialog/index.js.map +1 -1
  18. package/dist/alert-dialog/index.mjs +53 -56
  19. package/dist/alert-dialog/index.mjs.map +1 -1
  20. package/dist/avatar/index.js +1 -1
  21. package/dist/avatar/index.mjs +2 -2
  22. package/dist/badge/BadgeItem.styles.d.ts +1 -1
  23. package/dist/badge/index.js +1 -1
  24. package/dist/badge/index.mjs +13 -13
  25. package/dist/breadcrumb/index.js +1 -1
  26. package/dist/breadcrumb/index.mjs +1 -1
  27. package/dist/button/Button.styles.d.ts +1 -1
  28. package/dist/button/index.js +1 -1
  29. package/dist/button/index.mjs +1 -1
  30. package/dist/{button-D0s-21qo.js → button-3vvMrf1L.js} +2 -2
  31. package/dist/{button-D0s-21qo.js.map → button-3vvMrf1L.js.map} +1 -1
  32. package/dist/{button-DwLTXeJX.mjs → button-DBNjh3Bi.mjs} +76 -76
  33. package/dist/{button-DwLTXeJX.mjs.map → button-DBNjh3Bi.mjs.map} +1 -1
  34. package/dist/card/Backdrop.d.ts +1 -1
  35. package/dist/card/Card.styles.d.ts +1 -1
  36. package/dist/card/Content.styles.d.ts +1 -1
  37. package/dist/card/Type.d.ts +1 -1
  38. package/dist/card/index.js +1 -1
  39. package/dist/card/index.mjs +53 -53
  40. package/dist/carousel/index.js +1 -1
  41. package/dist/carousel/index.mjs +2 -2
  42. package/dist/checkbox/CheckboxInput.styles.d.ts +1 -1
  43. package/dist/checkbox/index.js +1 -1
  44. package/dist/checkbox/index.mjs +1 -1
  45. package/dist/{checkbox-uSINHQYe.mjs → checkbox-BEo9AVSB.mjs} +26 -26
  46. package/dist/{checkbox-uSINHQYe.mjs.map → checkbox-BEo9AVSB.mjs.map} +1 -1
  47. package/dist/{checkbox-Cbewcw6G.js → checkbox-Cr60_jql.js} +2 -2
  48. package/dist/{checkbox-Cbewcw6G.js.map → checkbox-Cr60_jql.js.map} +1 -1
  49. package/dist/chip/Chip.styles.d.ts +1 -1
  50. package/dist/chip/index.js +1 -1
  51. package/dist/chip/index.mjs +86 -86
  52. package/dist/collapsible/index.js +1 -1
  53. package/dist/collapsible/index.js.map +1 -1
  54. package/dist/collapsible/index.mjs +18 -24
  55. package/dist/collapsible/index.mjs.map +1 -1
  56. package/dist/combobox/index.js +1 -1
  57. package/dist/combobox/index.mjs +4 -4
  58. package/dist/dialog/DialogClose.d.ts +1 -1
  59. package/dist/dialog/DialogTrigger.d.ts +1 -1
  60. package/dist/dialog/index.js +1 -1
  61. package/dist/dialog/index.js.map +1 -1
  62. package/dist/dialog/index.mjs +14 -12
  63. package/dist/dialog/index.mjs.map +1 -1
  64. package/dist/divider/index.js +1 -1
  65. package/dist/divider/index.mjs +26 -26
  66. package/dist/drawer/DrawerClose.d.ts +1 -1
  67. package/dist/drawer/DrawerTrigger.d.ts +1 -1
  68. package/dist/drawer/index.js +1 -1
  69. package/dist/drawer/index.js.map +1 -1
  70. package/dist/drawer/index.mjs +13 -11
  71. package/dist/drawer/index.mjs.map +1 -1
  72. package/dist/dropdown/index.js +1 -1
  73. package/dist/dropdown/index.mjs +2 -2
  74. package/dist/file-upload/index.js +1 -1
  75. package/dist/file-upload/index.mjs +3 -3
  76. package/dist/form-field/index.js +1 -1
  77. package/dist/form-field/index.mjs +1 -1
  78. package/dist/{form-field-B38U0zp8.js → form-field-DMHwopHt.js} +2 -2
  79. package/dist/{form-field-B38U0zp8.js.map → form-field-DMHwopHt.js.map} +1 -1
  80. package/dist/{form-field-DCKyhBmv.mjs → form-field-Doq4zLEX.mjs} +4 -4
  81. package/dist/{form-field-DCKyhBmv.mjs.map → form-field-Doq4zLEX.mjs.map} +1 -1
  82. package/dist/icon/Icon.styles.d.ts +1 -1
  83. package/dist/icon/index.js +1 -1
  84. package/dist/icon/index.mjs +1 -1
  85. package/dist/icon-CfEsla9z.js +2 -0
  86. package/dist/{icon-DY4l9nsc.js.map → icon-CfEsla9z.js.map} +1 -1
  87. package/dist/{icon-Bs-39J-H.mjs → icon-VM_Ys9Xn.mjs} +11 -11
  88. package/dist/{icon-Bs-39J-H.mjs.map → icon-VM_Ys9Xn.mjs.map} +1 -1
  89. package/dist/icon-button/index.js +1 -1
  90. package/dist/icon-button/index.mjs +1 -1
  91. package/dist/icon-button-B2TM0Xby.js +2 -0
  92. package/dist/{icon-button-DRFf308H.js.map → icon-button-B2TM0Xby.js.map} +1 -1
  93. package/dist/icon-button-CexCkoV0.mjs +29 -0
  94. package/dist/{icon-button-C1ThqdK1.mjs.map → icon-button-CexCkoV0.mjs.map} +1 -1
  95. package/dist/input/index.js +1 -1
  96. package/dist/input/index.mjs +1 -1
  97. package/dist/{input-BoxJZira.js → input-CADvgFpY.js} +2 -2
  98. package/dist/{input-BoxJZira.js.map → input-CADvgFpY.js.map} +1 -1
  99. package/dist/{input-Du9YSgAt.mjs → input-CmlNZ4Bo.mjs} +2 -2
  100. package/dist/{input-Du9YSgAt.mjs.map → input-CmlNZ4Bo.mjs.map} +1 -1
  101. package/dist/label/index.js +1 -1
  102. package/dist/label/index.mjs +1 -1
  103. package/dist/{label-DO48yda7.js → label-B085X0Sg.js} +2 -2
  104. package/dist/{label-DO48yda7.js.map → label-B085X0Sg.js.map} +1 -1
  105. package/dist/{label-RKaPen31.mjs → label-BqWu-wLT.mjs} +6 -6
  106. package/dist/{label-RKaPen31.mjs.map → label-BqWu-wLT.mjs.map} +1 -1
  107. package/dist/menu/MenuItemStyles.d.ts +1 -1
  108. package/dist/menu/index.js +1 -1
  109. package/dist/menu/index.js.map +1 -1
  110. package/dist/menu/index.mjs +131 -140
  111. package/dist/menu/index.mjs.map +1 -1
  112. package/dist/meter/MeterTrack.styles.d.ts +1 -1
  113. package/dist/pagination/index.js +1 -1
  114. package/dist/pagination/index.mjs +3 -3
  115. package/dist/popover/PopoverContent.styles.d.ts +1 -1
  116. package/dist/popover/index.js +1 -1
  117. package/dist/popover/index.mjs +1 -1
  118. package/dist/{popover-DVz0JvON.js → popover-B-mcHcLF.js} +2 -2
  119. package/dist/{popover-DVz0JvON.js.map → popover-B-mcHcLF.js.map} +1 -1
  120. package/dist/{popover-CGhSHQzb.mjs → popover-COqbFikI.mjs} +17 -17
  121. package/dist/{popover-CGhSHQzb.mjs.map → popover-COqbFikI.mjs.map} +1 -1
  122. package/dist/progress/ProgressIndicator.d.ts +1 -1
  123. package/dist/progress-tracker/index.js +1 -1
  124. package/dist/progress-tracker/index.mjs +1 -1
  125. package/dist/radio-group/RadioIndicator.styles.d.ts +1 -1
  126. package/dist/radio-group/RadioInput.styles.d.ts +1 -1
  127. package/dist/radio-group/index.js +1 -1
  128. package/dist/radio-group/index.mjs +37 -37
  129. package/dist/rating/index.js +1 -1
  130. package/dist/rating/index.mjs +2 -2
  131. package/dist/rating-display/index.js +1 -1
  132. package/dist/rating-display/index.mjs +1 -1
  133. package/dist/scrolling-list/index.js +1 -1
  134. package/dist/scrolling-list/index.mjs +3 -3
  135. package/dist/select/index.js +1 -1
  136. package/dist/select/index.mjs +1 -1
  137. package/dist/slider/SliderThumb.styles.d.ts +1 -1
  138. package/dist/slider/SliderTrack.styles.d.ts +1 -1
  139. package/dist/slider/index.js +1 -1
  140. package/dist/slider/index.mjs +2 -2
  141. package/dist/slot/index.js +1 -1
  142. package/dist/slot/index.mjs +3 -3
  143. package/dist/spinner/Spinner.styles.d.ts +1 -1
  144. package/dist/spinner/index.js +1 -1
  145. package/dist/spinner/index.mjs +1 -1
  146. package/dist/{spinner-CmPypfJR.js → spinner-BAreohbs.js} +2 -2
  147. package/dist/{spinner-CmPypfJR.js.map → spinner-BAreohbs.js.map} +1 -1
  148. package/dist/{spinner-TfGcjNm3.mjs → spinner-DnrZf01S.mjs} +9 -9
  149. package/dist/{spinner-TfGcjNm3.mjs.map → spinner-DnrZf01S.mjs.map} +1 -1
  150. package/dist/stepper/index.js +1 -1
  151. package/dist/stepper/index.mjs +3 -3
  152. package/dist/switch/SwitchInput.d.ts +1 -1
  153. package/dist/switch/index.js +1 -1
  154. package/dist/switch/index.js.map +1 -1
  155. package/dist/switch/index.mjs +43 -44
  156. package/dist/switch/index.mjs.map +1 -1
  157. package/dist/table/index.js +1 -1
  158. package/dist/table/index.mjs +3 -3
  159. package/dist/tabs/index.js +1 -1
  160. package/dist/tabs/index.js.map +1 -1
  161. package/dist/tabs/index.mjs +144 -153
  162. package/dist/tabs/index.mjs.map +1 -1
  163. package/dist/tag/Tag.styles.d.ts +1 -1
  164. package/dist/tag/index.js +1 -1
  165. package/dist/tag/index.mjs +37 -37
  166. package/dist/text-link/TextLink.d.ts +1 -1
  167. package/dist/textarea/index.js +1 -1
  168. package/dist/textarea/index.mjs +1 -1
  169. package/dist/toast/Toast.styles.d.ts +1 -1
  170. package/dist/toast/index.js +1 -1
  171. package/dist/toast/index.js.map +1 -1
  172. package/dist/toast/index.mjs +4 -4
  173. package/dist/toast/index.mjs.map +1 -1
  174. package/dist/toggle-group/index.js +1 -1
  175. package/dist/toggle-group/index.js.map +1 -1
  176. package/dist/toggle-group/index.mjs +16 -21
  177. package/dist/toggle-group/index.mjs.map +1 -1
  178. package/package.json +5 -5
  179. package/dist/accordion/useRenderSlot.d.ts +0 -3
  180. package/dist/alert-dialog/useRenderSlot.d.ts +0 -3
  181. package/dist/collapsible/useRenderSlot.d.ts +0 -3
  182. package/dist/drawer/useRenderSlot.d.ts +0 -3
  183. package/dist/icon-DY4l9nsc.js +0 -2
  184. package/dist/icon-button-C1ThqdK1.mjs +0 -29
  185. package/dist/icon-button-DRFf308H.js +0 -2
  186. package/dist/menu/useRenderSlot.d.ts +0 -1
  187. package/dist/tabs/useRenderSlot.d.ts +0 -1
  188. package/dist/toast/useRenderSlot.d.ts +0 -3
  189. package/dist/toggle-group/useRenderSlot.d.ts +0 -1
  190. package/dist/useRenderSlot-5CPC9Lkj.mjs +0 -11
  191. package/dist/useRenderSlot-5CPC9Lkj.mjs.map +0 -1
  192. package/dist/useRenderSlot-DHV0CegV.js +0 -2
  193. package/dist/useRenderSlot-DHV0CegV.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/tabs/TabsContext.tsx","../../src/tabs/TabsRoot.styles.ts","../../src/tabs/useRenderSlot.tsx","../../src/tabs/Tabs.tsx","../../src/tabs/TabsContent.styles.ts","../../src/tabs/TabsContent.tsx","../../src/tabs/TabsList.styles.ts","../../src/tabs/useResizeObserver.ts","../../src/tabs/TabsList.tsx","../../src/tabs/TabsPopoverAbstraction.tsx","../../src/tabs/TabsTrigger.styles.ts","../../src/tabs/TabsTrigger.tsx","../../src/tabs/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { TabsTriggerVariantsProps } from './TabsTrigger.styles'\n\nexport type TabsContextInterface = TabsTriggerVariantsProps & {\n orientation?: 'horizontal' | 'vertical'\n forceMount?: boolean\n}\n\nexport const TabsContext = createContext<TabsContextInterface>({} as TabsContextInterface)\n\nexport const useTabsContext = () => {\n const context = useContext(TabsContext)\n\n if (!context) {\n throw Error('useTabsContext must be used within a TabsContext Provider')\n }\n\n return context\n}\n","import { cva } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'flex',\n 'data-[orientation=horizontal]:flex-col',\n 'data-[orientation=vertical]:flex-row',\n 'max-w-full',\n])\n","import { Slot } from '../slot'\n\nexport function useRenderSlot(asChild: boolean) {\n return asChild ? ({ ...props }: object) => <Slot {...props} /> : undefined\n}\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { type ComponentProps, type PropsWithChildren, Ref } from 'react'\n\nimport { TabsContext } from './TabsContext'\nimport { rootStyles } from './TabsRoot.styles'\nimport type { TabsTriggerVariantsProps } from './TabsTrigger.styles'\nimport { useRenderSlot } from './useRenderSlot'\n\nexport interface TabsProps\n extends\n Omit<ComponentProps<typeof BaseTabs.Root>, 'render'>,\n PropsWithChildren<Omit<TabsTriggerVariantsProps, 'orientation'>> {\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * Whether to keep inactive tabs content in the DOM.\n * @default false\n */\n forceMount?: boolean\n ref?: Ref<HTMLDivElement>\n}\n\n/**\n * @deprecated\n */\nexport type TabsRootProps = TabsProps\n\nexport const Tabs = ({\n intent = 'support',\n size = 'md',\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n forceMount = false,\n orientation = 'horizontal',\n children,\n className,\n ref,\n ...rest\n}: TabsProps) => {\n const renderSlot = useRenderSlot(asChild)\n\n return (\n <TabsContext\n value={{\n intent,\n size,\n orientation,\n forceMount,\n }}\n >\n <BaseTabs.Root\n ref={ref}\n orientation={orientation}\n className={rootStyles({ className })}\n data-spark-component=\"tabs\"\n render={renderSlot}\n {...rest}\n >\n {children}\n </BaseTabs.Root>\n </TabsContext>\n )\n}\n\nTabs.displayName = 'Tabs'\n","import { cva } from 'class-variance-authority'\n\nexport const contentStyles = cva(['w-full p-lg', 'focus-visible:u-outline-inset'], {\n variants: {\n forceMount: {\n true: 'data-[hidden]:hidden',\n false: '',\n },\n },\n})\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { type ComponentProps, type PropsWithChildren, Ref } from 'react'\n\nimport { contentStyles } from './TabsContent.styles'\nimport { useTabsContext } from './TabsContext'\nimport { useRenderSlot } from './useRenderSlot'\n\nexport interface TabsContentProps extends PropsWithChildren<\n Omit<ComponentProps<typeof BaseTabs.Panel>, 'keepMounted' | 'render'>\n> {\n /**\n * A unique value that associates the content with a trigger.\n */\n value: string\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.\n */\n forceMount?: true\n ref?: Ref<HTMLDivElement>\n}\n\n/** The panel that displays content associated with a tab. Renders a <div> element. */\nexport const TabsContent = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n children,\n asChild = false,\n className,\n ref,\n forceMount,\n ...rest\n}: TabsContentProps) => {\n const { forceMount: contextForceMount } = useTabsContext()\n const renderSlot = useRenderSlot(asChild)\n const keepMounted = contextForceMount || forceMount\n\n return (\n <BaseTabs.Panel\n data-spark-component=\"tabs-content\"\n ref={ref}\n keepMounted={keepMounted}\n className={contentStyles({ className, forceMount: keepMounted })}\n render={renderSlot}\n {...rest}\n >\n {children}\n </BaseTabs.Panel>\n )\n}\n\nTabsContent.displayName = 'Tabs.Content'\n","import { cva } from 'class-variance-authority'\n\nexport const wrapperStyles = cva(['relative flex'])\n\nexport const listStyles = cva([\n 'flex w-full',\n 'data-[orientation=horizontal]:flex-row',\n 'data-[orientation=vertical]:flex-col',\n 'overflow-y-hidden u-no-scrollbar data-[orientation=vertical]:overflow-x-hidden',\n 'after:flex after:shrink after:grow after:border-outline',\n 'data-[orientation=horizontal]:after:border-b-sm',\n 'data-[orientation=vertical]:after:border-r-sm',\n])\n\nexport const navigationArrowStyles = cva([\n 'h-auto! flex-none',\n 'border-b-sm border-outline',\n 'outline-hidden',\n 'focus-visible:border-none focus-visible:bg-surface-hovered focus-visible:u-outline-inset!',\n])\n","import { type RefObject, useEffect, useRef, useState } from 'react'\n\ninterface Size {\n width?: number\n height?: number\n}\n\ntype ResizeCallback = (entry?: ResizeObserverEntry) => void\n\nexport const useResizeObserver = <T extends HTMLElement>(\n target: RefObject<T | null> | T | null,\n onResize?: ResizeCallback\n): Size => {\n const [size, setSize] = useState<Size>({ width: undefined, height: undefined })\n const resizeObserverRef = useRef<ResizeObserver>(null)\n const resizeCallbackRef = useRef<ResizeCallback | undefined>(onResize)\n\n useEffect(() => {\n resizeCallbackRef.current = onResize\n }, [onResize])\n\n useEffect(() => {\n const targetElm = target && 'current' in target ? target.current : target\n if (!targetElm || resizeObserverRef.current) {\n return\n }\n\n resizeObserverRef.current = new ResizeObserver(([entry]) => {\n const { inlineSize: width, blockSize: height } = entry?.borderBoxSize?.[0] ?? {}\n resizeCallbackRef.current?.(entry)\n\n setSize({ width, height })\n })\n\n resizeObserverRef.current.observe(targetElm as unknown as HTMLElement)\n\n return () => {\n resizeObserverRef.current &&\n resizeObserverRef.current.unobserve(targetElm as unknown as HTMLElement)\n }\n }, [target, resizeObserverRef, resizeCallbackRef])\n\n return size\n}\n","/* eslint-disable max-lines-per-function */\nimport { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { ArrowVerticalLeft } from '@spark-ui/icons/ArrowVerticalLeft'\nimport { ArrowVerticalRight } from '@spark-ui/icons/ArrowVerticalRight'\nimport { type ComponentProps, type ReactElement, Ref, useEffect, useRef, useState } from 'react'\n\nimport { Button } from '../button'\nimport { Icon } from '../icon'\nimport { useTabsContext } from './TabsContext'\nimport { listStyles, navigationArrowStyles, wrapperStyles } from './TabsList.styles'\nimport { useRenderSlot } from './useRenderSlot'\nimport { useResizeObserver } from './useResizeObserver'\n\nexport interface TabsListProps extends Omit<\n ComponentProps<typeof BaseTabs.List>,\n 'render' | 'loopFocus'\n> {\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * When true, keyboard navigation will loop from last tab to first, and vice versa.\n * @default false\n */\n loop?: boolean\n children: ReactElement[] | ReactElement\n ref?: Ref<HTMLDivElement>\n}\n\ntype ArrowState = 'visible' | 'hidden' | 'disabled'\n\n/** The container for the tab triggers. Renders a <div> element. */\nexport const TabsList = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n loop = false,\n children,\n className,\n ref,\n ...rest\n}: TabsListProps) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const innerRef = useRef(null)\n const listRef = ref || innerRef\n const { orientation } = useTabsContext()\n const renderSlot = useRenderSlot(asChild)\n\n const { width } = useResizeObserver(wrapperRef)\n\n const [arrows, setArrows] = useState<Record<'prev' | 'next', ArrowState>>({\n prev: 'hidden',\n next: 'hidden',\n })\n\n useEffect(() => {\n /**\n * Show/hide arrows\n */\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n if (orientation !== 'horizontal') {\n setArrows({ prev: 'hidden', next: 'hidden' })\n } else {\n setArrows({\n prev: listRef.current.scrollWidth > listRef.current.clientWidth ? 'visible' : 'hidden',\n next: listRef.current.scrollWidth > listRef.current.clientWidth ? 'visible' : 'hidden',\n })\n }\n }, [orientation, listRef, width])\n\n useEffect(() => {\n /**\n * Enable/disable arrows\n */\n if (typeof listRef === 'function' || !listRef.current || arrows.prev === 'hidden' || loop) {\n return\n }\n\n const toggleArrowsVisibility = (target: HTMLDivElement) => {\n setArrows({\n prev: target.scrollLeft > 0 ? 'visible' : 'disabled',\n next: target.scrollLeft + target.clientWidth < target.scrollWidth ? 'visible' : 'disabled',\n })\n }\n\n const currentList = listRef.current\n\n toggleArrowsVisibility(currentList)\n\n currentList.addEventListener('scroll', ({ target }) =>\n toggleArrowsVisibility(target as HTMLDivElement)\n )\n\n return () =>\n currentList.removeEventListener('scroll', ({ target }) =>\n toggleArrowsVisibility(target as HTMLDivElement)\n )\n }, [listRef, arrows.prev, loop])\n\n const handlePrevClick = () => {\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n const shouldLoopForward = loop && listRef.current.scrollLeft <= 0\n\n listRef.current.scrollTo({\n left: shouldLoopForward\n ? listRef.current.scrollLeft + listRef.current.scrollWidth - listRef.current.clientWidth\n : listRef.current.scrollLeft - listRef.current.clientWidth,\n behavior: 'smooth',\n })\n }\n\n const handleNextClick = () => {\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n const shouldLoopBackward =\n loop &&\n listRef.current.scrollLeft + listRef.current.clientWidth >= listRef.current.scrollWidth\n\n listRef.current.scrollTo({\n left: shouldLoopBackward ? 0 : listRef.current.scrollLeft + listRef.current.clientWidth,\n behavior: 'smooth',\n })\n }\n\n return (\n <div className={wrapperStyles({ className })} ref={wrapperRef}>\n {arrows.prev !== 'hidden' && (\n <Button\n shape=\"square\"\n intent=\"surface\"\n size=\"sm\"\n className={navigationArrowStyles()}\n onClick={handlePrevClick}\n disabled={arrows.prev === 'disabled'}\n aria-label=\"Scroll left\"\n >\n <Icon>\n <ArrowVerticalLeft />\n </Icon>\n </Button>\n )}\n\n <BaseTabs.List\n data-spark-component=\"tabs-list\"\n ref={listRef}\n className={listStyles()}\n render={renderSlot}\n loopFocus={loop}\n activateOnFocus\n {...rest}\n >\n {children}\n </BaseTabs.List>\n\n {arrows.next !== 'hidden' && (\n <Button\n shape=\"square\"\n intent=\"surface\"\n size=\"sm\"\n className={navigationArrowStyles()}\n onClick={handleNextClick}\n disabled={arrows.next === 'disabled'}\n aria-label=\"Scroll right\"\n >\n <Icon>\n <ArrowVerticalRight />\n </Icon>\n </Button>\n )}\n </div>\n )\n}\n\nTabsList.displayName = 'Tabs.List'\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { MoreMenuHorizontal } from '@spark-ui/icons/MoreMenuHorizontal'\nimport { cx } from 'class-variance-authority'\nimport {\n type ComponentType,\n createContext,\n forwardRef,\n type ReactNode,\n type RefObject,\n useContext,\n useMemo,\n} from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton } from '../icon-button'\nimport { Popover as SparkPopover } from '../popover'\nimport type { PopoverProps } from '../popover/Popover'\nimport type { ContentProps as PopoverContentProps } from '../popover/PopoverContent'\nimport type { TriggerProps as PopoverTriggerProps } from '../popover/PopoverTrigger'\n\ninterface TabsPopoverContextValue {\n popoverSide: 'right' | 'bottom'\n popoverTriggerRef: RefObject<HTMLButtonElement | null>\n}\n\nconst TabsPopoverContext = createContext<TabsPopoverContextValue | undefined>(undefined)\n\nconst useTabsPopoverContext = () => {\n const context = useContext(TabsPopoverContext)\n if (!context) {\n throw new Error('TabsPopover components must be used within TabsPopover')\n }\n\n return context\n}\n\n// Trigger component that uses context\ninterface TabsPopoverTriggerProps extends Omit<PopoverTriggerProps, 'asChild' | 'children'> {\n 'aria-label': string\n children?: ReactNode\n}\n\nconst TabsPopoverTrigger = forwardRef<HTMLButtonElement, TabsPopoverTriggerProps>(\n ({ 'aria-label': ariaLabel, children: iconChildren, ...triggerProps }, forwardedRef) => {\n const { popoverTriggerRef } = useTabsPopoverContext()\n const mergedRef = useMergeRefs(forwardedRef, popoverTriggerRef)\n\n return (\n <SparkPopover.Trigger asChild {...triggerProps}>\n <IconButton\n ref={mergedRef}\n size=\"sm\"\n intent=\"surfaceInverse\"\n design=\"ghost\"\n aria-label={ariaLabel}\n tabIndex={-1}\n >\n <Icon>{iconChildren || <MoreMenuHorizontal />}</Icon>\n </IconButton>\n </SparkPopover.Trigger>\n )\n }\n)\n\nTabsPopoverTrigger.displayName = 'Popover.Trigger'\n\n// Content component that uses context\nconst TabsPopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ side, align = 'start', className, ...contentProps }, ref) => {\n const { popoverSide } = useTabsPopoverContext()\n const mergedClassName = cx('gap-sm flex flex-col', className)\n\n return (\n <SparkPopover.Content\n ref={ref}\n {...contentProps}\n side={side ?? popoverSide}\n align={align}\n className={mergedClassName}\n />\n )\n }\n)\n\nTabsPopoverContent.displayName = 'Popover.Content'\n\n// Export types\nexport type TabsPopoverTriggerComponent = typeof TabsPopoverTrigger\nexport type TabsPopoverContentComponent = typeof TabsPopoverContent\n\n// Create a type that extends SparkPopover but overrides Content and Trigger\n// Use ComponentType for JSX compatibility and Omit to exclude only Content and Trigger,\n// then add them back with the overridden types\nexport type ConfiguredPopoverComponent = ComponentType<PopoverProps> &\n Omit<typeof SparkPopover, 'Content' | 'Trigger'> & {\n Content: TabsPopoverContentComponent\n Trigger: TabsPopoverTriggerComponent\n }\n\ninterface PopoverAbstractionProps {\n popoverSide: 'right' | 'bottom'\n popoverTriggerRef: RefObject<HTMLButtonElement | null>\n children: (Popover: ConfiguredPopoverComponent) => ReactNode\n}\n\nexport const Popover = ({ popoverSide, popoverTriggerRef, children }: PopoverAbstractionProps) => {\n const contextValue = useMemo(\n () => ({ popoverSide, popoverTriggerRef }),\n [popoverSide, popoverTriggerRef]\n )\n\n const PopoverWrapper: typeof SparkPopover = ((props: PopoverProps) => (\n <TabsPopoverContext value={contextValue}>\n <SparkPopover {...props}>{props.children}</SparkPopover>\n </TabsPopoverContext>\n )) as typeof SparkPopover\n\n const PopoverComponent = Object.assign(PopoverWrapper, SparkPopover, {\n Content: TabsPopoverContent,\n Trigger: TabsPopoverTrigger,\n }) as ConfiguredPopoverComponent\n\n return <TabsPopoverContext value={contextValue}>{children(PopoverComponent)}</TabsPopoverContext>\n}\n\nPopover.displayName = 'Popover'\n","import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const triggerVariants = cva(\n [\n 'px-md',\n 'relative flex flex-none items-center',\n 'border-outline',\n 'hover:not-disabled:bg-surface-hovered',\n 'after:absolute',\n 'data-[active]:font-medium',\n 'not-data-[active]:not-disabled:cursor-pointer',\n 'data-[orientation=horizontal]:border-b-sm data-[orientation=horizontal]:after:inset-x-0 data-[orientation=horizontal]:after:bottom-[-1px] data-[orientation=horizontal]:after:h-sz-2',\n 'data-[orientation=vertical]:border-r-sm data-[orientation=vertical]:after:inset-y-0 data-[orientation=vertical]:after:right-[-1px] data-[orientation=vertical]:after:w-sz-2',\n 'focus-visible:border-none focus-visible:bg-surface-hovered focus-visible:u-outline-inset',\n 'disabled:cursor-not-allowed disabled:opacity-dim-3',\n 'gap-md [&>*:first-child]:ml-md [&>*:last-child]:mr-md',\n '[&>svg:last-child:first-child]:mx-auto',\n ],\n {\n variants: {\n /**\n * Change the color scheme of the tabs\n * @default support\n */\n intent: makeVariants<'intent', ['main', 'support']>({\n main: ['data-[active]:text-main data-[active]:after:bg-main'],\n support: ['data-[active]:text-support data-[active]:after:bg-support'],\n }),\n /**\n * Change the size of the tabs\n * @default md\n */\n size: {\n xs: ['h-sz-32 min-w-sz-32 text-caption'],\n sm: ['h-sz-36 min-w-sz-36 text-body-2'],\n md: ['h-sz-40 min-w-sz-40 text-body-1'],\n },\n hasMenu: {\n true: 'pr-3xl',\n },\n orientation: {\n horizontal: '',\n vertical: '',\n },\n },\n compoundVariants: [\n {\n hasMenu: true,\n orientation: 'vertical',\n class: 'w-full',\n },\n ],\n defaultVariants: {\n intent: 'support',\n size: 'md',\n hasMenu: false,\n orientation: 'horizontal',\n },\n }\n)\n\nexport type TabsTriggerVariantsProps = VariantProps<typeof triggerVariants>\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { type ComponentProps, type FocusEvent, type ReactNode, Ref, useRef } from 'react'\n\ntype TabKeyDownEvent = Parameters<NonNullable<ComponentProps<typeof BaseTabs.Tab>['onKeyDown']>>[0]\n\nimport { useTabsContext } from './TabsContext'\nimport { type ConfiguredPopoverComponent, Popover } from './TabsPopoverAbstraction'\nimport { triggerVariants } from './TabsTrigger.styles'\nimport { useRenderSlot } from './useRenderSlot'\n\nexport interface TabsTriggerProps extends Omit<ComponentProps<typeof BaseTabs.Tab>, 'render'> {\n /**\n * A unique value that associates the trigger with a content.\n */\n value: string\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * When true, prevents the user from interacting with the tab.\n * @default false\n */\n disabled?: boolean\n /**\n * Function that receives a pre-configured Popover component and returns the popover structure.\n * @example\n * renderMenu={({ Popover }) => (\n * <Popover>\n * <Popover.Trigger aria-label=\"Options\">\n * <CustomIcon />\n * </Popover.Trigger>\n * <Popover.Content>\n * <Button>Action</Button>\n * </Popover.Content>\n * </Popover>\n * )}\n */\n renderMenu?: (props: { Popover: ConfiguredPopoverComponent }) => ReactNode\n ref?: Ref<HTMLButtonElement>\n}\n\n/** A button that activates a tab panel. Renders a <button> element. */\nexport const TabsTrigger = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n value,\n disabled = false,\n children,\n className,\n ref,\n onKeyDown,\n renderMenu,\n ...rest\n}: TabsTriggerProps) => {\n const { intent, size, orientation } = useTabsContext()\n const popoverTriggerRef = useRef<HTMLButtonElement>(null)\n const tabsTriggerRef = useRef<HTMLButtonElement>(null)\n const renderSlot = useRenderSlot(asChild)\n\n // Combine internal ref with forwarded ref\n const mergedRef = useMergeRefs(ref, tabsTriggerRef)\n\n const handleKeyDown = (e: TabKeyDownEvent) => {\n // Handle Shift+F10 for popover\n if (e.key === 'F10' && e.shiftKey && renderMenu && popoverTriggerRef.current) {\n e.preventDefault()\n popoverTriggerRef.current.click()\n }\n\n // Call original onKeyDown if provided\n onKeyDown?.(e)\n }\n\n const hasMenu = !!renderMenu\n const popoverSide = orientation === 'vertical' ? 'right' : 'bottom'\n\n const trigger = (\n <BaseTabs.Tab\n data-spark-component=\"tabs-trigger\"\n ref={mergedRef}\n className={triggerVariants({\n intent,\n size,\n hasMenu,\n orientation: orientation ?? 'horizontal',\n className,\n })}\n render={renderSlot}\n disabled={disabled}\n value={value}\n onFocus={({ target }: FocusEvent<HTMLButtonElement>) =>\n target.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n })\n }\n onKeyDown={handleKeyDown}\n aria-haspopup={hasMenu ? 'true' : undefined}\n {...rest}\n >\n {children}\n </BaseTabs.Tab>\n )\n\n if (!hasMenu) {\n return trigger\n }\n\n return (\n <div className={orientation === 'vertical' ? 'relative w-full' : 'relative'}>\n {trigger}\n <div className=\"right-md mr-md pointer-events-auto absolute top-1/2 -translate-y-1/2\">\n <Popover popoverSide={popoverSide} popoverTriggerRef={popoverTriggerRef}>\n {PopoverAbstraction => renderMenu?.({ Popover: PopoverAbstraction })}\n </Popover>\n </div>\n </div>\n )\n}\n\nTabsTrigger.displayName = 'Tabs.Trigger'\n","import { Tabs as Root } from './Tabs'\nimport { TabsContent as Content } from './TabsContent'\nimport { TabsList as List } from './TabsList'\nimport { TabsTrigger as Trigger } from './TabsTrigger'\n\n/**\n * A set of layered sections of content that users can navigate between using tab controls.\n */\nexport const Tabs: typeof Root & {\n List: typeof List\n Trigger: typeof Trigger\n Content: typeof Content\n} = Object.assign(Root, {\n List,\n Trigger,\n Content,\n})\n\nTabs.displayName = 'Tabs'\nList.displayName = 'Tabs.List'\nTrigger.displayName = 'Tabs.Trigger'\nContent.displayName = 'Tabs.Content'\n\nexport { type TabsContentProps } from './TabsContent'\nexport { type TabsListProps } from './TabsList'\nexport { type TabsProps, type TabsRootProps } from './Tabs'\nexport { type TabsTriggerProps } from './TabsTrigger'\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tabs/TabsContext.tsx","../../src/tabs/TabsRoot.styles.ts","../../src/tabs/Tabs.tsx","../../src/tabs/TabsContent.styles.ts","../../src/tabs/TabsContent.tsx","../../src/tabs/TabsList.styles.ts","../../src/tabs/useResizeObserver.ts","../../src/tabs/TabsList.tsx","../../src/tabs/TabsPopoverAbstraction.tsx","../../src/tabs/TabsTrigger.styles.ts","../../src/tabs/TabsTrigger.tsx","../../src/tabs/index.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\n\nimport type { TabsTriggerVariantsProps } from './TabsTrigger.styles'\n\nexport type TabsContextInterface = TabsTriggerVariantsProps & {\n orientation?: 'horizontal' | 'vertical'\n forceMount?: boolean\n}\n\nexport const TabsContext = createContext<TabsContextInterface>({} as TabsContextInterface)\n\nexport const useTabsContext = () => {\n const context = useContext(TabsContext)\n\n if (!context) {\n throw Error('useTabsContext must be used within a TabsContext Provider')\n }\n\n return context\n}\n","import { cva } from 'class-variance-authority'\n\nexport const rootStyles = cva([\n 'flex',\n 'data-[orientation=horizontal]:flex-col',\n 'data-[orientation=vertical]:flex-row',\n 'max-w-full',\n])\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { createRenderSlot } from '@spark-ui/internal-utils'\nimport { type ComponentProps, type PropsWithChildren, Ref } from 'react'\n\nimport { TabsContext } from './TabsContext'\nimport { rootStyles } from './TabsRoot.styles'\nimport type { TabsTriggerVariantsProps } from './TabsTrigger.styles'\n\nexport interface TabsProps\n extends\n Omit<ComponentProps<typeof BaseTabs.Root>, 'render'>,\n PropsWithChildren<Omit<TabsTriggerVariantsProps, 'orientation'>> {\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * Whether to keep inactive tabs content in the DOM.\n * @default false\n */\n forceMount?: boolean\n ref?: Ref<HTMLDivElement>\n}\n\n/**\n * @deprecated\n */\nexport type TabsRootProps = TabsProps\n\nexport const Tabs = ({\n intent = 'support',\n size = 'md',\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n forceMount = false,\n orientation = 'horizontal',\n children,\n className,\n ref,\n ...rest\n}: TabsProps) => {\n const { renderProp, innerChildren } = createRenderSlot(asChild, children)\n\n return (\n <TabsContext\n value={{\n intent,\n size,\n orientation,\n forceMount,\n }}\n >\n <BaseTabs.Root\n ref={ref}\n orientation={orientation}\n className={rootStyles({ className })}\n data-spark-component=\"tabs\"\n render={renderProp}\n {...rest}\n >\n {innerChildren}\n </BaseTabs.Root>\n </TabsContext>\n )\n}\n\nTabs.displayName = 'Tabs'\n","import { cva } from 'class-variance-authority'\n\nexport const contentStyles = cva(['w-full p-lg', 'focus-visible:u-outline-inset'], {\n variants: {\n forceMount: {\n true: 'data-[hidden]:hidden',\n false: '',\n },\n },\n})\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { createRenderSlot } from '@spark-ui/internal-utils'\nimport { type ComponentProps, type PropsWithChildren, Ref } from 'react'\n\nimport { contentStyles } from './TabsContent.styles'\nimport { useTabsContext } from './TabsContext'\n\nexport interface TabsContentProps extends PropsWithChildren<\n Omit<ComponentProps<typeof BaseTabs.Panel>, 'keepMounted' | 'render'>\n> {\n /**\n * A unique value that associates the content with a trigger.\n */\n value: string\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * Used to force mounting when more control is needed. Useful when controlling animation with React animation libraries.\n */\n forceMount?: true\n ref?: Ref<HTMLDivElement>\n}\n\n/** The panel that displays content associated with a tab. Renders a <div> element. */\nexport const TabsContent = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n children,\n asChild = false,\n className,\n ref,\n forceMount,\n ...rest\n}: TabsContentProps) => {\n const { forceMount: contextForceMount } = useTabsContext()\n const { renderProp, innerChildren } = createRenderSlot(asChild, children)\n const keepMounted = contextForceMount || forceMount\n\n return (\n <BaseTabs.Panel\n data-spark-component=\"tabs-content\"\n ref={ref}\n keepMounted={keepMounted}\n className={contentStyles({ className, forceMount: keepMounted })}\n render={renderProp}\n {...rest}\n >\n {innerChildren}\n </BaseTabs.Panel>\n )\n}\n\nTabsContent.displayName = 'Tabs.Content'\n","import { cva } from 'class-variance-authority'\n\nexport const wrapperStyles = cva(['relative flex'])\n\nexport const listStyles = cva([\n 'flex w-full',\n 'data-[orientation=horizontal]:flex-row',\n 'data-[orientation=vertical]:flex-col',\n 'overflow-y-hidden u-no-scrollbar data-[orientation=vertical]:overflow-x-hidden',\n 'after:flex after:shrink after:grow after:border-outline',\n 'data-[orientation=horizontal]:after:border-b-sm',\n 'data-[orientation=vertical]:after:border-r-sm',\n])\n\nexport const navigationArrowStyles = cva([\n 'h-auto! flex-none',\n 'border-b-sm border-outline',\n 'outline-hidden',\n 'focus-visible:border-none focus-visible:bg-surface-hovered focus-visible:u-outline-inset!',\n])\n","import { type RefObject, useEffect, useRef, useState } from 'react'\n\ninterface Size {\n width?: number\n height?: number\n}\n\ntype ResizeCallback = (entry?: ResizeObserverEntry) => void\n\nexport const useResizeObserver = <T extends HTMLElement>(\n target: RefObject<T | null> | T | null,\n onResize?: ResizeCallback\n): Size => {\n const [size, setSize] = useState<Size>({ width: undefined, height: undefined })\n const resizeObserverRef = useRef<ResizeObserver>(null)\n const resizeCallbackRef = useRef<ResizeCallback | undefined>(onResize)\n\n useEffect(() => {\n resizeCallbackRef.current = onResize\n }, [onResize])\n\n useEffect(() => {\n const targetElm = target && 'current' in target ? target.current : target\n if (!targetElm || resizeObserverRef.current) {\n return\n }\n\n resizeObserverRef.current = new ResizeObserver(([entry]) => {\n const { inlineSize: width, blockSize: height } = entry?.borderBoxSize?.[0] ?? {}\n resizeCallbackRef.current?.(entry)\n\n setSize({ width, height })\n })\n\n resizeObserverRef.current.observe(targetElm as unknown as HTMLElement)\n\n return () => {\n resizeObserverRef.current &&\n resizeObserverRef.current.unobserve(targetElm as unknown as HTMLElement)\n }\n }, [target, resizeObserverRef, resizeCallbackRef])\n\n return size\n}\n","/* eslint-disable max-lines-per-function */\nimport { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { ArrowVerticalLeft } from '@spark-ui/icons/ArrowVerticalLeft'\nimport { ArrowVerticalRight } from '@spark-ui/icons/ArrowVerticalRight'\nimport { createRenderSlot } from '@spark-ui/internal-utils'\nimport { type ComponentProps, type ReactElement, Ref, useEffect, useRef, useState } from 'react'\n\nimport { Button } from '../button'\nimport { Icon } from '../icon'\nimport { useTabsContext } from './TabsContext'\nimport { listStyles, navigationArrowStyles, wrapperStyles } from './TabsList.styles'\nimport { useResizeObserver } from './useResizeObserver'\n\nexport interface TabsListProps extends Omit<\n ComponentProps<typeof BaseTabs.List>,\n 'render' | 'loopFocus'\n> {\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * When true, keyboard navigation will loop from last tab to first, and vice versa.\n * @default false\n */\n loop?: boolean\n children: ReactElement[] | ReactElement\n ref?: Ref<HTMLDivElement>\n}\n\ntype ArrowState = 'visible' | 'hidden' | 'disabled'\n\n/** The container for the tab triggers. Renders a <div> element. */\nexport const TabsList = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n loop = false,\n children,\n className,\n ref,\n ...rest\n}: TabsListProps) => {\n const wrapperRef = useRef<HTMLDivElement>(null)\n const innerRef = useRef(null)\n const listRef = ref || innerRef\n const { orientation } = useTabsContext()\n const { renderProp, innerChildren } = createRenderSlot(asChild, children)\n\n const { width } = useResizeObserver(wrapperRef)\n\n const [arrows, setArrows] = useState<Record<'prev' | 'next', ArrowState>>({\n prev: 'hidden',\n next: 'hidden',\n })\n\n useEffect(() => {\n /**\n * Show/hide arrows\n */\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n if (orientation !== 'horizontal') {\n setArrows({ prev: 'hidden', next: 'hidden' })\n } else {\n setArrows({\n prev: listRef.current.scrollWidth > listRef.current.clientWidth ? 'visible' : 'hidden',\n next: listRef.current.scrollWidth > listRef.current.clientWidth ? 'visible' : 'hidden',\n })\n }\n }, [orientation, listRef, width])\n\n useEffect(() => {\n /**\n * Enable/disable arrows\n */\n if (typeof listRef === 'function' || !listRef.current || arrows.prev === 'hidden' || loop) {\n return\n }\n\n const toggleArrowsVisibility = (target: HTMLDivElement) => {\n setArrows({\n prev: target.scrollLeft > 0 ? 'visible' : 'disabled',\n next: target.scrollLeft + target.clientWidth < target.scrollWidth ? 'visible' : 'disabled',\n })\n }\n\n const currentList = listRef.current\n\n toggleArrowsVisibility(currentList)\n\n currentList.addEventListener('scroll', ({ target }) =>\n toggleArrowsVisibility(target as HTMLDivElement)\n )\n\n return () =>\n currentList.removeEventListener('scroll', ({ target }) =>\n toggleArrowsVisibility(target as HTMLDivElement)\n )\n }, [listRef, arrows.prev, loop])\n\n const handlePrevClick = () => {\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n const shouldLoopForward = loop && listRef.current.scrollLeft <= 0\n\n listRef.current.scrollTo({\n left: shouldLoopForward\n ? listRef.current.scrollLeft + listRef.current.scrollWidth - listRef.current.clientWidth\n : listRef.current.scrollLeft - listRef.current.clientWidth,\n behavior: 'smooth',\n })\n }\n\n const handleNextClick = () => {\n if (typeof listRef === 'function' || !listRef.current) {\n return\n }\n\n const shouldLoopBackward =\n loop &&\n listRef.current.scrollLeft + listRef.current.clientWidth >= listRef.current.scrollWidth\n\n listRef.current.scrollTo({\n left: shouldLoopBackward ? 0 : listRef.current.scrollLeft + listRef.current.clientWidth,\n behavior: 'smooth',\n })\n }\n\n return (\n <div className={wrapperStyles({ className })} ref={wrapperRef}>\n {arrows.prev !== 'hidden' && (\n <Button\n shape=\"square\"\n intent=\"surface\"\n size=\"sm\"\n className={navigationArrowStyles()}\n onClick={handlePrevClick}\n disabled={arrows.prev === 'disabled'}\n aria-label=\"Scroll left\"\n >\n <Icon>\n <ArrowVerticalLeft />\n </Icon>\n </Button>\n )}\n\n <BaseTabs.List\n data-spark-component=\"tabs-list\"\n ref={listRef}\n className={listStyles()}\n render={renderProp}\n loopFocus={loop}\n activateOnFocus\n {...rest}\n >\n {innerChildren}\n </BaseTabs.List>\n\n {arrows.next !== 'hidden' && (\n <Button\n shape=\"square\"\n intent=\"surface\"\n size=\"sm\"\n className={navigationArrowStyles()}\n onClick={handleNextClick}\n disabled={arrows.next === 'disabled'}\n aria-label=\"Scroll right\"\n >\n <Icon>\n <ArrowVerticalRight />\n </Icon>\n </Button>\n )}\n </div>\n )\n}\n\nTabsList.displayName = 'Tabs.List'\n","import { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { MoreMenuHorizontal } from '@spark-ui/icons/MoreMenuHorizontal'\nimport { cx } from 'class-variance-authority'\nimport {\n type ComponentType,\n createContext,\n forwardRef,\n type ReactNode,\n type RefObject,\n useContext,\n useMemo,\n} from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton } from '../icon-button'\nimport { Popover as SparkPopover } from '../popover'\nimport type { PopoverProps } from '../popover/Popover'\nimport type { ContentProps as PopoverContentProps } from '../popover/PopoverContent'\nimport type { TriggerProps as PopoverTriggerProps } from '../popover/PopoverTrigger'\n\ninterface TabsPopoverContextValue {\n popoverSide: 'right' | 'bottom'\n popoverTriggerRef: RefObject<HTMLButtonElement | null>\n}\n\nconst TabsPopoverContext = createContext<TabsPopoverContextValue | undefined>(undefined)\n\nconst useTabsPopoverContext = () => {\n const context = useContext(TabsPopoverContext)\n if (!context) {\n throw new Error('TabsPopover components must be used within TabsPopover')\n }\n\n return context\n}\n\n// Trigger component that uses context\ninterface TabsPopoverTriggerProps extends Omit<PopoverTriggerProps, 'asChild' | 'children'> {\n 'aria-label': string\n children?: ReactNode\n}\n\nconst TabsPopoverTrigger = forwardRef<HTMLButtonElement, TabsPopoverTriggerProps>(\n ({ 'aria-label': ariaLabel, children: iconChildren, ...triggerProps }, forwardedRef) => {\n const { popoverTriggerRef } = useTabsPopoverContext()\n const mergedRef = useMergeRefs(forwardedRef, popoverTriggerRef)\n\n return (\n <SparkPopover.Trigger asChild {...triggerProps}>\n <IconButton\n ref={mergedRef}\n size=\"sm\"\n intent=\"surfaceInverse\"\n design=\"ghost\"\n aria-label={ariaLabel}\n tabIndex={-1}\n >\n <Icon>{iconChildren || <MoreMenuHorizontal />}</Icon>\n </IconButton>\n </SparkPopover.Trigger>\n )\n }\n)\n\nTabsPopoverTrigger.displayName = 'Popover.Trigger'\n\n// Content component that uses context\nconst TabsPopoverContent = forwardRef<HTMLDivElement, PopoverContentProps>(\n ({ side, align = 'start', className, ...contentProps }, ref) => {\n const { popoverSide } = useTabsPopoverContext()\n const mergedClassName = cx('gap-sm flex flex-col', className)\n\n return (\n <SparkPopover.Content\n ref={ref}\n {...contentProps}\n side={side ?? popoverSide}\n align={align}\n className={mergedClassName}\n />\n )\n }\n)\n\nTabsPopoverContent.displayName = 'Popover.Content'\n\n// Export types\nexport type TabsPopoverTriggerComponent = typeof TabsPopoverTrigger\nexport type TabsPopoverContentComponent = typeof TabsPopoverContent\n\n// Create a type that extends SparkPopover but overrides Content and Trigger\n// Use ComponentType for JSX compatibility and Omit to exclude only Content and Trigger,\n// then add them back with the overridden types\nexport type ConfiguredPopoverComponent = ComponentType<PopoverProps> &\n Omit<typeof SparkPopover, 'Content' | 'Trigger'> & {\n Content: TabsPopoverContentComponent\n Trigger: TabsPopoverTriggerComponent\n }\n\ninterface PopoverAbstractionProps {\n popoverSide: 'right' | 'bottom'\n popoverTriggerRef: RefObject<HTMLButtonElement | null>\n children: (Popover: ConfiguredPopoverComponent) => ReactNode\n}\n\nexport const Popover = ({ popoverSide, popoverTriggerRef, children }: PopoverAbstractionProps) => {\n const contextValue = useMemo(\n () => ({ popoverSide, popoverTriggerRef }),\n [popoverSide, popoverTriggerRef]\n )\n\n const PopoverWrapper: typeof SparkPopover = ((props: PopoverProps) => (\n <TabsPopoverContext value={contextValue}>\n <SparkPopover {...props}>{props.children}</SparkPopover>\n </TabsPopoverContext>\n )) as typeof SparkPopover\n\n const PopoverComponent = Object.assign(PopoverWrapper, SparkPopover, {\n Content: TabsPopoverContent,\n Trigger: TabsPopoverTrigger,\n }) as ConfiguredPopoverComponent\n\n return <TabsPopoverContext value={contextValue}>{children(PopoverComponent)}</TabsPopoverContext>\n}\n\nPopover.displayName = 'Popover'\n","import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const triggerVariants = cva(\n [\n 'px-md',\n 'relative flex flex-none items-center',\n 'border-outline',\n 'hover:not-disabled:bg-surface-hovered',\n 'after:absolute',\n 'data-[active]:font-medium',\n 'not-data-[active]:not-disabled:cursor-pointer',\n 'data-[orientation=horizontal]:border-b-sm data-[orientation=horizontal]:after:inset-x-0 data-[orientation=horizontal]:after:bottom-[-1px] data-[orientation=horizontal]:after:h-sz-2',\n 'data-[orientation=vertical]:border-r-sm data-[orientation=vertical]:after:inset-y-0 data-[orientation=vertical]:after:right-[-1px] data-[orientation=vertical]:after:w-sz-2',\n 'focus-visible:border-none focus-visible:bg-surface-hovered focus-visible:u-outline-inset',\n 'disabled:cursor-not-allowed disabled:opacity-dim-3',\n 'gap-md [&>*:first-child]:ml-md [&>*:last-child]:mr-md',\n '[&>svg:last-child:first-child]:mx-auto',\n ],\n {\n variants: {\n /**\n * Change the color scheme of the tabs\n * @default support\n */\n intent: makeVariants<'intent', ['main', 'support']>({\n main: ['data-[active]:text-main data-[active]:after:bg-main'],\n support: ['data-[active]:text-support data-[active]:after:bg-support'],\n }),\n /**\n * Change the size of the tabs\n * @default md\n */\n size: {\n xs: ['h-sz-32 min-w-sz-32 text-caption'],\n sm: ['h-sz-36 min-w-sz-36 text-body-2'],\n md: ['h-sz-40 min-w-sz-40 text-body-1'],\n },\n hasMenu: {\n true: 'pr-3xl',\n },\n orientation: {\n horizontal: '',\n vertical: '',\n },\n },\n compoundVariants: [\n {\n hasMenu: true,\n orientation: 'vertical',\n class: 'w-full',\n },\n ],\n defaultVariants: {\n intent: 'support',\n size: 'md',\n hasMenu: false,\n orientation: 'horizontal',\n },\n }\n)\n\nexport type TabsTriggerVariantsProps = VariantProps<typeof triggerVariants>\n","import { Tabs as BaseTabs } from '@base-ui/react/tabs'\nimport { useMergeRefs } from '@spark-ui/hooks/use-merge-refs'\nimport { type ComponentProps, type FocusEvent, type ReactNode, Ref, useRef } from 'react'\n\ntype TabKeyDownEvent = Parameters<NonNullable<ComponentProps<typeof BaseTabs.Tab>['onKeyDown']>>[0]\n\nimport { createRenderSlot } from '@spark-ui/internal-utils'\n\nimport { useTabsContext } from './TabsContext'\nimport { type ConfiguredPopoverComponent, Popover } from './TabsPopoverAbstraction'\nimport { triggerVariants } from './TabsTrigger.styles'\n\nexport interface TabsTriggerProps extends Omit<ComponentProps<typeof BaseTabs.Tab>, 'render'> {\n /**\n * A unique value that associates the trigger with a content.\n */\n value: string\n /**\n * Change the component to the HTML tag or custom component of the only child. This will merge the original component props with the props of the supplied element/component and change the underlying DOM node.\n * @default false\n */\n asChild?: boolean\n /**\n * When true, prevents the user from interacting with the tab.\n * @default false\n */\n disabled?: boolean\n /**\n * Function that receives a pre-configured Popover component and returns the popover structure.\n * @example\n * renderMenu={({ Popover }) => (\n * <Popover>\n * <Popover.Trigger aria-label=\"Options\">\n * <CustomIcon />\n * </Popover.Trigger>\n * <Popover.Content>\n * <Button>Action</Button>\n * </Popover.Content>\n * </Popover>\n * )}\n */\n renderMenu?: (props: { Popover: ConfiguredPopoverComponent }) => ReactNode\n ref?: Ref<HTMLButtonElement>\n}\n\n/** A button that activates a tab panel. Renders a <button> element. */\nexport const TabsTrigger = ({\n /**\n * Default Base UI Primitive values\n * see https://base-ui.com/react/components/tabs\n */\n asChild = false,\n value,\n disabled = false,\n children,\n className,\n ref,\n onKeyDown,\n renderMenu,\n ...rest\n}: TabsTriggerProps) => {\n const { intent, size, orientation } = useTabsContext()\n const popoverTriggerRef = useRef<HTMLButtonElement>(null)\n const tabsTriggerRef = useRef<HTMLButtonElement>(null)\n\n // Combine internal ref with forwarded ref\n const mergedRef = useMergeRefs(ref, tabsTriggerRef)\n\n const { renderProp, innerChildren } = createRenderSlot(asChild, children)\n\n const handleKeyDown = (e: TabKeyDownEvent) => {\n // Handle Shift+F10 for popover\n if (e.key === 'F10' && e.shiftKey && renderMenu && popoverTriggerRef.current) {\n e.preventDefault()\n popoverTriggerRef.current.click()\n }\n\n // Call original onKeyDown if provided\n onKeyDown?.(e)\n }\n\n const hasMenu = !!renderMenu\n const popoverSide = orientation === 'vertical' ? 'right' : 'bottom'\n\n const trigger = (\n <BaseTabs.Tab\n data-spark-component=\"tabs-trigger\"\n ref={mergedRef}\n className={triggerVariants({\n intent,\n size,\n hasMenu,\n orientation: orientation ?? 'horizontal',\n className,\n })}\n render={renderProp}\n disabled={disabled}\n value={value}\n onFocus={({ target }: FocusEvent<HTMLButtonElement>) =>\n target.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n })\n }\n onKeyDown={handleKeyDown}\n aria-haspopup={hasMenu ? 'true' : undefined}\n {...rest}\n >\n {innerChildren}\n </BaseTabs.Tab>\n )\n\n if (!hasMenu) {\n return trigger\n }\n\n return (\n <div className={orientation === 'vertical' ? 'relative w-full' : 'relative'}>\n {trigger}\n <div className=\"right-md mr-md pointer-events-auto absolute top-1/2 -translate-y-1/2\">\n <Popover popoverSide={popoverSide} popoverTriggerRef={popoverTriggerRef}>\n {PopoverAbstraction => renderMenu?.({ Popover: PopoverAbstraction })}\n </Popover>\n </div>\n </div>\n )\n}\n\nTabsTrigger.displayName = 'Tabs.Trigger'\n","import { Tabs as Root } from './Tabs'\nimport { TabsContent as Content } from './TabsContent'\nimport { TabsList as List } from './TabsList'\nimport { TabsTrigger as Trigger } from './TabsTrigger'\n\n/**\n * A set of layered sections of content that users can navigate between using tab controls.\n */\nexport const Tabs: typeof Root & {\n List: typeof List\n Trigger: typeof Trigger\n Content: typeof Content\n} = Object.assign(Root, {\n List,\n Trigger,\n Content,\n})\n\nTabs.displayName = 'Tabs'\nList.displayName = 'Tabs.List'\nTrigger.displayName = 'Tabs.Trigger'\nContent.displayName = 'Tabs.Content'\n\nexport { type TabsContentProps } from './TabsContent'\nexport { type TabsListProps } from './TabsList'\nexport { type TabsProps, type TabsRootProps } from './Tabs'\nexport { type TabsTriggerProps } from './TabsTrigger'\n"],"mappings":"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"}
@@ -1,80 +1,71 @@
1
- import { Slot as e } from "../slot/index.mjs";
2
- import { t } from "../icon-Bs-39J-H.mjs";
3
- import { t as n } from "../button-DwLTXeJX.mjs";
4
- import { t as r } from "../icon-button-C1ThqdK1.mjs";
5
- import { t as i } from "../popover-CGhSHQzb.mjs";
6
- import { cva as a, cx as o } from "class-variance-authority";
7
- import { createContext as s, forwardRef as c, useContext as l, useEffect as u, useMemo as d, useRef as f, useState as p } from "react";
8
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
9
- import { makeVariants as g } from "@spark-ui/internal-utils";
1
+ import { t as e } from "../icon-VM_Ys9Xn.mjs";
2
+ import { t } from "../button-DBNjh3Bi.mjs";
3
+ import { t as n } from "../icon-button-CexCkoV0.mjs";
4
+ import { t as r } from "../popover-COqbFikI.mjs";
5
+ import { createRenderSlot as i, makeVariants as a } from "@spark-ui/internal-utils";
6
+ import { cva as o, cx as s } from "class-variance-authority";
7
+ import { createContext as c, forwardRef as l, useContext as u, useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
8
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
10
9
  import { useMergeRefs as _ } from "@spark-ui/hooks/use-merge-refs";
11
10
  import { ArrowVerticalRight as v } from "@spark-ui/icons/ArrowVerticalRight";
12
11
  import { ArrowVerticalLeft as y } from "@spark-ui/icons/ArrowVerticalLeft";
13
12
  import { Tabs as b } from "@base-ui/react/tabs";
14
13
  import { MoreMenuHorizontal as x } from "@spark-ui/icons/MoreMenuHorizontal";
15
14
  //#region src/tabs/TabsContext.tsx
16
- var S = s({}), C = () => {
17
- let e = l(S);
15
+ var S = c({}), C = () => {
16
+ let e = u(S);
18
17
  if (!e) throw Error("useTabsContext must be used within a TabsContext Provider");
19
18
  return e;
20
- }, w = a([
19
+ }, w = o([
21
20
  "flex",
22
21
  "data-[orientation=horizontal]:flex-col",
23
22
  "data-[orientation=vertical]:flex-row",
24
23
  "max-w-full"
25
- ]);
26
- //#endregion
27
- //#region src/tabs/useRenderSlot.tsx
28
- function T(t) {
29
- return t ? ({ ...t }) => /* @__PURE__ */ m(e, { ...t }) : void 0;
30
- }
31
- //#endregion
32
- //#region src/tabs/Tabs.tsx
33
- var E = ({ intent: e = "support", size: t = "md", asChild: n = !1, forceMount: r = !1, orientation: i = "horizontal", children: a, className: o, ref: s, ...c }) => {
34
- let l = T(n);
35
- return /* @__PURE__ */ m(S, {
24
+ ]), T = ({ intent: e = "support", size: t = "md", asChild: n = !1, forceMount: r = !1, orientation: a = "horizontal", children: o, className: s, ref: c, ...l }) => {
25
+ let { renderProp: u, innerChildren: d } = i(n, o);
26
+ return /* @__PURE__ */ h(S, {
36
27
  value: {
37
28
  intent: e,
38
29
  size: t,
39
- orientation: i,
30
+ orientation: a,
40
31
  forceMount: r
41
32
  },
42
- children: /* @__PURE__ */ m(b.Root, {
43
- ref: s,
44
- orientation: i,
45
- className: w({ className: o }),
33
+ children: /* @__PURE__ */ h(b.Root, {
34
+ ref: c,
35
+ orientation: a,
36
+ className: w({ className: s }),
46
37
  "data-spark-component": "tabs",
47
- render: l,
48
- ...c,
49
- children: a
38
+ render: u,
39
+ ...l,
40
+ children: d
50
41
  })
51
42
  });
52
43
  };
53
- E.displayName = "Tabs";
44
+ T.displayName = "Tabs";
54
45
  //#endregion
55
46
  //#region src/tabs/TabsContent.styles.ts
56
- var D = a(["w-full p-lg", "focus-visible:u-outline-inset"], { variants: { forceMount: {
47
+ var E = o(["w-full p-lg", "focus-visible:u-outline-inset"], { variants: { forceMount: {
57
48
  true: "data-[hidden]:hidden",
58
49
  false: ""
59
- } } }), O = ({ children: e, asChild: t = !1, className: n, ref: r, forceMount: i, ...a }) => {
60
- let { forceMount: o } = C(), s = T(t), c = o || i;
61
- return /* @__PURE__ */ m(b.Panel, {
50
+ } } }), D = ({ children: e, asChild: t = !1, className: n, ref: r, forceMount: a, ...o }) => {
51
+ let { forceMount: s } = C(), { renderProp: c, innerChildren: l } = i(t, e), u = s || a;
52
+ return /* @__PURE__ */ h(b.Panel, {
62
53
  "data-spark-component": "tabs-content",
63
54
  ref: r,
64
- keepMounted: c,
65
- className: D({
55
+ keepMounted: u,
56
+ className: E({
66
57
  className: n,
67
- forceMount: c
58
+ forceMount: u
68
59
  }),
69
- render: s,
70
- ...a,
71
- children: e
60
+ render: c,
61
+ ...o,
62
+ children: l
72
63
  });
73
64
  };
74
- O.displayName = "Tabs.Content";
65
+ D.displayName = "Tabs.Content";
75
66
  //#endregion
76
67
  //#region src/tabs/TabsList.styles.ts
77
- var k = a(["relative flex"]), A = a([
68
+ var O = o(["relative flex"]), k = o([
78
69
  "flex w-full",
79
70
  "data-[orientation=horizontal]:flex-row",
80
71
  "data-[orientation=vertical]:flex-col",
@@ -82,19 +73,19 @@ var k = a(["relative flex"]), A = a([
82
73
  "after:flex after:shrink after:grow after:border-outline",
83
74
  "data-[orientation=horizontal]:after:border-b-sm",
84
75
  "data-[orientation=vertical]:after:border-r-sm"
85
- ]), j = a([
76
+ ]), A = o([
86
77
  "h-auto! flex-none",
87
78
  "border-b-sm border-outline",
88
79
  "outline-hidden",
89
80
  "focus-visible:border-none focus-visible:bg-surface-hovered focus-visible:u-outline-inset!"
90
- ]), M = (e, t) => {
91
- let [n, r] = p({
81
+ ]), j = (e, t) => {
82
+ let [n, r] = m({
92
83
  width: void 0,
93
84
  height: void 0
94
- }), i = f(null), a = f(t);
95
- return u(() => {
85
+ }), i = p(null), a = p(t);
86
+ return d(() => {
96
87
  a.current = t;
97
- }, [t]), u(() => {
88
+ }, [t]), d(() => {
98
89
  let t = e && "current" in e ? e.current : e;
99
90
  if (!(!t || i.current)) return i.current = new ResizeObserver(([e]) => {
100
91
  let { inlineSize: t, blockSize: n } = e?.borderBoxSize?.[0] ?? {};
@@ -110,147 +101,147 @@ var k = a(["relative flex"]), A = a([
110
101
  i,
111
102
  a
112
103
  ]), n;
113
- }, N = ({ asChild: e = !1, loop: r = !1, children: i, className: a, ref: o, ...s }) => {
114
- let c = f(null), l = f(null), d = o || l, { orientation: g } = C(), _ = T(e), { width: x } = M(c), [S, w] = p({
104
+ }, M = ({ asChild: n = !1, loop: r = !1, children: a, className: o, ref: s, ...c }) => {
105
+ let l = p(null), u = p(null), f = s || u, { orientation: _ } = C(), { renderProp: x, innerChildren: S } = i(n, a), { width: w } = j(l), [T, E] = m({
115
106
  prev: "hidden",
116
107
  next: "hidden"
117
108
  });
118
- u(() => {
119
- typeof d == "function" || !d.current || w(g === "horizontal" ? {
120
- prev: d.current.scrollWidth > d.current.clientWidth ? "visible" : "hidden",
121
- next: d.current.scrollWidth > d.current.clientWidth ? "visible" : "hidden"
109
+ d(() => {
110
+ typeof f == "function" || !f.current || E(_ === "horizontal" ? {
111
+ prev: f.current.scrollWidth > f.current.clientWidth ? "visible" : "hidden",
112
+ next: f.current.scrollWidth > f.current.clientWidth ? "visible" : "hidden"
122
113
  } : {
123
114
  prev: "hidden",
124
115
  next: "hidden"
125
116
  });
126
117
  }, [
127
- g,
128
- d,
129
- x
130
- ]), u(() => {
131
- if (typeof d == "function" || !d.current || S.prev === "hidden" || r) return;
118
+ _,
119
+ f,
120
+ w
121
+ ]), d(() => {
122
+ if (typeof f == "function" || !f.current || T.prev === "hidden" || r) return;
132
123
  let e = (e) => {
133
- w({
124
+ E({
134
125
  prev: e.scrollLeft > 0 ? "visible" : "disabled",
135
126
  next: e.scrollLeft + e.clientWidth < e.scrollWidth ? "visible" : "disabled"
136
127
  });
137
- }, t = d.current;
128
+ }, t = f.current;
138
129
  return e(t), t.addEventListener("scroll", ({ target: t }) => e(t)), () => t.removeEventListener("scroll", ({ target: t }) => e(t));
139
130
  }, [
140
- d,
141
- S.prev,
131
+ f,
132
+ T.prev,
142
133
  r
143
134
  ]);
144
- let E = () => {
145
- if (typeof d == "function" || !d.current) return;
146
- let e = r && d.current.scrollLeft <= 0;
147
- d.current.scrollTo({
148
- left: e ? d.current.scrollLeft + d.current.scrollWidth - d.current.clientWidth : d.current.scrollLeft - d.current.clientWidth,
135
+ let D = () => {
136
+ if (typeof f == "function" || !f.current) return;
137
+ let e = r && f.current.scrollLeft <= 0;
138
+ f.current.scrollTo({
139
+ left: e ? f.current.scrollLeft + f.current.scrollWidth - f.current.clientWidth : f.current.scrollLeft - f.current.clientWidth,
149
140
  behavior: "smooth"
150
141
  });
151
- }, D = () => {
152
- if (typeof d == "function" || !d.current) return;
153
- let e = r && d.current.scrollLeft + d.current.clientWidth >= d.current.scrollWidth;
154
- d.current.scrollTo({
155
- left: e ? 0 : d.current.scrollLeft + d.current.clientWidth,
142
+ }, M = () => {
143
+ if (typeof f == "function" || !f.current) return;
144
+ let e = r && f.current.scrollLeft + f.current.clientWidth >= f.current.scrollWidth;
145
+ f.current.scrollTo({
146
+ left: e ? 0 : f.current.scrollLeft + f.current.clientWidth,
156
147
  behavior: "smooth"
157
148
  });
158
149
  };
159
- return /* @__PURE__ */ h("div", {
160
- className: k({ className: a }),
161
- ref: c,
150
+ return /* @__PURE__ */ g("div", {
151
+ className: O({ className: o }),
152
+ ref: l,
162
153
  children: [
163
- S.prev !== "hidden" && /* @__PURE__ */ m(n, {
154
+ T.prev !== "hidden" && /* @__PURE__ */ h(t, {
164
155
  shape: "square",
165
156
  intent: "surface",
166
157
  size: "sm",
167
- className: j(),
168
- onClick: E,
169
- disabled: S.prev === "disabled",
158
+ className: A(),
159
+ onClick: D,
160
+ disabled: T.prev === "disabled",
170
161
  "aria-label": "Scroll left",
171
- children: /* @__PURE__ */ m(t, { children: /* @__PURE__ */ m(y, {}) })
162
+ children: /* @__PURE__ */ h(e, { children: /* @__PURE__ */ h(y, {}) })
172
163
  }),
173
- /* @__PURE__ */ m(b.List, {
164
+ /* @__PURE__ */ h(b.List, {
174
165
  "data-spark-component": "tabs-list",
175
- ref: d,
176
- className: A(),
177
- render: _,
166
+ ref: f,
167
+ className: k(),
168
+ render: x,
178
169
  loopFocus: r,
179
170
  activateOnFocus: !0,
180
- ...s,
181
- children: i
171
+ ...c,
172
+ children: S
182
173
  }),
183
- S.next !== "hidden" && /* @__PURE__ */ m(n, {
174
+ T.next !== "hidden" && /* @__PURE__ */ h(t, {
184
175
  shape: "square",
185
176
  intent: "surface",
186
177
  size: "sm",
187
- className: j(),
188
- onClick: D,
189
- disabled: S.next === "disabled",
178
+ className: A(),
179
+ onClick: M,
180
+ disabled: T.next === "disabled",
190
181
  "aria-label": "Scroll right",
191
- children: /* @__PURE__ */ m(t, { children: /* @__PURE__ */ m(v, {}) })
182
+ children: /* @__PURE__ */ h(e, { children: /* @__PURE__ */ h(v, {}) })
192
183
  })
193
184
  ]
194
185
  });
195
186
  };
196
- N.displayName = "Tabs.List";
187
+ M.displayName = "Tabs.List";
197
188
  //#endregion
198
189
  //#region src/tabs/TabsPopoverAbstraction.tsx
199
- var P = s(void 0), F = () => {
200
- let e = l(P);
190
+ var N = c(void 0), P = () => {
191
+ let e = u(N);
201
192
  if (!e) throw Error("TabsPopover components must be used within TabsPopover");
202
193
  return e;
203
- }, I = c(({ "aria-label": e, children: n, ...a }, o) => {
204
- let { popoverTriggerRef: s } = F(), c = _(o, s);
205
- return /* @__PURE__ */ m(i.Trigger, {
194
+ }, F = l(({ "aria-label": t, children: i, ...a }, o) => {
195
+ let { popoverTriggerRef: s } = P(), c = _(o, s);
196
+ return /* @__PURE__ */ h(r.Trigger, {
206
197
  asChild: !0,
207
198
  ...a,
208
- children: /* @__PURE__ */ m(r, {
199
+ children: /* @__PURE__ */ h(n, {
209
200
  ref: c,
210
201
  size: "sm",
211
202
  intent: "surfaceInverse",
212
203
  design: "ghost",
213
- "aria-label": e,
204
+ "aria-label": t,
214
205
  tabIndex: -1,
215
- children: /* @__PURE__ */ m(t, { children: n || /* @__PURE__ */ m(x, {}) })
206
+ children: /* @__PURE__ */ h(e, { children: i || /* @__PURE__ */ h(x, {}) })
216
207
  })
217
208
  });
218
209
  });
219
- I.displayName = "Popover.Trigger";
220
- var L = c(({ side: e, align: t = "start", className: n, ...r }, a) => {
221
- let { popoverSide: s } = F(), c = o("gap-sm flex flex-col", n);
222
- return /* @__PURE__ */ m(i.Content, {
210
+ F.displayName = "Popover.Trigger";
211
+ var I = l(({ side: e, align: t = "start", className: n, ...i }, a) => {
212
+ let { popoverSide: o } = P(), c = s("gap-sm flex flex-col", n);
213
+ return /* @__PURE__ */ h(r.Content, {
223
214
  ref: a,
224
- ...r,
225
- side: e ?? s,
215
+ ...i,
216
+ side: e ?? o,
226
217
  align: t,
227
218
  className: c
228
219
  });
229
220
  });
230
- L.displayName = "Popover.Content";
231
- var R = ({ popoverSide: e, popoverTriggerRef: t, children: n }) => {
232
- let r = d(() => ({
221
+ I.displayName = "Popover.Content";
222
+ var L = ({ popoverSide: e, popoverTriggerRef: t, children: n }) => {
223
+ let i = f(() => ({
233
224
  popoverSide: e,
234
225
  popoverTriggerRef: t
235
226
  }), [e, t]);
236
- return /* @__PURE__ */ m(P, {
237
- value: r,
238
- children: n(Object.assign(((e) => /* @__PURE__ */ m(P, {
239
- value: r,
240
- children: /* @__PURE__ */ m(i, {
227
+ return /* @__PURE__ */ h(N, {
228
+ value: i,
229
+ children: n(Object.assign(((e) => /* @__PURE__ */ h(N, {
230
+ value: i,
231
+ children: /* @__PURE__ */ h(r, {
241
232
  ...e,
242
233
  children: e.children
243
234
  })
244
- })), i, {
245
- Content: L,
246
- Trigger: I
235
+ })), r, {
236
+ Content: I,
237
+ Trigger: F
247
238
  }))
248
239
  });
249
240
  };
250
- R.displayName = "Popover";
241
+ L.displayName = "Popover";
251
242
  //#endregion
252
243
  //#region src/tabs/TabsTrigger.styles.ts
253
- var z = a([
244
+ var R = o([
254
245
  "px-md",
255
246
  "relative flex flex-none items-center",
256
247
  "border-outline",
@@ -266,7 +257,7 @@ var z = a([
266
257
  "[&>svg:last-child:first-child]:mx-auto"
267
258
  ], {
268
259
  variants: {
269
- intent: g({
260
+ intent: a({
270
261
  main: ["data-[active]:text-main data-[active]:after:bg-main"],
271
262
  support: ["data-[active]:text-support data-[active]:after:bg-support"]
272
263
  }),
@@ -292,20 +283,20 @@ var z = a([
292
283
  hasMenu: !1,
293
284
  orientation: "horizontal"
294
285
  }
295
- }), B = ({ asChild: e = !1, value: t, disabled: n = !1, children: r, className: i, ref: a, onKeyDown: o, renderMenu: s, ...c }) => {
296
- let { intent: l, size: u, orientation: d } = C(), p = f(null), g = f(null), v = T(e), y = _(a, g), x = (e) => {
297
- e.key === "F10" && e.shiftKey && s && p.current && (e.preventDefault(), p.current.click()), o?.(e);
298
- }, S = !!s, w = d === "vertical" ? "right" : "bottom", E = /* @__PURE__ */ m(b.Tab, {
286
+ }), z = ({ asChild: e = !1, value: t, disabled: n = !1, children: r, className: a, ref: o, onKeyDown: s, renderMenu: c, ...l }) => {
287
+ let { intent: u, size: d, orientation: f } = C(), m = p(null), v = _(o, p(null)), { renderProp: y, innerChildren: x } = i(e, r), S = (e) => {
288
+ e.key === "F10" && e.shiftKey && c && m.current && (e.preventDefault(), m.current.click()), s?.(e);
289
+ }, w = !!c, T = f === "vertical" ? "right" : "bottom", E = /* @__PURE__ */ h(b.Tab, {
299
290
  "data-spark-component": "tabs-trigger",
300
- ref: y,
301
- className: z({
302
- intent: l,
303
- size: u,
304
- hasMenu: S,
305
- orientation: d ?? "horizontal",
306
- className: i
291
+ ref: v,
292
+ className: R({
293
+ intent: u,
294
+ size: d,
295
+ hasMenu: w,
296
+ orientation: f ?? "horizontal",
297
+ className: a
307
298
  }),
308
- render: v,
299
+ render: y,
309
300
  disabled: n,
310
301
  value: t,
311
302
  onFocus: ({ target: e }) => e.scrollIntoView({
@@ -313,33 +304,33 @@ var z = a([
313
304
  block: "nearest",
314
305
  inline: "nearest"
315
306
  }),
316
- onKeyDown: x,
317
- "aria-haspopup": S ? "true" : void 0,
318
- ...c,
319
- children: r
307
+ onKeyDown: S,
308
+ "aria-haspopup": w ? "true" : void 0,
309
+ ...l,
310
+ children: x
320
311
  });
321
- return S ? /* @__PURE__ */ h("div", {
322
- className: d === "vertical" ? "relative w-full" : "relative",
323
- children: [E, /* @__PURE__ */ m("div", {
312
+ return w ? /* @__PURE__ */ g("div", {
313
+ className: f === "vertical" ? "relative w-full" : "relative",
314
+ children: [E, /* @__PURE__ */ h("div", {
324
315
  className: "right-md mr-md pointer-events-auto absolute top-1/2 -translate-y-1/2",
325
- children: /* @__PURE__ */ m(R, {
326
- popoverSide: w,
327
- popoverTriggerRef: p,
328
- children: (e) => s?.({ Popover: e })
316
+ children: /* @__PURE__ */ h(L, {
317
+ popoverSide: T,
318
+ popoverTriggerRef: m,
319
+ children: (e) => c?.({ Popover: e })
329
320
  })
330
321
  })]
331
322
  }) : E;
332
323
  };
333
- B.displayName = "Tabs.Trigger";
324
+ z.displayName = "Tabs.Trigger";
334
325
  //#endregion
335
326
  //#region src/tabs/index.ts
336
- var V = Object.assign(E, {
337
- List: N,
338
- Trigger: B,
339
- Content: O
327
+ var B = Object.assign(T, {
328
+ List: M,
329
+ Trigger: z,
330
+ Content: D
340
331
  });
341
- V.displayName = "Tabs", N.displayName = "Tabs.List", B.displayName = "Tabs.Trigger", O.displayName = "Tabs.Content";
332
+ B.displayName = "Tabs", M.displayName = "Tabs.List", z.displayName = "Tabs.Trigger", D.displayName = "Tabs.Content";
342
333
  //#endregion
343
- export { V as Tabs };
334
+ export { B as Tabs };
344
335
 
345
336
  //# sourceMappingURL=index.mjs.map