@vritti/quantum-ui 0.3.9 → 0.3.12

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 (467) hide show
  1. package/dist/Avatar.js +5 -5
  2. package/dist/BarChart.js +1 -9
  3. package/dist/BarChart.js.map +1 -1
  4. package/dist/Breadcrumb.js +1 -1
  5. package/dist/Breadcrumb.js.map +1 -1
  6. package/dist/Button.js +14 -6
  7. package/dist/Button.js.map +1 -1
  8. package/dist/Checkbox2.js +5 -5
  9. package/dist/CheckboxGroup.js +64 -6
  10. package/dist/CheckboxGroup.js.map +1 -1
  11. package/dist/Collapsible.js +1 -1
  12. package/dist/Collapsible.js.map +1 -1
  13. package/dist/ConfirmHost.js +5 -17
  14. package/dist/ConfirmHost.js.map +1 -1
  15. package/dist/CurrencyField.js +1 -1
  16. package/dist/CurrencyFilter.js.map +1 -1
  17. package/dist/DateRangePicker.js +4 -2
  18. package/dist/DateRangePicker.js.map +1 -1
  19. package/dist/DateTimePicker.js +1 -1
  20. package/dist/DateTimeRangePicker.js +4 -2
  21. package/dist/DateTimeRangePicker.js.map +1 -1
  22. package/dist/DetailSectionSkeleton.js +14 -1
  23. package/dist/DetailSectionSkeleton.js.map +1 -1
  24. package/dist/Dialog.js +1 -1
  25. package/dist/Dialog.js.map +1 -1
  26. package/dist/ErrorBoundary.js +1 -108
  27. package/dist/ErrorBoundary.js.map +1 -1
  28. package/dist/FilePreview.js +1 -145
  29. package/dist/FilePreview.js.map +1 -1
  30. package/dist/HierarchyGraph.js +12 -8
  31. package/dist/HierarchyGraph.js.map +1 -1
  32. package/dist/IconSelect.js +31393 -0
  33. package/dist/IconSelect.js.map +1 -0
  34. package/dist/Kbd.js +11 -19
  35. package/dist/Kbd.js.map +1 -1
  36. package/dist/LocationSelector.js +13 -15
  37. package/dist/LocationSelector.js.map +1 -1
  38. package/dist/OTPField.js +1 -12
  39. package/dist/OTPField.js.map +1 -1
  40. package/dist/PageContent.js.map +1 -1
  41. package/dist/PageHeaderSkeleton.js +1 -1
  42. package/dist/PageHeaderSkeleton.js.map +1 -1
  43. package/dist/PermissionGate.js +31 -0
  44. package/dist/PermissionGate.js.map +1 -0
  45. package/dist/PieChart.js.map +1 -1
  46. package/dist/Progress.js +2 -2
  47. package/dist/QuantSelector.js.map +1 -1
  48. package/dist/RadialChart.js.map +1 -1
  49. package/dist/RadioGroup.js +7 -7
  50. package/dist/Select.js +32 -188
  51. package/dist/Select.js.map +1 -1
  52. package/dist/SerialSelector.js +13 -15
  53. package/dist/SerialSelector.js.map +1 -1
  54. package/dist/Sidebar.js +8 -19
  55. package/dist/Sidebar.js.map +1 -1
  56. package/dist/Sonner.js +2 -17
  57. package/dist/Sonner.js.map +1 -1
  58. package/dist/SupplierItemSelector.js.map +1 -1
  59. package/dist/Switch.js +7 -5
  60. package/dist/Switch.js.map +1 -1
  61. package/dist/TabsSkeleton.js +2 -2
  62. package/dist/TabsSkeleton.js.map +1 -1
  63. package/dist/ThemeToggle.js +1 -41
  64. package/dist/ThemeToggle.js.map +1 -1
  65. package/dist/Toggle.js +1 -1
  66. package/dist/Tooltip.js +19 -0
  67. package/dist/Tooltip.js.map +1 -0
  68. package/dist/UomSelector.js +6 -1
  69. package/dist/UomSelector.js.map +1 -1
  70. package/dist/UploadFile.js +1 -35
  71. package/dist/UploadFile.js.map +1 -1
  72. package/dist/ValueFilter.js.map +1 -1
  73. package/dist/ViewTabs.js +1 -16
  74. package/dist/ViewTabs.js.map +1 -1
  75. package/dist/assets/quantum-ui.css +109 -4
  76. package/dist/calendar2.js +2 -13
  77. package/dist/calendar2.js.map +1 -1
  78. package/dist/check-check.js +18 -0
  79. package/dist/check-check.js.map +1 -0
  80. package/dist/chevron-left.js +15 -0
  81. package/dist/chevron-left.js.map +1 -0
  82. package/dist/circle-question-mark.js +19 -0
  83. package/dist/circle-question-mark.js.map +1 -0
  84. package/dist/circle-x.js +19 -0
  85. package/dist/circle-x.js.map +1 -0
  86. package/dist/circle.js +15 -0
  87. package/dist/circle.js.map +1 -0
  88. package/dist/components/DataTable.js +1 -1
  89. package/dist/components/DetailField.js +1 -1
  90. package/dist/components/FormattedDate.js.map +1 -1
  91. package/dist/components/PermissionGate.js +2 -0
  92. package/dist/components/PermissionGate.js.map +1 -0
  93. package/dist/components/RichTextEditor.js +1 -1
  94. package/dist/components/ScanBarcodeButton.js +1 -20
  95. package/dist/components/ScanBarcodeButton.js.map +1 -1
  96. package/dist/components/Switch.js +1 -1
  97. package/dist/components/Tooltip.js +2 -0
  98. package/dist/components/Tooltip.js.map +1 -0
  99. package/dist/components/TreeView.js +4 -4
  100. package/dist/dot.js +15 -0
  101. package/dist/dot.js.map +1 -0
  102. package/dist/dropdown-menu.js +11 -22
  103. package/dist/dropdown-menu.js.map +1 -1
  104. package/dist/file.js +148 -0
  105. package/dist/file.js.map +1 -0
  106. package/dist/globe.js +19 -0
  107. package/dist/globe.js.map +1 -0
  108. package/dist/icons.js +21 -0
  109. package/dist/icons.js.map +1 -0
  110. package/dist/image-component.js +37 -96
  111. package/dist/image-component.js.map +1 -1
  112. package/dist/index.js +7 -4
  113. package/dist/index.js.map +1 -1
  114. package/dist/index12.js +7 -7
  115. package/dist/index13.js +7 -7
  116. package/dist/index14.js +11 -11
  117. package/dist/index15.js +1 -1
  118. package/dist/index16.js +1 -1
  119. package/dist/index17.js +168 -175
  120. package/dist/index17.js.map +1 -1
  121. package/dist/index18.js +173 -201
  122. package/dist/index18.js.map +1 -1
  123. package/dist/index19.js +203 -69
  124. package/dist/index19.js.map +1 -1
  125. package/dist/index20.js +70 -211
  126. package/dist/index20.js.map +1 -1
  127. package/dist/index21.js +206 -116
  128. package/dist/index21.js.map +1 -1
  129. package/dist/index22.js +122 -70
  130. package/dist/index22.js.map +1 -1
  131. package/dist/index23.js +74 -11
  132. package/dist/index23.js.map +1 -1
  133. package/dist/index24.js +13 -1134
  134. package/dist/index24.js.map +1 -1
  135. package/dist/index25.js +1120 -219
  136. package/dist/index25.js.map +1 -1
  137. package/dist/index26.js +202 -2506
  138. package/dist/index26.js.map +1 -1
  139. package/dist/index27.js +2527 -23
  140. package/dist/index27.js.map +1 -1
  141. package/dist/index28.js +32 -4
  142. package/dist/index28.js.map +1 -1
  143. package/dist/index29.js +3 -1124
  144. package/dist/index29.js.map +1 -1
  145. package/dist/index30.js +1123 -35
  146. package/dist/index30.js.map +1 -1
  147. package/dist/index31.js +36 -310
  148. package/dist/index31.js.map +1 -1
  149. package/dist/index32.js +309 -7
  150. package/dist/index32.js.map +1 -1
  151. package/dist/index33.js +8 -30
  152. package/dist/index33.js.map +1 -1
  153. package/dist/index34.js +29 -59
  154. package/dist/index34.js.map +1 -1
  155. package/dist/index35.js +59 -10
  156. package/dist/index35.js.map +1 -1
  157. package/dist/index36.js +10 -35
  158. package/dist/index36.js.map +1 -1
  159. package/dist/index37.js +27 -36809
  160. package/dist/index37.js.map +1 -1
  161. package/dist/index38.js +35362 -70
  162. package/dist/index38.js.map +1 -1
  163. package/dist/index39.js +72 -187
  164. package/dist/index39.js.map +1 -1
  165. package/dist/index4.js +5 -5
  166. package/dist/index40.js +199 -0
  167. package/dist/index40.js.map +1 -0
  168. package/dist/lib/components/BarChart/BarChart.d.ts.map +1 -1
  169. package/dist/lib/components/Button/Button.d.ts +1 -0
  170. package/dist/lib/components/Button/Button.d.ts.map +1 -1
  171. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts +1 -0
  172. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  173. package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
  174. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts +3 -0
  175. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
  176. package/dist/lib/components/DataTable/DataTable.d.ts +1 -1
  177. package/dist/lib/components/DataTable/DataTable.d.ts.map +1 -1
  178. package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts +3 -1
  179. package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts.map +1 -1
  180. package/dist/lib/components/DataTable/components/RowActions.d.ts +1 -0
  181. package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
  182. package/dist/lib/components/DataTable/index.d.ts +2 -2
  183. package/dist/lib/components/DataTable/index.d.ts.map +1 -1
  184. package/dist/lib/components/DataTable/types.d.ts +3 -0
  185. package/dist/lib/components/DataTable/types.d.ts.map +1 -1
  186. package/dist/lib/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  187. package/dist/lib/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
  188. package/dist/lib/components/DetailField/DetailHeader.d.ts +10 -0
  189. package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -0
  190. package/dist/lib/components/DetailField/index.d.ts +1 -0
  191. package/dist/lib/components/DetailField/index.d.ts.map +1 -1
  192. package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
  193. package/dist/lib/components/Editor/context/editor-config-context.d.ts +2 -2
  194. package/dist/lib/components/Editor/context/editor-config-context.d.ts.map +1 -1
  195. package/dist/lib/components/Editor/context/toolbar-context.d.ts +1 -1
  196. package/dist/lib/components/Editor/context/toolbar-context.d.ts.map +1 -1
  197. package/dist/lib/components/Editor/editor-hooks/use-debounce.d.ts.map +1 -1
  198. package/dist/lib/components/Editor/editor-hooks/use-modal.d.ts.map +1 -1
  199. package/dist/lib/components/Editor/editor-hooks/use-update-toolbar.d.ts.map +1 -1
  200. package/dist/lib/components/Editor/editor-ui/button-group.d.ts +3 -3
  201. package/dist/lib/components/Editor/editor-ui/button-group.d.ts.map +1 -1
  202. package/dist/lib/components/Editor/editor-ui/button.d.ts +2 -2
  203. package/dist/lib/components/Editor/editor-ui/button.d.ts.map +1 -1
  204. package/dist/lib/components/Editor/editor-ui/code-button.d.ts.map +1 -1
  205. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts +8 -8
  206. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
  207. package/dist/lib/components/Editor/editor-ui/command.d.ts +2 -2
  208. package/dist/lib/components/Editor/editor-ui/command.d.ts.map +1 -1
  209. package/dist/lib/components/Editor/editor-ui/content-editable.d.ts +1 -1
  210. package/dist/lib/components/Editor/editor-ui/content-editable.d.ts.map +1 -1
  211. package/dist/lib/components/Editor/editor-ui/dialog.d.ts +4 -4
  212. package/dist/lib/components/Editor/editor-ui/dialog.d.ts.map +1 -1
  213. package/dist/lib/components/Editor/editor-ui/image-component.d.ts +3 -3
  214. package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
  215. package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts +2 -2
  216. package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts.map +1 -1
  217. package/dist/lib/components/Editor/editor-ui/input.d.ts +2 -2
  218. package/dist/lib/components/Editor/editor-ui/input.d.ts.map +1 -1
  219. package/dist/lib/components/Editor/editor-ui/label.d.ts +2 -2
  220. package/dist/lib/components/Editor/editor-ui/label.d.ts.map +1 -1
  221. package/dist/lib/components/Editor/editor-ui/popover.d.ts +2 -2
  222. package/dist/lib/components/Editor/editor-ui/popover.d.ts.map +1 -1
  223. package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts +2 -2
  224. package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts.map +1 -1
  225. package/dist/lib/components/Editor/editor-ui/select.d.ts +3 -3
  226. package/dist/lib/components/Editor/editor-ui/select.d.ts.map +1 -1
  227. package/dist/lib/components/Editor/editor-ui/separator.d.ts +2 -2
  228. package/dist/lib/components/Editor/editor-ui/separator.d.ts.map +1 -1
  229. package/dist/lib/components/Editor/editor-ui/tabs.d.ts +2 -2
  230. package/dist/lib/components/Editor/editor-ui/tabs.d.ts.map +1 -1
  231. package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts +2 -2
  232. package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts.map +1 -1
  233. package/dist/lib/components/Editor/editor-ui/toggle.d.ts +2 -2
  234. package/dist/lib/components/Editor/editor-ui/toggle.d.ts.map +1 -1
  235. package/dist/lib/components/Editor/editor-ui/tooltip.d.ts +2 -2
  236. package/dist/lib/components/Editor/editor-ui/tooltip.d.ts.map +1 -1
  237. package/dist/lib/components/Editor/index.d.ts.map +1 -1
  238. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts +2 -2
  239. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
  240. package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts +2 -2
  241. package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts.map +1 -1
  242. package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts +1 -1
  243. package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts.map +1 -1
  244. package/dist/lib/components/Editor/nodes/emoji-node.d.ts.map +1 -1
  245. package/dist/lib/components/Editor/nodes/image-node.d.ts +5 -5
  246. package/dist/lib/components/Editor/nodes/image-node.d.ts.map +1 -1
  247. package/dist/lib/components/Editor/nodes/keyword-node.d.ts.map +1 -1
  248. package/dist/lib/components/Editor/nodes/layout-container-node.d.ts.map +1 -1
  249. package/dist/lib/components/Editor/nodes/layout-item-node.d.ts.map +1 -1
  250. package/dist/lib/components/Editor/nodes/mention-node.d.ts +1 -1
  251. package/dist/lib/components/Editor/nodes/mention-node.d.ts.map +1 -1
  252. package/dist/lib/components/Editor/nodes/nodes.d.ts.map +1 -1
  253. package/dist/lib/components/Editor/nodes.d.ts.map +1 -1
  254. package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts +2 -2
  255. package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts.map +1 -1
  256. package/dist/lib/components/Editor/plugins/actions/clear-editor-plugin.d.ts.map +1 -1
  257. package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts +2 -2
  258. package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts.map +1 -1
  259. package/dist/lib/components/Editor/plugins/actions/edit-mode-toggle-plugin.d.ts.map +1 -1
  260. package/dist/lib/components/Editor/plugins/actions/import-export-plugin.d.ts.map +1 -1
  261. package/dist/lib/components/Editor/plugins/actions/markdown-toggle-plugin.d.ts.map +1 -1
  262. package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
  263. package/dist/lib/components/Editor/plugins/actions/share-content-plugin.d.ts.map +1 -1
  264. package/dist/lib/components/Editor/plugins/actions/speech-to-text-plugin.d.ts.map +1 -1
  265. package/dist/lib/components/Editor/plugins/actions/tree-view-plugin.d.ts.map +1 -1
  266. package/dist/lib/components/Editor/plugins/auto-link-plugin.d.ts.map +1 -1
  267. package/dist/lib/components/Editor/plugins/autocomplete-plugin.d.ts.map +1 -1
  268. package/dist/lib/components/Editor/plugins/code-action-menu-plugin.d.ts.map +1 -1
  269. package/dist/lib/components/Editor/plugins/code-highlight-plugin.d.ts.map +1 -1
  270. package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts +1 -1
  271. package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts.map +1 -1
  272. package/dist/lib/components/Editor/plugins/context-menu-plugin.d.ts.map +1 -1
  273. package/dist/lib/components/Editor/plugins/drag-drop-paste-plugin.d.ts.map +1 -1
  274. package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts +1 -1
  275. package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts.map +1 -1
  276. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts +1 -1
  277. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
  278. package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts +1 -1
  279. package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts.map +1 -1
  280. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts +1 -1
  281. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
  282. package/dist/lib/components/Editor/plugins/emoji-picker-plugin.d.ts.map +1 -1
  283. package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
  284. package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
  285. package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
  286. package/dist/lib/components/Editor/plugins/images-plugin.d.ts +4 -4
  287. package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
  288. package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
  289. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts +1 -1
  290. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
  291. package/dist/lib/components/Editor/plugins/link-plugin.d.ts.map +1 -1
  292. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts +1 -1
  293. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
  294. package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
  295. package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts +2 -2
  296. package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts.map +1 -1
  297. package/dist/lib/components/Editor/plugins/picker/bulleted-list-picker-plugin.d.ts.map +1 -1
  298. package/dist/lib/components/Editor/plugins/picker/check-list-picker-plugin.d.ts.map +1 -1
  299. package/dist/lib/components/Editor/plugins/picker/code-picker-plugin.d.ts.map +1 -1
  300. package/dist/lib/components/Editor/plugins/picker/columns-layout-picker-plugin.d.ts.map +1 -1
  301. package/dist/lib/components/Editor/plugins/picker/component-picker-menu-plugin.d.ts.map +1 -1
  302. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts +1 -1
  303. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
  304. package/dist/lib/components/Editor/plugins/picker/divider-picker-plugin.d.ts.map +1 -1
  305. package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts +2 -2
  306. package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts.map +1 -1
  307. package/dist/lib/components/Editor/plugins/picker/heading-picker-plugin.d.ts.map +1 -1
  308. package/dist/lib/components/Editor/plugins/picker/image-picker-plugin.d.ts.map +1 -1
  309. package/dist/lib/components/Editor/plugins/picker/numbered-list-picker-plugin.d.ts.map +1 -1
  310. package/dist/lib/components/Editor/plugins/picker/paragraph-picker-plugin.d.ts.map +1 -1
  311. package/dist/lib/components/Editor/plugins/picker/quote-picker-plugin.d.ts.map +1 -1
  312. package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts +1 -1
  313. package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts.map +1 -1
  314. package/dist/lib/components/Editor/plugins/plugins.d.ts +1 -1
  315. package/dist/lib/components/Editor/plugins/plugins.d.ts.map +1 -1
  316. package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
  317. package/dist/lib/components/Editor/plugins/table-plugin.d.ts +2 -3
  318. package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
  319. package/dist/lib/components/Editor/plugins/toolbar/block-format/block-format-data.d.ts.map +1 -1
  320. package/dist/lib/components/Editor/plugins/toolbar/block-format/format-heading.d.ts.map +1 -1
  321. package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts +1 -1
  322. package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts.map +1 -1
  323. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-horizontal-rule.d.ts.map +1 -1
  324. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-image.d.ts.map +1 -1
  325. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-table.d.ts.map +1 -1
  326. package/dist/lib/components/Editor/plugins/toolbar/block-insert-plugin.d.ts.map +1 -1
  327. package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
  328. package/dist/lib/components/Editor/plugins/toolbar/code-language-toolbar-plugin.d.ts.map +1 -1
  329. package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts +1 -1
  330. package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts.map +1 -1
  331. package/dist/lib/components/Editor/plugins/toolbar/font-background-toolbar-plugin.d.ts.map +1 -1
  332. package/dist/lib/components/Editor/plugins/toolbar/font-color-toolbar-plugin.d.ts.map +1 -1
  333. package/dist/lib/components/Editor/plugins/toolbar/font-family-toolbar-plugin.d.ts.map +1 -1
  334. package/dist/lib/components/Editor/plugins/toolbar/font-format-toolbar-plugin.d.ts.map +1 -1
  335. package/dist/lib/components/Editor/plugins/toolbar/font-size-toolbar-plugin.d.ts.map +1 -1
  336. package/dist/lib/components/Editor/plugins/toolbar/history-toolbar-plugin.d.ts.map +1 -1
  337. package/dist/lib/components/Editor/plugins/toolbar/horizontal-rule-toolbar-plugin.d.ts.map +1 -1
  338. package/dist/lib/components/Editor/plugins/toolbar/image-toolbar-plugin.d.ts.map +1 -1
  339. package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts +1 -1
  340. package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts.map +1 -1
  341. package/dist/lib/components/Editor/plugins/toolbar/subsuper-toolbar-plugin.d.ts.map +1 -1
  342. package/dist/lib/components/Editor/plugins/toolbar/table-toolbar-plugin.d.ts.map +1 -1
  343. package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts +1 -1
  344. package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts.map +1 -1
  345. package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
  346. package/dist/lib/components/Editor/plugins.d.ts.map +1 -1
  347. package/dist/lib/components/Editor/shared/can-use-dom.d.ts.map +1 -1
  348. package/dist/lib/components/Editor/shared/caret-from-point.d.ts.map +1 -1
  349. package/dist/lib/components/Editor/shared/environment.d.ts.map +1 -1
  350. package/dist/lib/components/Editor/shared/invariant.d.ts +1 -1
  351. package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
  352. package/dist/lib/components/Editor/shared/react-test-utils.d.ts +1 -1
  353. package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
  354. package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
  355. package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
  356. package/dist/lib/components/Editor/themes/editor-theme.d.ts.map +1 -1
  357. package/dist/lib/components/Editor/transformers/index.d.ts +6 -6
  358. package/dist/lib/components/Editor/transformers/index.d.ts.map +1 -1
  359. package/dist/lib/components/Editor/transformers/markdown-emoji-transformer.d.ts.map +1 -1
  360. package/dist/lib/components/Editor/transformers/markdown-hr-transformer.d.ts.map +1 -1
  361. package/dist/lib/components/Editor/transformers/markdown-image-transformer.d.ts.map +1 -1
  362. package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
  363. package/dist/lib/components/Editor/transformers/markdown-tweet-transformer.d.ts.map +1 -1
  364. package/dist/lib/components/Editor/types.d.ts.map +1 -1
  365. package/dist/lib/components/Editor/utils/can-use-dom.d.ts.map +1 -1
  366. package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
  367. package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
  368. package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
  369. package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
  370. package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
  371. package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
  372. package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
  373. package/dist/lib/components/FormattedDate/FormattedDate.d.ts.map +1 -1
  374. package/dist/lib/components/FormattedDate/index.d.ts +1 -1
  375. package/dist/lib/components/FormattedDate/index.d.ts.map +1 -1
  376. package/dist/lib/components/HierarchyGraph/HierarchyGraph.d.ts.map +1 -1
  377. package/dist/lib/components/Kbd/Kbd.d.ts.map +1 -1
  378. package/dist/lib/components/Kbd/index.d.ts +1 -1
  379. package/dist/lib/components/Kbd/index.d.ts.map +1 -1
  380. package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
  381. package/dist/lib/components/PermissionGate/PermissionGate.d.ts +18 -0
  382. package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -0
  383. package/dist/lib/components/PermissionGate/index.d.ts +2 -0
  384. package/dist/lib/components/PermissionGate/index.d.ts.map +1 -0
  385. package/dist/lib/components/PieChart/PieChart.d.ts.map +1 -1
  386. package/dist/lib/components/RadialChart/RadialChart.d.ts.map +1 -1
  387. package/dist/lib/components/Select/Select.d.ts.map +1 -1
  388. package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  389. package/dist/lib/components/Select/hooks/useSelect.d.ts +2 -1
  390. package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
  391. package/dist/lib/components/Sidebar/Sidebar.d.ts +2 -0
  392. package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
  393. package/dist/lib/components/Switch/Switch.d.ts +2 -0
  394. package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
  395. package/dist/lib/components/Switch/index.d.ts +2 -2
  396. package/dist/lib/components/Switch/index.d.ts.map +1 -1
  397. package/dist/lib/components/Tooltip/Tooltip.d.ts +12 -0
  398. package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -0
  399. package/dist/lib/components/Tooltip/index.d.ts +3 -0
  400. package/dist/lib/components/Tooltip/index.d.ts.map +1 -0
  401. package/dist/lib/components/ValueFilter/ValueFilter.d.ts.map +1 -1
  402. package/dist/lib/components/index.d.ts +5 -3
  403. package/dist/lib/components/index.d.ts.map +1 -1
  404. package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
  405. package/dist/lib/icons/icon-names.json.d.ts +13731 -0
  406. package/dist/lib/icons/index.d.ts +4 -0
  407. package/dist/lib/icons/index.d.ts.map +1 -0
  408. package/dist/lib/selects/currency/CurrencyFilter.d.ts.map +1 -1
  409. package/dist/lib/selects/icon/IconSelect.d.ts +20 -0
  410. package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -0
  411. package/dist/lib/selects/icon/index.d.ts +2 -0
  412. package/dist/lib/selects/icon/index.d.ts.map +1 -0
  413. package/dist/lib/selects/index.d.ts +3 -2
  414. package/dist/lib/selects/index.d.ts.map +1 -1
  415. package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
  416. package/dist/lib/selects/location/index.d.ts +1 -1
  417. package/dist/lib/selects/location/index.d.ts.map +1 -1
  418. package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
  419. package/dist/lib/selects/quant/QuantSelector.d.ts.map +1 -1
  420. package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
  421. package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
  422. package/dist/lib/selects/uom/UomSelector.d.ts.map +1 -1
  423. package/dist/lib/types/catalog-resolver.d.ts +189 -0
  424. package/dist/lib/types/catalog-resolver.d.ts.map +1 -0
  425. package/dist/lib/utils/format.d.ts.map +1 -1
  426. package/dist/lib/utils/hotkeys.d.ts +1 -1
  427. package/dist/lib/utils/hotkeys.d.ts.map +1 -1
  428. package/dist/lib/utils/zod.d.ts.map +1 -1
  429. package/dist/lock-keyhole.js +19 -0
  430. package/dist/lock-keyhole.js.map +1 -0
  431. package/dist/panel-left.js +18 -0
  432. package/dist/panel-left.js.map +1 -0
  433. package/dist/scan-barcode.js +23 -0
  434. package/dist/scan-barcode.js.map +1 -0
  435. package/dist/selects/icon.js +2 -0
  436. package/dist/selects/icon.js.map +1 -0
  437. package/dist/selects/purchase-order-item.js.map +1 -1
  438. package/dist/shadcn/shadcnMultiSelect/multi-select.d.ts.map +1 -1
  439. package/dist/sun.js +44 -0
  440. package/dist/sun.js.map +1 -0
  441. package/dist/table-properties.js +351 -0
  442. package/dist/table-properties.js.map +1 -0
  443. package/dist/{tooltip.js → tooltip2.js} +1 -1
  444. package/dist/tooltip2.js.map +1 -0
  445. package/dist/types/api-response.js +2 -0
  446. package/dist/types/api-response.js.map +1 -0
  447. package/dist/types/catalog-resolver.js +5 -0
  448. package/dist/types/catalog-resolver.js.map +1 -0
  449. package/dist/types/table-filter.js +17 -0
  450. package/dist/types/table-filter.js.map +1 -0
  451. package/dist/{cells.js → useDataTable.js} +152 -453
  452. package/dist/useDataTable.js.map +1 -0
  453. package/dist/useFormatters.js.map +1 -1
  454. package/dist/user.js +38 -0
  455. package/dist/user.js.map +1 -0
  456. package/dist/utils/format.js +1 -0
  457. package/dist/utils/format.js.map +1 -1
  458. package/dist/utils/motion.js +2 -2
  459. package/dist/utils/zod.js.map +1 -1
  460. package/dist/value.js +1 -1
  461. package/dist/wifi-off.js +111 -0
  462. package/dist/wifi-off.js.map +1 -0
  463. package/dist/youtube.js +737 -0
  464. package/dist/youtube.js.map +1 -0
  465. package/package.json +25 -3
  466. package/dist/cells.js.map +0 -1
  467. package/dist/tooltip.js.map +0 -1
