@webiny/admin-ui 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.7c2def32a7
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/Accordion/Accordion.d.ts +7 -6
- package/Accordion/Accordion.stories.d.ts +1 -1
- package/Accordion/Accordion.stories.js.map +1 -1
- package/Accordion/components/AccordionContent.js +4 -1
- package/Accordion/components/AccordionContent.js.map +1 -1
- package/Accordion/components/AccordionItem.d.ts +8 -6
- package/Accordion/components/AccordionItem.js.map +1 -1
- package/Accordion/components/AccordionItemAction.d.ts +7 -6
- package/Accordion/components/AccordionItemDragHandle.d.ts +2 -1
- package/Accordion/components/AccordionItemDragHandle.js +2 -1
- package/Accordion/components/AccordionItemDragHandle.js.map +1 -1
- package/Accordion/components/AccordionItemIcon.d.ts +7 -6
- package/Accordion/components/AccordionItemSeparator.d.ts +7 -6
- package/Accordion/components/AccordionTrigger.js +4 -2
- package/Accordion/components/AccordionTrigger.js.map +1 -1
- package/Alert/Alert.d.ts +21 -19
- package/Alert/Alert.stories.d.ts +1 -1
- package/Alert/Alert.stories.js.map +1 -1
- package/AutoComplete/AutoComplete.d.ts +7 -6
- package/AutoComplete/AutoComplete.stories.d.ts +1 -1
- package/AutoComplete/AutoComplete.stories.js.map +1 -1
- package/AutoComplete/primitives/AutoCompletePrimitive.d.ts +13 -6
- package/AutoComplete/primitives/AutoCompletePrimitive.js +1 -0
- package/AutoComplete/primitives/AutoCompletePrimitive.js.map +1 -1
- package/AutoComplete/primitives/AutoCompletePrimitive.stories.d.ts +1 -1
- package/AutoComplete/primitives/AutoCompletePrimitive.stories.js.map +1 -1
- package/Avatar/Avatar.d.ts +9 -8
- package/Avatar/Avatar.stories.d.ts +1 -1
- package/Avatar/Avatar.stories.js.map +1 -1
- package/Avatar/components/AvatarFallback.d.ts +7 -6
- package/Avatar/components/AvatarImage.d.ts +7 -6
- package/BetaBadge/BetaBadge.d.ts +6 -0
- package/BetaBadge/BetaBadge.js +7 -0
- package/BetaBadge/BetaBadge.js.map +1 -0
- package/Breadcrumbs/Breadcrumbs.d.ts +54 -0
- package/Breadcrumbs/Breadcrumbs.js +66 -0
- package/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/Breadcrumbs/Breadcrumbs.stories.d.ts +9 -0
- package/Breadcrumbs/Breadcrumbs.stories.js +71 -0
- package/Breadcrumbs/Breadcrumbs.stories.js.map +1 -0
- package/Breadcrumbs/index.d.ts +1 -0
- package/Breadcrumbs/index.js +1 -0
- package/Button/Button.d.ts +10 -9
- package/Button/Button.js +7 -0
- package/Button/Button.js.map +1 -1
- package/Button/Button.mdx +13 -0
- package/Button/Button.stories.d.ts +2 -1
- package/Button/Button.stories.js +9 -2
- package/Button/Button.stories.js.map +1 -1
- package/Button/CopyButton.d.ts +7 -6
- package/Button/IconButton.d.ts +10 -9
- package/Button/IconButton.stories.d.ts +1 -1
- package/Button/IconButton.stories.js.map +1 -1
- package/Calendar/Calendar.d.ts +7 -6
- package/Calendar/calendarClassNames.js +1 -1
- package/Calendar/calendarClassNames.js.map +1 -1
- package/Card/Card.d.ts +8 -22
- package/Card/Card.stories.d.ts +1 -1
- package/Card/Card.stories.js.map +1 -1
- package/Card/components/CancelAction.d.ts +8 -6
- package/Card/components/CardContent.d.ts +6 -6
- package/Card/components/CardTitle.d.ts +2 -2
- package/Card/components/ConfirmAction.d.ts +8 -6
- package/Card/components/Icon.d.ts +7 -6
- package/Checkbox/Checkbox.d.ts +7 -6
- package/Checkbox/Checkbox.stories.d.ts +1 -1
- package/Checkbox/Checkbox.stories.js.map +1 -1
- package/Checkbox/primitives/CheckboxPrimitive.d.ts +17 -12
- package/Checkbox/primitives/CheckboxPrimitive.stories.d.ts +1 -1
- package/Checkbox/primitives/CheckboxPrimitive.stories.js.map +1 -1
- package/CheckboxGroup/CheckboxGroup.d.ts +7 -6
- package/CheckboxGroup/CheckboxGroup.stories.d.ts +1 -1
- package/CheckboxGroup/CheckboxGroup.stories.js.map +1 -1
- package/CheckboxGroup/primitives/CheckboxGroupPrimitive.d.ts +20 -12
- package/CheckboxGroup/primitives/CheckboxGroupPrimitive.stories.d.ts +1 -1
- package/CheckboxGroup/primitives/CheckboxGroupPrimitive.stories.js.map +1 -1
- package/CodeEditor/CodeEditor.d.ts +7 -6
- package/CodeEditor/CodeEditor.stories.d.ts +1 -1
- package/CodeEditor/CodeEditor.stories.js.map +1 -1
- package/CodeEditor/CodeEditorPrimitive.d.ts +7 -6
- package/CodeEditor/CodeEditorPrimitive.js +3 -1
- package/CodeEditor/CodeEditorPrimitive.js.map +1 -1
- package/CodeEditor/CodeEditorPrimitive.stories.d.ts +1 -1
- package/CodeEditor/CodeEditorPrimitive.stories.js.map +1 -1
- package/ColorPicker/ColorPicker.d.ts +7 -6
- package/ColorPicker/ColorPicker.stories.d.ts +1 -1
- package/ColorPicker/ColorPicker.stories.js.map +1 -1
- package/ColorPicker/primitives/ColorPickerPrimitive.d.ts +7 -6
- package/ColorPicker/primitives/ColorPickerPrimitive.stories.d.ts +1 -1
- package/ColorPicker/primitives/ColorPickerPrimitive.stories.js.map +1 -1
- package/Command/Command.d.ts +10 -8
- package/Command/components/List.d.ts +1 -1
- package/Command/components/List.js +9 -5
- package/Command/components/List.js.map +1 -1
- package/DataList/DataListModal.d.ts +6 -3
- package/DataTable/DataTable.d.ts +23 -12
- package/DataTable/DataTable.js +18 -7
- package/DataTable/DataTable.js.map +1 -1
- package/DataTable/DataTable.stories.d.ts +1 -1
- package/DataTable/DataTable.stories.js.map +1 -1
- package/DataTable/components/ColumnsVisibility.d.ts +5 -4
- package/DataTable/components/ColumnsVisibility.js +7 -3
- package/DataTable/components/ColumnsVisibility.js.map +1 -1
- package/DatePicker/DatePicker.d.ts +11 -7
- package/DatePicker/DatePicker.js +10 -2
- package/DatePicker/DatePicker.js.map +1 -1
- package/DatePicker/DatePicker.stories.d.ts +11 -1
- package/DatePicker/DatePicker.stories.js +44 -1
- package/DatePicker/DatePicker.stories.js.map +1 -1
- package/DatePicker/primitives/BirthdayPicker.d.ts +13 -0
- package/DatePicker/primitives/BirthdayPicker.js +355 -0
- package/DatePicker/primitives/BirthdayPicker.js.map +1 -0
- package/DatePicker/primitives/BirthdayPickerCell.d.ts +14 -0
- package/DatePicker/primitives/BirthdayPickerCell.js +19 -0
- package/DatePicker/primitives/BirthdayPickerCell.js.map +1 -0
- package/DatePicker/primitives/BirthdayPickerSegments.d.ts +9 -0
- package/DatePicker/primitives/BirthdayPickerSegments.js +43 -0
- package/DatePicker/primitives/BirthdayPickerSegments.js.map +1 -0
- package/DatePicker/primitives/DateOnlyPicker.js +2 -2
- package/DatePicker/primitives/DateOnlyPicker.js.map +1 -1
- package/DatePicker/primitives/DatePickerPrimitive.d.ts +7 -6
- package/DatePicker/primitives/DatePickerPrimitive.js +3 -0
- package/DatePicker/primitives/DatePickerPrimitive.js.map +1 -1
- package/DatePicker/primitives/DateRangePicker.js +3 -3
- package/DatePicker/primitives/DateRangePicker.js.map +1 -1
- package/DatePicker/primitives/DateTimePicker.d.ts +1 -1
- package/DatePicker/primitives/DateTimePicker.js +26 -18
- package/DatePicker/primitives/DateTimePicker.js.map +1 -1
- package/DatePicker/primitives/MultipleDatesPicker.js +3 -3
- package/DatePicker/primitives/MultipleDatesPicker.js.map +1 -1
- package/DatePicker/primitives/components/DatePickerTrigger.js +2 -2
- package/DatePicker/primitives/components/DatePickerTrigger.js.map +1 -1
- package/DatePicker/utils/birthdayHelpers.d.ts +77 -0
- package/DatePicker/utils/birthdayHelpers.js +145 -0
- package/DatePicker/utils/birthdayHelpers.js.map +1 -0
- package/DatePicker/utils/birthdayHelpers.test.d.ts +1 -0
- package/DatePicker/utils/birthdayHelpers.test.js +394 -0
- package/DatePicker/utils/birthdayHelpers.test.js.map +1 -0
- package/DatePicker/utils/dateHelpers.d.ts +6 -1
- package/DatePicker/utils/dateHelpers.js +13 -5
- package/DatePicker/utils/dateHelpers.js.map +1 -1
- package/DatePicker/utils/dateHelpers.test.d.ts +1 -0
- package/DatePicker/utils/dateHelpers.test.js +32 -0
- package/DatePicker/utils/dateHelpers.test.js.map +1 -0
- package/DatePicker/utils/index.d.ts +1 -0
- package/DatePicker/utils/index.js +1 -0
- package/DatePicker/utils/timezoneHelpers.d.ts +3 -0
- package/DatePicker/utils/timezoneHelpers.js +32 -0
- package/DatePicker/utils/timezoneHelpers.js.map +1 -0
- package/DatePicker/utils/types.d.ts +15 -2
- package/Dialog/Dialog.d.ts +8 -22
- package/Dialog/Dialog.stories.d.ts +1 -1
- package/Dialog/Dialog.stories.js.map +1 -1
- package/Dialog/components/CancelAction.d.ts +8 -6
- package/Dialog/components/ConfirmAction.d.ts +8 -6
- package/Dialog/components/DialogContent.d.ts +1 -1
- package/Dialog/components/DialogFooter.d.ts +1 -1
- package/Dialog/components/DialogTitle.d.ts +1 -1
- package/Dialog/components/Icon.d.ts +7 -6
- package/DragCursor/DragCursor.d.ts +7 -0
- package/DragCursor/DragCursor.js +21 -0
- package/DragCursor/DragCursor.js.map +1 -0
- package/DragCursor/DragCursor.stories.d.ts +10 -0
- package/DragCursor/DragCursor.stories.js +97 -0
- package/DragCursor/DragCursor.stories.js.map +1 -0
- package/DragCursor/index.d.ts +1 -0
- package/DragCursor/index.js +1 -0
- package/Drawer/Drawer.d.ts +18 -28
- package/Drawer/Drawer.js +2 -1
- package/Drawer/Drawer.js.map +1 -1
- package/Drawer/Drawer.stories.d.ts +2 -1
- package/Drawer/Drawer.stories.js +21 -2
- package/Drawer/Drawer.stories.js.map +1 -1
- package/Drawer/components/CancelButton.d.ts +8 -6
- package/Drawer/components/ConfirmButton.d.ts +8 -6
- package/Drawer/components/DrawerContent.d.ts +1 -1
- package/Drawer/components/DrawerHeader.d.ts +2 -2
- package/Drawer/components/DrawerHeader.js +11 -8
- package/Drawer/components/DrawerHeader.js.map +1 -1
- package/Drawer/components/Icon.d.ts +7 -6
- package/Drawer/components/Icon.js +3 -4
- package/Drawer/components/Icon.js.map +1 -1
- package/DropdownMenu/DropdownMenu.stories.d.ts +1 -1
- package/DropdownMenu/DropdownMenu.stories.js.map +1 -1
- package/DropdownMenu/components/DropdownMenuItem.d.ts +8 -2
- package/DropdownMenu/components/DropdownMenuItem.js +11 -3
- package/DropdownMenu/components/DropdownMenuItem.js.map +1 -1
- package/DropdownMenu/components/DropdownMenuLink.d.ts +9 -8
- package/DropdownMenu/components/DropdownMenuSeparator.d.ts +7 -6
- package/EditableTitle/EditableTitle.d.ts +67 -0
- package/EditableTitle/EditableTitle.js +73 -0
- package/EditableTitle/EditableTitle.js.map +1 -0
- package/EditableTitle/index.d.ts +1 -0
- package/EditableTitle/index.js +1 -0
- package/EmptyState/EmptyState.d.ts +43 -0
- package/EmptyState/EmptyState.js +93 -0
- package/EmptyState/EmptyState.js.map +1 -0
- package/EmptyState/EmptyState.stories.d.ts +13 -0
- package/EmptyState/EmptyState.stories.js +136 -0
- package/EmptyState/EmptyState.stories.js.map +1 -0
- package/EmptyState/illustrations/ContentIllustration.d.ts +2 -0
- package/EmptyState/illustrations/ContentIllustration.js +100 -0
- package/EmptyState/illustrations/ContentIllustration.js.map +1 -0
- package/EmptyState/illustrations/LayoutIllustration.d.ts +2 -0
- package/EmptyState/illustrations/LayoutIllustration.js +93 -0
- package/EmptyState/illustrations/LayoutIllustration.js.map +1 -0
- package/EmptyState/illustrations/ListingIllustration.d.ts +2 -0
- package/EmptyState/illustrations/ListingIllustration.js +92 -0
- package/EmptyState/illustrations/ListingIllustration.js.map +1 -0
- package/EmptyState/illustrations/SelectIllustration.d.ts +2 -0
- package/EmptyState/illustrations/SelectIllustration.js +100 -0
- package/EmptyState/illustrations/SelectIllustration.js.map +1 -0
- package/EmptyState/illustrations/TableIllustration.d.ts +2 -0
- package/EmptyState/illustrations/TableIllustration.js +233 -0
- package/EmptyState/illustrations/TableIllustration.js.map +1 -0
- package/EmptyState/illustrations/UploadIllustration.d.ts +2 -0
- package/EmptyState/illustrations/UploadIllustration.js +77 -0
- package/EmptyState/illustrations/UploadIllustration.js.map +1 -0
- package/EmptyState/illustrations/index.d.ts +6 -0
- package/EmptyState/illustrations/index.js +6 -0
- package/EmptyState/index.d.ts +1 -0
- package/EmptyState/index.js +1 -0
- package/FilePicker/FilePicker.d.ts +19 -18
- package/FilePicker/FilePicker.stories.d.ts +7 -1
- package/FilePicker/FilePicker.stories.js +24 -1
- package/FilePicker/FilePicker.stories.js.map +1 -1
- package/FilePicker/primitives/FilePickerPrimitive.d.ts +20 -19
- package/FilePicker/primitives/FilePickerPrimitive.stories.d.ts +1 -1
- package/FilePicker/primitives/FilePickerPrimitive.stories.js.map +1 -1
- package/FilePicker/primitives/components/Trigger.d.ts +1 -1
- package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.d.ts +19 -7
- package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.js +15 -6
- package/FilePicker/primitives/components/previews/ImagePreview/ImagePreview.js.map +1 -1
- package/FilePicker/primitives/components/previews/ItemActions.js +1 -1
- package/FilePicker/primitives/components/previews/ItemActions.js.map +1 -1
- package/FilePicker/primitives/components/previews/ItemDescription.js +1 -1
- package/FilePicker/primitives/components/previews/ItemDescription.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/FileType.d.ts +5 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/FileType.js +45 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/FileType.js.map +1 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.d.ts +5 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.js +14 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Placeholder.js.map +1 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.d.ts +12 -6
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.js +54 -12
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemPreview.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.d.ts +11 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.js +8 -61
- package/FilePicker/primitives/components/previews/RichItemPreview/RichItemThumbnail.js.map +1 -1
- package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.d.ts +11 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.js +24 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/Thumbnail.js.map +1 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.d.ts +10 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.js +46 -0
- package/FilePicker/primitives/components/previews/RichItemPreview/ThumbnailActions.js.map +1 -0
- package/FilePicker/primitives/components/previews/TextOnlyPreview/TextOnlyPreview.d.ts +7 -6
- package/FilePicker/primitives/components/previews/TruncatedFileName.d.ts +7 -0
- package/FilePicker/primitives/components/previews/TruncatedFileName.js +20 -0
- package/FilePicker/primitives/components/previews/TruncatedFileName.js.map +1 -0
- package/FilePicker/primitives/components/previews/fileName.d.ts +4 -0
- package/FilePicker/primitives/components/previews/fileName.js +26 -0
- package/FilePicker/primitives/components/previews/fileName.js.map +1 -0
- package/FilePicker/primitives/components/previews/index.d.ts +1 -0
- package/FilePicker/primitives/components/previews/index.js +1 -0
- package/FilePicker/primitives/components/previews/variants.d.ts +1 -1
- package/FillViewport/FillViewport.d.ts +63 -0
- package/FillViewport/FillViewport.js +67 -0
- package/FillViewport/FillViewport.js.map +1 -0
- package/FillViewport/index.d.ts +1 -0
- package/FillViewport/index.js +1 -0
- package/FormComponent/Description.d.ts +7 -6
- package/FormComponent/ErrorMessage.d.ts +7 -6
- package/FormComponent/Label.d.ts +7 -6
- package/FormComponent/Note.d.ts +7 -6
- package/Grid/Grid.d.ts +25 -23
- package/Grid/Grid.js.map +1 -1
- package/Grid/Grid.stories.d.ts +1 -1
- package/Grid/Grid.stories.js.map +1 -1
- package/HeaderBar/HeaderBar.d.ts +7 -6
- package/HeaderBar/HeaderBar.stories.d.ts +1 -1
- package/HeaderBar/HeaderBar.stories.js.map +1 -1
- package/Heading/Heading.d.ts +8 -7
- package/Heading/Heading.stories.d.ts +1 -1
- package/Heading/Heading.stories.js.map +1 -1
- package/Icon/Icon.d.ts +9 -8
- package/Icon/Icon.stories.d.ts +1 -1
- package/Icon/Icon.stories.js.map +1 -1
- package/IconPicker/IconPicker.d.ts +7 -6
- package/IconPicker/IconPicker.stories.d.ts +1 -1
- package/IconPicker/IconPicker.stories.js.map +1 -1
- package/IconPicker/primitives/IconPickerPrimitive.d.ts +1 -1
- package/IconPicker/primitives/IconPickerPrimitive.js +1 -2
- package/IconPicker/primitives/IconPickerPrimitive.js.map +1 -1
- package/IconPicker/primitives/IconPickerPrimitive.stories.d.ts +1 -1
- package/IconPicker/primitives/IconPickerPrimitive.stories.js.map +1 -1
- package/IconPicker/primitives/components/IconPickerTrigger.d.ts +1 -1
- package/ImageEditor/AspectRatioPreview.d.ts +16 -0
- package/ImageEditor/AspectRatioPreview.js +26 -0
- package/ImageEditor/AspectRatioPreview.js.map +1 -0
- package/ImageEditor/CropHotspotEditor.d.ts +22 -0
- package/ImageEditor/CropHotspotEditor.js +402 -0
- package/ImageEditor/CropHotspotEditor.js.map +1 -0
- package/ImageEditor/ImageEditor.d.ts +18 -0
- package/ImageEditor/ImageEditor.js +151 -0
- package/ImageEditor/ImageEditor.js.map +1 -0
- package/ImageEditor/ImageEditor.stories.d.ts +6 -0
- package/ImageEditor/ImageEditor.stories.js +42 -0
- package/ImageEditor/ImageEditor.stories.js.map +1 -0
- package/ImageEditor/MetaFields.d.ts +12 -0
- package/ImageEditor/MetaFields.js +20 -0
- package/ImageEditor/MetaFields.js.map +1 -0
- package/ImageEditor/SectionLabel.d.ts +8 -0
- package/ImageEditor/SectionLabel.js +7 -0
- package/ImageEditor/SectionLabel.js.map +1 -0
- package/ImageEditor/geometry.d.ts +46 -0
- package/ImageEditor/geometry.js +126 -0
- package/ImageEditor/geometry.js.map +1 -0
- package/ImageEditor/index.d.ts +3 -0
- package/ImageEditor/index.js +3 -0
- package/ImageEditor/types.d.ts +52 -0
- package/ImageEditor/types.js +35 -0
- package/ImageEditor/types.js.map +1 -0
- package/Input/Input.d.ts +7 -6
- package/Input/Input.stories.d.ts +1 -1
- package/Input/Input.stories.js.map +1 -1
- package/Input/InputPrimitive.d.ts +9 -8
- package/Input/InputPrimitive.stories.d.ts +1 -1
- package/Input/InputPrimitive.stories.js.map +1 -1
- package/Label/Label.d.ts +8 -7
- package/Label/Label.stories.d.ts +1 -1
- package/Label/Label.stories.js.map +1 -1
- package/Label/components/LabelValue.d.ts +1 -1
- package/Link/Link.d.ts +3 -3
- package/Link/Link.js +1 -1
- package/Link/Link.js.map +1 -1
- package/Link/Link.stories.d.ts +1 -1
- package/Link/Link.stories.js.map +1 -1
- package/List/List.d.ts +8 -7
- package/List/List.stories.d.ts +1 -1
- package/List/List.stories.js.map +1 -1
- package/List/components/ListItem.d.ts +7 -6
- package/List/components/ListItemAction.d.ts +7 -6
- package/List/components/ListItemHandle.d.ts +7 -6
- package/List/components/ListItemIcon.d.ts +7 -6
- package/List/components/ListItemSeparator.d.ts +7 -6
- package/Loader/Loader.d.ts +9 -8
- package/Loader/Loader.stories.d.ts +1 -1
- package/Loader/Loader.stories.js.map +1 -1
- package/Loader/OverlayLoader.d.ts +7 -6
- package/Loader/OverlayLoader.stories.d.ts +1 -1
- package/Loader/OverlayLoader.stories.js.map +1 -1
- package/Markdown/Markdown.d.ts +47 -0
- package/Markdown/Markdown.js +17 -0
- package/Markdown/Markdown.js.map +1 -0
- package/Markdown/index.d.ts +1 -0
- package/Markdown/index.js +1 -0
- package/MultiAutoComplete/MultiAutoComplete.d.ts +7 -6
- package/MultiAutoComplete/MultiAutoComplete.stories.d.ts +1 -1
- package/MultiAutoComplete/MultiAutoComplete.stories.js.map +1 -1
- package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.d.ts +13 -6
- package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.js +1 -0
- package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.js.map +1 -1
- package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.stories.d.ts +1 -1
- package/MultiAutoComplete/primitives/MultiAutoCompletePrimitive.stories.js.map +1 -1
- package/MultiAutoComplete/primitives/presenters/MultiAutoCompletePresenterWithFreeInput.d.ts +3 -3
- package/MultiAutoComplete/primitives/useMultiAutoComplete.d.ts +3 -3
- package/MultiFilePicker/MultiFilePicker.d.ts +19 -18
- package/MultiFilePicker/MultiFilePicker.stories.d.ts +1 -1
- package/MultiFilePicker/MultiFilePicker.stories.js.map +1 -1
- package/MultiFilePicker/primitives/MultiFilePickerPrimitive.d.ts +19 -18
- package/MultiFilePicker/primitives/MultiFilePickerPrimitive.stories.d.ts +1 -1
- package/MultiFilePicker/primitives/MultiFilePickerPrimitive.stories.js.map +1 -1
- package/MultiSelect/MultiSelect.d.ts +7 -6
- package/MultiSelect/MultiSelect.stories.d.ts +1 -1
- package/MultiSelect/MultiSelect.stories.js.map +1 -1
- package/MultiSelect/primitives/MultiSelectPrimitive.d.ts +10 -6
- package/MultiSelect/primitives/MultiSelectPrimitive.js +12 -5
- package/MultiSelect/primitives/MultiSelectPrimitive.js.map +1 -1
- package/Popover/Popover.d.ts +7 -6
- package/Popover/Popover.stories.d.ts +8 -1
- package/Popover/Popover.stories.js +24 -1
- package/Popover/Popover.stories.js.map +1 -1
- package/Popover/primitives/PopoverPrimitive.d.ts +7 -7
- package/Popover/primitives/components/PopoverContent.js +6 -1
- package/Popover/primitives/components/PopoverContent.js.map +1 -1
- package/ProgressBar/ProgressBar.d.ts +7 -6
- package/ProgressBar/ProgressBar.stories.d.ts +1 -1
- package/ProgressBar/ProgressBar.stories.js.map +1 -1
- package/RadioGroup/RadioGroup.d.ts +7 -6
- package/RadioGroup/RadioGroup.stories.d.ts +1 -1
- package/RadioGroup/RadioGroup.stories.js.map +1 -1
- package/RadioGroup/primitives/Radio.d.ts +7 -6
- package/RadioGroup/primitives/RadioGroupPrimitive.d.ts +5 -1
- package/RadioGroup/primitives/RadioGroupPrimitive.stories.d.ts +1 -1
- package/RadioGroup/primitives/RadioGroupPrimitive.stories.js.map +1 -1
- package/RangeSlider/RangeSlider.d.ts +7 -6
- package/RangeSlider/RangeSlider.stories.d.ts +1 -1
- package/RangeSlider/RangeSlider.stories.js.map +1 -1
- package/RangeSlider/primitives/RangeSliderPrimitive.stories.d.ts +1 -1
- package/RangeSlider/primitives/RangeSliderPrimitive.stories.js.map +1 -1
- package/ScrollArea/ScrollArea.d.ts +16 -2
- package/ScrollArea/ScrollArea.js +25 -11
- package/ScrollArea/ScrollArea.js.map +1 -1
- package/ScrollArea/ScrollArea.stories.d.ts +1 -1
- package/ScrollArea/ScrollArea.stories.js.map +1 -1
- package/SegmentedControl/SegmentedControl.d.ts +11 -6
- package/SegmentedControl/SegmentedControl.js +6 -2
- package/SegmentedControl/SegmentedControl.js.map +1 -1
- package/SegmentedControl/SegmentedControl.stories.d.ts +5 -1
- package/SegmentedControl/SegmentedControl.stories.js +100 -2
- package/SegmentedControl/SegmentedControl.stories.js.map +1 -1
- package/SegmentedControl/SegmentedControlTab.d.ts +10 -0
- package/SegmentedControl/SegmentedControlTab.js +21 -0
- package/SegmentedControl/SegmentedControlTab.js.map +1 -0
- package/SegmentedControl/SegmentedControlTabs.d.ts +14 -0
- package/SegmentedControl/SegmentedControlTabs.js +71 -0
- package/SegmentedControl/SegmentedControlTabs.js.map +1 -0
- package/SegmentedControl/SegmentedControlTabsContext.d.ts +19 -0
- package/SegmentedControl/SegmentedControlTabsContext.js +11 -0
- package/SegmentedControl/SegmentedControlTabsContext.js.map +1 -0
- package/SegmentedControl/index.d.ts +2 -0
- package/SegmentedControl/index.js +2 -0
- package/SegmentedControl/primitives/SegmentedControlPrimitive.d.ts +6 -2
- package/SegmentedControl/primitives/SegmentedControlPrimitive.js +4 -3
- package/SegmentedControl/primitives/SegmentedControlPrimitive.js.map +1 -1
- package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.d.ts +2 -1
- package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.js +8 -1
- package/SegmentedControl/primitives/SegmentedControlPrimitive.stories.js.map +1 -1
- package/Select/Select.d.ts +7 -6
- package/Select/Select.stories.d.ts +1 -1
- package/Select/Select.stories.js.map +1 -1
- package/Select/primitives/SelectPrimitive.stories.d.ts +1 -1
- package/Select/primitives/SelectPrimitive.stories.js.map +1 -1
- package/Select/primitives/components/SelectContent.js +4 -6
- package/Select/primitives/components/SelectContent.js.map +1 -1
- package/Select/primitives/components/SelectTrigger.d.ts +2 -2
- package/Separator/Separator.d.ts +9 -8
- package/Separator/Separator.stories.d.ts +1 -1
- package/Separator/Separator.stories.js.map +1 -1
- package/Sidebar/Sidebar.d.ts +9 -6
- package/Sidebar/Sidebar.stories.d.ts +1 -1
- package/Sidebar/Sidebar.stories.js.map +1 -1
- package/Sidebar/components/SidebarContent.js +1 -1
- package/Sidebar/components/SidebarContent.js.map +1 -1
- package/Sidebar/components/SidebarIcon.d.ts +7 -6
- package/Sidebar/components/SidebarProvider.d.ts +4 -4
- package/Sidebar/components/SidebarRoot.js +1 -1
- package/Sidebar/components/SidebarRoot.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuGroup.d.ts +9 -8
- package/Sidebar/components/items/SidebarMenuItem.d.ts +13 -9
- package/Sidebar/components/items/SidebarMenuItem.js +3 -1
- package/Sidebar/components/items/SidebarMenuItem.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuItemBadge.d.ts +6 -0
- package/Sidebar/components/items/SidebarMenuItemBadge.js +7 -0
- package/Sidebar/components/items/SidebarMenuItemBadge.js.map +1 -0
- package/Sidebar/components/items/SidebarMenuItemIcon.d.ts +7 -6
- package/Sidebar/components/items/SidebarMenuLink.d.ts +12 -9
- package/Sidebar/components/items/SidebarMenuLink.js +3 -1
- package/Sidebar/components/items/SidebarMenuLink.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuProvider.d.ts +4 -4
- package/Sidebar/components/items/SidebarMenuRootButton.d.ts +1 -1
- package/Sidebar/components/items/SidebarMenuRootButton.js +8 -3
- package/Sidebar/components/items/SidebarMenuRootButton.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuRootItem.d.ts +9 -7
- package/Sidebar/components/items/SidebarMenuSubButton.d.ts +1 -1
- package/Sidebar/components/items/SidebarMenuSubButton.js +14 -6
- package/Sidebar/components/items/SidebarMenuSubButton.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuSubItem.js +3 -3
- package/Sidebar/components/items/SidebarMenuSubItem.js.map +1 -1
- package/Sidebar/components/items/SidebarMenuSubItemIndentation.js +2 -1
- package/Sidebar/components/items/SidebarMenuSubItemIndentation.js.map +1 -1
- package/Skeleton/Skeleton.d.ts +9 -7
- package/Skeleton/Skeleton.js +10 -4
- package/Skeleton/Skeleton.js.map +1 -1
- package/Skeleton/Skeleton.stories.d.ts +3 -1
- package/Skeleton/Skeleton.stories.js +28 -2
- package/Skeleton/Skeleton.stories.js.map +1 -1
- package/Slider/Slider.d.ts +7 -6
- package/Slider/Slider.stories.d.ts +1 -1
- package/Slider/Slider.stories.js.map +1 -1
- package/Slider/primitives/SliderPrimitive.stories.d.ts +1 -1
- package/Slider/primitives/SliderPrimitive.stories.js.map +1 -1
- package/SteppedProgress/SteppedProgress.d.ts +7 -6
- package/SteppedProgress/SteppedProgress.stories.d.ts +1 -1
- package/SteppedProgress/SteppedProgress.stories.js.map +1 -1
- package/SteppedProgress/SteppedProgressItem.d.ts +7 -6
- package/Switch/Switch.d.ts +10 -9
- package/Switch/Switch.js +21 -7
- package/Switch/Switch.js.map +1 -1
- package/Switch/Switch.stories.d.ts +1 -1
- package/Switch/Switch.stories.js.map +1 -1
- package/Switch/domains/SwitchItemDto.d.ts +1 -1
- package/Switch/primitives/SwitchPrimitive.d.ts +10 -6
- package/Switch/primitives/SwitchPrimitive.js +4 -3
- package/Switch/primitives/SwitchPrimitive.js.map +1 -1
- package/Switch/primitives/SwitchPrimitive.stories.d.ts +1 -1
- package/Switch/primitives/SwitchPrimitive.stories.js.map +1 -1
- package/Table/Table.d.ts +12 -10
- package/Table/components/Direction.d.ts +1 -1
- package/Tabs/Tabs.d.ts +14 -7
- package/Tabs/Tabs.js +32 -11
- package/Tabs/Tabs.js.map +1 -1
- package/Tabs/Tabs.mdx +27 -0
- package/Tabs/Tabs.stories.d.ts +2 -1
- package/Tabs/Tabs.stories.js +19 -1
- package/Tabs/Tabs.stories.js.map +1 -1
- package/Tabs/components/Content.d.ts +1 -1
- package/Tabs/components/List.d.ts +2 -2
- package/Tabs/components/Tab.d.ts +7 -6
- package/Tabs/components/Trigger.d.ts +3 -2
- package/Tabs/components/Trigger.js +8 -3
- package/Tabs/components/Trigger.js.map +1 -1
- package/Tag/Tag.d.ts +8 -7
- package/Tag/Tag.stories.d.ts +1 -1
- package/Tag/Tag.stories.js.map +1 -1
- package/Tags/Tags.d.ts +7 -6
- package/Tags/Tags.stories.d.ts +1 -1
- package/Tags/Tags.stories.js.map +1 -1
- package/Tags/primitives/TagsPrimitive.d.ts +7 -6
- package/Tags/primitives/TagsPrimitive.stories.d.ts +1 -1
- package/Tags/primitives/TagsPrimitive.stories.js.map +1 -1
- package/Text/Text.d.ts +8 -7
- package/Text/Text.stories.d.ts +1 -1
- package/Text/Text.stories.js.map +1 -1
- package/Textarea/Textarea.d.ts +7 -6
- package/Textarea/Textarea.stories.d.ts +1 -1
- package/Textarea/Textarea.stories.js.map +1 -1
- package/Textarea/TextareaPrimitive.d.ts +9 -8
- package/Textarea/TextareaPrimitive.stories.d.ts +1 -1
- package/Textarea/TextareaPrimitive.stories.js.map +1 -1
- package/TimeAgo/TimeAgo.stories.d.ts +1 -1
- package/TimeAgo/TimeAgo.stories.js.map +1 -1
- package/TimeAgo/getElapsedSeconds.js +3 -3
- package/TimeAgo/getElapsedSeconds.js.map +1 -1
- package/Toast/Toast.d.ts +7 -6
- package/Toast/components/ToastActions.d.ts +7 -6
- package/Toast/components/ToastDescription.d.ts +7 -6
- package/Toast/components/ToastTitle.d.ts +7 -6
- package/Toast/useToast.stories.d.ts +1 -1
- package/Toast/useToast.stories.js.map +1 -1
- package/Toggle/Toggle.d.ts +7 -6
- package/Toggle/Toggle.stories.d.ts +1 -1
- package/Toggle/Toggle.stories.js.map +1 -1
- package/Toggle/primitives/TogglePrimitive.d.ts +13 -9
- package/Toggle/primitives/TogglePrimitive.stories.d.ts +1 -1
- package/Toggle/primitives/TogglePrimitive.stories.js.map +1 -1
- package/ToggleGroup/ToggleGroup.d.ts +7 -6
- package/ToggleGroup/ToggleGroup.stories.d.ts +1 -1
- package/ToggleGroup/ToggleGroup.stories.js.map +1 -1
- package/ToggleGroup/domains/ToggleGroupItem.d.ts +3 -0
- package/ToggleGroup/domains/ToggleGroupItem.js +6 -1
- package/ToggleGroup/domains/ToggleGroupItem.js.map +1 -1
- package/ToggleGroup/domains/ToggleGroupItemFormatted.d.ts +1 -0
- package/ToggleGroup/domains/ToggleGroupItemFormatter.js +2 -1
- package/ToggleGroup/domains/ToggleGroupItemFormatter.js.map +1 -1
- package/ToggleGroup/domains/ToggleGroupItemParams.d.ts +1 -0
- package/ToggleGroup/primitives/ToggleGroupPrimitive.d.ts +13 -9
- package/ToggleGroup/primitives/ToggleGroupPrimitive.js +12 -3
- package/ToggleGroup/primitives/ToggleGroupPrimitive.js.map +1 -1
- package/ToggleGroup/primitives/ToggleGroupPrimitive.stories.d.ts +1 -1
- package/ToggleGroup/primitives/ToggleGroupPrimitive.stories.js.map +1 -1
- package/Tooltip/Tooltip.d.ts +7 -6
- package/Tooltip/Tooltip.stories.d.ts +1 -1
- package/Tooltip/Tooltip.stories.js.map +1 -1
- package/Tree/Tree.d.ts +7 -6
- package/Tree/Tree.stories.d.ts +1 -1
- package/Tree/Tree.stories.js.map +1 -1
- package/Tree/components/Item.d.ts +7 -6
- package/Tree/components/ItemCollapseTrigger.d.ts +7 -6
- package/Tree/components/ItemContent.d.ts +8 -6
- package/Tree/components/ItemDragHandle.d.ts +7 -6
- package/Tree/components/ItemIcon.d.ts +7 -6
- package/Tree/components/ItemPlaceholder.d.ts +7 -6
- package/Tree/components/ItemSubIndentation.d.ts +7 -6
- package/Tree/useTree.js +6 -2
- package/Tree/useTree.js.map +1 -1
- package/Widget/Widget.d.ts +8 -22
- package/Widget/Widget.stories.d.ts +1 -1
- package/Widget/Widget.stories.js.map +1 -1
- package/Widget/components/Icon.d.ts +7 -6
- package/Widget/components/WidgetAction.d.ts +8 -6
- package/Widget/components/WidgetContent.d.ts +5 -5
- package/exports/admin/ui.d.ts +3 -0
- package/exports/admin/ui.js +3 -0
- package/hooks/index.d.ts +1 -0
- package/hooks/index.js +1 -0
- package/hooks/useEscapeScrollLock.d.ts +13 -0
- package/hooks/useEscapeScrollLock.js +21 -0
- package/hooks/useEscapeScrollLock.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +8 -0
- package/package.json +33 -35
- package/theme.css +52 -0
- package/utils.js +53 -34
- package/utils.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatePicker/DatePicker.stories.js","sources":["../../src/DatePicker/DatePicker.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-webpack5\";\nimport { addDays, nextSaturday } from \"date-fns\";\nimport { DatePicker } from \"./DatePicker.js\";\n\nconst meta: Meta<typeof DatePicker> = {\n title: \"Components/Form/DatePicker\",\n component: DatePicker,\n argTypes: {\n onChange: { action: \"onChange\" },\n type: {\n control: \"select\",\n options: [\n \"date\",\n \"time\",\n \"dateTimeLocal\",\n \"dateTimeTz\",\n \"month\",\n \"week\",\n \"year\",\n \"dateRange\",\n \"multipleDates\",\n \"multipleMonths\",\n \"multipleYears\"\n ],\n defaultValue: \"date\"\n },\n disabled: {\n control: \"boolean\",\n defaultValue: false\n }\n },\n parameters: {\n layout: \"padded\"\n },\n render: args => {\n const [value, setValue] = useState<any>();\n return <DatePicker {...args} value={value} onChange={setValue} />;\n }\n};\n\nexport default meta;\ntype Story = StoryObj<typeof DatePicker>;\n\nexport const Default: Story = {\n args: {\n type: \"date\"\n }\n};\n\nexport const WithLabel: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\"\n }\n};\n\nexport const WithLabelRequired: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n required: true\n }\n};\n\nexport const WithDescription: Story = {\n args: {\n type: \"date\",\n description: \"Provide the required information for processing your request.\"\n }\n};\n\nexport const WithNotes: Story = {\n args: {\n type: \"date\",\n note: \"Note: Ensure your selection or input is accurate before proceeding.\"\n }\n};\n\nexport const WithErrors: Story = {\n args: {\n type: \"date\",\n validation: {\n isValid: false,\n message: \"This field is required.\"\n }\n }\n};\n\nexport const Disabled: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n disabled: true\n }\n};\n\nexport const FullExample: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n required: true,\n description: \"Provide the required information for processing your request.\",\n note: \"Note: Ensure your selection or input is accurate before proceeding.\",\n validation: {\n isValid: false,\n message: \"This field is required.\"\n }\n }\n};\n\nexport const WithPresets: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n const presets = [\n { label: \"Today\", value: () => new Date() },\n { label: \"Tomorrow\", value: () => addDays(new Date(), 1) },\n { label: \"In 3 days\", value: () => addDays(new Date(), 3) },\n { label: \"In a week\", value: () => addDays(new Date(), 7) },\n { label: \"In 2 weeks\", value: () => addDays(new Date(), 14) },\n { label: \"Next Saturday\", value: () => nextSaturday(new Date()) }\n ];\n return (\n <DatePicker {...args} type=\"date\" value={value} onChange={setValue} presets={presets} />\n );\n },\n args: {\n label: \"Pick a date\",\n description: \"Choose a date or use a preset.\"\n }\n};\n\nexport const TypeTime: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"time\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Time\"\n }\n};\n\nexport const TypeDateTimeLocal: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"dateTimeLocal\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date & Time (local)\"\n }\n};\n\nexport const TypeDateTimeTz: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"dateTimeTz\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date & Time (with timezone)\"\n }\n};\n\nexport const TypeMonth: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"month\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Month\"\n }\n};\n\nexport const TypeWeek: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"week\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Week\"\n }\n};\n\nexport const TypeYear: Story = {\n render: args => {\n const [value, setValue] = useState<number | undefined>();\n return (\n <DatePicker\n {...args}\n type=\"year\"\n value={value}\n onChange={setValue}\n yearRange={[2015, 2035]}\n />\n );\n },\n args: {\n label: \"Year\"\n }\n};\n\nexport const TypeDateRange: Story = {\n render: args => {\n const [value, setValue] = useState<{ from?: string; to?: string } | undefined>();\n return <DatePicker {...args} type=\"dateRange\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date Range\"\n }\n};\n\nexport const TypeMultipleDates: Story = {\n render: args => {\n const [value, setValue] = useState<string[]>([]);\n return <DatePicker {...args} type=\"multipleDates\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Multiple Dates\"\n }\n};\n\nexport const TypeMultipleMonths: Story = {\n render: args => {\n const [value, setValue] = useState<string[]>([]);\n return <DatePicker {...args} type=\"multipleMonths\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Multiple Months\"\n }\n};\n\nexport const TypeMultipleYears: Story = {\n render: args => {\n const [value, setValue] = useState<number[]>([]);\n return (\n <DatePicker\n {...args}\n type=\"multipleYears\"\n value={value}\n onChange={setValue}\n yearRange={[2015, 2035]}\n />\n );\n },\n args: {\n label: \"Multiple Years\"\n }\n};\n\nconst formatValue = (value: any): string => {\n if (value === undefined || value === null) {\n return \"undefined\";\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (Array.isArray(value)) {\n return JSON.stringify(\n value.map((v: any) => (v instanceof Date ? v.toISOString() : v)),\n null,\n 2\n );\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value, (_k, v) => (v instanceof Date ? v.toISOString() : v), 2);\n }\n return String(value);\n};\n\nconst DocumentationInner = (args: any) => {\n const isMultiple = (args.type as string)?.startsWith(\"multiple\");\n const [value, setValue] = useState<any>(isMultiple ? [] : undefined);\n const [validation, setValidation] = useState({ isValid: true, message: \"\" });\n\n const handleChange = (newValue: any) => {\n setValue(newValue);\n const isEmpty =\n newValue === undefined ||\n newValue === null ||\n newValue === \"\" ||\n (Array.isArray(newValue) && newValue.length === 0);\n if (args.required && isEmpty) {\n setValidation({ isValid: false, message: \"This field is required\" });\n } else {\n setValidation({ isValid: true, message: \"\" });\n }\n };\n\n return (\n <div>\n <DatePicker {...args} value={value} onChange={handleChange} validation={validation} />\n <div className=\"mt-md rounded-md border-sm border-neutral-muted bg-neutral-light p-sm\">\n <div className=\"text-xs font-medium text-neutral-dimmed mb-xs\">Current value</div>\n <pre className=\"text-sm text-neutral-strong whitespace-pre-wrap m-0\">\n {formatValue(value)}\n </pre>\n </div>\n </div>\n );\n};\n\nexport const Documentation: Story = {\n render: args => {\n return <DocumentationInner key={args.type as string} {...args} />;\n },\n args: {\n type: \"date\",\n label: \"Event Date\",\n required: true,\n disabled: false,\n description: \"Select the date for your event\",\n note: \"Note: Choose a date that works for all participants\",\n placeholder: \"Pick a date\",\n validation: undefined\n },\n argTypes: {\n type: {\n description: \"The type of date picker variant to render\",\n control: \"select\",\n options: [\n \"date\",\n \"time\",\n \"dateTimeLocal\",\n \"dateTimeTz\",\n \"month\",\n \"week\",\n \"year\",\n \"dateRange\",\n \"multipleDates\",\n \"multipleMonths\",\n \"multipleYears\"\n ],\n defaultValue: \"date\"\n },\n label: {\n description: \"Label text displayed above the picker\",\n control: \"text\"\n },\n required: {\n description: \"Makes the field required\",\n control: \"boolean\",\n defaultValue: true\n },\n disabled: {\n description: \"Disables the date picker\",\n control: \"boolean\",\n defaultValue: false\n },\n description: {\n description: \"Helper text displayed below the label\",\n control: \"text\"\n },\n note: {\n description: \"Additional note displayed below the picker\",\n control: \"text\"\n },\n placeholder: {\n description: \"Placeholder text shown when no date is selected\",\n control: \"text\"\n },\n validation: {\n description:\n \"Object containing validation state and message. Please refer to the example code for details on usage.\"\n },\n onChange: {\n description: \"Callback function when the value changes\"\n }\n }\n};\n"],"names":["meta","DatePicker","args","value","setValue","useState","Default","WithLabel","WithLabelRequired","WithDescription","WithNotes","WithErrors","Disabled","FullExample","WithPresets","presets","Date","addDays","nextSaturday","TypeTime","TypeDateTimeLocal","TypeDateTimeTz","TypeMonth","TypeWeek","TypeYear","TypeDateRange","TypeMultipleDates","TypeMultipleMonths","TypeMultipleYears","formatValue","Array","JSON","v","_k","String","DocumentationInner","isMultiple","undefined","validation","setValidation","handleChange","newValue","isEmpty","Documentation"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DatePicker/DatePicker.stories.js","sources":["../../src/DatePicker/DatePicker.stories.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react\";\nimport { addDays, nextSaturday } from \"date-fns\";\nimport { DatePicker } from \"./DatePicker.js\";\n\nconst meta: Meta<typeof DatePicker> = {\n title: \"Components/Form/DatePicker\",\n component: DatePicker,\n argTypes: {\n onChange: { action: \"onChange\" },\n type: {\n control: \"select\",\n options: [\n \"date\",\n \"birthday\",\n \"time\",\n \"dateTimeLocal\",\n \"dateTimeTz\",\n \"month\",\n \"week\",\n \"year\",\n \"dateRange\",\n \"multipleDates\",\n \"multipleMonths\",\n \"multipleYears\"\n ],\n defaultValue: \"date\"\n },\n disabled: {\n control: \"boolean\",\n defaultValue: false\n }\n },\n parameters: {\n layout: \"padded\"\n },\n render: args => {\n const [value, setValue] = useState<any>();\n return <DatePicker {...args} value={value} onChange={setValue} />;\n }\n};\n\nexport default meta;\ntype Story = StoryObj<typeof DatePicker>;\n\nexport const Default: Story = {\n args: {\n type: \"date\"\n }\n};\n\nexport const WithLabel: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\"\n }\n};\n\nexport const WithLabelRequired: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n required: true\n }\n};\n\nexport const WithDescription: Story = {\n args: {\n type: \"date\",\n description: \"Provide the required information for processing your request.\"\n }\n};\n\nexport const WithNotes: Story = {\n args: {\n type: \"date\",\n note: \"Note: Ensure your selection or input is accurate before proceeding.\"\n }\n};\n\nexport const WithErrors: Story = {\n args: {\n type: \"date\",\n validation: {\n isValid: false,\n message: \"This field is required.\"\n }\n }\n};\n\nexport const Disabled: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n disabled: true\n }\n};\n\nexport const FullExample: Story = {\n args: {\n type: \"date\",\n label: \"Any field label\",\n required: true,\n description: \"Provide the required information for processing your request.\",\n note: \"Note: Ensure your selection or input is accurate before proceeding.\",\n validation: {\n isValid: false,\n message: \"This field is required.\"\n }\n }\n};\n\nexport const WithPresets: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n const presets = [\n { label: \"Today\", value: () => new Date() },\n { label: \"Tomorrow\", value: () => addDays(new Date(), 1) },\n { label: \"In 3 days\", value: () => addDays(new Date(), 3) },\n { label: \"In a week\", value: () => addDays(new Date(), 7) },\n { label: \"In 2 weeks\", value: () => addDays(new Date(), 14) },\n { label: \"Next Saturday\", value: () => nextSaturday(new Date()) }\n ];\n return (\n <DatePicker {...args} type=\"date\" value={value} onChange={setValue} presets={presets} />\n );\n },\n args: {\n label: \"Pick a date\",\n description: \"Choose a date or use a preset.\"\n }\n};\n\n/**\n * Picks a date one step at a time: a day, then a month, then a year (newest first). Built for\n * dates far in the past, like a date of birth. The value is a `YYYY-MM-DD` string.\n */\nexport const TypeBirthday: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>(\"1990-02-09\");\n return (\n <div className=\"flex flex-col gap-md max-w-[480px]\">\n <DatePicker {...args} type=\"birthday\" value={value} onChange={setValue} />\n <span className=\"text-sm text-neutral-muted\">Value: {value ?? \"(empty)\"}</span>\n </div>\n );\n },\n args: {\n label: \"Date of birth\"\n }\n};\n\n/**\n * With `minDate` and `maxDate`, years run from the latest allowed one down to the earliest,\n * and days and months that can't make an allowed date are dimmed. Here: 18 to 100 years old.\n */\nexport const TypeBirthdayWithLimits: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n const today = new Date();\n const [minDate] = useState(\n () => new Date(today.getFullYear() - 100, today.getMonth(), today.getDate())\n );\n const [maxDate] = useState(\n () => new Date(today.getFullYear() - 18, today.getMonth(), today.getDate())\n );\n return (\n <div className=\"flex flex-col gap-md max-w-[480px]\">\n <DatePicker\n {...args}\n type=\"birthday\"\n value={value}\n onChange={setValue}\n minDate={minDate}\n maxDate={maxDate}\n />\n <span className=\"text-sm text-neutral-muted\">Value: {value ?? \"(empty)\"}</span>\n </div>\n );\n },\n args: {\n label: \"Date of birth\",\n description: \"You must be 18 or older.\"\n }\n};\n\nexport const TypeTime: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"time\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Time\"\n }\n};\n\nexport const TypeDateTimeLocal: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"dateTimeLocal\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date & Time (local)\"\n }\n};\n\nexport const TypeDateTimeTz: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"dateTimeTz\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date & Time (with timezone)\"\n }\n};\n\nexport const TypeMonth: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"month\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Month\"\n }\n};\n\nexport const TypeWeek: Story = {\n render: args => {\n const [value, setValue] = useState<string | undefined>();\n return <DatePicker {...args} type=\"week\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Week\"\n }\n};\n\nexport const TypeYear: Story = {\n render: args => {\n const [value, setValue] = useState<number | undefined>();\n return (\n <DatePicker\n {...args}\n type=\"year\"\n value={value}\n onChange={setValue}\n yearRange={[2015, 2035]}\n />\n );\n },\n args: {\n label: \"Year\"\n }\n};\n\nexport const TypeDateRange: Story = {\n render: args => {\n const [value, setValue] = useState<{ from?: string; to?: string } | undefined>();\n return <DatePicker {...args} type=\"dateRange\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Date Range\"\n }\n};\n\nexport const TypeMultipleDates: Story = {\n render: args => {\n const [value, setValue] = useState<string[]>([]);\n return <DatePicker {...args} type=\"multipleDates\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Multiple Dates\"\n }\n};\n\nexport const TypeMultipleMonths: Story = {\n render: args => {\n const [value, setValue] = useState<string[]>([]);\n return <DatePicker {...args} type=\"multipleMonths\" value={value} onChange={setValue} />;\n },\n args: {\n label: \"Multiple Months\"\n }\n};\n\nexport const TypeMultipleYears: Story = {\n render: args => {\n const [value, setValue] = useState<number[]>([]);\n return (\n <DatePicker\n {...args}\n type=\"multipleYears\"\n value={value}\n onChange={setValue}\n yearRange={[2015, 2035]}\n />\n );\n },\n args: {\n label: \"Multiple Years\"\n }\n};\n\nconst formatValue = (value: any): string => {\n if (value === undefined || value === null) {\n return \"undefined\";\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n if (Array.isArray(value)) {\n return JSON.stringify(\n value.map((v: any) => (v instanceof Date ? v.toISOString() : v)),\n null,\n 2\n );\n }\n if (typeof value === \"object\") {\n return JSON.stringify(value, (_k, v) => (v instanceof Date ? v.toISOString() : v), 2);\n }\n return String(value);\n};\n\nconst DocumentationInner = (args: any) => {\n const isMultiple = (args.type as string)?.startsWith(\"multiple\");\n const [value, setValue] = useState<any>(isMultiple ? [] : undefined);\n const [validation, setValidation] = useState({ isValid: true, message: \"\" });\n\n const handleChange = (newValue: any) => {\n setValue(newValue);\n const isEmpty =\n newValue === undefined ||\n newValue === null ||\n newValue === \"\" ||\n (Array.isArray(newValue) && newValue.length === 0);\n if (args.required && isEmpty) {\n setValidation({ isValid: false, message: \"This field is required\" });\n } else {\n setValidation({ isValid: true, message: \"\" });\n }\n };\n\n return (\n <div>\n <DatePicker {...args} value={value} onChange={handleChange} validation={validation} />\n <div className=\"mt-md rounded-md border-sm border-neutral-muted bg-neutral-light p-sm\">\n <div className=\"text-xs font-medium text-neutral-dimmed mb-xs\">Current value</div>\n <pre className=\"text-sm text-neutral-strong whitespace-pre-wrap m-0\">\n {formatValue(value)}\n </pre>\n </div>\n </div>\n );\n};\n\nexport const Documentation: Story = {\n render: args => {\n return <DocumentationInner key={args.type as string} {...args} />;\n },\n args: {\n type: \"date\",\n label: \"Event Date\",\n required: true,\n disabled: false,\n description: \"Select the date for your event\",\n note: \"Note: Choose a date that works for all participants\",\n placeholder: \"Pick a date\",\n validation: undefined\n },\n argTypes: {\n type: {\n description: \"The type of date picker variant to render\",\n control: \"select\",\n options: [\n \"date\",\n \"time\",\n \"dateTimeLocal\",\n \"dateTimeTz\",\n \"month\",\n \"week\",\n \"year\",\n \"dateRange\",\n \"multipleDates\",\n \"multipleMonths\",\n \"multipleYears\"\n ],\n defaultValue: \"date\"\n },\n label: {\n description: \"Label text displayed above the picker\",\n control: \"text\"\n },\n required: {\n description: \"Makes the field required\",\n control: \"boolean\",\n defaultValue: true\n },\n disabled: {\n description: \"Disables the date picker\",\n control: \"boolean\",\n defaultValue: false\n },\n description: {\n description: \"Helper text displayed below the label\",\n control: \"text\"\n },\n note: {\n description: \"Additional note displayed below the picker\",\n control: \"text\"\n },\n placeholder: {\n description: \"Placeholder text shown when no date is selected\",\n control: \"text\"\n },\n validation: {\n description:\n \"Object containing validation state and message. Please refer to the example code for details on usage.\"\n },\n onChange: {\n description: \"Callback function when the value changes\"\n }\n }\n};\n"],"names":["meta","DatePicker","args","value","setValue","useState","Default","WithLabel","WithLabelRequired","WithDescription","WithNotes","WithErrors","Disabled","FullExample","WithPresets","presets","Date","addDays","nextSaturday","TypeBirthday","TypeBirthdayWithLimits","today","minDate","maxDate","TypeTime","TypeDateTimeLocal","TypeDateTimeTz","TypeMonth","TypeWeek","TypeYear","TypeDateRange","TypeMultipleDates","TypeMultipleMonths","TypeMultipleYears","formatValue","Array","JSON","v","_k","String","DocumentationInner","isMultiple","undefined","validation","setValidation","handleChange","newValue","isEmpty","Documentation"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { BirthdayPickerProps } from "../utils/types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Picks a date one part at a time: a day, then a month, then a year. Each pick moves to the
|
|
5
|
+
* next step. A pick that completes the date commits it, and the last step closes the picker.
|
|
6
|
+
* Meant for dates far in the past, like a date of birth, where paging a calendar month by
|
|
7
|
+
* month is slow.
|
|
8
|
+
*
|
|
9
|
+
* The value is a `YYYY-MM-DD` string, the same as the `date` picker's. Days, months and years
|
|
10
|
+
* that can't make a date between `minDate` and `maxDate` can't be picked.
|
|
11
|
+
*/
|
|
12
|
+
declare const BirthdayPicker: ({ value, onChange, disabled, size, variant, invalid, yearRange, minDate, maxDate, onOpenChange, className }: BirthdayPickerProps) => React.JSX.Element;
|
|
13
|
+
export { BirthdayPicker };
|
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import react, { useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { Popover } from "radix-ui";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/calendar_month.svg";
|
|
4
|
+
import { ReactComponent as close_svg_ReactComponent } from "@webiny/icons/close.svg";
|
|
5
|
+
import { Icon } from "../../Icon/index.js";
|
|
6
|
+
import { inputVariants } from "../../Input/index.js";
|
|
7
|
+
import { ScrollArea } from "../../ScrollArea/index.js";
|
|
8
|
+
import { useEscapeScrollLock } from "../../hooks/index.js";
|
|
9
|
+
import { cn, cva } from "../../utils.js";
|
|
10
|
+
import { BirthdayPickerCell } from "./BirthdayPickerCell.js";
|
|
11
|
+
import { BirthdayPickerSegments } from "./BirthdayPickerSegments.js";
|
|
12
|
+
import { MONTH_NAMES_FULL } from "../utils/constants.js";
|
|
13
|
+
import { birthdayYears, formatBirthdayValue, isDayDisabled, isMonthDisabled, isYearDisabled, nextBirthdayStep, pad, parseBirthdayValue, pickDay, pickMonth, pickYear } from "../utils/birthdayHelpers.js";
|
|
14
|
+
const STEPS = [
|
|
15
|
+
"day",
|
|
16
|
+
"month",
|
|
17
|
+
"year"
|
|
18
|
+
];
|
|
19
|
+
const STEP_LABELS = {
|
|
20
|
+
day: "Select a day",
|
|
21
|
+
month: "Select a month",
|
|
22
|
+
year: "Select a year"
|
|
23
|
+
};
|
|
24
|
+
const DAYS = Array.from({
|
|
25
|
+
length: 31
|
|
26
|
+
}, (_, index)=>index + 1);
|
|
27
|
+
const MONTHS = Array.from({
|
|
28
|
+
length: 12
|
|
29
|
+
}, (_, index)=>index + 1);
|
|
30
|
+
const EXPAND_MS = 250;
|
|
31
|
+
const SLIDE_MS = 300;
|
|
32
|
+
const FADE_OUT_MS = 120;
|
|
33
|
+
const COLLAPSE_MS = 200;
|
|
34
|
+
const cardVariants = cva([
|
|
35
|
+
"bg-neutral-base border-sm border-neutral-black shadow-lg overflow-hidden",
|
|
36
|
+
"text-md text-neutral-strong fill-neutral-xstrong",
|
|
37
|
+
"w-(--radix-popover-trigger-width) min-w-[320px]"
|
|
38
|
+
], {
|
|
39
|
+
variants: {
|
|
40
|
+
size: {
|
|
41
|
+
md: "rounded-md",
|
|
42
|
+
lg: "rounded-md",
|
|
43
|
+
xl: "rounded-lg leading-6"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
defaultVariants: {
|
|
47
|
+
size: "lg"
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const cardHeaderVariants = cva("flex items-center justify-between gap-sm", {
|
|
51
|
+
variants: {
|
|
52
|
+
size: {
|
|
53
|
+
md: "px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]",
|
|
54
|
+
lg: "px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]",
|
|
55
|
+
xl: "px-[calc(var(--padding-md)-(var(--border-width-sm)))]"
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
defaultVariants: {
|
|
59
|
+
size: "lg"
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const gridHeight = "h-[calc(6*var(--spacing-xl)+5*var(--spacing-sm)+2*var(--spacing-xs))]";
|
|
63
|
+
const dayGridWidth = "max-w-[calc(6*var(--spacing-xxl)+5*var(--spacing-xs))]";
|
|
64
|
+
const wideGridWidth = "max-w-[calc(5*var(--spacing-3xl)+4*var(--spacing-sm))]";
|
|
65
|
+
const BirthdayPicker = ({ value, onChange, disabled, size, variant, invalid, yearRange, minDate, maxDate, onOpenChange, className })=>{
|
|
66
|
+
const [open, setOpen] = useState(false);
|
|
67
|
+
const [phase, setPhase] = useState("collapsed");
|
|
68
|
+
const [step, setStep] = useState("day");
|
|
69
|
+
const [draft, setDraft] = useState({});
|
|
70
|
+
const [barHeight, setBarHeight] = useState(0);
|
|
71
|
+
const [bodyHeight, setBodyHeight] = useState(0);
|
|
72
|
+
const barRef = useRef(null);
|
|
73
|
+
const cardRef = useRef(null);
|
|
74
|
+
const bodyRef = useRef(null);
|
|
75
|
+
const panelRefs = useRef({
|
|
76
|
+
day: null,
|
|
77
|
+
month: null,
|
|
78
|
+
year: null
|
|
79
|
+
});
|
|
80
|
+
const picked = useRef(new Set());
|
|
81
|
+
const closeTimer = useRef();
|
|
82
|
+
const escapeScrollLock = useEscapeScrollLock();
|
|
83
|
+
const saved = useMemo(()=>parseBirthdayValue(value), [
|
|
84
|
+
value
|
|
85
|
+
]);
|
|
86
|
+
const years = useMemo(()=>birthdayYears(yearRange, saved.year, {
|
|
87
|
+
minDate,
|
|
88
|
+
maxDate
|
|
89
|
+
}), [
|
|
90
|
+
yearRange,
|
|
91
|
+
saved.year,
|
|
92
|
+
minDate,
|
|
93
|
+
maxDate
|
|
94
|
+
]);
|
|
95
|
+
const range = useMemo(()=>({
|
|
96
|
+
years,
|
|
97
|
+
minDate,
|
|
98
|
+
maxDate
|
|
99
|
+
}), [
|
|
100
|
+
years,
|
|
101
|
+
minDate,
|
|
102
|
+
maxDate
|
|
103
|
+
]);
|
|
104
|
+
useEffect(()=>()=>clearTimeout(closeTimer.current), []);
|
|
105
|
+
const expand = ()=>{
|
|
106
|
+
if (disabled || open) return;
|
|
107
|
+
clearTimeout(closeTimer.current);
|
|
108
|
+
setBarHeight(barRef.current?.offsetHeight ?? 0);
|
|
109
|
+
setDraft(saved);
|
|
110
|
+
picked.current = new Set();
|
|
111
|
+
setStep("day");
|
|
112
|
+
setPhase("collapsed");
|
|
113
|
+
setOpen(true);
|
|
114
|
+
onOpenChange?.(true);
|
|
115
|
+
};
|
|
116
|
+
const collapse = ()=>{
|
|
117
|
+
if ("collapsing" === phase) return;
|
|
118
|
+
setPhase("collapsing");
|
|
119
|
+
closeTimer.current = setTimeout(()=>{
|
|
120
|
+
setOpen(false);
|
|
121
|
+
setPhase("collapsed");
|
|
122
|
+
onOpenChange?.(false);
|
|
123
|
+
}, FADE_OUT_MS + COLLAPSE_MS);
|
|
124
|
+
};
|
|
125
|
+
useLayoutEffect(()=>{
|
|
126
|
+
if (!open || "collapsed" !== phase) return;
|
|
127
|
+
let second = 0;
|
|
128
|
+
const first = requestAnimationFrame(()=>{
|
|
129
|
+
second = requestAnimationFrame(()=>{
|
|
130
|
+
setBodyHeight(bodyRef.current?.offsetHeight ?? 0);
|
|
131
|
+
setPhase("expanded");
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
return ()=>{
|
|
135
|
+
cancelAnimationFrame(first);
|
|
136
|
+
cancelAnimationFrame(second);
|
|
137
|
+
};
|
|
138
|
+
}, [
|
|
139
|
+
open,
|
|
140
|
+
phase
|
|
141
|
+
]);
|
|
142
|
+
useEffect(()=>{
|
|
143
|
+
if ("expanded" !== phase) return;
|
|
144
|
+
const timer = setTimeout(()=>{
|
|
145
|
+
const rect = cardRef.current?.getBoundingClientRect();
|
|
146
|
+
if (rect && rect.bottom > window.innerHeight) barRef.current?.scrollIntoView({
|
|
147
|
+
block: "center",
|
|
148
|
+
behavior: "smooth"
|
|
149
|
+
});
|
|
150
|
+
}, EXPAND_MS);
|
|
151
|
+
return ()=>clearTimeout(timer);
|
|
152
|
+
}, [
|
|
153
|
+
phase
|
|
154
|
+
]);
|
|
155
|
+
useEffect(()=>{
|
|
156
|
+
if (!open || "expanded" !== phase) return;
|
|
157
|
+
const panel = panelRefs.current[step];
|
|
158
|
+
if (!panel) return;
|
|
159
|
+
const selected = panel.querySelector("[data-selected=true]");
|
|
160
|
+
const viewport = panel.querySelector("[data-slot=scroll-area-viewport]");
|
|
161
|
+
if (viewport) if (selected) {
|
|
162
|
+
const offset = selected.getBoundingClientRect().top - viewport.getBoundingClientRect().top;
|
|
163
|
+
viewport.scrollTop += offset - viewport.clientHeight / 2 + selected.offsetHeight / 2;
|
|
164
|
+
} else viewport.scrollTop = 0;
|
|
165
|
+
const target = selected ?? panel.querySelector("button:enabled");
|
|
166
|
+
target?.focus({
|
|
167
|
+
preventScroll: true
|
|
168
|
+
});
|
|
169
|
+
}, [
|
|
170
|
+
open,
|
|
171
|
+
phase,
|
|
172
|
+
step
|
|
173
|
+
]);
|
|
174
|
+
const goToStep = (next)=>{
|
|
175
|
+
setStep(next);
|
|
176
|
+
};
|
|
177
|
+
const onPick = (pickedStep, next)=>{
|
|
178
|
+
setDraft(next);
|
|
179
|
+
picked.current.add(pickedStep);
|
|
180
|
+
const nextValue = formatBirthdayValue(next);
|
|
181
|
+
if (nextValue) onChange?.(nextValue);
|
|
182
|
+
const nextStep = nextBirthdayStep(next, pickedStep, picked.current);
|
|
183
|
+
if (nextStep) return void goToStep(nextStep);
|
|
184
|
+
collapse();
|
|
185
|
+
};
|
|
186
|
+
const onPickDay = (day)=>onPick("day", pickDay(draft, day, range));
|
|
187
|
+
const onPickMonth = (month)=>onPick("month", pickMonth(draft, month, range));
|
|
188
|
+
const onPickYear = (year)=>onPick("year", pickYear(draft, year));
|
|
189
|
+
const onBarKeyDown = (event)=>{
|
|
190
|
+
if (event.target !== event.currentTarget) return;
|
|
191
|
+
if ("Enter" === event.key || " " === event.key || "ArrowDown" === event.key) {
|
|
192
|
+
event.preventDefault();
|
|
193
|
+
expand();
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
const expanded = "expanded" === phase;
|
|
197
|
+
const cardHeight = expanded ? barHeight + bodyHeight : barHeight;
|
|
198
|
+
const stepIndex = STEPS.indexOf(step);
|
|
199
|
+
const icons = (interactive)=>/*#__PURE__*/ react.createElement("span", {
|
|
200
|
+
className: "flex items-center gap-xs shrink-0"
|
|
201
|
+
}, interactive && value && !disabled ? /*#__PURE__*/ react.createElement("button", {
|
|
202
|
+
type: "button",
|
|
203
|
+
"aria-label": "Clear date",
|
|
204
|
+
className: "flex cursor-pointer rounded-xs outline-none focus-visible:ring-sm focus-visible:ring-primary-dimmed",
|
|
205
|
+
onClick: (event)=>{
|
|
206
|
+
event.stopPropagation();
|
|
207
|
+
onChange?.(void 0);
|
|
208
|
+
},
|
|
209
|
+
onKeyDown: (event)=>event.stopPropagation()
|
|
210
|
+
}, /*#__PURE__*/ react.createElement(Icon, {
|
|
211
|
+
icon: /*#__PURE__*/ react.createElement(close_svg_ReactComponent, null),
|
|
212
|
+
label: "Clear",
|
|
213
|
+
size: "sm",
|
|
214
|
+
color: "inherit"
|
|
215
|
+
})) : null, /*#__PURE__*/ react.createElement(Icon, {
|
|
216
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
217
|
+
label: "Calendar",
|
|
218
|
+
size: "sm",
|
|
219
|
+
color: "inherit"
|
|
220
|
+
}));
|
|
221
|
+
const panelProps = (panelStep)=>({
|
|
222
|
+
ref: (element)=>{
|
|
223
|
+
panelRefs.current[panelStep] = element;
|
|
224
|
+
},
|
|
225
|
+
"aria-hidden": step !== panelStep,
|
|
226
|
+
"data-step": panelStep
|
|
227
|
+
});
|
|
228
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
229
|
+
className: className
|
|
230
|
+
}, /*#__PURE__*/ react.createElement(Popover.Root, {
|
|
231
|
+
open: open,
|
|
232
|
+
onOpenChange: (isOpen)=>isOpen ? expand() : collapse()
|
|
233
|
+
}, /*#__PURE__*/ react.createElement(Popover.Anchor, {
|
|
234
|
+
asChild: true
|
|
235
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
236
|
+
ref: barRef,
|
|
237
|
+
role: "button",
|
|
238
|
+
tabIndex: disabled ? -1 : 0,
|
|
239
|
+
"aria-haspopup": "dialog",
|
|
240
|
+
"aria-expanded": open,
|
|
241
|
+
"data-disabled": disabled,
|
|
242
|
+
"data-focused": open,
|
|
243
|
+
onClick: expand,
|
|
244
|
+
onKeyDown: onBarKeyDown,
|
|
245
|
+
className: cn(inputVariants({
|
|
246
|
+
size,
|
|
247
|
+
variant,
|
|
248
|
+
invalid
|
|
249
|
+
}), "cursor-pointer justify-between select-none min-w-0 overflow-hidden outline-none", disabled && "pointer-events-none")
|
|
250
|
+
}, /*#__PURE__*/ react.createElement(BirthdayPickerSegments, {
|
|
251
|
+
parts: saved
|
|
252
|
+
}), icons(true))), /*#__PURE__*/ react.createElement(Popover.Portal, null, /*#__PURE__*/ react.createElement(Popover.Content, {
|
|
253
|
+
ref: escapeScrollLock,
|
|
254
|
+
side: "bottom",
|
|
255
|
+
align: "start",
|
|
256
|
+
sideOffset: -barHeight,
|
|
257
|
+
avoidCollisions: false,
|
|
258
|
+
onOpenAutoFocus: (event)=>event.preventDefault(),
|
|
259
|
+
onCloseAutoFocus: (event)=>{
|
|
260
|
+
event.preventDefault();
|
|
261
|
+
barRef.current?.focus({
|
|
262
|
+
preventScroll: true
|
|
263
|
+
});
|
|
264
|
+
},
|
|
265
|
+
className: "z-popover outline-none"
|
|
266
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
267
|
+
ref: cardRef,
|
|
268
|
+
role: "dialog",
|
|
269
|
+
"aria-label": STEP_LABELS[step],
|
|
270
|
+
"data-phase": phase,
|
|
271
|
+
className: cn(cardVariants({
|
|
272
|
+
size
|
|
273
|
+
}), "collapsing" === phase && "pointer-events-none"),
|
|
274
|
+
style: {
|
|
275
|
+
height: cardHeight,
|
|
276
|
+
transition: "collapsing" === phase ? `height ${COLLAPSE_MS}ms ease-in ${FADE_OUT_MS}ms` : `height ${EXPAND_MS}ms ease-out`
|
|
277
|
+
}
|
|
278
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
279
|
+
className: cardHeaderVariants({
|
|
280
|
+
size
|
|
281
|
+
}),
|
|
282
|
+
style: {
|
|
283
|
+
height: `calc(${barHeight}px - 2 * var(--border-width-sm))`
|
|
284
|
+
}
|
|
285
|
+
}, /*#__PURE__*/ react.createElement(BirthdayPickerSegments, {
|
|
286
|
+
parts: draft,
|
|
287
|
+
activeStep: step,
|
|
288
|
+
onStepClick: goToStep
|
|
289
|
+
}), icons(false)), /*#__PURE__*/ react.createElement("div", {
|
|
290
|
+
ref: bodyRef
|
|
291
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
292
|
+
className: "h-px bg-neutral-dimmed origin-center",
|
|
293
|
+
style: {
|
|
294
|
+
transform: expanded ? "scaleX(1)" : "scaleX(0)",
|
|
295
|
+
transition: `transform ${EXPAND_MS}ms ease-out`
|
|
296
|
+
}
|
|
297
|
+
}), /*#__PURE__*/ react.createElement("div", {
|
|
298
|
+
className: "pb-md",
|
|
299
|
+
style: {
|
|
300
|
+
opacity: expanded ? 1 : 0,
|
|
301
|
+
transition: expanded ? `opacity 200ms ease-out ${EXPAND_MS - 100}ms` : `opacity ${FADE_OUT_MS}ms ease-in`
|
|
302
|
+
}
|
|
303
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
304
|
+
className: "pt-sm-extra pb-xs text-center text-sm text-neutral-muted",
|
|
305
|
+
"aria-live": "polite"
|
|
306
|
+
}, STEP_LABELS[step]), /*#__PURE__*/ react.createElement("div", {
|
|
307
|
+
className: cn("overflow-hidden", gridHeight)
|
|
308
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
309
|
+
className: "flex h-full w-[300%]",
|
|
310
|
+
style: {
|
|
311
|
+
transform: `translateX(-${100 * stepIndex / 3}%)`,
|
|
312
|
+
transition: `transform ${SLIDE_MS}ms ease-in-out`
|
|
313
|
+
}
|
|
314
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
315
|
+
...panelProps("day"),
|
|
316
|
+
className: "w-1/3 h-full px-md py-xs"
|
|
317
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
318
|
+
className: cn("grid grid-cols-6 gap-x-xs gap-y-sm mx-auto", dayGridWidth)
|
|
319
|
+
}, DAYS.map((day)=>/*#__PURE__*/ react.createElement(BirthdayPickerCell, {
|
|
320
|
+
key: day,
|
|
321
|
+
selected: draft.day === day,
|
|
322
|
+
disabled: isDayDisabled(day, range),
|
|
323
|
+
tabbable: "day" === step,
|
|
324
|
+
onClick: ()=>onPickDay(day)
|
|
325
|
+
}, pad(day))))), /*#__PURE__*/ react.createElement("div", {
|
|
326
|
+
...panelProps("month"),
|
|
327
|
+
className: "w-1/3 h-full px-md py-xs flex items-center"
|
|
328
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
329
|
+
className: cn("grid grid-cols-3 gap-x-sm gap-y-md w-full mx-auto", wideGridWidth)
|
|
330
|
+
}, MONTHS.map((month)=>/*#__PURE__*/ react.createElement(BirthdayPickerCell, {
|
|
331
|
+
key: month,
|
|
332
|
+
selected: draft.month === month,
|
|
333
|
+
disabled: isMonthDisabled(month, draft, range),
|
|
334
|
+
tabbable: "month" === step,
|
|
335
|
+
onClick: ()=>onPickMonth(month)
|
|
336
|
+
}, MONTH_NAMES_FULL[month - 1])))), /*#__PURE__*/ react.createElement("div", {
|
|
337
|
+
...panelProps("year"),
|
|
338
|
+
className: "w-1/3 h-full"
|
|
339
|
+
}, /*#__PURE__*/ react.createElement(ScrollArea, {
|
|
340
|
+
className: "h-full"
|
|
341
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
342
|
+
className: "px-md py-xs"
|
|
343
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
344
|
+
className: cn("grid grid-cols-5 gap-sm w-full mx-auto", wideGridWidth)
|
|
345
|
+
}, years.map((year)=>/*#__PURE__*/ react.createElement(BirthdayPickerCell, {
|
|
346
|
+
key: year,
|
|
347
|
+
selected: draft.year === year,
|
|
348
|
+
disabled: isYearDisabled(year, draft, range),
|
|
349
|
+
tabbable: "year" === step,
|
|
350
|
+
onClick: ()=>onPickYear(year)
|
|
351
|
+
}, year)))))))))))))));
|
|
352
|
+
};
|
|
353
|
+
export { BirthdayPicker };
|
|
354
|
+
|
|
355
|
+
//# sourceMappingURL=BirthdayPicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker/primitives/BirthdayPicker.js","sources":["../../../src/DatePicker/primitives/BirthdayPicker.tsx"],"sourcesContent":["import React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { Popover as RadixPopover } from \"radix-ui\";\nimport { ReactComponent as CalendarMonthIcon } from \"@webiny/icons/calendar_month.svg\";\nimport { ReactComponent as CloseIcon } from \"@webiny/icons/close.svg\";\nimport { Icon } from \"~/Icon/index.js\";\nimport { inputVariants } from \"~/Input/index.js\";\nimport { ScrollArea } from \"~/ScrollArea/index.js\";\nimport { useEscapeScrollLock } from \"~/hooks/index.js\";\nimport { cn, cva } from \"~/utils.js\";\nimport type { BirthdayPickerProps } from \"../utils/types.js\";\nimport { BirthdayPickerCell } from \"./BirthdayPickerCell.js\";\nimport { BirthdayPickerSegments } from \"./BirthdayPickerSegments.js\";\nimport { MONTH_NAMES_FULL } from \"../utils/constants.js\";\nimport {\n type BirthdayParts,\n type BirthdayStep,\n type BirthdayRange,\n birthdayYears,\n formatBirthdayValue,\n isDayDisabled,\n isMonthDisabled,\n isYearDisabled,\n nextBirthdayStep,\n pad,\n parseBirthdayValue,\n pickDay,\n pickMonth,\n pickYear\n} from \"../utils/birthdayHelpers.js\";\n\ntype Step = BirthdayStep;\n\nconst STEPS: Step[] = [\"day\", \"month\", \"year\"];\n\nconst STEP_LABELS: Record<Step, string> = {\n day: \"Select a day\",\n month: \"Select a month\",\n year: \"Select a year\"\n};\n\nconst DAYS = Array.from({ length: 31 }, (_, index) => index + 1);\nconst MONTHS = Array.from({ length: 12 }, (_, index) => index + 1);\n\n/** Timings, in ms. */\nconst EXPAND_MS = 250;\nconst SLIDE_MS = 300;\nconst FADE_OUT_MS = 120;\nconst COLLAPSE_MS = 200;\n\n/**\n * - `collapsed`: the card is mounted at the bar's height, about to grow (or done shrinking).\n * - `expanded`: the card is at full height with the step grid showing.\n * - `collapsing`: the body fades and the card shrinks back into the bar.\n */\ntype Phase = \"collapsed\" | \"expanded\" | \"collapsing\";\n\n/**\n * The card is the bar, grown: it keeps the focused input's border, its corner radius and, in the\n * header, its horizontal padding, so the date doesn't move when the card opens.\n */\nconst cardVariants = cva(\n [\n \"bg-neutral-base border-sm border-neutral-black shadow-lg overflow-hidden\",\n \"text-md text-neutral-strong fill-neutral-xstrong\",\n \"w-(--radix-popover-trigger-width) min-w-[320px]\"\n ],\n {\n variants: {\n size: {\n md: \"rounded-md\",\n lg: \"rounded-md\",\n xl: \"rounded-lg leading-6\"\n }\n },\n defaultVariants: {\n size: \"lg\"\n }\n }\n);\n\nconst cardHeaderVariants = cva(\"flex items-center justify-between gap-sm\", {\n variants: {\n size: {\n md: \"px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]\",\n lg: \"px-[calc(var(--padding-sm-extra)-(var(--border-width-sm)))]\",\n xl: \"px-[calc(var(--padding-md)-(var(--border-width-sm)))]\"\n }\n },\n defaultVariants: {\n size: \"lg\"\n }\n});\n\n/**\n * Every step shares one grid height, the day grid's six rows plus the inset that keeps a cell's\n * focus ring inside the clipped area, so the card keeps its height as the steps slide. Only the\n * year grid scrolls inside it.\n */\nconst gridHeight = \"h-[calc(6*var(--spacing-xl)+5*var(--spacing-sm)+2*var(--spacing-xs))]\";\nconst dayGridWidth = \"max-w-[calc(6*var(--spacing-xxl)+5*var(--spacing-xs))]\";\nconst wideGridWidth = \"max-w-[calc(5*var(--spacing-3xl)+4*var(--spacing-sm))]\";\n\n/**\n * Picks a date one part at a time: a day, then a month, then a year. Each pick moves to the\n * next step. A pick that completes the date commits it, and the last step closes the picker.\n * Meant for dates far in the past, like a date of birth, where paging a calendar month by\n * month is slow.\n *\n * The value is a `YYYY-MM-DD` string, the same as the `date` picker's. Days, months and years\n * that can't make a date between `minDate` and `maxDate` can't be picked.\n */\nconst BirthdayPicker = ({\n value,\n onChange,\n disabled,\n size,\n variant,\n invalid,\n yearRange,\n minDate,\n maxDate,\n onOpenChange,\n className\n}: BirthdayPickerProps) => {\n const [open, setOpen] = useState(false);\n const [phase, setPhase] = useState<Phase>(\"collapsed\");\n const [step, setStep] = useState<Step>(\"day\");\n const [draft, setDraft] = useState<BirthdayParts>({});\n const [barHeight, setBarHeight] = useState(0);\n const [bodyHeight, setBodyHeight] = useState(0);\n\n const barRef = useRef<HTMLDivElement>(null);\n const cardRef = useRef<HTMLDivElement | null>(null);\n /** The divider and the step body: what the card adds to the bar's height when it grows. */\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const panelRefs = useRef<Record<Step, HTMLDivElement | null>>({\n day: null,\n month: null,\n year: null\n });\n /** The steps picked since the card opened. */\n const picked = useRef<Set<Step>>(new Set());\n const closeTimer = useRef<ReturnType<typeof setTimeout>>();\n const escapeScrollLock = useEscapeScrollLock<HTMLDivElement>();\n\n const saved = useMemo(() => parseBirthdayValue(value), [value]);\n const years = useMemo(\n () => birthdayYears(yearRange, saved.year, { minDate, maxDate }),\n [yearRange, saved.year, minDate, maxDate]\n );\n const range = useMemo<BirthdayRange>(\n () => ({ years, minDate, maxDate }),\n [years, minDate, maxDate]\n );\n\n useEffect(() => () => clearTimeout(closeTimer.current), []);\n\n const expand = () => {\n if (disabled || open) {\n return;\n }\n clearTimeout(closeTimer.current);\n setBarHeight(barRef.current?.offsetHeight ?? 0);\n setDraft(saved);\n picked.current = new Set();\n setStep(\"day\");\n setPhase(\"collapsed\");\n setOpen(true);\n onOpenChange?.(true);\n };\n\n const collapse = () => {\n if (phase === \"collapsing\") {\n return;\n }\n setPhase(\"collapsing\");\n closeTimer.current = setTimeout(() => {\n setOpen(false);\n setPhase(\"collapsed\");\n onOpenChange?.(false);\n }, FADE_OUT_MS + COLLAPSE_MS);\n };\n\n /**\n * The card mounts at the bar's height. Wait for the popper to place it before growing,\n * or the first part of the growth happens off screen. The body is laid out by its own\n * spacing, so its height is measured here, once it exists, and the card grows by that much.\n */\n useLayoutEffect(() => {\n if (!open || phase !== \"collapsed\") {\n return;\n }\n let second = 0;\n const first = requestAnimationFrame(() => {\n second = requestAnimationFrame(() => {\n setBodyHeight(bodyRef.current?.offsetHeight ?? 0);\n setPhase(\"expanded\");\n });\n });\n return () => {\n cancelAnimationFrame(first);\n cancelAnimationFrame(second);\n };\n }, [open, phase]);\n\n /** A card that grows past the bottom of the viewport brings the field into view. */\n useEffect(() => {\n if (phase !== \"expanded\") {\n return;\n }\n const timer = setTimeout(() => {\n const rect = cardRef.current?.getBoundingClientRect();\n if (rect && rect.bottom > window.innerHeight) {\n barRef.current?.scrollIntoView({ block: \"center\", behavior: \"smooth\" });\n }\n }, EXPAND_MS);\n return () => clearTimeout(timer);\n }, [phase]);\n\n /**\n * Entering a step focuses its selected cell (or its first one) so the keyboard picks up\n * where the pointer would. The year grid also scrolls the selected year into view, or\n * back to the newest year when none is selected.\n *\n * The popover portal mounts its content a render after `open` flips, so this waits for\n * the card to expand, by which point the panels exist.\n */\n useEffect(() => {\n if (!open || phase !== \"expanded\") {\n return;\n }\n const panel = panelRefs.current[step];\n if (!panel) {\n return;\n }\n const selected = panel.querySelector<HTMLButtonElement>(\"[data-selected=true]\");\n const viewport = panel.querySelector<HTMLDivElement>(\"[data-slot=scroll-area-viewport]\");\n if (viewport) {\n if (selected) {\n const offset =\n selected.getBoundingClientRect().top - viewport.getBoundingClientRect().top;\n viewport.scrollTop +=\n offset - viewport.clientHeight / 2 + selected.offsetHeight / 2;\n } else {\n viewport.scrollTop = 0;\n }\n }\n const target = selected ?? panel.querySelector<HTMLButtonElement>(\"button:enabled\");\n target?.focus({ preventScroll: true });\n }, [open, phase, step]);\n\n const goToStep = (next: Step) => {\n setStep(next);\n };\n\n /**\n * Any pick that completes the date commits it, so closing the card early never drops a\n * date the header shows as filled. The header segments let parts be picked out of order.\n */\n const onPick = (pickedStep: Step, next: BirthdayParts) => {\n setDraft(next);\n picked.current.add(pickedStep);\n const nextValue = formatBirthdayValue(next);\n if (nextValue) {\n onChange?.(nextValue);\n }\n const nextStep = nextBirthdayStep(next, pickedStep, picked.current);\n if (nextStep) {\n goToStep(nextStep);\n return;\n }\n collapse();\n };\n\n const onPickDay = (day: number) => onPick(\"day\", pickDay(draft, day, range));\n\n const onPickMonth = (month: number) => onPick(\"month\", pickMonth(draft, month, range));\n\n const onPickYear = (year: number) => onPick(\"year\", pickYear(draft, year));\n\n const onBarKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) {\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \" || event.key === \"ArrowDown\") {\n event.preventDefault();\n expand();\n }\n };\n\n const expanded = phase === \"expanded\";\n const cardHeight = expanded ? barHeight + bodyHeight : barHeight;\n const stepIndex = STEPS.indexOf(step);\n\n const icons = (interactive: boolean) => (\n <span className=\"flex items-center gap-xs shrink-0\">\n {interactive && value && !disabled ? (\n <button\n type=\"button\"\n aria-label=\"Clear date\"\n className=\"flex cursor-pointer rounded-xs outline-none focus-visible:ring-sm focus-visible:ring-primary-dimmed\"\n onClick={event => {\n event.stopPropagation();\n onChange?.(undefined);\n }}\n onKeyDown={event => event.stopPropagation()}\n >\n <Icon icon={<CloseIcon />} label=\"Clear\" size=\"sm\" color=\"inherit\" />\n </button>\n ) : null}\n <Icon icon={<CalendarMonthIcon />} label=\"Calendar\" size=\"sm\" color=\"inherit\" />\n </span>\n );\n\n const panelProps = (panelStep: Step) => ({\n ref: (element: HTMLDivElement | null) => {\n panelRefs.current[panelStep] = element;\n },\n \"aria-hidden\": step !== panelStep,\n \"data-step\": panelStep\n });\n\n return (\n <div className={className}>\n <RadixPopover.Root\n open={open}\n onOpenChange={isOpen => (isOpen ? expand() : collapse())}\n >\n <RadixPopover.Anchor asChild>\n <div\n ref={barRef}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n data-disabled={disabled}\n data-focused={open}\n onClick={expand}\n onKeyDown={onBarKeyDown}\n className={cn(\n inputVariants({ size, variant, invalid }),\n \"cursor-pointer justify-between select-none min-w-0 overflow-hidden outline-none\",\n disabled && \"pointer-events-none\"\n )}\n >\n <BirthdayPickerSegments parts={saved} />\n {icons(true)}\n </div>\n </RadixPopover.Anchor>\n <RadixPopover.Portal>\n <RadixPopover.Content\n ref={escapeScrollLock}\n side=\"bottom\"\n align=\"start\"\n sideOffset={-barHeight}\n avoidCollisions={false}\n onOpenAutoFocus={event => event.preventDefault()}\n onCloseAutoFocus={event => {\n event.preventDefault();\n barRef.current?.focus({ preventScroll: true });\n }}\n className=\"z-popover outline-none\"\n >\n <div\n ref={cardRef}\n role=\"dialog\"\n aria-label={STEP_LABELS[step]}\n data-phase={phase}\n className={cn(\n cardVariants({ size }),\n phase === \"collapsing\" && \"pointer-events-none\"\n )}\n style={{\n height: cardHeight,\n transition:\n phase === \"collapsing\"\n ? `height ${COLLAPSE_MS}ms ease-in ${FADE_OUT_MS}ms`\n : `height ${EXPAND_MS}ms ease-out`\n }}\n >\n <div\n className={cardHeaderVariants({ size })}\n style={{\n height: `calc(${barHeight}px - 2 * var(--border-width-sm))`\n }}\n >\n <BirthdayPickerSegments\n parts={draft}\n activeStep={step}\n onStepClick={goToStep}\n />\n {icons(false)}\n </div>\n <div ref={bodyRef}>\n <div\n className=\"h-px bg-neutral-dimmed origin-center\"\n style={{\n transform: expanded ? \"scaleX(1)\" : \"scaleX(0)\",\n transition: `transform ${EXPAND_MS}ms ease-out`\n }}\n />\n <div\n className=\"pb-md\"\n style={{\n opacity: expanded ? 1 : 0,\n transition: expanded\n ? `opacity 200ms ease-out ${EXPAND_MS - 100}ms`\n : `opacity ${FADE_OUT_MS}ms ease-in`\n }}\n >\n <div\n className=\"pt-sm-extra pb-xs text-center text-sm text-neutral-muted\"\n aria-live=\"polite\"\n >\n {STEP_LABELS[step]}\n </div>\n <div className={cn(\"overflow-hidden\", gridHeight)}>\n <div\n className=\"flex h-full w-[300%]\"\n style={{\n transform: `translateX(-${(stepIndex * 100) / 3}%)`,\n transition: `transform ${SLIDE_MS}ms ease-in-out`\n }}\n >\n <div\n {...panelProps(\"day\")}\n className=\"w-1/3 h-full px-md py-xs\"\n >\n <div\n className={cn(\n \"grid grid-cols-6 gap-x-xs gap-y-sm mx-auto\",\n dayGridWidth\n )}\n >\n {DAYS.map(day => (\n <BirthdayPickerCell\n key={day}\n selected={draft.day === day}\n disabled={isDayDisabled(day, range)}\n tabbable={step === \"day\"}\n onClick={() => onPickDay(day)}\n >\n {pad(day)}\n </BirthdayPickerCell>\n ))}\n </div>\n </div>\n <div\n {...panelProps(\"month\")}\n className=\"w-1/3 h-full px-md py-xs flex items-center\"\n >\n <div\n className={cn(\n \"grid grid-cols-3 gap-x-sm gap-y-md w-full mx-auto\",\n wideGridWidth\n )}\n >\n {MONTHS.map(month => (\n <BirthdayPickerCell\n key={month}\n selected={draft.month === month}\n disabled={isMonthDisabled(\n month,\n draft,\n range\n )}\n tabbable={step === \"month\"}\n onClick={() => onPickMonth(month)}\n >\n {MONTH_NAMES_FULL[month - 1]}\n </BirthdayPickerCell>\n ))}\n </div>\n </div>\n <div {...panelProps(\"year\")} className=\"w-1/3 h-full\">\n <ScrollArea className=\"h-full\">\n <div className=\"px-md py-xs\">\n <div\n className={cn(\n \"grid grid-cols-5 gap-sm w-full mx-auto\",\n wideGridWidth\n )}\n >\n {years.map(year => (\n <BirthdayPickerCell\n key={year}\n selected={draft.year === year}\n disabled={isYearDisabled(\n year,\n draft,\n range\n )}\n tabbable={step === \"year\"}\n onClick={() => onPickYear(year)}\n >\n {year}\n </BirthdayPickerCell>\n ))}\n </div>\n </div>\n </ScrollArea>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </RadixPopover.Content>\n </RadixPopover.Portal>\n </RadixPopover.Root>\n </div>\n );\n};\n\nexport { BirthdayPicker };\n"],"names":["STEPS","STEP_LABELS","DAYS","Array","_","index","MONTHS","EXPAND_MS","SLIDE_MS","FADE_OUT_MS","COLLAPSE_MS","cardVariants","cva","cardHeaderVariants","gridHeight","dayGridWidth","wideGridWidth","BirthdayPicker","value","onChange","disabled","size","variant","invalid","yearRange","minDate","maxDate","onOpenChange","className","open","setOpen","useState","phase","setPhase","step","setStep","draft","setDraft","barHeight","setBarHeight","bodyHeight","setBodyHeight","barRef","useRef","cardRef","bodyRef","panelRefs","picked","Set","closeTimer","escapeScrollLock","useEscapeScrollLock","saved","useMemo","parseBirthdayValue","years","birthdayYears","range","useEffect","clearTimeout","expand","collapse","setTimeout","useLayoutEffect","second","first","requestAnimationFrame","cancelAnimationFrame","timer","rect","window","panel","selected","viewport","offset","target","goToStep","next","onPick","pickedStep","nextValue","formatBirthdayValue","nextStep","nextBirthdayStep","onPickDay","day","pickDay","onPickMonth","month","pickMonth","onPickYear","year","pickYear","onBarKeyDown","event","expanded","cardHeight","stepIndex","icons","interactive","undefined","Icon","CloseIcon","CalendarMonthIcon","panelProps","panelStep","element","RadixPopover","isOpen","cn","inputVariants","BirthdayPickerSegments","BirthdayPickerCell","isDayDisabled","pad","isMonthDisabled","MONTH_NAMES_FULL","ScrollArea","isYearDisabled"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface BirthdayPickerCellProps {
|
|
3
|
+
selected: boolean;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
tabbable: boolean;
|
|
6
|
+
onClick: () => void;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* One day, month or year in a step's grid. It reads as a button: a ghost one, or a primary one
|
|
11
|
+
* for the picked value, the same as the month and year grids of the other pickers.
|
|
12
|
+
*/
|
|
13
|
+
declare const BirthdayPickerCell: ({ selected, disabled, tabbable, onClick, children }: BirthdayPickerCellProps) => React.JSX.Element;
|
|
14
|
+
export { BirthdayPickerCell };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { buttonVariants } from "../../Button/index.js";
|
|
3
|
+
import { cn } from "../../utils.js";
|
|
4
|
+
const BirthdayPickerCell = ({ selected, disabled, tabbable, onClick, children })=>/*#__PURE__*/ react.createElement("button", {
|
|
5
|
+
type: "button",
|
|
6
|
+
disabled: disabled,
|
|
7
|
+
"aria-disabled": disabled,
|
|
8
|
+
"aria-pressed": selected,
|
|
9
|
+
"data-selected": selected,
|
|
10
|
+
tabIndex: tabbable && !disabled ? 0 : -1,
|
|
11
|
+
onClick: onClick,
|
|
12
|
+
className: cn(buttonVariants({
|
|
13
|
+
variant: selected ? "primary" : "ghost",
|
|
14
|
+
size: "md"
|
|
15
|
+
}), "w-full tabular-nums")
|
|
16
|
+
}, children);
|
|
17
|
+
export { BirthdayPickerCell };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=BirthdayPickerCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DatePicker/primitives/BirthdayPickerCell.js","sources":["../../../src/DatePicker/primitives/BirthdayPickerCell.tsx"],"sourcesContent":["import React from \"react\";\nimport { buttonVariants } from \"~/Button/index.js\";\nimport { cn } from \"~/utils.js\";\n\ninterface BirthdayPickerCellProps {\n selected: boolean;\n disabled?: boolean;\n tabbable: boolean;\n onClick: () => void;\n children: React.ReactNode;\n}\n\n/**\n * One day, month or year in a step's grid. It reads as a button: a ghost one, or a primary one\n * for the picked value, the same as the month and year grids of the other pickers.\n */\nconst BirthdayPickerCell = ({\n selected,\n disabled,\n tabbable,\n onClick,\n children\n}: BirthdayPickerCellProps) => (\n <button\n type=\"button\"\n disabled={disabled}\n aria-disabled={disabled}\n aria-pressed={selected}\n data-selected={selected}\n tabIndex={tabbable && !disabled ? 0 : -1}\n onClick={onClick}\n className={cn(\n buttonVariants({ variant: selected ? \"primary\" : \"ghost\", size: \"md\" }),\n \"w-full tabular-nums\"\n )}\n >\n {children}\n </button>\n);\n\nexport { BirthdayPickerCell };\n"],"names":["BirthdayPickerCell","selected","disabled","tabbable","onClick","children","cn","buttonVariants"],"mappings":";;;AAgBA,MAAMA,qBAAqB,CAAC,EACxBC,QAAQ,EACRC,QAAQ,EACRC,QAAQ,EACRC,OAAO,EACPC,QAAQ,EACc,iBACtB,oBAAC;QACG,MAAK;QACL,UAAUH;QACV,iBAAeA;QACf,gBAAcD;QACd,iBAAeA;QACf,UAAUE,YAAY,CAACD,WAAW,IAAI;QACtC,SAASE;QACT,WAAWE,GACPC,eAAe;YAAE,SAASN,WAAW,YAAY;YAAS,MAAM;QAAK,IACrE;OAGHI"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type BirthdayParts, type BirthdayStep } from "../utils/birthdayHelpers.js";
|
|
3
|
+
interface BirthdayPickerSegmentsProps {
|
|
4
|
+
parts: BirthdayParts;
|
|
5
|
+
activeStep?: BirthdayStep;
|
|
6
|
+
onStepClick?: (step: BirthdayStep) => void;
|
|
7
|
+
}
|
|
8
|
+
declare const BirthdayPickerSegments: ({ parts, activeStep, onStepClick }: BirthdayPickerSegmentsProps) => React.JSX.Element;
|
|
9
|
+
export { BirthdayPickerSegments };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { cn } from "../../utils.js";
|
|
3
|
+
import { pad } from "../utils/birthdayHelpers.js";
|
|
4
|
+
const BirthdayPickerSegments = ({ parts, activeStep, onStepClick })=>{
|
|
5
|
+
const segments = [
|
|
6
|
+
{
|
|
7
|
+
step: "day",
|
|
8
|
+
text: parts.day ? pad(parts.day) : "DD",
|
|
9
|
+
filled: !!parts.day
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
step: "month",
|
|
13
|
+
text: parts.month ? pad(parts.month) : "MM",
|
|
14
|
+
filled: !!parts.month
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
step: "year",
|
|
18
|
+
text: parts.year ? String(parts.year) : "YYYY",
|
|
19
|
+
filled: !!parts.year
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
return /*#__PURE__*/ react.createElement("span", {
|
|
23
|
+
className: "flex items-center gap-xs tabular-nums whitespace-nowrap"
|
|
24
|
+
}, segments.map((segment, index)=>{
|
|
25
|
+
const className = cn("transition-colors", !segment.filled && "text-neutral-dimmed", activeStep === segment.step && "text-accent-primary");
|
|
26
|
+
return /*#__PURE__*/ react.createElement(react.Fragment, {
|
|
27
|
+
key: segment.step
|
|
28
|
+
}, index > 0 ? /*#__PURE__*/ react.createElement("span", {
|
|
29
|
+
className: "text-neutral-dimmed"
|
|
30
|
+
}, "/") : null, onStepClick ? /*#__PURE__*/ react.createElement("button", {
|
|
31
|
+
type: "button",
|
|
32
|
+
tabIndex: -1,
|
|
33
|
+
"data-step": segment.step,
|
|
34
|
+
className: cn(className, "cursor-pointer outline-none"),
|
|
35
|
+
onClick: ()=>onStepClick(segment.step)
|
|
36
|
+
}, segment.text) : /*#__PURE__*/ react.createElement("span", {
|
|
37
|
+
className: className
|
|
38
|
+
}, segment.text));
|
|
39
|
+
}));
|
|
40
|
+
};
|
|
41
|
+
export { BirthdayPickerSegments };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=BirthdayPickerSegments.js.map
|