@vritti/quantum-ui 0.3.12 → 0.3.15

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 (508) hide show
  1. package/dist/ActivePoints.js.map +1 -1
  2. package/dist/ActiveShapeUtils.js.map +1 -1
  3. package/dist/Alert.js +1 -1
  4. package/dist/Alert.js.map +1 -1
  5. package/dist/AreaChart.js.map +1 -1
  6. package/dist/Avatar.js +1 -1
  7. package/dist/Avatar.js.map +1 -1
  8. package/dist/Badge2.js +2 -2
  9. package/dist/BarChart.js.map +1 -1
  10. package/dist/BillingCycleSelector.js +37 -0
  11. package/dist/BillingCycleSelector.js.map +1 -0
  12. package/dist/Breadcrumb.js +1 -1
  13. package/dist/Breadcrumb.js.map +1 -1
  14. package/dist/Button.js +1 -1
  15. package/dist/Button.js.map +1 -1
  16. package/dist/Button2.js +2 -2
  17. package/dist/CardSkeleton.js.map +1 -1
  18. package/dist/CartesianChart.js.map +1 -1
  19. package/dist/CategoryFilter.js +6 -4
  20. package/dist/CategoryFilter.js.map +1 -1
  21. package/dist/Chart.js +53 -55
  22. package/dist/Chart.js.map +1 -1
  23. package/dist/Checkbox.js.map +1 -1
  24. package/dist/Checkbox2.js +4 -4
  25. package/dist/CheckboxGroup.js.map +1 -1
  26. package/dist/Collapsible.js.map +1 -1
  27. package/dist/Combination.js +1129 -0
  28. package/dist/Combination.js.map +1 -0
  29. package/dist/CompanySelector.js +20 -0
  30. package/dist/CompanySelector.js.map +1 -0
  31. package/dist/ConfirmHost.js.map +1 -1
  32. package/dist/CopyField.js +71 -0
  33. package/dist/CopyField.js.map +1 -0
  34. package/dist/CountrySelector.js +37 -0
  35. package/dist/CountrySelector.js.map +1 -0
  36. package/dist/CurrencyField.js +1 -0
  37. package/dist/CurrencyField.js.map +1 -1
  38. package/dist/CustomerSelector.js +2 -2
  39. package/dist/CustomerSelector.js.map +1 -1
  40. package/dist/DangerZoneSkeleton.js +21 -3
  41. package/dist/DangerZoneSkeleton.js.map +1 -1
  42. package/dist/DatePicker.js +3 -3
  43. package/dist/DatePicker.js.map +1 -1
  44. package/dist/DateTimePicker.js +2 -2
  45. package/dist/DetailSectionSkeleton.js.map +1 -1
  46. package/dist/Dialog.js.map +1 -1
  47. package/dist/DropdownMenu.js.map +1 -1
  48. package/dist/ErrorBarContext.js.map +1 -1
  49. package/dist/FeaturePermissionSelector.js +37 -0
  50. package/dist/FeaturePermissionSelector.js.map +1 -0
  51. package/dist/Form.js.map +1 -1
  52. package/dist/FormSection.js +4 -4
  53. package/dist/FormSection.js.map +1 -1
  54. package/dist/HierarchyGraph.js +5 -10621
  55. package/dist/HierarchyGraph.js.map +1 -1
  56. package/dist/ISOCountrySelect.js +283 -0
  57. package/dist/ISOCountrySelect.js.map +1 -0
  58. package/dist/IconSelect.js +3 -2
  59. package/dist/IconSelect.js.map +1 -1
  60. package/dist/InventoryItemSelector.js +2 -2
  61. package/dist/InventoryItemSelector.js.map +1 -1
  62. package/dist/Kbd.js +1 -1
  63. package/dist/Kbd.js.map +1 -1
  64. package/dist/Label.js +1 -1
  65. package/dist/LayoutModeContext.js.map +1 -1
  66. package/dist/LegalEntitySelector.js +37 -0
  67. package/dist/LegalEntitySelector.js.map +1 -0
  68. package/dist/LineChart.js.map +1 -1
  69. package/dist/LocationSelector.js +2 -2
  70. package/dist/LocationSelector.js.map +1 -1
  71. package/dist/LotSelector.js +2 -2
  72. package/dist/LotSelector.js.map +1 -1
  73. package/dist/OTPField.js.map +1 -1
  74. package/dist/PageContent.js.map +1 -1
  75. package/dist/PageHeaderSkeleton.js +21 -10
  76. package/dist/PageHeaderSkeleton.js.map +1 -1
  77. package/dist/PasswordField.js.map +1 -1
  78. package/dist/PermissionGate.js +49 -5
  79. package/dist/PermissionGate.js.map +1 -1
  80. package/dist/PersonSelector.js +20 -0
  81. package/dist/PersonSelector.js.map +1 -0
  82. package/dist/PhoneField.js.map +1 -1
  83. package/dist/PieChart.js.map +1 -1
  84. package/dist/PolarChart.js.map +1 -1
  85. package/dist/PurchaseOrderSelector.js +2 -2
  86. package/dist/PurchaseOrderSelector.js.map +1 -1
  87. package/dist/QuantSelector.js +2 -2
  88. package/dist/QuantSelector.js.map +1 -1
  89. package/dist/RadarChart.js.map +1 -1
  90. package/dist/RadialChart.js.map +1 -1
  91. package/dist/RadioGroup.js +6 -6
  92. package/dist/RadioGroup.js.map +1 -1
  93. package/dist/RoleSelector.js +20 -0
  94. package/dist/RoleSelector.js.map +1 -0
  95. package/dist/Select.js +4 -1
  96. package/dist/Select.js.map +1 -1
  97. package/dist/SelectFilter.js.map +1 -1
  98. package/dist/Separator.js.map +1 -1
  99. package/dist/SerialSelector.js +2 -2
  100. package/dist/SerialSelector.js.map +1 -1
  101. package/dist/Sidebar.js +2 -2
  102. package/dist/Sidebar.js.map +1 -1
  103. package/dist/SingleSelect.js +2 -2
  104. package/dist/SingleSelect.js.map +1 -1
  105. package/dist/SiteGroupSelector.js +37 -0
  106. package/dist/SiteGroupSelector.js.map +1 -0
  107. package/dist/SiteSelector.js +37 -0
  108. package/dist/SiteSelector.js.map +1 -0
  109. package/dist/Sonner.js +1 -1
  110. package/dist/Sonner.js.map +1 -1
  111. package/dist/Sortable.js +4 -4417
  112. package/dist/Sortable.js.map +1 -1
  113. package/dist/StepProgressIndicator.js.map +1 -1
  114. package/dist/SupplierItemSelector.js +2 -2
  115. package/dist/SupplierItemSelector.js.map +1 -1
  116. package/dist/SupplierSelector.js +2 -2
  117. package/dist/SupplierSelector.js.map +1 -1
  118. package/dist/Switch.js +3 -3
  119. package/dist/Switch.js.map +1 -1
  120. package/dist/TabsSkeleton.js +101 -49
  121. package/dist/TabsSkeleton.js.map +1 -1
  122. package/dist/TaxClassSelector.js +20 -0
  123. package/dist/TaxClassSelector.js.map +1 -0
  124. package/dist/TextField.js.map +1 -1
  125. package/dist/ThemeContext.js.map +1 -1
  126. package/dist/ThemeToggle.js.map +1 -1
  127. package/dist/Toggle.js +1 -1
  128. package/dist/Toggle.js.map +1 -1
  129. package/dist/Tooltip.js.map +1 -1
  130. package/dist/Typography.js.map +1 -1
  131. package/dist/UomSelector.js +2 -2
  132. package/dist/UomSelector.js.map +1 -1
  133. package/dist/UploadFile.js.map +1 -1
  134. package/dist/assets/quantum-ui.css +44 -13
  135. package/dist/calendar2.js +1 -1
  136. package/dist/collapsible2.js +1 -1
  137. package/dist/components/CompanySelector.js +2 -0
  138. package/dist/components/CompanySelector.js.map +1 -0
  139. package/dist/components/CopyField.js +2 -0
  140. package/dist/components/CopyField.js.map +1 -0
  141. package/dist/components/FormattedDate.js +2 -2
  142. package/dist/components/HierarchyGraph.js +2 -1
  143. package/dist/components/HierarchyGraph.js.map +1 -1
  144. package/dist/components/PermissionGate.js +1 -1
  145. package/dist/components/PersonSelector.js +2 -0
  146. package/dist/components/PersonSelector.js.map +1 -0
  147. package/dist/components/ScanBarcodeButton.js.map +1 -1
  148. package/dist/components/TreeView.js +7 -7
  149. package/dist/components/TreeView.js.map +1 -1
  150. package/dist/copy.js +18 -0
  151. package/dist/copy.js.map +1 -0
  152. package/dist/core.esm.js +4025 -0
  153. package/dist/core.esm.js.map +1 -0
  154. package/dist/dropdown-menu.js +10 -10
  155. package/dist/field.js +1 -1
  156. package/dist/getClassNameFromUnknown.js.map +1 -1
  157. package/dist/getRadiusAndStrokeWidthFromDot.js.map +1 -1
  158. package/dist/getZIndexFromUnknown.js.map +1 -1
  159. package/dist/graphicalItemSelectors.js.map +1 -1
  160. package/dist/image-component.js.map +1 -1
  161. package/dist/index.js +16 -3
  162. package/dist/index.js.map +1 -1
  163. package/dist/index10.js +102 -1499
  164. package/dist/index10.js.map +1 -1
  165. package/dist/index11.js +1499 -37
  166. package/dist/index11.js.map +1 -1
  167. package/dist/index12.js +29 -477
  168. package/dist/index12.js.map +1 -1
  169. package/dist/index13.js +427 -231
  170. package/dist/index13.js.map +1 -1
  171. package/dist/index14.js +215 -1074
  172. package/dist/index14.js.map +1 -1
  173. package/dist/index15.js +1140 -14
  174. package/dist/index15.js.map +1 -1
  175. package/dist/index16.js +13 -19
  176. package/dist/index16.js.map +1 -1
  177. package/dist/index17.js +24 -172
  178. package/dist/index17.js.map +1 -1
  179. package/dist/index18.js +168 -175
  180. package/dist/index18.js.map +1 -1
  181. package/dist/index19.js +173 -201
  182. package/dist/index19.js.map +1 -1
  183. package/dist/index20.js +203 -69
  184. package/dist/index20.js.map +1 -1
  185. package/dist/index21.js +70 -211
  186. package/dist/index21.js.map +1 -1
  187. package/dist/index22.js +207 -117
  188. package/dist/index22.js.map +1 -1
  189. package/dist/index23.js +123 -71
  190. package/dist/index23.js.map +1 -1
  191. package/dist/index24.js +74 -11
  192. package/dist/index24.js.map +1 -1
  193. package/dist/index25.js +13 -1134
  194. package/dist/index25.js.map +1 -1
  195. package/dist/index26.js +1120 -219
  196. package/dist/index26.js.map +1 -1
  197. package/dist/index27.js +202 -2506
  198. package/dist/index27.js.map +1 -1
  199. package/dist/index28.js +2527 -23
  200. package/dist/index28.js.map +1 -1
  201. package/dist/index29.js +32 -4
  202. package/dist/index29.js.map +1 -1
  203. package/dist/index3.js +11543 -267
  204. package/dist/index3.js.map +1 -1
  205. package/dist/index30.js +3 -1124
  206. package/dist/index30.js.map +1 -1
  207. package/dist/index31.js +1 -1
  208. package/dist/index32.js +7 -7
  209. package/dist/index34.js +1 -1
  210. package/dist/index37.js +1 -1
  211. package/dist/index38.js +23 -43
  212. package/dist/index38.js.map +1 -1
  213. package/dist/index4.js +272 -132
  214. package/dist/index4.js.map +1 -1
  215. package/dist/index5.js +138 -388
  216. package/dist/index5.js.map +1 -1
  217. package/dist/index6.js +386 -7
  218. package/dist/index6.js.map +1 -1
  219. package/dist/index7.js +13 -92
  220. package/dist/index7.js.map +1 -1
  221. package/dist/index8.js +92 -43
  222. package/dist/index8.js.map +1 -1
  223. package/dist/index9.js +42 -102
  224. package/dist/index9.js.map +1 -1
  225. package/dist/lib/components/Alert/Alert.d.ts.map +1 -1
  226. package/dist/lib/components/Avatar/Avatar.d.ts.map +1 -1
  227. package/dist/lib/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  228. package/dist/lib/components/Button/Button.d.ts.map +1 -1
  229. package/dist/lib/components/Card/CardSkeleton.d.ts.map +1 -1
  230. package/dist/lib/components/Checkbox/Checkbox.d.ts.map +1 -1
  231. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  232. package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
  233. package/dist/lib/components/CompanySelector/CompanySelector.d.ts +4 -0
  234. package/dist/lib/components/CompanySelector/CompanySelector.d.ts.map +1 -0
  235. package/dist/lib/components/CompanySelector/index.d.ts +2 -0
  236. package/dist/lib/components/CompanySelector/index.d.ts.map +1 -0
  237. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
  238. package/dist/lib/components/CopyField/CopyField.d.ts +10 -0
  239. package/dist/lib/components/CopyField/CopyField.d.ts.map +1 -0
  240. package/dist/lib/components/CopyField/index.d.ts +2 -0
  241. package/dist/lib/components/CopyField/index.d.ts.map +1 -0
  242. package/dist/lib/components/CurrencyField/CurrencyField.d.ts.map +1 -1
  243. package/dist/lib/components/DangerZone/DangerZone.d.ts +3 -1
  244. package/dist/lib/components/DangerZone/DangerZone.d.ts.map +1 -1
  245. package/dist/lib/components/DataTable/CompactTableSkeleton.d.ts.map +1 -1
  246. package/dist/lib/components/DataTable/DataTable.d.ts.map +1 -1
  247. package/dist/lib/components/DataTable/cells/cells.d.ts.map +1 -1
  248. package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts.map +1 -1
  249. package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
  250. package/dist/lib/components/DataTable/hooks/useDataTable.d.ts.map +1 -1
  251. package/dist/lib/components/DataTable/store/store.d.ts.map +1 -1
  252. package/dist/lib/components/DataTable/types.d.ts.map +1 -1
  253. package/dist/lib/components/DatePicker/DatePicker.d.ts +2 -2
  254. package/dist/lib/components/DatePicker/DatePicker.d.ts.map +1 -1
  255. package/dist/lib/components/DetailField/DetailField.d.ts.map +1 -1
  256. package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -1
  257. package/dist/lib/components/DetailField/DetailSectionSkeleton.d.ts.map +1 -1
  258. package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
  259. package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  260. package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -1
  261. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
  262. package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
  263. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
  264. package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
  265. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
  266. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
  267. package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
  268. package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
  269. package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
  270. package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
  271. package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
  272. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
  273. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
  274. package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
  275. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
  276. package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
  277. package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
  278. package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
  279. package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
  280. package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
  281. package/dist/lib/components/Editor/shared/react-patches.d.ts.map +1 -1
  282. package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
  283. package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
  284. package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
  285. package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
  286. package/dist/lib/components/Editor/utils/collapsible.d.ts.map +1 -1
  287. package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
  288. package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
  289. package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
  290. package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
  291. package/dist/lib/components/Editor/utils/guard.d.ts.map +1 -1
  292. package/dist/lib/components/Editor/utils/set-floating-elem-position-for-link-editor.d.ts.map +1 -1
  293. package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
  294. package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
  295. package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
  296. package/dist/lib/components/Form/Form.d.ts.map +1 -1
  297. package/dist/lib/components/OTPField/OTPField.d.ts.map +1 -1
  298. package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
  299. package/dist/lib/components/PageHeader/PageHeader.d.ts.map +1 -1
  300. package/dist/lib/components/PasswordField/PasswordField.d.ts.map +1 -1
  301. package/dist/lib/components/PermissionGate/PermissionGate.d.ts +15 -4
  302. package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -1
  303. package/dist/lib/components/PermissionGate/index.d.ts +1 -1
  304. package/dist/lib/components/PermissionGate/index.d.ts.map +1 -1
  305. package/dist/lib/components/PersonSelector/PersonSelector.d.ts +4 -0
  306. package/dist/lib/components/PersonSelector/PersonSelector.d.ts.map +1 -0
  307. package/dist/lib/components/PersonSelector/index.d.ts +2 -0
  308. package/dist/lib/components/PersonSelector/index.d.ts.map +1 -0
  309. package/dist/lib/components/PhoneField/PhoneField.d.ts.map +1 -1
  310. package/dist/lib/components/RadioGroup/RadioGroup.d.ts.map +1 -1
  311. package/dist/lib/components/ScanBarcodeButton/ScanBarcodeButton.d.ts.map +1 -1
  312. package/dist/lib/components/Select/SelectFilter.d.ts.map +1 -1
  313. package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  314. package/dist/lib/components/Select/components/MultiSelect/MultiSelectFilter.d.ts.map +1 -1
  315. package/dist/lib/components/Select/components/SingleSelect/SingleSelect.d.ts.map +1 -1
  316. package/dist/lib/components/Select/components/SingleSelect/SingleSelectFilter.d.ts.map +1 -1
  317. package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
  318. package/dist/lib/components/Select/hooks/useSingleSelect.d.ts.map +1 -1
  319. package/dist/lib/components/Select/types.d.ts +1 -1
  320. package/dist/lib/components/Select/types.d.ts.map +1 -1
  321. package/dist/lib/components/Separator/Separator.d.ts.map +1 -1
  322. package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
  323. package/dist/lib/components/Sonner/Sonner.d.ts.map +1 -1
  324. package/dist/lib/components/Sonner/toast.d.ts.map +1 -1
  325. package/dist/lib/components/StepProgressIndicator/StepProgressIndicator.d.ts.map +1 -1
  326. package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
  327. package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
  328. package/dist/lib/components/Tabs/Tabs.d.ts.map +1 -1
  329. package/dist/lib/components/Tabs/TabsSkeleton.d.ts.map +1 -1
  330. package/dist/lib/components/TextField/TextField.d.ts.map +1 -1
  331. package/dist/lib/components/ThemeToggle/ThemeToggle.d.ts.map +1 -1
  332. package/dist/lib/components/Toggle/Toggle.d.ts.map +1 -1
  333. package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -1
  334. package/dist/lib/components/TreeView/TreeView.d.ts.map +1 -1
  335. package/dist/lib/components/Typography/Typography.d.ts.map +1 -1
  336. package/dist/lib/components/UploadFile/UploadFile.d.ts.map +1 -1
  337. package/dist/lib/components/index.d.ts +3 -0
  338. package/dist/lib/components/index.d.ts.map +1 -1
  339. package/dist/lib/config/index.d.ts.map +1 -1
  340. package/dist/lib/context/LayoutModeContext.d.ts.map +1 -1
  341. package/dist/lib/context/ThemeContext.d.ts.map +1 -1
  342. package/dist/lib/hooks/useBUCurrency.d.ts.map +1 -1
  343. package/dist/lib/hooks/useBUTimezone.d.ts.map +1 -1
  344. package/dist/lib/hooks/useBarcodeScanner.d.ts.map +1 -1
  345. package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
  346. package/dist/lib/hooks/useSSE.d.ts.map +1 -1
  347. package/dist/lib/hooks/useTheme.d.ts.map +1 -1
  348. package/dist/lib/index.d.ts.map +1 -1
  349. package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts +12 -0
  350. package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts.map +1 -0
  351. package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts +4 -0
  352. package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts.map +1 -0
  353. package/dist/lib/selects/billing-cycle/index.d.ts +3 -0
  354. package/dist/lib/selects/billing-cycle/index.d.ts.map +1 -0
  355. package/dist/lib/selects/category/CategoryFilter.d.ts.map +1 -1
  356. package/dist/lib/selects/category/CategorySelector.d.ts.map +1 -1
  357. package/dist/lib/selects/cost-category/CostCategorySelector.d.ts.map +1 -1
  358. package/dist/lib/selects/country/CountryFilter.d.ts +12 -0
  359. package/dist/lib/selects/country/CountryFilter.d.ts.map +1 -0
  360. package/dist/lib/selects/country/CountrySelector.d.ts +4 -0
  361. package/dist/lib/selects/country/CountrySelector.d.ts.map +1 -0
  362. package/dist/lib/selects/country/index.d.ts +3 -0
  363. package/dist/lib/selects/country/index.d.ts.map +1 -0
  364. package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts +12 -0
  365. package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts.map +1 -0
  366. package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts +4 -0
  367. package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts.map +1 -0
  368. package/dist/lib/selects/feature-permission/index.d.ts +3 -0
  369. package/dist/lib/selects/feature-permission/index.d.ts.map +1 -0
  370. package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -1
  371. package/dist/lib/selects/index.d.ts +9 -0
  372. package/dist/lib/selects/index.d.ts.map +1 -1
  373. package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts +2 -2
  374. package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts.map +1 -1
  375. package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts +15 -0
  376. package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts.map +1 -0
  377. package/dist/lib/selects/iso-country/index.d.ts +3 -0
  378. package/dist/lib/selects/iso-country/index.d.ts.map +1 -0
  379. package/dist/lib/selects/iso-country/iso-countries.d.ts +7 -0
  380. package/dist/lib/selects/iso-country/iso-countries.d.ts.map +1 -0
  381. package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts +12 -0
  382. package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts.map +1 -0
  383. package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts +4 -0
  384. package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts.map +1 -0
  385. package/dist/lib/selects/legal-entity/index.d.ts +3 -0
  386. package/dist/lib/selects/legal-entity/index.d.ts.map +1 -0
  387. package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
  388. package/dist/lib/selects/purchase-order/PurchaseOrderSelector.d.ts.map +1 -1
  389. package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
  390. package/dist/lib/selects/role/RoleSelector.d.ts +4 -0
  391. package/dist/lib/selects/role/RoleSelector.d.ts.map +1 -0
  392. package/dist/lib/selects/role/index.d.ts +2 -0
  393. package/dist/lib/selects/role/index.d.ts.map +1 -0
  394. package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
  395. package/dist/lib/selects/site/SiteFilter.d.ts +12 -0
  396. package/dist/lib/selects/site/SiteFilter.d.ts.map +1 -0
  397. package/dist/lib/selects/site/SiteSelector.d.ts +4 -0
  398. package/dist/lib/selects/site/SiteSelector.d.ts.map +1 -0
  399. package/dist/lib/selects/site/index.d.ts +3 -0
  400. package/dist/lib/selects/site/index.d.ts.map +1 -0
  401. package/dist/lib/selects/site-group/SiteGroupFilter.d.ts +12 -0
  402. package/dist/lib/selects/site-group/SiteGroupFilter.d.ts.map +1 -0
  403. package/dist/lib/selects/site-group/SiteGroupSelector.d.ts +4 -0
  404. package/dist/lib/selects/site-group/SiteGroupSelector.d.ts.map +1 -0
  405. package/dist/lib/selects/site-group/index.d.ts +3 -0
  406. package/dist/lib/selects/site-group/index.d.ts.map +1 -0
  407. package/dist/lib/selects/supplier/SupplierSelector.d.ts.map +1 -1
  408. package/dist/lib/selects/supplier-item/SupplierItemFilter.d.ts.map +1 -1
  409. package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
  410. package/dist/lib/selects/tax-class/TaxClassSelector.d.ts +4 -0
  411. package/dist/lib/selects/tax-class/TaxClassSelector.d.ts.map +1 -0
  412. package/dist/lib/selects/tax-class/index.d.ts +2 -0
  413. package/dist/lib/selects/tax-class/index.d.ts.map +1 -0
  414. package/dist/lib/theme/index.d.ts.map +1 -1
  415. package/dist/lib/types/catalog-resolver.d.ts +50 -17
  416. package/dist/lib/types/catalog-resolver.d.ts.map +1 -1
  417. package/dist/lib/utils/axios.d.ts.map +1 -1
  418. package/dist/lib/utils/cn.d.ts +3 -0
  419. package/dist/lib/utils/cn.d.ts.map +1 -0
  420. package/dist/lib/utils/dagre.d.ts +2 -0
  421. package/dist/lib/utils/dagre.d.ts.map +1 -0
  422. package/dist/lib/utils/dnd-kit/core.d.ts +2 -0
  423. package/dist/lib/utils/dnd-kit/core.d.ts.map +1 -0
  424. package/dist/lib/utils/dnd-kit/sortable.d.ts +2 -0
  425. package/dist/lib/utils/dnd-kit/sortable.d.ts.map +1 -0
  426. package/dist/lib/utils/dnd-kit/utilities.d.ts +2 -0
  427. package/dist/lib/utils/dnd-kit/utilities.d.ts.map +1 -0
  428. package/dist/lib/utils/formHelpers.d.ts.map +1 -1
  429. package/dist/lib/utils/format.d.ts.map +1 -1
  430. package/dist/lib/utils/permission-deps.d.ts +9 -0
  431. package/dist/lib/utils/permission-deps.d.ts.map +1 -0
  432. package/dist/lib/utils/react-flow.d.ts +2 -0
  433. package/dist/lib/utils/react-flow.d.ts.map +1 -0
  434. package/dist/lib/utils/zod.d.ts +9 -0
  435. package/dist/lib/utils/zod.d.ts.map +1 -1
  436. package/dist/polarScaleSelectors.js.map +1 -1
  437. package/dist/popover.js +1 -1
  438. package/dist/select2.js +1 -1
  439. package/dist/selects/billing-cycle.js +2 -0
  440. package/dist/selects/billing-cycle.js.map +1 -0
  441. package/dist/selects/cost-category.js +2 -2
  442. package/dist/selects/cost-category.js.map +1 -1
  443. package/dist/selects/country.js +2 -0
  444. package/dist/selects/country.js.map +1 -0
  445. package/dist/selects/feature-permission.js +2 -0
  446. package/dist/selects/feature-permission.js.map +1 -0
  447. package/dist/selects/iso-country.js +2 -0
  448. package/dist/selects/iso-country.js.map +1 -0
  449. package/dist/selects/legal-entity.js +2 -0
  450. package/dist/selects/legal-entity.js.map +1 -0
  451. package/dist/selects/purchase-order-item.js +1 -1
  452. package/dist/selects/purchase-order-item.js.map +1 -1
  453. package/dist/selects/role.js +2 -0
  454. package/dist/selects/role.js.map +1 -0
  455. package/dist/selects/site-group.js +2 -0
  456. package/dist/selects/site-group.js.map +1 -0
  457. package/dist/selects/site.js +2 -0
  458. package/dist/selects/site.js.map +1 -0
  459. package/dist/selects/tax-class.js +2 -0
  460. package/dist/selects/tax-class.js.map +1 -0
  461. package/dist/selects/tax-group.js +2 -2
  462. package/dist/selects/tax-group.js.map +1 -1
  463. package/dist/separator2.js +1 -1
  464. package/dist/sortable.esm.js +780 -0
  465. package/dist/sortable.esm.js.map +1 -0
  466. package/dist/theme/index.js.map +1 -1
  467. package/dist/toast.js +2 -26
  468. package/dist/toast.js.map +1 -1
  469. package/dist/tooltip2.js +1 -1
  470. package/dist/tooltipContext.js.map +1 -1
  471. package/dist/types/catalog-resolver.js +5 -2
  472. package/dist/types/catalog-resolver.js.map +1 -1
  473. package/dist/useBUTimezone.js.map +1 -1
  474. package/dist/useDataTable.js +58 -60
  475. package/dist/useDataTable.js.map +1 -1
  476. package/dist/useFormatters.js.map +1 -1
  477. package/dist/useTheme.js.map +1 -1
  478. package/dist/useTimer.js +2 -2
  479. package/dist/useTimer.js.map +1 -1
  480. package/dist/utilities.esm.js +333 -0
  481. package/dist/utilities.esm.js.map +1 -0
  482. package/dist/utils/axios.js +1 -1
  483. package/dist/utils/axios.js.map +1 -1
  484. package/dist/utils/cn.js +6 -0
  485. package/dist/utils/cn.js.map +1 -0
  486. package/dist/utils/currency.js +2 -2
  487. package/dist/utils/dagre.js +4 -0
  488. package/dist/utils/dagre.js.map +1 -0
  489. package/dist/utils/dnd-kit/core.js +2 -0
  490. package/dist/utils/dnd-kit/core.js.map +1 -0
  491. package/dist/utils/dnd-kit/sortable.js +2 -0
  492. package/dist/utils/dnd-kit/sortable.js.map +1 -0
  493. package/dist/utils/dnd-kit/utilities.js +2 -0
  494. package/dist/utils/dnd-kit/utilities.js.map +1 -0
  495. package/dist/utils/format.js +2 -2
  496. package/dist/utils/format.js.map +1 -1
  497. package/dist/utils/hotkeys.js +1 -1
  498. package/dist/utils/money.js +1 -1
  499. package/dist/utils/permission-deps.js +64 -0
  500. package/dist/utils/permission-deps.js.map +1 -0
  501. package/dist/utils/react-flow.js +2 -0
  502. package/dist/utils/react-flow.js.map +1 -0
  503. package/dist/utils/timezone.js +1 -1
  504. package/dist/utils/zod.js +11 -1
  505. package/dist/utils/zod.js.map +1 -1
  506. package/dist/youtube.js +15 -29
  507. package/dist/youtube.js.map +1 -1
  508. package/package.json +77 -1
