@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/Checkbox2.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import { u as useComposedRefs } from './index11.js';
4
- import { c as createContextScope } from './index19.js';
5
- import { P as Primitive, u as useControllableState, c as composeEventHandlers } from './index18.js';
6
- import { u as usePrevious } from './index35.js';
7
- import { u as useSize } from './index36.js';
8
- import { P as Presence } from './index21.js';
4
+ import { c as createContextScope } from './index20.js';
5
+ import { P as Primitive, u as useControllableState, c as composeEventHandlers } from './index19.js';
6
+ import { u as usePrevious } from './index36.js';
7
+ import { u as useSize } from './index37.js';
8
+ import { P as Presence } from './index22.js';
9
9
  import { c as cn } from './utils.js';
10
10
  import { C as Check } from './check.js';
11
11
 
@@ -1,7 +1,10 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import React__default, { useCallback } from 'react';
2
+ import React__default, { useCallback, useMemo } from 'react';
3
3
  import { h as FieldSet, f as FieldLegend, b as FieldDescription, c as FieldError, F as Field, a as FieldContent, e as FieldLabel } from './field.js';
4
4
  import { c as cn } from './utils.js';
5
+ import { B as Button } from './Button.js';
6
+ import { C as CheckCheck } from './check-check.js';
7
+ import { X } from './x.js';
5
8
  import { C as Checkbox } from './Checkbox2.js';
6
9
 
