@astryxdesign/core 0.1.2 → 0.1.3-canary.102854d
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/CHANGELOG.md +165 -0
- package/README.md +12 -12
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +11 -5
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +24 -5
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +31 -12
- package/dist/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/dist/ButtonGroup/ButtonGroup.js +0 -1
- package/dist/Calendar/Calendar.d.ts +5 -4
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +124 -61
- package/dist/Calendar/dayCellUtils.d.ts +67 -5
- package/dist/Calendar/dayCellUtils.d.ts.map +1 -1
- package/dist/Calendar/dayCellUtils.js +139 -18
- package/dist/Calendar/hooks/index.d.ts +0 -2
- package/dist/Calendar/hooks/index.d.ts.map +1 -1
- package/dist/Calendar/hooks/index.js +1 -2
- package/dist/Calendar/index.d.ts +3 -3
- package/dist/Calendar/index.d.ts.map +1 -1
- package/dist/Calendar/index.js +1 -1
- package/dist/Calendar/styles.d.ts +3 -9
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +3 -11
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +17 -3
- package/dist/Center/Center.d.ts +11 -1
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +9 -3
- package/dist/Chat/ChatComposerInput.d.ts.map +1 -1
- package/dist/Chat/ChatComposerInput.js +0 -1
- package/dist/Chat/ChatMessageList.d.ts +14 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +2 -0
- package/dist/Chat/useTriggerMenu.d.ts +8 -1
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +15 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts +23 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +51 -9
- package/dist/CheckboxList/CheckboxList.d.ts +13 -1
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +39 -9
- package/dist/CheckboxList/CheckboxListContext.d.ts +7 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +0 -1
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +9 -5
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +51 -37
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -5
- package/dist/ContextMenu/ContextMenu.d.ts +12 -5
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +96 -11
- package/dist/DateInput/DateInput.d.ts +23 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +167 -99
- package/dist/DateRangeInput/DateRangeInput.d.ts +23 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +42 -9
- package/dist/DateTimeInput/DateTimeInput.d.ts +35 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +78 -15
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -0
- package/dist/DropdownMenu/DropdownMenu.d.ts +1 -8
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +42 -14
- package/dist/Field/Field.d.ts +19 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +4 -0
- package/dist/Field/FieldLabel.d.ts +21 -2
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +41 -26
- package/dist/FileInput/FileInput.d.ts +22 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +56 -10
- package/dist/Grid/Grid.d.ts +11 -1
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +32 -6
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +16 -6
- package/dist/InputGroup/InputGroupContext.d.ts +4 -0
- package/dist/InputGroup/InputGroupContext.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupContext.js +2 -2
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +3 -3
- package/dist/InputGroup/index.d.ts +1 -0
- package/dist/InputGroup/index.d.ts.map +1 -1
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +33 -1
- package/dist/Layer/layerAnimations.stylex.d.ts +4 -0
- package/dist/Layer/layerAnimations.stylex.d.ts.map +1 -1
- package/dist/Layer/layerAnimations.stylex.js +8 -4
- package/dist/Layer/useLayer.d.ts +10 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +64 -9
- package/dist/Layout/Layout.d.ts +4 -11
- package/dist/Layout/Layout.d.ts.map +1 -1
- package/dist/Layout/Layout.js +10 -11
- package/dist/Layout/LayoutFooter.d.ts +2 -2
- package/dist/Layout/LayoutFooter.d.ts.map +1 -1
- package/dist/Layout/LayoutHeader.d.ts +2 -2
- package/dist/Layout/LayoutHeader.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.d.ts +2 -2
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.d.ts +51 -0
- package/dist/Layout/padding.stylex.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.js +63 -0
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -2
- package/dist/Link/Link.d.ts +16 -1
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +18 -7
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +7 -0
- package/dist/MoreMenu/MoreMenu.d.ts +1 -7
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/MoreMenu/MoreMenu.js +0 -2
- package/dist/MultiSelector/MultiSelector.d.ts +27 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +141 -42
- package/dist/MultiSelector/hooks.d.ts +12 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +14 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +34 -3
- package/dist/NumberInput/NumberInput.d.ts +23 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +62 -12
- package/dist/Pagination/Pagination.d.ts +1 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +15 -1
- package/dist/Popover/Popover.d.ts +18 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +5 -2
- package/dist/Popover/usePopover.d.ts +38 -3
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +24 -9
- package/dist/PowerSearch/PowerSearch.d.ts +11 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +6 -1
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +3 -5
- package/dist/RadioList/RadioList.d.ts +20 -2
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +105 -9
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts +13 -2
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +78 -44
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +7 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +13 -2
- package/dist/Selector/Selector.d.ts +24 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +122 -43
- package/dist/Selector/hooks.d.ts +8 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +14 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +2 -0
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +1 -1
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +8 -2
- package/dist/Slider/Slider.d.ts +21 -0
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +36 -9
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +1 -1
- package/dist/Stack/Stack.d.ts +38 -23
- package/dist/Stack/Stack.d.ts.map +1 -1
- package/dist/Stack/Stack.js +25 -1
- package/dist/Stack/StackItem.d.ts +12 -23
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +8 -1
- package/dist/Switch/Switch.d.ts +23 -2
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +41 -11
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +6 -0
- package/dist/TabList/TabList.d.ts +16 -4
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +87 -10
- package/dist/TabList/TabListContext.d.ts +5 -0
- package/dist/TabList/TabListContext.d.ts.map +1 -1
- package/dist/TabList/TabListContext.js +5 -0
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +6 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +13 -9
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +10 -1
- package/dist/Table/TableCell.d.ts +8 -1
- package/dist/Table/TableCell.d.ts.map +1 -1
- package/dist/Table/TableCell.js +79 -10
- package/dist/Table/TableHeaderCell.d.ts +8 -1
- package/dist/Table/TableHeaderCell.d.ts.map +1 -1
- package/dist/Table/TableHeaderCell.js +16 -16
- package/dist/Table/index.d.ts +4 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +3 -2
- package/dist/Table/plugins/pagination/paginateData.d.ts +2 -1
- package/dist/Table/plugins/pagination/paginateData.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/paginateData.js +8 -3
- package/dist/Table/plugins/pagination/useTablePagination.d.ts.map +1 -1
- package/dist/Table/plugins/pagination/useTablePagination.js +6 -1
- package/dist/Table/plugins/rowExpansion/index.d.ts +3 -0
- package/dist/Table/plugins/rowExpansion/index.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/index.js +3 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts +90 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -0
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +398 -0
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
- package/dist/Table/tableContextMenu.d.ts +37 -0
- package/dist/Table/tableContextMenu.d.ts.map +1 -0
- package/dist/Table/tableContextMenu.js +140 -0
- package/dist/Table/types.d.ts +66 -0
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/TextArea/TextArea.d.ts +22 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +41 -9
- package/dist/TextInput/TextInput.d.ts +23 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +55 -10
- package/dist/TimeInput/TimeInput.d.ts +23 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +147 -76
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +14 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +131 -3
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +26 -4
- package/dist/Toolbar/Toolbar.d.ts +3 -3
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +51 -7
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +56 -9
- package/dist/TopNav/TopNavHeading.d.ts +7 -1
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +8 -0
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +72 -2
- package/dist/TreeList/TreeListItem.d.ts +11 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +51 -12
- package/dist/TreeList/treeListItem.markers.stylex.d.ts +16 -0
- package/dist/TreeList/treeListItem.markers.stylex.d.ts.map +1 -0
- package/dist/TreeList/treeListItem.markers.stylex.js +22 -0
- package/dist/Typeahead/BaseTypeahead.d.ts +13 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +69 -6
- package/dist/Typeahead/Typeahead.d.ts +26 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +65 -29
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +61 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/VisuallyHidden/VisuallyHidden.js +65 -0
- package/dist/VisuallyHidden/index.d.ts +11 -0
- package/dist/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/VisuallyHidden/index.js +13 -0
- package/dist/astryx.css +22 -0
- package/dist/astryx.umd.js +55 -55
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/focusableSelector.d.ts +22 -0
- package/dist/hooks/focusableSelector.d.ts.map +1 -0
- package/dist/hooks/focusableSelector.js +24 -0
- package/dist/hooks/index.d.ts +12 -2
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +7 -2
- package/dist/hooks/useAnnounce.d.ts +40 -0
- package/dist/hooks/useAnnounce.d.ts.map +1 -0
- package/dist/hooks/useAnnounce.js +142 -0
- package/dist/hooks/useClickableContainer.d.ts +16 -1
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +16 -4
- package/dist/hooks/useEntryAnimation.d.ts.map +1 -1
- package/dist/hooks/useEntryAnimation.js +4 -4
- package/dist/hooks/useFocusTrap.d.ts +18 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +87 -3
- package/dist/hooks/useGridFocus.d.ts +88 -1
- package/dist/hooks/useGridFocus.d.ts.map +1 -1
- package/dist/hooks/useGridFocus.js +261 -62
- package/dist/hooks/useKeyboardHint.d.ts +82 -0
- package/dist/hooks/useKeyboardHint.d.ts.map +1 -0
- package/dist/hooks/useKeyboardHint.js +220 -0
- package/dist/hooks/useListFocus.d.ts +78 -7
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +305 -52
- package/dist/hooks/useLongPress.d.ts +21 -0
- package/dist/hooks/useLongPress.d.ts.map +1 -0
- package/dist/hooks/useLongPress.js +89 -0
- package/dist/hooks/useTreeFocus.d.ts +157 -0
- package/dist/hooks/useTreeFocus.d.ts.map +1 -0
- package/dist/hooks/useTreeFocus.js +337 -0
- package/dist/hooks/useTypeahead.d.ts +63 -0
- package/dist/hooks/useTypeahead.d.ts.map +1 -0
- package/dist/hooks/useTypeahead.js +117 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/utils/dateTypes.d.ts +12 -0
- package/dist/utils/dateTypes.d.ts.map +1 -1
- package/dist/utils/dateTypes.js +41 -1
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -1
- package/dist/utils/inputAria.d.ts +29 -0
- package/dist/utils/inputAria.d.ts.map +1 -0
- package/dist/utils/inputAria.js +30 -0
- package/dist/utils/timeParser.d.ts.map +1 -1
- package/dist/utils/timeParser.js +5 -2
- package/docs.mjs +2 -2
- package/package.json +12 -8
- package/src/Avatar/Avatar.doc.mjs +2 -2
- package/src/Avatar/Avatar.test.tsx +37 -0
- package/src/Avatar/Avatar.tsx +10 -5
- package/src/Breadcrumbs/BreadcrumbItem.tsx +25 -7
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -10
- package/src/Button/Button.tsx +42 -22
- package/src/ButtonGroup/ButtonGroup.test.tsx +9 -9
- package/src/ButtonGroup/ButtonGroup.tsx +0 -1
- package/src/Calendar/Calendar.doc.mjs +4 -4
- package/src/Calendar/Calendar.test.tsx +247 -30
- package/src/Calendar/Calendar.tsx +173 -86
- package/src/Calendar/dayCellUtils.test.ts +306 -1
- package/src/Calendar/dayCellUtils.ts +206 -13
- package/src/Calendar/hooks/index.ts +0 -6
- package/src/Calendar/index.ts +1 -3
- package/src/Calendar/styles.ts +4 -9
- package/src/Carousel/Carousel.doc.mjs +7 -1
- package/src/Carousel/Carousel.test.tsx +20 -0
- package/src/Carousel/Carousel.tsx +16 -1
- package/src/Center/Center.doc.mjs +12 -2
- package/src/Center/Center.tsx +28 -3
- package/src/Chat/ChatComposerInput.test.tsx +26 -7
- package/src/Chat/ChatComposerInput.tsx +0 -1
- package/src/Chat/ChatDictationButton.doc.mjs +1 -1
- package/src/Chat/ChatMessageList.doc.mjs +8 -0
- package/src/Chat/ChatMessageList.test.tsx +18 -0
- package/src/Chat/ChatMessageList.tsx +16 -0
- package/src/Chat/useTriggerMenu.tsx +22 -4
- package/src/CheckboxInput/CheckboxInput.doc.mjs +10 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +172 -27
- package/src/CheckboxInput/CheckboxInput.tsx +78 -6
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
- package/src/CheckboxList/CheckboxList.test.tsx +192 -26
- package/src/CheckboxList/CheckboxList.tsx +56 -3
- package/src/CheckboxList/CheckboxListContext.tsx +7 -0
- package/src/CheckboxList/CheckboxListItem.tsx +0 -3
- package/src/Citation/Citation.doc.mjs +10 -0
- package/src/Citation/Citation.test.tsx +121 -0
- package/src/Citation/Citation.tsx +15 -3
- package/src/CodeBlock/CodeBlock.test.tsx +115 -0
- package/src/CodeBlock/CodeBlock.tsx +63 -33
- package/src/CommandPalette/CommandPalette.test.tsx +47 -1
- package/src/CommandPalette/CommandPalette.tsx +9 -21
- package/src/ContextMenu/ContextMenu.doc.mjs +4 -4
- package/src/ContextMenu/ContextMenu.test.tsx +155 -1
- package/src/ContextMenu/ContextMenu.tsx +129 -16
- package/src/DateInput/DateInput.doc.mjs +291 -56
- package/src/DateInput/DateInput.test.tsx +248 -2
- package/src/DateInput/DateInput.tsx +196 -100
- package/src/DateRangeInput/DateRangeInput.doc.mjs +251 -46
- package/src/DateRangeInput/DateRangeInput.test.tsx +182 -20
- package/src/DateRangeInput/DateRangeInput.tsx +63 -5
- package/src/DateTimeInput/DateTimeInput.doc.mjs +368 -67
- package/src/DateTimeInput/DateTimeInput.test.tsx +279 -11
- package/src/DateTimeInput/DateTimeInput.tsx +125 -17
- package/src/Dialog/Dialog.doc.mjs +2 -2
- package/src/Dialog/Dialog.tsx +12 -0
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -8
- package/src/DropdownMenu/DropdownMenu.test.tsx +56 -42
- package/src/DropdownMenu/DropdownMenu.tsx +52 -18
- package/src/Field/Field.doc.mjs +59 -18
- package/src/Field/Field.test.tsx +32 -0
- package/src/Field/Field.tsx +23 -5
- package/src/Field/FieldLabel.tsx +55 -17
- package/src/FileInput/FileInput.doc.mjs +17 -0
- package/src/FileInput/FileInput.test.tsx +283 -49
- package/src/FileInput/FileInput.tsx +76 -4
- package/src/Grid/Grid.doc.mjs +17 -4
- package/src/Grid/Grid.test.tsx +43 -30
- package/src/Grid/Grid.tsx +38 -3
- package/src/Icon/Icon.doc.mjs +3 -3
- package/src/InputGroup/InputGroup.doc.mjs +111 -23
- package/src/InputGroup/InputGroup.test.tsx +257 -60
- package/src/InputGroup/InputGroup.tsx +23 -5
- package/src/InputGroup/InputGroupContext.ts +9 -4
- package/src/InputGroup/groupStyles.ts +7 -1
- package/src/InputGroup/index.ts +1 -0
- package/src/Kbd/Kbd.test.tsx +22 -4
- package/src/Kbd/Kbd.tsx +35 -3
- package/src/Layer/layerAnimations.stylex.ts +20 -4
- package/src/Layer/useLayer.doc.mjs +5 -0
- package/src/Layer/useLayer.test.tsx +111 -0
- package/src/Layer/useLayer.tsx +90 -9
- package/src/Layout/Layout.tsx +8 -16
- package/src/Layout/LayoutFooter.doc.mjs +4 -4
- package/src/Layout/LayoutFooter.tsx +3 -3
- package/src/Layout/LayoutHeader.doc.mjs +4 -4
- package/src/Layout/LayoutHeader.tsx +3 -3
- package/src/Layout/LayoutPanel.tsx +3 -3
- package/src/Layout/__tests__/edgeCompensation.test.tsx +72 -0
- package/src/Layout/padding.stylex.ts +52 -0
- package/src/Lightbox/Lightbox.doc.mjs +9 -0
- package/src/Lightbox/Lightbox.test.tsx +53 -5
- package/src/Lightbox/Lightbox.tsx +9 -4
- package/src/Link/Link.doc.mjs +14 -0
- package/src/Link/Link.test.tsx +50 -0
- package/src/Link/Link.tsx +39 -4
- package/src/Markdown/Markdown.test.tsx +11 -0
- package/src/Markdown/Markdown.tsx +7 -0
- package/src/MetadataList/MetadataListItem.doc.mjs +4 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -17
- package/src/MoreMenu/MoreMenu.tsx +0 -9
- package/src/MultiSelector/MultiSelector.doc.mjs +35 -0
- package/src/MultiSelector/MultiSelector.test.tsx +375 -8
- package/src/MultiSelector/MultiSelector.tsx +194 -48
- package/src/MultiSelector/hooks.ts +27 -0
- package/src/NavMenu/NavHeadingMenu.test.tsx +77 -1
- package/src/NavMenu/NavHeadingMenu.tsx +50 -3
- package/src/NumberInput/NumberInput.doc.mjs +17 -0
- package/src/NumberInput/NumberInput.test.tsx +242 -40
- package/src/NumberInput/NumberInput.tsx +89 -11
- package/src/Pagination/Pagination.doc.mjs +3 -3
- package/src/Pagination/Pagination.test.tsx +117 -5
- package/src/Pagination/Pagination.tsx +21 -1
- package/src/Popover/Popover.doc.mjs +26 -0
- package/src/Popover/Popover.test.tsx +121 -0
- package/src/Popover/Popover.tsx +23 -2
- package/src/Popover/usePopover.doc.mjs +9 -3
- package/src/Popover/usePopover.tsx +70 -12
- package/src/PowerSearch/PowerSearch.doc.mjs +15 -0
- package/src/PowerSearch/PowerSearch.test.tsx +97 -1
- package/src/PowerSearch/PowerSearch.tsx +16 -3
- package/src/ProgressBar/ProgressBar.test.tsx +34 -26
- package/src/ProgressBar/ProgressBar.tsx +3 -4
- package/src/RadioList/RadioList.doc.mjs +9 -0
- package/src/RadioList/RadioList.test.tsx +252 -16
- package/src/RadioList/RadioList.tsx +166 -10
- package/src/RadioList/RadioListItem.tsx +14 -2
- package/src/SegmentedControl/SegmentedControl.doc.mjs +9 -0
- package/src/SegmentedControl/SegmentedControl.test.tsx +214 -42
- package/src/SegmentedControl/SegmentedControl.tsx +102 -54
- package/src/SegmentedControl/SegmentedControlContext.ts +7 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +14 -1
- package/src/SelectableCard/SelectableCard.doc.mjs +1 -1
- package/src/Selector/Selector.doc.mjs +31 -0
- package/src/Selector/Selector.test.tsx +387 -15
- package/src/Selector/Selector.tsx +175 -67
- package/src/Selector/hooks.ts +23 -0
- package/src/SideNav/SideNav.test.tsx +48 -0
- package/src/SideNav/SideNavHeading.tsx +8 -2
- package/src/SideNav/SideNavItem.tsx +2 -4
- package/src/Skeleton/Skeleton.test.tsx +25 -0
- package/src/Skeleton/Skeleton.tsx +11 -1
- package/src/Slider/Slider.doc.mjs +15 -0
- package/src/Slider/Slider.test.tsx +155 -2
- package/src/Slider/Slider.tsx +53 -5
- package/src/Spinner/Spinner.tsx +7 -1
- package/src/Stack/Stack.doc.mjs +77 -0
- package/src/Stack/Stack.test.tsx +55 -5
- package/src/Stack/Stack.tsx +73 -24
- package/src/Stack/StackItem.test.tsx +23 -0
- package/src/Stack/StackItem.tsx +20 -23
- package/src/Switch/Switch.doc.mjs +15 -0
- package/src/Switch/Switch.test.tsx +162 -27
- package/src/Switch/Switch.tsx +61 -21
- package/src/TabList/Tab.tsx +6 -0
- package/src/TabList/TabList.doc.mjs +9 -3
- package/src/TabList/TabList.test.tsx +251 -0
- package/src/TabList/TabList.tsx +103 -12
- package/src/TabList/TabListContext.ts +7 -3
- package/src/TabList/TabMenu.tsx +6 -3
- package/src/Table/BaseTable.tsx +24 -18
- package/src/Table/Table.doc.mjs +2 -0
- package/src/Table/Table.test.tsx +10 -0
- package/src/Table/Table.tsx +8 -0
- package/src/Table/TableCell.tsx +105 -24
- package/src/Table/TableHeaderCell.tsx +28 -29
- package/src/Table/index.ts +8 -2
- package/src/Table/plugins/pagination/paginateData.ts +10 -3
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +16 -0
- package/src/Table/plugins/pagination/useTablePagination.tsx +8 -1
- package/src/Table/plugins/rowExpansion/index.ts +7 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +155 -0
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +590 -0
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +91 -2
- package/src/Table/plugins/sortable/useTableSortable.tsx +53 -1
- package/src/Table/tableContextMenu.test.tsx +181 -0
- package/src/Table/tableContextMenu.tsx +160 -0
- package/src/Table/types.ts +74 -0
- package/src/Table/useTableColumnResize.doc.mjs +3 -3
- package/src/Table/useTablePagination.doc.mjs +4 -1
- package/src/Table/useTableRowExpansion.doc.mjs +63 -0
- package/src/Table/useTableSortable.doc.mjs +4 -1
- package/src/Table/useTableStickyColumns.doc.mjs +2 -2
- package/src/Text/Text.doc.mjs +18 -18
- package/src/TextArea/TextArea.doc.mjs +17 -0
- package/src/TextArea/TextArea.test.tsx +167 -35
- package/src/TextArea/TextArea.tsx +62 -15
- package/src/TextInput/TextInput.doc.mjs +17 -0
- package/src/TextInput/TextInput.test.tsx +168 -34
- package/src/TextInput/TextInput.tsx +77 -9
- package/src/Thumbnail/Thumbnail.doc.mjs +4 -4
- package/src/TimeInput/TimeInput.doc.mjs +345 -60
- package/src/TimeInput/TimeInput.test.tsx +255 -7
- package/src/TimeInput/TimeInput.tsx +176 -70
- package/src/Timestamp/Timestamp.doc.mjs +19 -19
- package/src/Toast/Toast.tsx +14 -0
- package/src/Toast/ToastViewport.test.tsx +214 -0
- package/src/Toast/ToastViewport.tsx +167 -21
- package/src/Tokenizer/Tokenizer.doc.mjs +29 -14
- package/src/Tokenizer/Tokenizer.test.tsx +105 -1
- package/src/Tokenizer/Tokenizer.tsx +37 -1
- package/src/Toolbar/Toolbar.test.tsx +109 -6
- package/src/Toolbar/Toolbar.tsx +59 -5
- package/src/Tooltip/Tooltip.test.tsx +68 -0
- package/src/Tooltip/useTooltip.tsx +55 -8
- package/src/TopNav/TopNav.test.tsx +50 -0
- package/src/TopNav/TopNavHeading.tsx +17 -1
- package/src/TreeList/TreeList.test.tsx +295 -6
- package/src/TreeList/TreeList.tsx +73 -1
- package/src/TreeList/TreeListItem.tsx +51 -5
- package/src/TreeList/treeListItem.markers.stylex.ts +20 -0
- package/src/Typeahead/BaseTypeahead.tsx +93 -9
- package/src/Typeahead/Typeahead.doc.mjs +146 -30
- package/src/Typeahead/Typeahead.test.tsx +331 -1
- package/src/Typeahead/Typeahead.tsx +105 -33
- package/src/VisuallyHidden/VisuallyHidden.doc.mjs +80 -0
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +76 -0
- package/src/VisuallyHidden/VisuallyHidden.tsx +113 -0
- package/src/VisuallyHidden/index.ts +15 -0
- package/src/docs-script.test.mjs +50 -0
- package/src/hooks/focusableSelector.ts +25 -0
- package/src/hooks/index.ts +28 -2
- package/src/hooks/useAnnounce.test.tsx +101 -0
- package/src/hooks/useAnnounce.ts +168 -0
- package/src/hooks/useClickableContainer.ts +16 -4
- package/src/hooks/useEntryAnimation.ts +16 -4
- package/src/hooks/useFocusTrap.test.tsx +132 -0
- package/src/hooks/useFocusTrap.ts +98 -4
- package/src/hooks/useGridFocus.doc.mjs +40 -2
- package/src/hooks/useGridFocus.test.tsx +132 -0
- package/src/hooks/useGridFocus.ts +343 -67
- package/src/hooks/useKeyboardHint.doc.mjs +101 -0
- package/src/hooks/useKeyboardHint.test.tsx +70 -0
- package/src/hooks/useKeyboardHint.tsx +332 -0
- package/src/hooks/useListFocus.doc.mjs +50 -10
- package/src/hooks/useListFocus.test.tsx +375 -0
- package/src/hooks/useListFocus.ts +395 -57
- package/src/hooks/useLongPress.test.tsx +134 -0
- package/src/hooks/useLongPress.ts +119 -0
- package/src/hooks/useTreeFocus.doc.mjs +140 -0
- package/src/hooks/useTreeFocus.test.tsx +214 -0
- package/src/hooks/useTreeFocus.ts +559 -0
- package/src/hooks/useTypeahead.test.tsx +109 -0
- package/src/hooks/useTypeahead.ts +183 -0
- package/src/index.ts +1 -0
- package/src/theme/derivedVarRegistry.test.ts +10 -5
- package/src/utils/dateTypes.test.ts +40 -0
- package/src/utils/dateTypes.ts +40 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/inputAria.test.ts +39 -0
- package/src/utils/inputAria.ts +58 -0
- package/src/utils/timeParser.test.ts +10 -0
- package/src/utils/timeParser.ts +5 -2
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts +0 -57
- package/dist/Calendar/hooks/useCalendarRovingTabindex.d.ts.map +0 -1
- package/dist/Calendar/hooks/useCalendarRovingTabindex.js +0 -96
- package/src/Calendar/hooks/useCalendarRovingTabindex.ts +0 -118
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8C5C,YAAY,
|
|
1
|
+
{"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/Calendar/Calendar.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA8C5C,YAAY,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACV,MAAM,oBAAoB,CAAC;AAI5B,+CAA+C;AAE/C,MAAM,WAAW,cAAc;IAC7B,wEAAwE;IACxE,UAAU,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAID,UAAU,iBAAkB,SAAQ,IAAI,CACtC,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,GAAG,cAAc,CAC5B;IACC,kDAAkD;IAClD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACtC,+CAA+C;IAC/C,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IAEvD;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CAC1C;AAID,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,qBAAqB;IACrB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,aAAa,CAAC;IAE7B,qCAAqC;IACrC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;CAC9D;AAED,UAAU,kBAAmB,SAAQ,iBAAiB;IACpD,qBAAqB;IACrB,IAAI,EAAE,OAAO,CAAC;IAEd,0BAA0B;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,SAAS,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAMrE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EAAC,GAAG,EAAE,GAAG,KAAK,EAAC,EAAE,aAAa,+BA4RtD;yBA5Re,QAAQ"}
|
|
@@ -21,16 +21,17 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
21
21
|
import { Button } from "../Button/index.js";
|
|
22
22
|
import { Icon } from "../Icon/index.js";
|
|
23
23
|
import { useGridFocus } from "../hooks/index.js";
|
|
24
|
-
import { useCalendarDays, useCalendarConstraints
|
|
24
|
+
import { useCalendarDays, useCalendarConstraints } from "./hooks/index.js";
|
|
25
25
|
import { calendarStyles, monthGridStyles, dayCellStyles, dayCellTheme } from "./styles.js";
|
|
26
|
-
import { plainDateFromISO, plainDateToISO, plainDateToDate,
|
|
26
|
+
import { plainDateFromISO, plainDateToISO, plainDateToDate, plainDateToday, plainDateSetFirstOfMonth, plainDateAddMonths, plainDateAddDays, plainDateIsBefore, plainDateIsEqual, plainDateGetWeekNumber, plainDateFormat, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_MONTH_YEAR } from "../utils/plainDate.js";
|
|
27
27
|
import { mergeProps } from "../utils/index.js";
|
|
28
|
-
import { computeDayCellState, computeRangeRounding, computePreviewRounding, isEndpoint } from "./dayCellUtils.js";
|
|
28
|
+
import { computeDayCellState, computeRangeRounding, computePreviewRounding, computeDayNeighborContinuity, isEndpoint } from "./dayCellUtils.js";
|
|
29
29
|
|
|
30
30
|
// =============================================================================
|
|
31
31
|
// Types
|
|
32
32
|
// =============================================================================
|
|
33
33
|
|
|
34
|
+
import { normalizeDayOfWeek } from "../utils/dateTypes.js";
|
|
34
35
|
import { themeProps } from "../utils/themeProps.js";
|
|
35
36
|
|
|
36
37
|
/** Imperative handle for Calendar handleRef */
|
|
@@ -70,13 +71,17 @@ export function Calendar({
|
|
|
70
71
|
hasOutsideDays = true,
|
|
71
72
|
hasWeekNumbers = false,
|
|
72
73
|
hasVariableRowCount = false,
|
|
73
|
-
weekStartsOn = 0,
|
|
74
|
+
weekStartsOn: weekStartsOnProp = 0,
|
|
74
75
|
xstyle,
|
|
75
76
|
className,
|
|
76
77
|
style,
|
|
77
78
|
...rest
|
|
78
79
|
} = props;
|
|
79
80
|
|
|
81
|
+
// Normalize `weekStartsOn` (number or three-letter day name) to a numeric
|
|
82
|
+
// DayOfWeek so all downstream date math keeps working with an index.
|
|
83
|
+
const weekStartsOn = normalizeDayOfWeek(weekStartsOnProp);
|
|
84
|
+
|
|
80
85
|
// Today's date (memoized)
|
|
81
86
|
const today = useMemo(() => plainDateToday(), []);
|
|
82
87
|
|
|
@@ -345,32 +350,46 @@ function MonthGrid({
|
|
|
345
350
|
}
|
|
346
351
|
return null;
|
|
347
352
|
}, [mode, value]);
|
|
348
|
-
const {
|
|
349
|
-
isTabbable
|
|
350
|
-
} = useCalendarRovingTabindex({
|
|
351
|
-
days,
|
|
352
|
-
today,
|
|
353
|
-
year,
|
|
354
|
-
month: month.month,
|
|
355
|
-
isDateDisabled,
|
|
356
|
-
selectedDate: selectedDateForTabindex
|
|
357
|
-
});
|
|
358
353
|
|
|
359
|
-
//
|
|
354
|
+
// Seed the initial roving tab stop for this month. useGridFocus owns the
|
|
355
|
+
// live tab stop (see `hasRovingTabIndex` below) — it honors an existing
|
|
356
|
+
// `tabindex="0"` and repairs/moves it thereafter — so this only decides
|
|
357
|
+
// which day button starts tabbable. Priority: selected date (if visible and
|
|
358
|
+
// enabled) > today (if visible and enabled) > first enabled in-month day.
|
|
359
|
+
const seedTabbableIso = useMemo(() => {
|
|
360
|
+
if (selectedDateForTabindex) {
|
|
361
|
+
const isSelectedInMonth = selectedDateForTabindex.year === year && selectedDateForTabindex.month === month.month;
|
|
362
|
+
if (isSelectedInMonth && !isDateDisabled(selectedDateForTabindex)) {
|
|
363
|
+
return plainDateToISO(selectedDateForTabindex);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
const isTodayInMonth = today.year === year && today.month === month.month;
|
|
367
|
+
if (isTodayInMonth && !isDateDisabled(today)) {
|
|
368
|
+
return plainDateToISO(today);
|
|
369
|
+
}
|
|
370
|
+
for (const day of days) {
|
|
371
|
+
if (!day.isOutside && !isDateDisabled(day.date)) {
|
|
372
|
+
return day.iso;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return null;
|
|
376
|
+
}, [days, today, year, month.month, isDateDisabled, selectedDateForTabindex]);
|
|
377
|
+
|
|
378
|
+
// Helper to get the focused date from the currently focused element.
|
|
379
|
+
// Reads the machine-readable `data-date` (ISO) attribute rather than parsing
|
|
380
|
+
// the human-readable `aria-label` with `new Date()`, which is locale/format
|
|
381
|
+
// dependent and returns Invalid Date in non-English locales (e.g. fr-FR,
|
|
382
|
+
// ja-JP), silently swallowing month-boundary arrow navigation (complex-4).
|
|
360
383
|
const getFocusedDate = useCallback(() => {
|
|
361
384
|
const activeElement = document.activeElement;
|
|
362
385
|
if (!activeElement) {
|
|
363
386
|
return null;
|
|
364
387
|
}
|
|
365
|
-
const
|
|
366
|
-
if (!
|
|
367
|
-
return null;
|
|
368
|
-
}
|
|
369
|
-
const parsed = new Date(ariaLabel);
|
|
370
|
-
if (isNaN(parsed.getTime())) {
|
|
388
|
+
const iso = activeElement.getAttribute('data-date');
|
|
389
|
+
if (!iso) {
|
|
371
390
|
return null;
|
|
372
391
|
}
|
|
373
|
-
return
|
|
392
|
+
return iso;
|
|
374
393
|
}, []);
|
|
375
394
|
|
|
376
395
|
// Handle navigation to previous month
|
|
@@ -403,13 +422,25 @@ function MonthGrid({
|
|
|
403
422
|
}
|
|
404
423
|
}, [getFocusedDate, onNavigateNext]);
|
|
405
424
|
|
|
406
|
-
// Grid focus navigation
|
|
425
|
+
// Grid focus navigation.
|
|
426
|
+
//
|
|
427
|
+
// The hook enumerates ALL grid cells (every `role="gridcell"`, including
|
|
428
|
+
// disabled days and empty placeholder cells) so the true 7-column geometry is
|
|
429
|
+
// preserved. `isCellFocusable` / `getFocusTarget` tell the hook which cells
|
|
430
|
+
// can take focus (those containing an enabled day button) and where to send
|
|
431
|
+
// focus (the day button inside the cell). Arrow keys move to the target
|
|
432
|
+
// row/column and, if that cell is disabled, continue in the same direction to
|
|
433
|
+
// the next enabled cell.
|
|
407
434
|
const {
|
|
408
435
|
gridRef,
|
|
409
|
-
handleKeyDown: handleGridKeyDown
|
|
436
|
+
handleKeyDown: handleGridKeyDown,
|
|
437
|
+
handleFocus: handleGridFocus
|
|
410
438
|
} = useGridFocus({
|
|
411
439
|
columns: 7,
|
|
412
|
-
cellSelector: '
|
|
440
|
+
cellSelector: '[role="gridcell"]',
|
|
441
|
+
isCellFocusable: cell => cell.querySelector('button:not([disabled])') !== null,
|
|
442
|
+
getFocusTarget: cell => cell.querySelector('button'),
|
|
443
|
+
hasRovingTabIndex: true,
|
|
413
444
|
onNavigateBefore: handleNavigatePrevious,
|
|
414
445
|
onNavigateAfter: handleNavigateNext,
|
|
415
446
|
onPageUp: handlePageUp,
|
|
@@ -423,10 +454,10 @@ function MonthGrid({
|
|
|
423
454
|
}
|
|
424
455
|
const buttons = gridRef.current.querySelectorAll('button:not([disabled])');
|
|
425
456
|
const targetPd = plainDateFromISO(pendingFocus);
|
|
426
|
-
const
|
|
457
|
+
const targetIso = plainDateToISO(targetPd);
|
|
427
458
|
let targetButton = null;
|
|
428
459
|
for (const button of buttons) {
|
|
429
|
-
if (button.getAttribute('
|
|
460
|
+
if (button.getAttribute('data-date') === targetIso) {
|
|
430
461
|
targetButton = button;
|
|
431
462
|
break;
|
|
432
463
|
}
|
|
@@ -477,51 +508,71 @@ function MonthGrid({
|
|
|
477
508
|
const monthLabel = useMemo(() => {
|
|
478
509
|
return plainDateFormat(month, DATE_FORMAT_MONTH_YEAR);
|
|
479
510
|
}, [month]);
|
|
480
|
-
return /*#__PURE__*/
|
|
511
|
+
return /*#__PURE__*/_jsx("div", {
|
|
481
512
|
...stylex.props(monthGridStyles.monthGrid),
|
|
482
|
-
children:
|
|
483
|
-
...stylex.props(monthGridStyles.weekHeader, hasWeekNumbers && monthGridStyles.weekHeaderWithNumbers),
|
|
484
|
-
children: [hasWeekNumbers && /*#__PURE__*/_jsx("div", {
|
|
485
|
-
...stylex.props(monthGridStyles.dayName, monthGridStyles.weekNumberHeader)
|
|
486
|
-
}), dayNames.map(name => /*#__PURE__*/_jsx("div", {
|
|
487
|
-
role: "columnheader",
|
|
488
|
-
...stylex.props(monthGridStyles.dayName),
|
|
489
|
-
children: name
|
|
490
|
-
}, name))]
|
|
491
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
513
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
492
514
|
ref: gridRef,
|
|
493
515
|
role: "grid",
|
|
494
516
|
"aria-label": monthLabel,
|
|
495
517
|
onKeyDown: handleGridKeyDown,
|
|
518
|
+
onFocus: handleGridFocus,
|
|
496
519
|
...stylex.props(monthGridStyles.daysGrid, hasWeekNumbers && monthGridStyles.daysGridWithNumbers),
|
|
497
|
-
children:
|
|
520
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
521
|
+
role: "row",
|
|
522
|
+
...stylex.props(monthGridStyles.weekRow),
|
|
523
|
+
children: [hasWeekNumbers && /*#__PURE__*/_jsx("div", {
|
|
524
|
+
...stylex.props(monthGridStyles.dayName, monthGridStyles.weekNumberHeader)
|
|
525
|
+
}), dayNames.map(name => /*#__PURE__*/_jsx("div", {
|
|
526
|
+
role: "columnheader",
|
|
527
|
+
...stylex.props(monthGridStyles.dayName),
|
|
528
|
+
children: name
|
|
529
|
+
}, name))]
|
|
530
|
+
}), weeks.map(week => {
|
|
498
531
|
const weekDate = week.find(d => !d.isOutside)?.date || week[0].date;
|
|
499
532
|
const weekNum = plainDateGetWeekNumber(weekDate);
|
|
500
533
|
return /*#__PURE__*/_jsxs("div", {
|
|
501
534
|
role: "row",
|
|
502
535
|
...stylex.props(monthGridStyles.weekRow),
|
|
503
536
|
children: [hasWeekNumbers && /*#__PURE__*/_jsx("div", {
|
|
537
|
+
role: "rowheader",
|
|
504
538
|
...stylex.props(monthGridStyles.weekNumber),
|
|
505
539
|
children: weekNum
|
|
506
|
-
}), week.map((day, dayIndex) =>
|
|
507
|
-
day
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
540
|
+
}), week.map((day, dayIndex) => {
|
|
541
|
+
// Whether the previous/next day in this week row continues the
|
|
542
|
+
// highlighted run (range and preview). A disabled or
|
|
543
|
+
// adjacent-month neighbour breaks continuity, so this day gets
|
|
544
|
+
// an end cap on that side (#2715).
|
|
545
|
+
const neighbors = computeDayNeighborContinuity({
|
|
546
|
+
week,
|
|
547
|
+
dayIndex,
|
|
548
|
+
mode,
|
|
549
|
+
rangeStart,
|
|
550
|
+
rangeEnd,
|
|
551
|
+
previewStart,
|
|
552
|
+
previewEnd,
|
|
553
|
+
isDisabled: isDateDisabled
|
|
554
|
+
});
|
|
555
|
+
return /*#__PURE__*/_jsx(DayCell, {
|
|
556
|
+
day: day,
|
|
557
|
+
dayIndex: dayIndex,
|
|
558
|
+
mode: mode,
|
|
559
|
+
selectedDate: selectedDate,
|
|
560
|
+
rangeStart: rangeStart,
|
|
561
|
+
rangeEnd: rangeEnd,
|
|
562
|
+
previewStart: previewStart,
|
|
563
|
+
previewEnd: previewEnd,
|
|
564
|
+
today: today,
|
|
565
|
+
hasOutsideDays: hasOutsideDays,
|
|
566
|
+
isDisabled: isDateDisabled(day.date),
|
|
567
|
+
neighbors: neighbors,
|
|
568
|
+
isTabbable: day.iso === seedTabbableIso,
|
|
569
|
+
onDayClick: onDayClick,
|
|
570
|
+
onDayHover: onDayHover
|
|
571
|
+
}, day.iso);
|
|
572
|
+
})]
|
|
522
573
|
}, plainDateToISO(weekDate));
|
|
523
|
-
})
|
|
524
|
-
})
|
|
574
|
+
})]
|
|
575
|
+
})
|
|
525
576
|
});
|
|
526
577
|
}
|
|
527
578
|
|
|
@@ -541,6 +592,7 @@ function DayCell({
|
|
|
541
592
|
today,
|
|
542
593
|
hasOutsideDays,
|
|
543
594
|
isDisabled,
|
|
595
|
+
neighbors,
|
|
544
596
|
isTabbable: isTabbableDay,
|
|
545
597
|
onDayClick,
|
|
546
598
|
onDayHover
|
|
@@ -551,7 +603,10 @@ function DayCell({
|
|
|
551
603
|
dayNumber
|
|
552
604
|
} = day;
|
|
553
605
|
if (isOutside && !hasOutsideDays) {
|
|
606
|
+
// Empty placeholder cell — still a gridcell so the grid geometry stays a
|
|
607
|
+
// clean 7-per-row set for keyboard navigation.
|
|
554
608
|
return /*#__PURE__*/_jsx("div", {
|
|
609
|
+
role: "gridcell",
|
|
555
610
|
...stylex.props(dayCellStyles.cell)
|
|
556
611
|
});
|
|
557
612
|
}
|
|
@@ -569,9 +624,16 @@ function DayCell({
|
|
|
569
624
|
isOutside
|
|
570
625
|
});
|
|
571
626
|
const endpoint = isEndpoint(state);
|
|
572
|
-
const rangeRounding = computeRangeRounding(state
|
|
573
|
-
|
|
627
|
+
const rangeRounding = computeRangeRounding(state, {
|
|
628
|
+
prevInRange: neighbors.prevInRange,
|
|
629
|
+
nextInRange: neighbors.nextInRange
|
|
630
|
+
});
|
|
631
|
+
const previewRounding = computePreviewRounding(state, {
|
|
632
|
+
prevInPreview: neighbors.prevInPreview,
|
|
633
|
+
nextInPreview: neighbors.nextInPreview
|
|
634
|
+
});
|
|
574
635
|
return /*#__PURE__*/_jsxs("div", {
|
|
636
|
+
role: "gridcell",
|
|
575
637
|
...stylex.props(dayCellStyles.cell),
|
|
576
638
|
children: [state.isInRange && /*#__PURE__*/_jsx("div", {
|
|
577
639
|
...stylex.props(dayCellStyles.rangeBg, dayCellTheme.rangeBg, rangeRounding.roundLeft && dayCellStyles.rangeBgRadiusLeft, rangeRounding.roundRight && dayCellStyles.rangeBgRadiusRight, state.isRangeStart && dayCellStyles.rangeInsetLeft, state.isRangeStart && rangeRounding.roundRight && dayCellStyles.rangeInsetRight, state.isRangeEnd && dayCellStyles.rangeInsetRight, state.isRangeStart && rangeRounding.roundLeft && dayCellStyles.rangeInsetLeft)
|
|
@@ -579,12 +641,13 @@ function DayCell({
|
|
|
579
641
|
...stylex.props(dayCellStyles.previewBg, dayCellTheme.previewBg, previewRounding.roundLeft && dayCellStyles.previewBgRadiusLeft, previewRounding.roundRight && dayCellStyles.previewBgRadiusRight, state.isPreviewStart && dayCellStyles.previewStart, state.isPreviewEnd && dayCellStyles.previewEnd)
|
|
580
642
|
}), /*#__PURE__*/_jsx("button", {
|
|
581
643
|
type: "button",
|
|
582
|
-
role: "gridcell",
|
|
583
644
|
"data-date": day.iso,
|
|
584
645
|
"aria-label": plainDateFormat(date, DATE_FORMAT_WITH_WEEKDAY),
|
|
585
646
|
"aria-selected": state.isSelected || state.isInRange || undefined,
|
|
586
647
|
"aria-disabled": state.effectivelyDisabled || undefined,
|
|
587
|
-
disabled: isDisabled
|
|
648
|
+
disabled: isDisabled
|
|
649
|
+
// Initial roving tab-stop seed; useGridFocus owns it after mount.
|
|
650
|
+
,
|
|
588
651
|
tabIndex: isTabbableDay ? 0 : -1,
|
|
589
652
|
onClick: () => !state.effectivelyDisabled && onDayClick(date),
|
|
590
653
|
onMouseEnter: () => !state.effectivelyDisabled && onDayHover(date),
|
|
@@ -25,18 +25,80 @@ export interface DayCellStateInput {
|
|
|
25
25
|
isDisabled: boolean;
|
|
26
26
|
isOutside: boolean;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Derives all visual/interaction states for a single day cell.
|
|
30
|
+
*
|
|
31
|
+
* Outside (adjacent-month) days never receive selection, range, or preview
|
|
32
|
+
* state: in the two-month layout the same date renders in both panes, and
|
|
33
|
+
* highlighting the spillover copy would duplicate the selection onto the wrong
|
|
34
|
+
* month's pane (#2715).
|
|
35
|
+
*/
|
|
29
36
|
export declare function computeDayCellState(input: DayCellStateInput): DayCellState;
|
|
30
|
-
/**
|
|
31
|
-
export declare function computeRangeRounding(state: DayCellState
|
|
37
|
+
/** Rounding for the committed range background. */
|
|
38
|
+
export declare function computeRangeRounding(state: DayCellState, neighbors?: {
|
|
39
|
+
prevInRange?: boolean;
|
|
40
|
+
nextInRange?: boolean;
|
|
41
|
+
}): {
|
|
32
42
|
roundLeft: boolean;
|
|
33
43
|
roundRight: boolean;
|
|
34
44
|
};
|
|
35
|
-
/**
|
|
36
|
-
export declare function computePreviewRounding(state: DayCellState
|
|
45
|
+
/** Rounding for the hover-preview background. */
|
|
46
|
+
export declare function computePreviewRounding(state: DayCellState, neighbors?: {
|
|
47
|
+
prevInPreview?: boolean;
|
|
48
|
+
nextInPreview?: boolean;
|
|
49
|
+
}): {
|
|
37
50
|
roundLeft: boolean;
|
|
38
51
|
roundRight: boolean;
|
|
39
52
|
};
|
|
40
53
|
/** Whether a day is a selection endpoint (selected, range start, or range end). */
|
|
41
54
|
export declare function isEndpoint(state: DayCellState): boolean;
|
|
55
|
+
/** Whether a day participates in the continuous committed-range highlight. */
|
|
56
|
+
export declare function isRangeHighlighted(input: {
|
|
57
|
+
date: PlainDate;
|
|
58
|
+
mode: 'single' | 'range';
|
|
59
|
+
rangeStart: PlainDate | null;
|
|
60
|
+
rangeEnd: PlainDate | null;
|
|
61
|
+
isDisabled: boolean;
|
|
62
|
+
isOutside: boolean;
|
|
63
|
+
}): boolean;
|
|
64
|
+
/** Whether a day participates in the continuous hover-preview highlight. */
|
|
65
|
+
export declare function isPreviewHighlighted(input: {
|
|
66
|
+
date: PlainDate;
|
|
67
|
+
previewStart: PlainDate | null;
|
|
68
|
+
previewEnd: PlainDate | null;
|
|
69
|
+
isDisabled: boolean;
|
|
70
|
+
isOutside: boolean;
|
|
71
|
+
}): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Continuity of the highlighted run through a day's immediate neighbours in the
|
|
74
|
+
* same week row, for both the committed range and the hover preview. A day gets
|
|
75
|
+
* an end cap on whichever side its neighbour does not continue the run (see
|
|
76
|
+
* {@link computeRangeRounding} / {@link computePreviewRounding}).
|
|
77
|
+
*/
|
|
78
|
+
export interface DayNeighborContinuity {
|
|
79
|
+
prevInRange: boolean;
|
|
80
|
+
nextInRange: boolean;
|
|
81
|
+
prevInPreview: boolean;
|
|
82
|
+
nextInPreview: boolean;
|
|
83
|
+
}
|
|
84
|
+
/** Minimal shape needed from a week's day cells to derive neighbour continuity. */
|
|
85
|
+
export interface NeighborDay {
|
|
86
|
+
date: PlainDate;
|
|
87
|
+
isOutside: boolean;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Derives whether the previous/next day in the same week row continues the
|
|
91
|
+
* highlighted run, for both range and preview. Broken out from the render path
|
|
92
|
+
* so the neighbour logic is unit-testable in isolation.
|
|
93
|
+
*/
|
|
94
|
+
export declare function computeDayNeighborContinuity(input: {
|
|
95
|
+
week: ReadonlyArray<NeighborDay>;
|
|
96
|
+
dayIndex: number;
|
|
97
|
+
mode: 'single' | 'range';
|
|
98
|
+
rangeStart: PlainDate | null;
|
|
99
|
+
rangeEnd: PlainDate | null;
|
|
100
|
+
previewStart: PlainDate | null;
|
|
101
|
+
previewEnd: PlainDate | null;
|
|
102
|
+
isDisabled: (date: PlainDate) => boolean;
|
|
103
|
+
}): DayNeighborContinuity;
|
|
42
104
|
//# sourceMappingURL=dayCellUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dayCellUtils.d.ts","sourceRoot":"","sources":["../../src/Calendar/dayCellUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED
|
|
1
|
+
{"version":3,"file":"dayCellUtils.d.ts","sourceRoot":"","sources":["../../src/Calendar/dayCellUtils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CA8D1E;AA2BD,mDAAmD;AACnD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,YAAY,EACnB,SAAS,CAAC,EAAE;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAC;;;EAU3D;AAED,iDAAiD;AACjD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,YAAY,EACnB,SAAS,CAAC,EAAE;IAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAC;;;EAU/D;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAEvD;AAuBD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CASV;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,IAAI,EAAE,SAAS,CAAC;IAChB,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,OAAO,CAQV;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC;CAC1C,GAAG,qBAAqB,CA0CxB"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
3
|
import { plainDateIsEqual, plainDateIsInRange } from "../utils/plainDate.js";
|
|
4
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* Derives all visual/interaction states for a single day cell.
|
|
6
|
+
*
|
|
7
|
+
* Outside (adjacent-month) days never receive selection, range, or preview
|
|
8
|
+
* state: in the two-month layout the same date renders in both panes, and
|
|
9
|
+
* highlighting the spillover copy would duplicate the selection onto the wrong
|
|
10
|
+
* month's pane (#2715).
|
|
11
|
+
*/
|
|
5
12
|
export function computeDayCellState(input) {
|
|
6
13
|
const {
|
|
7
14
|
date,
|
|
@@ -19,35 +26,149 @@ export function computeDayCellState(input) {
|
|
|
19
26
|
return {
|
|
20
27
|
effectivelyDisabled: isDisabled || isOutside,
|
|
21
28
|
isToday: plainDateIsEqual(date, today),
|
|
22
|
-
isSelected: !!(mode === 'single' && selectedDate && plainDateIsEqual(date, selectedDate)),
|
|
23
|
-
isInRange: !!(mode === 'range' && rangeStart && rangeEnd && plainDateIsInRange(date, [rangeStart, rangeEnd])),
|
|
24
|
-
isRangeStart: !!(mode === 'range' && rangeStart && plainDateIsEqual(date, rangeStart)),
|
|
25
|
-
isRangeEnd: !!(mode === 'range' && rangeEnd && plainDateIsEqual(date, rangeEnd)),
|
|
26
|
-
isInPreview: !!(previewStart && previewEnd && plainDateIsInRange(date, [previewStart, previewEnd])),
|
|
27
|
-
isPreviewStart: !!(previewStart && plainDateIsEqual(date, previewStart)),
|
|
28
|
-
isPreviewEnd: !!(previewEnd && plainDateIsEqual(date, previewEnd)),
|
|
29
|
+
isSelected: !!(!isOutside && mode === 'single' && selectedDate && plainDateIsEqual(date, selectedDate)),
|
|
30
|
+
isInRange: !!(!isOutside && mode === 'range' && rangeStart && rangeEnd && plainDateIsInRange(date, [rangeStart, rangeEnd])),
|
|
31
|
+
isRangeStart: !!(!isOutside && mode === 'range' && rangeStart && plainDateIsEqual(date, rangeStart)),
|
|
32
|
+
isRangeEnd: !!(!isOutside && mode === 'range' && rangeEnd && plainDateIsEqual(date, rangeEnd)),
|
|
33
|
+
isInPreview: !!(!isOutside && previewStart && previewEnd && plainDateIsInRange(date, [previewStart, previewEnd])),
|
|
34
|
+
isPreviewStart: !!(!isOutside && previewStart && plainDateIsEqual(date, previewStart)),
|
|
35
|
+
isPreviewEnd: !!(!isOutside && previewEnd && plainDateIsEqual(date, previewEnd)),
|
|
29
36
|
isFirstColumn: dayIndex === 0,
|
|
30
37
|
isLastColumn: dayIndex === 6
|
|
31
38
|
};
|
|
32
39
|
}
|
|
33
40
|
|
|
34
|
-
/**
|
|
35
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Generic rounding for a highlight run (range or preview).
|
|
43
|
+
*
|
|
44
|
+
* Rounds at the run's endpoints and the grid row edges, and also caps the
|
|
45
|
+
* highlight where the run meets a break in continuity — a neighbouring cell
|
|
46
|
+
* that is disabled or an adjacent-month (outside) day (#2715).
|
|
47
|
+
*/
|
|
48
|
+
function computeHighlightRounding(input) {
|
|
49
|
+
const prevBreaks = input.prevContinues !== undefined ? !input.prevContinues : false;
|
|
50
|
+
const nextBreaks = input.nextContinues !== undefined ? !input.nextContinues : false;
|
|
36
51
|
return {
|
|
37
|
-
roundLeft:
|
|
38
|
-
roundRight:
|
|
52
|
+
roundLeft: input.isStart || input.isFirstColumn || prevBreaks,
|
|
53
|
+
roundRight: input.isEnd || input.isLastColumn || nextBreaks
|
|
39
54
|
};
|
|
40
55
|
}
|
|
41
56
|
|
|
42
|
-
/**
|
|
43
|
-
export function
|
|
44
|
-
return {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
57
|
+
/** Rounding for the committed range background. */
|
|
58
|
+
export function computeRangeRounding(state, neighbors) {
|
|
59
|
+
return computeHighlightRounding({
|
|
60
|
+
isStart: state.isRangeStart,
|
|
61
|
+
isEnd: state.isRangeEnd,
|
|
62
|
+
isFirstColumn: state.isFirstColumn,
|
|
63
|
+
isLastColumn: state.isLastColumn,
|
|
64
|
+
prevContinues: neighbors?.prevInRange,
|
|
65
|
+
nextContinues: neighbors?.nextInRange
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Rounding for the hover-preview background. */
|
|
70
|
+
export function computePreviewRounding(state, neighbors) {
|
|
71
|
+
return computeHighlightRounding({
|
|
72
|
+
isStart: state.isPreviewStart,
|
|
73
|
+
isEnd: state.isPreviewEnd,
|
|
74
|
+
isFirstColumn: state.isFirstColumn,
|
|
75
|
+
isLastColumn: state.isLastColumn,
|
|
76
|
+
prevContinues: neighbors?.prevInPreview,
|
|
77
|
+
nextContinues: neighbors?.nextInPreview
|
|
78
|
+
});
|
|
48
79
|
}
|
|
49
80
|
|
|
50
81
|
/** Whether a day is a selection endpoint (selected, range start, or range end). */
|
|
51
82
|
export function isEndpoint(state) {
|
|
52
83
|
return state.isSelected || state.isRangeStart || state.isRangeEnd;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Whether a day is part of an unbroken highlight run (enabled, in-month, inside
|
|
88
|
+
* the given span). Outside and disabled days break the run, producing end caps.
|
|
89
|
+
*/
|
|
90
|
+
function isSpanHighlighted(input) {
|
|
91
|
+
const {
|
|
92
|
+
date,
|
|
93
|
+
spanStart,
|
|
94
|
+
spanEnd,
|
|
95
|
+
isDisabled,
|
|
96
|
+
isOutside
|
|
97
|
+
} = input;
|
|
98
|
+
return !!(!isOutside && !isDisabled && spanStart && spanEnd && plainDateIsInRange(date, [spanStart, spanEnd]));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Whether a day participates in the continuous committed-range highlight. */
|
|
102
|
+
export function isRangeHighlighted(input) {
|
|
103
|
+
if (input.mode !== 'range') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return isSpanHighlighted({
|
|
107
|
+
date: input.date,
|
|
108
|
+
spanStart: input.rangeStart,
|
|
109
|
+
spanEnd: input.rangeEnd,
|
|
110
|
+
isDisabled: input.isDisabled,
|
|
111
|
+
isOutside: input.isOutside
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Whether a day participates in the continuous hover-preview highlight. */
|
|
116
|
+
export function isPreviewHighlighted(input) {
|
|
117
|
+
return isSpanHighlighted({
|
|
118
|
+
date: input.date,
|
|
119
|
+
spanStart: input.previewStart,
|
|
120
|
+
spanEnd: input.previewEnd,
|
|
121
|
+
isDisabled: input.isDisabled,
|
|
122
|
+
isOutside: input.isOutside
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Continuity of the highlighted run through a day's immediate neighbours in the
|
|
128
|
+
* same week row, for both the committed range and the hover preview. A day gets
|
|
129
|
+
* an end cap on whichever side its neighbour does not continue the run (see
|
|
130
|
+
* {@link computeRangeRounding} / {@link computePreviewRounding}).
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
/** Minimal shape needed from a week's day cells to derive neighbour continuity. */
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Derives whether the previous/next day in the same week row continues the
|
|
137
|
+
* highlighted run, for both range and preview. Broken out from the render path
|
|
138
|
+
* so the neighbour logic is unit-testable in isolation.
|
|
139
|
+
*/
|
|
140
|
+
export function computeDayNeighborContinuity(input) {
|
|
141
|
+
const {
|
|
142
|
+
week,
|
|
143
|
+
dayIndex,
|
|
144
|
+
mode,
|
|
145
|
+
rangeStart,
|
|
146
|
+
rangeEnd,
|
|
147
|
+
previewStart,
|
|
148
|
+
previewEnd,
|
|
149
|
+
isDisabled
|
|
150
|
+
} = input;
|
|
151
|
+
const prev = week[dayIndex - 1];
|
|
152
|
+
const next = week[dayIndex + 1];
|
|
153
|
+
const rangeContinues = day => day != null && isRangeHighlighted({
|
|
154
|
+
date: day.date,
|
|
155
|
+
mode,
|
|
156
|
+
rangeStart,
|
|
157
|
+
rangeEnd,
|
|
158
|
+
isDisabled: isDisabled(day.date),
|
|
159
|
+
isOutside: day.isOutside
|
|
160
|
+
});
|
|
161
|
+
const previewContinues = day => day != null && isPreviewHighlighted({
|
|
162
|
+
date: day.date,
|
|
163
|
+
previewStart,
|
|
164
|
+
previewEnd,
|
|
165
|
+
isDisabled: isDisabled(day.date),
|
|
166
|
+
isOutside: day.isOutside
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
prevInRange: rangeContinues(prev),
|
|
170
|
+
nextInRange: rangeContinues(next),
|
|
171
|
+
prevInPreview: previewContinues(prev),
|
|
172
|
+
nextInPreview: previewContinues(next)
|
|
173
|
+
};
|
|
53
174
|
}
|
|
@@ -12,6 +12,4 @@ export { useCalendarConstraints } from './useCalendarConstraints';
|
|
|
12
12
|
export type { UseCalendarConstraintsOptions, UseCalendarConstraintsReturn, } from './useCalendarConstraints';
|
|
13
13
|
export { useCalendarNavigation } from './useCalendarNavigation';
|
|
14
14
|
export type { UseCalendarNavigationOptions, UseCalendarNavigationReturn, } from './useCalendarNavigation';
|
|
15
|
-
export { useCalendarRovingTabindex } from './useCalendarRovingTabindex';
|
|
16
|
-
export type { UseCalendarRovingTabindexOptions, UseCalendarRovingTabindexReturn, } from './useCalendarRovingTabindex';
|
|
17
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Calendar/hooks/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Calendar/hooks/index.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAClD,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,YAAY,EACV,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAC,qBAAqB,EAAC,MAAM,yBAAyB,CAAC;AAC9D,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC"}
|
|
@@ -11,5 +11,4 @@
|
|
|
11
11
|
|
|
12
12
|
export { useCalendarDays } from "./useCalendarDays.js";
|
|
13
13
|
export { useCalendarConstraints } from "./useCalendarConstraints.js";
|
|
14
|
-
export { useCalendarNavigation } from "./useCalendarNavigation.js";
|
|
15
|
-
export { useCalendarRovingTabindex } from "./useCalendarRovingTabindex.js";
|
|
14
|
+
export { useCalendarNavigation } from "./useCalendarNavigation.js";
|
package/dist/Calendar/index.d.ts
CHANGED
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* SYNC: When modified, update this header and /packages/core/src/Calendar/Calendar.doc.mjs
|
|
8
8
|
*/
|
|
9
9
|
export { Calendar } from './Calendar';
|
|
10
|
-
export type { CalendarProps, CalendarHandle, ISODateString, DayOfWeek, DateRange, } from './Calendar';
|
|
11
|
-
export { useCalendarDays, useCalendarConstraints, useCalendarNavigation,
|
|
12
|
-
export type { CalendarDay, UseCalendarDaysOptions, UseCalendarDaysReturn, UseCalendarConstraintsOptions, UseCalendarConstraintsReturn, UseCalendarNavigationOptions, UseCalendarNavigationReturn,
|
|
10
|
+
export type { CalendarProps, CalendarHandle, ISODateString, DayOfWeek, DayOfWeekName, DateRange, } from './Calendar';
|
|
11
|
+
export { useCalendarDays, useCalendarConstraints, useCalendarNavigation, } from './hooks';
|
|
12
|
+
export type { CalendarDay, UseCalendarDaysOptions, UseCalendarDaysReturn, UseCalendarConstraintsOptions, UseCalendarConstraintsReturn, UseCalendarNavigationOptions, UseCalendarNavigationReturn, } from './hooks';
|
|
13
13
|
export { isSameDay, isDateInRange, getWeekNumber, formatAccessibleDate, } from './utils';
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Calendar/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Calendar/index.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AAEH,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,YAAY,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,SAAS,CAAC"}
|
package/dist/Calendar/index.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { Calendar } from "./Calendar.js";
|
|
14
14
|
// Re-export hooks for advanced usage
|
|
15
|
-
export { useCalendarDays, useCalendarConstraints, useCalendarNavigation
|
|
15
|
+
export { useCalendarDays, useCalendarConstraints, useCalendarNavigation } from "./hooks/index.js";
|
|
16
16
|
// Re-export calendar-specific utilities for advanced usage
|
|
17
17
|
export { isSameDay, isDateInRange, getWeekNumber, formatAccessibleDate } from "./utils.js";
|
|
18
18
|
|