package/dist/index15.js CHANGED
@@ -1,25 +1,1151 @@
1
1
  import * as React from 'react';
2
- import { P as Primitive } from './index31.js';
3
- import { jsx } from 'react/jsx-runtime';
2
+ import * as ReactDOM from 'react-dom';
3
+ import { u as useControllableState, P as Primitive, c as composeEventHandlers, b as createSlot } from './index20.js';
4
+ import { u as useDirection, c as createCollection } from './index24.js';
5
+ import { u as useComposedRefs } from './index12.js';
6
+ import { c as createContextScope } from './index21.js';
7
+ import { P as Portal$1, D as DismissableLayer } from './index27.js';
8
+ import { h as hideOthers, u as useFocusGuards, R as ReactRemoveScroll, F as FocusScope } from './Combination.js';
9
+ import { u as useId } from './index25.js';
10
+ import { R as Root2$1, A as Anchor, c as createPopperScope, C as Content, a as Arrow } from './index28.js';
11
+ import { u as useCallbackRef } from './index33.js';
12
+ import { u as useLayoutEffect2 } from './index30.js';
13
+ import { u as usePrevious } from './index36.js';
14
+ import { V as VISUALLY_HIDDEN_STYLES } from './index29.js';
15
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
16
 
5
- var NAME = "Label";
6
- var Label = React.forwardRef((props, forwardedRef) => {
17
+ // packages/core/number/src/number.ts
18
+ function clamp(value, [min, max]) {
19
+ return Math.min(max, Math.max(min, value));
20
+ }
21
+
22
+ var OPEN_KEYS = [" ", "Enter", "ArrowUp", "ArrowDown"];
23
+ var SELECTION_KEYS = [" ", "Enter"];
24
+ var SELECT_NAME = "Select";
25
+ var [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);
26
+ var [createSelectContext] = createContextScope(SELECT_NAME, [
27
+ createCollectionScope,
28
+ createPopperScope
29
+ ]);
30
+ var usePopperScope = createPopperScope();
31
+ var [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
32
+ var [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);
33
+ var Select = (props) => {
34
+ const {
35
+ __scopeSelect,
36
+ children,
37
+ open: openProp,
38
+ defaultOpen,
39
+ onOpenChange,
40
+ value: valueProp,
41
+ defaultValue,
42
+ onValueChange,
43
+ dir,
44
+ name,
45
+ autoComplete,
46
+ disabled,
47
+ required,
48
+ form
49
+ } = props;
50
+ const popperScope = usePopperScope(__scopeSelect);
51
+ const [trigger, setTrigger] = React.useState(null);
52
+ const [valueNode, setValueNode] = React.useState(null);
53
+ const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);
54
+ const direction = useDirection(dir);
55
+ const [open, setOpen] = useControllableState({
56
+ prop: openProp,
57
+ defaultProp: defaultOpen ?? false,
58
+ onChange: onOpenChange,
59
+ caller: SELECT_NAME
60
+ });
61
+ const [value, setValue] = useControllableState({
62
+ prop: valueProp,
63
+ defaultProp: defaultValue,
64
+ onChange: onValueChange,
65
+ caller: SELECT_NAME
66
+ });
67
+ const triggerPointerDownPosRef = React.useRef(null);
68
+ const isFormControl = trigger ? form || !!trigger.closest("form") : true;
69
+ const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());
70
+ const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
71
+ return /* @__PURE__ */ jsx(Root2$1, { ...popperScope, children: /* @__PURE__ */ jsxs(
72
+ SelectProvider,
73
+ {
74
+ required,
75
+ scope: __scopeSelect,
76
+ trigger,
77
+ onTriggerChange: setTrigger,
78
+ valueNode,
79
+ onValueNodeChange: setValueNode,
80
+ valueNodeHasChildren,
81
+ onValueNodeHasChildrenChange: setValueNodeHasChildren,
82
+ contentId: useId(),
83
+ value,
84
+ onValueChange: setValue,
85
+ open,
86
+ onOpenChange: setOpen,
87
+ dir: direction,
88
+ triggerPointerDownPosRef,
89
+ disabled,
90
+ children: [
91
+ /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(
92
+ SelectNativeOptionsProvider,
93
+ {
94
+ scope: props.__scopeSelect,
95
+ onNativeOptionAdd: React.useCallback((option) => {
96
+ setNativeOptionsSet((prev) => new Set(prev).add(option));
97
+ }, []),
98
+ onNativeOptionRemove: React.useCallback((option) => {
99
+ setNativeOptionsSet((prev) => {
100
+ const optionsSet = new Set(prev);
101
+ optionsSet.delete(option);
102
+ return optionsSet;
103
+ });
104
+ }, []),
105
+ children
106
+ }
107
+ ) }),
108
+ isFormControl ? /* @__PURE__ */ jsxs(
109
+ SelectBubbleInput,
110
+ {
111
+ "aria-hidden": true,
112
+ required,
113
+ tabIndex: -1,
114
+ name,
115
+ autoComplete,
116
+ value,
117
+ onChange: (event) => setValue(event.target.value),
118
+ disabled,
119
+ form,
120
+ children: [
121
+ value === void 0 ? /* @__PURE__ */ jsx("option", { value: "" }) : null,
122
+ Array.from(nativeOptionsSet)
123
+ ]
124
+ },
125
+ nativeSelectKey
126
+ ) : null
127
+ ]
128
+ }
129
+ ) });
130
+ };
131
+ Select.displayName = SELECT_NAME;
132
+ var TRIGGER_NAME = "SelectTrigger";
133
+ var SelectTrigger = React.forwardRef(
134
+ (props, forwardedRef) => {
135
+ const { __scopeSelect, disabled = false, ...triggerProps } = props;
136
+ const popperScope = usePopperScope(__scopeSelect);
137
+ const context = useSelectContext(TRIGGER_NAME, __scopeSelect);
138
+ const isDisabled = context.disabled || disabled;
139
+ const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);
140
+ const getItems = useCollection(__scopeSelect);
141
+ const pointerTypeRef = React.useRef("touch");
142
+ const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {
143
+ const enabledItems = getItems().filter((item) => !item.disabled);
144
+ const currentItem = enabledItems.find((item) => item.value === context.value);
145
+ const nextItem = findNextItem(enabledItems, search, currentItem);
146
+ if (nextItem !== void 0) {
147
+ context.onValueChange(nextItem.value);
148
+ }
149
+ });
150
+ const handleOpen = (pointerEvent) => {
151
+ if (!isDisabled) {
152
+ context.onOpenChange(true);
153
+ resetTypeahead();
154
+ }
155
+ if (pointerEvent) {
156
+ context.triggerPointerDownPosRef.current = {
157
+ x: Math.round(pointerEvent.pageX),
158
+ y: Math.round(pointerEvent.pageY)
159
+ };
160
+ }
161
+ };
162
+ return /* @__PURE__ */ jsx(Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(
163
+ Primitive.button,
164
+ {
165
+ type: "button",
166
+ role: "combobox",
167
+ "aria-controls": context.contentId,
168
+ "aria-expanded": context.open,
169
+ "aria-required": context.required,
170
+ "aria-autocomplete": "none",
171
+ dir: context.dir,
172
+ "data-state": context.open ? "open" : "closed",
173
+ disabled: isDisabled,
174
+ "data-disabled": isDisabled ? "" : void 0,
175
+ "data-placeholder": shouldShowPlaceholder(context.value) ? "" : void 0,
176
+ ...triggerProps,
177
+ ref: composedRefs,
178
+ onClick: composeEventHandlers(triggerProps.onClick, (event) => {
179
+ event.currentTarget.focus();
180
+ if (pointerTypeRef.current !== "mouse") {
181
+ handleOpen(event);
182
+ }
183
+ }),
184
+ onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {
185
+ pointerTypeRef.current = event.pointerType;
186
+ const target = event.target;
187
+ if (target.hasPointerCapture(event.pointerId)) {
188
+ target.releasePointerCapture(event.pointerId);
189
+ }
190
+ if (event.button === 0 && event.ctrlKey === false && event.pointerType === "mouse") {
191
+ handleOpen(event);
192
+ event.preventDefault();
193
+ }
194
+ }),
195
+ onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {
196
+ const isTypingAhead = searchRef.current !== "";
197
+ const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
198
+ if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
199
+ if (isTypingAhead && event.key === " ") return;
200
+ if (OPEN_KEYS.includes(event.key)) {
201
+ handleOpen();
202
+ event.preventDefault();
203
+ }
204
+ })
205
+ }
206
+ ) });
207
+ }
208
+ );
209
+ SelectTrigger.displayName = TRIGGER_NAME;
210
+ var VALUE_NAME = "SelectValue";
211
+ var SelectValue = React.forwardRef(
212
+ (props, forwardedRef) => {
213
+ const { __scopeSelect, className, style, children, placeholder = "", ...valueProps } = props;
214
+ const context = useSelectContext(VALUE_NAME, __scopeSelect);
215
+ const { onValueNodeHasChildrenChange } = context;
216
+ const hasChildren = children !== void 0;
217
+ const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);
218
+ useLayoutEffect2(() => {
219
+ onValueNodeHasChildrenChange(hasChildren);
220
+ }, [onValueNodeHasChildrenChange, hasChildren]);
221
+ return /* @__PURE__ */ jsx(
222
+ Primitive.span,
223
+ {
224
+ ...valueProps,
225
+ ref: composedRefs,
226
+ style: { pointerEvents: "none" },
227
+ children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children
228
+ }
229
+ );
230
+ }
231
+ );
232
+ SelectValue.displayName = VALUE_NAME;
233
+ var ICON_NAME = "SelectIcon";
234
+ var SelectIcon = React.forwardRef(
235
+ (props, forwardedRef) => {
236
+ const { __scopeSelect, children, ...iconProps } = props;
237
+ return /* @__PURE__ */ jsx(Primitive.span, { "aria-hidden": true, ...iconProps, ref: forwardedRef, children: children || "\u25BC" });
238
+ }
239
+ );
240
+ SelectIcon.displayName = ICON_NAME;
241
+ var PORTAL_NAME = "SelectPortal";
242
+ var SelectPortal = (props) => {
243
+ return /* @__PURE__ */ jsx(Portal$1, { asChild: true, ...props });
244
+ };
245
+ SelectPortal.displayName = PORTAL_NAME;
246
+ var CONTENT_NAME = "SelectContent";
247
+ var SelectContent = React.forwardRef(
248
+ (props, forwardedRef) => {
249
+ const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);
250
+ const [fragment, setFragment] = React.useState();
251
+ useLayoutEffect2(() => {
252
+ setFragment(new DocumentFragment());
253
+ }, []);
254
+ if (!context.open) {
255
+ const frag = fragment;
256
+ return frag ? ReactDOM.createPortal(
257
+ /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx("div", { children: props.children }) }) }),
258
+ frag
259
+ ) : null;
260
+ }
261
+ return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });
262
+ }
263
+ );
264
+ SelectContent.displayName = CONTENT_NAME;
265
+ var CONTENT_MARGIN = 10;
266
+ var [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);
267
+ var CONTENT_IMPL_NAME = "SelectContentImpl";
268
+ var Slot = createSlot("SelectContent.RemoveScroll");
269
+ var SelectContentImpl = React.forwardRef(
270
+ (props, forwardedRef) => {
271
+ const {
272
+ __scopeSelect,
273
+ position = "item-aligned",
274
+ onCloseAutoFocus,
275
+ onEscapeKeyDown,
276
+ onPointerDownOutside,
277
+ //
278
+ // PopperContent props
279
+ side,
280
+ sideOffset,
281
+ align,
282
+ alignOffset,
283
+ arrowPadding,
284
+ collisionBoundary,
285
+ collisionPadding,
286
+ sticky,
287
+ hideWhenDetached,
288
+ avoidCollisions,
289
+ //
290
+ ...contentProps
291
+ } = props;
292
+ const context = useSelectContext(CONTENT_NAME, __scopeSelect);
293
+ const [content, setContent] = React.useState(null);
294
+ const [viewport, setViewport] = React.useState(null);
295
+ const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));
296
+ const [selectedItem, setSelectedItem] = React.useState(null);
297
+ const [selectedItemText, setSelectedItemText] = React.useState(
298
+ null
299
+ );
300
+ const getItems = useCollection(__scopeSelect);
301
+ const [isPositioned, setIsPositioned] = React.useState(false);
302
+ const firstValidItemFoundRef = React.useRef(false);
303
+ React.useEffect(() => {
304
+ if (content) return hideOthers(content);
305
+ }, [content]);
306
+ useFocusGuards();
307
+ const focusFirst = React.useCallback(
308
+ (candidates) => {
309
+ const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);
310
+ const [lastItem] = restItems.slice(-1);
311
+ const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
312
+ for (const candidate of candidates) {
313
+ if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
314
+ candidate?.scrollIntoView({ block: "nearest" });
315
+ if (candidate === firstItem && viewport) viewport.scrollTop = 0;
316
+ if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;
317
+ candidate?.focus();
318
+ if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
319
+ }
320
+ },
321
+ [getItems, viewport]
322
+ );
323
+ const focusSelectedItem = React.useCallback(
324
+ () => focusFirst([selectedItem, content]),
325
+ [focusFirst, selectedItem, content]
326
+ );
327
+ React.useEffect(() => {
328
+ if (isPositioned) {
329
+ focusSelectedItem();
330
+ }
331
+ }, [isPositioned, focusSelectedItem]);
332
+ const { onOpenChange, triggerPointerDownPosRef } = context;
333
+ React.useEffect(() => {
334
+ if (content) {
335
+ let pointerMoveDelta = { x: 0, y: 0 };
336
+ const handlePointerMove = (event) => {
337
+ pointerMoveDelta = {
338
+ x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),
339
+ y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))
340
+ };
341
+ };
342
+ const handlePointerUp = (event) => {
343
+ if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {
344
+ event.preventDefault();
345
+ } else {
346
+ if (!content.contains(event.target)) {
347
+ onOpenChange(false);
348
+ }
349
+ }
350
+ document.removeEventListener("pointermove", handlePointerMove);
351
+ triggerPointerDownPosRef.current = null;
352
+ };
353
+ if (triggerPointerDownPosRef.current !== null) {
354
+ document.addEventListener("pointermove", handlePointerMove);
355
+ document.addEventListener("pointerup", handlePointerUp, { capture: true, once: true });
356
+ }
357
+ return () => {
358
+ document.removeEventListener("pointermove", handlePointerMove);
359
+ document.removeEventListener("pointerup", handlePointerUp, { capture: true });
360
+ };
361
+ }
362
+ }, [content, onOpenChange, triggerPointerDownPosRef]);
363
+ React.useEffect(() => {
364
+ const close = () => onOpenChange(false);
365
+ window.addEventListener("blur", close);
366
+ window.addEventListener("resize", close);
367
+ return () => {
368
+ window.removeEventListener("blur", close);
369
+ window.removeEventListener("resize", close);
370
+ };
371
+ }, [onOpenChange]);
372
+ const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {
373
+ const enabledItems = getItems().filter((item) => !item.disabled);
374
+ const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);
375
+ const nextItem = findNextItem(enabledItems, search, currentItem);
376
+ if (nextItem) {
377
+ setTimeout(() => nextItem.ref.current.focus());
378
+ }
379
+ });
380
+ const itemRefCallback = React.useCallback(
381
+ (node, value, disabled) => {
382
+ const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
383
+ const isSelectedItem = context.value !== void 0 && context.value === value;
384
+ if (isSelectedItem || isFirstValidItem) {
385
+ setSelectedItem(node);
386
+ if (isFirstValidItem) firstValidItemFoundRef.current = true;
387
+ }
388
+ },
389
+ [context.value]
390
+ );
391
+ const handleItemLeave = React.useCallback(() => content?.focus(), [content]);
392
+ const itemTextRefCallback = React.useCallback(
393
+ (node, value, disabled) => {
394
+ const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;
395
+ const isSelectedItem = context.value !== void 0 && context.value === value;
396
+ if (isSelectedItem || isFirstValidItem) {
397
+ setSelectedItemText(node);
398
+ }
399
+ },
400
+ [context.value]
401
+ );
402
+ const SelectPosition = position === "popper" ? SelectPopperPosition : SelectItemAlignedPosition;
403
+ const popperContentProps = SelectPosition === SelectPopperPosition ? {
404
+ side,
405
+ sideOffset,
406
+ align,
407
+ alignOffset,
408
+ arrowPadding,
409
+ collisionBoundary,
410
+ collisionPadding,
411
+ sticky,
412
+ hideWhenDetached,
413
+ avoidCollisions
414
+ } : {};
415
+ return /* @__PURE__ */ jsx(
416
+ SelectContentProvider,
417
+ {
418
+ scope: __scopeSelect,
419
+ content,
420
+ viewport,
421
+ onViewportChange: setViewport,
422
+ itemRefCallback,
423
+ selectedItem,
424
+ onItemLeave: handleItemLeave,
425
+ itemTextRefCallback,
426
+ focusSelectedItem,
427
+ selectedItemText,
428
+ position,
429
+ isPositioned,
430
+ searchRef,
431
+ children: /* @__PURE__ */ jsx(ReactRemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(
432
+ FocusScope,
433
+ {
434
+ asChild: true,
435
+ trapped: context.open,
436
+ onMountAutoFocus: (event) => {
437
+ event.preventDefault();
438
+ },
439
+ onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {
440
+ context.trigger?.focus({ preventScroll: true });
441
+ event.preventDefault();
442
+ }),
443
+ children: /* @__PURE__ */ jsx(
444
+ DismissableLayer,
445
+ {
446
+ asChild: true,
447
+ disableOutsidePointerEvents: true,
448
+ onEscapeKeyDown,
449
+ onPointerDownOutside,
450
+ onFocusOutside: (event) => event.preventDefault(),
451
+ onDismiss: () => context.onOpenChange(false),
452
+ children: /* @__PURE__ */ jsx(
453
+ SelectPosition,
454
+ {
455
+ role: "listbox",
456
+ id: context.contentId,
457
+ "data-state": context.open ? "open" : "closed",
458
+ dir: context.dir,
459
+ onContextMenu: (event) => event.preventDefault(),
460
+ ...contentProps,
461
+ ...popperContentProps,
462
+ onPlaced: () => setIsPositioned(true),
463
+ ref: composedRefs,
464
+ style: {
465
+ // flex layout so we can place the scroll buttons properly
466
+ display: "flex",
467
+ flexDirection: "column",
468
+ // reset the outline by default as the content MAY get focused
469
+ outline: "none",
470
+ ...contentProps.style
471
+ },
472
+ onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {
473
+ const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
474
+ if (event.key === "Tab") event.preventDefault();
475
+ if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);
476
+ if (["ArrowUp", "ArrowDown", "Home", "End"].includes(event.key)) {
477
+ const items = getItems().filter((item) => !item.disabled);
478
+ let candidateNodes = items.map((item) => item.ref.current);
479
+ if (["ArrowUp", "End"].includes(event.key)) {
480
+ candidateNodes = candidateNodes.slice().reverse();
481
+ }
482
+ if (["ArrowUp", "ArrowDown"].includes(event.key)) {
483
+ const currentElement = event.target;
484
+ const currentIndex = candidateNodes.indexOf(currentElement);
485
+ candidateNodes = candidateNodes.slice(currentIndex + 1);
486
+ }
487
+ setTimeout(() => focusFirst(candidateNodes));
488
+ event.preventDefault();
489
+ }
490
+ })
491
+ }
492
+ )
493
+ }
494
+ )
495
+ }
496
+ ) })
497
+ }
498
+ );
499
+ }
500
+ );
501
+ SelectContentImpl.displayName = CONTENT_IMPL_NAME;
502
+ var ITEM_ALIGNED_POSITION_NAME = "SelectItemAlignedPosition";
503
+ var SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {
504
+ const { __scopeSelect, onPlaced, ...popperProps } = props;
505
+ const context = useSelectContext(CONTENT_NAME, __scopeSelect);
506
+ const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);
507
+ const [contentWrapper, setContentWrapper] = React.useState(null);
508
+ const [content, setContent] = React.useState(null);
509
+ const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));
510
+ const getItems = useCollection(__scopeSelect);
511
+ const shouldExpandOnScrollRef = React.useRef(false);
512
+ const shouldRepositionRef = React.useRef(true);
513
+ const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;
514
+ const position = React.useCallback(() => {
515
+ if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {
516
+ const triggerRect = context.trigger.getBoundingClientRect();
517
+ const contentRect = content.getBoundingClientRect();
518
+ const valueNodeRect = context.valueNode.getBoundingClientRect();
519
+ const itemTextRect = selectedItemText.getBoundingClientRect();
520
+ if (context.dir !== "rtl") {
521
+ const itemTextOffset = itemTextRect.left - contentRect.left;
522
+ const left = valueNodeRect.left - itemTextOffset;
523
+ const leftDelta = triggerRect.left - left;
524
+ const minContentWidth = triggerRect.width + leftDelta;
525
+ const contentWidth = Math.max(minContentWidth, contentRect.width);
526
+ const rightEdge = window.innerWidth - CONTENT_MARGIN;
527
+ const clampedLeft = clamp(left, [
528
+ CONTENT_MARGIN,
529
+ // Prevents the content from going off the starting edge of the
530
+ // viewport. It may still go off the ending edge, but this can be
531
+ // controlled by the user since they may want to manage overflow in a
532
+ // specific way.
533
+ // https://github.com/radix-ui/primitives/issues/2049
534
+ Math.max(CONTENT_MARGIN, rightEdge - contentWidth)
535
+ ]);
536
+ contentWrapper.style.minWidth = minContentWidth + "px";
537
+ contentWrapper.style.left = clampedLeft + "px";
538
+ } else {
539
+ const itemTextOffset = contentRect.right - itemTextRect.right;
540
+ const right = window.innerWidth - valueNodeRect.right - itemTextOffset;
541
+ const rightDelta = window.innerWidth - triggerRect.right - right;
542
+ const minContentWidth = triggerRect.width + rightDelta;
543
+ const contentWidth = Math.max(minContentWidth, contentRect.width);
544
+ const leftEdge = window.innerWidth - CONTENT_MARGIN;
545
+ const clampedRight = clamp(right, [
546
+ CONTENT_MARGIN,
547
+ Math.max(CONTENT_MARGIN, leftEdge - contentWidth)
548
+ ]);
549
+ contentWrapper.style.minWidth = minContentWidth + "px";
550
+ contentWrapper.style.right = clampedRight + "px";
551
+ }
552
+ const items = getItems();
553
+ const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
554
+ const itemsHeight = viewport.scrollHeight;
555
+ const contentStyles = window.getComputedStyle(content);
556
+ const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);
557
+ const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
558
+ const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);
559
+ const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);
560
+ const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;
561
+ const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);
562
+ const viewportStyles = window.getComputedStyle(viewport);
563
+ const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);
564
+ const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);
565
+ const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;
566
+ const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;
567
+ const selectedItemHalfHeight = selectedItem.offsetHeight / 2;
568
+ const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;
569
+ const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;
570
+ const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;
571
+ const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;
572
+ if (willAlignWithoutTopOverflow) {
573
+ const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;
574
+ contentWrapper.style.bottom = "0px";
575
+ const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;
576
+ const clampedTriggerMiddleToBottomEdge = Math.max(
577
+ triggerMiddleToBottomEdge,
578
+ selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport
579
+ (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth
580
+ );
581
+ const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;
582
+ contentWrapper.style.height = height + "px";
583
+ } else {
584
+ const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;
585
+ contentWrapper.style.top = "0px";
586
+ const clampedTopEdgeToTriggerMiddle = Math.max(
587
+ topEdgeToTriggerMiddle,
588
+ contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport
589
+ (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight
590
+ );
591
+ const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;
592
+ contentWrapper.style.height = height + "px";
593
+ viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;
594
+ }
595
+ contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;
596
+ contentWrapper.style.minHeight = minContentHeight + "px";
597
+ contentWrapper.style.maxHeight = availableHeight + "px";
598
+ onPlaced?.();
599
+ requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);
600
+ }
601
+ }, [
602
+ getItems,
603
+ context.trigger,
604
+ context.valueNode,
605
+ contentWrapper,
606
+ content,
607
+ viewport,
608
+ selectedItem,
609
+ selectedItemText,
610
+ context.dir,
611
+ onPlaced
612
+ ]);
613
+ useLayoutEffect2(() => position(), [position]);
614
+ const [contentZIndex, setContentZIndex] = React.useState();
615
+ useLayoutEffect2(() => {
616
+ if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
617
+ }, [content]);
618
+ const handleScrollButtonChange = React.useCallback(
619
+ (node) => {
620
+ if (node && shouldRepositionRef.current === true) {
621
+ position();
622
+ focusSelectedItem?.();
623
+ shouldRepositionRef.current = false;
624
+ }
625
+ },
626
+ [position, focusSelectedItem]
627
+ );
7
628
  return /* @__PURE__ */ jsx(
8
- Primitive.label,
629
+ SelectViewportProvider,
9
630
  {
10
- ...props,
631
+ scope: __scopeSelect,
632
+ contentWrapper,
633
+ shouldExpandOnScrollRef,
634
+ onScrollButtonChange: handleScrollButtonChange,
635
+ children: /* @__PURE__ */ jsx(
636
+ "div",
637
+ {
638
+ ref: setContentWrapper,
639
+ style: {
640
+ display: "flex",
641
+ flexDirection: "column",
642
+ position: "fixed",
643
+ zIndex: contentZIndex
644
+ },
645
+ children: /* @__PURE__ */ jsx(
646
+ Primitive.div,
647
+ {
648
+ ...popperProps,
649
+ ref: composedRefs,
650
+ style: {
651
+ // When we get the height of the content, it includes borders. If we were to set
652
+ // the height without having `boxSizing: 'border-box'` it would be too big.
653
+ boxSizing: "border-box",
654
+ // We need to ensure the content doesn't get taller than the wrapper
655
+ maxHeight: "100%",
656
+ ...popperProps.style
657
+ }
658
+ }
659
+ )
660
+ }
661
+ )
662
+ }
663
+ );
664
+ });
665
+ SelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;
666
+ var POPPER_POSITION_NAME = "SelectPopperPosition";
667
+ var SelectPopperPosition = React.forwardRef((props, forwardedRef) => {
668
+ const {
669
+ __scopeSelect,
670
+ align = "start",
671
+ collisionPadding = CONTENT_MARGIN,
672
+ ...popperProps
673
+ } = props;
674
+ const popperScope = usePopperScope(__scopeSelect);
675
+ return /* @__PURE__ */ jsx(
676
+ Content,
677
+ {
678
+ ...popperScope,
679
+ ...popperProps,
11
680
  ref: forwardedRef,
12
- onMouseDown: (event) => {
13
- const target = event.target;
14
- if (target.closest("button, input, select, textarea")) return;
15
- props.onMouseDown?.(event);
16
- if (!event.defaultPrevented && event.detail > 1) event.preventDefault();
681
+ align,
682
+ collisionPadding,
683
+ style: {
684
+ // Ensure border-box for floating-ui calculations
685
+ boxSizing: "border-box",
686
+ ...popperProps.style,
687
+ // re-namespace exposed content custom properties
688
+ ...{
689
+ "--radix-select-content-transform-origin": "var(--radix-popper-transform-origin)",
690
+ "--radix-select-content-available-width": "var(--radix-popper-available-width)",
691
+ "--radix-select-content-available-height": "var(--radix-popper-available-height)",
692
+ "--radix-select-trigger-width": "var(--radix-popper-anchor-width)",
693
+ "--radix-select-trigger-height": "var(--radix-popper-anchor-height)"
694
+ }
695
+ }
696
+ }
697
+ );
698
+ });
699
+ SelectPopperPosition.displayName = POPPER_POSITION_NAME;
700
+ var [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});
701
+ var VIEWPORT_NAME = "SelectViewport";
702
+ var SelectViewport = React.forwardRef(
703
+ (props, forwardedRef) => {
704
+ const { __scopeSelect, nonce, ...viewportProps } = props;
705
+ const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);
706
+ const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
707
+ const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);
708
+ const prevScrollTopRef = React.useRef(0);
709
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
710
+ /* @__PURE__ */ jsx(
711
+ "style",
712
+ {
713
+ dangerouslySetInnerHTML: {
714
+ __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
715
+ },
716
+ nonce
717
+ }
718
+ ),
719
+ /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(
720
+ Primitive.div,
721
+ {
722
+ "data-radix-select-viewport": "",
723
+ role: "presentation",
724
+ ...viewportProps,
725
+ ref: composedRefs,
726
+ style: {
727
+ // we use position: 'relative' here on the `viewport` so that when we call
728
+ // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport
729
+ // (independent of the scrollUpButton).
730
+ position: "relative",
731
+ flex: 1,
732
+ // Viewport should only be scrollable in the vertical direction.
733
+ // This won't work in vertical writing modes, so we'll need to
734
+ // revisit this if/when that is supported
735
+ // https://developer.chrome.com/blog/vertical-form-controls
736
+ overflow: "hidden auto",
737
+ ...viewportProps.style
738
+ },
739
+ onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {
740
+ const viewport = event.currentTarget;
741
+ const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;
742
+ if (shouldExpandOnScrollRef?.current && contentWrapper) {
743
+ const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);
744
+ if (scrolledBy > 0) {
745
+ const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;
746
+ const cssMinHeight = parseFloat(contentWrapper.style.minHeight);
747
+ const cssHeight = parseFloat(contentWrapper.style.height);
748
+ const prevHeight = Math.max(cssMinHeight, cssHeight);
749
+ if (prevHeight < availableHeight) {
750
+ const nextHeight = prevHeight + scrolledBy;
751
+ const clampedNextHeight = Math.min(availableHeight, nextHeight);
752
+ const heightDiff = nextHeight - clampedNextHeight;
753
+ contentWrapper.style.height = clampedNextHeight + "px";
754
+ if (contentWrapper.style.bottom === "0px") {
755
+ viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;
756
+ contentWrapper.style.justifyContent = "flex-end";
757
+ }
758
+ }
759
+ }
760
+ }
761
+ prevScrollTopRef.current = viewport.scrollTop;
762
+ })
763
+ }
764
+ ) })
765
+ ] });
766
+ }
767
+ );
768
+ SelectViewport.displayName = VIEWPORT_NAME;
769
+ var GROUP_NAME = "SelectGroup";
770
+ var [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);
771
+ var SelectGroup = React.forwardRef(
772
+ (props, forwardedRef) => {
773
+ const { __scopeSelect, ...groupProps } = props;
774
+ const groupId = useId();
775
+ return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: "group", "aria-labelledby": groupId, ...groupProps, ref: forwardedRef }) });
776
+ }
777
+ );
778
+ SelectGroup.displayName = GROUP_NAME;
779
+ var LABEL_NAME = "SelectLabel";
780
+ var SelectLabel = React.forwardRef(
781
+ (props, forwardedRef) => {
782
+ const { __scopeSelect, ...labelProps } = props;
783
+ const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);
784
+ return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });
785
+ }
786
+ );
787
+ SelectLabel.displayName = LABEL_NAME;
788
+ var ITEM_NAME = "SelectItem";
789
+ var [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);
790
+ var SelectItem = React.forwardRef(
791
+ (props, forwardedRef) => {
792
+ const {
793
+ __scopeSelect,
794
+ value,
795
+ disabled = false,
796
+ textValue: textValueProp,
797
+ ...itemProps
798
+ } = props;
799
+ const context = useSelectContext(ITEM_NAME, __scopeSelect);
800
+ const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);
801
+ const isSelected = context.value === value;
802
+ const [textValue, setTextValue] = React.useState(textValueProp ?? "");
803
+ const [isFocused, setIsFocused] = React.useState(false);
804
+ const composedRefs = useComposedRefs(
805
+ forwardedRef,
806
+ (node) => contentContext.itemRefCallback?.(node, value, disabled)
807
+ );
808
+ const textId = useId();
809
+ const pointerTypeRef = React.useRef("touch");
810
+ const handleSelect = () => {
811
+ if (!disabled) {
812
+ context.onValueChange(value);
813
+ context.onOpenChange(false);
17
814
  }
815
+ };
816
+ if (value === "") {
817
+ throw new Error(
818
+ "A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder."
819
+ );
820
+ }
821
+ return /* @__PURE__ */ jsx(
822
+ SelectItemContextProvider,
823
+ {
824
+ scope: __scopeSelect,
825
+ value,
826
+ disabled,
827
+ textId,
828
+ isSelected,
829
+ onItemTextChange: React.useCallback((node) => {
830
+ setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? "").trim());
831
+ }, []),
832
+ children: /* @__PURE__ */ jsx(
833
+ Collection.ItemSlot,
834
+ {
835
+ scope: __scopeSelect,
836
+ value,
837
+ disabled,
838
+ textValue,
839
+ children: /* @__PURE__ */ jsx(
840
+ Primitive.div,
841
+ {
842
+ role: "option",
843
+ "aria-labelledby": textId,
844
+ "data-highlighted": isFocused ? "" : void 0,
845
+ "aria-selected": isSelected && isFocused,
846
+ "data-state": isSelected ? "checked" : "unchecked",
847
+ "aria-disabled": disabled || void 0,
848
+ "data-disabled": disabled ? "" : void 0,
849
+ tabIndex: disabled ? void 0 : -1,
850
+ ...itemProps,
851
+ ref: composedRefs,
852
+ onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),
853
+ onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),
854
+ onClick: composeEventHandlers(itemProps.onClick, () => {
855
+ if (pointerTypeRef.current !== "mouse") handleSelect();
856
+ }),
857
+ onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {
858
+ if (pointerTypeRef.current === "mouse") handleSelect();
859
+ }),
860
+ onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {
861
+ pointerTypeRef.current = event.pointerType;
862
+ }),
863
+ onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {
864
+ pointerTypeRef.current = event.pointerType;
865
+ if (disabled) {
866
+ contentContext.onItemLeave?.();
867
+ } else if (pointerTypeRef.current === "mouse") {
868
+ event.currentTarget.focus({ preventScroll: true });
869
+ }
870
+ }),
871
+ onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {
872
+ if (event.currentTarget === document.activeElement) {
873
+ contentContext.onItemLeave?.();
874
+ }
875
+ }),
876
+ onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {
877
+ const isTypingAhead = contentContext.searchRef?.current !== "";
878
+ if (isTypingAhead && event.key === " ") return;
879
+ if (SELECTION_KEYS.includes(event.key)) handleSelect();
880
+ if (event.key === " ") event.preventDefault();
881
+ })
882
+ }
883
+ )
884
+ }
885
+ )
886
+ }
887
+ );
888
+ }
889
+ );
890
+ SelectItem.displayName = ITEM_NAME;
891
+ var ITEM_TEXT_NAME = "SelectItemText";
892
+ var SelectItemText = React.forwardRef(
893
+ (props, forwardedRef) => {
894
+ const { __scopeSelect, className, style, ...itemTextProps } = props;
895
+ const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);
896
+ const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);
897
+ const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);
898
+ const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);
899
+ const [itemTextNode, setItemTextNode] = React.useState(null);
900
+ const composedRefs = useComposedRefs(
901
+ forwardedRef,
902
+ (node) => setItemTextNode(node),
903
+ itemContext.onItemTextChange,
904
+ (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)
905
+ );
906
+ const textContent = itemTextNode?.textContent;
907
+ const nativeOption = React.useMemo(
908
+ () => /* @__PURE__ */ jsx("option", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),
909
+ [itemContext.disabled, itemContext.value, textContent]
910
+ );
911
+ const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;
912
+ useLayoutEffect2(() => {
913
+ onNativeOptionAdd(nativeOption);
914
+ return () => onNativeOptionRemove(nativeOption);
915
+ }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
916
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
917
+ /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
918
+ itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null
919
+ ] });
920
+ }
921
+ );
922
+ SelectItemText.displayName = ITEM_TEXT_NAME;
923
+ var ITEM_INDICATOR_NAME = "SelectItemIndicator";
924
+ var SelectItemIndicator = React.forwardRef(
925
+ (props, forwardedRef) => {
926
+ const { __scopeSelect, ...itemIndicatorProps } = props;
927
+ const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);
928
+ return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { "aria-hidden": true, ...itemIndicatorProps, ref: forwardedRef }) : null;
929
+ }
930
+ );
931
+ SelectItemIndicator.displayName = ITEM_INDICATOR_NAME;
932
+ var SCROLL_UP_BUTTON_NAME = "SelectScrollUpButton";
933
+ var SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {
934
+ const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
935
+ const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);
936
+ const [canScrollUp, setCanScrollUp] = React.useState(false);
937
+ const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
938
+ useLayoutEffect2(() => {
939
+ if (contentContext.viewport && contentContext.isPositioned) {
940
+ let handleScroll2 = function() {
941
+ const canScrollUp2 = viewport.scrollTop > 0;
942
+ setCanScrollUp(canScrollUp2);
943
+ };
944
+ const viewport = contentContext.viewport;
945
+ handleScroll2();
946
+ viewport.addEventListener("scroll", handleScroll2);
947
+ return () => viewport.removeEventListener("scroll", handleScroll2);
948
+ }
949
+ }, [contentContext.viewport, contentContext.isPositioned]);
950
+ return canScrollUp ? /* @__PURE__ */ jsx(
951
+ SelectScrollButtonImpl,
952
+ {
953
+ ...props,
954
+ ref: composedRefs,
955
+ onAutoScroll: () => {
956
+ const { viewport, selectedItem } = contentContext;
957
+ if (viewport && selectedItem) {
958
+ viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;
959
+ }
960
+ }
961
+ }
962
+ ) : null;
963
+ });
964
+ SelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;
965
+ var SCROLL_DOWN_BUTTON_NAME = "SelectScrollDownButton";
966
+ var SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {
967
+ const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
968
+ const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);
969
+ const [canScrollDown, setCanScrollDown] = React.useState(false);
970
+ const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);
971
+ useLayoutEffect2(() => {
972
+ if (contentContext.viewport && contentContext.isPositioned) {
973
+ let handleScroll2 = function() {
974
+ const maxScroll = viewport.scrollHeight - viewport.clientHeight;
975
+ const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;
976
+ setCanScrollDown(canScrollDown2);
977
+ };
978
+ const viewport = contentContext.viewport;
979
+ handleScroll2();
980
+ viewport.addEventListener("scroll", handleScroll2);
981
+ return () => viewport.removeEventListener("scroll", handleScroll2);
982
+ }
983
+ }, [contentContext.viewport, contentContext.isPositioned]);
984
+ return canScrollDown ? /* @__PURE__ */ jsx(
985
+ SelectScrollButtonImpl,
986
+ {
987
+ ...props,
988
+ ref: composedRefs,
989
+ onAutoScroll: () => {
990
+ const { viewport, selectedItem } = contentContext;
991
+ if (viewport && selectedItem) {
992
+ viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;
993
+ }
994
+ }
995
+ }
996
+ ) : null;
997
+ });
998
+ SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
999
+ var SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {
1000
+ const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;
1001
+ const contentContext = useSelectContentContext("SelectScrollButton", __scopeSelect);
1002
+ const autoScrollTimerRef = React.useRef(null);
1003
+ const getItems = useCollection(__scopeSelect);
1004
+ const clearAutoScrollTimer = React.useCallback(() => {
1005
+ if (autoScrollTimerRef.current !== null) {
1006
+ window.clearInterval(autoScrollTimerRef.current);
1007
+ autoScrollTimerRef.current = null;
1008
+ }
1009
+ }, []);
1010
+ React.useEffect(() => {
1011
+ return () => clearAutoScrollTimer();
1012
+ }, [clearAutoScrollTimer]);
1013
+ useLayoutEffect2(() => {
1014
+ const activeItem = getItems().find((item) => item.ref.current === document.activeElement);
1015
+ activeItem?.ref.current?.scrollIntoView({ block: "nearest" });
1016
+ }, [getItems]);
1017
+ return /* @__PURE__ */ jsx(
1018
+ Primitive.div,
1019
+ {
1020
+ "aria-hidden": true,
1021
+ ...scrollIndicatorProps,
1022
+ ref: forwardedRef,
1023
+ style: { flexShrink: 0, ...scrollIndicatorProps.style },
1024
+ onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {
1025
+ if (autoScrollTimerRef.current === null) {
1026
+ autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1027
+ }
1028
+ }),
1029
+ onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {
1030
+ contentContext.onItemLeave?.();
1031
+ if (autoScrollTimerRef.current === null) {
1032
+ autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);
1033
+ }
1034
+ }),
1035
+ onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {
1036
+ clearAutoScrollTimer();
1037
+ })
18
1038
  }
