@rio-cloud/rio-uikit 2.2.0 → 2.3.0-beta.1
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/AnalyticsAnalysisOverlay.d.ts +1 -0
- package/AnalyticsAnalysisOverlay.js +5 -0
- package/AnalyticsAnalysisOverlay.js.map +1 -0
- package/Table.d.ts +2 -0
- package/Table.js +23 -0
- package/Table.js.map +1 -0
- package/TableCol.d.ts +2 -2
- package/TableCol.js +1 -1
- package/TableHead.d.ts +2 -2
- package/TableHead.js +1 -1
- package/TableSettingsDialog.d.ts +2 -2
- package/TableSettingsDialog.js +1 -1
- package/TableToolbar.js +3 -2
- package/analyticsAnalysisUtils.d.ts +1 -0
- package/analyticsAnalysisUtils.js +13 -0
- package/analyticsAnalysisUtils.js.map +1 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +18 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +128 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +9 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +73 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -0
- package/components/applicationHeader/AppMenuContent.js.map +1 -1
- package/components/applicationHeader/ApplicationActionBar.js +4 -4
- package/components/applicationHeader/ApplicationActionBar.js.map +1 -1
- package/components/applicationHeader/CollapsedNavItem.js +5 -14
- package/components/applicationHeader/CollapsedNavItem.js.map +1 -1
- package/components/applicationHeader/NavItems.js +10 -10
- package/components/applicationHeader/NavItems.js.map +1 -1
- package/components/assetTree/AssetTree.js +23 -23
- package/components/assetTree/AssetTree.js.map +1 -1
- package/components/assetTree/TreeNothingFound.js +2 -2
- package/components/assetTree/TreeNothingFound.js.map +1 -1
- package/components/assetTree/treeUtils.js.map +1 -1
- package/components/autosuggest/AutoSuggest.js +31 -31
- package/components/autosuggest/AutoSuggest.js.map +1 -1
- package/components/autosuggest/AutoSuggestAddons.js +9 -9
- package/components/autosuggest/AutoSuggestAddons.js.map +1 -1
- package/components/banner/BannerActions.js +2 -2
- package/components/banner/BannerActions.js.map +1 -1
- package/components/banner/BannerIcon.js +3 -3
- package/components/banner/BannerIcon.js.map +1 -1
- package/components/banner/BannerPage.js +4 -4
- package/components/banner/BannerPage.js.map +1 -1
- package/components/button/Button.d.ts +7 -0
- package/components/button/Button.js +73 -65
- package/components/button/Button.js.map +1 -1
- package/components/checkbox/Checkbox.js +18 -17
- package/components/checkbox/Checkbox.js.map +1 -1
- package/components/datepicker/DateRangePicker.js +0 -2
- package/components/datepicker/DateRangePicker.js.map +1 -1
- package/components/datepicker/DayPicker.js +16 -16
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/dialog/Dialog.js.map +1 -1
- package/components/dialog/DialogHeader.js +23 -20
- package/components/dialog/DialogHeader.js.map +1 -1
- package/components/dialog/MediaDialog.js +1 -1
- package/components/dialog/MediaDialog.js.map +1 -1
- package/components/editableContent/EditableContent.js +7 -7
- package/components/editableContent/EditableContent.js.map +1 -1
- package/components/expander/ExpanderList.d.ts +5 -0
- package/components/expander/ExpanderList.js +25 -16
- package/components/expander/ExpanderList.js.map +1 -1
- package/components/expander/ExpanderPanel.d.ts +5 -0
- package/components/expander/ExpanderPanel.js +29 -28
- package/components/expander/ExpanderPanel.js.map +1 -1
- package/components/fade/FadeExpander.js +1 -1
- package/components/fade/FadeExpander.js.map +1 -1
- package/components/filepicker/FilePicker.js.map +1 -1
- package/components/loadMore/LoadMoreButton.d.ts +5 -0
- package/components/loadMore/LoadMoreButton.js +33 -29
- package/components/loadMore/LoadMoreButton.js.map +1 -1
- package/components/map/components/features/ContextMenu.js +13 -13
- package/components/map/components/features/ContextMenu.js.map +1 -1
- package/components/map/components/features/basics/InfoBubble.js.map +1 -1
- package/components/map/components/features/settings/MapSettingsTile.js.map +1 -1
- package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js +6 -6
- package/components/map/components/features/settings/builtinSettings/MapTypeSettings.js.map +1 -1
- package/components/map/utils/eventHandling.js +18 -18
- package/components/map/utils/eventHandling.js.map +1 -1
- package/components/map/utils/positions.d.ts +1 -1
- package/components/map/utils/positions.js +15 -12
- package/components/map/utils/positions.js.map +1 -1
- package/components/map/utils/rendering.d.ts +1 -1
- package/components/menuItems/MenuItems.js +6 -6
- package/components/menuItems/MenuItems.js.map +1 -1
- package/components/notification/NotificationsContainer.js.map +1 -1
- package/components/numberInput/NumberInput.js +57 -56
- package/components/numberInput/NumberInput.js.map +1 -1
- package/components/popover/Popover.js +4 -4
- package/components/popover/Popover.js.map +1 -1
- package/components/resizer/Resizer.js +6 -3
- package/components/resizer/Resizer.js.map +1 -1
- package/components/selects/BaseSelectDropdown.js +34 -32
- package/components/selects/BaseSelectDropdown.js.map +1 -1
- package/components/selects/MultiselectTogglePlaceholder.js.map +1 -1
- package/components/selects/MultiselectToggleSelection.js +11 -11
- package/components/selects/MultiselectToggleSelection.js.map +1 -1
- package/components/sidebars/Sidebar.js +12 -12
- package/components/sidebars/Sidebar.js.map +1 -1
- package/components/sidebars/SidebarCloseButton.js +2 -2
- package/components/sidebars/SidebarCloseButton.js.map +1 -1
- package/components/smoothScrollbars/SmoothScrollbars.d.ts +4 -3
- package/components/smoothScrollbars/SmoothScrollbars.js +11 -11
- package/components/smoothScrollbars/SmoothScrollbars.js.map +1 -1
- package/components/states/CustomState.js.map +1 -1
- package/components/svgImage/svgConverter.js.map +1 -1
- package/components/table/Table.d.ts +267 -0
- package/components/table/Table.js +233 -0
- package/components/table/Table.js.map +1 -0
- package/components/table/Table.types.d.ts +207 -0
- package/components/table/TableBody.d.ts +10 -0
- package/components/table/TableBody.js +5 -0
- package/components/table/TableBody.js.map +1 -0
- package/components/table/TableCard.d.ts +63 -0
- package/components/table/TableCard.js +150 -0
- package/components/table/TableCard.js.map +1 -0
- package/components/table/TableColumn.d.ts +47 -0
- package/components/table/TableColumn.js +5 -0
- package/components/table/TableColumn.js.map +1 -0
- package/components/table/TableExpandedContentRow.d.ts +22 -0
- package/components/table/TableExpandedContentRow.js +5 -0
- package/components/table/TableExpandedContentRow.js.map +1 -0
- package/components/table/TableExpandedRow.d.ts +17 -0
- package/components/table/TableExpandedRow.js +5 -0
- package/components/table/TableExpandedRow.js.map +1 -0
- package/components/table/TableExpanderButton.d.ts +25 -0
- package/components/table/TableExpanderButton.js +22 -0
- package/components/table/TableExpanderButton.js.map +1 -0
- package/components/table/TableFooter.d.ts +13 -0
- package/components/table/TableFooter.js +5 -0
- package/components/table/TableFooter.js.map +1 -0
- package/components/table/TableGroupFooterRow.d.ts +18 -0
- package/components/table/TableGroupFooterRow.js +5 -0
- package/components/table/TableGroupFooterRow.js.map +1 -0
- package/components/table/TableGroupRow.d.ts +24 -0
- package/components/table/TableGroupRow.js +5 -0
- package/components/table/TableGroupRow.js.map +1 -0
- package/components/table/TableHeader.d.ts +9 -0
- package/components/table/TableHeader.js +5 -0
- package/components/table/TableHeader.js.map +1 -0
- package/components/table/TableHeaderColumn.d.ts +70 -0
- package/components/table/TableHeaderColumn.js +5 -0
- package/components/table/TableHeaderColumn.js.map +1 -0
- package/components/table/TableHeaderRow.d.ts +9 -0
- package/components/table/TableHeaderRow.js +5 -0
- package/components/table/TableHeaderRow.js.map +1 -0
- package/components/table/TableRow.d.ts +19 -0
- package/components/table/TableRow.js +5 -0
- package/components/table/TableRow.js.map +1 -0
- package/components/table/TableSpacerRow.d.ts +12 -0
- package/components/table/TableSpacerRow.js +5 -0
- package/components/table/TableSpacerRow.js.map +1 -0
- package/components/table/TableToolbar.d.ts +23 -1
- package/components/table/TableToolbar.js +38 -4
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableViewToggles.d.ts +18 -0
- package/components/table/TableViewToggles.js +59 -87
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/layout/columnSizing.d.ts +3 -0
- package/components/table/layout/columnSizing.js +23 -0
- package/components/table/layout/columnSizing.js.map +1 -0
- package/components/table/layout/useDraggableColumns.d.ts +14 -0
- package/components/table/layout/useDraggableColumns.js +47 -0
- package/components/table/layout/useDraggableColumns.js.map +1 -0
- package/components/table/layout/useHorizontalSectionSync.d.ts +11 -0
- package/components/table/layout/useHorizontalSectionSync.js +39 -0
- package/components/table/layout/useHorizontalSectionSync.js.map +1 -0
- package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +12 -0
- package/components/table/layout/useMeasuredColumnMaxWidths.js +85 -0
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -0
- package/components/table/layout/useResizableColumns.d.ts +14 -0
- package/components/table/layout/useResizableColumns.js +91 -0
- package/components/table/layout/useResizableColumns.js.map +1 -0
- package/components/table/layout/useTableLayout.d.ts +25 -0
- package/components/table/layout/useTableLayout.js +56 -0
- package/components/table/layout/useTableLayout.js.map +1 -0
- package/components/table/layout/useTableVirtualization.d.ts +22 -0
- package/components/table/layout/useTableVirtualization.js +125 -0
- package/components/table/layout/useTableVirtualization.js.map +1 -0
- package/components/table/model/buildTableViewModel.d.ts +28 -0
- package/components/table/model/buildTableViewModel.js +221 -0
- package/components/table/model/buildTableViewModel.js.map +1 -0
- package/components/table/model/resolveCellContent.d.ts +2 -0
- package/components/table/model/resolveCellContent.js +5 -0
- package/components/table/model/resolveCellContent.js.map +1 -0
- package/components/table/model/resolveRowMeta.d.ts +2 -0
- package/components/table/model/resolveRowMeta.js +15 -0
- package/components/table/model/resolveRowMeta.js.map +1 -0
- package/components/table/model/resolveTableClassConfig.d.ts +48 -0
- package/components/table/model/resolveTableClassConfig.js +64 -0
- package/components/table/model/resolveTableClassConfig.js.map +1 -0
- package/components/table/model/tableViewModel.types.d.ts +153 -0
- package/components/table/native/TableCol.js.map +1 -0
- package/components/table/{TableHead.js → native/TableHead.js} +2 -2
- package/components/table/native/TableHead.js.map +1 -0
- package/components/table/native/TableSettingsColumnButtons.js +59 -0
- package/components/table/native/TableSettingsColumnButtons.js.map +1 -0
- package/components/table/{TableSettingsColumnDetails.js → native/TableSettingsColumnDetails.js} +2 -2
- package/components/table/native/TableSettingsColumnDetails.js.map +1 -0
- package/components/table/{TableSettingsDialog.d.ts → native/TableSettingsDialog.d.ts} +2 -3
- package/components/table/native/TableSettingsDialog.js +216 -0
- package/components/table/native/TableSettingsDialog.js.map +1 -0
- package/components/table/{TableSettingsDialogFooter.js → native/TableSettingsDialogFooter.js} +2 -2
- package/components/table/native/TableSettingsDialogFooter.js.map +1 -0
- package/components/table/{TableSettingsListContainer.js → native/TableSettingsListContainer.js} +8 -8
- package/components/table/native/TableSettingsListContainer.js.map +1 -0
- package/components/table/native/TableSettingsListItem.js +100 -0
- package/components/table/native/TableSettingsListItem.js.map +1 -0
- package/components/table/parse/parseBody.d.ts +3 -0
- package/components/table/parse/parseBody.js +13 -0
- package/components/table/parse/parseBody.js.map +1 -0
- package/components/table/parse/parseColumns.d.ts +3 -0
- package/components/table/parse/parseColumns.js +81 -0
- package/components/table/parse/parseColumns.js.map +1 -0
- package/components/table/parse/parseFooter.d.ts +3 -0
- package/components/table/parse/parseFooter.js +39 -0
- package/components/table/parse/parseFooter.js.map +1 -0
- package/components/table/parse/parseHeaders.d.ts +4 -0
- package/components/table/parse/parseHeaders.js +89 -0
- package/components/table/parse/parseHeaders.js.map +1 -0
- package/components/table/parse/parseRows.d.ts +3 -0
- package/components/table/parse/parseRows.js +93 -0
- package/components/table/parse/parseRows.js.map +1 -0
- package/components/table/parse/tableChildGuards.d.ts +25 -0
- package/components/table/parse/tableChildGuards.js +29 -0
- package/components/table/parse/tableChildGuards.js.map +1 -0
- package/components/table/render/body/TableBodyRow.d.ts +16 -0
- package/components/table/render/body/TableBodyRow.js +84 -0
- package/components/table/render/body/TableBodyRow.js.map +1 -0
- package/components/table/render/body/TableBodySection.d.ts +20 -0
- package/components/table/render/body/TableBodySection.js +68 -0
- package/components/table/render/body/TableBodySection.js.map +1 -0
- package/components/table/render/body/TableDataRow.d.ts +15 -0
- package/components/table/render/body/TableDataRow.js +143 -0
- package/components/table/render/body/TableDataRow.js.map +1 -0
- package/components/table/render/body/TableEmptyRow.d.ts +7 -0
- package/components/table/render/body/TableEmptyRow.js +6 -0
- package/components/table/render/body/TableEmptyRow.js.map +1 -0
- package/components/table/render/body/TableExpandedRow.d.ts +8 -0
- package/components/table/render/body/TableExpandedRow.js +84 -0
- package/components/table/render/body/TableExpandedRow.js.map +1 -0
- package/components/table/render/body/TableGroupRow.d.ts +8 -0
- package/components/table/render/body/TableGroupRow.js +21 -0
- package/components/table/render/body/TableGroupRow.js.map +1 -0
- package/components/table/render/body/TableSpacerRow.d.ts +7 -0
- package/components/table/render/body/TableSpacerRow.js +15 -0
- package/components/table/render/body/TableSpacerRow.js.map +1 -0
- package/components/table/render/footer/TableFooterCell.d.ts +8 -0
- package/components/table/render/footer/TableFooterCell.js +31 -0
- package/components/table/render/footer/TableFooterCell.js.map +1 -0
- package/components/table/render/footer/TableFooterContent.d.ts +6 -0
- package/components/table/render/footer/TableFooterContent.js +6 -0
- package/components/table/render/footer/TableFooterContent.js.map +1 -0
- package/components/table/render/footer/TableFooterSection.d.ts +10 -0
- package/components/table/render/footer/TableFooterSection.js +28 -0
- package/components/table/render/footer/TableFooterSection.js.map +1 -0
- package/components/table/render/header/TableBatchDropdown.d.ts +9 -0
- package/components/table/render/header/TableBatchDropdown.js +28 -0
- package/components/table/render/header/TableBatchDropdown.js.map +1 -0
- package/components/table/render/header/TableColumnFilter.d.ts +66 -0
- package/components/table/render/header/TableColumnFilter.js +70 -0
- package/components/table/render/header/TableColumnFilter.js.map +1 -0
- package/components/table/render/header/TableDraggableHeaderCell.d.ts +3 -0
- package/components/table/render/header/TableDraggableHeaderCell.js +54 -0
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -0
- package/components/table/render/header/TableHeader.types.d.ts +35 -0
- package/components/table/render/header/TableHeaderCellContent.d.ts +3 -0
- package/components/table/render/header/TableHeaderCellContent.js +57 -0
- package/components/table/render/header/TableHeaderCellContent.js.map +1 -0
- package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +3 -0
- package/components/table/render/header/TableHeaderCellResizeHandle.js +22 -0
- package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -0
- package/components/table/render/header/TableHeaderDragOverlay.d.ts +13 -0
- package/components/table/render/header/TableHeaderDragOverlay.js +35 -0
- package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -0
- package/components/table/render/header/TableHeaderSection.d.ts +3 -0
- package/components/table/render/header/TableHeaderSection.js +104 -0
- package/components/table/render/header/TableHeaderSection.js.map +1 -0
- package/components/table/render/header/TableHeaderSelectionCell.d.ts +9 -0
- package/components/table/render/header/TableHeaderSelectionCell.js +41 -0
- package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -0
- package/components/table/render/header/TableStaticHeaderCell.d.ts +3 -0
- package/components/table/render/header/TableStaticHeaderCell.js +36 -0
- package/components/table/render/header/TableStaticHeaderCell.js.map +1 -0
- package/components/table/render/header/resolveAriaSort.d.ts +2 -0
- package/components/table/render/header/resolveAriaSort.js +8 -0
- package/components/table/render/header/resolveAriaSort.js.map +1 -0
- package/components/table/render/header/resolveColumnCollisionDetection.d.ts +2 -0
- package/components/table/render/header/resolveColumnCollisionDetection.js +9 -0
- package/components/table/render/header/resolveColumnCollisionDetection.js.map +1 -0
- package/components/table/render/header/resolveHeaderCellClassName.d.ts +10 -0
- package/components/table/render/header/resolveHeaderCellClassName.js +22 -0
- package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -0
- package/components/table/render/header/resolveHeaderCellStyle.d.ts +829 -0
- package/components/table/render/header/resolveHeaderCellStyle.js +9 -0
- package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -0
- package/components/table/selection/useTableSelection.d.ts +82 -0
- package/components/table/selection/useTableSelection.js +35 -0
- package/components/table/selection/useTableSelection.js.map +1 -0
- package/components/table/settings/TableColumnsDropdown.d.ts +90 -0
- package/components/table/settings/TableColumnsDropdown.js +137 -0
- package/components/table/settings/TableColumnsDropdown.js.map +1 -0
- package/components/table/settings/TableColumnsDropdownItem.d.ts +8 -0
- package/components/table/settings/TableColumnsDropdownItem.js +66 -0
- package/components/table/settings/TableColumnsDropdownItem.js.map +1 -0
- package/components/table/shared/getAlignClassName.d.ts +3 -0
- package/components/table/shared/getAlignClassName.js +6 -0
- package/components/table/shared/getAlignClassName.js.map +1 -0
- package/components/table/shared/getInteractiveRowProps.d.ts +14 -0
- package/components/table/shared/getInteractiveRowProps.js +15 -0
- package/components/table/shared/getInteractiveRowProps.js.map +1 -0
- package/components/table/shared/resolveTableAria.d.ts +2 -0
- package/components/table/shared/resolveTableAria.js +6 -0
- package/components/table/shared/resolveTableAria.js.map +1 -0
- package/components/table/tableSizing.constants.d.ts +4 -0
- package/components/table/tableSizing.constants.js +8 -0
- package/components/table/tableSizing.constants.js.map +1 -0
- package/components/teaser/TeaserContainer.js +3 -3
- package/components/teaser/TeaserContainer.js.map +1 -1
- package/components/virtualList/VirtualList.js +16 -13
- package/components/virtualList/VirtualList.js.map +1 -1
- package/googleAnalyticsUtils.d.ts +1 -0
- package/googleAnalyticsUtils.js +9 -0
- package/googleAnalyticsUtils.js.map +1 -0
- package/hooks/useCookies.js +17 -17
- package/hooks/useCookies.js.map +1 -1
- package/hooks/useDraggableElement.d.ts +35 -0
- package/hooks/useDraggableElement.js +49 -0
- package/hooks/useDraggableElement.js.map +1 -0
- package/hooks/useElapsedTime.js +4 -4
- package/hooks/useElapsedTime.js.map +1 -1
- package/hooks/useLocationSuggestions.js +13 -10
- package/hooks/useLocationSuggestions.js.map +1 -1
- package/hooks/useMergeRefs.js +12 -12
- package/hooks/useMergeRefs.js.map +1 -1
- package/hooks/usePrevious.d.ts +1 -1
- package/hooks/usePrevious.js.map +1 -1
- package/hooks/useResizeObserver.js +25 -10
- package/hooks/useResizeObserver.js.map +1 -1
- package/hooks/useRioCookieConsent.js +7 -4
- package/hooks/useRioCookieConsent.js.map +1 -1
- package/hooks/useSorting.js +10 -10
- package/hooks/useSorting.js.map +1 -1
- package/hooks/useStorage.js +12 -12
- package/hooks/useStorage.js.map +1 -1
- package/hooks/useSum.js +10 -7
- package/hooks/useSum.js.map +1 -1
- package/hooks/useTableSelection.js.map +1 -1
- package/hooks/useTimeout.js +6 -3
- package/hooks/useTimeout.js.map +1 -1
- package/package.json +3 -3
- package/routeUtils.js +12 -10
- package/utils/analytics/analyticsAnalysisUtils.d.ts +27 -0
- package/utils/analytics/analyticsAnalysisUtils.js +161 -0
- package/utils/analytics/analyticsAnalysisUtils.js.map +1 -0
- package/utils/analytics/autoTracking.d.ts +14 -0
- package/utils/analytics/autoTracking.js +19 -0
- package/utils/analytics/autoTracking.js.map +1 -0
- package/utils/analytics/createAnalyticsOverlayTooltip.d.ts +36 -0
- package/utils/analytics/createAnalyticsOverlayTooltip.js +203 -0
- package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -0
- package/utils/analytics/googleAnalyticsUtils.d.ts +37 -0
- package/utils/analytics/googleAnalyticsUtils.js +37 -0
- package/utils/analytics/googleAnalyticsUtils.js.map +1 -0
- package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.d.ts +8 -0
- package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.js +61 -0
- package/utils/analytics/logAnalyticsOverlayUnmatchedEntries.js.map +1 -0
- package/utils/analytics/useAnalyticsOverlayDom.d.ts +11 -0
- package/utils/analytics/useAnalyticsOverlayDom.js +120 -0
- package/utils/analytics/useAnalyticsOverlayDom.js.map +1 -0
- package/utils/arrayMove.js +11 -0
- package/utils/arrayMove.js.map +1 -0
- package/utils/cssuseragent.js +2 -2
- package/utils/cssuseragent.js.map +1 -1
- package/utils/deviceUtils.js.map +1 -1
- package/utils/formatUtils.js.map +1 -1
- package/utils/hasUtilityClass.js +3 -3
- package/utils/hasUtilityClass.js.map +1 -1
- package/utils/hidePiiData.js.map +1 -1
- package/utils/init/checkForReleaseVersion.js +4 -4
- package/utils/init/checkForReleaseVersion.js.map +1 -1
- package/utils/init/styledLogs.js.map +1 -1
- package/utils/mergeRefs.js +3 -3
- package/utils/mergeRefs.js.map +1 -1
- package/utils/routeUtils.d.ts +32 -1
- package/utils/routeUtils.js +85 -67
- package/utils/routeUtils.js.map +1 -1
- package/utils/storageUtils.js +9 -9
- package/utils/storageUtils.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
- package/components/table/TableCol.js.map +0 -1
- package/components/table/TableHead.js.map +0 -1
- package/components/table/TableSettingsColumnButtons.js +0 -45
- package/components/table/TableSettingsColumnButtons.js.map +0 -1
- package/components/table/TableSettingsColumnDetails.js.map +0 -1
- package/components/table/TableSettingsDialog.js +0 -208
- package/components/table/TableSettingsDialog.js.map +0 -1
- package/components/table/TableSettingsDialogFooter.js.map +0 -1
- package/components/table/TableSettingsListContainer.js.map +0 -1
- package/components/table/TableSettingsListItem.js +0 -96
- package/components/table/TableSettingsListItem.js.map +0 -1
- /package/components/table/{TableCol.d.ts → native/TableCol.d.ts} +0 -0
- /package/components/table/{TableCol.js → native/TableCol.js} +0 -0
- /package/components/table/{TableHead.d.ts → native/TableHead.d.ts} +0 -0
- /package/components/table/{TableSettingsColumnButtons.d.ts → native/TableSettingsColumnButtons.d.ts} +0 -0
- /package/components/table/{TableSettingsColumnDetails.d.ts → native/TableSettingsColumnDetails.d.ts} +0 -0
- /package/components/table/{TableSettingsDialogFooter.d.ts → native/TableSettingsDialogFooter.d.ts} +0 -0
- /package/components/table/{TableSettingsListContainer.d.ts → native/TableSettingsListContainer.d.ts} +0 -0
- /package/components/table/{TableSettingsListItem.d.ts → native/TableSettingsListItem.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/datepicker/DateRangePicker.jsx"],"sourcesContent":["import { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport onClickOutside from 'react-onclickoutside';\nimport moment from 'moment';\nimport classNames from '../../utils/classNames';\nimport { isEqual, isNull, isNil } from 'es-toolkit/predicate';\n\nimport DatePicker from './DatePicker';\nimport getDropDirection from '../../utils/getDropDirection';\n\nconst Placeholder = ({ text }) => <span className='placeholder'>{text}</span>;\n\nconst propTypes = {\n startValue: PropTypes.object,\n endValue: PropTypes.object,\n defaultStartValue: PropTypes.object,\n defaultEndValue: PropTypes.object,\n minValue: PropTypes.object,\n maxValue: PropTypes.object,\n onRangeChange: PropTypes.func,\n locale: PropTypes.string,\n textDefault: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textToday: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastWeek: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastMonth: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastYear: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textCustom: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textApply: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textCancel: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textFrom: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textTo: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n className: PropTypes.string,\n dropdownClass: PropTypes.string,\n dropdownMenuClass: PropTypes.string,\n hasTimePicker: PropTypes.bool,\n customRangeOnly: PropTypes.bool,\n customPresets: PropTypes.arrayOf(\n PropTypes.shape({\n startValue: PropTypes.object.isRequired,\n endValue: PropTypes.object.isRequired,\n text: PropTypes.string.isRequired,\n onSelect: PropTypes.func,\n })\n ),\n dropup: PropTypes.bool,\n pullRight: PropTypes.bool,\n autoDropDirection: PropTypes.bool,\n clearable: PropTypes.bool,\n onClear: PropTypes.func,\n};\n\nconst defaultProps = {\n defaultStartValue: moment().startOf('day'),\n defaultEndValue: moment().endOf('day'),\n minValue: null,\n maxValue: null,\n locale: 'en-GB',\n textDefault: 'Select date range ...',\n textToday: 'Today',\n textLastWeek: 'Last week',\n textLastMonth: 'Last month',\n textCustom: 'Custom',\n textFrom: 'From',\n textTo: 'To',\n textApply: 'Apply',\n textCancel: 'Cancel',\n dropdownClass: '',\n dropdownMenuClass: '',\n hasTimePicker: false,\n customRangeOnly: false,\n customPresets: [\n {\n text: 'Today',\n startValue: moment().startOf('day'),\n endValue: moment().endOf('day'),\n },\n {\n text: 'Last week',\n startValue: moment().subtract(1, 'weeks').startOf('isoWeek'),\n endValue: moment().subtract(1, 'weeks').endOf('isoWeek'),\n },\n {\n text: 'Last Month',\n startValue: moment().subtract(1, 'months').startOf('month'),\n endValue: moment().subtract(1, 'months').endOf('month'),\n },\n ],\n onRangeChange: () => {\n // function when range changes\n },\n autoDropDirection: true,\n dropup: false,\n pullRight: false,\n clearable: false,\n onClear: () => undefined,\n};\n\nconst LOCAL_DATE_FORMAT = 'dd L LT';\nconst LOCAL_DATE_FORMAT_NO_TIME = 'dd L';\n\nconst DROPDOWN_WIDTH = 600;\n\n/**\n * Wrapper component for React-Datetime.\n *\n * @deprecated This will be removed from the UIKIT at some time.\n */\nclass DateRangePicker extends Component {\n constructor(props) {\n super(props);\n\n const customRangeStartValue = props.startValue ? props.startValue : props.defaultStartValue;\n const customRangeEndValue = props.endValue ? props.endValue : props.defaultEndValue;\n\n this.state = {\n internalStartValue: props.startValue,\n internalEndValue: props.endValue,\n isMounted: false,\n isCustomVisible: props.customRangeOnly,\n isDropdownOpen: false,\n customRangeStartValue: moment(customRangeStartValue), // default value for individual datepickers\n customRangeEndValue: moment(customRangeEndValue), // default value for individual datepickers\n isStartValid: true,\n isEndValid: true,\n dropdownToggleText: <Placeholder text={props.textDefault} />,\n dropup: props.dropup,\n pullRight: props.pullRight,\n };\n\n this.toggleDropdownOpen = this.toggleDropdownOpen.bind(this);\n this.handleCustomToggle = this.handleCustomToggle.bind(this);\n this.handleCustomApply = this.handleCustomApply.bind(this);\n this.onStartChange = this.onStartChange.bind(this);\n this.getValidStartDates = this.getValidStartDates.bind(this);\n this.onEndChange = this.onEndChange.bind(this);\n this.getValidEndDates = this.getValidEndDates.bind(this);\n this.handleResetInternalState = this.handleResetInternalState.bind(this);\n }\n\n componentDidMount() {\n const { startValue, endValue, locale } = this.props;\n if (!this.state.isMounted) {\n this.setState({\n isMounted: true,\n });\n }\n\n // initial mount value\n if (startValue && endValue) {\n this.update(startValue, endValue, locale);\n }\n }\n\n /**\n * Responsible for handling start/end values given from outside (controlled component context).\n * @param {object} nextProps - The next props.\n * @returns {undefined}\n */\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { startValue, endValue, textDefault, customRangeOnly, locale, defaultStartValue, defaultEndValue } =\n nextProps;\n\n const { internalStartValue, internalEndValue } = this.state;\n\n // handle reset:\n // reset condition 1 is for uncontrolled components,\n // making sure that when a time is selected, and then the locale changed, that the selection remains\n const resetCondition1 =\n isNil(startValue) && isNil(endValue) && isNil(internalStartValue) && isNil(internalEndValue);\n\n // reset condition 2 is for controlled components,\n // when a time is set / defined, and the controlling component wants a hard reset\n const resetCondition2 = isNull(startValue) && isNull(endValue);\n\n // reset to original state\n if (resetCondition1 || resetCondition2) {\n this.setState({\n internalStartValue: undefined,\n internalEndValue: undefined,\n customRangeStartValue: defaultStartValue,\n customRangeEndValue: defaultEndValue,\n dropdownToggleText: <Placeholder text={textDefault} />,\n isCustomVisible: customRangeOnly,\n isDropdownOpen: false,\n isStartValid: true,\n isEndValid: true,\n pullRight: nextProps.pullRight,\n dropup: nextProps.dropup,\n });\n } else if (startValue !== this.props.startValue || endValue !== this.props.endValue) {\n this.update(startValue, endValue, locale);\n } else {\n this.update(internalStartValue, internalEndValue, locale);\n }\n }\n\n /**\n * Converts start/end values to moments, makes them readable,\n * crafts a dropdownToggleText and updates state.\n * @param {object} startValue - the start date (date or moment).\n * @param {object} endValue - the start date (date or moment).\n * @param {object} locale - the locale to use.\n * @param {object} extras - additional state, which needs to update.\n * @param {object} callback - callback to be called, after state has changed.\n * @returns {undefined}\n */\n update(startValue, endValue, locale, extras, callback) {\n const { hasTimePicker } = this.props;\n const format = hasTimePicker ? LOCAL_DATE_FORMAT : LOCAL_DATE_FORMAT_NO_TIME;\n\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalStartValue = hasTimePicker ? moment(startValue) : moment(startValue).startOf('day');\n const finalEndValue = hasTimePicker ? moment(endValue) : moment(endValue).endOf('day');\n\n // composition of dropdownToggleText\n const startValueText = `${finalStartValue.locale(locale).format(format)}`;\n const endValueText = `${finalEndValue.locale(locale).format(format)}`;\n const dropdownToggleText =\n startValueText === endValueText ? startValueText : `${startValueText} → ${endValueText}`;\n\n // set state, and call callback\n this.setState(\n {\n internalStartValue: finalStartValue,\n internalEndValue: finalEndValue,\n customRangeStartValue: finalStartValue,\n customRangeEndValue: finalEndValue,\n dropdownToggleText,\n startValueText,\n endValueText,\n isStartValid: true,\n isEndValid: !finalEndValue.isBefore(finalStartValue),\n ...extras,\n },\n () => {\n callback && callback(finalStartValue, finalEndValue);\n }\n );\n }\n\n handleResetInternalState(event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const { textDefault, customRangeOnly, defaultStartValue, defaultEndValue, pullRight, dropup, onClear } =\n this.props;\n\n this.setState({\n internalStartValue: undefined,\n internalEndValue: undefined,\n customRangeStartValue: defaultStartValue,\n customRangeEndValue: defaultEndValue,\n dropdownToggleText: <Placeholder text={textDefault} />,\n isCustomVisible: customRangeOnly,\n isDropdownOpen: false,\n isStartValid: true,\n isEndValid: true,\n startValueText: null,\n endValueText: null,\n pullRight,\n dropup,\n });\n\n onClear();\n }\n\n /**\n * Gets called by wrapper component \"onClickOutside\".\n * Responsible for closing the dropdown when a click occured outside.\n * @returns {undefined}\n */\n handleClickOutside() {\n if (this.state.isMounted) {\n this.setState({\n isDropdownOpen: false,\n });\n }\n }\n\n /**\n * Toggles dropdown open status and visibility of custom range area.\n * @param {object} event - mouse event on toggle dropdown\n * @returns {undefined}\n */\n toggleDropdownOpen(event) {\n const toggleNode = ReactDOM.findDOMNode(this.refDropdownToggle);\n const menuNode = ReactDOM.findDOMNode(this.refDropdownMenu);\n\n const dropDirection =\n this.isAutoDropActive() && !this.state.isDropdownOpen ? getDropDirection(toggleNode, menuNode) : {};\n\n const left = event.currentTarget.getBoundingClientRect().left;\n\n this.setState(prevState => ({\n isDropdownOpen: !prevState.isDropdownOpen,\n isCustomVisible: this.props.customRangeOnly,\n ...dropDirection,\n pullRight: left + DROPDOWN_WIDTH > document.body.clientWidth,\n }));\n }\n\n isAutoDropActive() {\n return !(!this.props.autoDropDirection || this.props.dropup || this.props.pullRight);\n }\n\n /**\n * Only gets called on manual change of datePicker (user interaction).\n * Has influence the validity of the end date.\n *\n * Important to note that the start date is not limited,\n * whereas the end date is limited by the start date (see 'getValidEndDates').\n *\n * @param {object} startValue - the start date (date or moment).\n * @param {object} isValidDate - if the date is valid or not.\n * @returns {undefined}\n */\n onStartChange(startValue, isValidDate) {\n const newState = { isStartValid: false };\n const { hasTimePicker, minValue, maxValue } = this.props;\n const { customRangeEndValue } = this.state;\n\n if (moment.isMoment(startValue)) {\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalStartValue = hasTimePicker ? startValue : moment(startValue).startOf('day');\n\n // check validity of input (min/max)\n const passesMin = minValue ? finalStartValue.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? finalStartValue.isSameOrBefore(moment(maxValue)) : true;\n const isValidInput = isValidDate && passesMin && passesMax;\n newState.isStartValid = isValidInput;\n if (isValidDate) {\n newState.customRangeStartValue = finalStartValue;\n newState.isEndValid = !customRangeEndValue.isBefore(finalStartValue);\n }\n }\n\n this.setState(newState);\n }\n\n /**\n * Only gets called on manual change of datePicker (user interaction)\n * @param {object} endValue - the start date (date or moment).\n * @param {object} isValidDate - if the date is valid or not.\n * @returns {undefined}\n */\n onEndChange(endValue, isValidDate) {\n const newState = { isEndValid: false };\n const { hasTimePicker, minValue, maxValue } = this.props;\n const { customRangeStartValue } = this.state;\n // let isValidInput = false;\n\n if (moment.isMoment(endValue)) {\n // necessary to set end of seconds and milliseconds for every end value\n const correctedEndValue = isValidDate ? endValue.endOf('minute') : endValue;\n\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalEndValue = hasTimePicker ? correctedEndValue : moment(endValue).endOf('day');\n\n // check validity of input (min/max)\n const passesMin = minValue ? finalEndValue.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? finalEndValue.isSameOrBefore(moment(maxValue)) : true;\n const isValidInput = isValidDate && passesMin && passesMax && finalEndValue.isAfter(customRangeStartValue);\n newState.isEndValid = isValidInput;\n\n if (isValidDate) {\n newState.customRangeEndValue = finalEndValue;\n }\n }\n\n this.setState(newState);\n }\n\n /**\n * Callback method for DatePicker to limit selection in DatePicker.\n * @param {object} current - Current date in the loop.\n * @returns {undefined}\n */\n getValidStartDates(current) {\n const { minValue, maxValue } = this.props;\n const customRangeEndValue = moment(this.state.customRangeEndValue);\n\n if (current.isSame(customRangeEndValue, 'day')) {\n return true;\n }\n\n const passesMin = minValue ? current.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? current.isSameOrBefore(moment(maxValue)) : true;\n\n return passesMin && passesMax;\n }\n\n /**\n * Callback method for DatePicker to limit selection in DatePicker.\n * End date has to be after start date.\n * @param {object} current - Current date in the loop.\n * @returns {undefined}\n */\n getValidEndDates(current) {\n const { minValue, maxValue } = this.props;\n const customRangeStartValue = moment(this.state.customRangeStartValue);\n\n if (current.isSame(customRangeStartValue, 'day')) {\n return true;\n }\n\n const passesMin = minValue ? current.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? current.isSameOrBefore(moment(maxValue)) : true;\n const isAfterStart = current.isAfter(customRangeStartValue);\n\n return passesMin && passesMax && isAfterStart;\n }\n\n /**\n * Gets called when \"custom ...\" has been selected.\n * @returns {undefined}\n */\n handleCustomToggle() {\n this.setState(prevState => {\n return {\n isCustomVisible: !prevState.isCustomVisible,\n };\n });\n }\n\n handleCustomPresetSelect(preset) {\n if (typeof preset.onSelect === 'function') {\n preset.onSelect();\n }\n this.handleSelect(preset.startValue, preset.endValue);\n }\n\n /**\n * Gets called when a preset has been selected.\n * @param {object} startValue - the start date (date or moment).\n * @param {object} endValue - the start date (date or moment).\n * @returns {undefined}\n */\n handleSelect(startValue, endValue) {\n const { onRangeChange, locale } = this.props;\n\n const extras = { isDropdownOpen: false };\n this.update(startValue, endValue, locale, extras, onRangeChange);\n }\n\n /**\n * Gets called user clicks the apply button.\n * @returns {undefined}\n */\n handleCustomApply() {\n const { customRangeStartValue, customRangeEndValue, isStartValid, isEndValid } = this.state;\n const { onRangeChange, locale } = this.props;\n\n if (isStartValid && isEndValid) {\n const extras = { isDropdownOpen: false };\n this.update(customRangeStartValue, customRangeEndValue, locale, extras, onRangeChange);\n }\n }\n\n getDropdownToggle(dropdownToggleText) {\n const { children, clearable } = this.props;\n const { startValueText, endValueText } = this.state;\n\n const isClearable = clearable && dropdownToggleText.type !== Placeholder;\n\n const labelClassNames = classNames(isClearable && 'withClearButton');\n\n const isRenderCallback = children && typeof children === 'function';\n\n // Note: due to issues with nested events in Firefox (for toggle and inside the clear)\n // the toggle element must not be a <button> but a div.\n return (\n <div\n type='button'\n className='DateRangePickerToggle form-control dropdown-toggle text-left'\n aria-haspopup='true'\n aria-expanded='true'\n onClick={this.toggleDropdownOpen}\n ref={node => (this.refDropdownToggle = node)}\n >\n {isRenderCallback ? (\n this.props.children(startValueText, endValueText)\n ) : (\n <span className={labelClassNames}>{dropdownToggleText}</span>\n )}\n {isClearable && this.getClearButton()}\n <span className='caret' />\n </div>\n );\n }\n\n getClearButton() {\n return (\n <span className='clearButton' onClick={this.handleResetInternalState}>\n <span className='clearButtonIcon rioglyph rioglyph-remove-sign' />\n </span>\n );\n }\n\n getCustomPanelToggle(isCustomVisible, textCustom) {\n return (\n <li className={classNames('custom-panel-toggle', isCustomVisible && 'hidden')}>\n <a role='button' onClick={this.handleCustomToggle}>\n {textCustom} ...\n </a>\n </li>\n );\n }\n\n getCustomPanelButtons(isCustomVisible, isStartValid, isEndValid, textApply, textCancel) {\n return (\n <li className={classNames('custom-panel-buttons', 'margin-20', !isCustomVisible && 'hidden')}>\n <div className='btn-toolbar'>\n <button\n type='button'\n disabled={!isStartValid || !isEndValid}\n onClick={this.handleCustomApply}\n className='btn btn-primary pull-right'\n >\n {textApply}\n </button>\n <button type='button' onClick={this.toggleDropdownOpen} className='btn btn-default pull-right'>\n {textCancel}\n </button>\n </div>\n </li>\n );\n }\n\n // eslint-disable-next-line complexity\n render() {\n const {\n locale,\n textCustom,\n textApply,\n textCancel,\n textFrom,\n textTo,\n textToday,\n textLastWeek,\n textLastMonth,\n className,\n clearable,\n dropdownClass,\n dropdownMenuClass,\n customPresets,\n hasTimePicker,\n } = this.props;\n\n const {\n customRangeStartValue,\n customRangeEndValue,\n isStartValid,\n isEndValid,\n isCustomVisible,\n isDropdownOpen,\n dropdownToggleText,\n } = this.state;\n\n const pullRight = this.isAutoDropActive() ? this.state.pullRight : this.props.pullRight;\n const dropup = this.isAutoDropActive() ? this.state.dropup : this.props.dropup;\n\n if (customPresets && isEqual(customPresets, defaultProps.customPresets)) {\n // support backward compatibility to override default drop down text values\n customPresets[0].text = textToday;\n customPresets[1].text = textLastWeek;\n customPresets[2].text = textLastMonth;\n }\n\n const classes = classNames('DateRangePicker', className && className);\n\n const dropDownClassNames = classNames(\n 'select',\n 'dropdown',\n dropdownClass,\n isDropdownOpen && 'open',\n dropup && 'dropup'\n );\n\n return (\n <div className={classes}>\n <div className={dropDownClassNames}>\n {this.getDropdownToggle(dropdownToggleText, clearable)}\n <ul\n className={classNames('dropdown-menu', pullRight && 'pull-right', dropdownMenuClass)}\n ref={node => (this.refDropdownMenu = node)}\n >\n {customPresets.map((preset, i) => {\n return (\n <li\n key={`preset-${i}`}\n title={(preset.disabled && preset.disabledText) || null}\n className={classNames(preset.disabled && 'disabled')}\n >\n <a\n role='button'\n className={classNames(isCustomVisible && 'hidden')}\n onClick={\n !preset.disabled\n ? this.handleCustomPresetSelect.bind(this, preset)\n : undefined\n }\n >\n {preset.text}\n </a>\n </li>\n );\n })}\n <li role='separator' className={classNames('divider', isCustomVisible && 'hidden')} />\n {this.getCustomPanelToggle(isCustomVisible, textCustom)}\n <li className={classNames('custom-panel', !isCustomVisible && 'hidden')}>\n <div className='row'>\n <div className='col-sm-6'>\n <label>{textFrom}</label>\n <DatePicker\n locale={locale}\n open\n autoDropDirection={false}\n dateFormat\n timeFormat={hasTimePicker}\n initialValue={customRangeStartValue}\n onChange={this.onStartChange}\n closeOnSelect\n isValidDate={this.getValidStartDates}\n className={classNames('DatePicker', !isStartValid && 'has-error')}\n />\n </div>\n <div className='col-sm-6'>\n <label>{textTo}</label>\n <DatePicker\n locale={locale}\n open\n autoDropDirection={false}\n dateFormat\n timeFormat={hasTimePicker}\n initialValue={customRangeEndValue}\n onChange={this.onEndChange}\n closeOnSelect\n isValidDate={this.getValidEndDates}\n className={classNames('DatePicker', !isEndValid && 'has-error')}\n />\n </div>\n </div>\n </li>\n {this.getCustomPanelButtons(isCustomVisible, isStartValid, isEndValid, textApply, textCancel)}\n </ul>\n </div>\n </div>\n );\n }\n}\n\nDateRangePicker.propTypes = propTypes;\nDateRangePicker.defaultProps = defaultProps;\n\n/**\n * Wrapper component for React-Datetime.\n *\n * @deprecated This will be removed from the UIKIT at some time.\n */\nexport default onClickOutside(DateRangePicker);\nexport { DateRangePicker as DateRangePickerPure };\n"],"names":["Placeholder","text","propTypes","PropTypes","defaultProps","moment","LOCAL_DATE_FORMAT","LOCAL_DATE_FORMAT_NO_TIME","DROPDOWN_WIDTH","DateRangePicker","Component","props","customRangeStartValue","customRangeEndValue","startValue","endValue","locale","nextProps","textDefault","customRangeOnly","defaultStartValue","defaultEndValue","internalStartValue","internalEndValue","resetCondition1","isNil","resetCondition2","isNull","extras","callback","hasTimePicker","format","finalStartValue","finalEndValue","startValueText","endValueText","dropdownToggleText","event","pullRight","dropup","onClear","toggleNode","ReactDOM","menuNode","dropDirection","getDropDirection","left","prevState","isValidDate","newState","minValue","maxValue","passesMin","passesMax","isValidInput","correctedEndValue","current","isAfterStart","preset","onRangeChange","isStartValid","isEndValid","children","clearable","isClearable","labelClassNames","classNames","isRenderCallback","node","isCustomVisible","textCustom","textApply","textCancel","textFrom","textTo","textToday","textLastWeek","textLastMonth","className","dropdownClass","dropdownMenuClass","customPresets","isDropdownOpen","isEqual","classes","dropDownClassNames","i","DatePicker","DeprecatedDateRangePicker","onClickOutside"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DateRangePicker.js","sources":["../../../src/components/datepicker/DateRangePicker.jsx"],"sourcesContent":["// biome-ignore-all lint: deprecated component\nimport { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactDOM from 'react-dom';\nimport onClickOutside from 'react-onclickoutside';\nimport moment from 'moment';\nimport classNames from '../../utils/classNames';\nimport { isEqual, isNull, isNil } from 'es-toolkit/predicate';\n\nimport DatePicker from './DatePicker';\nimport getDropDirection from '../../utils/getDropDirection';\n\nconst Placeholder = ({ text }) => <span className='placeholder'>{text}</span>;\n\nconst propTypes = {\n startValue: PropTypes.object,\n endValue: PropTypes.object,\n defaultStartValue: PropTypes.object,\n defaultEndValue: PropTypes.object,\n minValue: PropTypes.object,\n maxValue: PropTypes.object,\n onRangeChange: PropTypes.func,\n locale: PropTypes.string,\n textDefault: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textToday: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastWeek: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastMonth: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textLastYear: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textCustom: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textApply: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textCancel: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textFrom: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n textTo: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),\n className: PropTypes.string,\n dropdownClass: PropTypes.string,\n dropdownMenuClass: PropTypes.string,\n hasTimePicker: PropTypes.bool,\n customRangeOnly: PropTypes.bool,\n customPresets: PropTypes.arrayOf(\n PropTypes.shape({\n startValue: PropTypes.object.isRequired,\n endValue: PropTypes.object.isRequired,\n text: PropTypes.string.isRequired,\n onSelect: PropTypes.func,\n })\n ),\n dropup: PropTypes.bool,\n pullRight: PropTypes.bool,\n autoDropDirection: PropTypes.bool,\n clearable: PropTypes.bool,\n onClear: PropTypes.func,\n};\n\nconst defaultProps = {\n defaultStartValue: moment().startOf('day'),\n defaultEndValue: moment().endOf('day'),\n minValue: null,\n maxValue: null,\n locale: 'en-GB',\n textDefault: 'Select date range ...',\n textToday: 'Today',\n textLastWeek: 'Last week',\n textLastMonth: 'Last month',\n textCustom: 'Custom',\n textFrom: 'From',\n textTo: 'To',\n textApply: 'Apply',\n textCancel: 'Cancel',\n dropdownClass: '',\n dropdownMenuClass: '',\n hasTimePicker: false,\n customRangeOnly: false,\n customPresets: [\n {\n text: 'Today',\n startValue: moment().startOf('day'),\n endValue: moment().endOf('day'),\n },\n {\n text: 'Last week',\n startValue: moment().subtract(1, 'weeks').startOf('isoWeek'),\n endValue: moment().subtract(1, 'weeks').endOf('isoWeek'),\n },\n {\n text: 'Last Month',\n startValue: moment().subtract(1, 'months').startOf('month'),\n endValue: moment().subtract(1, 'months').endOf('month'),\n },\n ],\n onRangeChange: () => {\n // function when range changes\n },\n autoDropDirection: true,\n dropup: false,\n pullRight: false,\n clearable: false,\n onClear: () => undefined,\n};\n\nconst LOCAL_DATE_FORMAT = 'dd L LT';\nconst LOCAL_DATE_FORMAT_NO_TIME = 'dd L';\n\nconst DROPDOWN_WIDTH = 600;\n\n/**\n * Wrapper component for React-Datetime.\n *\n * @deprecated This will be removed from the UIKIT at some time.\n */\nclass DateRangePicker extends Component {\n constructor(props) {\n super(props);\n\n const customRangeStartValue = props.startValue ? props.startValue : props.defaultStartValue;\n const customRangeEndValue = props.endValue ? props.endValue : props.defaultEndValue;\n\n this.state = {\n internalStartValue: props.startValue,\n internalEndValue: props.endValue,\n isMounted: false,\n isCustomVisible: props.customRangeOnly,\n isDropdownOpen: false,\n customRangeStartValue: moment(customRangeStartValue), // default value for individual datepickers\n customRangeEndValue: moment(customRangeEndValue), // default value for individual datepickers\n isStartValid: true,\n isEndValid: true,\n dropdownToggleText: <Placeholder text={props.textDefault} />,\n dropup: props.dropup,\n pullRight: props.pullRight,\n };\n\n this.toggleDropdownOpen = this.toggleDropdownOpen.bind(this);\n this.handleCustomToggle = this.handleCustomToggle.bind(this);\n this.handleCustomApply = this.handleCustomApply.bind(this);\n this.onStartChange = this.onStartChange.bind(this);\n this.getValidStartDates = this.getValidStartDates.bind(this);\n this.onEndChange = this.onEndChange.bind(this);\n this.getValidEndDates = this.getValidEndDates.bind(this);\n this.handleResetInternalState = this.handleResetInternalState.bind(this);\n }\n\n componentDidMount() {\n const { startValue, endValue, locale } = this.props;\n if (!this.state.isMounted) {\n this.setState({\n isMounted: true,\n });\n }\n\n // initial mount value\n if (startValue && endValue) {\n this.update(startValue, endValue, locale);\n }\n }\n\n /**\n * Responsible for handling start/end values given from outside (controlled component context).\n * @param {object} nextProps - The next props.\n * @returns {undefined}\n */\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { startValue, endValue, textDefault, customRangeOnly, locale, defaultStartValue, defaultEndValue } =\n nextProps;\n\n const { internalStartValue, internalEndValue } = this.state;\n\n // handle reset:\n // reset condition 1 is for uncontrolled components,\n // making sure that when a time is selected, and then the locale changed, that the selection remains\n const resetCondition1 =\n isNil(startValue) && isNil(endValue) && isNil(internalStartValue) && isNil(internalEndValue);\n\n // reset condition 2 is for controlled components,\n // when a time is set / defined, and the controlling component wants a hard reset\n const resetCondition2 = isNull(startValue) && isNull(endValue);\n\n // reset to original state\n if (resetCondition1 || resetCondition2) {\n this.setState({\n internalStartValue: undefined,\n internalEndValue: undefined,\n customRangeStartValue: defaultStartValue,\n customRangeEndValue: defaultEndValue,\n dropdownToggleText: <Placeholder text={textDefault} />,\n isCustomVisible: customRangeOnly,\n isDropdownOpen: false,\n isStartValid: true,\n isEndValid: true,\n pullRight: nextProps.pullRight,\n dropup: nextProps.dropup,\n });\n } else if (startValue !== this.props.startValue || endValue !== this.props.endValue) {\n this.update(startValue, endValue, locale);\n } else {\n this.update(internalStartValue, internalEndValue, locale);\n }\n }\n\n /**\n * Converts start/end values to moments, makes them readable,\n * crafts a dropdownToggleText and updates state.\n * @param {object} startValue - the start date (date or moment).\n * @param {object} endValue - the start date (date or moment).\n * @param {object} locale - the locale to use.\n * @param {object} extras - additional state, which needs to update.\n * @param {object} callback - callback to be called, after state has changed.\n * @returns {undefined}\n */\n update(startValue, endValue, locale, extras, callback) {\n const { hasTimePicker } = this.props;\n const format = hasTimePicker ? LOCAL_DATE_FORMAT : LOCAL_DATE_FORMAT_NO_TIME;\n\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalStartValue = hasTimePicker ? moment(startValue) : moment(startValue).startOf('day');\n const finalEndValue = hasTimePicker ? moment(endValue) : moment(endValue).endOf('day');\n\n // composition of dropdownToggleText\n const startValueText = `${finalStartValue.locale(locale).format(format)}`;\n const endValueText = `${finalEndValue.locale(locale).format(format)}`;\n const dropdownToggleText =\n startValueText === endValueText ? startValueText : `${startValueText} → ${endValueText}`;\n\n // set state, and call callback\n this.setState(\n {\n internalStartValue: finalStartValue,\n internalEndValue: finalEndValue,\n customRangeStartValue: finalStartValue,\n customRangeEndValue: finalEndValue,\n dropdownToggleText,\n startValueText,\n endValueText,\n isStartValid: true,\n isEndValid: !finalEndValue.isBefore(finalStartValue),\n ...extras,\n },\n () => {\n callback && callback(finalStartValue, finalEndValue);\n }\n );\n }\n\n handleResetInternalState(event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n const { textDefault, customRangeOnly, defaultStartValue, defaultEndValue, pullRight, dropup, onClear } =\n this.props;\n\n this.setState({\n internalStartValue: undefined,\n internalEndValue: undefined,\n customRangeStartValue: defaultStartValue,\n customRangeEndValue: defaultEndValue,\n dropdownToggleText: <Placeholder text={textDefault} />,\n isCustomVisible: customRangeOnly,\n isDropdownOpen: false,\n isStartValid: true,\n isEndValid: true,\n startValueText: null,\n endValueText: null,\n pullRight,\n dropup,\n });\n\n onClear();\n }\n\n /**\n * Gets called by wrapper component \"onClickOutside\".\n * Responsible for closing the dropdown when a click occured outside.\n * @returns {undefined}\n */\n handleClickOutside() {\n if (this.state.isMounted) {\n this.setState({\n isDropdownOpen: false,\n });\n }\n }\n\n /**\n * Toggles dropdown open status and visibility of custom range area.\n * @param {object} event - mouse event on toggle dropdown\n * @returns {undefined}\n */\n toggleDropdownOpen(event) {\n const toggleNode = ReactDOM.findDOMNode(this.refDropdownToggle);\n const menuNode = ReactDOM.findDOMNode(this.refDropdownMenu);\n\n const dropDirection =\n this.isAutoDropActive() && !this.state.isDropdownOpen ? getDropDirection(toggleNode, menuNode) : {};\n\n const left = event.currentTarget.getBoundingClientRect().left;\n\n this.setState(prevState => ({\n isDropdownOpen: !prevState.isDropdownOpen,\n isCustomVisible: this.props.customRangeOnly,\n ...dropDirection,\n pullRight: left + DROPDOWN_WIDTH > document.body.clientWidth,\n }));\n }\n\n isAutoDropActive() {\n return !(!this.props.autoDropDirection || this.props.dropup || this.props.pullRight);\n }\n\n /**\n * Only gets called on manual change of datePicker (user interaction).\n * Has influence the validity of the end date.\n *\n * Important to note that the start date is not limited,\n * whereas the end date is limited by the start date (see 'getValidEndDates').\n *\n * @param {object} startValue - the start date (date or moment).\n * @param {object} isValidDate - if the date is valid or not.\n * @returns {undefined}\n */\n onStartChange(startValue, isValidDate) {\n const newState = { isStartValid: false };\n const { hasTimePicker, minValue, maxValue } = this.props;\n const { customRangeEndValue } = this.state;\n\n if (moment.isMoment(startValue)) {\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalStartValue = hasTimePicker ? startValue : moment(startValue).startOf('day');\n\n // check validity of input (min/max)\n const passesMin = minValue ? finalStartValue.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? finalStartValue.isSameOrBefore(moment(maxValue)) : true;\n const isValidInput = isValidDate && passesMin && passesMax;\n newState.isStartValid = isValidInput;\n if (isValidDate) {\n newState.customRangeStartValue = finalStartValue;\n newState.isEndValid = !customRangeEndValue.isBefore(finalStartValue);\n }\n }\n\n this.setState(newState);\n }\n\n /**\n * Only gets called on manual change of datePicker (user interaction)\n * @param {object} endValue - the start date (date or moment).\n * @param {object} isValidDate - if the date is valid or not.\n * @returns {undefined}\n */\n onEndChange(endValue, isValidDate) {\n const newState = { isEndValid: false };\n const { hasTimePicker, minValue, maxValue } = this.props;\n const { customRangeStartValue } = this.state;\n // let isValidInput = false;\n\n if (moment.isMoment(endValue)) {\n // necessary to set end of seconds and milliseconds for every end value\n const correctedEndValue = isValidDate ? endValue.endOf('minute') : endValue;\n\n // necessary to set start to startOf / end day to endOf, when selecting \"without time\"\n const finalEndValue = hasTimePicker ? correctedEndValue : moment(endValue).endOf('day');\n\n // check validity of input (min/max)\n const passesMin = minValue ? finalEndValue.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? finalEndValue.isSameOrBefore(moment(maxValue)) : true;\n const isValidInput = isValidDate && passesMin && passesMax && finalEndValue.isAfter(customRangeStartValue);\n newState.isEndValid = isValidInput;\n\n if (isValidDate) {\n newState.customRangeEndValue = finalEndValue;\n }\n }\n\n this.setState(newState);\n }\n\n /**\n * Callback method for DatePicker to limit selection in DatePicker.\n * @param {object} current - Current date in the loop.\n * @returns {undefined}\n */\n getValidStartDates(current) {\n const { minValue, maxValue } = this.props;\n const customRangeEndValue = moment(this.state.customRangeEndValue);\n\n if (current.isSame(customRangeEndValue, 'day')) {\n return true;\n }\n\n const passesMin = minValue ? current.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? current.isSameOrBefore(moment(maxValue)) : true;\n\n return passesMin && passesMax;\n }\n\n /**\n * Callback method for DatePicker to limit selection in DatePicker.\n * End date has to be after start date.\n * @param {object} current - Current date in the loop.\n * @returns {undefined}\n */\n getValidEndDates(current) {\n const { minValue, maxValue } = this.props;\n const customRangeStartValue = moment(this.state.customRangeStartValue);\n\n if (current.isSame(customRangeStartValue, 'day')) {\n return true;\n }\n\n const passesMin = minValue ? current.isSameOrAfter(moment(minValue)) : true;\n const passesMax = maxValue ? current.isSameOrBefore(moment(maxValue)) : true;\n const isAfterStart = current.isAfter(customRangeStartValue);\n\n return passesMin && passesMax && isAfterStart;\n }\n\n /**\n * Gets called when \"custom ...\" has been selected.\n * @returns {undefined}\n */\n handleCustomToggle() {\n this.setState(prevState => {\n return {\n isCustomVisible: !prevState.isCustomVisible,\n };\n });\n }\n\n handleCustomPresetSelect(preset) {\n if (typeof preset.onSelect === 'function') {\n preset.onSelect();\n }\n this.handleSelect(preset.startValue, preset.endValue);\n }\n\n /**\n * Gets called when a preset has been selected.\n * @param {object} startValue - the start date (date or moment).\n * @param {object} endValue - the start date (date or moment).\n * @returns {undefined}\n */\n handleSelect(startValue, endValue) {\n const { onRangeChange, locale } = this.props;\n\n const extras = { isDropdownOpen: false };\n this.update(startValue, endValue, locale, extras, onRangeChange);\n }\n\n /**\n * Gets called user clicks the apply button.\n * @returns {undefined}\n */\n handleCustomApply() {\n const { customRangeStartValue, customRangeEndValue, isStartValid, isEndValid } = this.state;\n const { onRangeChange, locale } = this.props;\n\n if (isStartValid && isEndValid) {\n const extras = { isDropdownOpen: false };\n this.update(customRangeStartValue, customRangeEndValue, locale, extras, onRangeChange);\n }\n }\n\n getDropdownToggle(dropdownToggleText) {\n const { children, clearable } = this.props;\n const { startValueText, endValueText } = this.state;\n\n const isClearable = clearable && dropdownToggleText.type !== Placeholder;\n\n const labelClassNames = classNames(isClearable && 'withClearButton');\n\n const isRenderCallback = children && typeof children === 'function';\n\n // Note: due to issues with nested events in Firefox (for toggle and inside the clear)\n // the toggle element must not be a <button> but a div.\n return (\n <div\n type='button'\n className='DateRangePickerToggle form-control dropdown-toggle text-left'\n aria-haspopup='true'\n aria-expanded='true'\n onClick={this.toggleDropdownOpen}\n ref={node => (this.refDropdownToggle = node)}\n >\n {isRenderCallback ? (\n this.props.children(startValueText, endValueText)\n ) : (\n <span className={labelClassNames}>{dropdownToggleText}</span>\n )}\n {isClearable && this.getClearButton()}\n <span className='caret' />\n </div>\n );\n }\n\n getClearButton() {\n return (\n <span className='clearButton' onClick={this.handleResetInternalState}>\n <span className='clearButtonIcon rioglyph rioglyph-remove-sign' />\n </span>\n );\n }\n\n getCustomPanelToggle(isCustomVisible, textCustom) {\n return (\n <li className={classNames('custom-panel-toggle', isCustomVisible && 'hidden')}>\n <a role='button' onClick={this.handleCustomToggle}>\n {textCustom} ...\n </a>\n </li>\n );\n }\n\n getCustomPanelButtons(isCustomVisible, isStartValid, isEndValid, textApply, textCancel) {\n return (\n <li className={classNames('custom-panel-buttons', 'margin-20', !isCustomVisible && 'hidden')}>\n <div className='btn-toolbar'>\n <button\n type='button'\n disabled={!isStartValid || !isEndValid}\n onClick={this.handleCustomApply}\n className='btn btn-primary pull-right'\n >\n {textApply}\n </button>\n <button type='button' onClick={this.toggleDropdownOpen} className='btn btn-default pull-right'>\n {textCancel}\n </button>\n </div>\n </li>\n );\n }\n\n render() {\n const {\n locale,\n textCustom,\n textApply,\n textCancel,\n textFrom,\n textTo,\n textToday,\n textLastWeek,\n textLastMonth,\n className,\n clearable,\n dropdownClass,\n dropdownMenuClass,\n customPresets,\n hasTimePicker,\n } = this.props;\n\n const {\n customRangeStartValue,\n customRangeEndValue,\n isStartValid,\n isEndValid,\n isCustomVisible,\n isDropdownOpen,\n dropdownToggleText,\n } = this.state;\n\n const pullRight = this.isAutoDropActive() ? this.state.pullRight : this.props.pullRight;\n const dropup = this.isAutoDropActive() ? this.state.dropup : this.props.dropup;\n\n if (customPresets && isEqual(customPresets, defaultProps.customPresets)) {\n // support backward compatibility to override default drop down text values\n customPresets[0].text = textToday;\n customPresets[1].text = textLastWeek;\n customPresets[2].text = textLastMonth;\n }\n\n const classes = classNames('DateRangePicker', className && className);\n\n const dropDownClassNames = classNames(\n 'select',\n 'dropdown',\n dropdownClass,\n isDropdownOpen && 'open',\n dropup && 'dropup'\n );\n\n return (\n <div className={classes}>\n <div className={dropDownClassNames}>\n {this.getDropdownToggle(dropdownToggleText, clearable)}\n <ul\n className={classNames('dropdown-menu', pullRight && 'pull-right', dropdownMenuClass)}\n ref={node => (this.refDropdownMenu = node)}\n >\n {customPresets.map((preset, i) => {\n return (\n <li\n key={`preset-${i}`}\n title={(preset.disabled && preset.disabledText) || null}\n className={classNames(preset.disabled && 'disabled')}\n >\n <a\n role='button'\n className={classNames(isCustomVisible && 'hidden')}\n onClick={\n !preset.disabled\n ? this.handleCustomPresetSelect.bind(this, preset)\n : undefined\n }\n >\n {preset.text}\n </a>\n </li>\n );\n })}\n <li role='separator' className={classNames('divider', isCustomVisible && 'hidden')} />\n {this.getCustomPanelToggle(isCustomVisible, textCustom)}\n <li className={classNames('custom-panel', !isCustomVisible && 'hidden')}>\n <div className='row'>\n <div className='col-sm-6'>\n <label>{textFrom}</label>\n <DatePicker\n locale={locale}\n open\n autoDropDirection={false}\n dateFormat\n timeFormat={hasTimePicker}\n initialValue={customRangeStartValue}\n onChange={this.onStartChange}\n closeOnSelect\n isValidDate={this.getValidStartDates}\n className={classNames('DatePicker', !isStartValid && 'has-error')}\n />\n </div>\n <div className='col-sm-6'>\n <label>{textTo}</label>\n <DatePicker\n locale={locale}\n open\n autoDropDirection={false}\n dateFormat\n timeFormat={hasTimePicker}\n initialValue={customRangeEndValue}\n onChange={this.onEndChange}\n closeOnSelect\n isValidDate={this.getValidEndDates}\n className={classNames('DatePicker', !isEndValid && 'has-error')}\n />\n </div>\n </div>\n </li>\n {this.getCustomPanelButtons(isCustomVisible, isStartValid, isEndValid, textApply, textCancel)}\n </ul>\n </div>\n </div>\n );\n }\n}\n\nDateRangePicker.propTypes = propTypes;\nDateRangePicker.defaultProps = defaultProps;\n\n/**\n * Wrapper component for React-Datetime.\n *\n * @deprecated This will be removed from the UIKIT at some time.\n */\nexport default onClickOutside(DateRangePicker);\nexport { DateRangePicker as DateRangePickerPure };\n"],"names":["Placeholder","text","propTypes","PropTypes","defaultProps","moment","LOCAL_DATE_FORMAT","LOCAL_DATE_FORMAT_NO_TIME","DROPDOWN_WIDTH","DateRangePicker","Component","props","customRangeStartValue","customRangeEndValue","startValue","endValue","locale","nextProps","textDefault","customRangeOnly","defaultStartValue","defaultEndValue","internalStartValue","internalEndValue","resetCondition1","isNil","resetCondition2","isNull","extras","callback","hasTimePicker","format","finalStartValue","finalEndValue","startValueText","endValueText","dropdownToggleText","event","pullRight","dropup","onClear","toggleNode","ReactDOM","menuNode","dropDirection","getDropDirection","left","prevState","isValidDate","newState","minValue","maxValue","passesMin","passesMax","isValidInput","correctedEndValue","current","isAfterStart","preset","onRangeChange","isStartValid","isEndValid","children","clearable","isClearable","labelClassNames","classNames","isRenderCallback","node","isCustomVisible","textCustom","textApply","textCancel","textFrom","textTo","textToday","textLastWeek","textLastMonth","className","dropdownClass","dropdownMenuClass","customPresets","isDropdownOpen","isEqual","classes","dropDownClassNames","i","DatePicker","DeprecatedDateRangePicker","onClickOutside"],"mappings":"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"}
|
|
@@ -32,9 +32,9 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
32
32
|
endMonth: A,
|
|
33
33
|
inputClassName: G,
|
|
34
34
|
className: $
|
|
35
|
-
} = e, c = M === "single", de = M === "multiple", ye = M === "range", m = r !== void 0, [ue, b] = re(), h = m ? r : ue, w = c ? h instanceof Date ? h : void 0 : de ? Array.isArray(h) ? h : void 0 : Fe(h) ? h : void 0, z = { selected: w }, H = Te(a), [U,
|
|
35
|
+
} = e, c = M === "single", de = M === "multiple", ye = M === "range", m = r !== void 0, [ue, b] = re(), h = m ? r : ue, w = c ? h instanceof Date ? h : void 0 : de ? Array.isArray(h) ? h : void 0 : Fe(h) ? h : void 0, z = { selected: w }, H = Te(a), [U, v] = re(""), W = m && !c ? Oe(w, a, M, p) : U;
|
|
36
36
|
ae(() => {
|
|
37
|
-
c && m && r instanceof Date &&
|
|
37
|
+
c && m && r instanceof Date && v(x(r, a, p));
|
|
38
38
|
}, [r, c, m, a, p]);
|
|
39
39
|
const I = (n, t) => {
|
|
40
40
|
if (Ee(e) && e.onSelectChange) {
|
|
@@ -57,13 +57,13 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
57
57
|
}
|
|
58
58
|
}, 300)
|
|
59
59
|
).current, q = (n) => {
|
|
60
|
-
|
|
60
|
+
v(n), pe(n);
|
|
61
61
|
}, D = N(!1), J = (n) => {
|
|
62
62
|
const t = n.relatedTarget, d = t && te.current?.contains(t);
|
|
63
|
-
if (l && !d &&
|
|
63
|
+
if (l && !d && C(), !c)
|
|
64
64
|
return;
|
|
65
65
|
const y = L(U, a, p);
|
|
66
|
-
y && ce(y) && (b(y), I(y, {}),
|
|
66
|
+
y && ce(y) && (b(y), I(y, {}), v(x(y, a, p)));
|
|
67
67
|
}, Q = () => {
|
|
68
68
|
l || ee();
|
|
69
69
|
}, X = (n) => {
|
|
@@ -72,33 +72,33 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
72
72
|
P();
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
|
-
l && j && (I(w, {}),
|
|
75
|
+
l && j && (I(w, {}), C());
|
|
76
76
|
}
|
|
77
77
|
}, Y = (n) => {
|
|
78
78
|
m || b(n);
|
|
79
79
|
}, me = () => {
|
|
80
|
-
Z(""), Y(void 0),
|
|
80
|
+
Z(""), Y(void 0), v(""), m && b(void 0), ye && "onChange" in e && e.onChange && e.onChange(void 0), I(void 0, {});
|
|
81
81
|
}, _ = (n, t, d, y) => {
|
|
82
|
-
Y(n), I(n, d), c && !m &&
|
|
82
|
+
Y(n), I(n, d), c && !m && v(x(n, a, p)), D.current && g?.current?.focus(), j && (C(), D.current = !1);
|
|
83
83
|
}, {
|
|
84
84
|
isOpen: l,
|
|
85
85
|
open: ee,
|
|
86
|
-
close:
|
|
86
|
+
close: C,
|
|
87
87
|
referenceRef: ne,
|
|
88
88
|
popperElementRef: ge,
|
|
89
89
|
popperStyles: Me,
|
|
90
90
|
popperAttributes: he
|
|
91
|
-
} = ke({ placement: u ? "bottom-end" : "bottom-start" }), g = N(null), te = N(null),
|
|
91
|
+
} = ke({ placement: u ? "bottom-end" : "bottom-start" }), g = N(null), te = N(null), Ce = (n) => {
|
|
92
92
|
te.current = n, ge(n);
|
|
93
93
|
}, R = Pe(
|
|
94
94
|
(n) => {
|
|
95
95
|
const t = n.target;
|
|
96
96
|
if (!t) {
|
|
97
|
-
|
|
97
|
+
C();
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
100
|
const d = ne.current?.contains(t), y = g.current?.contains(t);
|
|
101
|
-
d || y ||
|
|
101
|
+
d || y || C();
|
|
102
102
|
},
|
|
103
103
|
void 0,
|
|
104
104
|
l
|
|
@@ -107,7 +107,7 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
107
107
|
};
|
|
108
108
|
Ne("Escape", (n) => {
|
|
109
109
|
const t = n.target;
|
|
110
|
-
g.current && g.current === t && l &&
|
|
110
|
+
g.current && g.current === t && l && C();
|
|
111
111
|
}), ae(() => {
|
|
112
112
|
const n = (t) => {
|
|
113
113
|
!l || !R.current || t.key === "Tab" && R.current.contains(document.activeElement) && (D.current = !0, console.log("User tabbed into dropdown"));
|
|
@@ -139,7 +139,7 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
139
139
|
),
|
|
140
140
|
S ? /* @__PURE__ */ i("div", { className: "padding-15", children: S }) : /* @__PURE__ */ i("div", {})
|
|
141
141
|
] });
|
|
142
|
-
const
|
|
142
|
+
const ve = {
|
|
143
143
|
...s,
|
|
144
144
|
readOnly: !c,
|
|
145
145
|
style: {
|
|
@@ -156,7 +156,7 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
156
156
|
id: o,
|
|
157
157
|
autoComplete: "off",
|
|
158
158
|
placeholder: O,
|
|
159
|
-
...
|
|
159
|
+
...ve,
|
|
160
160
|
type: "text",
|
|
161
161
|
value: W,
|
|
162
162
|
onChange: Z,
|
|
@@ -196,7 +196,7 @@ const Ee = (e) => !e.mode || e.mode === "single", xe = (e) => e.mode === "multip
|
|
|
196
196
|
style: Me,
|
|
197
197
|
className: "DayPickerPopover z-index-max bg-white shadow-default rounded margin-y-3 border",
|
|
198
198
|
...he,
|
|
199
|
-
ref:
|
|
199
|
+
ref: Ce,
|
|
200
200
|
role: "dialog",
|
|
201
201
|
"aria-label": "DayPicker calendar",
|
|
202
202
|
children: /* @__PURE__ */ k("div", { ref: R, className: "display-flex flex-column justify-content-between", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DayPicker.js","sources":["../../../src/components/datepicker/DayPicker.tsx"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\nimport { DayPicker as ReactDayPicker } from 'react-day-picker';\nimport { format, isValid, parse, type Locale } from 'date-fns';\nimport * as locales from 'date-fns/locale';\nimport { debounce } from 'es-toolkit/function';\n\nimport 'react-day-picker/dist/style.css';\n\nimport useClickOutside from '../../hooks/useClickOutside';\nimport usePopperDropdown from '../../hooks/usePopperDropdown';\nimport useKey from '../../hooks/useKey';\nimport ClearableInput from '../clearableInput/ClearableInput';\nimport classNames from '../../utils/classNames';\n\n// Features\n// [ ] input parsing and error handling\n// [-] time picker -> use a dedicated time picker input next to the day picker\n// [-] time range callback + validation\n// [ ] wrap all react-day-picker callbacks to avoid exposing internals and types\n// [x] start/end month\n// [ ] reserved days / unselectable days\n// [ ] disable editable input - use selected date only\n// [x] disallow editing input for mode: \"multi\" and \"range\" since input contains custom value\n// [ ] modifier and modifiersStyles\n// [x] closeOnSelect\n// [x] enter confirms the manual input and closes the dropdown\n// [x] esc closed the dropdown\n// [ ] support different sizes\n// [ ] mandatory value\n// [x] avoid opening dropdown again when clicking inside the input\n// [x] clear inputs\n// [ ] tab should select elements inside the dropdown, select should close but keep focus on input\n\nexport type DateRange = {\n from?: Date | undefined;\n to?: Date | undefined;\n};\n\nexport type Modifiers = Record<string, boolean>;\n\nexport type OnSelectHandler<T> = (\n selected: T,\n triggerDate: Date,\n modifiers: Modifiers,\n event: React.MouseEvent | React.KeyboardEvent\n) => void;\n\n// - By default, don't show a time picker\n// - Handle given formats like \"2020-04-04\" or ISO dates \"2020-03-12T16:20:44.193Z\" as initialValue - really?\n\ntype CommonProps = Omit<React.HTMLProps<HTMLInputElement>, 'onChange' | 'value' | 'selected'> & {\n id?: string;\n locale?: string;\n closeOnSelect?: boolean;\n initialValue?: Date;\n inputProps?: Omit<React.HTMLProps<HTMLInputElement>, 'type' | 'defaultValue' | 'children'>;\n\n /**\n * Custom format string (e.g., 'yyyy-MM-dd') to override locale-based formatting.\n * If omitted, locale-based display is used for the input.\n */\n dateFormat?: string;\n\n alignRight?: boolean;\n isClearable?: boolean;\n minWidth?: number;\n mandatory?: boolean;\n bsSize?: 'sm' | 'md' | 'lg' | 'xl';\n footer?: React.ReactNode;\n inline?: boolean;\n placeholder?: string | React.ReactElement;\n\n inputClassName?: string;\n className?: string;\n\n // react-day-picker props\n showOutsideDays?: boolean;\n fixedWeeks?: boolean;\n defaultMonth?: Date;\n startMonth?: Date;\n endMonth?: Date;\n};\n\ntype SingleModeProps = CommonProps & {\n mode?: 'single';\n selected?: Date;\n onInputChange?: (rawValue: string, parsedDate: Date | undefined, isValid: boolean) => void;\n onSelectChange?: (value: Date | undefined, modifiers: Modifiers) => void;\n};\n\ntype MultipleModeProps = CommonProps & {\n mode: 'multiple';\n selected?: Date[];\n onSelectChange?: (value: Date[] | undefined, modifiers: Modifiers) => void;\n};\n\ntype RangeModeProps = CommonProps & {\n mode: 'range';\n selected?: DateRange;\n onChange?: (value: DateRange | undefined) => void;\n onSelectChange?: (value: DateRange | undefined, modifiers: Modifiers) => void;\n};\n\ntype DayPickerProps = SingleModeProps | MultipleModeProps | RangeModeProps;\n\nconst isSingleProps = (props: DayPickerProps): props is SingleModeProps => !props.mode || props.mode === 'single';\nconst isMultipleProps = (props: DayPickerProps): props is MultipleModeProps => props.mode === 'multiple';\nconst isRangeProps = (props: DayPickerProps): props is RangeModeProps => props.mode === 'range';\n\nconst DayPicker = (props: DayPickerProps) => {\n const {\n id,\n selected,\n inputProps = {},\n alignRight,\n bsSize = '',\n locale = 'en-GB',\n footer,\n inline,\n showOutsideDays = true,\n fixedWeeks = true,\n mode = 'single',\n dateFormat,\n placeholder,\n isClearable = false,\n closeOnSelect = true,\n defaultMonth,\n startMonth,\n endMonth,\n inputClassName,\n className,\n } = props;\n\n const isSingleMode = mode === 'single';\n const isMultipleMode = mode === 'multiple';\n const isRangeMode = mode === 'range';\n\n const isControlled = selected !== undefined;\n const [internalSelected, setInternalSelected] = useState<typeof selected>();\n\n const selectedValue = isControlled ? selected : internalSelected;\n\n const narrowedSelected = (() => {\n if (isSingleMode) {\n return selectedValue instanceof Date ? selectedValue : undefined;\n }\n if (isMultipleMode) {\n return Array.isArray(selectedValue) ? selectedValue : undefined;\n }\n return isDateRange(selectedValue) ? selectedValue : undefined;\n })();\n\n const selectionProps = { selected: narrowedSelected };\n\n const resolvedLocale = resolveLocale(locale);\n\n const [internalInputValue, setInternalInputValue] = useState<string>('');\n\n const inputValue =\n isControlled && !isSingleMode\n ? formatSelectedForInput(narrowedSelected, locale, mode, dateFormat)\n : internalInputValue;\n\n // const inputValue = isSingleMode\n // ? internalInputValue\n // : formatSelectedForInput(narrowedSelected, locale, mode, dateFormat);\n\n // const inputValue = internalInputValue;\n\n // This ensures that whenever the external selected prop changes, the input field gets updated accordingly\n useEffect(() => {\n if (isSingleMode && isControlled && selected instanceof Date) {\n setInternalInputValue(formatDate(selected, locale, dateFormat));\n }\n }, [selected, isSingleMode, isControlled, locale, dateFormat]);\n\n const notifySelectChange = (value: typeof selected, modifiers: Modifiers) => {\n if (isSingleProps(props) && props.onSelectChange) {\n props.onSelectChange(value as SingleModeProps['selected'], modifiers);\n return;\n }\n\n if (isMultipleProps(props) && props.onSelectChange) {\n props.onSelectChange(value as MultipleModeProps['selected'], modifiers);\n return;\n }\n\n if (isRangeProps(props) && props.onSelectChange) {\n props.onSelectChange(value as RangeModeProps['selected'], modifiers);\n }\n };\n\n const handleInputChange = (newValue: string) => doHandleInputValue(newValue);\n const handleInputChangeNative = (event: any) => doHandleInputValue(event.currentTarget.value);\n\n const debouncedParseInput = useRef(\n debounce((rawValue: string) => {\n const parsed = parseDateString(rawValue, locale);\n console.log(parsed);\n const isValid = !!parsed;\n\n setInternalSelected(parsed as typeof props.selected);\n\n if (isSingleMode && 'onInputChange' in props && props.onInputChange) {\n props.onInputChange(rawValue, parsed, isValid);\n }\n\n const shouldNotify = parsed !== undefined || rawValue === '';\n if (shouldNotify) {\n // parse to desired dateFormat for use on outside\n const formattedSelected = dateFormat ? parseDateString(rawValue, locale, dateFormat) : parsed;\n notifySelectChange(formattedSelected as typeof selected, {});\n }\n }, 300)\n ).current;\n\n const doHandleInputValue = (rawValue: string) => {\n // const parsed = parseDateString(rawValue, locale, dateFormat);\n\n // const isValid = !!parsed;\n\n // if (!isControlled) {\n // // && isValidDate(parsed); // TODO: optional second validation\n\n // setInternalInputValue(rawValue);\n // setInternalSelected(parsed as typeof props.selected);\n // } else if (isSingleMode) {\n // setInternalInputValue(rawValue);\n // }\n\n // if (isSingleMode && 'onInputChange' in props && props.onInputChange) {\n // props.onInputChange(rawValue, parsed, isValid);\n // }\n\n // const shouldNotify = parsed !== undefined || rawValue === '';\n // if (shouldNotify) {\n // onSelectChange(parsed as typeof selected, {});\n // }\n\n setInternalInputValue(rawValue); // always update input state\n debouncedParseInput(rawValue); // defer parsing & callback execution\n };\n\n const keyboardRef = useRef(false);\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n // Do not close the dropdown on input blur when the user selects something inside the dropdown itself\n const nextFocused = event.relatedTarget as Node | null;\n const focusInsideDropdown = nextFocused && popperElementRef.current?.contains(nextFocused);\n if (isDropdownOpen && !focusInsideDropdown) {\n closePopper();\n }\n\n if (!isSingleMode) {\n return;\n }\n\n const parsed = parseDateString(internalInputValue, locale, dateFormat);\n\n if (parsed && isValid(parsed)) {\n setInternalSelected(parsed as typeof selected);\n notifySelectChange(parsed as typeof selected, {});\n setInternalInputValue(formatDate(parsed, locale, dateFormat));\n }\n };\n\n const handleOnInputFocus = () => {\n if (!isDropdownOpen) {\n openPopper();\n }\n };\n\n const handleInputKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // Workaround to figure out if the user navigates via keyboard\n if (event.key === 'Tab') {\n keyboardRef.current = true;\n }\n\n if (event.key !== 'Enter') {\n return;\n }\n // In case the dropdown is not open but the input is focused, open the dropdown on enter\n if (!isDropdownOpen) {\n handleInputClick();\n return;\n }\n // In case the dropdown is open, the input is focused and the prop allows it, close the dropdown\n if (isDropdownOpen && closeOnSelect) {\n notifySelectChange(narrowedSelected as typeof selected, {});\n closePopper();\n }\n };\n\n const handleSelectedChange = (newValue: typeof selected) => {\n if (!isControlled) {\n setInternalSelected(newValue);\n }\n };\n\n const handleClearSelection = () => {\n handleInputChange('');\n handleSelectedChange(undefined as typeof selected);\n setInternalInputValue('');\n\n if (isControlled) {\n setInternalSelected(undefined);\n }\n\n if (isRangeMode && 'onChange' in props && props.onChange) {\n props.onChange(undefined);\n }\n\n notifySelectChange(undefined as typeof selected, {});\n };\n\n const handleDaySelect: OnSelectHandler<typeof selected> = (selected, triggerDate, modifiers, event) => {\n // safe because of discriminated union\n handleSelectedChange(selected as typeof selected);\n\n // trigger callback\n notifySelectChange(selected, modifiers);\n\n if (isSingleMode && !isControlled) {\n // should be the only place formatting is applied to the input\n setInternalInputValue(formatDate(selected as Date, locale, dateFormat));\n }\n\n if (keyboardRef.current) {\n // Note: When the date is selected via enter key, assume the user uses keyboard navigation.\n // In this case the input should be focused to allow to tab to another element in his form.\n // However, it is not possible to detect according to the event since the event.type is alway \"click\".\n // Instead we check if the user used the tab key to focus the day picker.\n inputRef?.current?.focus();\n }\n\n if (closeOnSelect) {\n closePopper();\n keyboardRef.current = false;\n }\n };\n\n const {\n isOpen: isDropdownOpen,\n open: openPopper,\n close: closePopper,\n referenceRef: popperRef,\n popperElementRef: setPopperElement,\n popperStyles,\n popperAttributes,\n } = usePopperDropdown({ placement: alignRight ? 'bottom-end' : 'bottom-start' });\n\n const inputRef = useRef<HTMLInputElement>(null);\n const popperElementRef = useRef<HTMLElement | null>(null);\n\n const assignPopperElement = (element: HTMLElement | null) => {\n popperElementRef.current = element;\n setPopperElement(element);\n };\n\n // Close the dropdown when clicking outside the dropdown wrapper.\n // It also checks if the click happened into the input, in which case the\n // dropdown will remain open.\n const outsideRef = useClickOutside(\n event => {\n const target = event.target as Node | null;\n if (!target) {\n closePopper();\n return;\n }\n\n const clickedWithinTrigger = popperRef.current?.contains(target);\n const clickedWithinInput = inputRef.current?.contains(target);\n\n if (clickedWithinTrigger || clickedWithinInput) {\n return;\n }\n\n closePopper();\n },\n undefined,\n isDropdownOpen\n );\n\n const handleInputClick = () => {\n openPopper();\n inputRef.current?.focus();\n };\n\n // Needed to select all tabbable elements inside the dropdown calendar and to disable the\n // focus on tab for all of these. This allows the user to tab between multiple inputs on the page\n // or when having two day pickers side by side. Tabbing from one day picker input to the other will\n // open and close the dropdown respectively and achieving the same usability as the old DatePicker.\n // useEffect(() => {\n // if (isDropdownOpen && outsideRef.current) {\n // // get all buttons to disable the tab on them\n // const tabbableElements = (outsideRef.current as HTMLElement).querySelectorAll<HTMLElement>(\n // 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n // );\n\n // tabbableElements.forEach((element: Element) => {\n // element.setAttribute('tabindex', '-1');\n // });\n // }\n // }, [isDropdownOpen, outsideRef]);\n\n // Close the dropdown when it is open and when the user presses the \"escape\" key\n useKey('Escape', event => {\n const target = event.target;\n const isInput = inputRef.current && inputRef.current === target;\n\n if (isInput && isDropdownOpen) {\n closePopper();\n }\n });\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isDropdownOpen || !outsideRef.current) {\n return;\n }\n\n if (event.key === 'Tab') {\n const focusedInside = outsideRef.current.contains(document.activeElement);\n if (focusedInside) {\n keyboardRef.current = true;\n console.log('User tabbed into dropdown');\n // Optional: closePopper(); or focus inputRef.current\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isDropdownOpen]);\n\n const dayPickerClassName = `DayPicker ${bsSize === 'sm' ? 'margin-10' : 'margin-15'} ${bsSize}`;\n\n if (inline) {\n // Render day picker inline without a dropdown and an input\n return (\n <div className={`display-flex flex-column justify-content-between ${className}`}>\n <ReactDayPicker\n {...selectionProps}\n mode={mode as any}\n defaultMonth={defaultMonth}\n locale={resolvedLocale}\n onSelect={handleDaySelect}\n captionLayout='dropdown'\n animate\n navLayout='around'\n startMonth={startMonth}\n endMonth={endMonth}\n showOutsideDays={showOutsideDays}\n fixedWeeks={fixedWeeks}\n className={dayPickerClassName}\n />\n {footer ? <div className='padding-15'>{footer}</div> : <div />}\n </div>\n );\n }\n\n const clearableInputProps = {\n ...inputProps,\n readOnly: !isSingleMode,\n style: {\n background: 'var(--color-white)',\n ...(inputProps?.style ?? {}),\n },\n };\n\n return (\n <>\n <div ref={popperRef} className={`form-group ${className}`}>\n <div className='input-group'>\n <span className='input-group-addon' onClick={handleInputClick}>\n <span className='rioglyph rioglyph-calendar' aria-hidden='true' />\n </span>\n {isClearable && (\n <ClearableInput\n id={id}\n autoComplete='off'\n placeholder={placeholder}\n {...clearableInputProps}\n type='text'\n value={inputValue}\n onChange={handleInputChange}\n onClick={handleInputClick}\n onClear={handleClearSelection}\n onBlur={handleInputBlur}\n onFocus={handleOnInputFocus}\n onKeyPress={handleInputKeyPress}\n // hasError={hasError}\n ref={inputRef}\n inputClassName={inputClassName}\n />\n )}\n {!isClearable && (\n <input\n id={id}\n size={12}\n type='text'\n autoComplete='off'\n placeholder={placeholder}\n {...inputProps}\n value={inputValue}\n onChange={handleInputChangeNative}\n onClick={handleInputClick}\n onBlur={handleInputBlur}\n onFocus={handleOnInputFocus}\n onKeyDown={handleInputKeyPress}\n ref={inputRef}\n readOnly={!isSingleMode}\n className={classNames('ClearableInput form-control bg-white', inputClassName)}\n />\n )}\n </div>\n </div>\n {isDropdownOpen && (\n <div\n style={popperStyles}\n className='DayPickerPopover z-index-max bg-white shadow-default rounded margin-y-3 border'\n {...popperAttributes}\n ref={assignPopperElement}\n role='dialog'\n aria-label='DayPicker calendar'\n >\n <div ref={outsideRef} className='display-flex flex-column justify-content-between'>\n <ReactDayPicker\n {...selectionProps}\n mode={mode as any}\n defaultMonth={defaultMonth}\n locale={resolvedLocale}\n onSelect={handleDaySelect}\n captionLayout='dropdown'\n animate\n navLayout='around'\n startMonth={startMonth}\n endMonth={endMonth}\n showOutsideDays={showOutsideDays}\n fixedWeeks={fixedWeeks}\n className={dayPickerClassName}\n />\n {footer ? <div className='padding-15'>{footer}</div> : <div />}\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst isDateRange = (value: unknown): value is DateRange => {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const range = value as DateRange;\n\n const fromIsValid = range.from === undefined || range.from instanceof Date;\n const toIsValid = range.to === undefined || range.to instanceof Date;\n\n return fromIsValid && toIsValid;\n};\n\nconst resolveLocale = (localeCode: string): Locale => {\n const baseCode = localeCode.split('-')[0]; // 'de-DE' → 'de'\n return (\n (locales as Record<string, Locale>)[baseCode] || (locales as Record<string, Locale>)[localeCode] || locales.enGB\n );\n};\n\nconst formatDate = (date: Date | undefined, localeCode: string, dateFormat?: string): string => {\n if (!date) {\n return '';\n }\n\n if (dateFormat) {\n return format(date, dateFormat); // use override\n }\n\n // fallback to locale-based formatting\n return new Intl.DateTimeFormat(localeCode).format(date);\n};\n\nconst formatSelectedForInput = (\n selected: unknown,\n localeCode: string,\n mode: 'single' | 'multiple' | 'range',\n dateFormat?: string\n): string => {\n if (!selected) {\n return '';\n }\n\n const formatFn = (date: Date) =>\n dateFormat ? format(date, dateFormat) : new Intl.DateTimeFormat(localeCode).format(date);\n\n if (mode === 'single' && selected instanceof Date) {\n return formatFn(selected);\n }\n\n if (mode === 'multiple' && Array.isArray(selected)) {\n return selected.map(formatFn).join(', ');\n }\n\n if (mode === 'range' && typeof selected === 'object' && 'from' in selected) {\n const { from, to } = selected as { from?: Date; to?: Date };\n if (!from || !to) {\n return '';\n }\n return [from, to].filter(Boolean).map(formatFn).join(' – ');\n }\n\n return '';\n};\n\nconst localeFormatMap: Record<string, string> = {\n 'bg-BG': 'dd.MM.yyyy',\n 'cs-CZ': 'dd.MM.yyyy',\n 'da-DK': 'dd-MM-yyyy',\n 'de-DE': 'dd.MM.yyyy',\n 'el-GR': 'dd/MM/yyyy',\n 'en-GB': 'dd/MM/yyyy',\n 'es-ES': 'dd/MM/yyyy',\n 'et-EE': 'dd.MM.yyyy',\n 'fi-FI': 'dd.MM.yyyy',\n 'fr-FR': 'dd/MM/yyyy',\n 'hr-HR': 'dd.MM.yyyy',\n 'hu-HU': 'yyyy. MM. dd.',\n 'it-IT': 'dd/MM/yyyy',\n 'lt-LT': 'dd-MM-yyyy',\n 'lv-LV': 'dd.MM.yyyy',\n 'nb-NO': 'dd.MM.yyyy',\n 'nl-NL': 'dd-MM-yyyy',\n 'pl-PL': 'dd.MM.yyyy',\n 'pt-BR': 'dd/MM/yyyy',\n 'pt-PT': 'dd/MM/yyyy',\n 'ro-RO': 'dd.MM.yyyy',\n 'sk-SK': 'dd.MM.yyyy',\n 'sl-SI': 'dd.MM.yyyy',\n 'sv-SE': 'yyyy-MM-dd',\n};\n\nconst getFormatForLocale = (localeCode: string, fallback = 'yyyy-MM-dd'): string => {\n return localeFormatMap[localeCode] || fallback;\n};\n\nconst parseDateString = (value: string | undefined, localeCode: string, dateFormat?: string): Date | undefined => {\n if (!value) {\n return undefined;\n }\n\n const formatToUse = dateFormat || getFormatForLocale(localeCode, dateFormat);\n const parsed = parse(value, formatToUse, new Date());\n\n return isValid(parsed) ? parsed : undefined;\n};\n\nexport default DayPicker;\n"],"names":["isSingleProps","props","isMultipleProps","isRangeProps","DayPicker","id","selected","inputProps","alignRight","bsSize","locale","footer","inline","showOutsideDays","fixedWeeks","mode","dateFormat","placeholder","isClearable","closeOnSelect","defaultMonth","startMonth","endMonth","inputClassName","className","isSingleMode","isMultipleMode","isRangeMode","isControlled","internalSelected","setInternalSelected","useState","selectedValue","narrowedSelected","isDateRange","selectionProps","resolvedLocale","resolveLocale","internalInputValue","setInternalInputValue","inputValue","formatSelectedForInput","useEffect","formatDate","notifySelectChange","value","modifiers","handleInputChange","newValue","doHandleInputValue","handleInputChangeNative","event","debouncedParseInput","useRef","debounce","rawValue","parsed","parseDateString","isValid","formattedSelected","keyboardRef","handleInputBlur","nextFocused","focusInsideDropdown","popperElementRef","isDropdownOpen","closePopper","handleOnInputFocus","openPopper","handleInputKeyPress","handleInputClick","handleSelectedChange","handleClearSelection","handleDaySelect","triggerDate","inputRef","popperRef","setPopperElement","popperStyles","popperAttributes","usePopperDropdown","assignPopperElement","element","outsideRef","useClickOutside","target","clickedWithinTrigger","clickedWithinInput","useKey","handleKeyDown","dayPickerClassName","jsxs","jsx","ReactDayPicker","clearableInputProps","Fragment","ClearableInput","classNames","range","fromIsValid","toIsValid","localeCode","baseCode","locales","date","format","formatFn","from","to","localeFormatMap","getFormatForLocale","fallback","formatToUse","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DayPicker.js","sources":["../../../src/components/datepicker/DayPicker.tsx"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\nimport { DayPicker as ReactDayPicker } from 'react-day-picker';\nimport { format, isValid, parse, type Locale } from 'date-fns';\nimport * as locales from 'date-fns/locale';\nimport { debounce } from 'es-toolkit/function';\n\nimport 'react-day-picker/dist/style.css';\n\nimport useClickOutside from '../../hooks/useClickOutside';\nimport usePopperDropdown from '../../hooks/usePopperDropdown';\nimport useKey from '../../hooks/useKey';\nimport ClearableInput from '../clearableInput/ClearableInput';\nimport classNames from '../../utils/classNames';\n\n// Features\n// [ ] input parsing and error handling\n// [-] time picker -> use a dedicated time picker input next to the day picker\n// [-] time range callback + validation\n// [ ] wrap all react-day-picker callbacks to avoid exposing internals and types\n// [x] start/end month\n// [ ] reserved days / unselectable days\n// [ ] disable editable input - use selected date only\n// [x] disallow editing input for mode: \"multi\" and \"range\" since input contains custom value\n// [ ] modifier and modifiersStyles\n// [x] closeOnSelect\n// [x] enter confirms the manual input and closes the dropdown\n// [x] esc closed the dropdown\n// [ ] support different sizes\n// [ ] mandatory value\n// [x] avoid opening dropdown again when clicking inside the input\n// [x] clear inputs\n// [ ] tab should select elements inside the dropdown, select should close but keep focus on input\n\nexport type DateRange = {\n from?: Date | undefined;\n to?: Date | undefined;\n};\n\nexport type Modifiers = Record<string, boolean>;\n\nexport type OnSelectHandler<T> = (\n selected: T,\n triggerDate: Date,\n modifiers: Modifiers,\n event: React.MouseEvent | React.KeyboardEvent\n) => void;\n\n// - By default, don't show a time picker\n// - Handle given formats like \"2020-04-04\" or ISO dates \"2020-03-12T16:20:44.193Z\" as initialValue - really?\n\ntype CommonProps = Omit<React.HTMLProps<HTMLInputElement>, 'onChange' | 'value' | 'selected'> & {\n id?: string;\n locale?: string;\n closeOnSelect?: boolean;\n initialValue?: Date;\n inputProps?: Omit<React.HTMLProps<HTMLInputElement>, 'type' | 'defaultValue' | 'children'>;\n\n /**\n * Custom format string (e.g., 'yyyy-MM-dd') to override locale-based formatting.\n * If omitted, locale-based display is used for the input.\n */\n dateFormat?: string;\n\n alignRight?: boolean;\n isClearable?: boolean;\n minWidth?: number;\n mandatory?: boolean;\n bsSize?: 'sm' | 'md' | 'lg' | 'xl';\n footer?: React.ReactNode;\n inline?: boolean;\n placeholder?: string | React.ReactElement;\n\n inputClassName?: string;\n className?: string;\n\n // react-day-picker props\n showOutsideDays?: boolean;\n fixedWeeks?: boolean;\n defaultMonth?: Date;\n startMonth?: Date;\n endMonth?: Date;\n};\n\ntype SingleModeProps = CommonProps & {\n mode?: 'single';\n selected?: Date;\n onInputChange?: (rawValue: string, parsedDate: Date | undefined, isValid: boolean) => void;\n onSelectChange?: (value: Date | undefined, modifiers: Modifiers) => void;\n};\n\ntype MultipleModeProps = CommonProps & {\n mode: 'multiple';\n selected?: Date[];\n onSelectChange?: (value: Date[] | undefined, modifiers: Modifiers) => void;\n};\n\ntype RangeModeProps = CommonProps & {\n mode: 'range';\n selected?: DateRange;\n onChange?: (value: DateRange | undefined) => void;\n onSelectChange?: (value: DateRange | undefined, modifiers: Modifiers) => void;\n};\n\ntype DayPickerProps = SingleModeProps | MultipleModeProps | RangeModeProps;\n\nconst isSingleProps = (props: DayPickerProps): props is SingleModeProps => !props.mode || props.mode === 'single';\nconst isMultipleProps = (props: DayPickerProps): props is MultipleModeProps => props.mode === 'multiple';\nconst isRangeProps = (props: DayPickerProps): props is RangeModeProps => props.mode === 'range';\n\nconst DayPicker = (props: DayPickerProps) => {\n const {\n id,\n selected,\n inputProps = {},\n alignRight,\n bsSize = '',\n locale = 'en-GB',\n footer,\n inline,\n showOutsideDays = true,\n fixedWeeks = true,\n mode = 'single',\n dateFormat,\n placeholder,\n isClearable = false,\n closeOnSelect = true,\n defaultMonth,\n startMonth,\n endMonth,\n inputClassName,\n className,\n } = props;\n\n const isSingleMode = mode === 'single';\n const isMultipleMode = mode === 'multiple';\n const isRangeMode = mode === 'range';\n\n const isControlled = selected !== undefined;\n const [internalSelected, setInternalSelected] = useState<typeof selected>();\n\n const selectedValue = isControlled ? selected : internalSelected;\n\n const narrowedSelected = (() => {\n if (isSingleMode) {\n return selectedValue instanceof Date ? selectedValue : undefined;\n }\n if (isMultipleMode) {\n return Array.isArray(selectedValue) ? selectedValue : undefined;\n }\n return isDateRange(selectedValue) ? selectedValue : undefined;\n })();\n\n const selectionProps = { selected: narrowedSelected };\n\n const resolvedLocale = resolveLocale(locale);\n\n const [internalInputValue, setInternalInputValue] = useState<string>('');\n\n const inputValue =\n isControlled && !isSingleMode\n ? formatSelectedForInput(narrowedSelected, locale, mode, dateFormat)\n : internalInputValue;\n\n // const inputValue = isSingleMode\n // ? internalInputValue\n // : formatSelectedForInput(narrowedSelected, locale, mode, dateFormat);\n\n // const inputValue = internalInputValue;\n\n // This ensures that whenever the external selected prop changes, the input field gets updated accordingly\n useEffect(() => {\n if (isSingleMode && isControlled && selected instanceof Date) {\n setInternalInputValue(formatDate(selected, locale, dateFormat));\n }\n }, [selected, isSingleMode, isControlled, locale, dateFormat]);\n\n const notifySelectChange = (value: typeof selected, modifiers: Modifiers) => {\n if (isSingleProps(props) && props.onSelectChange) {\n props.onSelectChange(value as SingleModeProps['selected'], modifiers);\n return;\n }\n\n if (isMultipleProps(props) && props.onSelectChange) {\n props.onSelectChange(value as MultipleModeProps['selected'], modifiers);\n return;\n }\n\n if (isRangeProps(props) && props.onSelectChange) {\n props.onSelectChange(value as RangeModeProps['selected'], modifiers);\n }\n };\n\n const handleInputChange = (newValue: string) => doHandleInputValue(newValue);\n const handleInputChangeNative = (event: any) => doHandleInputValue(event.currentTarget.value);\n\n const debouncedParseInput = useRef(\n debounce((rawValue: string) => {\n const parsed = parseDateString(rawValue, locale);\n console.log(parsed);\n const isValid = !!parsed;\n\n setInternalSelected(parsed as typeof props.selected);\n\n if (isSingleMode && 'onInputChange' in props && props.onInputChange) {\n props.onInputChange(rawValue, parsed, isValid);\n }\n\n const shouldNotify = parsed !== undefined || rawValue === '';\n if (shouldNotify) {\n // parse to desired dateFormat for use on outside\n const formattedSelected = dateFormat ? parseDateString(rawValue, locale, dateFormat) : parsed;\n notifySelectChange(formattedSelected as typeof selected, {});\n }\n }, 300)\n ).current;\n\n const doHandleInputValue = (rawValue: string) => {\n // const parsed = parseDateString(rawValue, locale, dateFormat);\n\n // const isValid = !!parsed;\n\n // if (!isControlled) {\n // // && isValidDate(parsed); // TODO: optional second validation\n\n // setInternalInputValue(rawValue);\n // setInternalSelected(parsed as typeof props.selected);\n // } else if (isSingleMode) {\n // setInternalInputValue(rawValue);\n // }\n\n // if (isSingleMode && 'onInputChange' in props && props.onInputChange) {\n // props.onInputChange(rawValue, parsed, isValid);\n // }\n\n // const shouldNotify = parsed !== undefined || rawValue === '';\n // if (shouldNotify) {\n // onSelectChange(parsed as typeof selected, {});\n // }\n\n setInternalInputValue(rawValue); // always update input state\n debouncedParseInput(rawValue); // defer parsing & callback execution\n };\n\n const keyboardRef = useRef(false);\n\n const handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n // Do not close the dropdown on input blur when the user selects something inside the dropdown itself\n const nextFocused = event.relatedTarget as Node | null;\n const focusInsideDropdown = nextFocused && popperElementRef.current?.contains(nextFocused);\n if (isDropdownOpen && !focusInsideDropdown) {\n closePopper();\n }\n\n if (!isSingleMode) {\n return;\n }\n\n const parsed = parseDateString(internalInputValue, locale, dateFormat);\n\n if (parsed && isValid(parsed)) {\n setInternalSelected(parsed as typeof selected);\n notifySelectChange(parsed as typeof selected, {});\n setInternalInputValue(formatDate(parsed, locale, dateFormat));\n }\n };\n\n const handleOnInputFocus = () => {\n if (!isDropdownOpen) {\n openPopper();\n }\n };\n\n const handleInputKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n // Workaround to figure out if the user navigates via keyboard\n if (event.key === 'Tab') {\n keyboardRef.current = true;\n }\n\n if (event.key !== 'Enter') {\n return;\n }\n // In case the dropdown is not open but the input is focused, open the dropdown on enter\n if (!isDropdownOpen) {\n handleInputClick();\n return;\n }\n // In case the dropdown is open, the input is focused and the prop allows it, close the dropdown\n if (isDropdownOpen && closeOnSelect) {\n notifySelectChange(narrowedSelected as typeof selected, {});\n closePopper();\n }\n };\n\n const handleSelectedChange = (newValue: typeof selected) => {\n if (!isControlled) {\n setInternalSelected(newValue);\n }\n };\n\n const handleClearSelection = () => {\n handleInputChange('');\n handleSelectedChange(undefined as typeof selected);\n setInternalInputValue('');\n\n if (isControlled) {\n setInternalSelected(undefined);\n }\n\n if (isRangeMode && 'onChange' in props && props.onChange) {\n props.onChange(undefined);\n }\n\n notifySelectChange(undefined as typeof selected, {});\n };\n\n const handleDaySelect: OnSelectHandler<typeof selected> = (selected, triggerDate, modifiers, event) => {\n // safe because of discriminated union\n handleSelectedChange(selected as typeof selected);\n\n // trigger callback\n notifySelectChange(selected, modifiers);\n\n if (isSingleMode && !isControlled) {\n // should be the only place formatting is applied to the input\n setInternalInputValue(formatDate(selected as Date, locale, dateFormat));\n }\n\n if (keyboardRef.current) {\n // Note: When the date is selected via enter key, assume the user uses keyboard navigation.\n // In this case the input should be focused to allow to tab to another element in his form.\n // However, it is not possible to detect according to the event since the event.type is alway \"click\".\n // Instead we check if the user used the tab key to focus the day picker.\n inputRef?.current?.focus();\n }\n\n if (closeOnSelect) {\n closePopper();\n keyboardRef.current = false;\n }\n };\n\n const {\n isOpen: isDropdownOpen,\n open: openPopper,\n close: closePopper,\n referenceRef: popperRef,\n popperElementRef: setPopperElement,\n popperStyles,\n popperAttributes,\n } = usePopperDropdown({ placement: alignRight ? 'bottom-end' : 'bottom-start' });\n\n const inputRef = useRef<HTMLInputElement>(null);\n const popperElementRef = useRef<HTMLElement | null>(null);\n\n const assignPopperElement = (element: HTMLElement | null) => {\n popperElementRef.current = element;\n setPopperElement(element);\n };\n\n // Close the dropdown when clicking outside the dropdown wrapper.\n // It also checks if the click happened into the input, in which case the\n // dropdown will remain open.\n const outsideRef = useClickOutside(\n event => {\n const target = event.target as Node | null;\n if (!target) {\n closePopper();\n return;\n }\n\n const clickedWithinTrigger = popperRef.current?.contains(target);\n const clickedWithinInput = inputRef.current?.contains(target);\n\n if (clickedWithinTrigger || clickedWithinInput) {\n return;\n }\n\n closePopper();\n },\n undefined,\n isDropdownOpen\n );\n\n const handleInputClick = () => {\n openPopper();\n inputRef.current?.focus();\n };\n\n // Needed to select all tabbable elements inside the dropdown calendar and to disable the\n // focus on tab for all of these. This allows the user to tab between multiple inputs on the page\n // or when having two day pickers side by side. Tabbing from one day picker input to the other will\n // open and close the dropdown respectively and achieving the same usability as the old DatePicker.\n // useEffect(() => {\n // if (isDropdownOpen && outsideRef.current) {\n // // get all buttons to disable the tab on them\n // const tabbableElements = (outsideRef.current as HTMLElement).querySelectorAll<HTMLElement>(\n // 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n // );\n\n // tabbableElements.forEach((element: Element) => {\n // element.setAttribute('tabindex', '-1');\n // });\n // }\n // }, [isDropdownOpen, outsideRef]);\n\n // Close the dropdown when it is open and when the user presses the \"escape\" key\n useKey('Escape', event => {\n const target = event.target;\n const isInput = inputRef.current && inputRef.current === target;\n\n if (isInput && isDropdownOpen) {\n closePopper();\n }\n });\n\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (!isDropdownOpen || !outsideRef.current) {\n return;\n }\n\n if (event.key === 'Tab') {\n const focusedInside = outsideRef.current.contains(document.activeElement);\n if (focusedInside) {\n keyboardRef.current = true;\n console.log('User tabbed into dropdown');\n // Optional: closePopper(); or focus inputRef.current\n }\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [isDropdownOpen]);\n\n const dayPickerClassName = `DayPicker ${bsSize === 'sm' ? 'margin-10' : 'margin-15'} ${bsSize}`;\n\n if (inline) {\n // Render day picker inline without a dropdown and an input\n return (\n <div className={`display-flex flex-column justify-content-between ${className}`}>\n <ReactDayPicker\n {...selectionProps}\n mode={mode as any}\n defaultMonth={defaultMonth}\n locale={resolvedLocale}\n onSelect={handleDaySelect}\n captionLayout='dropdown'\n animate\n navLayout='around'\n startMonth={startMonth}\n endMonth={endMonth}\n showOutsideDays={showOutsideDays}\n fixedWeeks={fixedWeeks}\n className={dayPickerClassName}\n />\n {footer ? <div className='padding-15'>{footer}</div> : <div />}\n </div>\n );\n }\n\n const clearableInputProps = {\n ...inputProps,\n readOnly: !isSingleMode,\n style: {\n background: 'var(--color-white)',\n ...(inputProps?.style ?? {}),\n },\n };\n\n return (\n <>\n <div ref={popperRef} className={`form-group ${className}`}>\n <div className='input-group'>\n <span className='input-group-addon' onClick={handleInputClick}>\n <span className='rioglyph rioglyph-calendar' aria-hidden='true' />\n </span>\n {isClearable && (\n <ClearableInput\n id={id}\n autoComplete='off'\n placeholder={placeholder}\n {...clearableInputProps}\n type='text'\n value={inputValue}\n onChange={handleInputChange}\n onClick={handleInputClick}\n onClear={handleClearSelection}\n onBlur={handleInputBlur}\n onFocus={handleOnInputFocus}\n onKeyPress={handleInputKeyPress}\n // hasError={hasError}\n ref={inputRef}\n inputClassName={inputClassName}\n />\n )}\n {!isClearable && (\n <input\n id={id}\n size={12}\n type='text'\n autoComplete='off'\n placeholder={placeholder}\n {...inputProps}\n value={inputValue}\n onChange={handleInputChangeNative}\n onClick={handleInputClick}\n onBlur={handleInputBlur}\n onFocus={handleOnInputFocus}\n onKeyDown={handleInputKeyPress}\n ref={inputRef}\n readOnly={!isSingleMode}\n className={classNames('ClearableInput form-control bg-white', inputClassName)}\n />\n )}\n </div>\n </div>\n {isDropdownOpen && (\n <div\n style={popperStyles}\n className='DayPickerPopover z-index-max bg-white shadow-default rounded margin-y-3 border'\n {...popperAttributes}\n ref={assignPopperElement}\n role='dialog'\n aria-label='DayPicker calendar'\n >\n <div ref={outsideRef} className='display-flex flex-column justify-content-between'>\n <ReactDayPicker\n {...selectionProps}\n mode={mode as any}\n defaultMonth={defaultMonth}\n locale={resolvedLocale}\n onSelect={handleDaySelect}\n captionLayout='dropdown'\n animate\n navLayout='around'\n startMonth={startMonth}\n endMonth={endMonth}\n showOutsideDays={showOutsideDays}\n fixedWeeks={fixedWeeks}\n className={dayPickerClassName}\n />\n {footer ? <div className='padding-15'>{footer}</div> : <div />}\n </div>\n </div>\n )}\n </>\n );\n};\n\nconst isDateRange = (value: unknown): value is DateRange => {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n const range = value as DateRange;\n\n const fromIsValid = range.from === undefined || range.from instanceof Date;\n const toIsValid = range.to === undefined || range.to instanceof Date;\n\n return fromIsValid && toIsValid;\n};\n\nconst resolveLocale = (localeCode: string): Locale => {\n const baseCode = localeCode.split('-')[0]; // 'de-DE' → 'de'\n return (\n (locales as Record<string, Locale>)[baseCode] || (locales as Record<string, Locale>)[localeCode] || locales.enGB\n );\n};\n\nconst formatDate = (date: Date | undefined, localeCode: string, dateFormat?: string): string => {\n if (!date) {\n return '';\n }\n\n if (dateFormat) {\n return format(date, dateFormat); // use override\n }\n\n // fallback to locale-based formatting\n return new Intl.DateTimeFormat(localeCode).format(date);\n};\n\nconst formatSelectedForInput = (\n selected: unknown,\n localeCode: string,\n mode: 'single' | 'multiple' | 'range',\n dateFormat?: string\n): string => {\n if (!selected) {\n return '';\n }\n\n const formatFn = (date: Date) =>\n dateFormat ? format(date, dateFormat) : new Intl.DateTimeFormat(localeCode).format(date);\n\n if (mode === 'single' && selected instanceof Date) {\n return formatFn(selected);\n }\n\n if (mode === 'multiple' && Array.isArray(selected)) {\n return selected.map(formatFn).join(', ');\n }\n\n if (mode === 'range' && typeof selected === 'object' && 'from' in selected) {\n const { from, to } = selected as { from?: Date; to?: Date };\n if (!from || !to) {\n return '';\n }\n return [from, to].filter(Boolean).map(formatFn).join(' – ');\n }\n\n return '';\n};\n\nconst localeFormatMap: Record<string, string> = {\n 'bg-BG': 'dd.MM.yyyy',\n 'cs-CZ': 'dd.MM.yyyy',\n 'da-DK': 'dd-MM-yyyy',\n 'de-DE': 'dd.MM.yyyy',\n 'el-GR': 'dd/MM/yyyy',\n 'en-GB': 'dd/MM/yyyy',\n 'es-ES': 'dd/MM/yyyy',\n 'et-EE': 'dd.MM.yyyy',\n 'fi-FI': 'dd.MM.yyyy',\n 'fr-FR': 'dd/MM/yyyy',\n 'hr-HR': 'dd.MM.yyyy',\n 'hu-HU': 'yyyy. MM. dd.',\n 'it-IT': 'dd/MM/yyyy',\n 'lt-LT': 'dd-MM-yyyy',\n 'lv-LV': 'dd.MM.yyyy',\n 'nb-NO': 'dd.MM.yyyy',\n 'nl-NL': 'dd-MM-yyyy',\n 'pl-PL': 'dd.MM.yyyy',\n 'pt-BR': 'dd/MM/yyyy',\n 'pt-PT': 'dd/MM/yyyy',\n 'ro-RO': 'dd.MM.yyyy',\n 'sk-SK': 'dd.MM.yyyy',\n 'sl-SI': 'dd.MM.yyyy',\n 'sv-SE': 'yyyy-MM-dd',\n};\n\nconst getFormatForLocale = (localeCode: string, fallback = 'yyyy-MM-dd'): string =>\n localeFormatMap[localeCode] || fallback;\n\nconst parseDateString = (value: string | undefined, localeCode: string, dateFormat?: string): Date | undefined => {\n if (!value) {\n return;\n }\n\n const formatToUse = dateFormat || getFormatForLocale(localeCode, dateFormat);\n const parsed = parse(value, formatToUse, new Date());\n\n return isValid(parsed) ? parsed : undefined;\n};\n\nexport default DayPicker;\n"],"names":["isSingleProps","props","isMultipleProps","isRangeProps","DayPicker","id","selected","inputProps","alignRight","bsSize","locale","footer","inline","showOutsideDays","fixedWeeks","mode","dateFormat","placeholder","isClearable","closeOnSelect","defaultMonth","startMonth","endMonth","inputClassName","className","isSingleMode","isMultipleMode","isRangeMode","isControlled","internalSelected","setInternalSelected","useState","selectedValue","narrowedSelected","isDateRange","selectionProps","resolvedLocale","resolveLocale","internalInputValue","setInternalInputValue","inputValue","formatSelectedForInput","useEffect","formatDate","notifySelectChange","value","modifiers","handleInputChange","newValue","doHandleInputValue","handleInputChangeNative","event","debouncedParseInput","useRef","debounce","rawValue","parsed","parseDateString","isValid","formattedSelected","keyboardRef","handleInputBlur","nextFocused","focusInsideDropdown","popperElementRef","isDropdownOpen","closePopper","handleOnInputFocus","openPopper","handleInputKeyPress","handleInputClick","handleSelectedChange","handleClearSelection","handleDaySelect","triggerDate","inputRef","popperRef","setPopperElement","popperStyles","popperAttributes","usePopperDropdown","assignPopperElement","element","outsideRef","useClickOutside","target","clickedWithinTrigger","clickedWithinInput","useKey","handleKeyDown","dayPickerClassName","jsxs","jsx","ReactDayPicker","clearableInputProps","Fragment","ClearableInput","classNames","range","fromIsValid","toIsValid","localeCode","baseCode","locales","date","format","formatFn","from","to","localeFormatMap","getFormatForLocale","fallback","formatToUse","parse"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.js","sources":["../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import React, { useState, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { noop } from 'es-toolkit/function';\nimport { AnimatePresence, type AnimationDefinition, motion, type Transition, useReducedMotion } from 'motion/react';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useEsc from '../../hooks/useEsc';\nimport DialogHeader from './DialogHeader';\nimport DialogBody from './DialogBody';\nimport DialogFooter from './DialogFooter';\nimport useFocusTrap from '../../hooks/useFocusTrap';\nimport { DialogContextProvider } from './dialogContext';\n\nconst MODAL_DIALOG_CLASS = 'modal-dialog';\nconst MODAL_OPEN_CLASS = 'modal-open';\n\nexport type DialogSize =\n | 'xs'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | 'full'\n | 'fullwidth'\n | 'fullheight'\n | 'fullheight-lg'\n | 'fullheight-xl'\n | 'fullscreen';\n\nexport type BaseDialogProps = {\n /**\n * Opens the dialog when set to `true`.\n *\n * @default false\n */\n show: boolean;\n\n /**\n * The dialog title (can also be a FormattedMessage component).\n */\n title?: React.ReactNode;\n\n /**\n * The dialog header subtitle content.\n */\n subtitle?: React.ReactNode;\n\n /**\n * Shows a close button when set to `true`.\n *\n * @default true\n */\n showCloseButton?: boolean;\n\n /**\n * A callback function invoked when the dialog closes.\n */\n onClose?: () => void;\n\n /**\n * Defined how large the dialog will be rendered.\n *\n * By default, the dialog has a medium size, and thus it can be omitted.\n *\n * Possible values are:\n *\n * - `'xs'`\n * - `'sm'`\n * - `'lg'`\n * - `'xl'`\n * - `'fullwidth'`\n * - `'fullheight'`\n * - `'fullheight-lg'`\n * - `'fullheight-xl'`\n * - `'fullscreen'`\n *\n * @default 'md'\n */\n bsSize?: DialogSize;\n\n /**\n * Enables or disabled closing the dialog via esc key.\n *\n * @default false\n */\n disableEsc?: boolean;\n\n /**\n * Enables the modal body to overflow and use inline scrolling if needed.\n *\n * @default false\n */\n useOverflow?: boolean;\n\n /**\n * Show Header and Footer Borders for the \"xs\" dialog\n *\n * @default false\n */\n showXsDialogBorders?: boolean;\n\n /**\n * Additional classes for the modal element.\n */\n className?: string;\n};\n\nexport type DialogProps = BaseDialogProps & {\n /**\n * The dialog body content.\n */\n body?: React.ReactNode;\n\n /**\n * The dialog body content.\n */\n footer?: React.ReactNode;\n\n /**\n * Additional classes for the modal-body element.\n */\n bodyClassName?: string;\n\n /**\n * Additional classes for the modal-footer element.\n */\n footerClassName?: string;\n\n /**\n * Allows to add additional buttons to the dialog header.\n */\n headerButtons?: React.ReactNode;\n\n /**\n * A callback fired when esc key is pressed and the dialog is about to close.\n */\n onEsc?: VoidFunction;\n\n /**\n * A callback function to be executed before closing the dialog.\n *\n * If the function returns `false`, the dialog will not be closed\n *\n * @default () => true\n */\n onCloseValidation?: () => boolean;\n};\n\nconst Dialog = (props: PropsWithChildren<DialogProps>) => {\n const {\n title,\n subtitle,\n body,\n footer,\n headerButtons,\n className = '',\n bodyClassName,\n footerClassName,\n showXsDialogBorders = false,\n showCloseButton = true,\n useOverflow = false,\n bsSize,\n show = false,\n onClose: onCloseCallback = noop,\n disableEsc = false,\n onEsc = noop,\n onCloseValidation = () => true,\n children,\n ...remainingProps\n } = props;\n\n const [open, setOpen] = useState(show);\n\n const modalRoot = getOrCreatePortalRoot();\n\n const shouldReduceMotion = useReducedMotion();\n\n // Use a setter function for the focus trap as it would not re-render\n // and fails to set the focus listener\n const [focusTrapRef, setFocusTrapRef] = useState<HTMLDivElement | null>(null);\n useFocusTrap(focusTrapRef);\n\n const toggleBodyClass = (add: boolean) => {\n // We need to set a body class to fix the -webkit-overflow-scrolling on safari and iOS\n\n // Remove \"modal-open\" from body only when there is no other dialog in the DOM\n // in order to support multiple dialogs\n const hasOtherDialogs = modalRoot.getElementsByClassName(MODAL_DIALOG_CLASS).length > 1;\n\n if (add) {\n document.body.classList.add(MODAL_OPEN_CLASS);\n } else if (!add && !hasOtherDialogs) {\n document.body.classList.remove(MODAL_OPEN_CLASS);\n }\n };\n\n const handleCloseButton = () => closeDialog(true);\n\n const closeDialog = (usedEscapeKey: boolean) => {\n if (onCloseValidation()) {\n setOpen(false);\n onCloseCallback();\n\n usedEscapeKey && onEsc();\n }\n };\n\n const [previousShow, setPreviousShow] = useState(show);\n if (show !== previousShow) {\n setOpen(show);\n toggleBodyClass(show);\n setPreviousShow(show);\n }\n\n useEsc(() => {\n if (!focusTrapRef) {\n return;\n }\n\n const dialogElement = focusTrapRef;\n const currentActiveElement = document.activeElement;\n\n // Only allow to close the dialog when the focus is inside the dialog\n if (!disableEsc && dialogElement.contains(currentActiveElement)) {\n closeDialog(true);\n }\n });\n\n const handleAnimationComplete = (definition: AnimationDefinition) => {\n // The animation complete callback is invoked too when closing the dialog.\n // For that we check the animation props like the \"opacity\" to skip focusing\n // on the way out when closing the dialog.\n // @ts-expect-error\n if (definition.opacity === 0) {\n return;\n }\n\n const dialogElement = focusTrapRef;\n const currentActiveElement = document.activeElement;\n\n // Set the focus to the dialog if no element inside has focus already. Otherwise, focused\n // elements like inputs would lose their focus to the dialog.\n // Note that in order to focus the dialog itself, the tabindex has to be set on that element\n // IMPORTANT: make sure the dialog has a tabIndex prop\n if (!dialogElement?.contains(currentActiveElement)) {\n dialogElement?.focus();\n }\n };\n\n const modalClasses = classNames('modal', 'show', className);\n\n const isSmallestDialog = bsSize === 'xs';\n\n const hasChildren = !!children;\n\n const modalDialogClasses = classNames(\n MODAL_DIALOG_CLASS,\n useOverflow && 'modal-overflow',\n bsSize === 'xs' && 'modal-xs',\n bsSize === 'sm' && 'modal-sm',\n bsSize === 'lg' && 'modal-lg',\n bsSize === 'xl' && 'modal-xl',\n bsSize === 'full' && 'modal-full-width',\n bsSize === 'fullwidth' && 'modal-full-width',\n bsSize === 'fullheight' && 'modal-full-height',\n bsSize === 'fullheight-lg' && 'modal-full-height modal-lg',\n bsSize === 'fullheight-xl' && 'modal-full-height modal-xl',\n bsSize === 'fullscreen' && 'modal-fullscreen'\n );\n\n const spring: Transition = {\n type: 'spring',\n damping: 33,\n stiffness: 500,\n };\n\n const springXs: Transition = {\n type: 'spring',\n damping: 25,\n stiffness: 400,\n };\n\n return ReactDOM.createPortal(\n <DialogContextProvider\n value={{ onClose: handleCloseButton, isSmallestDialog, showXsDialogBorders, showCloseButton }}\n >\n <AnimatePresence\n // Disable any initial animations on children that\n // are present when the component is first rendered\n initial={false}\n // Only render one component at a time.\n // The exiting component will finish its exit\n // animation before entering component is rendered\n mode='wait'\n >\n {open && (\n <div\n {...remainingProps}\n className={modalClasses}\n role='dialog'\n aria-label='dialog'\n // Make sure it has a tabIndex to focus the dialog so the close on esc works.\n // biome-ignore lint/a11y/noNoninteractiveTabindex: <explanation>\n tabIndex={0}\n >\n <motion.div\n initial={shouldReduceMotion ? false : { opacity: 0, y: '-50%' }}\n animate={\n shouldReduceMotion\n ? { opacity: 1 }\n : { opacity: 1, y: 0, transition: isSmallestDialog ? springXs : spring }\n }\n exit={shouldReduceMotion ? undefined : { opacity: 0, y: '-150%' }}\n transition={\n shouldReduceMotion\n ? { duration: 0 }\n : {\n opacity: { duration: 0.2 },\n y: { duration: 0.3 },\n }\n }\n onAnimationComplete={handleAnimationComplete}\n ref={setFocusTrapRef}\n className={modalDialogClasses}\n role='document'\n // Focus target for keyboard handling after open.\n // biome-ignore lint/a11y/noNoninteractiveTabindex: focusable container\n tabIndex={-1}\n >\n <div className='modal-content'>\n {hasChildren && children}\n {!hasChildren && (\n <>\n {title && (\n <DialogHeader\n title={title}\n subtitle={subtitle}\n headerButtons={headerButtons}\n />\n )}\n {body && <DialogBody className={bodyClassName}>{body}</DialogBody>}\n {footer && <DialogFooter className={footerClassName}>{footer}</DialogFooter>}\n </>\n )}\n </div>\n </motion.div>\n <motion.div\n initial={shouldReduceMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0 }}\n transition={shouldReduceMotion ? { duration: 0 } : { duration: 0.1 }}\n className='modal-backdrop'\n />\n </div>\n )}\n </AnimatePresence>\n </DialogContextProvider>,\n modalRoot\n );\n};\n\nDialog.Title = DialogHeader;\nDialog.Body = DialogBody;\nDialog.Footer = DialogFooter;\n\nDialog.SIZE_XS = 'xs' as const;\nDialog.SIZE_SM = 'sm' as const;\nDialog.SIZE_MD = 'md' as const; // default\nDialog.SIZE_LG = 'lg' as const;\nDialog.SIZE_XL = 'xl' as const;\nDialog.SIZE_FULL = 'full' as const;\nDialog.SIZE_FULL_WIDTH = 'fullwidth' as const;\nDialog.SIZE_FULL_HEIGHT = 'fullheight' as const;\nDialog.SIZE_FULL_HEIGHT_LG = 'fullheight-lg' as const;\nDialog.SIZE_FULL_HEIGHT_XL = 'fullheight-xl' as const;\nDialog.SIZE_FULL_SCREEN = 'fullscreen' as const;\n\nexport default Dialog;\n"],"names":["MODAL_DIALOG_CLASS","MODAL_OPEN_CLASS","Dialog","props","title","subtitle","body","footer","headerButtons","className","bodyClassName","footerClassName","showXsDialogBorders","showCloseButton","useOverflow","bsSize","show","onCloseCallback","noop","disableEsc","onEsc","onCloseValidation","children","remainingProps","open","setOpen","useState","modalRoot","getOrCreatePortalRoot","shouldReduceMotion","useReducedMotion","focusTrapRef","setFocusTrapRef","useFocusTrap","toggleBodyClass","add","hasOtherDialogs","handleCloseButton","closeDialog","usedEscapeKey","previousShow","setPreviousShow","useEsc","dialogElement","currentActiveElement","handleAnimationComplete","definition","modalClasses","classNames","isSmallestDialog","hasChildren","modalDialogClasses","spring","springXs","ReactDOM","jsx","DialogContextProvider","AnimatePresence","jsxs","motion","Fragment","DialogHeader","DialogBody","DialogFooter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dialog.js","sources":["../../../src/components/dialog/Dialog.tsx"],"sourcesContent":["import React, { useState, type PropsWithChildren } from 'react';\nimport ReactDOM from 'react-dom';\nimport { noop } from 'es-toolkit/function';\nimport { AnimatePresence, type AnimationDefinition, motion, type Transition, useReducedMotion } from 'motion/react';\n\nimport classNames from '../../utils/classNames';\nimport { getOrCreatePortalRoot } from '../../utils/portalRoot';\nimport useEsc from '../../hooks/useEsc';\nimport DialogHeader from './DialogHeader';\nimport DialogBody from './DialogBody';\nimport DialogFooter from './DialogFooter';\nimport useFocusTrap from '../../hooks/useFocusTrap';\nimport { DialogContextProvider } from './dialogContext';\n\nconst MODAL_DIALOG_CLASS = 'modal-dialog';\nconst MODAL_OPEN_CLASS = 'modal-open';\n\nexport type DialogSize =\n | 'xs'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | 'full'\n | 'fullwidth'\n | 'fullheight'\n | 'fullheight-lg'\n | 'fullheight-xl'\n | 'fullscreen';\n\nexport type BaseDialogProps = {\n /**\n * Opens the dialog when set to `true`.\n *\n * @default false\n */\n show: boolean;\n\n /**\n * The dialog title (can also be a FormattedMessage component).\n */\n title?: React.ReactNode;\n\n /**\n * The dialog header subtitle content.\n */\n subtitle?: React.ReactNode;\n\n /**\n * Shows a close button when set to `true`.\n *\n * @default true\n */\n showCloseButton?: boolean;\n\n /**\n * A callback function invoked when the dialog closes.\n */\n onClose?: () => void;\n\n /**\n * Defined how large the dialog will be rendered.\n *\n * By default, the dialog has a medium size, and thus it can be omitted.\n *\n * Possible values are:\n *\n * - `'xs'`\n * - `'sm'`\n * - `'lg'`\n * - `'xl'`\n * - `'fullwidth'`\n * - `'fullheight'`\n * - `'fullheight-lg'`\n * - `'fullheight-xl'`\n * - `'fullscreen'`\n *\n * @default 'md'\n */\n bsSize?: DialogSize;\n\n /**\n * Enables or disabled closing the dialog via esc key.\n *\n * @default false\n */\n disableEsc?: boolean;\n\n /**\n * Enables the modal body to overflow and use inline scrolling if needed.\n *\n * @default false\n */\n useOverflow?: boolean;\n\n /**\n * Show Header and Footer Borders for the \"xs\" dialog\n *\n * @default false\n */\n showXsDialogBorders?: boolean;\n\n /**\n * Additional classes for the modal element.\n */\n className?: string;\n};\n\nexport type DialogProps = BaseDialogProps & {\n /**\n * The dialog body content.\n */\n body?: React.ReactNode;\n\n /**\n * The dialog body content.\n */\n footer?: React.ReactNode;\n\n /**\n * Additional classes for the modal-body element.\n */\n bodyClassName?: string;\n\n /**\n * Additional classes for the modal-footer element.\n */\n footerClassName?: string;\n\n /**\n * Allows to add additional buttons to the dialog header.\n */\n headerButtons?: React.ReactNode;\n\n /**\n * A callback fired when esc key is pressed and the dialog is about to close.\n */\n onEsc?: VoidFunction;\n\n /**\n * A callback function to be executed before closing the dialog.\n *\n * If the function returns `false`, the dialog will not be closed\n *\n * @default () => true\n */\n onCloseValidation?: () => boolean;\n};\n\nconst Dialog = (props: PropsWithChildren<DialogProps>) => {\n const {\n title,\n subtitle,\n body,\n footer,\n headerButtons,\n className = '',\n bodyClassName,\n footerClassName,\n showXsDialogBorders = false,\n showCloseButton = true,\n useOverflow = false,\n bsSize,\n show = false,\n onClose: onCloseCallback = noop,\n disableEsc = false,\n onEsc = noop,\n onCloseValidation = () => true,\n children,\n ...remainingProps\n } = props;\n\n const [open, setOpen] = useState(show);\n\n const modalRoot = getOrCreatePortalRoot();\n\n const shouldReduceMotion = useReducedMotion();\n\n // Use a setter function for the focus trap as it would not re-render\n // and fails to set the focus listener\n const [focusTrapRef, setFocusTrapRef] = useState<HTMLDivElement | null>(null);\n useFocusTrap(focusTrapRef);\n\n const toggleBodyClass = (add: boolean) => {\n // We need to set a body class to fix the -webkit-overflow-scrolling on safari and iOS\n\n // Remove \"modal-open\" from body only when there is no other dialog in the DOM\n // in order to support multiple dialogs\n const hasOtherDialogs = modalRoot.getElementsByClassName(MODAL_DIALOG_CLASS).length > 1;\n\n if (add) {\n document.body.classList.add(MODAL_OPEN_CLASS);\n } else if (!add && !hasOtherDialogs) {\n document.body.classList.remove(MODAL_OPEN_CLASS);\n }\n };\n\n const handleCloseButton = () => closeDialog(true);\n\n const closeDialog = (usedEscapeKey: boolean) => {\n if (onCloseValidation()) {\n setOpen(false);\n onCloseCallback();\n\n usedEscapeKey && onEsc();\n }\n };\n\n const [previousShow, setPreviousShow] = useState(show);\n if (show !== previousShow) {\n setOpen(show);\n toggleBodyClass(show);\n setPreviousShow(show);\n }\n\n useEsc(() => {\n if (!focusTrapRef) {\n return;\n }\n\n const dialogElement = focusTrapRef;\n const currentActiveElement = document.activeElement;\n\n // Only allow to close the dialog when the focus is inside the dialog\n if (!disableEsc && dialogElement.contains(currentActiveElement)) {\n closeDialog(true);\n }\n });\n\n const handleAnimationComplete = (definition: AnimationDefinition) => {\n // The animation complete callback is invoked too when closing the dialog.\n // For that we check the animation props like the \"opacity\" to skip focusing\n // on the way out when closing the dialog.\n // @ts-expect-error\n if (definition.opacity === 0) {\n return;\n }\n\n const dialogElement = focusTrapRef;\n const currentActiveElement = document.activeElement;\n\n // Set the focus to the dialog if no element inside has focus already. Otherwise, focused\n // elements like inputs would lose their focus to the dialog.\n // Note that in order to focus the dialog itself, the tabindex has to be set on that element\n // IMPORTANT: make sure the dialog has a tabIndex prop\n if (!dialogElement?.contains(currentActiveElement)) {\n dialogElement?.focus();\n }\n };\n\n const modalClasses = classNames('modal', 'show', className);\n\n const isSmallestDialog = bsSize === 'xs';\n\n const hasChildren = !!children;\n\n const modalDialogClasses = classNames(\n MODAL_DIALOG_CLASS,\n useOverflow && 'modal-overflow',\n bsSize === 'xs' && 'modal-xs',\n bsSize === 'sm' && 'modal-sm',\n bsSize === 'lg' && 'modal-lg',\n bsSize === 'xl' && 'modal-xl',\n bsSize === 'full' && 'modal-full-width',\n bsSize === 'fullwidth' && 'modal-full-width',\n bsSize === 'fullheight' && 'modal-full-height',\n bsSize === 'fullheight-lg' && 'modal-full-height modal-lg',\n bsSize === 'fullheight-xl' && 'modal-full-height modal-xl',\n bsSize === 'fullscreen' && 'modal-fullscreen'\n );\n\n const spring: Transition = {\n type: 'spring',\n damping: 33,\n stiffness: 500,\n };\n\n const springXs: Transition = {\n type: 'spring',\n damping: 25,\n stiffness: 400,\n };\n\n return ReactDOM.createPortal(\n <DialogContextProvider\n value={{ onClose: handleCloseButton, isSmallestDialog, showXsDialogBorders, showCloseButton }}\n >\n <AnimatePresence\n // Disable any initial animations on children that\n // are present when the component is first rendered\n initial={false}\n // Only render one component at a time.\n // The exiting component will finish its exit\n // animation before entering component is rendered\n mode='wait'\n >\n {open && (\n <div\n {...remainingProps}\n className={modalClasses}\n role='dialog'\n aria-label='dialog'\n // Make sure it has a tabIndex to focus the dialog so the close on esc works.\n // biome-ignore lint/a11y/noNoninteractiveTabindex: <explanation>\n tabIndex={0}\n >\n <motion.div\n initial={shouldReduceMotion ? false : { opacity: 0, y: '-50%' }}\n animate={\n shouldReduceMotion\n ? { opacity: 1 }\n : { opacity: 1, y: 0, transition: isSmallestDialog ? springXs : spring }\n }\n exit={shouldReduceMotion ? undefined : { opacity: 0, y: '-150%' }}\n transition={\n shouldReduceMotion\n ? { duration: 0 }\n : {\n opacity: { duration: 0.2 },\n y: { duration: 0.3 },\n }\n }\n onAnimationComplete={handleAnimationComplete}\n ref={setFocusTrapRef}\n className={modalDialogClasses}\n role='document'\n // Focus target for keyboard handling after open.\n tabIndex={-1}\n >\n <div className='modal-content'>\n {hasChildren && children}\n {!hasChildren && (\n <>\n {title && (\n <DialogHeader\n title={title}\n subtitle={subtitle}\n headerButtons={headerButtons}\n />\n )}\n {body && <DialogBody className={bodyClassName}>{body}</DialogBody>}\n {footer && <DialogFooter className={footerClassName}>{footer}</DialogFooter>}\n </>\n )}\n </div>\n </motion.div>\n <motion.div\n initial={shouldReduceMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={shouldReduceMotion ? undefined : { opacity: 0 }}\n transition={shouldReduceMotion ? { duration: 0 } : { duration: 0.1 }}\n className='modal-backdrop'\n />\n </div>\n )}\n </AnimatePresence>\n </DialogContextProvider>,\n modalRoot\n );\n};\n\nDialog.Title = DialogHeader;\nDialog.Body = DialogBody;\nDialog.Footer = DialogFooter;\n\nDialog.SIZE_XS = 'xs' as const;\nDialog.SIZE_SM = 'sm' as const;\nDialog.SIZE_MD = 'md' as const; // default\nDialog.SIZE_LG = 'lg' as const;\nDialog.SIZE_XL = 'xl' as const;\nDialog.SIZE_FULL = 'full' as const;\nDialog.SIZE_FULL_WIDTH = 'fullwidth' as const;\nDialog.SIZE_FULL_HEIGHT = 'fullheight' as const;\nDialog.SIZE_FULL_HEIGHT_LG = 'fullheight-lg' as const;\nDialog.SIZE_FULL_HEIGHT_XL = 'fullheight-xl' as const;\nDialog.SIZE_FULL_SCREEN = 'fullscreen' as const;\n\nexport default Dialog;\n"],"names":["MODAL_DIALOG_CLASS","MODAL_OPEN_CLASS","Dialog","props","title","subtitle","body","footer","headerButtons","className","bodyClassName","footerClassName","showXsDialogBorders","showCloseButton","useOverflow","bsSize","show","onCloseCallback","noop","disableEsc","onEsc","onCloseValidation","children","remainingProps","open","setOpen","useState","modalRoot","getOrCreatePortalRoot","shouldReduceMotion","useReducedMotion","focusTrapRef","setFocusTrapRef","useFocusTrap","toggleBodyClass","add","hasOtherDialogs","handleCloseButton","closeDialog","usedEscapeKey","previousShow","setPreviousShow","useEsc","dialogElement","currentActiveElement","handleAnimationComplete","definition","modalClasses","classNames","isSmallestDialog","hasChildren","modalDialogClasses","spring","springXs","ReactDOM","jsx","DialogContextProvider","AnimatePresence","jsxs","motion","Fragment","DialogHeader","DialogBody","DialogFooter"],"mappings":";;;;;;;;;;;;;AAcA,MAAMA,IAAqB,gBACrBC,IAAmB,cAsInBC,IAAS,CAACC,MAA0C;AACtD,QAAM;AAAA,IACF,OAAAC;AAAA,IACA,UAAAC;AAAA,IACA,MAAAC;AAAA,IACA,QAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,qBAAAC,IAAsB;AAAA,IACtB,iBAAAC,IAAkB;AAAA,IAClB,aAAAC,IAAc;AAAA,IACd,QAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,SAASC,IAAkBC;AAAA,IAC3B,YAAAC,IAAa;AAAA,IACb,OAAAC,IAAQF;AAAA,IACR,mBAAAG,IAAoB,MAAM;AAAA,IAC1B,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACHpB,GAEE,CAACqB,GAAMC,CAAO,IAAIC,EAASV,CAAI,GAE/BW,IAAYC,GAAA,GAEZC,IAAqBC,GAAA,GAIrB,CAACC,GAAcC,CAAe,IAAIN,EAAgC,IAAI;AAC5E,EAAAO,GAAaF,CAAY;AAEzB,QAAMG,IAAkB,CAACC,MAAiB;AAKtC,UAAMC,IAAkBT,EAAU,uBAAuB3B,CAAkB,EAAE,SAAS;AAEtF,IAAImC,IACA,SAAS,KAAK,UAAU,IAAIlC,CAAgB,IACrC,CAACkC,KAAO,CAACC,KAChB,SAAS,KAAK,UAAU,OAAOnC,CAAgB;AAAA,EAEvD,GAEMoC,IAAoB,MAAMC,EAAgB,GAE1CA,IAAc,CAACC,MAA2B;AAC5C,IAAIlB,QACAI,EAAQ,EAAK,GACbR,EAAA,GAEiBG,EAAA;AAAA,EAEzB,GAEM,CAACoB,GAAcC,CAAe,IAAIf,EAASV,CAAI;AACrD,EAAIA,MAASwB,MACTf,EAAQT,CAAI,GACZkB,EAAgBlB,CAAI,GACpByB,EAAgBzB,CAAI,IAGxB0B,GAAO,MAAM;AACT,QAAI,CAACX;AACD;AAGJ,UAAMY,IAAgBZ,GAChBa,IAAuB,SAAS;AAGtC,IAAI,CAACzB,KAAcwB,EAAc,SAASC,CAAoB,KAC1DN,EAAgB;AAAA,EAExB,CAAC;AAED,QAAMO,IAA0B,CAACC,MAAoC;AAKjE,QAAIA,EAAW,YAAY;AACvB;AAGJ,UAAMH,IAAgBZ,GAChBa,IAAuB,SAAS;AAMtC,IAAKD,GAAe,SAASC,CAAoB,KAC7CD,GAAe,MAAA;AAAA,EAEvB,GAEMI,IAAeC,EAAW,SAAS,QAAQvC,CAAS,GAEpDwC,IAAmBlC,MAAW,MAE9BmC,IAAc,CAAC,CAAC5B,GAEhB6B,IAAqBH;AAAA,IACvBhD;AAAA,IACAc,KAAe;AAAA,IACfC,MAAW,QAAQ;AAAA,IACnBA,MAAW,QAAQ;AAAA,IACnBA,MAAW,QAAQ;AAAA,IACnBA,MAAW,QAAQ;AAAA,IACnBA,MAAW,UAAU;AAAA,IACrBA,MAAW,eAAe;AAAA,IAC1BA,MAAW,gBAAgB;AAAA,IAC3BA,MAAW,mBAAmB;AAAA,IAC9BA,MAAW,mBAAmB;AAAA,IAC9BA,MAAW,gBAAgB;AAAA,EAAA,GAGzBqC,IAAqB;AAAA,IACvB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,EAAA,GAGTC,IAAuB;AAAA,IACzB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAGf,SAAOC,GAAS;AAAA,IACZ,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACG,OAAO,EAAE,SAASnB,GAAmB,kBAAAY,GAAkB,qBAAArC,GAAqB,iBAAAC,EAAA;AAAA,QAE5E,UAAA,gBAAA0C;AAAA,UAACE;AAAA,UAAA;AAAA,YAGG,SAAS;AAAA,YAIT,MAAK;AAAA,YAEJ,UAAAjC,KACG,gBAAAkC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACI,GAAGnC;AAAA,gBACJ,WAAWwB;AAAA,gBACX,MAAK;AAAA,gBACL,cAAW;AAAA,gBAGX,UAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAAQ;AAAA,oBAACI,EAAO;AAAA,oBAAP;AAAA,sBACG,SAAS9B,IAAqB,KAAQ,EAAE,SAAS,GAAG,GAAG,OAAA;AAAA,sBACvD,SACIA,IACM,EAAE,SAAS,MACX,EAAE,SAAS,GAAG,GAAG,GAAG,YAAYoB,IAAmBI,IAAWD,EAAA;AAAA,sBAExE,MAAMvB,IAAqB,SAAY,EAAE,SAAS,GAAG,GAAG,QAAA;AAAA,sBACxD,YACIA,IACM,EAAE,UAAU,MACZ;AAAA,wBACI,SAAS,EAAE,UAAU,IAAA;AAAA,wBACrB,GAAG,EAAE,UAAU,IAAA;AAAA,sBAAI;AAAA,sBAGjC,qBAAqBgB;AAAA,sBACrB,KAAKb;AAAA,sBACL,WAAWmB;AAAA,sBACX,MAAK;AAAA,sBAEL,UAAU;AAAA,sBAEV,UAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,iBACV,UAAA;AAAA,wBAAAR,KAAe5B;AAAA,wBACf,CAAC4B,KACE,gBAAAQ,EAAAE,GAAA,EACK,UAAA;AAAA,0BAAAxD,KACG,gBAAAmD;AAAA,4BAACM;AAAA,4BAAA;AAAA,8BACG,OAAAzD;AAAA,8BACA,UAAAC;AAAA,8BACA,eAAAG;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAGPF,KAAQ,gBAAAiD,EAACO,GAAA,EAAW,WAAWpD,GAAgB,UAAAJ,GAAK;AAAA,0BACpDC,KAAU,gBAAAgD,EAACQ,GAAA,EAAa,WAAWpD,GAAkB,UAAAJ,EAAA,CAAO;AAAA,wBAAA,EAAA,CACjE;AAAA,sBAAA,EAAA,CAER;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEJ,gBAAAgD;AAAA,oBAACI,EAAO;AAAA,oBAAP;AAAA,sBACG,SAAS9B,IAAqB,KAAQ,EAAE,SAAS,EAAA;AAAA,sBACjD,SAAS,EAAE,SAAS,EAAA;AAAA,sBACpB,MAAMA,IAAqB,SAAY,EAAE,SAAS,EAAA;AAAA,sBAClD,YAAYA,IAAqB,EAAE,UAAU,MAAM,EAAE,UAAU,IAAA;AAAA,sBAC/D,WAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd;AAAA,cAAA;AAAA,YAAA;AAAA,UACJ;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,IAEJF;AAAA,EAAA;AAER;AAEAzB,EAAO,QAAQ2D;AACf3D,EAAO,OAAO4D;AACd5D,EAAO,SAAS6D;AAEhB7D,EAAO,UAAU;AACjBA,EAAO,UAAU;AACjBA,EAAO,UAAU;AACjBA,EAAO,UAAU;AACjBA,EAAO,UAAU;AACjBA,EAAO,YAAY;AACnBA,EAAO,kBAAkB;AACzBA,EAAO,mBAAmB;AAC1BA,EAAO,sBAAsB;AAC7BA,EAAO,sBAAsB;AAC7BA,EAAO,mBAAmB;"}
|