@fragments-sdk/ui 0.11.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +15 -0
  2. package/dist/assets/ui.css +25 -18
  3. package/dist/blocks/AccountSettings.block.d.ts +1 -1
  4. package/dist/blocks/ActivityFeed.block.d.ts +1 -1
  5. package/dist/blocks/ActivityFeedSkeleton.block.d.ts +1 -1
  6. package/dist/blocks/BlogEditor.block.d.ts +1 -1
  7. package/dist/blocks/ChatInterface.block.d.ts +1 -1
  8. package/dist/blocks/ChatMessages.block.d.ts +1 -1
  9. package/dist/blocks/CheckoutForm.block.d.ts +1 -1
  10. package/dist/blocks/CommandPalette.block.d.ts +1 -1
  11. package/dist/blocks/ContactForm.block.d.ts +1 -1
  12. package/dist/blocks/DashboardLayout.block.d.ts +1 -1
  13. package/dist/blocks/DashboardPage.block.d.ts +1 -1
  14. package/dist/blocks/DashboardSkeleton.block.d.ts +1 -1
  15. package/dist/blocks/DataTable.block.d.ts +1 -1
  16. package/dist/blocks/EmptyState.block.d.ts +1 -1
  17. package/dist/blocks/FAQSection.block.d.ts +1 -1
  18. package/dist/blocks/FeatureGrid.block.d.ts +1 -1
  19. package/dist/blocks/HeroSection.block.d.ts +1 -1
  20. package/dist/blocks/LoginForm.block.d.ts +1 -1
  21. package/dist/blocks/NavigationHeader.block.d.ts +1 -1
  22. package/dist/blocks/PaginatedTable.block.d.ts +1 -1
  23. package/dist/blocks/PricingComparison.block.d.ts +1 -1
  24. package/dist/blocks/ProductCard.block.d.ts +1 -1
  25. package/dist/blocks/RegistrationForm.block.d.ts +1 -1
  26. package/dist/blocks/SettingsDrawer.block.d.ts +1 -1
  27. package/dist/blocks/SettingsPanel.block.d.ts +1 -1
  28. package/dist/blocks/ShoppingCart.block.d.ts +1 -1
  29. package/dist/blocks/StatsCard.block.d.ts +1 -1
  30. package/dist/blocks/StatsCardSkeleton.block.d.ts +1 -1
  31. package/dist/blocks/TableSkeleton.block.d.ts +1 -1
  32. package/dist/blocks/ThinkingStates.block.d.ts +1 -1
  33. package/dist/codeblock.cjs +7 -1
  34. package/dist/codeblock.cjs.map +1 -1
  35. package/dist/codeblock.js +7 -1
  36. package/dist/codeblock.js.map +1 -1
  37. package/dist/components/Accordion/index.cjs +11 -4
  38. package/dist/components/Accordion/index.cjs.map +1 -1
  39. package/dist/components/Accordion/index.d.ts +3 -3
  40. package/dist/components/Accordion/index.d.ts.map +1 -1
  41. package/dist/components/Accordion/index.js +11 -4
  42. package/dist/components/Accordion/index.js.map +1 -1
  43. package/dist/components/Alert/index.cjs.map +1 -1
  44. package/dist/components/Alert/index.d.ts +7 -0
  45. package/dist/components/Alert/index.d.ts.map +1 -1
  46. package/dist/components/Alert/index.js.map +1 -1
  47. package/dist/components/Avatar/index.cjs.map +1 -1
  48. package/dist/components/Avatar/index.d.ts +4 -0
  49. package/dist/components/Avatar/index.d.ts.map +1 -1
  50. package/dist/components/Avatar/index.js.map +1 -1
  51. package/dist/components/Badge/index.cjs.map +1 -1
  52. package/dist/components/Badge/index.d.ts +12 -0
  53. package/dist/components/Badge/index.d.ts.map +1 -1
  54. package/dist/components/Badge/index.js.map +1 -1
  55. package/dist/components/Button/index.cjs +9 -1
  56. package/dist/components/Button/index.cjs.map +1 -1
  57. package/dist/components/Button/index.d.ts +14 -1
  58. package/dist/components/Button/index.d.ts.map +1 -1
  59. package/dist/components/Button/index.js +9 -1
  60. package/dist/components/Button/index.js.map +1 -1
  61. package/dist/components/Card/index.cjs +2 -1
  62. package/dist/components/Card/index.cjs.map +1 -1
  63. package/dist/components/Card/index.d.ts +12 -2
  64. package/dist/components/Card/index.d.ts.map +1 -1
  65. package/dist/components/Card/index.js +2 -1
  66. package/dist/components/Card/index.js.map +1 -1
  67. package/dist/components/Checkbox/index.cjs.map +1 -1
  68. package/dist/components/Checkbox/index.d.ts +6 -1
  69. package/dist/components/Checkbox/index.d.ts.map +1 -1
  70. package/dist/components/Checkbox/index.js.map +1 -1
  71. package/dist/components/Chip/index.cjs +2 -1
  72. package/dist/components/Chip/index.cjs.map +1 -1
  73. package/dist/components/Chip/index.d.ts +10 -3
  74. package/dist/components/Chip/index.d.ts.map +1 -1
  75. package/dist/components/Chip/index.js +2 -1
  76. package/dist/components/Chip/index.js.map +1 -1
  77. package/dist/components/CodeBlock/index.d.ts +1 -1
  78. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  79. package/dist/components/Collapsible/index.cjs +45 -10
  80. package/dist/components/Collapsible/index.cjs.map +1 -1
  81. package/dist/components/Collapsible/index.d.ts +6 -12
  82. package/dist/components/Collapsible/index.d.ts.map +1 -1
  83. package/dist/components/Collapsible/index.js +45 -10
  84. package/dist/components/Collapsible/index.js.map +1 -1
  85. package/dist/components/Combobox/index.cjs +18 -9
  86. package/dist/components/Combobox/index.cjs.map +1 -1
  87. package/dist/components/Combobox/index.d.ts +8 -12
  88. package/dist/components/Combobox/index.d.ts.map +1 -1
  89. package/dist/components/Combobox/index.js +18 -9
  90. package/dist/components/Combobox/index.js.map +1 -1
  91. package/dist/components/Command/index.cjs +54 -21
  92. package/dist/components/Command/index.cjs.map +1 -1
  93. package/dist/components/Command/index.d.ts +2 -2
  94. package/dist/components/Command/index.d.ts.map +1 -1
  95. package/dist/components/Command/index.js +54 -21
  96. package/dist/components/Command/index.js.map +1 -1
  97. package/dist/components/DataTable/index.cjs +13 -1
  98. package/dist/components/DataTable/index.cjs.map +1 -1
  99. package/dist/components/DataTable/index.d.ts.map +1 -1
  100. package/dist/components/DataTable/index.js +13 -1
  101. package/dist/components/DataTable/index.js.map +1 -1
  102. package/dist/components/DatePicker/index.d.ts +2 -3
  103. package/dist/components/DatePicker/index.d.ts.map +1 -1
  104. package/dist/components/Dialog/index.cjs +12 -9
  105. package/dist/components/Dialog/index.cjs.map +1 -1
  106. package/dist/components/Dialog/index.d.ts +20 -12
  107. package/dist/components/Dialog/index.d.ts.map +1 -1
  108. package/dist/components/Dialog/index.js +12 -9
  109. package/dist/components/Dialog/index.js.map +1 -1
  110. package/dist/components/Drawer/index.cjs +12 -9
  111. package/dist/components/Drawer/index.cjs.map +1 -1
  112. package/dist/components/Drawer/index.d.ts +22 -12
  113. package/dist/components/Drawer/index.d.ts.map +1 -1
  114. package/dist/components/Drawer/index.js +12 -9
  115. package/dist/components/Drawer/index.js.map +1 -1
  116. package/dist/components/Grid/index.cjs +4 -1
  117. package/dist/components/Grid/index.cjs.map +1 -1
  118. package/dist/components/Grid/index.d.ts +6 -2
  119. package/dist/components/Grid/index.d.ts.map +1 -1
  120. package/dist/components/Grid/index.js +4 -1
  121. package/dist/components/Grid/index.js.map +1 -1
  122. package/dist/components/Input/index.cjs.map +1 -1
  123. package/dist/components/Input/index.d.ts +15 -1
  124. package/dist/components/Input/index.d.ts.map +1 -1
  125. package/dist/components/Input/index.js.map +1 -1
  126. package/dist/components/Menu/index.cjs +30 -16
  127. package/dist/components/Menu/index.cjs.map +1 -1
  128. package/dist/components/Menu/index.d.ts +17 -25
  129. package/dist/components/Menu/index.d.ts.map +1 -1
  130. package/dist/components/Menu/index.js +30 -16
  131. package/dist/components/Menu/index.js.map +1 -1
  132. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  133. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +1 -0
  134. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  135. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  136. package/dist/components/NavigationMenu/index.cjs +43 -11
  137. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  138. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  139. package/dist/components/NavigationMenu/index.js +43 -11
  140. package/dist/components/NavigationMenu/index.js.map +1 -1
  141. package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
  142. package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
  143. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
  144. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
  145. package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
  146. package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
  147. package/dist/components/Popover/index.cjs +11 -10
  148. package/dist/components/Popover/index.cjs.map +1 -1
  149. package/dist/components/Popover/index.d.ts +17 -12
  150. package/dist/components/Popover/index.d.ts.map +1 -1
  151. package/dist/components/Popover/index.js +11 -10
  152. package/dist/components/Popover/index.js.map +1 -1
  153. package/dist/components/RadioGroup/index.cjs.map +1 -1
  154. package/dist/components/RadioGroup/index.d.ts +4 -0
  155. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  156. package/dist/components/RadioGroup/index.js.map +1 -1
  157. package/dist/components/Select/index.cjs +7 -6
  158. package/dist/components/Select/index.cjs.map +1 -1
  159. package/dist/components/Select/index.d.ts +20 -9
  160. package/dist/components/Select/index.d.ts.map +1 -1
  161. package/dist/components/Select/index.js +7 -6
  162. package/dist/components/Select/index.js.map +1 -1
  163. package/dist/components/Sidebar/index.cjs +71 -24
  164. package/dist/components/Sidebar/index.cjs.map +1 -1
  165. package/dist/components/Sidebar/index.d.ts +21 -33
  166. package/dist/components/Sidebar/index.d.ts.map +1 -1
  167. package/dist/components/Sidebar/index.js +71 -24
  168. package/dist/components/Sidebar/index.js.map +1 -1
  169. package/dist/components/Slider/index.cjs +3 -1
  170. package/dist/components/Slider/index.cjs.map +1 -1
  171. package/dist/components/Slider/index.d.ts +10 -0
  172. package/dist/components/Slider/index.d.ts.map +1 -1
  173. package/dist/components/Slider/index.js +3 -1
  174. package/dist/components/Slider/index.js.map +1 -1
  175. package/dist/components/Stack/index.cjs +6 -0
  176. package/dist/components/Stack/index.cjs.map +1 -1
  177. package/dist/components/Stack/index.d.ts +12 -6
  178. package/dist/components/Stack/index.d.ts.map +1 -1
  179. package/dist/components/Stack/index.js +6 -0
  180. package/dist/components/Stack/index.js.map +1 -1
  181. package/dist/components/Tabs/index.cjs.map +1 -1
  182. package/dist/components/Tabs/index.d.ts +13 -1
  183. package/dist/components/Tabs/index.d.ts.map +1 -1
  184. package/dist/components/Tabs/index.js.map +1 -1
  185. package/dist/components/Text/Text.module.scss.cjs +44 -32
  186. package/dist/components/Text/Text.module.scss.cjs.map +1 -1
  187. package/dist/components/Text/Text.module.scss.js +44 -32
  188. package/dist/components/Text/Text.module.scss.js.map +1 -1
  189. package/dist/components/Text/index.cjs.map +1 -1
  190. package/dist/components/Text/index.d.ts +18 -3
  191. package/dist/components/Text/index.d.ts.map +1 -1
  192. package/dist/components/Text/index.js.map +1 -1
  193. package/dist/components/Theme/index.cjs.map +1 -1
  194. package/dist/components/Theme/index.d.ts +12 -0
  195. package/dist/components/Theme/index.d.ts.map +1 -1
  196. package/dist/components/Theme/index.js.map +1 -1
  197. package/dist/components/Toggle/index.cjs +2 -1
  198. package/dist/components/Toggle/index.cjs.map +1 -1
  199. package/dist/components/Toggle/index.d.ts +9 -0
  200. package/dist/components/Toggle/index.d.ts.map +1 -1
  201. package/dist/components/Toggle/index.js +2 -1
  202. package/dist/components/Toggle/index.js.map +1 -1
  203. package/dist/components/ToggleGroup/index.cjs +4 -1
  204. package/dist/components/ToggleGroup/index.cjs.map +1 -1
  205. package/dist/components/ToggleGroup/index.d.ts +13 -4
  206. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  207. package/dist/components/ToggleGroup/index.js +4 -1
  208. package/dist/components/ToggleGroup/index.js.map +1 -1
  209. package/dist/components/Tooltip/index.cjs +20 -10
  210. package/dist/components/Tooltip/index.cjs.map +1 -1
  211. package/dist/components/Tooltip/index.d.ts +5 -1
  212. package/dist/components/Tooltip/index.d.ts.map +1 -1
  213. package/dist/components/Tooltip/index.js +20 -10
  214. package/dist/components/Tooltip/index.js.map +1 -1
  215. package/dist/datepicker.cjs +24 -10
  216. package/dist/datepicker.cjs.map +1 -1
  217. package/dist/datepicker.js +24 -10
  218. package/dist/datepicker.js.map +1 -1
  219. package/dist/index.cjs +4 -0
  220. package/dist/index.cjs.map +1 -1
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +4 -0
  223. package/dist/index.js.map +1 -1
  224. package/dist/utils/css-warning.cjs +18 -0
  225. package/dist/utils/css-warning.cjs.map +1 -0
  226. package/dist/utils/css-warning.d.ts +2 -0
  227. package/dist/utils/css-warning.d.ts.map +1 -0
  228. package/dist/utils/css-warning.js +18 -0
  229. package/dist/utils/css-warning.js.map +1 -0
  230. package/fragments.json +1 -1
  231. package/package.json +2 -2
  232. package/src/components/Accordion/Accordion.test.tsx +33 -0
  233. package/src/components/Accordion/index.tsx +10 -3
  234. package/src/components/Alert/index.tsx +7 -0
  235. package/src/components/Avatar/index.tsx +4 -0
  236. package/src/components/Badge/Badge.fragment.tsx +10 -2
  237. package/src/components/Badge/index.tsx +12 -0
  238. package/src/components/Button/Button.fragment.tsx +12 -2
  239. package/src/components/Button/Button.test.tsx +16 -0
  240. package/src/components/Button/index.tsx +27 -2
  241. package/src/components/Card/Card.fragment.tsx +14 -2
  242. package/src/components/Card/Card.test.tsx +5 -0
  243. package/src/components/Card/index.tsx +15 -2
  244. package/src/components/Checkbox/index.tsx +6 -1
  245. package/src/components/Chip/Chip.fragment.tsx +12 -2
  246. package/src/components/Chip/Chip.test.tsx +5 -0
  247. package/src/components/Chip/index.tsx +14 -4
  248. package/src/components/CodeBlock/index.tsx +13 -2
  249. package/src/components/Collapsible/Collapsible.test.tsx +41 -0
  250. package/src/components/Collapsible/index.tsx +53 -16
  251. package/src/components/Combobox/Combobox.test.tsx +55 -0
  252. package/src/components/Combobox/index.tsx +23 -17
  253. package/src/components/Command/Command.test.tsx +93 -0
  254. package/src/components/Command/index.tsx +61 -18
  255. package/src/components/DataTable/DataTable.test.tsx +11 -2
  256. package/src/components/DataTable/index.tsx +22 -2
  257. package/src/components/DatePicker/DatePicker.test.tsx +79 -0
  258. package/src/components/DatePicker/index.tsx +29 -14
  259. package/src/components/Dialog/Dialog.test.tsx +23 -0
  260. package/src/components/Dialog/index.tsx +27 -16
  261. package/src/components/Drawer/Drawer.test.tsx +27 -0
  262. package/src/components/Drawer/index.tsx +29 -16
  263. package/src/components/Grid/Grid.fragment.tsx +14 -2
  264. package/src/components/Grid/Grid.test.tsx +6 -0
  265. package/src/components/Grid/index.tsx +12 -3
  266. package/src/components/Input/index.tsx +15 -1
  267. package/src/components/Menu/index.tsx +35 -30
  268. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +1 -1
  269. package/src/components/NavigationMenu/NavigationMenu.test.tsx +40 -4
  270. package/src/components/NavigationMenu/NavigationMenuContext.ts +3 -0
  271. package/src/components/NavigationMenu/index.tsx +49 -13
  272. package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
  273. package/src/components/Popover/Popover.test.tsx +23 -0
  274. package/src/components/Popover/index.tsx +24 -18
  275. package/src/components/RadioGroup/index.tsx +4 -0
  276. package/src/components/Select/Select.test.tsx +41 -0
  277. package/src/components/Select/index.tsx +24 -12
  278. package/src/components/Sidebar/Sidebar.test.tsx +83 -4
  279. package/src/components/Sidebar/index.tsx +87 -45
  280. package/src/components/Slider/Slider.fragment.tsx +5 -1
  281. package/src/components/Slider/Slider.test.tsx +6 -0
  282. package/src/components/Slider/index.tsx +13 -1
  283. package/src/components/Stack/Stack.fragment.tsx +22 -2
  284. package/src/components/Stack/Stack.test.tsx +6 -0
  285. package/src/components/Stack/index.tsx +20 -6
  286. package/src/components/Tabs/index.tsx +13 -1
  287. package/src/components/Text/Text.fragment.tsx +10 -8
  288. package/src/components/Text/Text.module.scss +8 -2
  289. package/src/components/Text/Text.test.tsx +15 -0
  290. package/src/components/Text/index.tsx +18 -3
  291. package/src/components/Theme/index.tsx +12 -0
  292. package/src/components/Toggle/Toggle.fragment.tsx +5 -1
  293. package/src/components/Toggle/Toggle.test.tsx +19 -0
  294. package/src/components/Toggle/index.tsx +11 -1
  295. package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +5 -2
  296. package/src/components/ToggleGroup/ToggleGroup.test.tsx +20 -0
  297. package/src/components/ToggleGroup/index.tsx +15 -4
  298. package/src/components/Tooltip/Tooltip.test.tsx +17 -0
  299. package/src/components/Tooltip/index.tsx +58 -34
  300. package/src/index.ts +6 -0
  301. package/src/tokens/_seeds.scss +5 -3
  302. package/src/tokens/_variables.scss +2 -0
  303. package/src/utils/css-warning.ts +29 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n children: React.ReactNode;\n value?: SelectValue | null;\n defaultValue?: SelectValue;\n onValueChange?: (value: SelectValue | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface SelectItemProps {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface SelectGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SelectGroupLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["jsx","React","BaseSelect","styles","jsxs","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Select dropdown for choosing from a list of options.\n * @see https://usefragments.com/components/select\n */\nexport interface SelectProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: SelectValue | null;\n /** Default value for uncontrolled usage */\n defaultValue?: SelectValue;\n /** Called when selection changes */\n onValueChange?: (value: SelectValue | null) => void;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the select is non-interactive */\n disabled?: boolean;\n /** Whether a selection is required */\n required?: boolean;\n /** Form field name */\n name?: string;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n}\n\nexport interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface SelectGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className, ...htmlProps }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group {...htmlProps} className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel {...htmlProps} className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["jsx","React","BaseSelect","styles","jsxs","Fragment"],"mappings":"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"}
@@ -5,17 +5,31 @@ export interface SelectOption {
5
5
  label: string;
6
6
  disabled?: boolean;
7
7
  }
8
+ /**
9
+ * Select dropdown for choosing from a list of options.
10
+ * @see https://usefragments.com/components/select
11
+ */
8
12
  export interface SelectProps {
9
13
  children: React.ReactNode;
14
+ /** Controlled selected value */
10
15
  value?: SelectValue | null;
16
+ /** Default value for uncontrolled usage */
11
17
  defaultValue?: SelectValue;
18
+ /** Called when selection changes */
12
19
  onValueChange?: (value: SelectValue | null) => void;
20
+ /** Controlled open state */
13
21
  open?: boolean;
22
+ /** Default open state */
14
23
  defaultOpen?: boolean;
24
+ /** Called when open state changes */
15
25
  onOpenChange?: (open: boolean) => void;
26
+ /** Whether the select is non-interactive */
16
27
  disabled?: boolean;
28
+ /** Whether a selection is required */
17
29
  required?: boolean;
30
+ /** Form field name */
18
31
  name?: string;
32
+ /** Placeholder text when no value is selected */
19
33
  placeholder?: string;
20
34
  }
21
35
  export interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
@@ -29,26 +43,23 @@ export interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement>
29
43
  /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */
30
44
  maxVisibleItems?: number;
31
45
  }
32
- export interface SelectItemProps {
46
+ export interface SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
33
47
  children: React.ReactNode;
34
48
  value: SelectValue;
35
49
  disabled?: boolean;
36
- className?: string;
37
50
  }
38
- export interface SelectGroupProps {
51
+ export interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {
39
52
  children: React.ReactNode;
40
- className?: string;
41
53
  }
42
- export interface SelectGroupLabelProps {
54
+ export interface SelectGroupLabelProps extends React.HTMLAttributes<HTMLElement> {
43
55
  children: React.ReactNode;
44
- className?: string;
45
56
  }
46
57
  declare function SelectRoot({ children, value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, disabled, required, name, placeholder, }: SelectProps): import("react/jsx-runtime").JSX.Element;
47
58
  declare function SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps): import("react/jsx-runtime").JSX.Element;
48
59
  declare function SelectContent({ children, className, sideOffset, align, maxVisibleItems, ...htmlProps }: SelectContentProps): import("react/jsx-runtime").JSX.Element;
49
- declare function SelectItem({ children, value, disabled, className }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
50
- declare function SelectGroup({ children, className }: SelectGroupProps): import("react/jsx-runtime").JSX.Element;
51
- declare function SelectGroupLabel({ children, className }: SelectGroupLabelProps): import("react/jsx-runtime").JSX.Element;
60
+ declare function SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
61
+ declare function SelectGroup({ children, className, ...htmlProps }: SelectGroupProps): import("react/jsx-runtime").JSX.Element;
62
+ declare function SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps): import("react/jsx-runtime").JSX.Element;
52
63
  export declare const Select: typeof SelectRoot & {
53
64
  Trigger: typeof SelectTrigger;
54
65
  Content: typeof SelectContent;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"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"}
@@ -137,7 +137,7 @@ function SelectContent({
137
137
  }
138
138
  ) });
139
139
  }