19
1039
  );
20
1040
  });
21
- Label.displayName = NAME;
22
- var Root = Label;
1041
+ var SEPARATOR_NAME = "SelectSeparator";
1042
+ var SelectSeparator = React.forwardRef(
1043
+ (props, forwardedRef) => {
1044
+ const { __scopeSelect, ...separatorProps } = props;
1045
+ return /* @__PURE__ */ jsx(Primitive.div, { "aria-hidden": true, ...separatorProps, ref: forwardedRef });
1046
+ }
1047
+ );
1048
+ SelectSeparator.displayName = SEPARATOR_NAME;
1049
+ var ARROW_NAME = "SelectArrow";
1050
+ var SelectArrow = React.forwardRef(
1051
+ (props, forwardedRef) => {
1052
+ const { __scopeSelect, ...arrowProps } = props;
1053
+ const popperScope = usePopperScope(__scopeSelect);
1054
+ const context = useSelectContext(ARROW_NAME, __scopeSelect);
1055
+ const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);
1056
+ return context.open && contentContext.position === "popper" ? /* @__PURE__ */ jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;
1057
+ }
1058
+ );
1059
+ SelectArrow.displayName = ARROW_NAME;
1060
+ var BUBBLE_INPUT_NAME = "SelectBubbleInput";
1061
+ var SelectBubbleInput = React.forwardRef(
1062
+ ({ __scopeSelect, value, ...props }, forwardedRef) => {
1063
+ const ref = React.useRef(null);
1064
+ const composedRefs = useComposedRefs(forwardedRef, ref);
1065
+ const prevValue = usePrevious(value);
1066
+ React.useEffect(() => {
1067
+ const select = ref.current;
1068
+ if (!select) return;
1069
+ const selectProto = window.HTMLSelectElement.prototype;
1070
+ const descriptor = Object.getOwnPropertyDescriptor(
1071
+ selectProto,
1072
+ "value"
1073
+ );
1074
+ const setValue = descriptor.set;
1075
+ if (prevValue !== value && setValue) {
1076
+ const event = new Event("change", { bubbles: true });
1077
+ setValue.call(select, value);
1078
+ select.dispatchEvent(event);
1079
+ }
1080
+ }, [prevValue, value]);
1081
+ return /* @__PURE__ */ jsx(
1082
+ Primitive.select,
1083
+ {
1084
+ ...props,
1085
+ style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },
1086
+ ref: composedRefs,
1087
+ defaultValue: value
1088
+ }
1089
+ );
1090
+ }
1091
+ );
1092
+ SelectBubbleInput.displayName = BUBBLE_INPUT_NAME;
1093
+ function shouldShowPlaceholder(value) {
1094
+ return value === "" || value === void 0;
1095
+ }
1096
+ function useTypeaheadSearch(onSearchChange) {
1097
+ const handleSearchChange = useCallbackRef(onSearchChange);
1098
+ const searchRef = React.useRef("");
1099
+ const timerRef = React.useRef(0);
1100
+ const handleTypeaheadSearch = React.useCallback(
1101
+ (key) => {
1102
+ const search = searchRef.current + key;
1103
+ handleSearchChange(search);
1104
+ (function updateSearch(value) {
1105
+ searchRef.current = value;
1106
+ window.clearTimeout(timerRef.current);
1107
+ if (value !== "") timerRef.current = window.setTimeout(() => updateSearch(""), 1e3);
1108
+ })(search);
1109
+ },
1110
+ [handleSearchChange]
1111
+ );
1112
+ const resetTypeahead = React.useCallback(() => {
1113
+ searchRef.current = "";
1114
+ window.clearTimeout(timerRef.current);
1115
+ }, []);
1116
+ React.useEffect(() => {
1117
+ return () => window.clearTimeout(timerRef.current);
1118
+ }, []);
1119
+ return [searchRef, handleTypeaheadSearch, resetTypeahead];
1120
+ }
1121
+ function findNextItem(items, search, currentItem) {
1122
+ const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
1123
+ const normalizedSearch = isRepeated ? search[0] : search;
1124
+ const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;
1125
+ let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));
1126
+ const excludeCurrentItem = normalizedSearch.length === 1;
1127
+ if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);
1128
+ const nextItem = wrappedItems.find(
1129
+ (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())
1130
+ );
1131
+ return nextItem !== currentItem ? nextItem : void 0;
1132
+ }
1133
+ function wrapArray(array, startIndex) {
1134
+ return array.map((_, index) => array[(startIndex + index) % array.length]);
1135
+ }
1136
+ var Root2 = Select;
1137
+ var Trigger = SelectTrigger;
1138
+ var Value = SelectValue;
1139
+ var Icon = SelectIcon;
1140
+ var Portal = SelectPortal;
1141
+ var Content2 = SelectContent;
1142
+ var Viewport = SelectViewport;
1143
+ var Group = SelectGroup;
1144
+ var Item = SelectItem;
1145
+ var ItemText = SelectItemText;
1146
+ var ItemIndicator = SelectItemIndicator;
1147
+ var ScrollUpButton = SelectScrollUpButton;
1148
+ var ScrollDownButton = SelectScrollDownButton;
23
1149
 
24
- export { Root as R };
1150
+ export { Content2 as C, Group as G, Icon as I, Portal as P, Root2 as R, ScrollUpButton as S, Trigger as T, Value as V, Viewport as a, Item as b, ItemIndicator as c, ItemText as d, ScrollDownButton as e, clamp as f };
25
1151
  //# sourceMappingURL=index15.js.map