@ryuzaki13/react-foundation-ui 3.4.3 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/badge/index.js +65 -2
- package/dist/badge/index.js.map +1 -0
- package/dist/barcode-scanner/index.js +18 -18
- package/dist/base-table/index.js +2 -2
- package/dist/button/Button.d.ts +4 -2
- package/dist/button/Button.d.ts.map +1 -1
- package/dist/button/index.js +1 -1
- package/dist/check-box/index.js +1 -1
- package/dist/chunks/{CalendarView-Dm55k0bN.js → CalendarView-BCXVjLFz.js} +102 -92
- package/dist/chunks/CalendarView-BCXVjLFz.js.map +1 -0
- package/dist/chunks/{ImageViewerRuntime-HGBWp9NM.js → ImageViewerRuntime-DZpgxzF1.js} +25 -25
- package/dist/chunks/{ImageViewerRuntime-HGBWp9NM.js.map → ImageViewerRuntime-DZpgxzF1.js.map} +1 -1
- package/dist/chunks/OptionContentContainer-CWHlfm5Z.js +14 -0
- package/dist/chunks/OptionContentContainer-CWHlfm5Z.js.map +1 -0
- package/dist/chunks/{TextEditorLexicalClient-C8nSoz85.js → TextEditorLexicalClient-DrSVnvOe.js} +355 -355
- package/dist/chunks/{TextEditorLexicalClient-C8nSoz85.js.map → TextEditorLexicalClient-DrSVnvOe.js.map} +1 -1
- package/dist/chunks/{base-table-BWvKfI2W.js → base-table-BBp5WMDM.js} +138 -138
- package/dist/chunks/{base-table-BWvKfI2W.js.map → base-table-BBp5WMDM.js.map} +1 -1
- package/dist/chunks/button-DudCl375.js +75 -0
- package/dist/chunks/button-DudCl375.js.map +1 -0
- package/dist/chunks/{check-box-CZyhzmR0.js → check-box-D_Y6iIWv.js} +19 -19
- package/dist/chunks/{check-box-CZyhzmR0.js.map → check-box-D_Y6iIWv.js.map} +1 -1
- package/dist/chunks/context-menu-CrSXJxQL.js +621 -0
- package/dist/chunks/context-menu-CrSXJxQL.js.map +1 -0
- package/dist/chunks/{date-input-D7aBsPJc.js → date-input-CzCDou4s.js} +72 -69
- package/dist/chunks/{date-input-D7aBsPJc.js.map → date-input-CzCDou4s.js.map} +1 -1
- package/dist/chunks/{date-range-preset-select-BLnY47cv.js → date-range-preset-select-CyzGMvVp.js} +6 -6
- package/dist/chunks/{date-range-preset-select-BLnY47cv.js.map → date-range-preset-select-CyzGMvVp.js.map} +1 -1
- package/dist/chunks/{dialog-1Z1zCNCe.js → dialog-BcQGVNbu.js} +13 -13
- package/dist/chunks/{dialog-1Z1zCNCe.js.map → dialog-BcQGVNbu.js.map} +1 -1
- package/dist/chunks/flex-D86M_h-0.js +222 -0
- package/dist/chunks/flex-D86M_h-0.js.map +1 -0
- package/dist/chunks/{floating-arrow-DPKwJfww.js → floating-arrow-B_iSbzUZ.js} +20 -19
- package/dist/chunks/{floating-arrow-DPKwJfww.js.map → floating-arrow-B_iSbzUZ.js.map} +1 -1
- package/dist/chunks/{grid-dI94AAbi.js → grid-CFuzBigM.js} +77 -68
- package/dist/chunks/grid-CFuzBigM.js.map +1 -0
- package/dist/chunks/{input-DSPKgiCK.js → input-CuRK9Vbz.js} +78 -78
- package/dist/chunks/{input-DSPKgiCK.js.map → input-CuRK9Vbz.js.map} +1 -1
- package/dist/chunks/{input-files-tIS17-zX.js → input-files-B8j6Pb_M.js} +31 -31
- package/dist/chunks/{input-files-tIS17-zX.js.map → input-files-B8j6Pb_M.js.map} +1 -1
- package/dist/chunks/misc-Cm_LDrUD.js +332 -0
- package/dist/chunks/misc-Cm_LDrUD.js.map +1 -0
- package/dist/chunks/{modal-dplfAaER.js → modal-Dz5TzkTB.js} +79 -70
- package/dist/chunks/modal-Dz5TzkTB.js.map +1 -0
- package/dist/chunks/picker-SJXnHwsj.js +462 -0
- package/dist/chunks/picker-SJXnHwsj.js.map +1 -0
- package/dist/chunks/popover-BJH-yHvb.js +263 -0
- package/dist/chunks/popover-BJH-yHvb.js.map +1 -0
- package/dist/chunks/radio-group-CW-K1n9c.js +125 -0
- package/dist/chunks/{radio-group-sSnlYjAX.js.map → radio-group-CW-K1n9c.js.map} +1 -1
- package/dist/chunks/select--oIrv7SC.js +357 -0
- package/dist/chunks/select--oIrv7SC.js.map +1 -0
- package/dist/chunks/separator-CHpBud1e.js +18 -0
- package/dist/chunks/separator-CHpBud1e.js.map +1 -0
- package/dist/chunks/{sortable-BKIwlqhI.js → sortable-BujAJgFa.js} +42 -40
- package/dist/chunks/{sortable-BKIwlqhI.js.map → sortable-BujAJgFa.js.map} +1 -1
- package/dist/chunks/{table-DxoSOvQK.js → table-BDY9Zw--.js} +18 -18
- package/dist/chunks/{table-DxoSOvQK.js.map → table-BDY9Zw--.js.map} +1 -1
- package/dist/chunks/{table-column-interactions-DzEvVuXe.js → table-column-interactions-Do8LFtiv.js} +20 -20
- package/dist/chunks/{table-column-interactions-DzEvVuXe.js.map → table-column-interactions-Do8LFtiv.js.map} +1 -1
- package/dist/chunks/{types-D9Wj9wrg.js → types-CxXyru6U.js} +21 -21
- package/dist/chunks/{types-D9Wj9wrg.js.map → types-CxXyru6U.js.map} +1 -1
- package/dist/chunks/ui.module-oRwY3Zli.js.map +1 -1
- package/dist/chunks/{useODataSelectBase-DR4PrY1j.js → useODataSelectBase-DwR4Lfv-.js} +5 -5
- package/dist/chunks/{useODataSelectBase-DR4PrY1j.js.map → useODataSelectBase-DwR4Lfv-.js.map} +1 -1
- package/dist/chunks/{wheel-picker-FS58cRsQ.js → wheel-picker-DUHGy7wE.js} +23 -23
- package/dist/chunks/{wheel-picker-FS58cRsQ.js.map → wheel-picker-DUHGy7wE.js.map} +1 -1
- package/dist/context-menu/components/ContextMenu.d.ts +16 -9
- package/dist/context-menu/components/ContextMenu.d.ts.map +1 -1
- package/dist/context-menu/components/ContextMenuTrigger.d.ts +6 -4
- package/dist/context-menu/components/ContextMenuTrigger.d.ts.map +1 -1
- package/dist/context-menu/components/DropdownMenu.d.ts +12 -7
- package/dist/context-menu/components/DropdownMenu.d.ts.map +1 -1
- package/dist/context-menu/components/DropdownMenuTrigger.d.ts +6 -4
- package/dist/context-menu/components/DropdownMenuTrigger.d.ts.map +1 -1
- package/dist/context-menu/components/MenuContent.d.ts +6 -4
- package/dist/context-menu/components/MenuContent.d.ts.map +1 -1
- package/dist/context-menu/components/MenuContext.d.ts +12 -7
- package/dist/context-menu/components/MenuContext.d.ts.map +1 -1
- package/dist/context-menu/components/MenuGroupLabel.d.ts +1 -1
- package/dist/context-menu/components/MenuGroupLabel.d.ts.map +1 -1
- package/dist/context-menu/components/MenuItem.d.ts.map +1 -1
- package/dist/context-menu/components/MenuRoot.d.ts +5 -5
- package/dist/context-menu/components/MenuRoot.d.ts.map +1 -1
- package/dist/context-menu/components/MenuSeparator.d.ts +1 -2
- package/dist/context-menu/components/MenuSeparator.d.ts.map +1 -1
- package/dist/context-menu/components/RadialMenuContent.d.ts +6 -4
- package/dist/context-menu/components/RadialMenuContent.d.ts.map +1 -1
- package/dist/context-menu/components/RadialMenuItem.d.ts +1 -1
- package/dist/context-menu/components/RadialMenuItem.d.ts.map +1 -1
- package/dist/context-menu/index.js +1 -1
- package/dist/date-input/index.js +2 -2
- package/dist/date-input/ui/CalendarDayView.d.ts +1 -1
- package/dist/date-input/ui/CalendarDayView.d.ts.map +1 -1
- package/dist/date-input/ui/CalendarMonthView.d.ts +1 -1
- package/dist/date-input/ui/CalendarMonthView.d.ts.map +1 -1
- package/dist/date-input/ui/CalendarView.d.ts.map +1 -1
- package/dist/date-input/ui/CalendarYearView.d.ts +1 -1
- package/dist/date-input/ui/CalendarYearView.d.ts.map +1 -1
- package/dist/date-input/ui/DateInput.d.ts.map +1 -1
- package/dist/date-range-preset-select/index.js +1 -1
- package/dist/date-time-input/index.js +128 -125
- package/dist/date-time-input/index.js.map +1 -1
- package/dist/date-time-input/ui/SingleDateTimeInput.d.ts.map +1 -1
- package/dist/detail/Detail.d.ts +6 -1
- package/dist/detail/Detail.d.ts.map +1 -1
- package/dist/detail/index.js +23 -23
- package/dist/detail/index.js.map +1 -1
- package/dist/dialog/index.js +1 -1
- package/dist/disclosure/index.js +9 -9
- package/dist/drop-zone/index.js +21 -21
- package/dist/errors/BadRequestPage.d.ts +1 -1
- package/dist/errors/BadRequestPage.d.ts.map +1 -1
- package/dist/errors/ErrorDisplay.d.ts +2 -2
- package/dist/errors/ErrorDisplay.d.ts.map +1 -1
- package/dist/errors/ErrorExplosion.d.ts +1 -2
- package/dist/errors/ErrorExplosion.d.ts.map +1 -1
- package/dist/errors/ForbiddenPage.d.ts +1 -1
- package/dist/errors/ForbiddenPage.d.ts.map +1 -1
- package/dist/errors/NotFoundPage.d.ts +1 -1
- package/dist/errors/NotFoundPage.d.ts.map +1 -1
- package/dist/errors/PageError.d.ts +1 -2
- package/dist/errors/PageError.d.ts.map +1 -1
- package/dist/errors/UnauthorizedPage.d.ts +1 -1
- package/dist/errors/UnauthorizedPage.d.ts.map +1 -1
- package/dist/errors/ViewNotChanged.d.ts +1 -2
- package/dist/errors/ViewNotChanged.d.ts.map +1 -1
- package/dist/errors/index.js +110 -80
- package/dist/errors/index.js.map +1 -1
- package/dist/expandable-action-panel/index.js +24 -24
- package/dist/flex/Flex.d.ts +6 -3
- package/dist/flex/Flex.d.ts.map +1 -1
- package/dist/flex/FlexCenter.d.ts +1 -1
- package/dist/flex/FlexCenter.d.ts.map +1 -1
- package/dist/flex/FlexContainer.d.ts +7 -1
- package/dist/flex/FlexContainer.d.ts.map +1 -1
- package/dist/flex/FlexItem.d.ts +7 -1
- package/dist/flex/FlexItem.d.ts.map +1 -1
- package/dist/flex/FlexSpacer.d.ts +7 -1
- package/dist/flex/FlexSpacer.d.ts.map +1 -1
- package/dist/flex/PredefinedFlex.d.ts +7 -1
- package/dist/flex/PredefinedFlex.d.ts.map +1 -1
- package/dist/flex/index.js +1 -1
- package/dist/flex/useFlexClasses.d.ts +1 -1
- package/dist/floating-arrow/FloatingArrow.d.ts +4 -1
- package/dist/floating-arrow/FloatingArrow.d.ts.map +1 -1
- package/dist/floating-arrow/index.js +1 -1
- package/dist/fullscreen-portal/index.js +8 -8
- package/dist/grid/Grid.d.ts +4 -2
- package/dist/grid/Grid.d.ts.map +1 -1
- package/dist/grid/GridContainer.d.ts +7 -1
- package/dist/grid/GridContainer.d.ts.map +1 -1
- package/dist/grid/GridItem.d.ts +7 -1
- package/dist/grid/GridItem.d.ts.map +1 -1
- package/dist/grid/index.js +1 -1
- package/dist/image/index.js +120 -120
- package/dist/input/index.js +1 -1
- package/dist/input-date-time/index.js +55 -55
- package/dist/input-file/index.js +16 -16
- package/dist/input-files/index.js +1 -1
- package/dist/input-image/index.js +17 -17
- package/dist/input-search/index.js +30 -2
- package/dist/input-search/index.js.map +1 -0
- package/dist/layout-picker/index.js +95 -97
- package/dist/layout-picker/index.js.map +1 -1
- package/dist/layout-picker/ui/LayoutPicker.d.ts.map +1 -1
- package/dist/list/List.d.ts +9 -9
- package/dist/list/List.d.ts.map +1 -1
- package/dist/list/index.js +51 -44
- package/dist/list/index.js.map +1 -1
- package/dist/listbox/Listbox.d.ts.map +1 -1
- package/dist/listbox/index.js +33 -39
- package/dist/listbox/index.js.map +1 -1
- package/dist/misc/CopyTextWrapper.d.ts +1 -1
- package/dist/misc/CopyTextWrapper.d.ts.map +1 -1
- package/dist/misc/OneStepScroller.d.ts +1 -1
- package/dist/misc/OneStepScroller.d.ts.map +1 -1
- package/dist/misc/Scrollable.d.ts +9 -7
- package/dist/misc/Scrollable.d.ts.map +1 -1
- package/dist/misc/SkeletonLine.d.ts +1 -1
- package/dist/misc/SkeletonLine.d.ts.map +1 -1
- package/dist/misc/StateIcon.d.ts +6 -7
- package/dist/misc/StateIcon.d.ts.map +1 -1
- package/dist/misc/index.d.ts +1 -0
- package/dist/misc/index.d.ts.map +1 -1
- package/dist/misc/index.js +1 -1
- package/dist/modal/Modal.d.ts +14 -5
- package/dist/modal/Modal.d.ts.map +1 -1
- package/dist/modal/index.js +1 -1
- package/dist/multi-select/index.js +481 -2
- package/dist/multi-select/index.js.map +1 -0
- package/dist/multi-select/ui/MultiSelect.d.ts +7 -2
- package/dist/multi-select/ui/MultiSelect.d.ts.map +1 -1
- package/dist/multi-select/ui/ODataMultiSelect.d.ts +1 -2
- package/dist/multi-select/ui/ODataMultiSelect.d.ts.map +1 -1
- package/dist/notifications/index.js +46 -48
- package/dist/notifications/index.js.map +1 -1
- package/dist/option/Option.d.ts +3 -3
- package/dist/option/OptionContentContainer.d.ts +7 -0
- package/dist/option/OptionContentContainer.d.ts.map +1 -0
- package/dist/option/index.js +30 -30
- package/dist/option/index.js.map +1 -1
- package/dist/period-select/index.js +7 -7
- package/dist/picker/PickerOptions.d.ts +3 -1
- package/dist/picker/PickerOptions.d.ts.map +1 -1
- package/dist/picker/PickerPopup.d.ts +1 -1
- package/dist/picker/PickerPopup.d.ts.map +1 -1
- package/dist/picker/PickerTriggerActions.d.ts +7 -2
- package/dist/picker/PickerTriggerActions.d.ts.map +1 -1
- package/dist/picker/PickerTriggerInput.d.ts +7 -2
- package/dist/picker/PickerTriggerInput.d.ts.map +1 -1
- package/dist/picker/index.js +1 -1
- package/dist/polymorphic/PolymorphicComponent.d.ts +1 -1
- package/dist/polymorphic/PolymorphicComponent.d.ts.map +1 -1
- package/dist/polymorphic/index.js +3 -1
- package/dist/polymorphic/index.js.map +1 -1
- package/dist/popover/FloatingPopover.d.ts +1 -1
- package/dist/popover/FloatingPopover.d.ts.map +1 -1
- package/dist/popover/FloatingTooltip.d.ts +2 -2
- package/dist/popover/FloatingTooltip.d.ts.map +1 -1
- package/dist/popover/components/Popover.d.ts +11 -10
- package/dist/popover/components/Popover.d.ts.map +1 -1
- package/dist/popover/components/PopoverContent.d.ts +6 -4
- package/dist/popover/components/PopoverContent.d.ts.map +1 -1
- package/dist/popover/components/PopoverContext.d.ts +2 -1
- package/dist/popover/components/PopoverContext.d.ts.map +1 -1
- package/dist/popover/components/PopoverTrigger.d.ts +1 -1
- package/dist/popover/components/PopoverTrigger.d.ts.map +1 -1
- package/dist/popover/index.js +1 -1
- package/dist/preset-range-date-input/index.js +10 -10
- package/dist/preset-select/index.js +1 -1
- package/dist/radio-button/RadioButton.d.ts +1 -1
- package/dist/radio-button/RadioButton.d.ts.map +1 -1
- package/dist/radio-button/index.js +14 -11
- package/dist/radio-button/index.js.map +1 -1
- package/dist/radio-group/index.js +1 -1
- package/dist/select/ODataSelect.d.ts +1 -2
- package/dist/select/ODataSelect.d.ts.map +1 -1
- package/dist/select/Select.d.ts.map +1 -1
- package/dist/select/index.js +1 -1
- package/dist/separator/Separator.d.ts +1 -1
- package/dist/separator/Separator.d.ts.map +1 -1
- package/dist/separator/index.js +1 -1
- package/dist/simple-table/index.js +5 -5
- package/dist/slider/Slider.d.ts.map +1 -1
- package/dist/slider/SliderInput.d.ts.map +1 -1
- package/dist/slider/SliderPopoverToggle.d.ts +11 -0
- package/dist/slider/SliderPopoverToggle.d.ts.map +1 -0
- package/dist/slider/index.js +298 -277
- package/dist/slider/index.js.map +1 -1
- package/dist/sortable/Sortable.d.ts.map +1 -1
- package/dist/sortable/SortableDragHandle.d.ts +1 -1
- package/dist/sortable/SortableDragHandle.d.ts.map +1 -1
- package/dist/sortable/index.js +1 -1
- package/dist/splitter/index.js +55 -55
- package/dist/state-select/index.js +17 -17
- package/dist/styles.css +1 -1
- package/dist/switch/index.js +18 -18
- package/dist/table/index.js +1 -1
- package/dist/table-column-interactions/index.js +1 -1
- package/dist/table-editor/index.js +99 -99
- package/dist/table-sorting/index.js +13 -13
- package/dist/tabs/index.js +103 -104
- package/dist/tabs/index.js.map +1 -1
- package/dist/tabs/ui/TabsBox.d.ts +1 -1
- package/dist/tabs/ui/TabsBox.d.ts.map +1 -1
- package/dist/tabs/ui/TabsLayout.d.ts +11 -7
- package/dist/tabs/ui/TabsLayout.d.ts.map +1 -1
- package/dist/tabs/ui/TabsPanel.d.ts +3 -3
- package/dist/tabs/ui/TabsPanel.d.ts.map +1 -1
- package/dist/tabs/ui/TabsTabList.d.ts +2 -2
- package/dist/tabs/ui/TabsTabList.d.ts.map +1 -1
- package/dist/tag-input/index.js +58 -58
- package/dist/tag-input/index.js.map +1 -1
- package/dist/text/HighlightText.d.ts +2 -2
- package/dist/text/HighlightText.d.ts.map +1 -1
- package/dist/text/index.js +23 -18
- package/dist/text/index.js.map +1 -1
- package/dist/text-editor/index.js +3 -3
- package/dist/textarea/index.js +1 -1
- package/dist/three-scene/index.js +7 -7
- package/dist/toggle/index.js +20 -20
- package/dist/toolbar/Toolbar.d.ts +8 -2
- package/dist/toolbar/Toolbar.d.ts.map +1 -1
- package/dist/toolbar/index.js +21 -17
- package/dist/toolbar/index.js.map +1 -1
- package/dist/tree/index.js +24 -24
- package/dist/tree-select/TreeNodeContent.d.ts +3 -1
- package/dist/tree-select/TreeNodeContent.d.ts.map +1 -1
- package/dist/tree-select/TreePickerBase.d.ts.map +1 -1
- package/dist/tree-select/index.js +469 -392
- package/dist/tree-select/index.js.map +1 -1
- package/dist/tree-table/index.js +33 -33
- package/dist/tree-table/index.js.map +1 -1
- package/dist/wheel-picker/index.js +1 -1
- package/package.json +1 -5
- package/storybook-static/assets/{Badge-BKRvorSi.js → Badge-r7lsdHne.js} +1 -1
- package/storybook-static/assets/{Badge.stories-19yFfupy.js → Badge.stories-P4qdQ7cm.js} +1 -1
- package/storybook-static/assets/{BadgeList-DMkfxply.js → BadgeList-8NyPAV2Q.js} +1 -1
- package/storybook-static/assets/{BarcodeScannerDialog.stories-DdnHxu5x.js → BarcodeScannerDialog.stories--TadwGdZ.js} +1 -1
- package/storybook-static/assets/{Button-Di-0Ionw.js → Button-BP0DDcNq.js} +1 -1
- package/storybook-static/assets/{Button-CoOZeR_z.js → Button-X3OT5zE7.js} +2 -2
- package/storybook-static/assets/{Button.stories-Bd1To5BN.js → Button.stories-CFiUr_xE.js} +1 -1
- package/storybook-static/assets/CalendarView-nWuZBE9T.js +1 -0
- package/storybook-static/assets/{CheckBox-DSmGYEML.js → CheckBox-BId2Zf_m.js} +1 -1
- package/storybook-static/assets/{CheckBox-DfRTTXg1.js → CheckBox-Bde9tud-.js} +1 -1
- package/storybook-static/assets/{CheckBox.stories-DaldWgEI.js → CheckBox.stories-BVU9Rkai.js} +1 -1
- package/storybook-static/assets/{Color-6AOWCN3U-DIhia6KS.js → Color-6AOWCN3U-BeUy9gum.js} +1 -1
- package/storybook-static/assets/{ContextMenu-BGMQHT9V.js → ContextMenu-BS2UVgbu.js} +6 -2
- package/storybook-static/assets/ContextMenu-Byksyz_8.js +33 -0
- package/storybook-static/assets/ContextMenu.stories-DmJPp2YR.js +37 -0
- package/storybook-static/assets/{DateInput-DUl5Bb0j.js → DateInput-CQe_1Dk-.js} +8 -1
- package/storybook-static/assets/{DateInput-MgdMtvtr.js → DateInput-CgETMk9B.js} +1 -1
- package/storybook-static/assets/{DateInput.stories-B6Ol0Ak3.js → DateInput.stories-BOst6EKv.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-CPj0pSGc.js → DateRangePresetSelect-CxrNYBTe.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect-C4MVqjXa.js → DateRangePresetSelect-DHJ31vIB.js} +1 -1
- package/storybook-static/assets/{DateRangePresetSelect.stories-tPaMURtH.js → DateRangePresetSelect.stories-CiyN1joN.js} +1 -1
- package/storybook-static/assets/{Detail-DnHTVRb5.js → Detail-V_NYrUJR.js} +1 -1
- package/storybook-static/assets/Detail.stories-B4tf6inN.js +56 -0
- package/storybook-static/assets/{Dialog-COpvqcXi.js → Dialog-B6miFej7.js} +1 -1
- package/storybook-static/assets/{Dialog-LMnrvBpx.js → Dialog-DNTx5Unm.js} +1 -1
- package/storybook-static/assets/{Dialog.stories-BE2I5ny2.js → Dialog.stories-BS1dDTLW.js} +1 -1
- package/storybook-static/assets/{Disclosure-BZ3jd5nu.js → Disclosure-4sf5BIn1.js} +1 -1
- package/storybook-static/assets/{Disclosure.stories-cMcF8a8I.js → Disclosure.stories-DhUQNdEC.js} +1 -1
- package/storybook-static/assets/DisclosureGroup-Codiur77.js +2 -0
- package/storybook-static/assets/{DocsRenderer-JROSPFPF-CurHdzu8.js → DocsRenderer-JROSPFPF-yT2aWNaF.js} +1 -1
- package/storybook-static/assets/{DropZone-VEmgdfs6.js → DropZone-D4rl2WEV.js} +1 -1
- package/storybook-static/assets/{DropZone-DGMAbY1z.js → DropZone-Du0BQAyO.js} +1 -1
- package/storybook-static/assets/{DropZone.stories-B8N17-bV.js → DropZone.stories-B8iPjYH_.js} +1 -1
- package/storybook-static/assets/DropdownMenu-BcdS3oNz.js +21 -0
- package/storybook-static/assets/{ExpandableActionPanel-C7CFQZLD.js → ExpandableActionPanel-6u6YJanI.js} +1 -1
- package/storybook-static/assets/{ExpandableActionPanel.stories-CnBr0s9R.js → ExpandableActionPanel.stories-D-CZHUv0.js} +1 -1
- package/storybook-static/assets/{Flex-RpqsC-gQ.js → Flex-DWi0hQ-f.js} +1 -1
- package/storybook-static/assets/Flex.stories-CKKi33JK.js +300 -0
- package/storybook-static/assets/FlexContainer-BMK_YH72.js +1 -0
- package/storybook-static/assets/{FlexItem-pu3E11Sf.js → FlexItem-DpSHNBxJ.js} +2 -2
- package/storybook-static/assets/FloatingPopover-D9nTd47B.js +1 -0
- package/storybook-static/assets/FormattedTableCell-DyBhk9rG.js +15 -0
- package/storybook-static/assets/{Grid-CzO0Ae1r.js → Grid-BZgzDCLK.js} +2 -2
- package/storybook-static/assets/{Grid-BRnqEtg1.js → Grid-DbvUGBEN.js} +1 -1
- package/storybook-static/assets/{Grid.stories-DXY7Cvfu.js → Grid.stories-BeEAzTxD.js} +4 -4
- package/storybook-static/assets/{GridContainer-fKYgDsLl.js → GridContainer-B82Onj6x.js} +2 -2
- package/storybook-static/assets/{ImageCropper.stories-ZnvbFN71.js → ImageCropper.stories-SDIt19aO.js} +1 -1
- package/storybook-static/assets/{ImageRenderer-DUOhCfac.js → ImageRenderer-Bzg27pq7.js} +1 -1
- package/storybook-static/assets/{ImageRenderer.stories-Dj6NQm2k.js → ImageRenderer.stories-C-IE84zV.js} +1 -1
- package/storybook-static/assets/{ImageView.stories-QTzOsByD.js → ImageView.stories-DIcx2Krs.js} +1 -1
- package/storybook-static/assets/{ImageViewer.stories-CpnUEgZW.js → ImageViewer.stories-CQTy0uPX.js} +2 -2
- package/storybook-static/assets/{ImageViewerRuntime-B1PicLUw.js → ImageViewerRuntime-CA5BYQsX.js} +1 -1
- package/storybook-static/assets/{Input-B8eGQXlp.js → Input-D8uMye_9.js} +1 -1
- package/storybook-static/assets/{Input-DnFc_Pwx.js → Input-DmsN6uC_.js} +1 -1
- package/storybook-static/assets/{Input.stories-C6CbYvZP.js → Input.stories-D8QWPnMD.js} +1 -1
- package/storybook-static/assets/{InputDateTime-DoMduRde.js → InputDateTime-Cczll-bH.js} +1 -1
- package/storybook-static/assets/{InputDateTime.stories--LHpvJjY.js → InputDateTime.stories-DeZ6XHwa.js} +1 -1
- package/storybook-static/assets/{InputFile-CunQ8F4s.js → InputFile-BbPjLN4E.js} +1 -1
- package/storybook-static/assets/{InputFile-DFv3WAWa.js → InputFile-C0_L0zTd.js} +1 -1
- package/storybook-static/assets/{InputFile.stories-B0WZhic1.js → InputFile.stories-Di_6BkX1.js} +1 -1
- package/storybook-static/assets/{InputFiles-DyiPQ_tH.js → InputFiles-B3uOwqKF.js} +1 -1
- package/storybook-static/assets/{InputFiles-CKDPmjWY.js → InputFiles-CF60S_qG.js} +1 -1
- package/storybook-static/assets/{InputFiles.stories-BbP_bEnL.js → InputFiles.stories-BkTiEPX6.js} +1 -1
- package/storybook-static/assets/{InputFilesList-BAIGwV7V.js → InputFilesList-C9cudcHe.js} +1 -1
- package/storybook-static/assets/{InputImage-2G1pRNbw.js → InputImage-Aq_ZXmtw.js} +1 -1
- package/storybook-static/assets/{InputImage-ZvEB_TIT.js → InputImage-Dx0DIf4l.js} +1 -1
- package/storybook-static/assets/{InputImage.stories-BiShLRcw.js → InputImage.stories-D7LfEcn4.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents-CT99QfHX.js → InteractiveComponents-DP5FyU4S.js} +1 -1
- package/storybook-static/assets/{InteractiveComponents.stories-BPTICQZz.js → InteractiveComponents.stories-CE5L5PAB.js} +1 -1
- package/storybook-static/assets/{LayoutPicker-BDpc8LBa.js → LayoutPicker-BehxFQsU.js} +2 -2
- package/storybook-static/assets/{LayoutPicker-Cg_AM-pj.js → LayoutPicker-CW1W-CAf.js} +2 -1
- package/storybook-static/assets/{LayoutPicker.stories-Ca9WZdPW.js → LayoutPicker.stories-DtvfpOUS.js} +1 -1
- package/storybook-static/assets/Listbox-Bn_6WyQc.js +1 -0
- package/storybook-static/assets/{Listbox-LbbFtte9.js → Listbox-VcD28kxl.js} +2 -1
- package/storybook-static/assets/{Listbox.stories-xDpbFNZk.js → Listbox.stories-CL6fJlUm.js} +1 -1
- package/storybook-static/assets/{Modal-CXd2j0up.js → Modal-D0D5WZ_O.js} +1 -1
- package/storybook-static/assets/Modal-DrSX0i3a.js +1 -0
- package/storybook-static/assets/{Modal.stories-cNLvFjmT.js → Modal.stories-Ch3P8_kY.js} +1 -1
- package/storybook-static/assets/{ModalManagerProvider-ClXvSB9a.js → ModalManagerProvider-B0Lf7xX0.js} +1 -1
- package/storybook-static/assets/MultiSelect-Bw3qf8eW.js +2 -0
- package/storybook-static/assets/{MultiSelect-Na2VdNy3.js → MultiSelect-Cmxa5Vho.js} +4 -1
- package/storybook-static/assets/MultiSelect-SJBp1Ymv.css +1 -0
- package/storybook-static/assets/{MultiSelect.stories-4nFshdtz.js → MultiSelect.stories-DKHPBUWD.js} +1 -1
- package/storybook-static/assets/NoData-seFnJNiE.js +1 -0
- package/storybook-static/assets/{NotificationsHost-CrLL4WK9.js → NotificationsHost-d770FjSM.js} +11 -8
- package/storybook-static/assets/{NotificationsHost.stories-Ci2q0W9-.js → NotificationsHost.stories-BYmVl44l.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect-Cc09uTB8.js → ODataMultiSelect-BN0pcCmQ.js} +1 -1
- package/storybook-static/assets/{ODataMultiSelect.stories-CzGzREa9.js → ODataMultiSelect.stories-D5zrkaFW.js} +2 -2
- package/storybook-static/assets/{ODataSelect-DqoRg5pz.js → ODataSelect-C5DXRRVH.js} +1 -1
- package/storybook-static/assets/{ODataSelect.stories-BCcxERn3.js → ODataSelect.stories-ClYp08JR.js} +2 -2
- package/storybook-static/assets/{ODataTreeMultiSelect-qZEcSE5O.js → ODataTreeMultiSelect-CsvSq1G1.js} +1 -1
- package/storybook-static/assets/{ODataTreeMultiSelect.stories-Bfees7Qr.js → ODataTreeMultiSelect.stories-DFXLQjms.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect-IOVS6uQc.js → ODataTreeSelect-CdN-NwV7.js} +1 -1
- package/storybook-static/assets/{ODataTreeSelect.stories-CO7DClzd.js → ODataTreeSelect.stories-CDffbvxi.js} +1 -1
- package/storybook-static/assets/OneStepScroller-qXHo2r0J.js +5 -0
- package/storybook-static/assets/Option-tEWfKgN_.js +10 -0
- package/storybook-static/assets/OptionButton-DOj_dfd1.js +1 -0
- package/storybook-static/assets/OptionContent-6iwuLpQP.js +1 -0
- package/storybook-static/assets/OptionContentContainer-DbdHO42m.js +2 -0
- package/storybook-static/assets/{PeriodSelect-D-jXJf5C.js → PeriodSelect-Bo_B6jdw.js} +1 -1
- package/storybook-static/assets/{PeriodSelect-BAVDztkI.js → PeriodSelect-DffBuv6v.js} +1 -1
- package/storybook-static/assets/{PeriodSelect.stories-CscsENT9.js → PeriodSelect.stories-Boq-fBL8.js} +1 -1
- package/storybook-static/assets/{PickerField-CRtltoce.js → PickerField-fMVQUcBX.js} +1 -1
- package/storybook-static/assets/PickerTriggerActions-zS0JUD-3.js +2 -0
- package/storybook-static/assets/PolymorphicComponent-NBvIz9JD.js +1 -0
- package/storybook-static/assets/Popover-5c_n39x0.js +55 -0
- package/storybook-static/assets/Popover-u02JbpuP.js +46 -0
- package/storybook-static/assets/Popover.stories-BUVgJJQI.js +63 -0
- package/storybook-static/assets/{PresetRangeDateInput-VZnM8RNV.js → PresetRangeDateInput-EiaEd6Qp.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput-CVPMYlEV.js → PresetRangeDateInput-TyV-u0Db.js} +1 -1
- package/storybook-static/assets/{PresetRangeDateInput.stories-DdBWlSV-.js → PresetRangeDateInput.stories-jJq5Gkdb.js} +1 -1
- package/storybook-static/assets/{PresetSelect-C7YYBjlL.js → PresetSelect-Cnl_fXjS.js} +1 -1
- package/storybook-static/assets/{README-6XPUoxFl.js → README-10_nKrEg.js} +1 -1
- package/storybook-static/assets/{README-DIWsYBR7.js → README-6n5fAnyG.js} +1 -1
- package/storybook-static/assets/{README-oKLTQYfV.js → README-7mbN7jNm.js} +1 -1
- package/storybook-static/assets/{README-D2AT2-yD.js → README-8qj7XGDa.js} +1 -1
- package/storybook-static/assets/{README-DADnaXLy.js → README-8vaqVs2t.js} +1 -1
- package/storybook-static/assets/{README-ZxRwqfIH.js → README-AbbeH5rC.js} +1 -1
- package/storybook-static/assets/{README-Bk1oSDWQ.js → README-B-K2UPpo.js} +1 -1
- package/storybook-static/assets/{README-DoxVtmRh.js → README-B-z6znlC.js} +1 -1
- package/storybook-static/assets/{README-BL8ZNGNi.js → README-B6uVB1ib.js} +1 -1
- package/storybook-static/assets/{README-B0FbTpix.js → README-B7f6XRLa.js} +1 -1
- package/storybook-static/assets/{README-BGBxEe4u.js → README-BGEviJbA.js} +1 -1
- package/storybook-static/assets/{README-C-IUw1gX.js → README-BPWr_0XE.js} +1 -1
- package/storybook-static/assets/{README-_KzyG4dS.js → README-BWiCGCpy.js} +1 -1
- package/storybook-static/assets/{README-DrTR5pSr.js → README-BfF9g6q6.js} +1 -1
- package/storybook-static/assets/{README-2NTkucdH.js → README-BgbmWbpJ.js} +1 -1
- package/storybook-static/assets/{README-DC0vNdOD.js → README-Bn7SBLqL.js} +1 -1
- package/storybook-static/assets/{README-w9FMhq0X.js → README-BoXMNqUS.js} +1 -1
- package/storybook-static/assets/{README-DyWhmOFY.js → README-BoZbB8t8.js} +1 -1
- package/storybook-static/assets/{README-b3wA6wFr.js → README-BsHrwATK.js} +1 -1
- package/storybook-static/assets/{README-CB5BpIBF.js → README-By7MmJad.js} +1 -1
- package/storybook-static/assets/{README-DWzfTSuq.js → README-BylyIJ4z.js} +1 -1
- package/storybook-static/assets/{README-CeNQeTK-.js → README-ByxHEXaq.js} +1 -1
- package/storybook-static/assets/{README-UcyyK9jn.js → README-CO0Anr1W.js} +1 -1
- package/storybook-static/assets/{README-BdsFByUw.js → README-CXhBUq08.js} +1 -1
- package/storybook-static/assets/{README-Bvo0Qxde.js → README-CXlUZ-Tw.js} +1 -1
- package/storybook-static/assets/{README-CTF9mVZL.js → README-CZBT22Qx.js} +1 -1
- package/storybook-static/assets/{README-B0Nb0jf2.js → README-CZaKBu1r.js} +1 -1
- package/storybook-static/assets/{README-C_lKreF9.js → README-Cc5RUdsX.js} +1 -1
- package/storybook-static/assets/{README-BZlnzGAh.js → README-CmCyESsg.js} +1 -1
- package/storybook-static/assets/{README-jvtwVY_n.js → README-CoofcGyA.js} +1 -1
- package/storybook-static/assets/{README-Wli4AXG5.js → README-CqCDXjY-.js} +1 -1
- package/storybook-static/assets/{README-DOi6rx7n.js → README-CqMgUXym.js} +1 -1
- package/storybook-static/assets/{README-na5mQX4V.js → README-DB3HzmYa.js} +1 -1
- package/storybook-static/assets/{README-DMwF_O1R.js → README-DBqb3xHL.js} +1 -1
- package/storybook-static/assets/{README-CvaizZr1.js → README-DKMzvCHg.js} +1 -1
- package/storybook-static/assets/{README-CqiNQGIJ.js → README-DLGk_zi3.js} +1 -1
- package/storybook-static/assets/{README-Dm7CwuVP.js → README-DT4BWDzj.js} +1 -1
- package/storybook-static/assets/{README-Brn9Tjjc.js → README-DXzLMFnF.js} +1 -1
- package/storybook-static/assets/{README-8L1vpZcz.js → README-DZKQ2NbJ.js} +1 -1
- package/storybook-static/assets/{README-C7N5_6-c.js → README-DnIK-CvZ.js} +1 -1
- package/storybook-static/assets/{README-GChrAHFQ.js → README-DsEaeYrz.js} +1 -1
- package/storybook-static/assets/{README-DkBG5Azm.js → README-DsqwQGJx.js} +1 -1
- package/storybook-static/assets/{README-Dr8TxFTe.js → README-DyhDd6j2.js} +1 -1
- package/storybook-static/assets/{README-HWuoKwKL.js → README-E09CwLzJ.js} +1 -1
- package/storybook-static/assets/{README-DlfWWC7n.js → README-W30_dPSQ.js} +1 -1
- package/storybook-static/assets/{README-DOBIWrus.js → README-WtLMdn_H.js} +1 -1
- package/storybook-static/assets/{README-g1VWHzAJ.js → README-_UuZJvdY.js} +1 -1
- package/storybook-static/assets/{README-BD-WSEvQ.js → README-bJALHbSR.js} +1 -1
- package/storybook-static/assets/{README-Dmu5lsNT.js → README-e3Zi9n04.js} +1 -1
- package/storybook-static/assets/{README-DgXAMdBY.js → README-g4l3WFXZ.js} +1 -1
- package/storybook-static/assets/{README-jQcGKqqm.js → README-jb10Ekr5.js} +1 -1
- package/storybook-static/assets/{README-CTwfFqJG.js → README-q6R_bF6h.js} +1 -1
- package/storybook-static/assets/{README-BGmO6U9j.js → README-tDgobAYS.js} +1 -1
- package/storybook-static/assets/{RadioButton-Dgkz1EWU.js → RadioButton-DGjO61a9.js} +1 -1
- package/storybook-static/assets/RadioButton-j3O4woG8.js +1 -0
- package/storybook-static/assets/{RadioButton.stories-DO14jTfm.js → RadioButton.stories-COGMYQcq.js} +1 -1
- package/storybook-static/assets/{RadioGroup-Db0AhiKo.js → RadioGroup-Cuj2D_RZ.js} +1 -1
- package/storybook-static/assets/{RadioGroup-BSiqjVai.js → RadioGroup-D9samx7D.js} +1 -1
- package/storybook-static/assets/{RadioGroup.stories-C0D6n83q.js → RadioGroup.stories-KSDvpgqY.js} +1 -1
- package/storybook-static/assets/Scrollable-DsOw--4y.js +1 -0
- package/storybook-static/assets/Scrollable-tPrIOchd.js +18 -0
- package/storybook-static/assets/Scrollable.stories-B7d_6eGB.js +1 -0
- package/storybook-static/assets/Select-D0CHiGkz.js +12 -0
- package/storybook-static/assets/{Select-D8X-SkP2.js → Select-h0tWQbii.js} +3 -1
- package/storybook-static/assets/{Select.stories-8_zvonmc.js → Select.stories-GmGbpUoi.js} +1 -1
- package/storybook-static/assets/Separator-C8aQcNns.js +1 -0
- package/storybook-static/assets/Separator-Dh8kzf-5.js +14 -0
- package/storybook-static/assets/Separator.stories-nQ9bDdo1.js +14 -0
- package/storybook-static/assets/{SerializableSelect-ii6T140l.js → SerializableSelect-BJAxQ8an.js} +1 -1
- package/storybook-static/assets/{SerializableSelect.stories-Ba3ABMGt.js → SerializableSelect.stories-CzVCg1_7.js} +1 -1
- package/storybook-static/assets/{ShimmerText-C6vkZwUV.js → ShimmerText-DnEOvvJA.js} +1 -1
- package/storybook-static/assets/{ShimmerText.stories-CVpSxXHJ.js → ShimmerText.stories-D2XRPcMC.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput-96-mrjq8.js → SingleDateTimeInput-Bwn8kqI3.js} +8 -1
- package/storybook-static/assets/{SingleDateTimeInput-DpETPR89.js → SingleDateTimeInput-DwY38Bzb.js} +1 -1
- package/storybook-static/assets/{SingleDateTimeInput.stories-JhviurJO.js → SingleDateTimeInput.stories-DKq1_AqA.js} +1 -1
- package/storybook-static/assets/{Slider-B27TdvRV.js → Slider-CT0jMXMY.js} +8 -1
- package/storybook-static/assets/Slider-KiXLZUpw.js +1 -0
- package/storybook-static/assets/{Slider.stories-d1YeKe5r.js → Slider.stories-Cmcm8HlR.js} +1 -1
- package/storybook-static/assets/SliderInput-Dd_yvyMG.js +3 -0
- package/storybook-static/assets/{SliderInput-D2d23mEI.js → SliderInput-Unp3YEcU.js} +8 -1
- package/storybook-static/assets/{SliderInput.stories-CwqT79oE.js → SliderInput.stories-C0MwvTOV.js} +1 -1
- package/storybook-static/assets/{Sortable-DiJuiI6V.js → Sortable-CnCowZw-.js} +4 -2
- package/storybook-static/assets/Sortable.stories-DCrIurAg.js +44 -0
- package/storybook-static/assets/{Splitter-QwdfWNbm.js → Splitter-BErks2lB.js} +1 -1
- package/storybook-static/assets/{Splitter.stories-C2iDPz8c.js → Splitter.stories-DyRlCVUo.js} +1 -1
- package/storybook-static/assets/{StateSelect-D1ZDM6bC.js → StateSelect-DXfsbduM.js} +1 -1
- package/storybook-static/assets/{StateSelect-Bw9H1Cus.js → StateSelect-DuVzqi0t.js} +1 -1
- package/storybook-static/assets/{StateSelect.stories-DEFvQ15O.js → StateSelect.stories-CnIXqGFB.js} +1 -1
- package/storybook-static/assets/{StatusIndicator-D6Pbdz37.js → StatusIndicator-Bz3JF899.js} +1 -1
- package/storybook-static/assets/{StatusIndicator.stories-COgpy5cK.js → StatusIndicator.stories-B5RMchH3.js} +1 -1
- package/storybook-static/assets/{StringToggle.stories-BFwMh0Yd.js → StringToggle.stories-CcR8KHGF.js} +1 -1
- package/storybook-static/assets/{Switch-Bmj2AItH.js → Switch-Bo-dd4nL.js} +1 -1
- package/storybook-static/assets/{Switch-DyDk152g.js → Switch-a7GMbDn9.js} +1 -1
- package/storybook-static/assets/{Switch.stories-C10NxPL4.js → Switch.stories-B9c9CAmZ.js} +1 -1
- package/storybook-static/assets/{Table-YcEwF4aO.js → Table-BgmEmcbL.js} +1 -1
- package/storybook-static/assets/{Table.stories-DgxFS9Sa.js → Table.stories-BByDPmdZ.js} +1 -1
- package/storybook-static/assets/{TableEditor.stories-CSMoxO4O.js → TableEditor.stories-DJi7VPcY.js} +1 -1
- package/storybook-static/assets/{Tabs-DOsPN2X1.js → Tabs-CV1ykDlt.js} +2 -3
- package/storybook-static/assets/Tabs.stories-DOyJdrcR.js +57 -0
- package/storybook-static/assets/{TabsBox-B3REnb6D.css → TabsBox-DuBKU62M.css} +1 -1
- package/storybook-static/assets/{TabsBox-Ovukgo9G.js → TabsBox-n38x7_yO.js} +1 -1
- package/storybook-static/assets/{TagInput-BQBOGr9G.js → TagInput-j4mVWIf0.js} +1 -1
- package/storybook-static/assets/{TagInput.stories-DAAyJlgm.js → TagInput.stories-DSU97IRU.js} +1 -1
- package/storybook-static/assets/{Text-fdwuak_J.js → Text-COGTV38X.js} +1 -1
- package/storybook-static/assets/{Textarea-A22Efyk-.js → Textarea-BcgmS9aD.js} +1 -1
- package/storybook-static/assets/{Textarea-D80ZPpEy.js → Textarea-Byqjr2Ve.js} +1 -1
- package/storybook-static/assets/{Textarea.stories-DfaOYMoN.js → Textarea.stories-D1gXsWxK.js} +1 -1
- package/storybook-static/assets/{TimePanel-Bd5T_SfL.js → TimePanel-DzFFLXJP.js} +1 -1
- package/storybook-static/assets/{TimePanel.stories-D6TIpKp4.js → TimePanel.stories-287q5ipF.js} +1 -1
- package/storybook-static/assets/{Toggle-BvHMq6f_.js → Toggle-CCkzi_xC.js} +1 -1
- package/storybook-static/assets/{Toggle-DUyCRH0o.js → Toggle-KtpVC-vX.js} +1 -1
- package/storybook-static/assets/{Toggle.stories-ZPgC-EWw.js → Toggle.stories-BLKa6Zst.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-DTMybWfP.js → TreeMultiSelect-CbnCiXFa.js} +1 -1
- package/storybook-static/assets/{TreeMultiSelect-DTmB9s8s.js → TreeMultiSelect-sYAglJIC.js} +2 -1
- package/storybook-static/assets/{TreeMultiSelect.stories-1_HB74Gf.js → TreeMultiSelect.stories-DGw_tJQ5.js} +1 -1
- package/storybook-static/assets/TreePickerBase-ClWTQVKW.css +1 -0
- package/storybook-static/assets/TreePickerBase-wz0-Y-eg.js +76 -0
- package/storybook-static/assets/{TreeSelect-CTN6cRRr.js → TreeSelect-BCOJNrl1.js} +1 -1
- package/storybook-static/assets/{TreeSelect-UsZGYhUO.js → TreeSelect-BJ6C_2pM.js} +2 -1
- package/storybook-static/assets/{TreeSelect.stories-B01pZcR9.js → TreeSelect.stories-DKdmUNAI.js} +1 -1
- package/storybook-static/assets/{TreeTable-dr3jK3Ih.js → TreeTable-DIRsmeC8.js} +1 -1
- package/storybook-static/assets/{TreeTable.stories-B1DPasDc.js → TreeTable.stories-BfqeLJU6.js} +1 -1
- package/storybook-static/assets/{blocks-Cw5Dm88b.js → blocks-r6nP1Mk3.js} +3 -3
- package/storybook-static/assets/{check-028VTQ8f.js → check-CX66-EtS.js} +1 -1
- package/storybook-static/assets/{chevron-down-CjXVIhzi.js → chevron-down-BpTVPmXw.js} +1 -1
- package/storybook-static/assets/{chevron-left-CktI1oFP.js → chevron-left-BDyvowID.js} +1 -1
- package/storybook-static/assets/{chevron-right-CF10QSRI.js → chevron-right-PitONC71.js} +1 -1
- package/storybook-static/assets/{chunk-W22LQPXL-C0ehDnCq.js → chunk-W22LQPXL-Bd54JRSO.js} +1 -1
- package/storybook-static/assets/{circle-alert-s0HpHvQO.js → circle-alert-BxfK632o.js} +1 -1
- package/storybook-static/assets/{circle-check-C7Lv1fv9.js → circle-check-CQ0mrCVh.js} +1 -1
- package/storybook-static/assets/{components-ClxgOUq5.js → components-CJIwocXl.js} +3 -3
- package/storybook-static/assets/contextMenu-BodN1HdA.js +2 -0
- package/storybook-static/assets/{download-B1U5w3LU.js → download-C_lZf2f4.js} +1 -1
- package/storybook-static/assets/{floating-ui.react-CyNWkXBV.js → floating-ui.react-BzwQR5CG.js} +1 -1
- package/storybook-static/assets/{foundationApi-CY0sxk8w.js → foundationApi-BgE0geET.js} +1 -1
- package/storybook-static/assets/{foundationLib-BCpSUA25.js → foundationLib-6nKeXUFS.js} +1 -1
- package/storybook-static/assets/{hooks-DjR-EyBl.js → hooks-DDySZJGR.js} +1 -1
- package/storybook-static/assets/{iframe-woVbsQH3.js → iframe-B9PXVErw.js} +4 -4
- package/storybook-static/assets/iframe-f5g4GUQw.js +1 -0
- package/storybook-static/assets/{info-DKbXBIbQ.js → info-rdW9neC9.js} +1 -1
- package/storybook-static/assets/{odata-CMCuN2Rx.js → odata-D6cOAxLt.js} +1 -1
- package/storybook-static/assets/{odataStoryFixtures-a4Q2PLas.js → odataStoryFixtures-CGQ31IO_.js} +1 -1
- package/storybook-static/assets/{react-D3CyilRt.js → react-BMktiE65.js} +1 -1
- package/storybook-static/assets/{refresh-cw-DXEJelAO.js → refresh-cw-CfKvrc1N.js} +1 -1
- package/storybook-static/assets/{settings-2-CKbiQBX8.js → settings-2-Drz-L5J9.js} +1 -1
- package/storybook-static/assets/sortable-BMuu2DRC.js +1 -0
- package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-CLptde2b.js → syntaxhighlighter-QEQV7K2Y-eBmofw1l.js} +1 -1
- package/storybook-static/assets/{trash-2-CPWRIQlJ.js → trash-2-DEbF1hh6.js} +1 -1
- package/storybook-static/assets/{triangle-alert-XjzWCHp5.js → triangle-alert--nwD_1ZX.js} +1 -1
- package/storybook-static/assets/{ui-FA-1R8mO.css → ui-Bpz_yxm8.css} +1 -1
- package/storybook-static/assets/{uiClasses-DNnVkKPr.js → uiClasses-Bar5W7-L.js} +1 -1
- package/storybook-static/assets/{useODataSelectBase-ZGFa3pdT.js → useODataSelectBase-DSOGiMIw.js} +1 -1
- package/storybook-static/assets/{useODataTreeData-DAdLowou.js → useODataTreeData-Cn_XaKz_.js} +1 -1
- package/storybook-static/assets/usePickerQuery-B5ZZQg8g.js +1 -0
- package/storybook-static/assets/usePickerTriggerController-Cqy5IfOJ.js +6 -0
- package/storybook-static/assets/{x-D2Q9PGsq.js → x-DSHJbBBz.js} +1 -1
- package/storybook-static/iframe.html +2 -2
- package/storybook-static/index.json +1 -1
- package/storybook-static/project.json +1 -1
- package/dist/advanced-search/index.d.ts +0 -3
- package/dist/advanced-search/index.d.ts.map +0 -1
- package/dist/advanced-search/index.js +0 -399
- package/dist/advanced-search/index.js.map +0 -1
- package/dist/advanced-search/lib/index.d.ts +0 -2
- package/dist/advanced-search/lib/index.d.ts.map +0 -1
- package/dist/advanced-search/lib/searchParts.d.ts +0 -3
- package/dist/advanced-search/lib/searchParts.d.ts.map +0 -1
- package/dist/advanced-search/model/index.d.ts +0 -5
- package/dist/advanced-search/model/index.d.ts.map +0 -1
- package/dist/advanced-search/model/types.d.ts +0 -55
- package/dist/advanced-search/model/types.d.ts.map +0 -1
- package/dist/advanced-search/model/useAdvancedSearch.d.ts +0 -11
- package/dist/advanced-search/model/useAdvancedSearch.d.ts.map +0 -1
- package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts +0 -6
- package/dist/advanced-search/model/useAdvancedSearchInitialSelected.d.ts.map +0 -1
- package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts +0 -13
- package/dist/advanced-search/model/useAdvancedSearchSelection.d.ts.map +0 -1
- package/dist/advanced-search/ui/AdvancedSearchModal.d.ts +0 -23
- package/dist/advanced-search/ui/AdvancedSearchModal.d.ts.map +0 -1
- package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts +0 -16
- package/dist/advanced-search/ui/AdvancedSearchModalSession.d.ts.map +0 -1
- package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts +0 -9
- package/dist/advanced-search/ui/AdvancedSearchSelect.d.ts.map +0 -1
- package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts +0 -9
- package/dist/advanced-search/ui/AdvancedSearchSelectUI.d.ts.map +0 -1
- package/dist/advanced-search/ui/index.d.ts +0 -2
- package/dist/advanced-search/ui/index.d.ts.map +0 -1
- package/dist/chunks/CalendarView-Dm55k0bN.js.map +0 -1
- package/dist/chunks/badge-6mXO9BWP.js +0 -65
- package/dist/chunks/badge-6mXO9BWP.js.map +0 -1
- package/dist/chunks/button-DF21yxVp.js +0 -72
- package/dist/chunks/button-DF21yxVp.js.map +0 -1
- package/dist/chunks/context-menu-DgvXGCuI.js +0 -532
- package/dist/chunks/context-menu-DgvXGCuI.js.map +0 -1
- package/dist/chunks/flex-C7njxZ74.js +0 -207
- package/dist/chunks/flex-C7njxZ74.js.map +0 -1
- package/dist/chunks/grid-dI94AAbi.js.map +0 -1
- package/dist/chunks/input-search-Cat4c7SM.js +0 -30
- package/dist/chunks/input-search-Cat4c7SM.js.map +0 -1
- package/dist/chunks/misc-DeGboAt-.js +0 -309
- package/dist/chunks/misc-DeGboAt-.js.map +0 -1
- package/dist/chunks/modal-dplfAaER.js.map +0 -1
- package/dist/chunks/multi-select-BZ9N6Dal.js +0 -466
- package/dist/chunks/multi-select-BZ9N6Dal.js.map +0 -1
- package/dist/chunks/picker-lvm82d0A.js +0 -439
- package/dist/chunks/picker-lvm82d0A.js.map +0 -1
- package/dist/chunks/popover-Bne-Ljbs.js +0 -245
- package/dist/chunks/popover-Bne-Ljbs.js.map +0 -1
- package/dist/chunks/radio-group-sSnlYjAX.js +0 -125
- package/dist/chunks/select-aTGupQan.js +0 -363
- package/dist/chunks/select-aTGupQan.js.map +0 -1
- package/dist/chunks/separator-B72Aq-6a.js +0 -15
- package/dist/chunks/separator-B72Aq-6a.js.map +0 -1
- package/storybook-static/assets/CalendarView-Dz8cY1fo.js +0 -1
- package/storybook-static/assets/ContextMenu-XS7B8QUC.js +0 -1
- package/storybook-static/assets/ContextMenu.stories-Dp2t2BZa.js +0 -37
- package/storybook-static/assets/CustomOptionButton-DNd0GDWp.js +0 -1
- package/storybook-static/assets/Detail.stories-CXg_w4qM.js +0 -56
- package/storybook-static/assets/DisclosureGroup-JNnTj18G.js +0 -2
- package/storybook-static/assets/DropdownMenu-xjOtBneA.js +0 -1
- package/storybook-static/assets/Flex.stories-CCVNsX23.js +0 -300
- package/storybook-static/assets/FlexContainer-BWyPlTMB.js +0 -1
- package/storybook-static/assets/FloatingPopover-D6tO24aO.js +0 -1
- package/storybook-static/assets/FormattedTableCell-CDaDfaXy.js +0 -15
- package/storybook-static/assets/Listbox-3Npc4PI_.js +0 -1
- package/storybook-static/assets/Modal-Ddmc8-2-.js +0 -1
- package/storybook-static/assets/MultiSelect-BkLCM22R.js +0 -2
- package/storybook-static/assets/MultiSelect-DI_UD1B-.css +0 -1
- package/storybook-static/assets/NoData-bUonNuRR.js +0 -1
- package/storybook-static/assets/OneStepScroller-B_IRz2Rw.js +0 -5
- package/storybook-static/assets/Option-fRoOLqLF.js +0 -10
- package/storybook-static/assets/OptionButton--hnpJ-88.js +0 -1
- package/storybook-static/assets/PickerTriggerActions-BDGEQPvP.js +0 -1
- package/storybook-static/assets/Popover-BYO0DlBg.js +0 -45
- package/storybook-static/assets/Popover-Byy9_Twt.js +0 -2
- package/storybook-static/assets/Popover.stories-8RhemIQg.js +0 -47
- package/storybook-static/assets/RadioButton-DMn-soQD.js +0 -1
- package/storybook-static/assets/Scrollable-BI3OE8gc.js +0 -1
- package/storybook-static/assets/Select-1MNiFkxm.js +0 -12
- package/storybook-static/assets/Slider-DbiDvmoV.js +0 -1
- package/storybook-static/assets/SliderInput-CzYn9gor.js +0 -2
- package/storybook-static/assets/Sortable.stories-DFCzTok0.js +0 -44
- package/storybook-static/assets/Tabs.stories-BdZilcp2.js +0 -57
- package/storybook-static/assets/TreePickerBase-CmFF9pWE.css +0 -1
- package/storybook-static/assets/TreePickerBase-Cu2mneBS.js +0 -76
- package/storybook-static/assets/contextMenu-CWGju9qn.js +0 -2
- package/storybook-static/assets/iframe-Dyd6jnSv.js +0 -1
- package/storybook-static/assets/sortable-CXLU2ip-.js +0 -1
- package/storybook-static/assets/usePickerQuery-CaO8hXyH.js +0 -1
- package/storybook-static/assets/usePickerTriggerController-DWjrt_q_.js +0 -6
- /package/storybook-static/assets/{ui.module-CyEEibCu.js → ui.module-0uniSGT-.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-input-D7aBsPJc.js","names":[],"sources":["../../src/date-input/lib/dateInputSelectionModes.ts","../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import { normalizePresetIds, resolvePresetOptionsByIds, type PresetOption } from \"@ryuzaki13/react-foundation-lib/presets\";\n\nimport type { DateInputSelectionMode } from \"./types\";\n\n/**\n * Описание встроенного режима выбора даты для runtime-переключателя и внешних конфигураторов.\n */\nexport interface DateInputSelectionModeOption extends PresetOption<DateInputSelectionMode> {}\n\n/**\n * Канонический список режимов выбора даты.\n */\nexport const DATE_INPUT_SELECTION_MODES = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly DateInputSelectionMode[]);\n\n/**\n * Встроенные режимы выбора даты с пользовательскими подписями.\n */\nexport const DATE_INPUT_SELECTION_MODE_OPTIONS: readonly DateInputSelectionModeOption[] = Object.freeze([\n\t{ id: \"day\", label: \"День\" },\n\t{ id: \"week\", label: \"Неделя\" },\n\t{ id: \"month\", label: \"Месяц\" },\n\t{ id: \"year\", label: \"Год\" }\n]);\n\nconst DATE_INPUT_SELECTION_MODE_SET: ReadonlySet<string> = new Set(DATE_INPUT_SELECTION_MODES);\n\n/**\n * Проверяет, что внешнее значение является поддерживаемым режимом выбора даты.\n */\nexport function isDateInputSelectionMode(value: unknown): value is DateInputSelectionMode {\n\treturn typeof value === \"string\" && DATE_INPUT_SELECTION_MODE_SET.has(value);\n}\n\n/**\n * Нормализует сохранённый список режимов, сохраняя пользовательский порядок и удаляя дубли.\n */\nexport function normalizeDateInputSelectionModes(\n\tvalue: unknown,\n\tfallbackModes: readonly DateInputSelectionMode[] = DATE_INPUT_SELECTION_MODES\n): DateInputSelectionMode[] {\n\treturn normalizePresetIds(value, isDateInputSelectionMode, fallbackModes);\n}\n\n/**\n * Формирует упорядоченный список описаний по сохранённым режимам выбора.\n */\nexport function resolveDateInputSelectionModeOptionsByModes(\n\tmodes: readonly DateInputSelectionMode[],\n\toptions: readonly DateInputSelectionModeOption[] = DATE_INPUT_SELECTION_MODE_OPTIONS\n): DateInputSelectionModeOption[] {\n\treturn resolvePresetOptionsByIds(modes, options);\n}\n","import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputPresetName(options.datePreset), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\treturn formatDate(date, resolveDateInputPresetName(options.datePreset), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatDate(startDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst externalSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst externalInputValue = formatDateInputValue(externalSelectedDate, formatOptions);\n\tconst externalStateSignature = JSON.stringify([\n\t\toptions.selectsRange,\n\t\toptions.datePreset ?? null,\n\t\toptions.datePickerLevel ?? null,\n\t\toptions.selectionMode ?? null,\n\t\toptions.weekEndDay ?? null,\n\t\tisDateRangeTuple(externalSelectedDate)\n\t\t\t? [externalSelectedDate[0]?.getTime() ?? null, externalSelectedDate[1]?.getTime() ?? null]\n\t\t\t: (externalSelectedDate?.getTime() ?? null)\n\t]);\n\tconst [draftState, setDraftState] = useState(() => ({\n\t\tsourceSignature: externalStateSignature,\n\t\tselectedDate: externalSelectedDate,\n\t\tinputValue: externalInputValue\n\t}));\n\tconst hasCurrentDraft = draftState.sourceSignature === externalStateSignature;\n\tconst selectedDate = hasCurrentDraft ? draftState.selectedDate : externalSelectedDate;\n\tconst inputValue = hasCurrentDraft ? draftState.inputValue : externalInputValue;\n\n\t/**\n\t * Сохраняет пользовательский текст только относительно текущего controlled-снимка.\n\t * При внешней смене value или формата отображение сразу выводится из новых props.\n\t */\n\tconst setInputValue = (nextInputValue: string) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentSelectedDate =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.selectedDate : externalSelectedDate;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: currentSelectedDate,\n\t\t\t\tinputValue: nextInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Обновляет локальный незавершённый выбор, не зеркаля controlled value через effect.\n\t */\n\tconst setSelectedDate = (nextSelectedDate: Date | NullableDateRange | null) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentInputValue =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.inputValue : externalInputValue;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextSelectedDate,\n\t\t\t\tinputValue: currentInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему пресету.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: swappedRange,\n\t\t\t\t\t\tinputValue: formatValue(swappedRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: nextRange,\n\t\t\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetDraftState({\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextRange,\n\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetDraftState({\n\t\t\tsourceSignature: externalStateSignature,\n\t\t\tselectedDate: normalizedDate,\n\t\t\tinputValue: formatValue(normalizedDate)\n\t\t});\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tnormalizeDateInputSelectionModes,\n\tresolveAvailableDatePickerLevel,\n\tresolveDateInputSelectionModeOptionsByModes,\n\ttype DateInputSelectionMode,\n\ttype DateInputSelectionModeDatePresets,\n\ttype DateInputSelectionModeOption,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Задаёт отдельный пресет форматирования для каждого runtime-режима выбора.\n\t * Общий `datePreset` используется как fallback для отсутствующих значений.\n\t */\n\tselectionModeDatePresets?: DateInputSelectionModeDatePresets;\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionModeOption[] {\n\tconst configuredModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst availableModes = configuredModes.includes(selectionMode) ? configuredModes : [...configuredModes, selectionMode];\n\n\treturn resolveDateInputSelectionModeOptionsByModes(availableModes);\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePreset,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tselectionModeDatePresets,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst configuredSelectionModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(\n\t\t() => controlledSelectionMode ?? configuredSelectionModes[0] ?? \"day\"\n\t);\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst activeDatePreset = allowSelectionModeChange ? (selectionModeDatePresets?.[selectionMode] ?? datePreset) : datePreset;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePreset: activeDatePreset,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModeOptions = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModeOptions.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t\t<button type=\"button\" disabled={disabled} aria-label=\"Открыть календарь\" className={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t\t<CalendarDaysIcon />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\">\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModeOptions.map((option) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={option.id} value={option.id} label={option.label} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-input-CzCDou4s.js","names":[],"sources":["../../src/date-input/lib/dateInputSelectionModes.ts","../../src/date-input/lib/dateInputValue.ts","../../src/date-input/model/useDateInput.ts","../../src/date-input/ui/DateInput.module.scss","../../src/date-input/ui/DateInput.tsx"],"sourcesContent":["import { normalizePresetIds, resolvePresetOptionsByIds, type PresetOption } from \"@ryuzaki13/react-foundation-lib/presets\";\n\nimport type { DateInputSelectionMode } from \"./types\";\n\n/**\n * Описание встроенного режима выбора даты для runtime-переключателя и внешних конфигураторов.\n */\nexport interface DateInputSelectionModeOption extends PresetOption<DateInputSelectionMode> {}\n\n/**\n * Канонический список режимов выбора даты.\n */\nexport const DATE_INPUT_SELECTION_MODES = Object.freeze([\n\t\"day\",\n\t\"week\",\n\t\"month\",\n\t\"year\"\n] as const satisfies readonly DateInputSelectionMode[]);\n\n/**\n * Встроенные режимы выбора даты с пользовательскими подписями.\n */\nexport const DATE_INPUT_SELECTION_MODE_OPTIONS: readonly DateInputSelectionModeOption[] = Object.freeze([\n\t{ id: \"day\", label: \"День\" },\n\t{ id: \"week\", label: \"Неделя\" },\n\t{ id: \"month\", label: \"Месяц\" },\n\t{ id: \"year\", label: \"Год\" }\n]);\n\nconst DATE_INPUT_SELECTION_MODE_SET: ReadonlySet<string> = new Set(DATE_INPUT_SELECTION_MODES);\n\n/**\n * Проверяет, что внешнее значение является поддерживаемым режимом выбора даты.\n */\nexport function isDateInputSelectionMode(value: unknown): value is DateInputSelectionMode {\n\treturn typeof value === \"string\" && DATE_INPUT_SELECTION_MODE_SET.has(value);\n}\n\n/**\n * Нормализует сохранённый список режимов, сохраняя пользовательский порядок и удаляя дубли.\n */\nexport function normalizeDateInputSelectionModes(\n\tvalue: unknown,\n\tfallbackModes: readonly DateInputSelectionMode[] = DATE_INPUT_SELECTION_MODES\n): DateInputSelectionMode[] {\n\treturn normalizePresetIds(value, isDateInputSelectionMode, fallbackModes);\n}\n\n/**\n * Формирует упорядоченный список описаний по сохранённым режимам выбора.\n */\nexport function resolveDateInputSelectionModeOptionsByModes(\n\tmodes: readonly DateInputSelectionMode[],\n\toptions: readonly DateInputSelectionModeOption[] = DATE_INPUT_SELECTION_MODE_OPTIONS\n): DateInputSelectionModeOption[] {\n\treturn resolvePresetOptionsByIds(modes, options);\n}\n","import {\n\tDEFAULT_DATE_PRESET_NAMES,\n\tformatDate,\n\tformatDateRange,\n\tgetCalendarPeriod,\n\tgetDatePreset,\n\tisDateRangeTuple,\n\tparseDateByFormat,\n\tresolveDateFormatName,\n\ttype CalendarPeriodOptions,\n\ttype DateFormatPrecision,\n\ttype DateRangeInput,\n\ttype NullableDateRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/**\n * Пресет даты по умолчанию для текстового поля.\n */\nexport const DEFAULT_DATE_INPUT_PRESET = DEFAULT_DATE_PRESET_NAMES.date;\n\n/**\n * @deprecated Используйте `DEFAULT_DATE_INPUT_PRESET`.\n */\nexport const DEFAULT_DATE_INPUT_FORMAT = \"dd.MM.yyyy\";\n\nconst RANGE_SEPARATOR = \" - \";\n\nexport type DateInputValueOptions = {\n\t/**\n\t * Имя пресета форматирования даты.\n\t */\n\tdatePreset?: string;\n\t/**\n\t * Точность календарного значения.\n\t */\n\tdatePickerLevel?: DateFormatPrecision;\n\t/**\n\t * Размер периода, который выбирается и нормализуется полем.\n\t */\n\tselectionMode?: CalendarPeriodOptions[\"selectionMode\"];\n\t/**\n\t * Последний включённый день недели для режима выбора недели.\n\t */\n\tweekEndDay?: CalendarPeriodOptions[\"weekEndDay\"];\n\t/**\n\t * Опорная дата для пресетов без года, например `month-long`.\n\t */\n\treferenceDate?: Date;\n};\n\nexport type DateInputValueOptionsInput = string | DateInputValueOptions | undefined;\n\n/**\n * Возвращает точность форматирования поля даты.\n */\nfunction resolveDateInputPrecision(options: DateInputValueOptions): DateFormatPrecision {\n\tif (options.selectionMode === \"day\" || options.selectionMode === \"week\") {\n\t\treturn \"day\";\n\t}\n\n\tif (options.selectionMode === \"month\" || options.selectionMode === \"year\") {\n\t\treturn options.selectionMode;\n\t}\n\n\treturn options.datePickerLevel ?? \"day\";\n}\n\nfunction resolveCalendarPeriodOptions(options?: DateInputValueOptions): CalendarPeriodOptions {\n\treturn {\n\t\tselectionMode: options?.selectionMode,\n\t\tweekEndDay: options?.weekEndDay\n\t};\n}\n\n/**\n * Нормализует объектные опции и позиционный вызов с именем пресета.\n */\nfunction normalizeDateInputValueOptions(\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): DateInputValueOptions {\n\tif (typeof optionsOrPreset === \"string\" || optionsOrPreset === undefined) {\n\t\treturn {\n\t\t\tdatePreset: optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\tif (datePickerLevel && optionsOrPreset.datePickerLevel === undefined) {\n\t\treturn {\n\t\t\t...optionsOrPreset,\n\t\t\tdatePickerLevel\n\t\t};\n\t}\n\n\treturn optionsOrPreset;\n}\n\n/**\n * Проверяет новый `datePreset` и возвращает только зарегистрированное имя пресета.\n */\nfunction resolveDateInputPresetName(datePreset?: string): string {\n\tconst resolvedPresetName = resolveDateFormatName(datePreset, DEFAULT_DATE_INPUT_PRESET);\n\treturn getDatePreset(resolvedPresetName) ? resolvedPresetName : DEFAULT_DATE_INPUT_PRESET;\n}\n\n/**\n * Приводит результат универсального парсинга к календарной дате.\n */\nfunction parseDateTimeValue(value: string, options: DateInputValueOptions): Date | null {\n\treturn (\n\t\tparseDateByFormat(value, resolveDateInputPresetName(options.datePreset), {\n\t\t\tdefaultFormat: DEFAULT_DATE_INPUT_PRESET,\n\t\t\tprecision: resolveDateInputPrecision(options),\n\t\t\treferenceDate: options.referenceDate\n\t\t})?.date ?? null\n\t);\n}\n\n/**\n * Приводит одиночную дату к началу выбранного календарного периода.\n */\nexport function normalizeSingleDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.start ?? null;\n}\n\n/**\n * Приводит диапазон дат к границам выбранных календарных периодов.\n */\nexport function normalizeRangeDateValue(range: NullableDateRange | null, options?: DateInputValueOptions): NullableDateRange | null {\n\tif (!isDateRangeTuple(range)) return null;\n\n\tconst [startDate, endDate] = range;\n\treturn [normalizeSingleDateValue(startDate, options), normalizeRangeEndDateValue(endDate, options)];\n}\n\n/**\n * Приводит конечную дату диапазона к концу выбранного календарного периода.\n */\nexport function normalizeRangeEndDateValue(date: Date | null, options?: DateInputValueOptions): Date | null {\n\treturn getCalendarPeriod(date, resolveCalendarPeriodOptions(options))?.end ?? null;\n}\n\nfunction getDateTime(date: Date | null): number | null {\n\treturn date?.getTime() ?? null;\n}\n\n/**\n * Сравнивает одиночные даты после нормализации к точности поля ввода.\n */\nexport function areSingleDateValuesEqual(left: Date | null, right: Date | null, options?: DateInputValueOptions): boolean {\n\treturn getDateTime(normalizeSingleDateValue(left, options)) === getDateTime(normalizeSingleDateValue(right, options));\n}\n\n/**\n * Сравнивает диапазоны дат после нормализации к границам выбранных периодов.\n */\nexport function areRangeDateValuesEqual(\n\tleft: NullableDateRange | null,\n\tright: NullableDateRange | null,\n\toptions?: DateInputValueOptions\n): boolean {\n\tconst normalizedLeft = normalizeRangeDateValue(left, options);\n\tconst normalizedRight = normalizeRangeDateValue(right, options);\n\n\treturn (\n\t\tgetDateTime(normalizedLeft?.[0] ?? null) === getDateTime(normalizedRight?.[0] ?? null) &&\n\t\tgetDateTime(normalizedLeft?.[1] ?? null) === getDateTime(normalizedRight?.[1] ?? null)\n\t);\n}\n\n/**\n * Форматирует одиночную дату для текстового поля.\n */\nexport function formatSingleDateValue(\n\tdate: Date | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!date) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst period = getCalendarPeriod(date, resolveCalendarPeriodOptions(options));\n\n\t// Single-поле хранит начало недели, но показывает обе включительные границы выбранного периода.\n\tif (options.selectionMode === \"week\" && period) {\n\t\treturn formatDateRange(period.start, period.end, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\treturn formatDate(date, resolveDateInputPresetName(options.datePreset), {\n\t\tprecision: resolveDateInputPrecision(options)\n\t});\n}\n\n/**\n * Форматирует диапазон дат для текстового поля.\n */\nexport function formatRangeDateValue(\n\trange: NullableDateRange | null,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (!isDateRangeTuple(range)) return \"\";\n\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startDate, endDate] = range;\n\tif (startDate && endDate) {\n\t\treturn formatDateRange(startDate, endDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t});\n\t}\n\n\tif (startDate) {\n\t\treturn `${formatDate(startDate, resolveDateInputPresetName(options.datePreset), {\n\t\t\tprecision: resolveDateInputPrecision(options)\n\t\t})}${RANGE_SEPARATOR}`;\n\t}\n\n\treturn \"\";\n}\n\n/**\n * Унифицирует форматирование значения поля даты.\n */\nexport function formatDateInputValue(\n\tvalue: DateRangeInput,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): string {\n\tif (isDateRangeTuple(value)) {\n\t\treturn formatRangeDateValue(value, optionsOrPreset, datePickerLevel);\n\t}\n\n\treturn formatSingleDateValue(value, optionsOrPreset, datePickerLevel);\n}\n\n/**\n * Парсит строку одиночной даты по заданному пресету.\n */\nexport function parseSingleDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\t// Для отображаемого диапазона single-week источником значения остаётся его первая граница.\n\tconst singleValue = options.selectionMode === \"week\" ? (value.split(RANGE_SEPARATOR)[0] ?? \"\") : value;\n\n\treturn normalizeSingleDateValue(parseDateTimeValue(singleValue, options), options);\n}\n\n/**\n * Парсит строку диапазона дат по заданному пресету.\n */\nexport function parseRangeDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): NullableDateRange {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\tconst [startPart = \"\", endPart = \"\"] = value.split(RANGE_SEPARATOR);\n\n\treturn [parseSingleDateValue(startPart, options), parseRangeEndDateValue(endPart, options)];\n}\n\n/**\n * Парсит конечную дату диапазона и нормализует её к концу суток.\n */\nexport function parseRangeEndDateValue(\n\tvalue: string,\n\toptionsOrPreset?: DateInputValueOptionsInput,\n\tdatePickerLevel?: DateFormatPrecision\n): Date | null {\n\tconst options = normalizeDateInputValueOptions(optionsOrPreset, datePickerLevel);\n\treturn normalizeRangeEndDateValue(parseDateTimeValue(value, options), options);\n}\n","import { useMemo, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\nimport {\n\tDateInputValueOptions,\n\tformatDateInputValue,\n\tnormalizeRangeDateValue,\n\tnormalizeRangeEndDateValue,\n\tnormalizeSingleDateValue,\n\tparseRangeDateValue,\n\tparseSingleDateValue,\n\ttype DateInputOptions\n} from \"../lib\";\n\nfunction resolveReferenceDate(value: Date | NullableDateRange | null): Date | undefined {\n\tif (isDateRangeTuple(value)) {\n\t\treturn value[0] ?? value[1] ?? undefined;\n\t}\n\n\treturn value ?? undefined;\n}\n\n/**\n * Хук управляет текстовым представлением и выбранным значением поля даты.\n */\nexport const useDateInput = (options: DateInputOptions) => {\n\tconst externalSelectedDate = useMemo(() => {\n\t\tconst selectionOptions: DateInputValueOptions = {\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn normalizeRangeDateValue(options.value as NullableDateRange | null, selectionOptions);\n\t\t}\n\n\t\treturn normalizeSingleDateValue(options.value as Date | null, selectionOptions);\n\t}, [options.selectsRange, options.selectionMode, options.value, options.weekEndDay]);\n\tconst formatOptions = useMemo<DateInputValueOptions>(\n\t\t() => ({\n\t\t\tdatePreset: options.datePreset,\n\t\t\tdatePickerLevel: options.datePickerLevel,\n\t\t\tselectionMode: options.selectionMode,\n\t\t\tweekEndDay: options.weekEndDay\n\t\t}),\n\t\t[options.datePickerLevel, options.datePreset, options.selectionMode, options.weekEndDay]\n\t);\n\tconst externalInputValue = formatDateInputValue(externalSelectedDate, formatOptions);\n\tconst externalStateSignature = JSON.stringify([\n\t\toptions.selectsRange,\n\t\toptions.datePreset ?? null,\n\t\toptions.datePickerLevel ?? null,\n\t\toptions.selectionMode ?? null,\n\t\toptions.weekEndDay ?? null,\n\t\tisDateRangeTuple(externalSelectedDate)\n\t\t\t? [externalSelectedDate[0]?.getTime() ?? null, externalSelectedDate[1]?.getTime() ?? null]\n\t\t\t: (externalSelectedDate?.getTime() ?? null)\n\t]);\n\tconst [draftState, setDraftState] = useState(() => ({\n\t\tsourceSignature: externalStateSignature,\n\t\tselectedDate: externalSelectedDate,\n\t\tinputValue: externalInputValue\n\t}));\n\tconst hasCurrentDraft = draftState.sourceSignature === externalStateSignature;\n\tconst selectedDate = hasCurrentDraft ? draftState.selectedDate : externalSelectedDate;\n\tconst inputValue = hasCurrentDraft ? draftState.inputValue : externalInputValue;\n\n\t/**\n\t * Сохраняет пользовательский текст только относительно текущего controlled-снимка.\n\t * При внешней смене value или формата отображение сразу выводится из новых props.\n\t */\n\tconst setInputValue = (nextInputValue: string) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentSelectedDate =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.selectedDate : externalSelectedDate;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: currentSelectedDate,\n\t\t\t\tinputValue: nextInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Обновляет локальный незавершённый выбор, не зеркаля controlled value через effect.\n\t */\n\tconst setSelectedDate = (nextSelectedDate: Date | NullableDateRange | null) => {\n\t\tsetDraftState((currentState) => {\n\t\t\tconst currentInputValue =\n\t\t\t\tcurrentState.sourceSignature === externalStateSignature ? currentState.inputValue : externalInputValue;\n\n\t\t\treturn {\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextSelectedDate,\n\t\t\t\tinputValue: currentInputValue\n\t\t\t};\n\t\t});\n\t};\n\n\t/**\n\t * Форматирует значение поля даты согласно текущему пресету.\n\t */\n\tconst formatValue = (value: Date | NullableDateRange | null): string => formatDateInputValue(value, formatOptions);\n\n\t/**\n\t * Парсит строковое значение поля в дату или диапазон дат.\n\t */\n\tconst parseDate = (dateString: string): Date | NullableDateRange | null => {\n\t\tconst parseOptions: DateInputValueOptions = {\n\t\t\t...formatOptions,\n\t\t\treferenceDate: resolveReferenceDate(selectedDate)\n\t\t};\n\n\t\tif (options.selectsRange) {\n\t\t\treturn parseRangeDateValue(dateString, parseOptions);\n\t\t}\n\n\t\treturn parseSingleDateValue(dateString, parseOptions);\n\t};\n\n\t/**\n\t * Обрабатывает выбор даты из календаря.\n\t */\n\tconst handleSelect = (date: Date | NullableDateRange) => {\n\t\tconst [selectedStartDate, selectedEndDate] = (Array.isArray(date) ? date : [date, null]) as NullableDateRange;\n\n\t\tif (options.selectsRange) {\n\t\t\tconst normalizedStartDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\t\tconst normalizedEndDate = normalizeRangeEndDateValue(selectedEndDate, formatOptions);\n\n\t\t\tif (normalizedStartDate && normalizedEndDate) {\n\t\t\t\tif (normalizedEndDate < normalizedStartDate) {\n\t\t\t\t\tconst swappedRange: NullableDateRange = [\n\t\t\t\t\t\tnormalizeSingleDateValue(selectedEndDate, formatOptions),\n\t\t\t\t\t\tnormalizeRangeEndDateValue(selectedStartDate, formatOptions)\n\t\t\t\t\t];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: swappedRange,\n\t\t\t\t\t\tinputValue: formatValue(swappedRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(swappedRange);\n\t\t\t\t} else {\n\t\t\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, normalizedEndDate];\n\t\t\t\t\tsetDraftState({\n\t\t\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\t\t\tselectedDate: nextRange,\n\t\t\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t\t\t});\n\t\t\t\t\toptions.onChange(nextRange);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst nextRange: NullableDateRange = [normalizedStartDate, null];\n\t\t\tsetDraftState({\n\t\t\t\tsourceSignature: externalStateSignature,\n\t\t\t\tselectedDate: nextRange,\n\t\t\t\tinputValue: formatValue(nextRange)\n\t\t\t});\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedDate = normalizeSingleDateValue(selectedStartDate, formatOptions);\n\t\tsetDraftState({\n\t\t\tsourceSignature: externalStateSignature,\n\t\t\tselectedDate: normalizedDate,\n\t\t\tinputValue: formatValue(normalizedDate)\n\t\t});\n\t\toptions.onChange(normalizedDate);\n\n\t\treturn true;\n\t};\n\n\treturn {\n\t\tinputValue,\n\t\tsetInputValue,\n\t\tselectedDate,\n\t\tsetSelectedDate,\n\t\thandleSelect,\n\t\tformatDate: formatValue,\n\t\tparseDate\n\t};\n};\n",".selectionModeControl {\n\tmargin-top: var(--space-sm);\n\tpadding-top: var(--space-sm);\n\tborder-top: var(--border);\n}\n","import { JSX, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { isDateRangeTuple, type NullableDateRange } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { CalendarDaysIcon } from \"lucide-react\";\n\nimport { InputText } from \"../../input\";\nimport { Popover } from \"../../popover\";\nimport { RadioGroup } from \"../../radio-group\";\nimport { UiBaseProps } from \"../../types\";\nimport uiStyles from \"../../ui.module.scss\";\nimport {\n\tareRangeDateValuesEqual,\n\tareSingleDateValuesEqual,\n\tDATE_INPUT_SELECTION_MODES,\n\tisDatePickerLevelAvailable,\n\tnormalizeDateInputSelectionModes,\n\tresolveAvailableDatePickerLevel,\n\tresolveDateInputSelectionModeOptionsByModes,\n\ttype DateInputSelectionMode,\n\ttype DateInputSelectionModeDatePresets,\n\ttype DateInputSelectionModeOption,\n\ttype DateInputWeekEndDay,\n\ttype DatePickerLevel\n} from \"../lib\";\nimport { useDateInput } from \"../model\";\n\nimport { CalendarView } from \"./CalendarView\";\nimport styles from \"./DateInput.module.scss\";\n\ninterface BaseDateInputProps {\n\terror?: string;\n\tonClearError?: () => void;\n\n\tminDate?: Date;\n\tmaxDate?: Date;\n\n\tdatePreset?: string;\n\n\t/**\n\t * Минимальный уровень календарной навигации. Размер выбранного периода задаёт `selectionMode`.\n\t */\n\tdatePickerLevel?: DatePickerLevel;\n\t/**\n\t * Размер периода, который выбирает поле: день, неделя, месяц или год.\n\t */\n\tselectionMode?: DateInputSelectionMode;\n\t/**\n\t * Последний включённый день недели для `selectionMode=\"week\"`.\n\t */\n\tweekEndDay?: DateInputWeekEndDay;\n\t/**\n\t * Показывает переключатель `selectionMode` под календарём.\n\t */\n\tallowSelectionModeChange?: boolean;\n\t/**\n\t * Ограничивает набор режимов в runtime-переключателе.\n\t */\n\tselectionModeOptions?: readonly DateInputSelectionMode[];\n\t/**\n\t * Задаёт отдельный пресет форматирования для каждого runtime-режима выбора.\n\t * Общий `datePreset` используется как fallback для отсутствующих значений.\n\t */\n\tselectionModeDatePresets?: DateInputSelectionModeDatePresets;\n\t/**\n\t * Сообщает наружу о runtime-смене режима выбора.\n\t */\n\tonSelectionModeChange?: (selectionMode: DateInputSelectionMode) => void;\n}\n\nexport interface DateSingleInputProps extends BaseDateInputProps, UiBaseProps<Date | null> {\n\tselectsRange?: false;\n}\nexport interface DateRangeInputProps extends BaseDateInputProps, UiBaseProps<NullableDateRange | null> {\n\tselectsRange: true;\n}\n\ntype DateInputProps = DateSingleInputProps | DateRangeInputProps;\n\ninterface CalendarTypeState {\n\treadonly view: DatePickerLevel;\n\treadonly selectionMode: DateInputSelectionMode;\n\treadonly minDatePickerLevel: DatePickerLevel;\n}\n\nfunction resolveSelectionModeOptions(\n\tselectionModeOptions: readonly DateInputSelectionMode[] | undefined,\n\tselectionMode: DateInputSelectionMode\n): readonly DateInputSelectionModeOption[] {\n\tconst configuredModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst availableModes = configuredModes.includes(selectionMode) ? configuredModes : [...configuredModes, selectionMode];\n\n\treturn resolveDateInputSelectionModeOptionsByModes(availableModes);\n}\n\nfunction DateInput(props: DateSingleInputProps): JSX.Element;\nfunction DateInput(props: DateRangeInputProps): JSX.Element;\nfunction DateInput({\n\tplaceholder,\n\tdisabled,\n\terror,\n\tonClearError,\n\tminDate,\n\tmaxDate,\n\tdatePreset,\n\tdatePickerLevel,\n\tselectionMode: controlledSelectionMode,\n\tweekEndDay = \"sunday\",\n\tallowSelectionModeChange,\n\tselectionModeOptions,\n\tselectionModeDatePresets,\n\tonSelectionModeChange,\n\t...props\n}: DateInputProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst configuredSelectionModes = normalizeDateInputSelectionModes(selectionModeOptions, DATE_INPUT_SELECTION_MODES);\n\tconst [uncontrolledSelectionMode, setUncontrolledSelectionMode] = useState<DateInputSelectionMode>(\n\t\t() => controlledSelectionMode ?? configuredSelectionModes[0] ?? \"day\"\n\t);\n\tconst selectionMode = controlledSelectionMode ?? uncontrolledSelectionMode;\n\tconst activeDatePreset = allowSelectionModeChange ? (selectionModeDatePresets?.[selectionMode] ?? datePreset) : datePreset;\n\tconst minDatePickerLevel = datePickerLevel ?? \"day\";\n\tconst preferredCalendarType = resolveAvailableDatePickerLevel(selectionMode, minDatePickerLevel);\n\tconst [calendarTypeState, setCalendarTypeState] = useState<CalendarTypeState>(() => ({\n\t\tview: preferredCalendarType,\n\t\tselectionMode,\n\t\tminDatePickerLevel\n\t}));\n\tconst calendarType =\n\t\tcalendarTypeState.selectionMode === selectionMode &&\n\t\tcalendarTypeState.minDatePickerLevel === minDatePickerLevel &&\n\t\tisDatePickerLevelAvailable(calendarTypeState.view, minDatePickerLevel)\n\t\t\t? calendarTypeState.view\n\t\t\t: preferredCalendarType;\n\n\tconst initialDateRef = useRef(props.value);\n\tconst dateInputValueOptions = {\n\t\tselectionMode,\n\t\tweekEndDay\n\t};\n\n\tconst { inputValue, setInputValue, selectedDate, setSelectedDate, handleSelect, formatDate, parseDate } = useDateInput({\n\t\t...props,\n\t\tdatePreset: activeDatePreset,\n\t\tdatePickerLevel: minDatePickerLevel,\n\t\tselectionMode,\n\t\tweekEndDay\n\t});\n\tconst rangeOnChange = props.selectsRange ? props.onChange : undefined;\n\n\tconst updateCalendarType = useCallback(\n\t\t(calendarType: DatePickerLevel) => {\n\t\t\tif (isDatePickerLevelAvailable(calendarType, minDatePickerLevel)) {\n\t\t\t\tsetCalendarTypeState({\n\t\t\t\t\tview: calendarType,\n\t\t\t\t\tselectionMode,\n\t\t\t\t\tminDatePickerLevel\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[minDatePickerLevel, selectionMode]\n\t);\n\n\tuseEffect(() => {\n\t\tinitialDateRef.current = props.value;\n\t}, [props.value]);\n\n\tconst handleInputBlur = () => {\n\t\tif (inputValue) {\n\t\t\tconst parsedDate = parseDate(inputValue);\n\t\t\tif (parsedDate) {\n\t\t\t\tsetInputValue(formatDate(parsedDate));\n\n\t\t\t\tif (props.selectsRange && isDateRangeTuple(parsedDate)) {\n\t\t\t\t\tconst selectedRange = isDateRangeTuple(selectedDate) ? selectedDate : null;\n\n\t\t\t\t\tif (areRangeDateValuesEqual(parsedDate, selectedRange, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t} else if (!props.selectsRange && parsedDate instanceof Date) {\n\t\t\t\t\tconst selectedSingleDate = selectedDate instanceof Date ? selectedDate : null;\n\n\t\t\t\t\tif (areSingleDateValuesEqual(parsedDate, selectedSingleDate, dateInputValueOptions)) return;\n\n\t\t\t\t\tsetSelectedDate(parsedDate);\n\t\t\t\t\tprops.onChange(parsedDate);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n\t\tif (event.key === \"Enter\") {\n\t\t\tevent.preventDefault();\n\t\t\thandleInputBlur();\n\t\t}\n\t};\n\n\tconst handleCalendarDateSelect = useCallback(\n\t\t(value: Date | NullableDateRange) => {\n\t\t\tif (handleSelect(value)) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[handleSelect]\n\t);\n\n\tconst handleSelectionModeChange = useCallback(\n\t\t(nextSelectionMode: DateInputSelectionMode) => {\n\t\t\tif (controlledSelectionMode === undefined) {\n\t\t\t\tsetUncontrolledSelectionMode(nextSelectionMode);\n\t\t\t}\n\n\t\t\tonSelectionModeChange?.(nextSelectionMode);\n\t\t\tsetCalendarTypeState({\n\t\t\t\tview: resolveAvailableDatePickerLevel(nextSelectionMode, minDatePickerLevel),\n\t\t\t\tselectionMode: nextSelectionMode,\n\t\t\t\tminDatePickerLevel\n\t\t\t});\n\t\t},\n\t\t[controlledSelectionMode, minDatePickerLevel, onSelectionModeChange]\n\t);\n\n\tconst handleCancel = useCallback(() => {\n\t\t// Восстановить исходное состояние при отмене\n\t\tif (rangeOnChange) {\n\t\t\tconst [, selectedEndDate] = isDateRangeTuple(selectedDate) ? selectedDate : [null, null];\n\n\t\t\tif (!selectedEndDate) {\n\t\t\t\t// Восстановить исходное состояние диапазона\n\t\t\t\tconst initialValue = initialDateRef.current;\n\t\t\t\tconst initialRange = Array.isArray(initialValue) ? initialValue : null;\n\t\t\t\tconst initialStart = initialRange?.[0] ?? null;\n\t\t\t\tconst initialEnd = initialRange?.[1] ?? null;\n\n\t\t\t\tif (initialStart && initialEnd) {\n\t\t\t\t\tconst initialSelectedDate: NullableDateRange = [initialStart, initialEnd];\n\t\t\t\t\tsetSelectedDate(initialSelectedDate);\n\t\t\t\t\tsetInputValue(formatDate(initialSelectedDate));\n\n\t\t\t\t\trangeOnChange(initialSelectedDate);\n\t\t\t\t} else {\n\t\t\t\t\t// Если начального диапазона нет, очистить всё\n\t\t\t\t\tsetSelectedDate([null, null]);\n\t\t\t\t\tsetInputValue(\"\");\n\n\t\t\t\t\trangeOnChange([null, null]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [rangeOnChange, selectedDate, setSelectedDate, setInputValue, formatDate]);\n\n\tconst availableSelectionModeOptions = resolveSelectionModeOptions(selectionModeOptions, selectionMode);\n\tconst showSelectionModeControl = allowSelectionModeChange && availableSelectionModeOptions.length > 1;\n\n\treturn (\n\t\t<Popover\n\t\t\topen={open}\n\t\t\tonOpenChange={(value) => {\n\t\t\t\tsetOpen(value);\n\t\t\t\tif (!value) {\n\t\t\t\t\thandleCancel();\n\t\t\t\t}\n\t\t\t}}>\n\t\t\t<InputText\n\t\t\t\tlabel={props.label}\n\t\t\t\tdescription={props.description}\n\t\t\t\tsize={props.size}\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={setInputValue}\n\t\t\t\tonBlur={handleInputBlur}\n\t\t\t\tonKeyUp={handleKeyDown}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tonClearError={onClearError}\n\t\t\t\tendAdornmentWidth=\"var(--control-height)\"\n\t\t\t\tendAdornment={\n\t\t\t\t\t<div className={uiStyles.uiToggleButtonContainer}>\n\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\taria-label=\"Открыть календарь\"\n\t\t\t\t\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\t\t\t\t\tclassName={uiStyles.uiToggleButton}>\n\t\t\t\t\t\t\t\t<CalendarDaysIcon />\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t/>\n\n\t\t\t<Popover.Content background=\"primary\" role=\"dialog\" aria-label={props.selectsRange ? \"Выбор диапазона дат\" : \"Выбор даты\"}>\n\t\t\t\t<CalendarView\n\t\t\t\t\tview={calendarType}\n\t\t\t\t\tdatePickerLevel={minDatePickerLevel}\n\t\t\t\t\tselectionMode={selectionMode}\n\t\t\t\t\tweekEndDay={weekEndDay}\n\t\t\t\t\tonViewChange={updateCalendarType}\n\t\t\t\t\tvalue={selectedDate ?? null}\n\t\t\t\t\tonChange={handleCalendarDateSelect}\n\t\t\t\t\tminDate={minDate}\n\t\t\t\t\tmaxDate={maxDate}\n\t\t\t\t\tselectsRange={!!props.selectsRange}\n\t\t\t\t/>\n\t\t\t\t{showSelectionModeControl && (\n\t\t\t\t\t<div className={styles.selectionModeControl}>\n\t\t\t\t\t\t<RadioGroup<DateInputSelectionMode>\n\t\t\t\t\t\t\tvalue={selectionMode}\n\t\t\t\t\t\t\tonChange={handleSelectionModeChange}\n\t\t\t\t\t\t\tnoWrap\n\t\t\t\t\t\t\taria-label=\"Режим выбора даты\">\n\t\t\t\t\t\t\t{availableSelectionModeOptions.map((option) => (\n\t\t\t\t\t\t\t\t<RadioGroup.Option key={option.id} value={option.id} label={option.label} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</RadioGroup>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</Popover.Content>\n\t\t</Popover>\n\t);\n}\n\nexport function SingleDateInput(props: Omit<DateSingleInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} />;\n}\n\nexport function RangeDateInput(props: Omit<DateRangeInputProps, \"selectsRange\">) {\n\treturn <DateInput {...props} selectsRange={true} />;\n}\n"],"mappings":"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"}
|
package/dist/chunks/{date-range-preset-select-BLnY47cv.js → date-range-preset-select-CyzGMvVp.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PresetSelect as e } from "../preset-select/index.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect as n, useEffectEvent as r, useRef as i, useState as a } from "react";
|
|
4
4
|
import { resolveMonthAgoRange as o, resolveMonthStartToTodayRange as s, resolveMonthStartToYesterdayRange as c, resolveTodayRange as l, resolveYesterdayRange as u } from "@ryuzaki13/react-foundation-lib/formatters";
|
|
5
5
|
import { getPresetOption as d, normalizePresetIds as f, resolvePresetOptionsByIds as p } from "@ryuzaki13/react-foundation-lib/presets";
|
|
6
6
|
//#region src/date-range-preset-select/lib/dateRangePresets.ts
|
|
@@ -80,19 +80,19 @@ function w(e) {
|
|
|
80
80
|
].join("|");
|
|
81
81
|
}
|
|
82
82
|
function T({ value: o, onChange: s, options: c = b, referenceDate: l, onRangeChange: u, ...d }) {
|
|
83
|
-
let [f] =
|
|
83
|
+
let [f] = a(() => /* @__PURE__ */ new Date()), p = l?.getTime() ?? f.getTime(), m = !!u, h = i(""), g = r((e) => {
|
|
84
84
|
if (!u) return;
|
|
85
85
|
let t = S(e, new Date(p), c), n = w(t);
|
|
86
86
|
n !== h.current && (h.current = n, u(t));
|
|
87
87
|
});
|
|
88
|
-
return
|
|
88
|
+
return n(() => {
|
|
89
89
|
g(o);
|
|
90
90
|
}, [
|
|
91
91
|
m,
|
|
92
92
|
c,
|
|
93
93
|
p,
|
|
94
94
|
o
|
|
95
|
-
]), /* @__PURE__ */
|
|
95
|
+
]), /* @__PURE__ */ t(e, {
|
|
96
96
|
...d,
|
|
97
97
|
options: c,
|
|
98
98
|
value: o,
|
|
@@ -102,4 +102,4 @@ function T({ value: o, onChange: s, options: c = b, referenceDate: l, onRangeCha
|
|
|
102
102
|
//#endregion
|
|
103
103
|
export { x as a, C as c, b as i, y as l, m as n, _ as o, h as r, v as s, T as t, S as u };
|
|
104
104
|
|
|
105
|
-
//# sourceMappingURL=date-range-preset-select-
|
|
105
|
+
//# sourceMappingURL=date-range-preset-select-CyzGMvVp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-range-preset-select-
|
|
1
|
+
{"version":3,"file":"date-range-preset-select-CyzGMvVp.js","names":[],"sources":["../../src/date-range-preset-select/lib/dateRangePresets.ts","../../src/date-range-preset-select/DateRangePresetSelect.tsx"],"sourcesContent":["import {\n\ttype DateRangeReferenceContext,\n\ttype NullableDateRange,\n\tresolveMonthAgoRange,\n\tresolveMonthStartToTodayRange,\n\tresolveMonthStartToYesterdayRange,\n\tresolveTodayRange,\n\tresolveYesterdayRange\n} from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { getPresetOption, normalizePresetIds, type PresetOption, resolvePresetOptionsByIds } from \"@ryuzaki13/react-foundation-lib/presets\";\n\n/**\n * Идентификаторы встроенных пресетов диапазона дат.\n */\nexport type DateRangePresetId = \"monthStartToYesterday\" | \"monthStartToToday\" | \"today\" | \"yesterday\" | \"monthAgo\";\n\n/**\n * Описание одного пресета диапазона дат.\n */\nexport interface DateRangePresetOption extends PresetOption<DateRangePresetId | (string & {})> {\n\tresolveRange: (context: DateRangeReferenceContext) => NullableDateRange;\n}\n\ntype BuiltInDateRangePresetOption = DateRangePresetOption & {\n\tid: DateRangePresetId;\n};\n\n/**\n * Полезная нагрузка события с вычисленным диапазоном.\n */\nexport interface DateRangePresetChangePayload {\n\tid: DateRangePresetOption[\"id\"];\n\tlabel: string;\n\trange: NullableDateRange;\n}\n\n/**\n * Полный встроенный список пресетов диапазона дат.\n */\nexport const DATE_RANGE_PRESET_OPTIONS: readonly BuiltInDateRangePresetOption[] = Object.freeze([\n\t{\n\t\tid: \"monthStartToYesterday\",\n\t\tlabel: \"С начала месяца по вчера\",\n\t\tresolveRange: resolveMonthStartToYesterdayRange\n\t},\n\t{\n\t\tid: \"monthStartToToday\",\n\t\tlabel: \"С начала месяца по сегодня\",\n\t\tresolveRange: resolveMonthStartToTodayRange\n\t},\n\t{\n\t\tid: \"today\",\n\t\tlabel: \"За сегодня\",\n\t\tresolveRange: resolveTodayRange\n\t},\n\t{\n\t\tid: \"yesterday\",\n\t\tlabel: \"За вчера\",\n\t\tresolveRange: resolveYesterdayRange\n\t},\n\t{\n\t\tid: \"monthAgo\",\n\t\tlabel: \"Месяц назад\",\n\t\tresolveRange: resolveMonthAgoRange\n\t}\n]);\n\n/**\n * Идентификаторы пресетов, которые включены в контрол по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_IDS = Object.freeze([\n\t\"monthStartToYesterday\",\n\t\"monthStartToToday\",\n\t\"today\",\n\t\"yesterday\"\n] as const satisfies readonly DateRangePresetId[]);\n\nconst DATE_RANGE_PRESET_ID_SET: ReadonlySet<string> = new Set(DATE_RANGE_PRESET_OPTIONS.map((option) => option.id));\n\n/**\n * Проверяет, что значение является идентификатором встроенного пресета.\n */\nexport function isDateRangePresetId(value: unknown): value is DateRangePresetId {\n\treturn typeof value === \"string\" && DATE_RANGE_PRESET_ID_SET.has(value);\n}\n\n/**\n * Нормализует сохраненный список идентификаторов пресетов.\n */\nexport function normalizeDateRangePresetIds(value: unknown, fallbackIds: readonly DateRangePresetId[] = []): DateRangePresetId[] {\n\treturn normalizePresetIds(value, isDateRangePresetId, fallbackIds);\n}\n\n/**\n * Формирует список пресетов по сохраненным идентификаторам, сохраняя порядок.\n */\nexport function resolveDateRangePresetOptionsByIds(\n\tpresetIds: readonly DateRangePresetOption[\"id\"][],\n\toptions: readonly DateRangePresetOption[] = DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[] {\n\treturn resolvePresetOptionsByIds(presetIds, options);\n}\n\n/**\n * Встроенный список пресетов диапазона дат, включенный по умолчанию.\n */\nexport const DEFAULT_DATE_RANGE_PRESET_OPTIONS: readonly DateRangePresetOption[] = Object.freeze(\n\tresolveDateRangePresetOptionsByIds(DEFAULT_DATE_RANGE_PRESET_IDS)\n);\n\n/**\n * Ищет пресет по идентификатору.\n */\nexport function getDateRangePresetOption(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption | null {\n\treturn getPresetOption(id, options);\n}\n\n/**\n * Вычисляет диапазон по идентификатору пресета.\n */\nexport function resolveDateRangePresetPayload(\n\tid: DateRangePresetOption[\"id\"] | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetChangePayload | null {\n\tconst option = getDateRangePresetOption(id, options);\n\tif (!option) return null;\n\n\treturn {\n\t\tid: option.id,\n\t\tlabel: option.label,\n\t\trange: option.resolveRange({ referenceDate })\n\t};\n}\n\n/**\n * Ищет идентификатор пресета, который полностью совпадает с переданным диапазоном.\n */\nexport function resolveDateRangePresetIdByRange(\n\trange: NullableDateRange | null | undefined,\n\treferenceDate = new Date(),\n\toptions: readonly DateRangePresetOption[] = DEFAULT_DATE_RANGE_PRESET_OPTIONS\n): DateRangePresetOption[\"id\"] | null {\n\tif (!Array.isArray(range)) return null;\n\n\tconst [rangeStartDate, rangeEndDate] = range;\n\tif (!(rangeStartDate instanceof Date) || !(rangeEndDate instanceof Date)) return null;\n\n\tconst rangeStartTime = rangeStartDate.getTime();\n\tconst rangeEndTime = rangeEndDate.getTime();\n\n\tfor (const option of options) {\n\t\tconst [presetStartDate, presetEndDate] = option.resolveRange({ referenceDate });\n\t\tif (!(presetStartDate instanceof Date) || !(presetEndDate instanceof Date)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (presetStartDate.getTime() === rangeStartTime && presetEndDate.getTime() === rangeEndTime) {\n\t\t\treturn option.id;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { useEffect, useEffectEvent, useRef, useState } from \"react\";\n\nimport { PresetSelect } from \"../preset-select\";\n\nimport {\n\tDEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\ttype DateRangePresetChangePayload,\n\ttype DateRangePresetOption,\n\tresolveDateRangePresetPayload\n} from \"./lib/dateRangePresets\";\n\nimport type { UiBaseProps } from \"../types\";\n\nexport interface DateRangePresetSelectProps extends UiBaseProps<DateRangePresetOption[\"id\"] | undefined> {\n\toptions?: readonly DateRangePresetOption[];\n\treferenceDate?: Date;\n\tonRangeChange?: (payload: DateRangePresetChangePayload | null) => void;\n}\n\n/**\n * Строит строковый ключ полезной нагрузки для защиты от повторного эмита одинакового диапазона.\n */\nfunction getPayloadSignature(payload: DateRangePresetChangePayload | null): string {\n\tif (!payload) return \"__empty__\";\n\n\tconst [startDate, endDate] = payload.range;\n\treturn [payload.id, startDate?.getTime() ?? \"null\", endDate?.getTime() ?? \"null\"].join(\"|\");\n}\n\n/**\n * Выбор пресета диапазона дат с вычислением диапазона без timezone-сдвига.\n */\nexport function DateRangePresetSelect({\n\tvalue,\n\tonChange,\n\toptions = DEFAULT_DATE_RANGE_PRESET_OPTIONS,\n\treferenceDate,\n\tonRangeChange,\n\t...props\n}: DateRangePresetSelectProps) {\n\tconst [defaultReferenceDate] = useState(() => new Date());\n\tconst referenceDateTimestamp = referenceDate?.getTime() ?? defaultReferenceDate.getTime();\n\tconst hasRangeChangeHandler = Boolean(onRangeChange);\n\tconst lastPayloadSignatureRef = useRef<string>(\"\");\n\n\t/**\n\t * Сообщает наружу только реально изменившийся диапазон.\n\t */\n\tconst emitRangeChange = useEffectEvent((nextValue: DateRangePresetOption[\"id\"] | undefined) => {\n\t\tif (!onRangeChange) return;\n\n\t\tconst nextPayload = resolveDateRangePresetPayload(nextValue, new Date(referenceDateTimestamp), options);\n\t\tconst nextSignature = getPayloadSignature(nextPayload);\n\t\tif (nextSignature === lastPayloadSignatureRef.current) return;\n\n\t\tlastPayloadSignatureRef.current = nextSignature;\n\t\tonRangeChange(nextPayload);\n\t});\n\n\tuseEffect(() => {\n\t\temitRangeChange(value);\n\t}, [hasRangeChangeHandler, options, referenceDateTimestamp, value]);\n\n\treturn <PresetSelect {...props} options={options} value={value} onChange={onChange} />;\n}\n"],"mappings":";;;;;;AAuCA,IAAa,IAAqE,OAAO,OAAO;CAC/F;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;CACA;EACC,IAAI;EACJ,OAAO;EACP,cAAc;CACf;AACD,CAAC,GAKY,IAAgC,OAAO,OAAO;CAC1D;CACA;CACA;CACA;AACD,CAAiD,GAE3C,IAAgD,IAAI,IAAI,EAA0B,KAAK,MAAW,EAAO,EAAE,CAAC;AAKlH,SAAgB,EAAoB,GAA4C;CAC/E,OAAO,OAAO,KAAU,YAAY,EAAyB,IAAI,CAAK;AACvE;AAKA,SAAgB,EAA4B,GAAgB,IAA4C,CAAC,GAAwB;CAChI,OAAO,EAAmB,GAAO,GAAqB,CAAW;AAClE;AAKA,SAAgB,EACf,GACA,IAA4C,GAClB;CAC1B,OAAO,EAA0B,GAAW,CAAO;AACpD;AAKA,IAAa,IAAsE,OAAO,OACzF,EAAmC,CAA6B,CACjE;AAKA,SAAgB,EACf,GACA,IAA4C,GACb;CAC/B,OAAO,EAAgB,GAAI,CAAO;AACnC;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACN;CACtC,IAAM,IAAS,EAAyB,GAAI,CAAO;CAGnD,OAFK,IAEE;EACN,IAAI,EAAO;EACX,OAAO,EAAO;EACd,OAAO,EAAO,aAAa,EAAE,iBAAc,CAAC;CAC7C,IANoB;AAOrB;AAKA,SAAgB,EACf,GACA,oBAAgB,IAAI,KAAK,GACzB,IAA4C,GACP;CACrC,IAAI,CAAC,MAAM,QAAQ,CAAK,GAAG,OAAO;CAElC,IAAM,CAAC,GAAgB,KAAgB;CACvC,IAAI,EAAE,aAA0B,SAAS,EAAE,aAAwB,OAAO,OAAO;CAEjF,IAAM,IAAiB,EAAe,QAAQ,GACxC,IAAe,EAAa,QAAQ;CAE1C,KAAK,IAAM,KAAU,GAAS;EAC7B,IAAM,CAAC,GAAiB,KAAiB,EAAO,aAAa,EAAE,iBAAc,CAAC;EAC1E,QAAE,aAA2B,SAAS,EAAE,aAAyB,UAIjE,EAAgB,QAAQ,MAAM,KAAkB,EAAc,QAAQ,MAAM,GAC/E,OAAO,EAAO;CAEhB;CAEA,OAAO;AACR;;;AChJA,SAAS,EAAoB,GAAsD;CAClF,IAAI,CAAC,GAAS,OAAO;CAErB,IAAM,CAAC,GAAW,KAAW,EAAQ;CACrC,OAAO;EAAC,EAAQ;EAAI,GAAW,QAAQ,KAAK;EAAQ,GAAS,QAAQ,KAAK;CAAM,CAAC,CAAC,KAAK,GAAG;AAC3F;AAKA,SAAgB,EAAsB,EACrC,UACA,aACA,aAAU,GACV,kBACA,kBACA,GAAG,KAC2B;CAC9B,IAAM,CAAC,KAAwB,wBAAe,IAAI,KAAK,CAAC,GAClD,IAAyB,GAAe,QAAQ,KAAK,EAAqB,QAAQ,GAClF,IAAwB,EAAQ,GAChC,IAA0B,EAAe,EAAE,GAK3C,IAAkB,GAAgB,MAAuD;EAC9F,IAAI,CAAC,GAAe;EAEpB,IAAM,IAAc,EAA8B,GAAW,IAAI,KAAK,CAAsB,GAAG,CAAO,GAChG,IAAgB,EAAoB,CAAW;EACjD,MAAkB,EAAwB,YAE9C,EAAwB,UAAU,GAClC,EAAc,CAAW;CAC1B,CAAC;CAMD,OAJA,QAAgB;EACf,EAAgB,CAAK;CACtB,GAAG;EAAC;EAAuB;EAAS;EAAwB;CAAK,CAAC,GAE3D,kBAAC,GAAD;EAAc,GAAI;EAAgB;EAAgB;EAAiB;CAAW,CAAA;AACtF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { cn as e } from "@ryuzaki13/react-foundation-lib/utils";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
import { useId as r } from "react";
|
|
4
|
+
import { getOrCreatePortalRoot as i, useEscapeDismiss as a, useOverlayFocus as o } from "@ryuzaki13/react-foundation-lib/dom";
|
|
5
5
|
import { createPortal as s } from "react-dom";
|
|
6
6
|
var c = {
|
|
7
7
|
overlay: "CAE3zd",
|
|
@@ -17,37 +17,37 @@ var c = {
|
|
|
17
17
|
//#endregion
|
|
18
18
|
//#region src/dialog/Dialog.tsx
|
|
19
19
|
function l({ title: l, description: u, open: d, onClose: f, size: p, minWidth: m, children: h }) {
|
|
20
|
-
let g =
|
|
20
|
+
let g = r(), _ = r(), v = { "--dialog-min-width": typeof m == "number" ? `${m}px` : m }, y = o({
|
|
21
21
|
active: d,
|
|
22
22
|
trapFocus: !0,
|
|
23
23
|
restoreFocus: !0,
|
|
24
24
|
initialFocus: "container"
|
|
25
25
|
});
|
|
26
|
-
if (
|
|
26
|
+
if (a({
|
|
27
27
|
active: d,
|
|
28
28
|
onDismiss: f,
|
|
29
29
|
containerRef: y
|
|
30
30
|
}), !d || typeof document > "u") return null;
|
|
31
|
-
let b =
|
|
32
|
-
return b ? s(/* @__PURE__ */
|
|
31
|
+
let b = i("dialog-root");
|
|
32
|
+
return b ? s(/* @__PURE__ */ t("div", {
|
|
33
33
|
className: `${c.overlay} surfaceBackdrop`,
|
|
34
34
|
onMouseDown: (e) => e.target === e.currentTarget && f(),
|
|
35
|
-
children: /* @__PURE__ */
|
|
35
|
+
children: /* @__PURE__ */ n("div", {
|
|
36
36
|
ref: y,
|
|
37
37
|
role: "dialog",
|
|
38
38
|
"aria-modal": "true",
|
|
39
39
|
"aria-labelledby": l ? g : void 0,
|
|
40
40
|
"aria-describedby": u ? _ : void 0,
|
|
41
41
|
tabIndex: -1,
|
|
42
|
-
className:
|
|
42
|
+
className: e(c.panel, p && c.sized, p && c[p], "scrollable overscroll surface0 shadowMd paddingLg radiusMd"),
|
|
43
43
|
style: v,
|
|
44
44
|
children: [
|
|
45
|
-
l && /* @__PURE__ */
|
|
45
|
+
l && /* @__PURE__ */ t("h2", {
|
|
46
46
|
id: g,
|
|
47
47
|
className: "margin0",
|
|
48
48
|
children: l
|
|
49
49
|
}),
|
|
50
|
-
u && /* @__PURE__ */
|
|
50
|
+
u && /* @__PURE__ */ t("p", {
|
|
51
51
|
id: _,
|
|
52
52
|
children: u
|
|
53
53
|
}),
|
|
@@ -59,4 +59,4 @@ function l({ title: l, description: u, open: d, onClose: f, size: p, minWidth: m
|
|
|
59
59
|
//#endregion
|
|
60
60
|
export { l as t };
|
|
61
61
|
|
|
62
|
-
//# sourceMappingURL=dialog-
|
|
62
|
+
//# sourceMappingURL=dialog-BcQGVNbu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-
|
|
1
|
+
{"version":3,"file":"dialog-BcQGVNbu.js","names":[],"sources":["../../src/dialog/Dialog.module.scss","../../src/dialog/Dialog.tsx"],"sourcesContent":["@use \"@/styles/mixins\" as *;\n\n.overlay {\n\tz-index: var(--z-dialog);\n\tposition: fixed;\n\tinset: 0;\n\tdisplay: grid;\n\tgrid-template-columns: minmax(0, 1fr);\n\tgrid-template-rows: minmax(0, 1fr);\n\tplace-items: center;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\theight: 100vh;\n\theight: 100dvh;\n\tpadding-block: max(var(--space-md), env(safe-area-inset-top, 0px)) max(var(--space-md), env(safe-area-inset-bottom, 0px));\n\tpadding-inline: max(var(--space-md), env(safe-area-inset-left, 0px)) max(var(--space-md), env(safe-area-inset-right, 0px));\n\toverflow: hidden;\n}\n\n.panel {\n\t--dialog-min-width: 0px;\n\t--dialog-max-width: 100%;\n\n\t/*\n\t * Панель может расти по содержимому только в пределах grid-track overlay. Это сохраняет\n\t * компактный desktop-диалог, а на узком или низком viewport отдаёт прокрутку самой панели.\n\t */\n\tbox-sizing: border-box;\n\tmin-width: min(var(--dialog-min-width), var(--dialog-max-width), 100%);\n\tmax-width: min(var(--dialog-max-width), 100%);\n\tmax-height: 100%;\n\toverflow-wrap: anywhere;\n}\n\n.sized {\n\t/* На мобильном все пресеты, как у Modal, занимают доступную ширину. */\n\twidth: 100%;\n}\n\n@include mobile-above {\n\t.sm {\n\t\t--dialog-max-width: 30em;\n\t}\n\n\t.md {\n\t\t--dialog-max-width: 50em;\n\t}\n\n\t.lg {\n\t\t--dialog-max-width: 70em;\n\t}\n\n\t.xl {\n\t\t--dialog-max-width: 80em;\n\t}\n\n\t.xxl {\n\t\t--dialog-max-width: 95dvw;\n\t}\n\n\t.inside {\n\t\t--dialog-max-width: 100%;\n\t}\n}\n","import { type CSSProperties, type PropsWithChildren, type ReactNode, useId } from \"react\";\n\nimport { getOrCreatePortalRoot, useEscapeDismiss, useOverlayFocus } from \"@ryuzaki13/react-foundation-lib/dom\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { createPortal } from \"react-dom\";\n\nimport { type ModalProps } from \"../modal\";\n\nimport styles from \"./Dialog.module.scss\";\n\n/** Набор ширин Dialog совпадает с публичными размерными пресетами Modal. */\nexport type DialogSize = NonNullable<ModalProps[\"size\"]>;\n\nexport type DialogProps = PropsWithChildren<{\n\ttitle: ReactNode;\n\tdescription: string;\n\topen: boolean;\n\tonClose: () => void;\n\t/** Предустановленная ширина панели с теми же вариантами, что и у Modal. */\n\tsize?: DialogSize;\n\t/** Дополнительная минимальная ширина, ограниченная выбранным size и viewport. */\n\tminWidth?: string | number;\n}>;\n\ntype DialogStyle = CSSProperties & {\n\t\"--dialog-min-width\"?: string;\n};\n\n/**\n * Модальное диалоговое окно для важных подтверждений и пользовательских сценариев.\n * Ограничивает панель доступной областью viewport и прокручивает большое содержимое.\n */\nexport function Dialog({ title, description, open, onClose, size, minWidth, children }: DialogProps) {\n\tconst titleId = useId();\n\tconst descriptionId = useId();\n\tconst dialogStyle: DialogStyle = {\n\t\t\"--dialog-min-width\": typeof minWidth === \"number\" ? `${minWidth}px` : minWidth\n\t};\n\tconst panelRef = useOverlayFocus<HTMLDivElement>({\n\t\tactive: open,\n\t\ttrapFocus: true,\n\t\trestoreFocus: true,\n\t\tinitialFocus: \"container\"\n\t});\n\n\tuseEscapeDismiss({\n\t\tactive: open,\n\t\tonDismiss: onClose,\n\t\tcontainerRef: panelRef\n\t});\n\n\tif (!open) {\n\t\treturn null;\n\t}\n\n\tif (typeof document === \"undefined\") {\n\t\treturn null;\n\t}\n\n\tconst portalTarget = getOrCreatePortalRoot(\"dialog-root\");\n\n\tif (!portalTarget) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<div className={`${styles.overlay} surfaceBackdrop`} onMouseDown={(event) => event.target === event.currentTarget && onClose()}>\n\t\t\t<div\n\t\t\t\tref={panelRef}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-modal=\"true\"\n\t\t\t\taria-labelledby={title ? titleId : undefined}\n\t\t\t\taria-describedby={description ? descriptionId : undefined}\n\t\t\t\ttabIndex={-1}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tstyles.panel,\n\t\t\t\t\tsize && styles.sized,\n\t\t\t\t\tsize && styles[size],\n\t\t\t\t\t\"scrollable overscroll surface0 shadowMd paddingLg radiusMd\"\n\t\t\t\t)}\n\t\t\t\tstyle={dialogStyle}>\n\t\t\t\t{title && (\n\t\t\t\t\t<h2 id={titleId} className=\"margin0\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\t\t\t\t)}\n\t\t\t\t{description && <p id={descriptionId}>{description}</p>}\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</div>,\n\t\tportalTarget\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;ACgCA,SAAgB,EAAO,EAAE,UAAO,gBAAa,SAAM,YAAS,SAAM,aAAU,eAAyB;CACpG,IAAM,IAAU,EAAM,GAChB,IAAgB,EAAM,GACtB,IAA2B,EAChC,sBAAsB,OAAO,KAAa,WAAW,GAAG,EAAS,MAAM,EACxE,GACM,IAAW,EAAgC;EAChD,QAAQ;EACR,WAAW;EACX,cAAc;EACd,cAAc;CACf,CAAC;CAYD,IAVA,EAAiB;EAChB,QAAQ;EACR,WAAW;EACX,cAAc;CACf,CAAC,GAEG,CAAC,KAID,OAAO,WAAa,KACvB,OAAO;CAGR,IAAM,IAAe,EAAsB,aAAa;CAMxD,OAJK,IAIE,EACN,kBAAC,OAAD;EAAK,WAAW,GAAG,EAAO,QAAQ;EAAmB,cAAc,MAAU,EAAM,WAAW,EAAM,iBAAiB,EAAQ;EAC5H,UAAA,kBAAC,OAAD;GACC,KAAK;GACL,MAAK;GACL,cAAW;GACX,mBAAiB,IAAQ,IAAU,KAAA;GACnC,oBAAkB,IAAc,IAAgB,KAAA;GAChD,UAAU;GACV,WAAW,EACV,EAAO,OACP,KAAQ,EAAO,OACf,KAAQ,EAAO,IACf,4DACD;GACA,OAAO;GAbR,UAAA;IAcE,KACA,kBAAC,MAAD;KAAI,IAAI;KAAS,WAAU;KACzB,UAAA;IACE,CAAA;IAEJ,KAAe,kBAAC,KAAD;KAAG,IAAI;KAAgB,UAAA;IAAe,CAAA;IACrD;GACG;;CACD,CAAA,GACL,CACD,IA7BQ;AA8BT"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { PolymorphicComponent as e } from "../polymorphic/index.js";
|
|
2
|
+
import { cn as t } from "@ryuzaki13/react-foundation-lib/utils";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
+
import { useMemo as r } from "react";
|
|
5
|
+
import { resolveProps as i, useMatchMedia as a } from "@ryuzaki13/react-foundation-lib/media";
|
|
6
|
+
var o = {
|
|
7
|
+
container: "ZNPIAt",
|
|
8
|
+
inline: "FOfB6f",
|
|
9
|
+
row: "S3zmDT",
|
|
10
|
+
column: "ZFdq8E",
|
|
11
|
+
rowReverse: "VAzJwr",
|
|
12
|
+
columnReverse: "-U1mun",
|
|
13
|
+
wrap: "_4ZMtr-",
|
|
14
|
+
nowrap: "SKOoTV",
|
|
15
|
+
wrapReverse: "sSe6vs",
|
|
16
|
+
alignStart: "_3K-dKm",
|
|
17
|
+
alignCenter: "-Pfy-z",
|
|
18
|
+
alignEnd: "beSYgR",
|
|
19
|
+
alignStretch: "Ewhv1G",
|
|
20
|
+
alignBaseline: "JXvBB6",
|
|
21
|
+
justifyStart: "hN3T0k",
|
|
22
|
+
justifyCenter: "KKCJ5o",
|
|
23
|
+
justifyEnd: "MnX1Le",
|
|
24
|
+
justifyStretch: "Hom9eH",
|
|
25
|
+
justifyBetween: "Oujm4J",
|
|
26
|
+
justifyAround: "_2ttx6l",
|
|
27
|
+
justifyEvenly: "QEwI8b",
|
|
28
|
+
alignContentStart: "_7GQOS7",
|
|
29
|
+
alignContentCenter: "_2IOpAA",
|
|
30
|
+
alignContentEnd: "fZOYKH",
|
|
31
|
+
alignContentStretch: "_01H9Wl",
|
|
32
|
+
alignContentBetween: "GiMq3P",
|
|
33
|
+
alignContentAround: "tfwckC",
|
|
34
|
+
alignContentEvenly: "_9tNYb7",
|
|
35
|
+
gapNone: "PoehYn",
|
|
36
|
+
gapRowXs: "D9yh46",
|
|
37
|
+
gapRowSm: "B5WUhS",
|
|
38
|
+
gapRowMd: "KfUmo4",
|
|
39
|
+
gapRowLg: "m-8JGj",
|
|
40
|
+
gapRowXl: "zFcs1z",
|
|
41
|
+
gapColumnXs: "_0wKkFA",
|
|
42
|
+
gapColumnSm: "VQY6wh",
|
|
43
|
+
gapColumnMd: "csJmh7",
|
|
44
|
+
gapColumnLg: "_-8r3Oj",
|
|
45
|
+
gapColumnXl: "sCELJe",
|
|
46
|
+
gapXs: "NrH1WE",
|
|
47
|
+
gapSm: "IIgbrj",
|
|
48
|
+
gapMd: "alT7CJ",
|
|
49
|
+
gapLg: "TBFK23",
|
|
50
|
+
gapXl: "JR1URZ",
|
|
51
|
+
item: "i1imd3",
|
|
52
|
+
grow: "IVZ-ii",
|
|
53
|
+
grow0: "zhghPS",
|
|
54
|
+
shrink: "-A4gJM",
|
|
55
|
+
shrink0: "_3Q-lT-",
|
|
56
|
+
basis0: "YSg8P9",
|
|
57
|
+
basisAuto: "RMXnTk",
|
|
58
|
+
flex0: "YyYE7z",
|
|
59
|
+
flex1: "LD3bM5",
|
|
60
|
+
alignSelfStart: "HpcoTp",
|
|
61
|
+
alignSelfCenter: "E7ItD3",
|
|
62
|
+
alignSelfEnd: "v0JFEC",
|
|
63
|
+
alignSelfStretch: "pmMEmH",
|
|
64
|
+
alignSelfBaseline: "qevFHG",
|
|
65
|
+
justifySelfCenter: "OTPY33",
|
|
66
|
+
justifySelfEnd: "AjRxTP",
|
|
67
|
+
justifySelfStretch: "_1YaZWf",
|
|
68
|
+
center: "H-DHBq",
|
|
69
|
+
columnCenter: "JzIGGJ",
|
|
70
|
+
centerBetween: "aqYTBq"
|
|
71
|
+
}, s = (e) => r(() => {
|
|
72
|
+
let t = [o.container];
|
|
73
|
+
return e.inline && t.push(o.inline), e.row ? t.push(o.row) : e.column ? t.push(o.column) : e.rowReverse ? t.push(o.rowReverse) : e.columnReverse && t.push(o.columnReverse), e.wrap ? t.push(o.wrap) : e.nowrap ? t.push(o.nowrap) : e.wrapReverse && t.push(o.wrapReverse), e.align && t.push(o[`align${e.align.charAt(0).toUpperCase() + e.align.slice(1)}`]), e.justify && t.push(o[`justify${e.justify.charAt(0).toUpperCase() + e.justify.slice(1)}`]), e.alignContent && t.push(o[`alignContent${e.alignContent.charAt(0).toUpperCase() + e.alignContent.slice(1)}`]), e.gap === "none" ? t.push(o.gapNone) : e.gap && t.push(o[`gap${e.gap.charAt(0).toUpperCase() + e.gap.slice(1)}`]), e.gapRow && t.push(o[`gapRow${e.gapRow.charAt(0).toUpperCase() + e.gapRow.slice(1)}`]), e.gapColumn && t.push(o[`gapColumn${e.gapColumn.charAt(0).toUpperCase() + e.gapColumn.slice(1)}`]), t.filter(Boolean).join(" ");
|
|
74
|
+
}, [e]), c = (e) => r(() => {
|
|
75
|
+
let t = [o.item];
|
|
76
|
+
return e.flex0 && t.push(o.flex0), e.flex1 && t.push(o.flex1), !e.flex0 && !e.flex1 && (e.grow ? t.push(o.grow) : t.push(o.grow0), e.shrink === !1 ? t.push(o.shrink0) : t.push(o.shrink), e.basis === "0" ? t.push(o.basis0) : e.basis === "auto" && t.push(o.basisAuto)), e.alignSelf && t.push(o[`alignSelf${e.alignSelf.charAt(0).toUpperCase() + e.alignSelf.slice(1)}`]), e.justifySelf && t.push(o[`justifySelf${e.justifySelf.charAt(0).toUpperCase() + e.justifySelf.slice(1)}`]), t.filter(Boolean).join(" ");
|
|
77
|
+
}, [e]), l = (e) => o[e], u = [
|
|
78
|
+
"inline",
|
|
79
|
+
"row",
|
|
80
|
+
"column",
|
|
81
|
+
"rowReverse",
|
|
82
|
+
"columnReverse",
|
|
83
|
+
"wrap",
|
|
84
|
+
"nowrap",
|
|
85
|
+
"wrapReverse",
|
|
86
|
+
"align",
|
|
87
|
+
"justify",
|
|
88
|
+
"alignContent",
|
|
89
|
+
"gap",
|
|
90
|
+
"gapRow",
|
|
91
|
+
"gapColumn"
|
|
92
|
+
];
|
|
93
|
+
function d({ ref: t, children: o, className: c = "", as: l, style: d, inline: f, row: p, column: m, rowReverse: h, columnReverse: g, wrap: _, nowrap: v, wrapReverse: y, align: b, justify: x, alignContent: S, gap: C, gapRow: w, gapColumn: T, ...E }) {
|
|
94
|
+
let { activeBreakpoint: D } = a(), O = [s(r(() => i({
|
|
95
|
+
inline: f,
|
|
96
|
+
row: p,
|
|
97
|
+
column: m,
|
|
98
|
+
rowReverse: h,
|
|
99
|
+
columnReverse: g,
|
|
100
|
+
wrap: _,
|
|
101
|
+
nowrap: v,
|
|
102
|
+
wrapReverse: y,
|
|
103
|
+
align: b,
|
|
104
|
+
justify: x,
|
|
105
|
+
alignContent: S,
|
|
106
|
+
gap: C,
|
|
107
|
+
gapRow: w,
|
|
108
|
+
gapColumn: T
|
|
109
|
+
}, D, u), [
|
|
110
|
+
D,
|
|
111
|
+
b,
|
|
112
|
+
S,
|
|
113
|
+
m,
|
|
114
|
+
g,
|
|
115
|
+
C,
|
|
116
|
+
T,
|
|
117
|
+
w,
|
|
118
|
+
f,
|
|
119
|
+
x,
|
|
120
|
+
v,
|
|
121
|
+
p,
|
|
122
|
+
h,
|
|
123
|
+
_,
|
|
124
|
+
y
|
|
125
|
+
])), c].filter(Boolean).join(" ");
|
|
126
|
+
return /* @__PURE__ */ n(e, {
|
|
127
|
+
as: l,
|
|
128
|
+
...E,
|
|
129
|
+
ref: t,
|
|
130
|
+
className: O,
|
|
131
|
+
style: d,
|
|
132
|
+
children: o
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
d.displayName = "FlexContainer";
|
|
136
|
+
//#endregion
|
|
137
|
+
//#region src/flex/FlexItem.tsx
|
|
138
|
+
var f = [
|
|
139
|
+
"flex0",
|
|
140
|
+
"flex1",
|
|
141
|
+
"grow",
|
|
142
|
+
"shrink",
|
|
143
|
+
"basis",
|
|
144
|
+
"alignSelf",
|
|
145
|
+
"justifySelf"
|
|
146
|
+
];
|
|
147
|
+
function p({ ref: t, children: o, className: s = "", as: l, style: u, flex0: d, flex1: p, grow: m, shrink: h, basis: g, alignSelf: _, justifySelf: v, ...y }) {
|
|
148
|
+
let { activeBreakpoint: b } = a(), x = [c(r(() => i({
|
|
149
|
+
flex0: d,
|
|
150
|
+
flex1: p,
|
|
151
|
+
grow: m,
|
|
152
|
+
shrink: h,
|
|
153
|
+
basis: g,
|
|
154
|
+
alignSelf: _,
|
|
155
|
+
justifySelf: v
|
|
156
|
+
}, b, f), [
|
|
157
|
+
b,
|
|
158
|
+
_,
|
|
159
|
+
g,
|
|
160
|
+
d,
|
|
161
|
+
p,
|
|
162
|
+
m,
|
|
163
|
+
v,
|
|
164
|
+
h
|
|
165
|
+
])), s].filter(Boolean).join(" ");
|
|
166
|
+
return /* @__PURE__ */ n(e, {
|
|
167
|
+
as: l,
|
|
168
|
+
...y,
|
|
169
|
+
ref: t,
|
|
170
|
+
className: x,
|
|
171
|
+
style: u,
|
|
172
|
+
children: o
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
p.displayName = "FlexItem";
|
|
176
|
+
//#endregion
|
|
177
|
+
//#region src/flex/PredefinedFlex.tsx
|
|
178
|
+
function m({ ref: e, variant: t, children: r, className: i = "", ...a }) {
|
|
179
|
+
let o = [l(t ?? ""), i].filter(Boolean).join(" ");
|
|
180
|
+
return /* @__PURE__ */ n(d, {
|
|
181
|
+
ref: e,
|
|
182
|
+
className: o,
|
|
183
|
+
...a,
|
|
184
|
+
children: r
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
m.displayName = "PredefinedFlex";
|
|
188
|
+
//#endregion
|
|
189
|
+
//#region src/flex/Flex.tsx
|
|
190
|
+
var h = {
|
|
191
|
+
Container: d,
|
|
192
|
+
Item: p,
|
|
193
|
+
Predefined: m
|
|
194
|
+
};
|
|
195
|
+
//#endregion
|
|
196
|
+
//#region src/flex/FlexCenter.tsx
|
|
197
|
+
function g({ className: e, minHeight: r, children: i, style: a, ...o }) {
|
|
198
|
+
let s = r === void 0 ? a : {
|
|
199
|
+
...a,
|
|
200
|
+
minHeight: r
|
|
201
|
+
};
|
|
202
|
+
return /* @__PURE__ */ n("div", {
|
|
203
|
+
...o,
|
|
204
|
+
className: t("flexCenter h100", e),
|
|
205
|
+
style: s,
|
|
206
|
+
children: i
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/flex/FlexSpacer.tsx
|
|
211
|
+
function _({ ref: e, ...t }) {
|
|
212
|
+
return /* @__PURE__ */ n(p, {
|
|
213
|
+
...t,
|
|
214
|
+
ref: e,
|
|
215
|
+
flex1: !0
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
_.displayName = "FlexSpacer";
|
|
219
|
+
//#endregion
|
|
220
|
+
export { p as a, m as i, g as n, d as o, h as r, _ as t };
|
|
221
|
+
|
|
222
|
+
//# sourceMappingURL=flex-D86M_h-0.js.map
|