package/dist/Select.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import * as React from 'react';
3
2
  import { memo, forwardRef, useState, useMemo, useRef, useId, useCallback, useEffect } from 'react';
4
3
  import { F as Field, e as FieldLabel, b as FieldDescription, c as FieldError } from './field.js';
5
4
  import { c as cn } from './utils.js';
@@ -12,6 +11,7 @@ import { B as Badge } from './Badge2.js';
12
11
  import { X } from './x.js';
13
12
  import { j as SingleSelect } from './SingleSelect.js';
14
13
  import { useQuery, keepPreviousData, useInfiniteQuery } from '@tanstack/react-query';
14
+ import { u as useInView } from './index17.js';
15
15
  import { axios } from './utils/axios.js';
16
16
 
17
17
  function MultiSelectRoot({ open, onOpenChange, disabled, children }) {
@@ -160,11 +160,10 @@ const MultiSelectRow = memo(function MultiSelectRow2({
160
160
  Checkbox,
161
161
  {
162
162
  checked,
163
- onCheckedChange: () => onToggle(),
164
163
  disabled,
165
164
  tabIndex: -1,
166
165
  "aria-hidden": "true",
167
- className: "self-center"
166
+ className: "pointer-events-none self-center"
168
167
  }
169
168
  ),
170
169
  /* @__PURE__ */ jsxs("span", { className: "min-w-0 flex-1", children: [
@@ -427,16 +426,24 @@ const MultiSelect = forwardRef(
427
426
  return /* @__PURE__ */ jsx("span", { className: "flex flex-wrap items-center gap-1", children: state.selectedOptions.map((option) => /* @__PURE__ */ jsxs(Badge, { variant: "secondary", className: "gap-1 pr-1", children: [
428
427
  transformLabel ? transformLabel(option.label, option, "trigger") : option.label,
429
428
  /* @__PURE__ */ jsx(
430
- "button",
429
+ "span",
431
430
  {
432
- type: "button",
431
+ role: "button",
432
+ tabIndex: 0,
433
433
  "aria-label": `Remove ${option.label}`,
434
- className: "rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2",
434
+ className: "inline-flex cursor-pointer rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2",
435
435
  onMouseDown: (e) => e.preventDefault(),
436
436
  onClick: (e) => {
437
437
  e.stopPropagation();
438
438
  state.toggleOption(option.value);
439
439
  },
440
+ onKeyDown: (e) => {
441
+ if (e.key === "Enter" || e.key === " ") {
442
+ e.preventDefault();
443
+ e.stopPropagation();
444
+ state.toggleOption(option.value);
445
+ }
446
+ },
440
447
  children: /* @__PURE__ */ jsx(X, { className: "size-3 text-muted-foreground hover:text-foreground" })
441
448
  }
442
449
  )
@@ -481,181 +488,6 @@ const MultiSelect = forwardRef(
481
488
  );
482
489
  MultiSelect.displayName = "MultiSelect";
483
490
 
484
- // src/observe.ts
485
- var observerMap = /* @__PURE__ */ new Map();
486
- var RootIds = /* @__PURE__ */ new WeakMap();
487
- var rootId = 0;
488
- var unsupportedValue;
489
- function getRootId(root) {
490
- if (!root) return "0";
491
- if (RootIds.has(root)) return RootIds.get(root);
492
- rootId += 1;
493
- RootIds.set(root, rootId.toString());
494
- return RootIds.get(root);
495
- }
496
- function optionsToId(options) {
497
- return Object.keys(options).sort().filter(
498
- (key) => options[key] !== void 0
499
- ).map((key) => {
500
- return `${key}_${key === "root" ? getRootId(options.root) : options[key]}`;
501
- }).toString();
502
- }
503
- function createObserver(options) {
504
- const id = optionsToId(options);
505
- let instance = observerMap.get(id);
506
- if (!instance) {
507
- const elements = /* @__PURE__ */ new Map();
508
- let thresholds;
509
- const observer = new IntersectionObserver((entries) => {
510
- entries.forEach((entry) => {
511
- var _a2;
512
- const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);
513
- if (options.trackVisibility && typeof entry.isVisible === "undefined") {
514
- entry.isVisible = inView;
515
- }
516
- [...(_a2 = elements.get(entry.target)) != null ? _a2 : []].forEach((callback) => {
517
- callback(inView, entry);
518
- });
519
- });
520
- }, options);
521
- thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);
522
- instance = {
523
- id,
524
- observer,
525
- elements
526
- };
527
- observerMap.set(id, instance);
528
- }
529
- return instance;
530
- }
531
- function observe(element, callback, options = {}, fallbackInView = unsupportedValue) {
532
- if (typeof window.IntersectionObserver === "undefined" && fallbackInView !== void 0) {
533
- const bounds = element.getBoundingClientRect();
534
- callback(fallbackInView, {
535
- isIntersecting: fallbackInView,
536
- target: element,
537
- intersectionRatio: typeof options.threshold === "number" ? options.threshold : 0,
538
- time: 0,
539
- boundingClientRect: bounds,
540
- intersectionRect: bounds,
541
- rootBounds: bounds
542
- });
543
- return () => {
544
- };
545
- }
546
- const { id, observer, elements } = createObserver(options);
547
- const callbacks = elements.get(element) || [];
548
- if (!elements.has(element)) {
549
- elements.set(element, callbacks);
550
- }
551
- callbacks.push(callback);
552
- observer.observe(element);
553
- return function unobserve() {
554
- callbacks.splice(callbacks.indexOf(callback), 1);
555
- if (callbacks.length === 0) {
556
- elements.delete(element);
557
- observer.unobserve(element);
558
- }
559
- if (elements.size === 0) {
560
- observer.disconnect();
561
- observerMap.delete(id);
562
- }
563
- };
564
- }
565
- function useInView({
566
- threshold,
567
- delay,
568
- trackVisibility,
569
- rootMargin,
570
- root,
571
- triggerOnce,
572
- skip,
573
- initialInView,
574
- fallbackInView,
575
- onChange
576
- } = {}) {
577
- var _a2;
578
- const [ref, setRef] = React.useState(null);
579
- const callback = React.useRef(onChange);
580
- const lastInViewRef = React.useRef(initialInView);
581
- const [state, setState] = React.useState({
582
- inView: !!initialInView,
583
- entry: void 0
584
- });
585
- callback.current = onChange;
586
- React.useEffect(
587
- () => {
588
- if (lastInViewRef.current === void 0) {
589
- lastInViewRef.current = initialInView;
590
- }
591
- if (skip || !ref) return;
592
- let unobserve;
593
- unobserve = observe(
594
- ref,
595
- (inView, entry) => {
596
- const previousInView = lastInViewRef.current;
597
- lastInViewRef.current = inView;
598
- if (previousInView === void 0 && !inView) {
599
- return;
600
- }
601
- setState({
602
- inView,
603
- entry
604
- });
605
- if (callback.current) callback.current(inView, entry);
606
- if (entry.isIntersecting && triggerOnce && unobserve) {
607
- unobserve();
608
- unobserve = void 0;
609
- }
610
- },
611
- {
612
- root,
613
- rootMargin,
614
- threshold,
615
- // @ts-expect-error
616
- trackVisibility,
617
- delay
618
- },
619
- fallbackInView
620
- );
621
- return () => {
622
- if (unobserve) {
623
- unobserve();
624
- }
625
- };
626
- },
627
- // We break the rule here, because we aren't including the actual `threshold` variable
628
- // eslint-disable-next-line react-hooks/exhaustive-deps
629
- [
630
- // If the threshold is an array, convert it to a string, so it won't change between renders.
631
- Array.isArray(threshold) ? threshold.toString() : threshold,
632
- ref,
633
- root,
634
- rootMargin,
635
- triggerOnce,
636
- skip,
637
- trackVisibility,
638
- fallbackInView,
639
- delay
640
- ]
641
- );
642
- const entryTarget = (_a2 = state.entry) == null ? void 0 : _a2.target;
643
- const previousEntryTarget = React.useRef(void 0);
644
- if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {
645
- previousEntryTarget.current = entryTarget;
646
- setState({
647
- inView: !!initialInView,
648
- entry: void 0
649
- });
650
- lastInViewRef.current = initialInView;
651
- }
652
- const result = [setRef, state.inView, state.entry];
653
- result.ref = result[0];
654
- result.inView = result[1];
655
- result.entry = result[2];
656
- return result;
657
- }
658
-
659
491
  const NOOP_REF = () => {
660
492
  };
661
493
  function stableStringify(obj) {
@@ -671,7 +503,8 @@ function useSelect({
671
503
  fieldKeys,
672
504
  params,
673
505
  selectedValues,
674
- enabled
506
+ enabled,
507
+ open
675
508
  }) {
676
509
  const isAsync = !!optionsEndpoint;
677
510
  const [searchQuery, setSearchQuery] = useState("");
@@ -695,20 +528,30 @@ function useSelect({
695
528
  () => selectedValues && selectedValues.length > 0 ? selectedValues.filter((v) => typeof v !== "boolean").join(",") : void 0,
696
529
  [selectedValues]
697
530
  );
531
+ const selectedValuesRef = useRef(selectedValues);
532
+ selectedValuesRef.current = selectedValues;
533
+ const [resolveValues, setResolveValues] = useState(selectedValues);
534
+ useEffect(() => {
535
+ if (open) setResolveValues(selectedValuesRef.current);
536
+ }, [open]);
537
+ const serializedResolveValues = useMemo(
538
+ () => resolveValues && resolveValues.length > 0 ? resolveValues.filter((v) => typeof v !== "boolean").join(",") : void 0,
539
+ [resolveValues]
540
+ );
698
541
  const { data: resolvedSelected } = useQuery({
699
542
  queryKey: [
700
543
  "select-resolve",
701
544
  optionsEndpoint,
702
545
  stableStringify(fieldKeys),
703
546
  stableStringify(params),
704
- JSON.stringify(selectedValues)
547
+ JSON.stringify(resolveValues)
705
548
  ],
706
549
  queryFn: () => axios.get(optionsEndpoint ?? "", {
707
- params: { values: serializedValues, ...fieldKeys, ...params },
550
+ params: { values: serializedResolveValues, ...fieldKeys, ...params },
708
551
  showSuccessToast: false,
709
552
  showErrorToast: false
710
553
  }).then((r) => r.data),
711
- enabled: isAsync && (selectedValues?.length ?? 0) > 0,
554
+ enabled: isAsync && (resolveValues?.length ?? 0) > 0,
712
555
  staleTime: 5 * 6e4,
713
556
  placeholderData: keepPreviousData
714
557
  });
@@ -739,7 +582,7 @@ function useSelect({
739
582
  const makeKey = (value) => `${typeof value}:${String(value)}`;
740
583
  if (debouncedSearch.trim().length === 0) {
741
584
  for (const option of selected) {
742
- if (selectedValues?.includes(option.value)) {
585
+ if (resolveValues?.includes(option.value)) {
743
586
  uniqueByValue.set(makeKey(option.value), option);
744
587
  }
745
588
  }
@@ -751,7 +594,7 @@ function useSelect({
751
594
  }
752
595
  }
753
596
  return Array.from(uniqueByValue.values());
754
- }, [resolvedSelected, data, debouncedSearch]);
597
+ }, [resolvedSelected, data, debouncedSearch, resolveValues]);
755
598
  const fetchedGroups = data?.pages[0]?.groups ?? staticGroups ?? [];
756
599
  const hasSearchResultsData = (data?.pages.length ?? 0) > 0;
757
600
  const { ref: sentinelRef, inView } = useInView();
@@ -796,7 +639,8 @@ const Select = forwardRef((props, ref) => {
796
639
  fieldKeys,
797
640
  params,
798
641
  selectedValues: rest.value != null ? Array.isArray(rest.value) ? rest.value : [rest.value] : void 0,
799
- enabled: open
642
+ enabled: open,
643
+ open
800
644
  });
801
645
  const isAsync = !!optionsEndpoint;
802
646
  const asyncState = isAsync ? {
@@ -1 +1 @@
1
- {"version":3,"file":"Select.js","sources":["../shadcn/shadcnMultiSelect/multi-select.tsx","../lib/components/Select/hooks/useMultiSelect.ts","../lib/components/Select/components/MultiSelect/MultiSelect.tsx","../node_modules/.pnpm/react-intersection-observer@10.0.3_react-dom@19.2.3_react@19.2.3__react@19.2.3/node_modules/react-intersection-observer/dist/index.mjs","../lib/components/Select/hooks/useSelect.ts","../lib/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, memo } from 'react';\n\nimport { Checkbox } from '../shadcnCheckbox';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcnPopover';\nimport { cn } from '../utils';\n\n// MultiSelectRoot — wraps Radix Popover to provide open/close state\ninterface MultiSelectRootProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nfunction MultiSelectRoot({ open, onOpenChange, disabled, children }: MultiSelectRootProps) {\n return (\n <Popover data-slot=\"multi-select\" open={disabled ? false : open} onOpenChange={disabled ? undefined : onOpenChange}>\n {children}\n </Popover>\n );\n}\n\n// MultiSelectTrigger — styled trigger button that mirrors SelectTrigger\ninterface MultiSelectTriggerProps extends React.ComponentProps<'button'> {\n className?: string;\n open?: boolean;\n listboxId?: string;\n}\n\nconst MultiSelectTrigger = forwardRef<HTMLButtonElement, MultiSelectTriggerProps>(\n ({ className, children, disabled, open, listboxId, ...props }, ref) => {\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"multi-select-trigger\"\n role=\"combobox\"\n aria-expanded={open ?? false}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n disabled={disabled}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n 'min-h-9',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n );\n },\n);\n\nMultiSelectTrigger.displayName = 'MultiSelectTrigger';\n\n// MultiSelectContent — styled dropdown panel wrapping PopoverContent\ninterface MultiSelectContentProps extends React.ComponentProps<typeof PopoverContent> {\n className?: string;\n}\n\nfunction MultiSelectContent({ className, children, align = 'start', ...props }: MultiSelectContentProps) {\n return (\n <PopoverContent\n data-slot=\"multi-select-content\"\n align={align}\n className={cn('w-auto min-w-[var(--radix-popover-trigger-width)] p-0', className)}\n {...props}\n >\n {children}\n </PopoverContent>\n );\n}\n\n// MultiSelectSearch — search input for filtering options (stateless)\ninterface MultiSelectSearchProps {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nfunction MultiSelectSearch({ value, onValueChange, placeholder = 'Search...', className }: MultiSelectSearchProps) {\n return (\n <div data-slot=\"multi-select-search\" className={cn('px-3 py-2', className)}>\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background px-3 h-9\">\n <SearchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n type=\"text\"\n aria-label=\"Search options\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n </div>\n );\n}\n\n// MultiSelectActions — Select All / Clear action bar\ninterface MultiSelectActionsProps {\n onSelectAll: () => void;\n onClear: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction MultiSelectActions({ onSelectAll, onClear, disabled, className }: MultiSelectActionsProps) {\n return (\n <div\n data-slot=\"multi-select-actions\"\n className={cn('flex items-center justify-between border-t px-3 py-1.5', className)}\n >\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-primary hover:text-primary/80 disabled:pointer-events-none disabled:opacity-50\"\n onClick={onSelectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground disabled:pointer-events-none disabled:opacity-50\"\n onClick={onClear}\n >\n Clear\n </button>\n </div>\n );\n}\n\n// MultiSelectList — scrollable listbox container for option rows\ninterface MultiSelectListProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectList({ className, children, ...props }: MultiSelectListProps) {\n return (\n <div\n data-slot=\"multi-select-list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={cn('max-h-60 overflow-y-auto p-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectRow — a single option row with a checkbox\ninterface MultiSelectRowProps {\n name: string;\n description?: string;\n checked: boolean;\n onToggle: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nconst MultiSelectRow = memo(function MultiSelectRow({\n name,\n description,\n checked,\n onToggle,\n disabled,\n className,\n}: MultiSelectRowProps) {\n function handleClick() {\n if (!disabled) {\n onToggle();\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }\n\n return (\n <div\n data-slot=\"multi-select-row\"\n role=\"option\"\n aria-selected={checked}\n aria-disabled={disabled}\n tabIndex={disabled ? undefined : 0}\n className={cn(\n 'relative flex w-full cursor-default gap-2 rounded-md px-2 text-sm outline-hidden select-none',\n description ? 'min-h-11 items-start py-1.5' : 'h-8 items-center py-0',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <Checkbox\n checked={checked}\n onCheckedChange={() => onToggle()}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"self-center\"\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{name}</span>\n {description && <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">{description}</span>}\n </span>\n </div>\n );\n});\n\n// MultiSelectGroup — wraps a group of rows with a role=\"group\" container\ninterface MultiSelectGroupProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectGroup({ className, children, ...props }: MultiSelectGroupProps) {\n return (\n <div\n data-slot=\"multi-select-group\"\n role=\"group\"\n className={cn('border-t border-border first:border-t-0 pt-1 mt-1 first:pt-0 first:mt-0', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectGroupLabel — styled label for a group header\ninterface MultiSelectGroupLabelProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectGroupLabel({ className, children, ...props }: MultiSelectGroupLabelProps) {\n return (\n <div\n data-slot=\"multi-select-group-label\"\n className={cn('text-primary px-2 py-1 text-[10px] font-semibold uppercase tracking-wide', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectEmpty — displayed when no options match a search filter\ninterface MultiSelectEmptyProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction MultiSelectEmpty({ children, className }: MultiSelectEmptyProps) {\n return (\n <div\n data-slot=\"multi-select-empty\"\n className={cn('flex items-center justify-center py-6 text-sm text-muted-foreground', className)}\n >\n {children ?? 'No options found.'}\n </div>\n );\n}\n\nexport {\n MultiSelectActions,\n MultiSelectContent,\n MultiSelectEmpty,\n MultiSelectGroup,\n MultiSelectGroupLabel,\n MultiSelectList,\n MultiSelectRoot,\n MultiSelectRow,\n MultiSelectSearch,\n MultiSelectTrigger,\n};\n\nexport type {\n MultiSelectActionsProps,\n MultiSelectContentProps,\n MultiSelectEmptyProps,\n MultiSelectGroupLabelProps,\n MultiSelectGroupProps,\n MultiSelectListProps,\n MultiSelectRootProps,\n MultiSelectRowProps,\n MultiSelectSearchProps,\n MultiSelectTriggerProps,\n};\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { SelectGroup, SelectOption, SelectValue } from '../types';\n\ninterface UseMultiSelectStateProps {\n options: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue[];\n onChange?: (values: SelectValue[]) => void;\n onOptionsSelect?: (options: SelectOption[]) => void;\n defaultValue?: SelectValue[];\n remoteSearch?: boolean;\n}\n\n// Manages controlled/uncontrolled multi-select state, search filtering, and grouping\nexport function useMultiSelect({\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n defaultValue,\n remoteSearch,\n}: UseMultiSelectStateProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<SelectValue[]>(defaultValue ?? []);\n const selectedValues = isControlled ? controlledValue : internalValue;\n const selectedSet = useMemo(() => new Set<SelectValue>(selectedValues), [selectedValues]);\n\n // Ref to latest selectedValues so callbacks stay reference-stable\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const listboxId = useId();\n\n const optionMap = useMemo(() => {\n const map = new Map<SelectValue, SelectOption>();\n for (const option of options) {\n map.set(option.value, option);\n }\n return map;\n }, [options]);\n\n const filteredOptions = useMemo(() => {\n if (remoteSearch || !searchQuery) return options;\n const lower = searchQuery.toLowerCase();\n return options.filter((option) => option.label.toLowerCase().includes(lower));\n }, [options, searchQuery, remoteSearch]);\n\n const updateSelection = useCallback(\n (nextValues: SelectValue[]) => {\n if (!isControlled) {\n setInternalValue(nextValues);\n }\n onChange?.(nextValues);\n },\n [isControlled, onChange],\n );\n\n // Toggle a single option on or off\n const toggleOption = useCallback(\n (optionValue: SelectValue) => {\n const option = optionMap.get(optionValue);\n if (option?.disabled) return;\n const current = selectedValuesRef.current;\n const nextValues = current.includes(optionValue)\n ? current.filter((v) => v !== optionValue)\n : [...current, optionValue];\n const nextOptions = nextValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(nextOptions);\n updateSelection(nextValues);\n },\n [optionMap, updateSelection, onOptionsSelect],\n );\n\n // Preserve already-selected disabled options when selecting all\n const selectAll = useCallback(() => {\n const enabledValues = options.filter((o) => !o.disabled).map((o) => o.value);\n const currentDisabledValues = selectedValuesRef.current.filter((v) => optionMap.get(v)?.disabled);\n const nextValues = [...new Set([...currentDisabledValues, ...enabledValues])];\n const nextOptions = nextValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(nextOptions);\n updateSelection(nextValues);\n }, [options, optionMap, updateSelection, onOptionsSelect]);\n\n // Retain disabled options that are currently selected when clearing\n const clearAll = useCallback(() => {\n const currentDisabledValues = selectedValuesRef.current.filter((v) => optionMap.get(v)?.disabled);\n const remainingOptions = currentDisabledValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(remainingOptions);\n updateSelection(currentDisabledValues);\n }, [optionMap, updateSelection, onOptionsSelect]);\n\n // Reset search when popover closes\n useEffect(() => {\n if (!open) {\n setSearchQuery('');\n }\n }, [open]);\n\n // Map selected values to their option objects for display\n const selectedOptions = useMemo(\n () => selectedValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[],\n [selectedValues, optionMap],\n );\n\n // Fire onOptionsSelect once when all initial values resolve from the async option map.\n const notifiedInitialRef = useRef<string | null>(null);\n useEffect(() => {\n if (selectedValues.length === 0) return;\n const allResolved = selectedValues.every((v) => optionMap.has(v));\n if (!allResolved) return;\n const key = [...selectedValues].sort().join(',');\n if (notifiedInitialRef.current === key) return;\n notifiedInitialRef.current = key;\n onOptionsSelect?.(selectedOptions);\n }, [selectedOptions, selectedValues, optionMap, onOptionsSelect]);\n\n // O(n + g) grouping — one pass over groups, one pass over options\n const grouped = useMemo(() => {\n if (!groups || groups.length === 0) return null;\n\n const buckets = new Map<string | number, SelectOption[]>();\n for (const g of groups) {\n buckets.set(g.id, []);\n }\n\n const ungrouped: SelectOption[] = [];\n for (const option of filteredOptions) {\n const bucket = option.groupId != null ? buckets.get(option.groupId) : undefined;\n if (bucket) {\n bucket.push(option);\n } else {\n ungrouped.push(option);\n }\n }\n\n const entries: Array<{ name: string; options: SelectOption[] }> = [];\n for (const g of groups) {\n const bucket = buckets.get(g.id);\n if (!bucket || bucket.length === 0) continue;\n entries.push({ name: g.name, options: bucket });\n }\n\n return { ungrouped, entries };\n }, [filteredOptions, groups]);\n\n return {\n selectedValues,\n selectedSet,\n selectedOptions,\n open,\n setOpen,\n searchQuery,\n setSearchQuery,\n listboxId,\n filteredOptions,\n grouped,\n toggleOption,\n selectAll,\n clearAll,\n };\n}\n","import { Loader2, X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { Badge } from '../../../../../shadcn/shadcnBadge';\nimport {\n MultiSelectActions,\n MultiSelectContent,\n MultiSelectEmpty,\n MultiSelectGroup,\n MultiSelectGroupLabel,\n MultiSelectList,\n MultiSelectRoot,\n MultiSelectRow,\n MultiSelectSearch,\n MultiSelectTrigger,\n} from '../../../../../shadcn/shadcnMultiSelect';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../../../Field';\nimport { useMultiSelect } from '../../hooks/useMultiSelect';\nimport type { AsyncSelectState, SelectGroup, SelectOption, SelectValue } from '../../types';\n\nexport interface MultiSelectProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n options?: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue[];\n onChange?: (values: SelectValue[]) => void;\n onOptionsSelect?: (options: SelectOption[]) => void;\n onBlur?: () => void;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n defaultValue?: SelectValue[];\n maxDisplayedItems?: number;\n searchable?: boolean;\n searchPlaceholder?: string;\n asyncState?: AsyncSelectState;\n // Transforms how label is displayed in option rows and selected trigger chips\n transformLabel?: (label: string, option: SelectOption, context: 'option' | 'trigger') => string;\n // Transforms how description is displayed in option rows\n transformDescription?: (description: string, option: SelectOption) => string;\n // Called when the popover open state changes\n onOpenChange?: (open: boolean) => void;\n}\n\n// Multi-value select with checkbox options, search, and badge chips\nexport const MultiSelect = forwardRef<HTMLButtonElement, MultiSelectProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select options',\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n onBlur,\n name,\n disabled = false,\n required,\n className,\n id,\n defaultValue,\n maxDisplayedItems = 3,\n searchable = false,\n searchPlaceholder = 'Search...',\n asyncState,\n transformLabel,\n transformDescription,\n onOpenChange,\n },\n ref,\n ) => {\n const state = useMultiSelect({\n options: options ?? [],\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n defaultValue,\n remoteSearch: !!asyncState,\n });\n\n // Notifies parent (Select.tsx) of open state changes to gate async queries; clears async search on close\n function handleOpenChange(o: boolean) {\n state.setOpen(o);\n onOpenChange?.(o);\n if (!o) asyncState?.setSearchQuery('');\n }\n\n // Resolve search binding -- async delegates to parent, static uses local state\n const searchValue = asyncState ? asyncState.searchQuery : state.searchQuery;\n const setSearchValue = asyncState ? asyncState.setSearchQuery : state.setSearchQuery;\n const showSearch = !!asyncState || searchable;\n\n // Renders a single option row\n function renderRow(option: SelectOption) {\n const optionLabel = transformLabel ? transformLabel(option.label, option, 'option') : option.label;\n const optionDescription = option.description\n ? transformDescription\n ? transformDescription(option.description, option)\n : option.description\n : undefined;\n\n return (\n <MultiSelectRow\n key={String(option.value)}\n name={optionLabel}\n description={optionDescription}\n checked={state.selectedSet.has(option.value)}\n onToggle={() => {\n state.toggleOption(option.value);\n }}\n disabled={option.disabled}\n />\n );\n }\n\n // Renders the option list content (flat or grouped)\n function renderOptions() {\n if (asyncState?.loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-6\">\n <Loader2 className=\"size-4 animate-spin text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n );\n }\n\n if (state.filteredOptions.length === 0) {\n return <MultiSelectEmpty />;\n }\n\n if (!state.grouped) {\n return state.filteredOptions.map(renderRow);\n }\n\n return (\n <>\n {state.grouped.ungrouped.map(renderRow)}\n {state.grouped.entries.map((entry) => (\n <MultiSelectGroup key={entry.name}>\n <MultiSelectGroupLabel>{entry.name}</MultiSelectGroupLabel>\n {entry.options.map(renderRow)}\n </MultiSelectGroup>\n ))}\n </>\n );\n }\n\n // Renders badge chips, count summary, or placeholder inside the trigger\n function renderTriggerContent() {\n if (state.selectedOptions.length === 0) {\n return <span className=\"text-muted-foreground\">{placeholder}</span>;\n }\n\n if (state.selectedOptions.length > maxDisplayedItems) {\n return <span className=\"text-sm\">{state.selectedOptions.length} items selected</span>;\n }\n\n return (\n <span className=\"flex flex-wrap items-center gap-1\">\n {state.selectedOptions.map((option) => (\n <Badge key={String(option.value)} variant=\"secondary\" className=\"gap-1 pr-1\">\n {transformLabel ? transformLabel(option.label, option, 'trigger') : option.label}\n <button\n type=\"button\"\n aria-label={`Remove ${option.label}`}\n className=\"rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n e.stopPropagation();\n state.toggleOption(option.value);\n }}\n >\n <X className=\"size-3 text-muted-foreground hover:text-foreground\" />\n </button>\n </Badge>\n ))}\n </span>\n );\n }\n\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n\n <MultiSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <MultiSelectTrigger\n ref={ref}\n id={id}\n open={state.open}\n listboxId={state.listboxId}\n aria-invalid={!!error}\n aria-required={required}\n disabled={disabled}\n onBlur={onBlur}\n className={className}\n >\n <span className=\"flex flex-1 flex-wrap items-center gap-1 overflow-hidden\">{renderTriggerContent()}</span>\n </MultiSelectTrigger>\n\n <MultiSelectContent>\n {showSearch && (\n <MultiSelectSearch value={searchValue} onValueChange={setSearchValue} placeholder={searchPlaceholder} />\n )}\n\n <MultiSelectList id={state.listboxId}>\n {renderOptions()}\n {asyncState?.hasMore && <div ref={asyncState.sentinelRef} className=\"h-1\" />}\n {asyncState?.loadingMore && (\n <div className=\"flex items-center justify-center gap-2 py-2\">\n <Loader2 className=\"size-3 animate-spin text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Loading more...</span>\n </div>\n )}\n </MultiSelectList>\n\n <MultiSelectActions onSelectAll={state.selectAll} onClear={state.clearAll} disabled={disabled} />\n </MultiSelectContent>\n </MultiSelectRoot>\n\n {name && state.selectedValues.map((v) => <input key={String(v)} type=\"hidden\" name={name} value={String(v)} />)}\n\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n","\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root) return \"0\";\n if (RootIds.has(root)) return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a2;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n [...(_a2 = elements.get(entry.target)) != null ? _a2 : []].forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"lastInView\");\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n this.lastInView = this.props.initialInView;\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n const previousInView = this.lastInView;\n this.lastInView = inView;\n if (previousInView === void 0 && !inView) {\n return;\n }\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n this.lastInView = props.initialInView;\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip) return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n if (this.lastInView === void 0) {\n this.lastInView = this.props.initialInView;\n }\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-expect-error\n trackVisibility,\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a2;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef(onChange);\n const lastInViewRef = React2.useRef(initialInView);\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (lastInViewRef.current === void 0) {\n lastInViewRef.current = initialInView;\n }\n if (skip || !ref) return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n const previousInView = lastInViewRef.current;\n lastInViewRef.current = inView;\n if (previousInView === void 0 && !inView) {\n return;\n }\n setState({\n inView,\n entry\n });\n if (callback.current) callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-expect-error\n trackVisibility,\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a2 = state.entry) == null ? void 0 : _a2.target;\n const previousEntryTarget = React2.useRef(void 0);\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n lastInViewRef.current = initialInView;\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\n\n// src/useOnInView.tsx\nimport * as React3 from \"react\";\nvar _a, _b;\nvar useSyncEffect = (_b = (_a = \"useInsertionEffect\" in React3 ? React3.useInsertionEffect : void 0) != null ? _a : React3.useLayoutEffect) != null ? _b : React3.useEffect;\nvar useOnInView = (onIntersectionChange, {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n triggerOnce,\n skip\n} = {}) => {\n const onIntersectionChangeRef = React3.useRef(onIntersectionChange);\n const observedElementRef = React3.useRef(null);\n const observerCleanupRef = React3.useRef(void 0);\n const lastInViewRef = React3.useRef(void 0);\n useSyncEffect(() => {\n onIntersectionChangeRef.current = onIntersectionChange;\n }, [onIntersectionChange]);\n return React3.useCallback(\n (element) => {\n const cleanupExisting = () => {\n if (observerCleanupRef.current) {\n const cleanup = observerCleanupRef.current;\n observerCleanupRef.current = void 0;\n cleanup();\n }\n };\n if (element === observedElementRef.current) {\n return observerCleanupRef.current;\n }\n if (!element || skip) {\n cleanupExisting();\n observedElementRef.current = null;\n lastInViewRef.current = void 0;\n return;\n }\n cleanupExisting();\n observedElementRef.current = element;\n let destroyed = false;\n const destroyObserver = observe(\n element,\n (inView, entry) => {\n const previousInView = lastInViewRef.current;\n lastInViewRef.current = inView;\n if (previousInView === void 0 && !inView) {\n return;\n }\n onIntersectionChangeRef.current(\n inView,\n entry\n );\n if (triggerOnce && inView) {\n stopObserving();\n }\n },\n {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay\n }\n );\n function stopObserving() {\n if (destroyed) return;\n destroyed = true;\n destroyObserver();\n observedElementRef.current = null;\n observerCleanupRef.current = void 0;\n lastInViewRef.current = void 0;\n }\n observerCleanupRef.current = stopObserving;\n return observerCleanupRef.current;\n },\n [\n Array.isArray(threshold) ? threshold.toString() : threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n triggerOnce,\n skip\n ]\n );\n};\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView,\n useOnInView\n};\n//# sourceMappingURL=index.mjs.map","import { keepPreviousData, useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useInView } from 'react-intersection-observer';\nimport { axios } from '../../../utils/axios';\nimport type { SelectFieldKeys, SelectGroup, SelectOption, SelectOptionsResponse, SelectValue } from '../types';\n\nexport interface UseSelectProps {\n options?: SelectOption[];\n groups?: SelectGroup[];\n optionsEndpoint?: string;\n searchDebounceMs?: number;\n limit?: number;\n fieldKeys?: SelectFieldKeys;\n params?: Record<string, string | number | boolean>;\n selectedValues?: SelectValue[];\n enabled?: boolean;\n}\n\nexport interface UseSelectReturn {\n options: SelectOption[];\n groups: SelectGroup[];\n loading: boolean;\n loadingMore: boolean;\n hasMore: boolean;\n searchQuery: string;\n setSearchQuery: (q: string) => void;\n sentinelRef: (node?: Element | null) => void;\n}\n\nconst NOOP_REF = () => {};\n\n// Stable JSON serialization for query keys (order-independent)\nexport function stableStringify(obj: object | undefined): string {\n if (!obj) return '';\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n// Manages async option fetching with debounced search, sentinel-based infinite scroll, and selected value resolution\nexport function useSelect({\n options: staticOptions,\n groups: staticGroups,\n optionsEndpoint,\n searchDebounceMs = 300,\n limit = 20,\n fieldKeys,\n params,\n selectedValues,\n enabled,\n}: UseSelectProps): UseSelectReturn {\n const isAsync = !!optionsEndpoint;\n const [searchQuery, setSearchQuery] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Debounce search input\n useEffect(() => {\n if (!isAsync) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (searchQuery === '') {\n setDebouncedSearch('');\n return;\n }\n debounceRef.current = setTimeout(() => {\n setDebouncedSearch(searchQuery);\n }, searchDebounceMs);\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, [searchQuery, searchDebounceMs, isAsync]);\n\n // Serialize selected values to a comma-separated string of IDs (filters out booleans)\n const serializedValues = useMemo(\n () =>\n selectedValues && selectedValues.length > 0\n ? selectedValues.filter((v): v is string | number => typeof v !== 'boolean').join(',')\n : undefined,\n [selectedValues],\n );\n\n // Query 1: Resolve selected values to full option objects\n const { data: resolvedSelected } = useQuery({\n queryKey: [\n 'select-resolve',\n optionsEndpoint,\n stableStringify(fieldKeys),\n stableStringify(params),\n JSON.stringify(selectedValues),\n ],\n queryFn: () =>\n axios\n .get<SelectOptionsResponse>(optionsEndpoint ?? '', {\n params: { values: serializedValues, ...fieldKeys, ...params },\n showSuccessToast: false,\n showErrorToast: false,\n })\n .then((r) => r.data),\n enabled: isAsync && (selectedValues?.length ?? 0) > 0,\n staleTime: 5 * 60_000,\n placeholderData: keepPreviousData,\n });\n\n // Query 2: Paginated search results, excluding selected IDs\n const { data, isFetching, isFetchingNextPage, fetchNextPage, hasNextPage } = useInfiniteQuery({\n queryKey: ['select-search', optionsEndpoint, debouncedSearch, stableStringify(fieldKeys), stableStringify(params)],\n queryFn: ({ pageParam = 0 }) =>\n axios\n .get<SelectOptionsResponse>(optionsEndpoint ?? '', {\n params: {\n search: debouncedSearch || undefined,\n limit,\n offset: pageParam,\n excludeIds: serializedValues,\n ...fieldKeys,\n ...params,\n },\n showSuccessToast: false,\n showErrorToast: false,\n })\n .then((r) => r.data),\n getNextPageParam: (lastPage, _allPages, lastPageParam) => (lastPage.hasMore ? lastPageParam + limit : undefined),\n initialPageParam: 0,\n enabled: isAsync && enabled !== false,\n staleTime: 0,\n refetchOnMount: 'always',\n });\n\n // Merge options with value-based dedup.\n // During active search, show only live search results (do not prepend previously selected options).\n const fetchedOptions = useMemo(() => {\n const searchResults = data?.pages.flatMap((p) => p.options) ?? [];\n const selected = resolvedSelected?.options ?? [];\n const uniqueByValue = new Map<string, SelectOption>();\n const makeKey = (value: SelectValue) => `${typeof value}:${String(value)}`;\n\n if (debouncedSearch.trim().length === 0) {\n for (const option of selected) {\n if (selectedValues?.includes(option.value)) {\n uniqueByValue.set(makeKey(option.value), option);\n }\n }\n }\n for (const option of searchResults) {\n const key = makeKey(option.value);\n if (!uniqueByValue.has(key)) {\n uniqueByValue.set(key, option);\n }\n }\n\n return Array.from(uniqueByValue.values());\n }, [resolvedSelected, data, debouncedSearch]);\n\n const fetchedGroups = data?.pages[0]?.groups ?? staticGroups ?? [];\n const hasSearchResultsData = (data?.pages.length ?? 0) > 0;\n\n // IntersectionObserver sentinel for infinite scroll\n const { ref: sentinelRef, inView } = useInView();\n useEffect(() => {\n if (inView && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // Static mode\n if (!isAsync) {\n return {\n options: staticOptions ?? [],\n groups: staticGroups ?? [],\n loading: false,\n loadingMore: false,\n hasMore: false,\n searchQuery,\n setSearchQuery,\n sentinelRef: NOOP_REF,\n };\n }\n\n return {\n options: fetchedOptions,\n groups: fetchedGroups,\n loading: isFetching && !isFetchingNextPage && !hasSearchResultsData,\n loadingMore: isFetchingNextPage,\n hasMore: hasNextPage ?? false,\n searchQuery,\n setSearchQuery,\n sentinelRef,\n };\n}\n","import type React from 'react';\nimport { forwardRef, useState } from 'react';\nimport { MultiSelect, type MultiSelectProps } from './components/MultiSelect/MultiSelect';\nimport { SingleSelect, type SingleSelectProps } from './components/SingleSelect/SingleSelect';\nimport { useSelect } from './hooks/useSelect';\nimport type { AsyncSelectState, SelectFieldKeys } from './types';\n\ninterface SelectBaseProps {\n optionsEndpoint?: string;\n searchDebounceMs?: number;\n limit?: number;\n fieldKeys?: SelectFieldKeys;\n params?: Record<string, string | number | boolean>;\n}\n\nexport interface SelectProps extends Omit<SingleSelectProps & MultiSelectProps, 'value' | 'onChange'>, SelectBaseProps {\n multiple?: boolean;\n value?: SingleSelectProps['value'] | MultiSelectProps['value'];\n onChange?: SingleSelectProps['onChange'] | MultiSelectProps['onChange'];\n}\n\nexport type SelectSingleProps = SelectProps;\nexport type SelectMultiProps = SelectProps;\n\n// Unified select field supporting single/multi selection and default/filter variants\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>((props, ref) => {\n const { multiple, optionsEndpoint, searchDebounceMs, limit, fieldKeys, params, onOpenChange, ...rest } = props;\n const [open, setOpen] = useState(false);\n\n const selectData = useSelect({\n options: rest.options,\n groups: rest.groups,\n optionsEndpoint,\n searchDebounceMs,\n limit,\n fieldKeys,\n params,\n selectedValues: rest.value != null ? (Array.isArray(rest.value) ? rest.value : [rest.value]) : undefined,\n enabled: open,\n });\n\n const isAsync = !!optionsEndpoint;\n\n const asyncState: AsyncSelectState | undefined = isAsync\n ? {\n loading: selectData.loading,\n loadingMore: selectData.loadingMore,\n hasMore: selectData.hasMore,\n searchQuery: selectData.searchQuery,\n setSearchQuery: selectData.setSearchQuery,\n sentinelRef: selectData.sentinelRef,\n }\n : undefined;\n\n const childProps = {\n ...rest,\n options: selectData.options,\n groups: selectData.groups,\n asyncState,\n };\n\n // Scope async queries to the open popover lifecycle so reopening reuses cached data and refetches in the background.\n const handleOpenChange = (o: boolean) => {\n setOpen(o);\n onOpenChange?.(o);\n };\n\n if (multiple) {\n return <MultiSelect ref={ref} {...(childProps as MultiSelectProps)} onOpenChange={handleOpenChange} />;\n }\n return <SingleSelect ref={ref} {...(childProps as SingleSelectProps)} onOpenChange={handleOpenChange} />;\n}) as React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>>;\n\nSelect.displayName = 'Select';\n"],"names":["ChevronDownIcon","SearchIcon","MultiSelectRow","Loader2","React2"],"mappings":"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","x_google_ignoreList":[3]}
1
+ {"version":3,"file":"Select.js","sources":["../shadcn/shadcnMultiSelect/multi-select.tsx","../lib/components/Select/hooks/useMultiSelect.ts","../lib/components/Select/components/MultiSelect/MultiSelect.tsx","../lib/components/Select/hooks/useSelect.ts","../lib/components/Select/Select.tsx"],"sourcesContent":["'use client';\n\nimport { ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, memo } from 'react';\n\nimport { Checkbox } from '../shadcnCheckbox';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcnPopover';\nimport { cn } from '../utils';\n\n// MultiSelectRoot — wraps Radix Popover to provide open/close state\ninterface MultiSelectRootProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nfunction MultiSelectRoot({ open, onOpenChange, disabled, children }: MultiSelectRootProps) {\n return (\n <Popover data-slot=\"multi-select\" open={disabled ? false : open} onOpenChange={disabled ? undefined : onOpenChange}>\n {children}\n </Popover>\n );\n}\n\n// MultiSelectTrigger — styled trigger button that mirrors SelectTrigger\ninterface MultiSelectTriggerProps extends React.ComponentProps<'button'> {\n className?: string;\n open?: boolean;\n listboxId?: string;\n}\n\nconst MultiSelectTrigger = forwardRef<HTMLButtonElement, MultiSelectTriggerProps>(\n ({ className, children, disabled, open, listboxId, ...props }, ref) => {\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"multi-select-trigger\"\n role=\"combobox\"\n aria-expanded={open ?? false}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n disabled={disabled}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n 'min-h-9',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n );\n },\n);\n\nMultiSelectTrigger.displayName = 'MultiSelectTrigger';\n\n// MultiSelectContent — styled dropdown panel wrapping PopoverContent\ninterface MultiSelectContentProps extends React.ComponentProps<typeof PopoverContent> {\n className?: string;\n}\n\nfunction MultiSelectContent({ className, children, align = 'start', ...props }: MultiSelectContentProps) {\n return (\n <PopoverContent\n data-slot=\"multi-select-content\"\n align={align}\n className={cn('w-auto min-w-[var(--radix-popover-trigger-width)] p-0', className)}\n {...props}\n >\n {children}\n </PopoverContent>\n );\n}\n\n// MultiSelectSearch — search input for filtering options (stateless)\ninterface MultiSelectSearchProps {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nfunction MultiSelectSearch({ value, onValueChange, placeholder = 'Search...', className }: MultiSelectSearchProps) {\n return (\n <div data-slot=\"multi-select-search\" className={cn('px-3 py-2', className)}>\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background px-3 h-9\">\n <SearchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n type=\"text\"\n aria-label=\"Search options\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n </div>\n );\n}\n\n// MultiSelectActions — Select All / Clear action bar\ninterface MultiSelectActionsProps {\n onSelectAll: () => void;\n onClear: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction MultiSelectActions({ onSelectAll, onClear, disabled, className }: MultiSelectActionsProps) {\n return (\n <div\n data-slot=\"multi-select-actions\"\n className={cn('flex items-center justify-between border-t px-3 py-1.5', className)}\n >\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-primary hover:text-primary/80 disabled:pointer-events-none disabled:opacity-50\"\n onClick={onSelectAll}\n >\n Select All\n </button>\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground disabled:pointer-events-none disabled:opacity-50\"\n onClick={onClear}\n >\n Clear\n </button>\n </div>\n );\n}\n\n// MultiSelectList — scrollable listbox container for option rows\ninterface MultiSelectListProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectList({ className, children, ...props }: MultiSelectListProps) {\n return (\n <div\n data-slot=\"multi-select-list\"\n role=\"listbox\"\n aria-multiselectable=\"true\"\n className={cn('max-h-60 overflow-y-auto p-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectRow — a single option row with a checkbox\ninterface MultiSelectRowProps {\n name: string;\n description?: string;\n checked: boolean;\n onToggle: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nconst MultiSelectRow = memo(function MultiSelectRow({\n name,\n description,\n checked,\n onToggle,\n disabled,\n className,\n}: MultiSelectRowProps) {\n function handleClick() {\n if (!disabled) {\n onToggle();\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }\n\n return (\n <div\n data-slot=\"multi-select-row\"\n role=\"option\"\n aria-selected={checked}\n aria-disabled={disabled}\n tabIndex={disabled ? undefined : 0}\n className={cn(\n 'relative flex w-full cursor-default gap-2 rounded-md px-2 text-sm outline-hidden select-none',\n description ? 'min-h-11 items-start py-1.5' : 'h-8 items-center py-0',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {/* Decorative only — the row (role=option) handles toggle/focus; pointer-events-none routes clicks to the row\n so this aria-hidden checkbox never receives focus (avoids the \"aria-hidden on focused element\" warning) */}\n <Checkbox\n checked={checked}\n disabled={disabled}\n tabIndex={-1}\n aria-hidden=\"true\"\n className=\"pointer-events-none self-center\"\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate\">{name}</span>\n {description && <span className=\"mt-0.5 block truncate text-xs text-muted-foreground\">{description}</span>}\n </span>\n </div>\n );\n});\n\n// MultiSelectGroup — wraps a group of rows with a role=\"group\" container\ninterface MultiSelectGroupProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectGroup({ className, children, ...props }: MultiSelectGroupProps) {\n return (\n <div\n data-slot=\"multi-select-group\"\n role=\"group\"\n className={cn('border-t border-border first:border-t-0 pt-1 mt-1 first:pt-0 first:mt-0', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectGroupLabel — styled label for a group header\ninterface MultiSelectGroupLabelProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction MultiSelectGroupLabel({ className, children, ...props }: MultiSelectGroupLabelProps) {\n return (\n <div\n data-slot=\"multi-select-group-label\"\n className={cn('text-primary px-2 py-1 text-[10px] font-semibold uppercase tracking-wide', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// MultiSelectEmpty — displayed when no options match a search filter\ninterface MultiSelectEmptyProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction MultiSelectEmpty({ children, className }: MultiSelectEmptyProps) {\n return (\n <div\n data-slot=\"multi-select-empty\"\n className={cn('flex items-center justify-center py-6 text-sm text-muted-foreground', className)}\n >\n {children ?? 'No options found.'}\n </div>\n );\n}\n\nexport {\n MultiSelectActions,\n MultiSelectContent,\n MultiSelectEmpty,\n MultiSelectGroup,\n MultiSelectGroupLabel,\n MultiSelectList,\n MultiSelectRoot,\n MultiSelectRow,\n MultiSelectSearch,\n MultiSelectTrigger,\n};\n\nexport type {\n MultiSelectActionsProps,\n MultiSelectContentProps,\n MultiSelectEmptyProps,\n MultiSelectGroupLabelProps,\n MultiSelectGroupProps,\n MultiSelectListProps,\n MultiSelectRootProps,\n MultiSelectRowProps,\n MultiSelectSearchProps,\n MultiSelectTriggerProps,\n};\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { SelectGroup, SelectOption, SelectValue } from '../types';\n\ninterface UseMultiSelectStateProps {\n options: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue[];\n onChange?: (values: SelectValue[]) => void;\n onOptionsSelect?: (options: SelectOption[]) => void;\n defaultValue?: SelectValue[];\n remoteSearch?: boolean;\n}\n\n// Manages controlled/uncontrolled multi-select state, search filtering, and grouping\nexport function useMultiSelect({\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n defaultValue,\n remoteSearch,\n}: UseMultiSelectStateProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<SelectValue[]>(defaultValue ?? []);\n const selectedValues = isControlled ? controlledValue : internalValue;\n const selectedSet = useMemo(() => new Set<SelectValue>(selectedValues), [selectedValues]);\n\n // Ref to latest selectedValues so callbacks stay reference-stable\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const listboxId = useId();\n\n const optionMap = useMemo(() => {\n const map = new Map<SelectValue, SelectOption>();\n for (const option of options) {\n map.set(option.value, option);\n }\n return map;\n }, [options]);\n\n const filteredOptions = useMemo(() => {\n if (remoteSearch || !searchQuery) return options;\n const lower = searchQuery.toLowerCase();\n return options.filter((option) => option.label.toLowerCase().includes(lower));\n }, [options, searchQuery, remoteSearch]);\n\n const updateSelection = useCallback(\n (nextValues: SelectValue[]) => {\n if (!isControlled) {\n setInternalValue(nextValues);\n }\n onChange?.(nextValues);\n },\n [isControlled, onChange],\n );\n\n // Toggle a single option on or off\n const toggleOption = useCallback(\n (optionValue: SelectValue) => {\n const option = optionMap.get(optionValue);\n if (option?.disabled) return;\n const current = selectedValuesRef.current;\n const nextValues = current.includes(optionValue)\n ? current.filter((v) => v !== optionValue)\n : [...current, optionValue];\n const nextOptions = nextValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(nextOptions);\n updateSelection(nextValues);\n },\n [optionMap, updateSelection, onOptionsSelect],\n );\n\n // Preserve already-selected disabled options when selecting all\n const selectAll = useCallback(() => {\n const enabledValues = options.filter((o) => !o.disabled).map((o) => o.value);\n const currentDisabledValues = selectedValuesRef.current.filter((v) => optionMap.get(v)?.disabled);\n const nextValues = [...new Set([...currentDisabledValues, ...enabledValues])];\n const nextOptions = nextValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(nextOptions);\n updateSelection(nextValues);\n }, [options, optionMap, updateSelection, onOptionsSelect]);\n\n // Retain disabled options that are currently selected when clearing\n const clearAll = useCallback(() => {\n const currentDisabledValues = selectedValuesRef.current.filter((v) => optionMap.get(v)?.disabled);\n const remainingOptions = currentDisabledValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[];\n onOptionsSelect?.(remainingOptions);\n updateSelection(currentDisabledValues);\n }, [optionMap, updateSelection, onOptionsSelect]);\n\n // Reset search when popover closes\n useEffect(() => {\n if (!open) {\n setSearchQuery('');\n }\n }, [open]);\n\n // Map selected values to their option objects for display\n const selectedOptions = useMemo(\n () => selectedValues.map((v) => optionMap.get(v)).filter(Boolean) as SelectOption[],\n [selectedValues, optionMap],\n );\n\n // Fire onOptionsSelect once when all initial values resolve from the async option map.\n const notifiedInitialRef = useRef<string | null>(null);\n useEffect(() => {\n if (selectedValues.length === 0) return;\n const allResolved = selectedValues.every((v) => optionMap.has(v));\n if (!allResolved) return;\n const key = [...selectedValues].sort().join(',');\n if (notifiedInitialRef.current === key) return;\n notifiedInitialRef.current = key;\n onOptionsSelect?.(selectedOptions);\n }, [selectedOptions, selectedValues, optionMap, onOptionsSelect]);\n\n // O(n + g) grouping — one pass over groups, one pass over options\n const grouped = useMemo(() => {\n if (!groups || groups.length === 0) return null;\n\n const buckets = new Map<string | number, SelectOption[]>();\n for (const g of groups) {\n buckets.set(g.id, []);\n }\n\n const ungrouped: SelectOption[] = [];\n for (const option of filteredOptions) {\n const bucket = option.groupId != null ? buckets.get(option.groupId) : undefined;\n if (bucket) {\n bucket.push(option);\n } else {\n ungrouped.push(option);\n }\n }\n\n const entries: Array<{ name: string; options: SelectOption[] }> = [];\n for (const g of groups) {\n const bucket = buckets.get(g.id);\n if (!bucket || bucket.length === 0) continue;\n entries.push({ name: g.name, options: bucket });\n }\n\n return { ungrouped, entries };\n }, [filteredOptions, groups]);\n\n return {\n selectedValues,\n selectedSet,\n selectedOptions,\n open,\n setOpen,\n searchQuery,\n setSearchQuery,\n listboxId,\n filteredOptions,\n grouped,\n toggleOption,\n selectAll,\n clearAll,\n };\n}\n","import { Loader2, X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { Badge } from '../../../../../shadcn/shadcnBadge';\nimport {\n MultiSelectActions,\n MultiSelectContent,\n MultiSelectEmpty,\n MultiSelectGroup,\n MultiSelectGroupLabel,\n MultiSelectList,\n MultiSelectRoot,\n MultiSelectRow,\n MultiSelectSearch,\n MultiSelectTrigger,\n} from '../../../../../shadcn/shadcnMultiSelect';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../../../Field';\nimport { useMultiSelect } from '../../hooks/useMultiSelect';\nimport type { AsyncSelectState, SelectGroup, SelectOption, SelectValue } from '../../types';\n\nexport interface MultiSelectProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n options?: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue[];\n onChange?: (values: SelectValue[]) => void;\n onOptionsSelect?: (options: SelectOption[]) => void;\n onBlur?: () => void;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n defaultValue?: SelectValue[];\n maxDisplayedItems?: number;\n searchable?: boolean;\n searchPlaceholder?: string;\n asyncState?: AsyncSelectState;\n // Transforms how label is displayed in option rows and selected trigger chips\n transformLabel?: (label: string, option: SelectOption, context: 'option' | 'trigger') => string;\n // Transforms how description is displayed in option rows\n transformDescription?: (description: string, option: SelectOption) => string;\n // Called when the popover open state changes\n onOpenChange?: (open: boolean) => void;\n}\n\n// Multi-value select with checkbox options, search, and badge chips\nexport const MultiSelect = forwardRef<HTMLButtonElement, MultiSelectProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select options',\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n onBlur,\n name,\n disabled = false,\n required,\n className,\n id,\n defaultValue,\n maxDisplayedItems = 3,\n searchable = false,\n searchPlaceholder = 'Search...',\n asyncState,\n transformLabel,\n transformDescription,\n onOpenChange,\n },\n ref,\n ) => {\n const state = useMultiSelect({\n options: options ?? [],\n groups,\n value: controlledValue,\n onChange,\n onOptionsSelect,\n defaultValue,\n remoteSearch: !!asyncState,\n });\n\n // Notifies parent (Select.tsx) of open state changes to gate async queries; clears async search on close\n function handleOpenChange(o: boolean) {\n state.setOpen(o);\n onOpenChange?.(o);\n if (!o) asyncState?.setSearchQuery('');\n }\n\n // Resolve search binding -- async delegates to parent, static uses local state\n const searchValue = asyncState ? asyncState.searchQuery : state.searchQuery;\n const setSearchValue = asyncState ? asyncState.setSearchQuery : state.setSearchQuery;\n const showSearch = !!asyncState || searchable;\n\n // Renders a single option row\n function renderRow(option: SelectOption) {\n const optionLabel = transformLabel ? transformLabel(option.label, option, 'option') : option.label;\n const optionDescription = option.description\n ? transformDescription\n ? transformDescription(option.description, option)\n : option.description\n : undefined;\n\n return (\n <MultiSelectRow\n key={String(option.value)}\n name={optionLabel}\n description={optionDescription}\n checked={state.selectedSet.has(option.value)}\n onToggle={() => {\n state.toggleOption(option.value);\n }}\n disabled={option.disabled}\n />\n );\n }\n\n // Renders the option list content (flat or grouped)\n function renderOptions() {\n if (asyncState?.loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-6\">\n <Loader2 className=\"size-4 animate-spin text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n );\n }\n\n if (state.filteredOptions.length === 0) {\n return <MultiSelectEmpty />;\n }\n\n if (!state.grouped) {\n return state.filteredOptions.map(renderRow);\n }\n\n return (\n <>\n {state.grouped.ungrouped.map(renderRow)}\n {state.grouped.entries.map((entry) => (\n <MultiSelectGroup key={entry.name}>\n <MultiSelectGroupLabel>{entry.name}</MultiSelectGroupLabel>\n {entry.options.map(renderRow)}\n </MultiSelectGroup>\n ))}\n </>\n );\n }\n\n // Renders badge chips, count summary, or placeholder inside the trigger\n function renderTriggerContent() {\n if (state.selectedOptions.length === 0) {\n return <span className=\"text-muted-foreground\">{placeholder}</span>;\n }\n\n if (state.selectedOptions.length > maxDisplayedItems) {\n return <span className=\"text-sm\">{state.selectedOptions.length} items selected</span>;\n }\n\n return (\n <span className=\"flex flex-wrap items-center gap-1\">\n {state.selectedOptions.map((option) => (\n <Badge key={String(option.value)} variant=\"secondary\" className=\"gap-1 pr-1\">\n {transformLabel ? transformLabel(option.label, option, 'trigger') : option.label}\n {/* biome-ignore lint/a11y/useSemanticElements: must stay a span — it's nested inside the trigger's\n <button>, and a nested native <button> is invalid HTML */}\n <span\n role=\"button\"\n tabIndex={0}\n aria-label={`Remove ${option.label}`}\n className=\"inline-flex cursor-pointer rounded-full outline-none ring-offset-background focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n e.stopPropagation();\n state.toggleOption(option.value);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n state.toggleOption(option.value);\n }\n }}\n >\n <X className=\"size-3 text-muted-foreground hover:text-foreground\" />\n </span>\n </Badge>\n ))}\n </span>\n );\n }\n\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n\n <MultiSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <MultiSelectTrigger\n ref={ref}\n id={id}\n open={state.open}\n listboxId={state.listboxId}\n aria-invalid={!!error}\n aria-required={required}\n disabled={disabled}\n onBlur={onBlur}\n className={className}\n >\n <span className=\"flex flex-1 flex-wrap items-center gap-1 overflow-hidden\">{renderTriggerContent()}</span>\n </MultiSelectTrigger>\n\n <MultiSelectContent>\n {showSearch && (\n <MultiSelectSearch value={searchValue} onValueChange={setSearchValue} placeholder={searchPlaceholder} />\n )}\n\n <MultiSelectList id={state.listboxId}>\n {renderOptions()}\n {asyncState?.hasMore && <div ref={asyncState.sentinelRef} className=\"h-1\" />}\n {asyncState?.loadingMore && (\n <div className=\"flex items-center justify-center gap-2 py-2\">\n <Loader2 className=\"size-3 animate-spin text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Loading more...</span>\n </div>\n )}\n </MultiSelectList>\n\n <MultiSelectActions onSelectAll={state.selectAll} onClear={state.clearAll} disabled={disabled} />\n </MultiSelectContent>\n </MultiSelectRoot>\n\n {name && state.selectedValues.map((v) => <input key={String(v)} type=\"hidden\" name={name} value={String(v)} />)}\n\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nMultiSelect.displayName = 'MultiSelect';\n","import { keepPreviousData, useInfiniteQuery, useQuery } from '@tanstack/react-query';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { useInView } from 'react-intersection-observer';\nimport { axios } from '../../../utils/axios';\nimport type { SelectFieldKeys, SelectGroup, SelectOption, SelectOptionsResponse, SelectValue } from '../types';\n\nexport interface UseSelectProps {\n options?: SelectOption[];\n groups?: SelectGroup[];\n optionsEndpoint?: string;\n searchDebounceMs?: number;\n limit?: number;\n fieldKeys?: SelectFieldKeys;\n params?: Record<string, string | number | boolean>;\n selectedValues?: SelectValue[];\n enabled?: boolean;\n open?: boolean;\n}\n\nexport interface UseSelectReturn {\n options: SelectOption[];\n groups: SelectGroup[];\n loading: boolean;\n loadingMore: boolean;\n hasMore: boolean;\n searchQuery: string;\n setSearchQuery: (q: string) => void;\n sentinelRef: (node?: Element | null) => void;\n}\n\nconst NOOP_REF = () => {};\n\n// Stable JSON serialization for query keys (order-independent)\nexport function stableStringify(obj: object | undefined): string {\n if (!obj) return '';\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n// Manages async option fetching with debounced search, sentinel-based infinite scroll, and selected value resolution\nexport function useSelect({\n options: staticOptions,\n groups: staticGroups,\n optionsEndpoint,\n searchDebounceMs = 300,\n limit = 20,\n fieldKeys,\n params,\n selectedValues,\n enabled,\n open,\n}: UseSelectProps): UseSelectReturn {\n const isAsync = !!optionsEndpoint;\n const [searchQuery, setSearchQuery] = useState('');\n const [debouncedSearch, setDebouncedSearch] = useState('');\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Debounce search input\n useEffect(() => {\n if (!isAsync) return;\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (searchQuery === '') {\n setDebouncedSearch('');\n return;\n }\n debounceRef.current = setTimeout(() => {\n setDebouncedSearch(searchQuery);\n }, searchDebounceMs);\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, [searchQuery, searchDebounceMs, isAsync]);\n\n // Serialize selected values to a comma-separated string of IDs (filters out booleans)\n const serializedValues = useMemo(\n () =>\n selectedValues && selectedValues.length > 0\n ? selectedValues.filter((v): v is string | number => typeof v !== 'boolean').join(',')\n : undefined,\n [selectedValues],\n );\n\n // Latest selection in a ref so the freeze effect can read it without depending on the (per-render) array identity\n const selectedValuesRef = useRef(selectedValues);\n selectedValuesRef.current = selectedValues;\n\n // Selection used to RESOLVE + ORDER options. Snapshotted when the popover OPENS, then frozen for the whole\n // open session — so toggling a selection doesn't refetch select-resolve or reorder the in-memory list (which\n // would move the clicked row and lose scroll position). Re-captured on the next open, so reopening shows\n // the current selection ordered selected-first.\n const [resolveValues, setResolveValues] = useState(selectedValues);\n useEffect(() => {\n if (open) setResolveValues(selectedValuesRef.current);\n }, [open]);\n\n const serializedResolveValues = useMemo(\n () =>\n resolveValues && resolveValues.length > 0\n ? resolveValues.filter((v): v is string | number => typeof v !== 'boolean').join(',')\n : undefined,\n [resolveValues],\n );\n\n // Query 1: Resolve selected values to full option objects\n const { data: resolvedSelected } = useQuery({\n queryKey: [\n 'select-resolve',\n optionsEndpoint,\n stableStringify(fieldKeys),\n stableStringify(params),\n JSON.stringify(resolveValues),\n ],\n queryFn: () =>\n axios\n .get<SelectOptionsResponse>(optionsEndpoint ?? '', {\n params: { values: serializedResolveValues, ...fieldKeys, ...params },\n showSuccessToast: false,\n showErrorToast: false,\n })\n .then((r) => r.data),\n enabled: isAsync && (resolveValues?.length ?? 0) > 0,\n staleTime: 5 * 60_000,\n placeholderData: keepPreviousData,\n });\n\n // Query 2: Paginated search results, excluding selected IDs\n const { data, isFetching, isFetchingNextPage, fetchNextPage, hasNextPage } = useInfiniteQuery({\n queryKey: ['select-search', optionsEndpoint, debouncedSearch, stableStringify(fieldKeys), stableStringify(params)],\n queryFn: ({ pageParam = 0 }) =>\n axios\n .get<SelectOptionsResponse>(optionsEndpoint ?? '', {\n params: {\n search: debouncedSearch || undefined,\n limit,\n offset: pageParam,\n excludeIds: serializedValues,\n ...fieldKeys,\n ...params,\n },\n showSuccessToast: false,\n showErrorToast: false,\n })\n .then((r) => r.data),\n getNextPageParam: (lastPage, _allPages, lastPageParam) => (lastPage.hasMore ? lastPageParam + limit : undefined),\n initialPageParam: 0,\n enabled: isAsync && enabled !== false,\n staleTime: 0,\n refetchOnMount: 'always',\n });\n\n // Merge options with value-based dedup.\n // During active search, show only live search results (do not prepend previously selected options).\n const fetchedOptions = useMemo(() => {\n const searchResults = data?.pages.flatMap((p) => p.options) ?? [];\n const selected = resolvedSelected?.options ?? [];\n const uniqueByValue = new Map<string, SelectOption>();\n const makeKey = (value: SelectValue) => `${typeof value}:${String(value)}`;\n\n if (debouncedSearch.trim().length === 0) {\n for (const option of selected) {\n if (resolveValues?.includes(option.value)) {\n uniqueByValue.set(makeKey(option.value), option);\n }\n }\n }\n for (const option of searchResults) {\n const key = makeKey(option.value);\n if (!uniqueByValue.has(key)) {\n uniqueByValue.set(key, option);\n }\n }\n\n return Array.from(uniqueByValue.values());\n }, [resolvedSelected, data, debouncedSearch, resolveValues]);\n\n const fetchedGroups = data?.pages[0]?.groups ?? staticGroups ?? [];\n const hasSearchResultsData = (data?.pages.length ?? 0) > 0;\n\n // IntersectionObserver sentinel for infinite scroll\n const { ref: sentinelRef, inView } = useInView();\n useEffect(() => {\n if (inView && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n }, [inView, hasNextPage, isFetchingNextPage, fetchNextPage]);\n\n // Static mode\n if (!isAsync) {\n return {\n options: staticOptions ?? [],\n groups: staticGroups ?? [],\n loading: false,\n loadingMore: false,\n hasMore: false,\n searchQuery,\n setSearchQuery,\n sentinelRef: NOOP_REF,\n };\n }\n\n return {\n options: fetchedOptions,\n groups: fetchedGroups,\n loading: isFetching && !isFetchingNextPage && !hasSearchResultsData,\n loadingMore: isFetchingNextPage,\n hasMore: hasNextPage ?? false,\n searchQuery,\n setSearchQuery,\n sentinelRef,\n };\n}\n","import type React from 'react';\nimport { forwardRef, useState } from 'react';\nimport { MultiSelect, type MultiSelectProps } from './components/MultiSelect/MultiSelect';\nimport { SingleSelect, type SingleSelectProps } from './components/SingleSelect/SingleSelect';\nimport { useSelect } from './hooks/useSelect';\nimport type { AsyncSelectState, SelectFieldKeys } from './types';\n\ninterface SelectBaseProps {\n optionsEndpoint?: string;\n searchDebounceMs?: number;\n limit?: number;\n fieldKeys?: SelectFieldKeys;\n params?: Record<string, string | number | boolean>;\n}\n\nexport interface SelectProps extends Omit<SingleSelectProps & MultiSelectProps, 'value' | 'onChange'>, SelectBaseProps {\n multiple?: boolean;\n value?: SingleSelectProps['value'] | MultiSelectProps['value'];\n onChange?: SingleSelectProps['onChange'] | MultiSelectProps['onChange'];\n}\n\nexport type SelectSingleProps = SelectProps;\nexport type SelectMultiProps = SelectProps;\n\n// Unified select field supporting single/multi selection and default/filter variants\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>((props, ref) => {\n const { multiple, optionsEndpoint, searchDebounceMs, limit, fieldKeys, params, onOpenChange, ...rest } = props;\n const [open, setOpen] = useState(false);\n\n const selectData = useSelect({\n options: rest.options,\n groups: rest.groups,\n optionsEndpoint,\n searchDebounceMs,\n limit,\n fieldKeys,\n params,\n selectedValues: rest.value != null ? (Array.isArray(rest.value) ? rest.value : [rest.value]) : undefined,\n enabled: open,\n open,\n });\n\n const isAsync = !!optionsEndpoint;\n\n const asyncState: AsyncSelectState | undefined = isAsync\n ? {\n loading: selectData.loading,\n loadingMore: selectData.loadingMore,\n hasMore: selectData.hasMore,\n searchQuery: selectData.searchQuery,\n setSearchQuery: selectData.setSearchQuery,\n sentinelRef: selectData.sentinelRef,\n }\n : undefined;\n\n const childProps = {\n ...rest,\n options: selectData.options,\n groups: selectData.groups,\n asyncState,\n };\n\n // Scope async queries to the open popover lifecycle so reopening reuses cached data and refetches in the background.\n const handleOpenChange = (o: boolean) => {\n setOpen(o);\n onOpenChange?.(o);\n };\n\n if (multiple) {\n return <MultiSelect ref={ref} {...(childProps as MultiSelectProps)} onOpenChange={handleOpenChange} />;\n }\n return <SingleSelect ref={ref} {...(childProps as SingleSelectProps)} onOpenChange={handleOpenChange} />;\n}) as React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>>;\n\nSelect.displayName = 'Select';\n"],"names":["ChevronDownIcon","SearchIcon","MultiSelectRow","Loader2"],"mappings":"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"}