@vritti/quantum-ui 0.3.8 → 0.3.11
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.
- package/dist/Avatar.js +5 -5
- package/dist/BarChart.js +1 -9
- package/dist/BarChart.js.map +1 -1
- package/dist/Breadcrumb.js +1 -1
- package/dist/Breadcrumb.js.map +1 -1
- package/dist/Button.js +14 -6
- package/dist/Button.js.map +1 -1
- package/dist/Checkbox2.js +5 -5
- package/dist/CheckboxGroup.js +64 -6
- package/dist/CheckboxGroup.js.map +1 -1
- package/dist/Collapsible.js +1 -1
- package/dist/Collapsible.js.map +1 -1
- package/dist/ConfirmHost.js +5 -17
- package/dist/ConfirmHost.js.map +1 -1
- package/dist/CurrencyField.js +1 -1
- package/dist/CurrencyFilter.js.map +1 -1
- package/dist/DateRangePicker.js +4 -2
- package/dist/DateRangePicker.js.map +1 -1
- package/dist/DateTimePicker.js +1 -1
- package/dist/DateTimeRangePicker.js +4 -2
- package/dist/DateTimeRangePicker.js.map +1 -1
- package/dist/DetailSectionSkeleton.js +14 -1
- package/dist/DetailSectionSkeleton.js.map +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/Dialog.js.map +1 -1
- package/dist/ErrorBoundary.js +1 -108
- package/dist/ErrorBoundary.js.map +1 -1
- package/dist/FilePreview.js +1 -145
- package/dist/FilePreview.js.map +1 -1
- package/dist/HierarchyGraph.js +12 -8
- package/dist/HierarchyGraph.js.map +1 -1
- package/dist/IconSelect.js +31393 -0
- package/dist/IconSelect.js.map +1 -0
- package/dist/Kbd.js +11 -19
- package/dist/Kbd.js.map +1 -1
- package/dist/LocationSelector.js +13 -15
- package/dist/LocationSelector.js.map +1 -1
- package/dist/OTPField.js +1 -12
- package/dist/OTPField.js.map +1 -1
- package/dist/PageContent.js.map +1 -1
- package/dist/PageHeaderSkeleton.js +1 -1
- package/dist/PageHeaderSkeleton.js.map +1 -1
- package/dist/PermissionGate.js +31 -0
- package/dist/PermissionGate.js.map +1 -0
- package/dist/PieChart.js.map +1 -1
- package/dist/Progress.js +2 -2
- package/dist/QuantSelector.js.map +1 -1
- package/dist/RadialChart.js.map +1 -1
- package/dist/RadioGroup.js +7 -7
- package/dist/Select.js +32 -188
- package/dist/Select.js.map +1 -1
- package/dist/SerialSelector.js +13 -15
- package/dist/SerialSelector.js.map +1 -1
- package/dist/Sidebar.js +8 -19
- package/dist/Sidebar.js.map +1 -1
- package/dist/Sonner.js +2 -17
- package/dist/Sonner.js.map +1 -1
- package/dist/SupplierItemSelector.js.map +1 -1
- package/dist/Switch.js +7 -5
- package/dist/Switch.js.map +1 -1
- package/dist/TabsSkeleton.js +49 -23
- package/dist/TabsSkeleton.js.map +1 -1
- package/dist/ThemeToggle.js +1 -41
- package/dist/ThemeToggle.js.map +1 -1
- package/dist/Toggle.js +1 -1
- package/dist/Tooltip.js +19 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/UomSelector.js +6 -1
- package/dist/UomSelector.js.map +1 -1
- package/dist/UploadFile.js +1 -35
- package/dist/UploadFile.js.map +1 -1
- package/dist/ValueFilter.js.map +1 -1
- package/dist/ViewTabs.js +1 -16
- package/dist/ViewTabs.js.map +1 -1
- package/dist/assets/quantum-ui.css +109 -4
- package/dist/calendar2.js +2 -13
- package/dist/calendar2.js.map +1 -1
- package/dist/check-check.js +18 -0
- package/dist/check-check.js.map +1 -0
- package/dist/chevron-left.js +15 -0
- package/dist/chevron-left.js.map +1 -0
- package/dist/circle-question-mark.js +19 -0
- package/dist/circle-question-mark.js.map +1 -0
- package/dist/circle-x.js +19 -0
- package/dist/circle-x.js.map +1 -0
- package/dist/circle.js +15 -0
- package/dist/circle.js.map +1 -0
- package/dist/components/DataTable.js +1 -1
- package/dist/components/DetailField.js +1 -1
- package/dist/components/FormattedDate.js.map +1 -1
- package/dist/components/PermissionGate.js +2 -0
- package/dist/components/PermissionGate.js.map +1 -0
- package/dist/components/RichTextEditor.js +1 -1
- package/dist/components/ScanBarcodeButton.js +1 -20
- package/dist/components/ScanBarcodeButton.js.map +1 -1
- package/dist/components/Switch.js +1 -1
- package/dist/components/Tooltip.js +2 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/components/TreeView.js +4 -4
- package/dist/dot.js +15 -0
- package/dist/dot.js.map +1 -0
- package/dist/dropdown-menu.js +11 -22
- package/dist/dropdown-menu.js.map +1 -1
- package/dist/file.js +148 -0
- package/dist/file.js.map +1 -0
- package/dist/globe.js +19 -0
- package/dist/globe.js.map +1 -0
- package/dist/icons.js +21 -0
- package/dist/icons.js.map +1 -0
- package/dist/image-component.js +37 -96
- package/dist/image-component.js.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/index12.js +7 -7
- package/dist/index13.js +7 -7
- package/dist/index14.js +11 -11
- package/dist/index15.js +1 -1
- package/dist/index16.js +1 -1
- package/dist/index17.js +168 -175
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +173 -201
- package/dist/index18.js.map +1 -1
- package/dist/index19.js +203 -69
- package/dist/index19.js.map +1 -1
- package/dist/index20.js +70 -211
- package/dist/index20.js.map +1 -1
- package/dist/index21.js +206 -116
- package/dist/index21.js.map +1 -1
- package/dist/index22.js +122 -70
- package/dist/index22.js.map +1 -1
- package/dist/index23.js +74 -11
- package/dist/index23.js.map +1 -1
- package/dist/index24.js +13 -1134
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +1120 -219
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +202 -2506
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +2527 -23
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +32 -4
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +3 -1124
- package/dist/index29.js.map +1 -1
- package/dist/index30.js +1123 -35
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +36 -310
- package/dist/index31.js.map +1 -1
- package/dist/index32.js +309 -7
- package/dist/index32.js.map +1 -1
- package/dist/index33.js +8 -30
- package/dist/index33.js.map +1 -1
- package/dist/index34.js +29 -59
- package/dist/index34.js.map +1 -1
- package/dist/index35.js +59 -10
- package/dist/index35.js.map +1 -1
- package/dist/index36.js +10 -35
- package/dist/index36.js.map +1 -1
- package/dist/index37.js +27 -36809
- package/dist/index37.js.map +1 -1
- package/dist/index38.js +35362 -70
- package/dist/index38.js.map +1 -1
- package/dist/index39.js +72 -187
- package/dist/index39.js.map +1 -1
- package/dist/index4.js +5 -5
- package/dist/index40.js +199 -0
- package/dist/index40.js.map +1 -0
- package/dist/lib/components/BarChart/BarChart.d.ts.map +1 -1
- package/dist/lib/components/Button/Button.d.ts +1 -0
- package/dist/lib/components/Button/Button.d.ts.map +1 -1
- package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts +1 -0
- package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
- package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts +3 -0
- package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/RowActions.d.ts +1 -0
- package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
- package/dist/lib/components/DataTable/index.d.ts +2 -2
- package/dist/lib/components/DataTable/index.d.ts.map +1 -1
- package/dist/lib/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
- package/dist/lib/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
- package/dist/lib/components/DetailField/DetailHeader.d.ts +10 -0
- package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -0
- package/dist/lib/components/DetailField/index.d.ts +1 -0
- package/dist/lib/components/DetailField/index.d.ts.map +1 -1
- package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/lib/components/Editor/context/editor-config-context.d.ts +2 -2
- package/dist/lib/components/Editor/context/editor-config-context.d.ts.map +1 -1
- package/dist/lib/components/Editor/context/toolbar-context.d.ts +1 -1
- package/dist/lib/components/Editor/context/toolbar-context.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-hooks/use-debounce.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-hooks/use-modal.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-hooks/use-update-toolbar.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/button-group.d.ts +3 -3
- package/dist/lib/components/Editor/editor-ui/button-group.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/button.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/button.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/code-button.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/color-picker.d.ts +8 -8
- package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/command.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/command.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/content-editable.d.ts +1 -1
- package/dist/lib/components/Editor/editor-ui/content-editable.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/dialog.d.ts +4 -4
- package/dist/lib/components/Editor/editor-ui/dialog.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/image-component.d.ts +3 -3
- package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/input.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/input.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/label.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/label.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/popover.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/popover.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/select.d.ts +3 -3
- package/dist/lib/components/Editor/editor-ui/select.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/separator.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/separator.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/tabs.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/tabs.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/toggle.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/toggle.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/tooltip.d.ts +2 -2
- package/dist/lib/components/Editor/editor-ui/tooltip.d.ts.map +1 -1
- package/dist/lib/components/Editor/index.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts +2 -2
- package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts +2 -2
- package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts +1 -1
- package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/emoji-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/image-node.d.ts +5 -5
- package/dist/lib/components/Editor/nodes/image-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/keyword-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/layout-container-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/layout-item-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/mention-node.d.ts +1 -1
- package/dist/lib/components/Editor/nodes/mention-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/nodes.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts +2 -2
- package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/clear-editor-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts +2 -2
- package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/edit-mode-toggle-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/import-export-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/markdown-toggle-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/share-content-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/speech-to-text-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/tree-view-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/auto-link-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/autocomplete-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/code-action-menu-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/code-highlight-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/context-menu-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/drag-drop-paste-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/emoji-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/images-plugin.d.ts +4 -4
- package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/layout-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/link-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts +2 -2
- package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/bulleted-list-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/check-list-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/code-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/columns-layout-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/component-picker-menu-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/divider-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts +2 -2
- package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/heading-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/image-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/numbered-list-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/paragraph-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/quote-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/plugins.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/plugins.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/table-plugin.d.ts +2 -3
- package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-format/block-format-data.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-format/format-heading.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-horizontal-rule.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-image.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-table.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/block-insert-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/code-language-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/font-background-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/font-color-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/font-family-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/font-format-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/font-size-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/history-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/horizontal-rule-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/image-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/subsuper-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/table-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/can-use-dom.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/caret-from-point.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/environment.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/invariant.d.ts +1 -1
- package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/react-test-utils.d.ts +1 -1
- package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
- package/dist/lib/components/Editor/themes/editor-theme.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/index.d.ts +6 -6
- package/dist/lib/components/Editor/transformers/index.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-emoji-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-hr-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-image-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-tweet-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/types.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/can-use-dom.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
- package/dist/lib/components/FormattedDate/FormattedDate.d.ts.map +1 -1
- package/dist/lib/components/FormattedDate/index.d.ts +1 -1
- package/dist/lib/components/FormattedDate/index.d.ts.map +1 -1
- package/dist/lib/components/HierarchyGraph/HierarchyGraph.d.ts.map +1 -1
- package/dist/lib/components/Kbd/Kbd.d.ts.map +1 -1
- package/dist/lib/components/Kbd/index.d.ts +1 -1
- package/dist/lib/components/Kbd/index.d.ts.map +1 -1
- package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
- package/dist/lib/components/PermissionGate/PermissionGate.d.ts +18 -0
- package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -0
- package/dist/lib/components/PermissionGate/index.d.ts +2 -0
- package/dist/lib/components/PermissionGate/index.d.ts.map +1 -0
- package/dist/lib/components/PieChart/PieChart.d.ts.map +1 -1
- package/dist/lib/components/RadialChart/RadialChart.d.ts.map +1 -1
- package/dist/lib/components/Select/Select.d.ts.map +1 -1
- package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/lib/components/Select/hooks/useSelect.d.ts +2 -1
- package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
- package/dist/lib/components/Sidebar/Sidebar.d.ts +2 -0
- package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/lib/components/Switch/Switch.d.ts +2 -0
- package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
- package/dist/lib/components/Switch/index.d.ts +2 -2
- package/dist/lib/components/Switch/index.d.ts.map +1 -1
- package/dist/lib/components/Tabs/Tabs.d.ts +2 -1
- package/dist/lib/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/lib/components/Tooltip/Tooltip.d.ts +12 -0
- package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/lib/components/Tooltip/index.d.ts +3 -0
- package/dist/lib/components/Tooltip/index.d.ts.map +1 -0
- package/dist/lib/components/ValueFilter/ValueFilter.d.ts.map +1 -1
- package/dist/lib/components/index.d.ts +5 -3
- package/dist/lib/components/index.d.ts.map +1 -1
- package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
- package/dist/lib/icons/icon-names.json.d.ts +13731 -0
- package/dist/lib/icons/index.d.ts +4 -0
- package/dist/lib/icons/index.d.ts.map +1 -0
- package/dist/lib/selects/currency/CurrencyFilter.d.ts.map +1 -1
- package/dist/lib/selects/icon/IconSelect.d.ts +20 -0
- package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -0
- package/dist/lib/selects/icon/index.d.ts +2 -0
- package/dist/lib/selects/icon/index.d.ts.map +1 -0
- package/dist/lib/selects/index.d.ts +3 -2
- package/dist/lib/selects/index.d.ts.map +1 -1
- package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
- package/dist/lib/selects/location/index.d.ts +1 -1
- package/dist/lib/selects/location/index.d.ts.map +1 -1
- package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
- package/dist/lib/selects/quant/QuantSelector.d.ts.map +1 -1
- package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
- package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
- package/dist/lib/selects/uom/UomSelector.d.ts.map +1 -1
- package/dist/lib/utils/format.d.ts.map +1 -1
- package/dist/lib/utils/hotkeys.d.ts +1 -1
- package/dist/lib/utils/hotkeys.d.ts.map +1 -1
- package/dist/lib/utils/zod.d.ts.map +1 -1
- package/dist/lock-keyhole.js +19 -0
- package/dist/lock-keyhole.js.map +1 -0
- package/dist/panel-left.js +18 -0
- package/dist/panel-left.js.map +1 -0
- package/dist/scan-barcode.js +23 -0
- package/dist/scan-barcode.js.map +1 -0
- package/dist/selects/icon.js +2 -0
- package/dist/selects/icon.js.map +1 -0
- package/dist/selects/purchase-order-item.js.map +1 -1
- package/dist/shadcn/shadcnMultiSelect/multi-select.d.ts.map +1 -1
- package/dist/sun.js +44 -0
- package/dist/sun.js.map +1 -0
- package/dist/table-properties.js +351 -0
- package/dist/table-properties.js.map +1 -0
- package/dist/{tooltip.js → tooltip2.js} +1 -1
- package/dist/tooltip2.js.map +1 -0
- package/dist/{cells.js → useDataTable.js} +45 -381
- package/dist/useDataTable.js.map +1 -0
- package/dist/useFormatters.js.map +1 -1
- package/dist/user.js +38 -0
- package/dist/user.js.map +1 -0
- package/dist/utils/format.js +1 -0
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/motion.js +2 -2
- package/dist/utils/zod.js.map +1 -1
- package/dist/value.js +1 -1
- package/dist/wifi-off.js +111 -0
- package/dist/wifi-off.js.map +1 -0
- package/dist/youtube.js +737 -0
- package/dist/youtube.js.map +1 -0
- package/package.json +19 -1
- package/dist/cells.js.map +0 -1
- 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 './
|
|
5
|
-
import { P as Primitive, u as useControllableState, c as composeEventHandlers } from './
|
|
6
|
-
import { u as usePrevious } from './
|
|
7
|
-
import { u as useSize } from './
|
|
8
|
-
import { P as Presence } from './
|
|
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
|
|
package/dist/CheckboxGroup.js
CHANGED
|
@@ -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
|
|
30
|
-
(
|
|
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
|
-
[
|
|
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
|
|
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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"}
|
package/dist/Collapsible.js
CHANGED
|
@@ -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,
|
package/dist/Collapsible.js.map
CHANGED
|
@@ -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;
|
|
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;;;;"}
|
package/dist/ConfirmHost.js
CHANGED
|
@@ -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 {
|
|
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__ */
|
|
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 })
|
package/dist/ConfirmHost.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmHost.js","sources":["../
|
|
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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"}
|
package/dist/CurrencyField.js
CHANGED
|
@@ -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 './
|
|
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
|
|
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;;;;"}
|
package/dist/DateRangePicker.js
CHANGED
|
@@ -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())))
|
|
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())))
|
|
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":"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"}
|
|
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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"}
|
package/dist/DateTimePicker.js
CHANGED
|
@@ -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())))
|
|
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())))
|
|
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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"}
|