140
- function SelectItem({ children, value, disabled, className }) {
140
+ function SelectItem({ children, value, disabled, className, ...htmlProps }) {
141
141
  const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);
142
142
  const classes = [styles.item, className].filter(Boolean).join(" ");
143
143
  React.useEffect(() => {
@@ -146,20 +146,21 @@ function SelectItem({ children, value, disabled, className }) {
146
146
  incrementItemsVersion();
147
147
  return () => {
148
148
  items.delete(value);
149
+ incrementItemsVersion();
149
150
  };
150
151
  }, [itemsRef, incrementItemsVersion, value, children]);
151
- return /* @__PURE__ */ jsxs(Select$1.Item, { value, disabled, className: classes, children: [
152
+ return /* @__PURE__ */ jsxs(Select$1.Item, { ...htmlProps, value, disabled, className: classes, children: [
152
153
  /* @__PURE__ */ jsx(Select$1.ItemText, { children }),
153
154
  /* @__PURE__ */ jsx(Select$1.ItemIndicator, { className: styles.itemIndicator, children: /* @__PURE__ */ jsx(CheckIcon, {}) })
154
155
  ] });
155
156
  }
156
- function SelectGroup({ children, className }) {
157
+ function SelectGroup({ children, className, ...htmlProps }) {
157
158
  const classes = [styles.group, className].filter(Boolean).join(" ");
158
- return /* @__PURE__ */ jsx(Select$1.Group, { className: classes, children });
159
+ return /* @__PURE__ */ jsx(Select$1.Group, { ...htmlProps, className: classes, children });
159
160
  }
160
- function SelectGroupLabel({ children, className }) {
161
+ function SelectGroupLabel({ children, className, ...htmlProps }) {
161
162
  const classes = [styles.groupLabel, className].filter(Boolean).join(" ");
162
- return /* @__PURE__ */ jsx(Select$1.GroupLabel, { className: classes, children });
163
+ return /* @__PURE__ */ jsx(Select$1.GroupLabel, { ...htmlProps, className: classes, children });
163
164
  }
164
165
  const Select = Object.assign(SelectRoot, {
165
166
  Trigger: SelectTrigger,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n children: React.ReactNode;\n value?: SelectValue | null;\n defaultValue?: SelectValue;\n onValueChange?: (value: SelectValue | null) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n required?: boolean;\n name?: string;\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface SelectItemProps {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n className?: string;\n}\n\nexport interface SelectGroupProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport interface SelectGroupLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["BaseSelect"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Select/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Select as BaseSelect } from '@base-ui/react/select';\nimport styles from './Select.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type SelectValue = string;\n\nexport interface SelectOption {\n value: SelectValue;\n label: string;\n disabled?: boolean;\n}\n\n/**\n * Select dropdown for choosing from a list of options.\n * @see https://usefragments.com/components/select\n */\nexport interface SelectProps {\n children: React.ReactNode;\n /** Controlled selected value */\n value?: SelectValue | null;\n /** Default value for uncontrolled usage */\n defaultValue?: SelectValue;\n /** Called when selection changes */\n onValueChange?: (value: SelectValue | null) => void;\n /** Controlled open state */\n open?: boolean;\n /** Default open state */\n defaultOpen?: boolean;\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Whether the select is non-interactive */\n disabled?: boolean;\n /** Whether a selection is required */\n required?: boolean;\n /** Form field name */\n name?: string;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n}\n\nexport interface SelectTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children?: React.ReactNode;\n placeholder?: string;\n}\n\nexport interface SelectContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n sideOffset?: number;\n align?: 'start' | 'center' | 'end';\n /** Maximum number of visible options before scrolling. Shows half of the next item as a scroll hint. @default 4 */\n maxVisibleItems?: number;\n}\n\nexport interface SelectItemProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {\n children: React.ReactNode;\n value: SelectValue;\n disabled?: boolean;\n}\n\nexport interface SelectGroupProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\nexport interface SelectGroupLabelProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Icons\n// ============================================\n\nfunction ChevronDownIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction CheckIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\n// ============================================\n// Context for Select state\n// ============================================\n\ninterface SelectContextValue {\n placeholder?: string;\n value?: SelectValue | null;\n itemsRef: React.MutableRefObject<Map<SelectValue, React.ReactNode>>;\n // Version counter to trigger re-renders when items register\n itemsVersion: number;\n incrementItemsVersion: () => void;\n}\n\nconst SelectContext = React.createContext<SelectContextValue>({\n itemsRef: { current: new Map() },\n itemsVersion: 0,\n incrementItemsVersion: () => {},\n});\n\n// ============================================\n// Components\n// ============================================\n\nfunction SelectRoot({\n children,\n value,\n defaultValue,\n onValueChange,\n open,\n defaultOpen,\n onOpenChange,\n disabled,\n required,\n name,\n placeholder,\n}: SelectProps) {\n // Track current value for controlled and uncontrolled modes\n const [internalValue, setInternalValue] = React.useState<SelectValue | null | undefined>(\n value ?? defaultValue ?? null\n );\n\n // Registry for item children - allows trigger to render selected item's content\n const itemsRef = React.useRef<Map<SelectValue, React.ReactNode>>(new Map());\n\n // Version counter to trigger trigger re-render when items register\n const [itemsVersion, setItemsVersion] = React.useState(0);\n const incrementItemsVersion = React.useCallback(() => {\n setItemsVersion((v) => v + 1);\n }, []);\n\n // Sync internal value with controlled value\n React.useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n }\n }, [value]);\n\n const handleValueChange = React.useCallback(\n (newValue: SelectValue | null) => {\n if (value === undefined) {\n // Uncontrolled mode\n setInternalValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [value, onValueChange]\n );\n\n const contextValue = React.useMemo(\n () => ({\n placeholder,\n value: value !== undefined ? value : internalValue,\n itemsRef,\n itemsVersion,\n incrementItemsVersion,\n }),\n [placeholder, value, internalValue, itemsVersion, incrementItemsVersion]\n );\n\n return (\n <SelectContext.Provider value={contextValue}>\n <BaseSelect.Root\n value={value}\n defaultValue={defaultValue}\n onValueChange={handleValueChange}\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={onOpenChange}\n disabled={disabled}\n required={required}\n name={name}\n >\n {children}\n </BaseSelect.Root>\n </SelectContext.Provider>\n );\n}\n\nfunction SelectTrigger({ children, placeholder, className, ...htmlProps }: SelectTriggerProps) {\n const context = React.useContext(SelectContext);\n const placeholderText = placeholder ?? context.placeholder;\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Get the selected item's children from the registry\n // Note: itemsVersion in context ensures we re-render when items register\n const selectedContent = context.value != null\n ? context.itemsRef.current.get(context.value)\n : null;\n\n // Determine what to show in the value area\n \n const _version = context.itemsVersion; // Force dependency on itemsVersion for re-render\n const displayContent = selectedContent ?? (\n placeholderText ? <span className={styles.placeholder}>{placeholderText}</span> : null\n );\n\n return (\n <BaseSelect.Trigger {...htmlProps} className={classes}>\n {children ?? (\n <>\n <span className={styles.value}>{displayContent}</span>\n <BaseSelect.Icon className={styles.icon}>\n <ChevronDownIcon />\n </BaseSelect.Icon>\n </>\n )}\n </BaseSelect.Trigger>\n );\n}\n\nfunction SelectContent({\n children,\n className,\n sideOffset = 4,\n align = 'start',\n maxVisibleItems,\n ...htmlProps\n}: SelectContentProps) {\n const popupClasses = [styles.popup, className].filter(Boolean).join(' ');\n\n const popupStyle = maxVisibleItems != null\n ? { '--fui-select-max-items': maxVisibleItems + 0.5, ...htmlProps.style } as React.CSSProperties\n : htmlProps.style;\n\n return (\n <BaseSelect.Portal>\n <BaseSelect.Positioner\n sideOffset={sideOffset}\n align={align}\n className={styles.positioner}\n >\n <BaseSelect.Popup {...htmlProps} className={popupClasses} style={popupStyle}>\n {children}\n </BaseSelect.Popup>\n </BaseSelect.Positioner>\n </BaseSelect.Portal>\n );\n}\n\nfunction SelectItem({ children, value, disabled, className, ...htmlProps }: SelectItemProps) {\n const { itemsRef, incrementItemsVersion } = React.useContext(SelectContext);\n const classes = [styles.item, className].filter(Boolean).join(' ');\n\n // Register this item's children in the registry so the trigger can display them\n React.useEffect(() => {\n const items = itemsRef.current;\n items.set(value, children);\n // Trigger re-render of trigger to show the registered content\n incrementItemsVersion();\n return () => {\n items.delete(value);\n incrementItemsVersion();\n };\n }, [itemsRef, incrementItemsVersion, value, children]);\n\n return (\n <BaseSelect.Item {...htmlProps} value={value} disabled={disabled} className={classes}>\n <BaseSelect.ItemText>{children}</BaseSelect.ItemText>\n <BaseSelect.ItemIndicator className={styles.itemIndicator}>\n <CheckIcon />\n </BaseSelect.ItemIndicator>\n </BaseSelect.Item>\n );\n}\n\nfunction SelectGroup({ children, className, ...htmlProps }: SelectGroupProps) {\n const classes = [styles.group, className].filter(Boolean).join(' ');\n return <BaseSelect.Group {...htmlProps} className={classes}>{children}</BaseSelect.Group>;\n}\n\nfunction SelectGroupLabel({ children, className, ...htmlProps }: SelectGroupLabelProps) {\n const classes = [styles.groupLabel, className].filter(Boolean).join(' ');\n return <BaseSelect.GroupLabel {...htmlProps} className={classes}>{children}</BaseSelect.GroupLabel>;\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Select = Object.assign(SelectRoot, {\n Trigger: SelectTrigger,\n Content: SelectContent,\n Item: SelectItem,\n Group: SelectGroup,\n GroupLabel: SelectGroupLabel,\n});\n\n// Re-export individual components\nexport {\n SelectRoot,\n SelectTrigger,\n SelectContent,\n SelectItem,\n SelectGroup,\n SelectGroupLabel,\n};\n"],"names":["BaseSelect"],"mappings":";;;;AA6EA,SAAS,kBAAkB;AACzB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAA,oBAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAEA,SAAS,YAAY;AACnB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAY;AAAA,MAEZ,UAAA,oBAAC,YAAA,EAAS,QAAO,iBAAA,CAAiB;AAAA,IAAA;AAAA,EAAA;AAGxC;AAeA,MAAM,gBAAgB,MAAM,cAAkC;AAAA,EAC5D,UAAU,EAAE,SAAS,oBAAI,MAAI;AAAA,EAC7B,cAAc;AAAA,EACd,uBAAuB,MAAM;AAAA,EAAC;AAChC,CAAC;AAMD,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgB;AAEd,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM;AAAA,IAC9C,SAAS,gBAAgB;AAAA,EAAA;AAI3B,QAAM,WAAW,MAAM,OAA0C,oBAAI,KAAK;AAG1E,QAAM,CAAC,cAAc,eAAe,IAAI,MAAM,SAAS,CAAC;AACxD,QAAM,wBAAwB,MAAM,YAAY,MAAM;AACpD,oBAAgB,CAAC,MAAM,IAAI,CAAC;AAAA,EAC9B,GAAG,CAAA,CAAE;AAGL,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,QAAW;AACvB,uBAAiB,KAAK;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,oBAAoB,MAAM;AAAA,IAC9B,CAAC,aAAiC;AAChC,UAAI,UAAU,QAAW;AAEvB,yBAAiB,QAAQ;AAAA,MAC3B;AACA,qDAAgB;AAAA,IAClB;AAAA,IACA,CAAC,OAAO,aAAa;AAAA,EAAA;AAGvB,QAAM,eAAe,MAAM;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,MACA,OAAO,UAAU,SAAY,QAAQ;AAAA,MACrC;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,CAAC,aAAa,OAAO,eAAe,cAAc,qBAAqB;AAAA,EAAA;AAGzE,SACE,oBAAC,cAAc,UAAd,EAAuB,OAAO,cAC7B,UAAA;AAAA,IAACA,SAAW;AAAA,IAAX;AAAA,MACC;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAAS,cAAc,EAAE,UAAU,aAAa,WAAW,GAAG,aAAiC;AAC7F,QAAM,UAAU,MAAM,WAAW,aAAa;AAC9C,QAAM,kBAAkB,eAAe,QAAQ;AAE/C,QAAM,UAAU,CAAC,OAAO,SAAS,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAIpE,QAAM,kBAAkB,QAAQ,SAAS,OACrC,QAAQ,SAAS,QAAQ,IAAI,QAAQ,KAAK,IAC1C;AAIa,UAAQ;AACzB,QAAM,iBAAiB,oBACrB,kBAAkB,oBAAC,UAAK,WAAW,OAAO,aAAc,UAAA,gBAAA,CAAgB,IAAU;AAGpF,SACE,oBAACA,SAAW,SAAX,EAAoB,GAAG,WAAW,WAAW,SAC3C,UAAA,YACC,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAW,OAAO,OAAQ,UAAA,gBAAe;AAAA,IAC/C,oBAACA,SAAW,MAAX,EAAgB,WAAW,OAAO,MACjC,UAAA,oBAAC,iBAAA,CAAA,CAAgB,EAAA,CACnB;AAAA,EAAA,EAAA,CACF,EAAA,CAEJ;AAEJ;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAAuB;AACrB,QAAM,eAAe,CAAC,OAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEvE,QAAM,aAAa,mBAAmB,OAClC,EAAE,0BAA0B,kBAAkB,KAAK,GAAG,UAAU,MAAA,IAChE,UAAU;AAEd,SACE,oBAACA,SAAW,QAAX,EACC,UAAA;AAAA,IAACA,SAAW;AAAA,IAAX;AAAA,MACC;AAAA,MACA;AAAA,MACA,WAAW,OAAO;AAAA,MAElB,UAAA,oBAACA,SAAW,OAAX,EAAkB,GAAG,WAAW,WAAW,cAAc,OAAO,YAC9D,SAAA,CACH;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEA,SAAS,WAAW,EAAE,UAAU,OAAO,UAAU,WAAW,GAAG,aAA8B;AAC3F,QAAM,EAAE,UAAU,sBAAA,IAA0B,MAAM,WAAW,aAAa;AAC1E,QAAM,UAAU,CAAC,OAAO,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAGjE,QAAM,UAAU,MAAM;AACpB,UAAM,QAAQ,SAAS;AACvB,UAAM,IAAI,OAAO,QAAQ;AAEzB,0BAAA;AACA,WAAO,MAAM;AACX,YAAM,OAAO,KAAK;AAClB,4BAAA;AAAA,IACF;AAAA,EACF,GAAG,CAAC,UAAU,uBAAuB,OAAO,QAAQ,CAAC;AAErD,SACE,qBAACA,SAAW,MAAX,EAAiB,GAAG,WAAW,OAAc,UAAoB,WAAW,SAC3E,UAAA;AAAA,IAAA,oBAACA,SAAW,UAAX,EAAqB,SAAA,CAAS;AAAA,IAC/B,oBAACA,SAAW,eAAX,EAAyB,WAAW,OAAO,eAC1C,UAAA,oBAAC,WAAA,CAAA,CAAU,EAAA,CACb;AAAA,EAAA,GACF;AAEJ;AAEA,SAAS,YAAY,EAAE,UAAU,WAAW,GAAG,aAA+B;AAC5E,QAAM,UAAU,CAAC,OAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAClE,SAAO,oBAACA,SAAW,OAAX,EAAkB,GAAG,WAAW,WAAW,SAAU,UAAS;AACxE;AAEA,SAAS,iBAAiB,EAAE,UAAU,WAAW,GAAG,aAAoC;AACtF,QAAM,UAAU,CAAC,OAAO,YAAY,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACvE,SAAO,oBAACA,SAAW,YAAX,EAAuB,GAAG,WAAW,WAAW,SAAU,UAAS;AAC7E;AAMO,MAAM,SAAS,OAAO,OAAO,YAAY;AAAA,EAC9C,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AAAA,EACN,OAAO;AAAA,EACP,YAAY;AACd,CAAC;"}
@@ -26,6 +26,13 @@ function _interopNamespaceDefault(e) {
26
26
  return Object.freeze(n);
27
27
  }
28
28
  const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
29
+ function composeEventHandlers(userHandler, internalHandler) {
30
+ return (event) => {
31
+ userHandler == null ? void 0 : userHandler(event);
32
+ if (event.defaultPrevented) return;
33
+ internalHandler(event);
34
+ };
35
+ }
29
36
  function MenuIcon() {
30
37
  return /* @__PURE__ */ jsxRuntime.jsx(
31
38
  "svg",
@@ -370,16 +377,26 @@ function SidebarRoot({
370
377
  );
371
378
  return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: content });
372
379
  }
373
- function SidebarHeader({ children, collapsedContent, className }) {
380
+ function SidebarHeader({
381
+ children,
382
+ collapsedContent,
383
+ className,
384
+ ...htmlProps
385
+ }) {
374
386
  const { collapsed, isMobile } = useSidebarContext();
375
387
  const isCollapsed = collapsed && !isMobile;
376
388
  const classes = [Sidebar_module.default.header, className].filter(Boolean).join(" ");
377
389
  const content = isCollapsed && collapsedContent ? collapsedContent : children;
378
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, children: content });
390
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children: content });
379
391
  }
380
- function SidebarNav({ children, "aria-label": ariaLabel = "Main navigation", className }) {
392
+ function SidebarNav({
393
+ children,
394
+ "aria-label": ariaLabel = "Main navigation",
395
+ className,
396
+ ...htmlProps
397
+ }) {
381
398
  const classes = [Sidebar_module.default.nav, className].filter(Boolean).join(" ");
382
- return /* @__PURE__ */ jsxRuntime.jsx("nav", { className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(index$2.ScrollArea, { orientation: "vertical", showFades: true, className: Sidebar_module.default.navScrollArea, children }) });
399
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { ...htmlProps, className: classes, "aria-label": ariaLabel, children: /* @__PURE__ */ jsxRuntime.jsx(index$2.ScrollArea, { orientation: "vertical", showFades: true, className: Sidebar_module.default.navScrollArea, children }) });
383
400
  }
384
401
  function SidebarSection({
385
402
  children,
@@ -387,7 +404,8 @@ function SidebarSection({
387
404
  action,
388
405
  collapsible: isCollapsibleProp = false,
389
406
  defaultOpen = true,
390
- className
407
+ className,
408
+ ...htmlProps
391
409
  }) {
392
410
  const { collapsed, isMobile } = useSidebarContext();
393
411
  const classes = [
@@ -398,7 +416,7 @@ function SidebarSection({
398
416
  const showAction = action && (!collapsed || isMobile);
399
417
  const isCollapsible = isCollapsibleProp && showLabel;
400
418
  if (!isCollapsible) {
401
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes, role: "group", "aria-label": label, children: [
419
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: [
402
420
  (showLabel || showAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.sectionHeader, children: [
403
421
  showLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Sidebar_module.default.sectionLabel, children: label }),
404
422
  showAction && /* @__PURE__ */ jsxRuntime.jsx("div", { className: Sidebar_module.default.sectionActionWrapper, children: action })
@@ -406,7 +424,7 @@ function SidebarSection({
406
424
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: Sidebar_module.default.sectionList, children })
407
425
  ] });
408
426
  }
409
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxRuntime.jsxs(index$1.Collapsible, { defaultOpen, className: Sidebar_module.default.sectionCollapsible, children: [
427
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, role: "group", "aria-label": label, children: /* @__PURE__ */ jsxRuntime.jsxs(index$1.Collapsible, { defaultOpen, className: Sidebar_module.default.sectionCollapsible, children: [
410
428
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.sectionHeader, children: [
411
429
  /* @__PURE__ */ jsxRuntime.jsx(
412
430
  index$1.Collapsible.Trigger,
@@ -425,15 +443,17 @@ function SidebarSectionAction({
425
443
  children,
426
444
  onClick,
427
445
  "aria-label": ariaLabel,
428
- className
446
+ className,
447
+ ...htmlProps
429
448
  }) {
430
449
  const classes = [Sidebar_module.default.sectionAction, className].filter(Boolean).join(" ");
431
450
  return /* @__PURE__ */ jsxRuntime.jsx(
432
451
  "button",
433
452
  {
434
453
  type: "button",
454
+ ...htmlProps,
435
455
  className: classes,
436
- onClick,
456
+ onClick: (event) => onClick == null ? void 0 : onClick(event),
437
457
  "aria-label": ariaLabel,
438
458
  children
439
459
  }
@@ -506,11 +526,16 @@ function SidebarItem({
506
526
  };
507
527
  let itemElement;
508
528
  if (asChild && React__namespace.isValidElement(children)) {
529
+ const childProps = children.props;
509
530
  itemElement = React__namespace.cloneElement(children, {
510
531
  ...itemProps,
511
532
  ...rest,
533
+ onClick: composeEventHandlers(
534
+ childProps.onClick,
535
+ (event) => handleClick(event)
536
+ ),
512
537
  // Merge classNames
513
- className: [classes, children.props.className].filter(Boolean).join(" "),
538
+ className: [classes, childProps.className].filter(Boolean).join(" "),
514
539
  children: itemContent
515
540
  });
516
541
  } else if (href) {
@@ -564,11 +589,17 @@ function SidebarSubItem({
564
589
  function SidebarSubmenu({ children }) {
565
590
  return /* @__PURE__ */ jsxRuntime.jsx("li", { className: Sidebar_module.default.submenuWrapper, children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: Sidebar_module.default.submenu, children }) });
566
591
  }
567
- function SidebarFooter({ children, className }) {
592
+ function SidebarFooter({ children, className, ...htmlProps }) {
568
593
  const classes = [Sidebar_module.default.footer, className].filter(Boolean).join(" ");
569
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, children });
594
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, children });
570
595
  }
571
- function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation", className }) {
596
+ function SidebarTrigger({
597
+ children,
598
+ "aria-label": ariaLabel = "Toggle navigation",
599
+ className,
600
+ onClick,
601
+ ...htmlProps
602
+ }) {
572
603
  const { open, setOpen, isMobile, sidebarId } = useSidebarContext();
573
604
  if (!isMobile) {
574
605
  return null;
@@ -577,9 +608,10 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
577
608
  return /* @__PURE__ */ jsxRuntime.jsx(
578
609
  "button",
579
610
  {
611
+ ...htmlProps,
580
612
  type: "button",
581
613
  className: classes,
582
- onClick: () => setOpen(!open),
614
+ onClick: composeEventHandlers(onClick, () => setOpen(!open)),
583
615
  "aria-label": ariaLabel,
584
616
  "aria-expanded": open,
585
617
  "aria-controls": sidebarId,
@@ -587,7 +619,7 @@ function SidebarTrigger({ children, "aria-label": ariaLabel = "Toggle navigation
587
619
  }
588
620
  );
589
621
  }
590
- function SidebarOverlay({ className }) {
622
+ function SidebarOverlay({ className, onClick, ...htmlProps }) {
591
623
  const { open, setOpen, isMobile } = useSidebarContext();
592
624
  if (!isMobile || !open) {
593
625
  return null;
@@ -596,14 +628,20 @@ function SidebarOverlay({ className }) {
596
628
  return /* @__PURE__ */ jsxRuntime.jsx(
597
629
  "div",
598
630
  {
631
+ ...htmlProps,
599
632
  className: classes,
600
- onClick: () => setOpen(false),
633
+ onClick: composeEventHandlers(onClick, () => setOpen(false)),
601
634
  "aria-hidden": "true",
602
635
  "data-state": open ? "open" : "closed"
603
636
  }
604
637
  );
605
638
  }
606
- function SidebarCollapseToggle({ "aria-label": ariaLabel, className }) {
639
+ function SidebarCollapseToggle({
640
+ "aria-label": ariaLabel,
641
+ className,
642
+ onClick,
643
+ ...htmlProps
644
+ }) {
607
645
  const { collapsed, setCollapsed, isMobile, collapsible, hasIcons } = useSidebarContext();
608
646
  if (isMobile || collapsible === "none") {
609
647
  return null;
@@ -618,15 +656,22 @@ function SidebarCollapseToggle({ "aria-label": ariaLabel, className }) {
618
656
  return /* @__PURE__ */ jsxRuntime.jsx(
619
657
  "button",
620
658
  {
659
+ ...htmlProps,
621
660
  type: "button",
622
661
  className: classes,
623
- onClick: () => setCollapsed(!collapsed),
662
+ onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
624
663
  "aria-label": label,
625
664
  children: /* @__PURE__ */ jsxRuntime.jsx(CollapsePanelIcon, {})
626
665
  }
627
666
  );
628
667
  }
629
- function SidebarRail({ className }) {
668
+ function SidebarRail({
669
+ className,
670
+ onClick,
671
+ title,
672
+ "aria-label": ariaLabel,
673
+ ...htmlProps
674
+ }) {
630
675
  const { collapsed, setCollapsed, isMobile, collapsible } = useSidebarContext();
631
676
  if (isMobile || collapsible === "none") {
632
677
  return null;
@@ -639,24 +684,26 @@ function SidebarRail({ className }) {
639
684
  return /* @__PURE__ */ jsxRuntime.jsx(
640
685
  "button",
641
686
  {
687
+ ...htmlProps,
642
688
  type: "button",
643
689
  className: classes,
644
- onClick: () => setCollapsed(!collapsed),
645
- "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar",
646
- title: collapsed ? "Expand sidebar" : "Collapse sidebar"
690
+ onClick: composeEventHandlers(onClick, () => setCollapsed(!collapsed)),
691
+ "aria-label": ariaLabel ?? (collapsed ? "Expand sidebar" : "Collapse sidebar"),
692
+ title: title ?? (collapsed ? "Expand sidebar" : "Collapse sidebar")
647
693
  }
648
694
  );
649
695
  }
650
696
  function SidebarMenuSkeleton({
651
697
  count = 5,
652
698
  showIcon = true,
653
- className
699
+ className,
700
+ ...htmlProps
654
701
  }) {
655
702
  const { collapsed, isMobile } = useSidebarContext();
656
703
  const isCollapsed = collapsed && !isMobile;
657
704
  const classes = [Sidebar_module.default.menuSkeleton, className].filter(Boolean).join(" ");
658
705
  const labelWidths = ["64%", "72%", "68%", "79%", "74%", "66%", "83%", "70%"];
659
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.skeletonItem, children: [
706
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, "aria-hidden": "true", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Sidebar_module.default.skeletonItem, children: [
660
707
  showIcon && /* @__PURE__ */ jsxRuntime.jsx(index.Skeleton, { variant: "avatar", size: "sm" }),
661
708
  !isCollapsed && /* @__PURE__ */ jsxRuntime.jsx(
662
709
  index.Skeleton,