7
10
  const CheckboxGroup = React__default.forwardRef(
@@ -16,6 +19,7 @@ const CheckboxGroup = React__default.forwardRef(
16
19
  orientation = "vertical",
17
20
  columns,
18
21
  disabled,
22
+ clearable = false,
19
23
  className,
20
24
  name: _name,
21
25
  onBlur,
@@ -26,16 +30,67 @@ const CheckboxGroup = React__default.forwardRef(
26
30
  const [internalValue, setInternalValue] = React__default.useState(defaultValue ?? []);
27
31
  const isControlled = controlledValue !== void 0;
28
32
  const currentValue = isControlled ? controlledValue : internalValue;
29
- const handleToggle = useCallback(
30
- (optionValue, checked) => {
31
- const next = checked ? [...currentValue, optionValue] : currentValue.filter((v) => v !== optionValue);
33
+ const commitValue = useCallback(
34
+ (next) => {
32
35
  if (!isControlled) {
33
36
  setInternalValue(next);
34
37
  }
35
38
  onValueChange?.(next);
36
39
  },
37
- [currentValue, isControlled, onValueChange]
40
+ [isControlled, onValueChange]
38
41
  );
42
+ const handleToggle = useCallback(
43
+ (optionValue, checked) => {
44
+ const next = checked ? [...currentValue, optionValue] : currentValue.filter((v) => v !== optionValue);
45
+ commitValue(next);
46
+ },
47
+ [currentValue, commitValue]
48
+ );
49
+ const selectableValues = useMemo(
50
+ () => options.filter((option) => !option.disabled).map((option) => option.value),
51
+ [options]
52
+ );
53
+ const allSelected = selectableValues.length > 0 && selectableValues.every((v) => currentValue.includes(v));
54
+ const noneSelected = currentValue.length === 0;
55
+ const handleSelectAll = useCallback(() => {
56
+ commitValue(selectableValues);
57
+ }, [commitValue, selectableValues]);
58
+ const handleClear = useCallback(() => {
59
+ commitValue([]);
60
+ }, [commitValue]);
61
+ const showActions = clearable && !disabled;
62
+ const headerActions = showActions ? /* @__PURE__ */ jsxs("div", { className: "-mr-1 flex items-center gap-0.5", children: [
63
+ /* @__PURE__ */ jsxs(
64
+ Button,
65
+ {
66
+ type: "button",
67
+ variant: "ghost",
68
+ size: "sm",
69
+ onClick: handleSelectAll,
70
+ disabled: allSelected,
71
+ className: "h-7 gap-1.5 px-2 text-xs font-medium text-muted-foreground hover:text-foreground",
72
+ children: [
73
+ /* @__PURE__ */ jsx(CheckCheck, { className: "size-3.5" }),
74
+ "Select all"
75
+ ]
76
+ }
77
+ ),
78
+ /* @__PURE__ */ jsxs(
79
+ Button,
80
+ {
81
+ type: "button",
82
+ variant: "ghost",
83
+ size: "sm",
84
+ onClick: handleClear,
85
+ disabled: noneSelected,
86
+ className: "h-7 gap-1.5 px-2 text-xs font-medium text-muted-foreground hover:text-foreground",
87
+ children: [
88
+ /* @__PURE__ */ jsx(X, { className: "size-3.5" }),
89
+ "Clear"
90
+ ]
91
+ }
92
+ )
93
+ ] }) : null;
39
94
  const renderItem = (option) => {
40
95
  const itemId = `${groupId}-${option.value}`;
41
96
  const isItemDisabled = disabled || option.disabled;
@@ -61,7 +116,10 @@ const CheckboxGroup = React__default.forwardRef(
61
116
  );
62
117
  const groupStyle = columns ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : void 0;
63
118
  return /* @__PURE__ */ jsxs(FieldSet, { ref, "data-invalid": hasError || void 0, className, ...props, children: [
64
- label && /* @__PURE__ */ jsx(FieldLegend, { variant: "label", children: label }),
119
+ label ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
120
+ /* @__PURE__ */ jsx(FieldLegend, { variant: "label", children: label }),
121
+ headerActions
122
+ ] }) : headerActions && /* @__PURE__ */ jsx("div", { className: "flex justify-end", children: headerActions }),
65
123
  description && !error && /* @__PURE__ */ jsx(FieldDescription, { children: description }),
66
124
  /* @__PURE__ */ jsx("div", { className: groupClassName, style: groupStyle, children: options.map(renderItem) }),
67
125
  error && /* @__PURE__ */ jsx(FieldError, { children: error })
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxGroup.js","sources":["../lib/components/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\nimport { Checkbox as ShadcnCheckbox } from '../../../shadcn/shadcnCheckbox';\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from '../../../shadcn/shadcnField';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface CheckboxOption {\n /** The value associated with this option */\n value: string;\n /** Label displayed next to the checkbox */\n label: React.ReactNode;\n /** Optional description displayed below the label */\n description?: React.ReactNode;\n /** Whether this individual option is disabled */\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n /** Array of checkbox options to render */\n options: CheckboxOption[];\n /** Controlled value — array of selected option values */\n value?: string[];\n /** Callback fired when the selection changes */\n onValueChange?: (value: string[]) => void;\n /** Default selected values for uncontrolled mode */\n defaultValue?: string[];\n /** Group label rendered as a fieldset legend */\n label?: React.ReactNode;\n /** Description displayed below the label */\n description?: React.ReactNode;\n /** Error message displayed below the group */\n error?: string;\n /** Layout direction of the checkbox options */\n orientation?: 'vertical' | 'horizontal';\n /** Number of grid columns — overrides orientation layout */\n columns?: number;\n /** Whether all checkboxes in the group are disabled */\n disabled?: boolean;\n /** Additional CSS classes for the fieldset wrapper */\n className?: string;\n /** Field name consumed by Form.tsx Controller — not used directly */\n name?: string;\n /** Blur handler wired by Form.tsx Controller */\n onBlur?: () => void;\n}\n\n// CheckboxGroup component for multi-select with Field system integration\nexport const CheckboxGroup = React.forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n (\n {\n options,\n value: controlledValue,\n onValueChange,\n defaultValue,\n label,\n description,\n error,\n orientation = 'vertical',\n columns,\n disabled,\n className,\n name: _name,\n onBlur,\n ...props\n },\n ref,\n ) => {\n const groupId = React.useId();\n const hasError = !!error;\n\n // Internal state for uncontrolled mode\n const [internalValue, setInternalValue] = React.useState<string[]>(defaultValue ?? []);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Toggle a value in/out of the selection array\n const handleToggle = useCallback(\n (optionValue: string, checked: boolean) => {\n const next = checked ? [...currentValue, optionValue] : currentValue.filter((v) => v !== optionValue);\n\n if (!isControlled) {\n setInternalValue(next);\n }\n onValueChange?.(next);\n },\n [currentValue, isControlled, onValueChange],\n );\n\n // Render a single checkbox option with label and optional description\n const renderItem = (option: CheckboxOption) => {\n const itemId = `${groupId}-${option.value}`;\n const isItemDisabled = disabled || option.disabled;\n\n return (\n <Field key={option.value} orientation=\"horizontal\" data-disabled={isItemDisabled || undefined}>\n <ShadcnCheckbox\n checked={currentValue.includes(option.value)}\n onCheckedChange={(checked) => handleToggle(option.value, checked === true)}\n disabled={isItemDisabled}\n id={itemId}\n onBlur={onBlur}\n />\n <FieldContent>\n <FieldLabel htmlFor={itemId} className=\"font-normal cursor-pointer\">\n {option.label}\n </FieldLabel>\n {option.description && <FieldDescription>{option.description}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n };\n\n // Compute layout classes based on columns or orientation\n const groupClassName = cn(\n columns ? `grid gap-3` : orientation === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col gap-3',\n );\n\n // Dynamic grid-cols style when columns prop is provided\n const groupStyle = columns ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : undefined;\n\n return (\n <FieldSet ref={ref} data-invalid={hasError || undefined} className={className} {...props}>\n {label && <FieldLegend variant=\"label\">{label}</FieldLegend>}\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n <div className={groupClassName} style={groupStyle}>\n {options.map(renderItem)}\n </div>\n {error && <FieldError>{error}</FieldError>}\n </FieldSet>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["React","ShadcnCheckbox"],"mappings":"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"}
1
+ {"version":3,"file":"CheckboxGroup.js","sources":["../lib/components/CheckboxGroup/CheckboxGroup.tsx"],"sourcesContent":["import { CheckCheck, X } from 'lucide-react';\nimport React, { useCallback, useMemo } from 'react';\nimport { Checkbox as ShadcnCheckbox } from '../../../shadcn/shadcnCheckbox';\nimport {\n Field,\n FieldContent,\n FieldDescription,\n FieldError,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from '../../../shadcn/shadcnField';\nimport { cn } from '../../../shadcn/utils';\nimport { Button } from '../Button';\n\nexport interface CheckboxOption {\n /** The value associated with this option */\n value: string;\n /** Label displayed next to the checkbox */\n label: React.ReactNode;\n /** Optional description displayed below the label */\n description?: React.ReactNode;\n /** Whether this individual option is disabled */\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n /** Array of checkbox options to render */\n options: CheckboxOption[];\n /** Controlled value — array of selected option values */\n value?: string[];\n /** Callback fired when the selection changes */\n onValueChange?: (value: string[]) => void;\n /** Default selected values for uncontrolled mode */\n defaultValue?: string[];\n /** Group label rendered as a fieldset legend */\n label?: React.ReactNode;\n /** Description displayed below the label */\n description?: React.ReactNode;\n /** Error message displayed below the group */\n error?: string;\n /** Layout direction of the checkbox options */\n orientation?: 'vertical' | 'horizontal';\n /** Number of grid columns — overrides orientation layout */\n columns?: number;\n /** Whether all checkboxes in the group are disabled */\n disabled?: boolean;\n /**\n * When `true`, renders compact \"Select all\" / \"Clear\" inline actions in the group header\n * (to the right of the `label`, or above the options when there is no label).\n * \"Select all\" selects every non-disabled option; \"Clear\" empties the selection.\n * Each action disables itself when it would be a no-op. Defaults to `false`.\n */\n clearable?: boolean;\n /** Additional CSS classes for the fieldset wrapper */\n className?: string;\n /** Field name consumed by Form.tsx Controller — not used directly */\n name?: string;\n /** Blur handler wired by Form.tsx Controller */\n onBlur?: () => void;\n}\n\n// CheckboxGroup component for multi-select with Field system integration\nexport const CheckboxGroup = React.forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n (\n {\n options,\n value: controlledValue,\n onValueChange,\n defaultValue,\n label,\n description,\n error,\n orientation = 'vertical',\n columns,\n disabled,\n clearable = false,\n className,\n name: _name,\n onBlur,\n ...props\n },\n ref,\n ) => {\n const groupId = React.useId();\n const hasError = !!error;\n\n // Internal state for uncontrolled mode\n const [internalValue, setInternalValue] = React.useState<string[]>(defaultValue ?? []);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n // Commit a new selection array through the shared controlled/uncontrolled path\n const commitValue = useCallback(\n (next: string[]) => {\n if (!isControlled) {\n setInternalValue(next);\n }\n onValueChange?.(next);\n },\n [isControlled, onValueChange],\n );\n\n // Toggle a value in/out of the selection array\n const handleToggle = useCallback(\n (optionValue: string, checked: boolean) => {\n const next = checked ? [...currentValue, optionValue] : currentValue.filter((v) => v !== optionValue);\n commitValue(next);\n },\n [currentValue, commitValue],\n );\n\n // Values of every option that can be selected (excludes individually disabled options)\n const selectableValues = useMemo(\n () => options.filter((option) => !option.disabled).map((option) => option.value),\n [options],\n );\n\n // Header action state: all selectable already chosen / nothing chosen\n const allSelected = selectableValues.length > 0 && selectableValues.every((v) => currentValue.includes(v));\n const noneSelected = currentValue.length === 0;\n\n // Select every non-disabled option's value\n const handleSelectAll = useCallback(() => {\n commitValue(selectableValues);\n }, [commitValue, selectableValues]);\n\n // Empty the selection\n const handleClear = useCallback(() => {\n commitValue([]);\n }, [commitValue]);\n\n // Inline \"Select all\" / \"Clear\" actions shown when clearable and the group is not disabled\n const showActions = clearable && !disabled;\n const headerActions = showActions ? (\n <div className=\"-mr-1 flex items-center gap-0.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleSelectAll}\n disabled={allSelected}\n className=\"h-7 gap-1.5 px-2 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n <CheckCheck className=\"size-3.5\" />\n Select all\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n disabled={noneSelected}\n className=\"h-7 gap-1.5 px-2 text-xs font-medium text-muted-foreground hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n Clear\n </Button>\n </div>\n ) : null;\n\n // Render a single checkbox option with label and optional description\n const renderItem = (option: CheckboxOption) => {\n const itemId = `${groupId}-${option.value}`;\n const isItemDisabled = disabled || option.disabled;\n\n return (\n <Field key={option.value} orientation=\"horizontal\" data-disabled={isItemDisabled || undefined}>\n <ShadcnCheckbox\n checked={currentValue.includes(option.value)}\n onCheckedChange={(checked) => handleToggle(option.value, checked === true)}\n disabled={isItemDisabled}\n id={itemId}\n onBlur={onBlur}\n />\n <FieldContent>\n <FieldLabel htmlFor={itemId} className=\"font-normal cursor-pointer\">\n {option.label}\n </FieldLabel>\n {option.description && <FieldDescription>{option.description}</FieldDescription>}\n </FieldContent>\n </Field>\n );\n };\n\n // Compute layout classes based on columns or orientation\n const groupClassName = cn(\n columns ? `grid gap-3` : orientation === 'horizontal' ? 'flex flex-row flex-wrap gap-4' : 'flex flex-col gap-3',\n );\n\n // Dynamic grid-cols style when columns prop is provided\n const groupStyle = columns ? { gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))` } : undefined;\n\n return (\n <FieldSet ref={ref} data-invalid={hasError || undefined} className={className} {...props}>\n {label ? (\n <div className=\"flex items-center justify-between gap-4\">\n <FieldLegend variant=\"label\">{label}</FieldLegend>\n {headerActions}\n </div>\n ) : (\n headerActions && <div className=\"flex justify-end\">{headerActions}</div>\n )}\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n <div className={groupClassName} style={groupStyle}>\n {options.map(renderItem)}\n </div>\n {error && <FieldError>{error}</FieldError>}\n </FieldSet>\n );\n },\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":["React","ShadcnCheckbox"],"mappings":"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"}
@@ -16,7 +16,7 @@ function Collapsible({
16
16
  trailing,
17
17
  headerClassName
18
18
  }) {
19
- const hasHeader = leading || trailing;
19
+ const hasHeader = Boolean(leading || trailing || headerClassName);
20
20
  return /* @__PURE__ */ jsxs(Collapsible$1, { defaultOpen, open, onOpenChange, className, children: [
21
21
  hasHeader ? /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-3", headerClassName), children: [
22
22
  leading,
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.js","sources":["../lib/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type React from 'react';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface CollapsibleProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n triggerClassName?: string;\n showChevron?: boolean;\n /** Content rendered alongside the trigger but outside the clickable area (e.g. checkboxes, badges) */\n leading?: React.ReactNode;\n /** Content rendered after the trigger but outside the clickable area */\n trailing?: React.ReactNode;\n /** Class name for the header row that contains leading + trigger + trailing */\n headerClassName?: string;\n}\n\n// Renders a collapsible section with a trigger and expandable content\nexport function Collapsible({\n trigger,\n children,\n defaultOpen,\n open,\n onOpenChange,\n className,\n triggerClassName,\n showChevron = true,\n leading,\n trailing,\n headerClassName,\n}: CollapsibleProps) {\n const hasHeader = leading || trailing;\n\n return (\n <ShadcnCollapsible defaultOpen={defaultOpen} open={open} onOpenChange={onOpenChange} className={className}>\n {hasHeader ? (\n <div className={cn('flex items-center gap-3', headerClassName)}>\n {leading}\n <ShadcnCollapsibleTrigger\n className={cn('flex items-center gap-1 flex-1 cursor-pointer group', triggerClassName)}\n >\n {showChevron && (\n <ChevronRight className=\"size-4 text-muted-foreground shrink-0 transition-transform group-data-[state=open]:rotate-90\" />\n )}\n {trigger}\n </ShadcnCollapsibleTrigger>\n {trailing}\n </div>\n ) : (\n <ShadcnCollapsibleTrigger className={cn('flex items-center gap-1 cursor-pointer group', triggerClassName)}>\n {showChevron && (\n <ChevronRight className=\"size-4 text-muted-foreground shrink-0 transition-transform group-data-[state=open]:rotate-90\" />\n )}\n {trigger}\n </ShadcnCollapsibleTrigger>\n )}\n <ShadcnCollapsibleContent>{children}</ShadcnCollapsibleContent>\n </ShadcnCollapsible>\n );\n}\n\nCollapsible.displayName = 'Collapsible';\n"],"names":["ShadcnCollapsible","ShadcnCollapsibleTrigger","ShadcnCollapsibleContent"],"mappings":";;;;;AA2BO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,YAAY,OAAA,IAAW,QAAA;AAE7B,EAAA,uBACE,IAAA,CAACA,aAAA,EAAA,EAAkB,WAAA,EAA0B,IAAA,EAAY,cAA4B,SAAA,EAClF,QAAA,EAAA;AAAA,IAAA,SAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,eAAe,CAAA,EAC1D,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBACD,IAAA;AAAA,QAACC,kBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,qDAAA,EAAuD,gBAAgB,CAAA;AAAA,UAEpF,QAAA,EAAA;AAAA,YAAA,WAAA,oBACC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,8FAAA,EAA+F,CAAA;AAAA,YAExH;AAAA;AAAA;AAAA,OACH;AAAA,MACC;AAAA,KAAA,EACH,oBAEA,IAAA,CAACA,kBAAA,EAAA,EAAyB,WAAW,EAAA,CAAG,8CAAA,EAAgD,gBAAgB,CAAA,EACrG,QAAA,EAAA;AAAA,MAAA,WAAA,oBACC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,8FAAA,EAA+F,CAAA;AAAA,MAExH;AAAA,KAAA,EACH,CAAA;AAAA,oBAEF,GAAA,CAACC,sBAA0B,QAAA,EAAS;AAAA,GAAA,EACtC,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;;"}
1
+ {"version":3,"file":"Collapsible.js","sources":["../lib/components/Collapsible/Collapsible.tsx"],"sourcesContent":["import { ChevronRight } from 'lucide-react';\nimport type React from 'react';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface CollapsibleProps {\n trigger: React.ReactNode;\n children: React.ReactNode;\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n className?: string;\n triggerClassName?: string;\n showChevron?: boolean;\n /** Content rendered alongside the trigger but outside the clickable area (e.g. checkboxes, badges) */\n leading?: React.ReactNode;\n /** Content rendered after the trigger but outside the clickable area */\n trailing?: React.ReactNode;\n /** Class name for the header row that contains leading + trigger + trailing */\n headerClassName?: string;\n}\n\n// Renders a collapsible section with a trigger and expandable content\nexport function Collapsible({\n trigger,\n children,\n defaultOpen,\n open,\n onOpenChange,\n className,\n triggerClassName,\n showChevron = true,\n leading,\n trailing,\n headerClassName,\n}: CollapsibleProps) {\n // Use the full header row whenever any slot OR header styling is provided, so headerClassName\n // (padding, background, hover) always applies — not only when leading/trailing exist.\n const hasHeader = Boolean(leading || trailing || headerClassName);\n\n return (\n <ShadcnCollapsible defaultOpen={defaultOpen} open={open} onOpenChange={onOpenChange} className={className}>\n {hasHeader ? (\n <div className={cn('flex items-center gap-3', headerClassName)}>\n {leading}\n <ShadcnCollapsibleTrigger\n className={cn('flex items-center gap-1 flex-1 cursor-pointer group', triggerClassName)}\n >\n {showChevron && (\n <ChevronRight className=\"size-4 text-muted-foreground shrink-0 transition-transform group-data-[state=open]:rotate-90\" />\n )}\n {trigger}\n </ShadcnCollapsibleTrigger>\n {trailing}\n </div>\n ) : (\n <ShadcnCollapsibleTrigger className={cn('flex items-center gap-1 cursor-pointer group', triggerClassName)}>\n {showChevron && (\n <ChevronRight className=\"size-4 text-muted-foreground shrink-0 transition-transform group-data-[state=open]:rotate-90\" />\n )}\n {trigger}\n </ShadcnCollapsibleTrigger>\n )}\n <ShadcnCollapsibleContent>{children}</ShadcnCollapsibleContent>\n </ShadcnCollapsible>\n );\n}\n\nCollapsible.displayName = 'Collapsible';\n"],"names":["ShadcnCollapsible","ShadcnCollapsibleTrigger","ShadcnCollapsibleContent"],"mappings":";;;;;AA2BO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AAGnB,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,OAAA,IAAW,QAAA,IAAY,eAAe,CAAA;AAEhE,EAAA,uBACE,IAAA,CAACA,aAAA,EAAA,EAAkB,WAAA,EAA0B,IAAA,EAAY,cAA4B,SAAA,EAClF,QAAA,EAAA;AAAA,IAAA,SAAA,wBACE,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,eAAe,CAAA,EAC1D,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,sBACD,IAAA;AAAA,QAACC,kBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA,CAAG,qDAAA,EAAuD,gBAAgB,CAAA;AAAA,UAEpF,QAAA,EAAA;AAAA,YAAA,WAAA,oBACC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,8FAAA,EAA+F,CAAA;AAAA,YAExH;AAAA;AAAA;AAAA,OACH;AAAA,MACC;AAAA,KAAA,EACH,oBAEA,IAAA,CAACA,kBAAA,EAAA,EAAyB,WAAW,EAAA,CAAG,8CAAA,EAAgD,gBAAgB,CAAA,EACrG,QAAA,EAAA;AAAA,MAAA,WAAA,oBACC,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,8FAAA,EAA+F,CAAA;AAAA,MAExH;AAAA,KAAA,EACH,CAAA;AAAA,oBAEF,GAAA,CAACC,sBAA0B,QAAA,EAAS;AAAA,GAAA,EACtC,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;;"}
@@ -4,22 +4,7 @@ import { A as Alert } from './Alert.js';
4
4
  import { B as Button } from './Button.js';
5
5
  import { D as Dialog } from './Dialog.js';
6
6
  import { T as TriangleAlert } from './triangle-alert.js';
7
- import { c as createLucideIcon } from './createLucideIcon.js';
8
-
9
- /**
10
- * @license lucide-react v0.562.0 - ISC
11
- *
12
- * This source code is licensed under the ISC license.
13
- * See the LICENSE file in the root directory of this source tree.
14
- */
15
-
16
-
17
- const __iconNode = [
18
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
19
- ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
20
- ["path", { d: "M12 17h.01", key: "p32p05" }]
21
- ];
22
- const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode);
7
+ import { C as CircleQuestionMark } from './circle-question-mark.js';
23
8
 
24
9
  const DEFAULT_CONFIRM_OPTIONS = {
25
10
  title: "Are you sure?",
@@ -94,7 +79,10 @@ const ConfirmHost = () => {
94
79
  title: options.title,
95
80
  description: options.description,
96
81
  children: [
97
- options.alert ? /* @__PURE__ */ jsx(Alert, { variant: options.alert.type, description: options.alert.text }) : null,
82
+ options.alert || options.content ? /* @__PURE__ */ jsxs("div", { className: "mt-4 mb-6 flex flex-col gap-4 text-left", children: [
83
+ options.alert ? /* @__PURE__ */ jsx(Alert, { variant: options.alert.type, description: options.alert.text }) : null,
84
+ options.content ? /* @__PURE__ */ jsx("div", { children: options.content }) : null
85
+ ] }) : null,
98
86
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", children: [
99
87
  /* @__PURE__ */ jsx(Button, { variant: "outline", type: "button", onClick: store.cancel, children: options.cancelLabel }),
100
88
  /* @__PURE__ */ jsx(Button, { variant: options.variant, type: "button", onClick: store.accept, children: options.confirmLabel })
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmHost.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js","../lib/components/ConfirmHost/ConfirmHost.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst CircleQuestionMark = createLucideIcon(\"circle-question-mark\", __iconNode);\n\nexport { __iconNode, CircleQuestionMark as default };\n//# sourceMappingURL=circle-question-mark.js.map\n","import { CircleHelp, TriangleAlert } from 'lucide-react';\nimport { useMemo, useSyncExternalStore } from 'react';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Alert } from '../Alert';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\n\nexport interface ConfirmAlert {\n type: 'default' | 'destructive' | 'warning' | 'success' | 'info';\n text: string;\n}\n\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\ninterface ResolvedConfirmOptions {\n title: string;\n description: string;\n confirmLabel: string;\n cancelLabel: string;\n variant: 'default' | 'destructive';\n alert?: ConfirmAlert;\n}\n\nconst DEFAULT_CONFIRM_OPTIONS: ResolvedConfirmOptions = {\n title: 'Are you sure?',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n variant: 'default',\n};\n\nexport type ConfirmFn = (options?: ConfirmOptions) => Promise<boolean>;\n\ninterface ConfirmState {\n open: boolean;\n options: ResolvedConfirmOptions;\n}\n\ninterface ConfirmStore {\n getSnapshot: () => ConfirmState;\n subscribe: (listener: () => void) => () => void;\n confirm: ConfirmFn;\n cancel: () => void;\n accept: () => void;\n}\n\nfunction createConfirmStore(): ConfirmStore {\n let state: ConfirmState = { open: false, options: DEFAULT_CONFIRM_OPTIONS };\n let resolver: ((value: boolean) => void) | null = null;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n const settle = (value: boolean) => {\n resolver?.(value);\n resolver = null;\n state = { ...state, open: false };\n emit();\n };\n return {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n confirm: (options) => {\n if (listeners.size === 0) {\n return Promise.resolve(window.confirm(options?.description || options?.title || 'Are you sure?'));\n }\n resolver?.(false);\n return new Promise<boolean>((resolve) => {\n resolver = resolve;\n state = { open: true, options: { ...DEFAULT_CONFIRM_OPTIONS, ...options } };\n emit();\n });\n },\n cancel: () => settle(false),\n accept: () => settle(true),\n };\n}\n\nexport function getConfirmStore(): ConfirmStore {\n const g = globalThis as { __quantumUiConfirmStore?: ConfirmStore };\n if (!g.__quantumUiConfirmStore) g.__quantumUiConfirmStore = createConfirmStore();\n return g.__quantumUiConfirmStore;\n}\n\nexport const ConfirmHost = () => {\n const store = getConfirmStore();\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const { options } = state;\n\n const handle: DialogHandle = useMemo(\n () => ({\n isOpen: state.open,\n open: () => {},\n close: store.cancel,\n onOpenChange: (val: boolean) => {\n if (!val) store.cancel();\n },\n }),\n [state.open, store],\n );\n\n return (\n <Dialog\n handle={handle}\n icon={options.variant === 'destructive' ? TriangleAlert : CircleHelp}\n iconVariant={options.variant}\n title={options.title}\n description={options.description}\n >\n {options.alert ? <Alert variant={options.alert.type} description={options.alert.text} /> : null}\n <div className=\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\">\n <Button variant=\"outline\" type=\"button\" onClick={store.cancel}>\n {options.cancelLabel}\n </Button>\n <Button variant={options.variant} type=\"button\" onClick={store.accept}>\n {options.confirmLabel}\n </Button>\n </div>\n </Dialog>\n );\n};\nConfirmHost.displayName = 'ConfirmHost';\n"],"names":["CircleHelp"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"ConfirmHost.js","sources":["../lib/components/ConfirmHost/ConfirmHost.tsx"],"sourcesContent":["import { CircleHelp, TriangleAlert } from 'lucide-react';\nimport { type ReactNode, useMemo, useSyncExternalStore } from 'react';\nimport type { DialogHandle } from '../../hooks/useDialog';\nimport { Alert } from '../Alert';\nimport { Button } from '../Button';\nimport { Dialog } from '../Dialog';\n\nexport interface ConfirmAlert {\n type: 'default' | 'destructive' | 'warning' | 'success' | 'info';\n text: string;\n}\n\nexport interface ConfirmOptions {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n variant?: 'default' | 'destructive';\n alert?: ConfirmAlert;\n // Rich body rendered between the description and the action buttons (e.g. an impact breakdown)\n content?: ReactNode;\n}\n\ninterface ResolvedConfirmOptions {\n title: string;\n description: string;\n confirmLabel: string;\n cancelLabel: string;\n variant: 'default' | 'destructive';\n alert?: ConfirmAlert;\n content?: ReactNode;\n}\n\nconst DEFAULT_CONFIRM_OPTIONS: ResolvedConfirmOptions = {\n title: 'Are you sure?',\n description: '',\n confirmLabel: 'Confirm',\n cancelLabel: 'Cancel',\n variant: 'default',\n};\n\nexport type ConfirmFn = (options?: ConfirmOptions) => Promise<boolean>;\n\ninterface ConfirmState {\n open: boolean;\n options: ResolvedConfirmOptions;\n}\n\ninterface ConfirmStore {\n getSnapshot: () => ConfirmState;\n subscribe: (listener: () => void) => () => void;\n confirm: ConfirmFn;\n cancel: () => void;\n accept: () => void;\n}\n\nfunction createConfirmStore(): ConfirmStore {\n let state: ConfirmState = { open: false, options: DEFAULT_CONFIRM_OPTIONS };\n let resolver: ((value: boolean) => void) | null = null;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n const settle = (value: boolean) => {\n resolver?.(value);\n resolver = null;\n state = { ...state, open: false };\n emit();\n };\n return {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n confirm: (options) => {\n if (listeners.size === 0) {\n return Promise.resolve(window.confirm(options?.description || options?.title || 'Are you sure?'));\n }\n resolver?.(false);\n return new Promise<boolean>((resolve) => {\n resolver = resolve;\n state = { open: true, options: { ...DEFAULT_CONFIRM_OPTIONS, ...options } };\n emit();\n });\n },\n cancel: () => settle(false),\n accept: () => settle(true),\n };\n}\n\nexport function getConfirmStore(): ConfirmStore {\n const g = globalThis as { __quantumUiConfirmStore?: ConfirmStore };\n if (!g.__quantumUiConfirmStore) g.__quantumUiConfirmStore = createConfirmStore();\n return g.__quantumUiConfirmStore;\n}\n\nexport const ConfirmHost = () => {\n const store = getConfirmStore();\n const state = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n const { options } = state;\n\n const handle: DialogHandle = useMemo(\n () => ({\n isOpen: state.open,\n open: () => {},\n close: store.cancel,\n onOpenChange: (val: boolean) => {\n if (!val) store.cancel();\n },\n }),\n [state.open, store],\n );\n\n return (\n <Dialog\n handle={handle}\n icon={options.variant === 'destructive' ? TriangleAlert : CircleHelp}\n iconVariant={options.variant}\n title={options.title}\n description={options.description}\n >\n {options.alert || options.content ? (\n <div className=\"mt-4 mb-6 flex flex-col gap-4 text-left\">\n {options.alert ? <Alert variant={options.alert.type} description={options.alert.text} /> : null}\n {options.content ? <div>{options.content}</div> : null}\n </div>\n ) : null}\n <div className=\"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\">\n <Button variant=\"outline\" type=\"button\" onClick={store.cancel}>\n {options.cancelLabel}\n </Button>\n <Button variant={options.variant} type=\"button\" onClick={store.accept}>\n {options.confirmLabel}\n </Button>\n </div>\n </Dialog>\n );\n};\nConfirmHost.displayName = 'ConfirmHost';\n"],"names":["CircleHelp"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { c as cn } from './utils.js';
5
5
  import { C as CurrencySelector } from './CurrencySelector.js';
6
6
  import { getCurrencyExponent } from './utils/currency.js';
7
7
  import { C as ChevronDown } from './chevron-down.js';
8
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip.js';
8
+ import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip2.js';
9
9
 
10
10
  function truncateDecimals(amount, decimals) {
11
11
  if (amount === "") return amount;
@@ -1 +1 @@
1
- {"version":3,"file":"CurrencyFilter.js","sources":["../lib/selects/currency/CurrencyFilter.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport { CURRENCIES } from './currencies';\n\nexport type CurrencyFilterProps = Omit<SelectFilterProps, 'options' | 'name'> & {\n name?: string;\n excludeCodes?: string[];\n};\n\n// Pre-configured SelectFilter for currency filtering with static local options\nexport const CurrencyFilter = Object.assign(\n forwardRef<HTMLButtonElement, CurrencyFilterProps>(({ excludeCodes, ...props }, ref) => {\n const options = excludeCodes?.length ? CURRENCIES.filter((c) => !excludeCodes.includes(String(c.value))) : CURRENCIES;\n return (\n <SelectFilter\n ref={ref}\n name=\"currency\"\n label=\"Currency\"\n placeholder=\"Select currency\"\n options={options}\n {...props}\n />\n );\n }),\n { displayName: 'CurrencyFilter', defaultLabel: 'Currency', defaultName: 'currency' },\n);\n"],"names":[],"mappings":";;;;;AAUO,MAAM,iBAAiB,MAAA,CAAO,MAAA;AAAA,EACnC,WAAmD,CAAC,EAAE,cAAc,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtF,IAAA,MAAM,OAAA,GAAU,YAAA,EAAc,MAAA,GAAS,UAAA,CAAW,OAAO,CAAC,CAAA,KAAM,CAAC,YAAA,CAAa,SAAS,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA,GAAI,UAAA;AAC3G,IAAA,uBACE,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,UAAA;AAAA,QACL,KAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAY,iBAAA;AAAA,QACZ,OAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ,CAAC,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,gBAAA,EAAkB,YAAA,EAAc,UAAA,EAAY,aAAa,UAAA;AAC1E;;;;"}
1
+ {"version":3,"file":"CurrencyFilter.js","sources":["../lib/selects/currency/CurrencyFilter.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport { CURRENCIES } from './currencies';\n\nexport type CurrencyFilterProps = Omit<SelectFilterProps, 'options' | 'name'> & {\n name?: string;\n excludeCodes?: string[];\n};\n\n// Pre-configured SelectFilter for currency filtering with static local options\nexport const CurrencyFilter = Object.assign(\n forwardRef<HTMLButtonElement, CurrencyFilterProps>(({ excludeCodes, ...props }, ref) => {\n const options = excludeCodes?.length\n ? CURRENCIES.filter((c) => !excludeCodes.includes(String(c.value)))\n : CURRENCIES;\n return (\n <SelectFilter\n ref={ref}\n name=\"currency\"\n label=\"Currency\"\n placeholder=\"Select currency\"\n options={options}\n {...props}\n />\n );\n }),\n { displayName: 'CurrencyFilter', defaultLabel: 'Currency', defaultName: 'currency' },\n);\n"],"names":[],"mappings":";;;;;AAUO,MAAM,iBAAiB,MAAA,CAAO,MAAA;AAAA,EACnC,WAAmD,CAAC,EAAE,cAAc,GAAG,KAAA,IAAS,GAAA,KAAQ;AACtF,IAAA,MAAM,OAAA,GAAU,YAAA,EAAc,MAAA,GAC1B,UAAA,CAAW,OAAO,CAAC,CAAA,KAAM,CAAC,YAAA,CAAa,SAAS,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA,GAChE,UAAA;AACJ,IAAA,uBACE,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,UAAA;AAAA,QACL,KAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAY,iBAAA;AAAA,QACZ,OAAA;AAAA,QACC,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ,CAAC,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,gBAAA,EAAkB,YAAA,EAAc,UAAA,EAAY,aAAa,UAAA;AAC1E;;;;"}
@@ -119,7 +119,8 @@ const DateRangePicker = forwardRef(
119
119
  onChange: (e) => {
120
120
  const day = digits(e.target.value, 2);
121
121
  if (day === "00") return;
122
- if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraft, /* @__PURE__ */ new Date()))) return;
122
+ if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraft, /* @__PURE__ */ new Date())))
123
+ return;
123
124
  commitFromDraft({ ...fromDraft, day });
124
125
  }
125
126
  }
@@ -165,7 +166,8 @@ const DateRangePicker = forwardRef(
165
166
  onChange: (e) => {
166
167
  const day = digits(e.target.value, 2);
167
168
  if (day === "00") return;
168
- if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraft, /* @__PURE__ */ new Date()))) return;
169
+ if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraft, /* @__PURE__ */ new Date())))
170
+ return;
169
171
  commitToDraft({ ...toDraft, day });
170
172
  }
171
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sources":["../lib/components/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["import { format, getDaysInMonth, isValid, parse } from 'date-fns';\nimport { ChevronDownIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Label } from '../../../shadcn/shadcnLabel';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { cn } from '../../../shadcn/utils';\n\ntype DateParts = { day: string; month: string; year: string };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst toParts = (date?: Date): DateParts =>\n date ? { day: format(date, 'dd'), month: format(date, 'MM'), year: format(date, 'yyyy') } : emptyParts();\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, 'dd/MM/yyyy', new Date());\n return isValid(next) && format(next, 'dd/MM/yyyy') === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst maxDayForParts = (parts: DateParts, fallback: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallback.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallback.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallback.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nexport interface DateRangePickerProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateRange;\n onValueChange?: (range: DateRange | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n numberOfMonths?: number;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select date range',\n value,\n onValueChange,\n open: controlledOpen,\n onOpenChange,\n calendarProps,\n className,\n id = 'date-range',\n numberOfMonths = 2,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [internalRange, setInternalRange] = useState<DateRange | undefined>(value);\n const [fromDraft, setFromDraft] = useState<DateParts>(() => toParts(value?.from));\n const [toDraft, setToDraft] = useState<DateParts>(() => toParts(value?.to));\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen;\n\n useEffect(() => {\n if (value !== undefined) {\n setInternalRange(value);\n setFromDraft(toParts(value.from));\n setToDraft(toParts(value.to));\n }\n }, [value]);\n\n const displayRange = value !== undefined ? value : internalRange;\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n setInternalRange(range);\n setFromDraft(toParts(range?.from));\n setToDraft(toParts(range?.to));\n onValueChange?.(range);\n if (range?.from && range?.to && range.from.getTime() !== range.to.getTime()) {\n setOpen(false);\n }\n };\n\n const commitFromDraft = (parts: DateParts) => {\n setFromDraft(parts);\n const date = parseManualDate(parts);\n const next: DateRange = { from: date, to: displayRange?.to };\n setInternalRange(next);\n onValueChange?.(next);\n };\n\n const commitToDraft = (parts: DateParts) => {\n setToDraft(parts);\n const date = parseManualDate(parts);\n const next: DateRange = { from: displayRange?.from, to: date };\n setInternalRange(next);\n onValueChange?.(next);\n if (displayRange?.from && date && displayRange.from.getTime() !== date.getTime()) {\n setOpen(false);\n }\n };\n\n const displayText = (() => {\n if (!displayRange?.from) return undefined;\n if (!displayRange.to) return displayRange.from.toLocaleDateString();\n return `${displayRange.from.toLocaleDateString()} – ${displayRange.to.toLocaleDateString()}`;\n })();\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor={id} className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n ref={ref}\n variant=\"outline\"\n id={id}\n aria-invalid={!!error}\n className={cn('w-72 justify-between font-normal', !displayText && 'text-muted-foreground', className)}\n {...props}\n >\n {displayText ?? placeholder}\n <ChevronDownIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={fromDraft.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraft, new Date()))) return;\n commitFromDraft({ ...fromDraft, day });\n }}\n />\n <Input\n value={fromDraft.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n commitFromDraft({ ...fromDraft, month });\n }}\n />\n <Input\n value={fromDraft.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => commitFromDraft({ ...fromDraft, year: digits(e.target.value, 4) })}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={toDraft.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraft, new Date()))) return;\n commitToDraft({ ...toDraft, day });\n }}\n />\n <Input\n value={toDraft.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n commitToDraft({ ...toDraft, month });\n }}\n />\n <Input\n value={toDraft.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => commitToDraft({ ...toDraft, year: digits(e.target.value, 4) })}\n />\n </div>\n </div>\n </div>\n <Calendar\n {...calendarProps}\n mode=\"range\"\n selected={displayRange}\n captionLayout=\"label\"\n numberOfMonths={numberOfMonths}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n />\n </PopoverContent>\n </Popover>\n {description && !error && <p className=\"text-sm text-muted-foreground px-1\">{description}</p>}\n {error && <p className=\"text-sm text-destructive px-1\">{error}</p>}\n </div>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n"],"names":["ChevronDownIcon"],"mappings":";;;;;;;;;;;;AAcA,MAAM,UAAA,GAAa,OAAkB,EAAE,GAAA,EAAK,IAAI,KAAA,EAAO,EAAA,EAAI,MAAM,EAAA,EAAG,CAAA;AACpE,MAAM,MAAA,GAAS,CAAC,KAAA,EAAe,GAAA,KAAgB,KAAA,CAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AACpF,MAAM,OAAA,GAAU,CAAC,IAAA,KACf,IAAA,GAAO,EAAE,GAAA,EAAK,MAAA,CAAO,MAAM,IAAI,CAAA,EAAG,OAAO,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,OAAO,IAAA,EAAM,MAAM,CAAA,EAAE,GAAI,UAAA,EAAW;AAEzG,MAAM,kBAAkB,CAAC,EAAE,GAAA,EAAK,KAAA,EAAO,MAAK,KAAiB;AAC3D,EAAA,IAAI,GAAA,CAAI,WAAW,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,IAAK,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACxE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,YAAA,kBAAc,IAAI,IAAA,EAAM,CAAA;AACtE,EAAA,OAAO,OAAA,CAAQ,IAAI,CAAA,IAAK,MAAA,CAAO,MAAM,YAAY,CAAA,KAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,KAAK,IAAA,GAAO,MAAA;AAC5F,CAAA;AAEA,MAAM,cAAA,GAAiB,CAAC,KAAA,EAAkB,QAAA,KAAmB;AAC3D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,GAAI,OAAO,KAAA,CAAM,IAAI,CAAA,GAAI,QAAA,CAAS,WAAA,EAAY;AACjF,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,GAAI,CAAA,GAAI,QAAA,CAAS,QAAA,EAAS;AACnF,EAAA,MAAM,YAAY,KAAA,IAAS,CAAA,IAAK,QAAQ,EAAA,GAAK,KAAA,GAAQ,SAAS,QAAA,EAAS;AACvE,EAAA,OAAO,eAAe,IAAI,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,CAAC,CAAC,CAAA;AACpD,CAAA;AAiBO,MAAM,eAAA,GAAkB,UAAA;AAAA,EAC7B,CACE;AAAA,IACE,KAAA;AAAA,IACA,WAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA,GAAc,mBAAA;AAAA,IACd,KAAA;AAAA,IACA,aAAA;AAAA,IACA,IAAA,EAAM,cAAA;AAAA,IACN,YAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,EAAA,GAAK,YAAA;AAAA,IACL,cAAA,GAAiB,CAAA;AAAA,IACjB,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAS,KAAK,CAAA;AACtD,IAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAgC,KAAK,CAAA;AAC/E,IAAA,MAAM,CAAC,WAAW,YAAY,CAAA,GAAI,SAAoB,MAAM,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAC,CAAA;AAChF,IAAA,MAAM,CAAC,SAAS,UAAU,CAAA,GAAI,SAAoB,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAE1E,IAAA,MAAM,eAAe,cAAA,KAAmB,MAAA;AACxC,IAAA,MAAM,IAAA,GAAO,eAAe,cAAA,GAAiB,YAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,YAAA,GAAe,YAAA,KAAiB,MAAM;AAAA,IAAC,CAAA,CAAA,GAAK,eAAA;AAE5D,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,QAAA,YAAA,CAAa,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA;AAChC,QAAA,UAAA,CAAW,OAAA,CAAQ,KAAA,CAAM,EAAE,CAAC,CAAA;AAAA,MAC9B;AAAA,IACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAA,MAAM,YAAA,GAAe,KAAA,KAAU,MAAA,GAAY,KAAA,GAAQ,aAAA;AAEnD,IAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAiC;AAC1D,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAA,EAAO,IAAI,CAAC,CAAA;AACjC,MAAA,UAAA,CAAW,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA;AAC7B,MAAA,aAAA,GAAgB,KAAK,CAAA;AACrB,MAAA,IAAI,KAAA,EAAO,IAAA,IAAQ,KAAA,EAAO,EAAA,IAAM,KAAA,CAAM,IAAA,CAAK,OAAA,EAAQ,KAAM,KAAA,CAAM,EAAA,CAAG,OAAA,EAAQ,EAAG;AAC3E,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAqB;AAC5C,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,MAAA,MAAM,OAAkB,EAAE,IAAA,EAAM,IAAA,EAAM,EAAA,EAAI,cAAc,EAAA,EAAG;AAC3D,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,aAAA,GAAgB,IAAI,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAqB;AAC1C,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,MAAA,MAAM,OAAkB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,IAAI,IAAA,EAAK;AAC7D,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,aAAA,GAAgB,IAAI,CAAA;AACpB,MAAA,IAAI,YAAA,EAAc,QAAQ,IAAA,IAAQ,YAAA,CAAa,KAAK,OAAA,EAAQ,KAAM,IAAA,CAAK,OAAA,EAAQ,EAAG;AAChF,QAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,MACf;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,YAAA,EAAc,IAAA,EAAM,OAAO,MAAA;AAChC,MAAA,IAAI,CAAC,YAAA,CAAa,EAAA,EAAI,OAAO,YAAA,CAAa,KAAK,kBAAA,EAAmB;AAClE,MAAA,OAAO,CAAA,EAAG,aAAa,IAAA,CAAK,kBAAA,EAAoB,CAAA,GAAA,EAAM,YAAA,CAAa,EAAA,CAAG,kBAAA,EAAoB,CAAA,CAAA;AAAA,IAC5F,CAAA,GAAG;AAEH,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,wBACE,KAAA,EAAA,EAAM,OAAA,EAAS,EAAA,EAAI,SAAA,EAAU,QAC3B,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,sBAEF,IAAA,CAAC,OAAA,EAAA,EAAQ,IAAA,EAAY,YAAA,EAAc,OAAA,EACjC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,IAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,OAAA,EAAQ,SAAA;AAAA,YACR,EAAA;AAAA,YACA,cAAA,EAAc,CAAC,CAAC,KAAA;AAAA,YAChB,WAAW,EAAA,CAAG,kCAAA,EAAoC,CAAC,WAAA,IAAe,yBAAyB,SAAS,CAAA;AAAA,YACnG,GAAG,KAAA;AAAA,YAEH,QAAA,EAAA;AAAA,cAAA,WAAA,IAAe,WAAA;AAAA,kCACfA,WAAA,EAAA,EAAgB;AAAA;AAAA;AAAA,SACnB,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,4BAAA,EAA6B,OAAM,OAAA,EAC3D,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAI,SAAA,EAAU,cAAA,EACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mFAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,SAAA,CAAU,GAAA;AAAA,kBACjB,WAAA,EAAY,IAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACpC,oBAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,oBAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,KAAM,MAAA,CAAO,GAAG,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,GAAG,IAAI,cAAA,CAAe,SAAA,kBAAW,IAAI,IAAA,EAAM,CAAA,CAAA,EAAI;AAClG,oBAAA,eAAA,CAAgB,EAAE,GAAG,SAAA,EAAW,GAAA,EAAK,CAAA;AAAA,kBACvC;AAAA;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,SAAA,CAAU,KAAA;AAAA,kBACjB,WAAA,EAAY,IAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACtC,oBAAA,IAAI,UAAU,IAAA,EAAM;AACpB,oBAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,KAAM,MAAA,CAAO,KAAK,IAAI,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA,CAAA,EAAK;AACrE,oBAAA,eAAA,CAAgB,EAAE,GAAG,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,kBACzC;AAAA;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,SAAA,CAAU,IAAA;AAAA,kBACjB,WAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,EAAE,GAAG,SAAA,EAAW,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAC,GAAG;AAAA;AAAA;AACpF,aAAA,EACF,CAAA;AAAA,4BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,4BACjD,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mFAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,OAAA,CAAQ,GAAA;AAAA,kBACf,WAAA,EAAY,IAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACpC,oBAAA,IAAI,QAAQ,IAAA,EAAM;AAClB,oBAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,KAAM,MAAA,CAAO,GAAG,CAAA,GAAI,CAAA,IAAK,MAAA,CAAO,GAAG,IAAI,cAAA,CAAe,OAAA,kBAAS,IAAI,IAAA,EAAM,CAAA,CAAA,EAAI;AAChG,oBAAA,aAAA,CAAc,EAAE,GAAG,OAAA,EAAS,GAAA,EAAK,CAAA;AAAA,kBACnC;AAAA;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,OAAA,CAAQ,KAAA;AAAA,kBACf,WAAA,EAAY,IAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,oBAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAA;AACtC,oBAAA,IAAI,UAAU,IAAA,EAAM;AACpB,oBAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,KAAM,MAAA,CAAO,KAAK,IAAI,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA,GAAI,EAAA,CAAA,EAAK;AACrE,oBAAA,aAAA,CAAc,EAAE,GAAG,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,kBACrC;AAAA;AAAA,eACF;AAAA,8BACA,GAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,OAAA,CAAQ,IAAA;AAAA,kBACf,WAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAU,SAAA;AAAA,kBACV,SAAA,EAAW,CAAA;AAAA,kBACX,SAAA,EAAU,+GAAA;AAAA,kBACV,QAAA,EAAU,CAAC,CAAA,KAAM,aAAA,CAAc,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAC,GAAG;AAAA;AAAA;AAChF,aAAA,EACF;AAAA,WAAA,EACF,CAAA,EACF,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACE,GAAG,aAAA;AAAA,cACJ,IAAA,EAAK,OAAA;AAAA,cACL,QAAA,EAAU,YAAA;AAAA,cACV,aAAA,EAAc,OAAA;AAAA,cACd,cAAA;AAAA,cACA,QAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MACC,eAAe,CAAC,KAAA,wBAAU,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,MACxF,KAAA,oBAAS,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EAChE,CAAA;AAAA,EAEJ;AACF;AAEA,eAAA,CAAgB,WAAA,GAAc,iBAAA;;;;"}
1
+ {"version":3,"file":"DateRangePicker.js","sources":["../lib/components/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["import { format, getDaysInMonth, isValid, parse } from 'date-fns';\nimport { ChevronDownIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Label } from '../../../shadcn/shadcnLabel';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { cn } from '../../../shadcn/utils';\n\ntype DateParts = { day: string; month: string; year: string };\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\nconst toParts = (date?: Date): DateParts =>\n date ? { day: format(date, 'dd'), month: format(date, 'MM'), year: format(date, 'yyyy') } : emptyParts();\n\nconst parseManualDate = ({ day, month, year }: DateParts) => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, 'dd/MM/yyyy', new Date());\n return isValid(next) && format(next, 'dd/MM/yyyy') === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst maxDayForParts = (parts: DateParts, fallback: Date) => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallback.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallback.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallback.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nexport interface DateRangePickerProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateRange;\n onValueChange?: (range: DateRange | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n numberOfMonths?: number;\n}\n\nexport const DateRangePicker = forwardRef<HTMLButtonElement, DateRangePickerProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select date range',\n value,\n onValueChange,\n open: controlledOpen,\n onOpenChange,\n calendarProps,\n className,\n id = 'date-range',\n numberOfMonths = 2,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [internalRange, setInternalRange] = useState<DateRange | undefined>(value);\n const [fromDraft, setFromDraft] = useState<DateParts>(() => toParts(value?.from));\n const [toDraft, setToDraft] = useState<DateParts>(() => toParts(value?.to));\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen;\n\n useEffect(() => {\n if (value !== undefined) {\n setInternalRange(value);\n setFromDraft(toParts(value.from));\n setToDraft(toParts(value.to));\n }\n }, [value]);\n\n const displayRange = value !== undefined ? value : internalRange;\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n setInternalRange(range);\n setFromDraft(toParts(range?.from));\n setToDraft(toParts(range?.to));\n onValueChange?.(range);\n if (range?.from && range?.to && range.from.getTime() !== range.to.getTime()) {\n setOpen(false);\n }\n };\n\n const commitFromDraft = (parts: DateParts) => {\n setFromDraft(parts);\n const date = parseManualDate(parts);\n const next: DateRange = { from: date, to: displayRange?.to };\n setInternalRange(next);\n onValueChange?.(next);\n };\n\n const commitToDraft = (parts: DateParts) => {\n setToDraft(parts);\n const date = parseManualDate(parts);\n const next: DateRange = { from: displayRange?.from, to: date };\n setInternalRange(next);\n onValueChange?.(next);\n if (displayRange?.from && date && displayRange.from.getTime() !== date.getTime()) {\n setOpen(false);\n }\n };\n\n const displayText = (() => {\n if (!displayRange?.from) return undefined;\n if (!displayRange.to) return displayRange.from.toLocaleDateString();\n return `${displayRange.from.toLocaleDateString()} – ${displayRange.to.toLocaleDateString()}`;\n })();\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor={id} className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n ref={ref}\n variant=\"outline\"\n id={id}\n aria-invalid={!!error}\n className={cn('w-72 justify-between font-normal', !displayText && 'text-muted-foreground', className)}\n {...props}\n >\n {displayText ?? placeholder}\n <ChevronDownIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={fromDraft.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraft, new Date())))\n return;\n commitFromDraft({ ...fromDraft, day });\n }}\n />\n <Input\n value={fromDraft.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n commitFromDraft({ ...fromDraft, month });\n }}\n />\n <Input\n value={fromDraft.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => commitFromDraft({ ...fromDraft, year: digits(e.target.value, 4) })}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className=\"inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1\">\n <Input\n value={toDraft.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraft, new Date())))\n return;\n commitToDraft({ ...toDraft, day });\n }}\n />\n <Input\n value={toDraft.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className=\"!h-6 w-10 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n commitToDraft({ ...toDraft, month });\n }}\n />\n <Input\n value={toDraft.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className=\"!h-6 w-16 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs\"\n onChange={(e) => commitToDraft({ ...toDraft, year: digits(e.target.value, 4) })}\n />\n </div>\n </div>\n </div>\n <Calendar\n {...calendarProps}\n mode=\"range\"\n selected={displayRange}\n captionLayout=\"label\"\n numberOfMonths={numberOfMonths}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n />\n </PopoverContent>\n </Popover>\n {description && !error && <p className=\"text-sm text-muted-foreground px-1\">{description}</p>}\n {error && <p className=\"text-sm text-destructive px-1\">{error}</p>}\n </div>\n );\n },\n);\n\nDateRangePicker.displayName = 'DateRangePicker';\n"],"names":["ChevronDownIcon"],"mappings":"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"}
@@ -10,8 +10,8 @@ import { P as Popover, a as PopoverTrigger, b as PopoverContent } from './popove
10
10
  import { B as Button } from './Button2.js';
11
11
  import { C as Calendar } from './calendar.js';
12
12
  import { C as Calendar$1 } from './calendar2.js';
13
- import { p as parseISO } from './parseISO.js';
14
13
  import { s as startOfDay, f as format, i as isValid } from './format.js';
14
+ import { p as parseISO } from './parseISO.js';
15
15
  import { m as max, b as min, s as startOfMonth, i as isBefore, a as isAfter, g as getDaysInMonth, p as parse } from './setYear.js';
16
16
 
17
17
  const MANUAL_DATE = "dd/MM/yyyy";
@@ -158,7 +158,8 @@ const DateTimeRangePicker = forwardRef(
158
158
  onChange: (e) => {
159
159
  const day = digits(e.target.value, 2);
160
160
  if (day === "00") return;
161
- if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraftParts, /* @__PURE__ */ new Date()))) return;
161
+ if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraftParts, /* @__PURE__ */ new Date())))
162
+ return;
162
163
  const next = { ...fromDraftParts, day };
163
164
  setFromDraftParts(next);
164
165
  commitFrom(next, fromDraftTime);
@@ -212,7 +213,8 @@ const DateTimeRangePicker = forwardRef(
212
213
  onChange: (e) => {
213
214
  const day = digits(e.target.value, 2);
214
215
  if (day === "00") return;
215
- if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraftParts, /* @__PURE__ */ new Date()))) return;
216
+ if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraftParts, /* @__PURE__ */ new Date())))
217
+ return;
216
218
  const next = { ...toDraftParts, day };
217
219
  setToDraftParts(next);
218
220
  commitTo(next, toDraftTime);
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeRangePicker.js","sources":["../lib/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import { format, getDaysInMonth, isValid, parse, parseISO } from 'date-fns';\nimport { ChevronDownIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Label } from '../../../shadcn/shadcnLabel';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { cn } from '../../../shadcn/utils';\n\ntype DateParts = { day: string; month: string; year: string };\n\nexport interface DateTimeRange {\n from?: string;\n to?: string;\n}\n\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\nconst DEFAULT_TIME = '00:00';\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\n\nconst toParts = (date?: Date): DateParts =>\n date ? { day: format(date, 'dd'), month: format(date, 'MM'), year: format(date, 'yyyy') } : emptyParts();\n\nconst parseManualDate = ({ day, month, year }: DateParts): Date | undefined => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, 'dd/MM/yyyy', new Date());\n return isValid(next) && format(next, 'dd/MM/yyyy') === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst maxDayForParts = (parts: DateParts, fallback: Date): number => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallback.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallback.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallback.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst parseDateTime = (value?: string): Date | undefined => {\n if (!value) return undefined;\n const d = parseISO(value);\n return isValid(d) ? d : undefined;\n};\n\nconst toTime = (date?: Date): string => {\n if (!date) return DEFAULT_TIME;\n return format(date, 'HH:mm');\n};\n\nconst withTime = (date: Date, time: string): Date => {\n const safe = TIME_PATTERN.test(time) ? time : DEFAULT_TIME;\n const [h, m] = safe.split(':').map(Number);\n const result = new Date(date);\n result.setHours(h, m, 0, 0);\n return result;\n};\n\nconst toIso = (date?: Date): string | undefined => date?.toISOString();\n\nconst calendarDateOnly = (date?: Date): Date | undefined =>\n date ? new Date(date.getFullYear(), date.getMonth(), date.getDate()) : undefined;\n\nconst formatDisplay = (isoStr?: string): string | undefined => {\n const d = parseDateTime(isoStr);\n if (!d) return undefined;\n return `${d.toLocaleDateString()} ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\n};\n\nexport interface DateTimeRangePickerProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateTimeRange;\n onValueChange?: (range: DateTimeRange | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n numberOfMonths?: number;\n}\n\nexport const DateTimeRangePicker = forwardRef<HTMLButtonElement, DateTimeRangePickerProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select date & time range',\n value,\n onValueChange,\n open: controlledOpen,\n onOpenChange,\n calendarProps,\n className,\n id = 'datetime-range',\n numberOfMonths = 2,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [fromDraftParts, setFromDraftParts] = useState<DateParts>(() => toParts(parseDateTime(value?.from)));\n const [toDraftParts, setToDraftParts] = useState<DateParts>(() => toParts(parseDateTime(value?.to)));\n const [fromDraftTime, setFromDraftTime] = useState<string>(() => toTime(parseDateTime(value?.from)));\n const [toDraftTime, setToDraftTime] = useState<string>(() => toTime(parseDateTime(value?.to)));\n const [fromDate, setFromDate] = useState<Date | undefined>(() => parseDateTime(value?.from));\n const [toDate, setToDate] = useState<Date | undefined>(() => parseDateTime(value?.to));\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen;\n\n useEffect(() => {\n if (value !== undefined) {\n const nextFrom = parseDateTime(value.from);\n const nextTo = parseDateTime(value.to);\n setFromDate(nextFrom);\n setToDate(nextTo);\n setFromDraftParts(toParts(nextFrom));\n setToDraftParts(toParts(nextTo));\n setFromDraftTime(toTime(nextFrom));\n setToDraftTime(toTime(nextTo));\n }\n }, [value]);\n\n const emit = (nextFrom?: Date, nextTo?: Date) => {\n onValueChange?.({ from: toIso(nextFrom), to: toIso(nextTo) });\n };\n\n const calendarRange: DateRange = {\n from: calendarDateOnly(fromDate),\n to: calendarDateOnly(toDate),\n };\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n const nextFrom = range?.from ? withTime(range.from, fromDraftTime) : undefined;\n const nextTo = range?.to ? withTime(range.to, toDraftTime) : undefined;\n setFromDate(nextFrom);\n setToDate(nextTo);\n setFromDraftParts(toParts(range?.from));\n setToDraftParts(toParts(range?.to));\n emit(nextFrom, nextTo);\n if (range?.from && range?.to && range.from.getTime() !== range.to.getTime()) {\n setOpen(false);\n }\n };\n\n const commitFrom = (parts: DateParts, time: string) => {\n const date = parseManualDate(parts);\n const next = date ? withTime(date, time) : undefined;\n setFromDate(next);\n emit(next, toDate);\n };\n\n const commitTo = (parts: DateParts, time: string) => {\n const date = parseManualDate(parts);\n const next = date ? withTime(date, time) : undefined;\n setToDate(next);\n emit(fromDate, next);\n if (fromDate && next && fromDate.getTime() !== next.getTime()) {\n setOpen(false);\n }\n };\n\n const displayText = value?.from\n ? `${formatDisplay(value.from)} – ${formatDisplay(value.to) ?? '...'}`\n : undefined;\n\n const inputBarClass =\n 'inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1';\n const segmentClass =\n '!h-6 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs';\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor={id} className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n ref={ref}\n variant=\"outline\"\n id={id}\n aria-invalid={!!error}\n className={cn('w-96 justify-between font-normal', !displayText && 'text-muted-foreground', className)}\n {...props}\n >\n {displayText ?? placeholder}\n <ChevronDownIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n {/* Date inputs at top */}\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className={inputBarClass}>\n <Input\n value={fromDraftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(fromDraftParts, new Date()))) return;\n const next = { ...fromDraftParts, day };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n <Input\n value={fromDraftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n const next = { ...fromDraftParts, month };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n <Input\n value={fromDraftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className={cn(segmentClass, 'w-16')}\n onChange={(e) => {\n const next = { ...fromDraftParts, year: digits(e.target.value, 4) };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className={inputBarClass}>\n <Input\n value={toDraftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (day.length === 2 && (Number(day) < 1 || Number(day) > maxDayForParts(toDraftParts, new Date()))) return;\n const next = { ...toDraftParts, day };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n <Input\n value={toDraftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n const next = { ...toDraftParts, month };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n <Input\n value={toDraftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className={cn(segmentClass, 'w-16')}\n onChange={(e) => {\n const next = { ...toDraftParts, year: digits(e.target.value, 4) };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n </div>\n </div>\n </div>\n {/* Calendar */}\n <Calendar\n {...calendarProps}\n mode=\"range\"\n selected={calendarRange}\n captionLayout=\"label\"\n numberOfMonths={numberOfMonths}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n />\n {/* Time inputs at bottom — matches DateTimePicker style */}\n <div className=\"border-t p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">From</span>\n <Input\n type=\"time\"\n step={60}\n value={fromDraftTime}\n disabled={!fromDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const time = e.target.value;\n setFromDraftTime(time);\n commitFrom(fromDraftParts, time);\n }}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">To</span>\n <Input\n type=\"time\"\n step={60}\n value={toDraftTime}\n disabled={!toDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const time = e.target.value;\n setToDraftTime(time);\n commitTo(toDraftParts, time);\n }}\n />\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n {description && !error && <p className=\"text-sm text-muted-foreground px-1\">{description}</p>}\n {error && <p className=\"text-sm text-destructive px-1\">{error}</p>}\n </div>\n );\n },\n);\n\nDateTimeRangePicker.displayName = 'DateTimeRangePicker';\n"],"names":["ChevronDownIcon"],"mappings":"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"}
1
+ {"version":3,"file":"DateTimeRangePicker.js","sources":["../lib/components/DateTimeRangePicker/DateTimeRangePicker.tsx"],"sourcesContent":["import { format, getDaysInMonth, isValid, parse, parseISO } from 'date-fns';\nimport { ChevronDownIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, useEffect, useState } from 'react';\nimport type { DateRange } from 'react-day-picker';\nimport { Button } from '../../../shadcn/shadcnButton';\nimport { Calendar, type CalendarProps } from '../../../shadcn/shadcnCalendar';\nimport { Input } from '../../../shadcn/shadcnInput';\nimport { Label } from '../../../shadcn/shadcnLabel';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../../shadcn/shadcnPopover';\nimport { cn } from '../../../shadcn/utils';\n\ntype DateParts = { day: string; month: string; year: string };\n\nexport interface DateTimeRange {\n from?: string;\n to?: string;\n}\n\nconst TIME_PATTERN = /^([01]\\d|2[0-3]):([0-5]\\d)$/;\nconst DEFAULT_TIME = '00:00';\n\nconst emptyParts = (): DateParts => ({ day: '', month: '', year: '' });\nconst digits = (value: string, max: number) => value.replace(/\\D/g, '').slice(0, max);\n\nconst toParts = (date?: Date): DateParts =>\n date ? { day: format(date, 'dd'), month: format(date, 'MM'), year: format(date, 'yyyy') } : emptyParts();\n\nconst parseManualDate = ({ day, month, year }: DateParts): Date | undefined => {\n if (day.length !== 2 || month.length !== 2 || year.length !== 4) return undefined;\n const next = parse(`${day}/${month}/${year}`, 'dd/MM/yyyy', new Date());\n return isValid(next) && format(next, 'dd/MM/yyyy') === `${day}/${month}/${year}` ? next : undefined;\n};\n\nconst maxDayForParts = (parts: DateParts, fallback: Date): number => {\n const year = parts.year.length === 4 ? Number(parts.year) : fallback.getFullYear();\n const month = parts.month.length > 0 ? Number(parts.month) - 1 : fallback.getMonth();\n const safeMonth = month >= 0 && month < 12 ? month : fallback.getMonth();\n return getDaysInMonth(new Date(year, safeMonth, 1));\n};\n\nconst parseDateTime = (value?: string): Date | undefined => {\n if (!value) return undefined;\n const d = parseISO(value);\n return isValid(d) ? d : undefined;\n};\n\nconst toTime = (date?: Date): string => {\n if (!date) return DEFAULT_TIME;\n return format(date, 'HH:mm');\n};\n\nconst withTime = (date: Date, time: string): Date => {\n const safe = TIME_PATTERN.test(time) ? time : DEFAULT_TIME;\n const [h, m] = safe.split(':').map(Number);\n const result = new Date(date);\n result.setHours(h, m, 0, 0);\n return result;\n};\n\nconst toIso = (date?: Date): string | undefined => date?.toISOString();\n\nconst calendarDateOnly = (date?: Date): Date | undefined =>\n date ? new Date(date.getFullYear(), date.getMonth(), date.getDate()) : undefined;\n\nconst formatDisplay = (isoStr?: string): string | undefined => {\n const d = parseDateTime(isoStr);\n if (!d) return undefined;\n return `${d.toLocaleDateString()} ${d.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}`;\n};\n\nexport interface DateTimeRangePickerProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n value?: DateTimeRange;\n onValueChange?: (range: DateTimeRange | undefined) => void;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n calendarProps?: CalendarProps;\n className?: string;\n id?: string;\n numberOfMonths?: number;\n}\n\nexport const DateTimeRangePicker = forwardRef<HTMLButtonElement, DateTimeRangePickerProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select date & time range',\n value,\n onValueChange,\n open: controlledOpen,\n onOpenChange,\n calendarProps,\n className,\n id = 'datetime-range',\n numberOfMonths = 2,\n ...props\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const [fromDraftParts, setFromDraftParts] = useState<DateParts>(() => toParts(parseDateTime(value?.from)));\n const [toDraftParts, setToDraftParts] = useState<DateParts>(() => toParts(parseDateTime(value?.to)));\n const [fromDraftTime, setFromDraftTime] = useState<string>(() => toTime(parseDateTime(value?.from)));\n const [toDraftTime, setToDraftTime] = useState<string>(() => toTime(parseDateTime(value?.to)));\n const [fromDate, setFromDate] = useState<Date | undefined>(() => parseDateTime(value?.from));\n const [toDate, setToDate] = useState<Date | undefined>(() => parseDateTime(value?.to));\n\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const setOpen = isControlled ? onOpenChange || (() => {}) : setInternalOpen;\n\n useEffect(() => {\n if (value !== undefined) {\n const nextFrom = parseDateTime(value.from);\n const nextTo = parseDateTime(value.to);\n setFromDate(nextFrom);\n setToDate(nextTo);\n setFromDraftParts(toParts(nextFrom));\n setToDraftParts(toParts(nextTo));\n setFromDraftTime(toTime(nextFrom));\n setToDraftTime(toTime(nextTo));\n }\n }, [value]);\n\n const emit = (nextFrom?: Date, nextTo?: Date) => {\n onValueChange?.({ from: toIso(nextFrom), to: toIso(nextTo) });\n };\n\n const calendarRange: DateRange = {\n from: calendarDateOnly(fromDate),\n to: calendarDateOnly(toDate),\n };\n\n const handleRangeSelect = (range: DateRange | undefined) => {\n const nextFrom = range?.from ? withTime(range.from, fromDraftTime) : undefined;\n const nextTo = range?.to ? withTime(range.to, toDraftTime) : undefined;\n setFromDate(nextFrom);\n setToDate(nextTo);\n setFromDraftParts(toParts(range?.from));\n setToDraftParts(toParts(range?.to));\n emit(nextFrom, nextTo);\n if (range?.from && range?.to && range.from.getTime() !== range.to.getTime()) {\n setOpen(false);\n }\n };\n\n const commitFrom = (parts: DateParts, time: string) => {\n const date = parseManualDate(parts);\n const next = date ? withTime(date, time) : undefined;\n setFromDate(next);\n emit(next, toDate);\n };\n\n const commitTo = (parts: DateParts, time: string) => {\n const date = parseManualDate(parts);\n const next = date ? withTime(date, time) : undefined;\n setToDate(next);\n emit(fromDate, next);\n if (fromDate && next && fromDate.getTime() !== next.getTime()) {\n setOpen(false);\n }\n };\n\n const displayText = value?.from ? `${formatDisplay(value.from)} – ${formatDisplay(value.to) ?? '...'}` : undefined;\n\n const inputBarClass = 'inline-flex items-center gap-1 rounded-lg border border-border/70 bg-muted/40 p-1';\n const segmentClass =\n '!h-6 rounded-md border-transparent bg-background px-1.5 py-0 text-center text-xs font-semibold shadow-xs';\n\n return (\n <div className=\"flex flex-col gap-3\">\n {label && (\n <Label htmlFor={id} className=\"px-1\">\n {label}\n </Label>\n )}\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button\n ref={ref}\n variant=\"outline\"\n id={id}\n aria-invalid={!!error}\n className={cn('w-96 justify-between font-normal', !displayText && 'text-muted-foreground', className)}\n {...props}\n >\n {displayText ?? placeholder}\n <ChevronDownIcon />\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto overflow-hidden p-0\" align=\"start\">\n {/* Date inputs at top */}\n <div className=\"border-b p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className={inputBarClass}>\n <Input\n value={fromDraftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (\n day.length === 2 &&\n (Number(day) < 1 || Number(day) > maxDayForParts(fromDraftParts, new Date()))\n )\n return;\n const next = { ...fromDraftParts, day };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n <Input\n value={fromDraftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n const next = { ...fromDraftParts, month };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n <Input\n value={fromDraftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className={cn(segmentClass, 'w-16')}\n onChange={(e) => {\n const next = { ...fromDraftParts, year: digits(e.target.value, 4) };\n setFromDraftParts(next);\n commitFrom(next, fromDraftTime);\n }}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className={inputBarClass}>\n <Input\n value={toDraftParts.day}\n placeholder=\"DD\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const day = digits(e.target.value, 2);\n if (day === '00') return;\n if (\n day.length === 2 &&\n (Number(day) < 1 || Number(day) > maxDayForParts(toDraftParts, new Date()))\n )\n return;\n const next = { ...toDraftParts, day };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n <Input\n value={toDraftParts.month}\n placeholder=\"MM\"\n inputMode=\"numeric\"\n maxLength={2}\n className={cn(segmentClass, 'w-10')}\n onChange={(e) => {\n const month = digits(e.target.value, 2);\n if (month === '00') return;\n if (month.length === 2 && (Number(month) < 1 || Number(month) > 12)) return;\n const next = { ...toDraftParts, month };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n <Input\n value={toDraftParts.year}\n placeholder=\"YYYY\"\n inputMode=\"numeric\"\n maxLength={4}\n className={cn(segmentClass, 'w-16')}\n onChange={(e) => {\n const next = { ...toDraftParts, year: digits(e.target.value, 4) };\n setToDraftParts(next);\n commitTo(next, toDraftTime);\n }}\n />\n </div>\n </div>\n </div>\n {/* Calendar */}\n <Calendar\n {...calendarProps}\n mode=\"range\"\n selected={calendarRange}\n captionLayout=\"label\"\n numberOfMonths={numberOfMonths}\n onSelect={handleRangeSelect as (range: DateRange | undefined) => void}\n />\n {/* Time inputs at bottom — matches DateTimePicker style */}\n <div className=\"border-t p-2\">\n <div className=\"flex items-center justify-center gap-2\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">From</span>\n <Input\n type=\"time\"\n step={60}\n value={fromDraftTime}\n disabled={!fromDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const time = e.target.value;\n setFromDraftTime(time);\n commitFrom(fromDraftParts, time);\n }}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">→</span>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">To</span>\n <Input\n type=\"time\"\n step={60}\n value={toDraftTime}\n disabled={!toDate}\n className=\"h-7 w-[112px] appearance-none pr-2 [color-scheme:light] [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-clear-button]:hidden [&::-webkit-inner-spin-button]:hidden\"\n onChange={(e) => {\n const time = e.target.value;\n setToDraftTime(time);\n commitTo(toDraftParts, time);\n }}\n />\n </div>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n {description && !error && <p className=\"text-sm text-muted-foreground px-1\">{description}</p>}\n {error && <p className=\"text-sm text-destructive px-1\">{error}</p>}\n </div>\n );\n },\n);\n\nDateTimeRangePicker.displayName = 'DateTimeRangePicker';\n"],"names":["ChevronDownIcon"],"mappings":"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"}