@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
|
@@ -5,10 +5,13 @@ import {
|
|
|
5
5
|
computeDayCellState,
|
|
6
6
|
computeRangeRounding,
|
|
7
7
|
computePreviewRounding,
|
|
8
|
+
computeDayNeighborContinuity,
|
|
8
9
|
isEndpoint,
|
|
10
|
+
isRangeHighlighted,
|
|
11
|
+
isPreviewHighlighted,
|
|
9
12
|
type DayCellStateInput,
|
|
10
13
|
} from './dayCellUtils';
|
|
11
|
-
import {plainDateFromISO} from '../utils/plainDate';
|
|
14
|
+
import {plainDateFromISO, plainDateIsEqual} from '../utils/plainDate';
|
|
12
15
|
|
|
13
16
|
function makeInput(
|
|
14
17
|
overrides: Partial<DayCellStateInput> = {},
|
|
@@ -118,6 +121,49 @@ describe('computeDayCellState', () => {
|
|
|
118
121
|
expect(stateLast.isFirstColumn).toBe(false);
|
|
119
122
|
expect(stateLast.isLastColumn).toBe(true);
|
|
120
123
|
});
|
|
124
|
+
|
|
125
|
+
// Regression (#2715): outside (adjacent-month) days must not receive
|
|
126
|
+
// selection/range/preview state. In the two-month layout the same date
|
|
127
|
+
// renders in both panes, so highlighting the spillover copy would duplicate
|
|
128
|
+
// the selection onto the wrong month's pane.
|
|
129
|
+
it('does not apply range state to outside days', () => {
|
|
130
|
+
const state = computeDayCellState(
|
|
131
|
+
makeInput({
|
|
132
|
+
date: plainDateFromISO('2024-03-17'),
|
|
133
|
+
isOutside: true,
|
|
134
|
+
mode: 'range',
|
|
135
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
136
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
137
|
+
}),
|
|
138
|
+
);
|
|
139
|
+
expect(state.isInRange).toBe(false);
|
|
140
|
+
expect(state.isRangeStart).toBe(false);
|
|
141
|
+
expect(state.isRangeEnd).toBe(false);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('does not apply preview state to outside days', () => {
|
|
145
|
+
const state = computeDayCellState(
|
|
146
|
+
makeInput({
|
|
147
|
+
date: plainDateFromISO('2024-03-17'),
|
|
148
|
+
isOutside: true,
|
|
149
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
150
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
151
|
+
}),
|
|
152
|
+
);
|
|
153
|
+
expect(state.isInPreview).toBe(false);
|
|
154
|
+
expect(state.isPreviewStart).toBe(false);
|
|
155
|
+
expect(state.isPreviewEnd).toBe(false);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it('does not mark an outside day as selected', () => {
|
|
159
|
+
const state = computeDayCellState(
|
|
160
|
+
makeInput({
|
|
161
|
+
isOutside: true,
|
|
162
|
+
selectedDate: plainDateFromISO('2024-03-15'),
|
|
163
|
+
}),
|
|
164
|
+
);
|
|
165
|
+
expect(state.isSelected).toBe(false);
|
|
166
|
+
});
|
|
121
167
|
});
|
|
122
168
|
|
|
123
169
|
describe('computeRangeRounding', () => {
|
|
@@ -161,6 +207,96 @@ describe('computeRangeRounding', () => {
|
|
|
161
207
|
const rounding = computeRangeRounding(state);
|
|
162
208
|
expect(rounding.roundRight).toBe(true);
|
|
163
209
|
});
|
|
210
|
+
|
|
211
|
+
// #2715 follow-up: cap the highlight where the range meets a disabled or
|
|
212
|
+
// adjacent-month (outside) day. A mid-range day (neither endpoint nor grid
|
|
213
|
+
// edge) gets an end cap on the side whose neighbour breaks the run.
|
|
214
|
+
it('caps the right edge when the next day breaks the range (e.g. disabled)', () => {
|
|
215
|
+
const state = computeDayCellState(
|
|
216
|
+
makeInput({
|
|
217
|
+
date: plainDateFromISO('2024-03-17'),
|
|
218
|
+
dayIndex: 3,
|
|
219
|
+
mode: 'range',
|
|
220
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
221
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
const rounding = computeRangeRounding(state, {
|
|
225
|
+
prevInRange: true,
|
|
226
|
+
nextInRange: false,
|
|
227
|
+
});
|
|
228
|
+
expect(rounding.roundLeft).toBe(false);
|
|
229
|
+
expect(rounding.roundRight).toBe(true);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
it('caps the left edge when the previous day breaks the range', () => {
|
|
233
|
+
const state = computeDayCellState(
|
|
234
|
+
makeInput({
|
|
235
|
+
date: plainDateFromISO('2024-03-17'),
|
|
236
|
+
dayIndex: 3,
|
|
237
|
+
mode: 'range',
|
|
238
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
239
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
240
|
+
}),
|
|
241
|
+
);
|
|
242
|
+
const rounding = computeRangeRounding(state, {
|
|
243
|
+
prevInRange: false,
|
|
244
|
+
nextInRange: true,
|
|
245
|
+
});
|
|
246
|
+
expect(rounding.roundLeft).toBe(true);
|
|
247
|
+
expect(rounding.roundRight).toBe(false);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
it('does not cap a mid-range day when both neighbours continue the range', () => {
|
|
251
|
+
const state = computeDayCellState(
|
|
252
|
+
makeInput({
|
|
253
|
+
date: plainDateFromISO('2024-03-17'),
|
|
254
|
+
dayIndex: 3,
|
|
255
|
+
mode: 'range',
|
|
256
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
257
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
258
|
+
}),
|
|
259
|
+
);
|
|
260
|
+
const rounding = computeRangeRounding(state, {
|
|
261
|
+
prevInRange: true,
|
|
262
|
+
nextInRange: true,
|
|
263
|
+
});
|
|
264
|
+
expect(rounding.roundLeft).toBe(false);
|
|
265
|
+
expect(rounding.roundRight).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
describe('isRangeHighlighted', () => {
|
|
270
|
+
const base = {
|
|
271
|
+
date: plainDateFromISO('2024-03-17'),
|
|
272
|
+
mode: 'range' as const,
|
|
273
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
274
|
+
rangeEnd: plainDateFromISO('2024-03-20'),
|
|
275
|
+
isDisabled: false,
|
|
276
|
+
isOutside: false,
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
it('true for an enabled in-month day inside the range', () => {
|
|
280
|
+
expect(isRangeHighlighted(base)).toBe(true);
|
|
281
|
+
});
|
|
282
|
+
|
|
283
|
+
it('false for a disabled day (breaks continuity)', () => {
|
|
284
|
+
expect(isRangeHighlighted({...base, isDisabled: true})).toBe(false);
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
it('false for an adjacent-month (outside) day', () => {
|
|
288
|
+
expect(isRangeHighlighted({...base, isOutside: true})).toBe(false);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
it('false outside the range bounds', () => {
|
|
292
|
+
expect(
|
|
293
|
+
isRangeHighlighted({...base, date: plainDateFromISO('2024-03-25')}),
|
|
294
|
+
).toBe(false);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
it('false in single mode', () => {
|
|
298
|
+
expect(isRangeHighlighted({...base, mode: 'single'})).toBe(false);
|
|
299
|
+
});
|
|
164
300
|
});
|
|
165
301
|
|
|
166
302
|
describe('computePreviewRounding', () => {
|
|
@@ -175,6 +311,175 @@ describe('computePreviewRounding', () => {
|
|
|
175
311
|
expect(rounding.roundLeft).toBe(true);
|
|
176
312
|
expect(rounding.roundRight).toBe(false);
|
|
177
313
|
});
|
|
314
|
+
|
|
315
|
+
// #2715: the hover preview needs the same disabled/outside caps as the
|
|
316
|
+
// committed range, so the transient highlight terminates cleanly at the gap.
|
|
317
|
+
it('caps the right edge when the next day breaks the preview run', () => {
|
|
318
|
+
const state = computeDayCellState(
|
|
319
|
+
makeInput({
|
|
320
|
+
date: plainDateFromISO('2024-03-17'),
|
|
321
|
+
dayIndex: 3,
|
|
322
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
323
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
324
|
+
}),
|
|
325
|
+
);
|
|
326
|
+
const rounding = computePreviewRounding(state, {
|
|
327
|
+
prevInPreview: true,
|
|
328
|
+
nextInPreview: false,
|
|
329
|
+
});
|
|
330
|
+
expect(rounding.roundLeft).toBe(false);
|
|
331
|
+
expect(rounding.roundRight).toBe(true);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
it('caps the left edge when the previous day breaks the preview run', () => {
|
|
335
|
+
const state = computeDayCellState(
|
|
336
|
+
makeInput({
|
|
337
|
+
date: plainDateFromISO('2024-03-17'),
|
|
338
|
+
dayIndex: 3,
|
|
339
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
340
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
341
|
+
}),
|
|
342
|
+
);
|
|
343
|
+
const rounding = computePreviewRounding(state, {
|
|
344
|
+
prevInPreview: false,
|
|
345
|
+
nextInPreview: true,
|
|
346
|
+
});
|
|
347
|
+
expect(rounding.roundLeft).toBe(true);
|
|
348
|
+
expect(rounding.roundRight).toBe(false);
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
it('does not cap a mid-preview day when both neighbours continue', () => {
|
|
352
|
+
const state = computeDayCellState(
|
|
353
|
+
makeInput({
|
|
354
|
+
date: plainDateFromISO('2024-03-17'),
|
|
355
|
+
dayIndex: 3,
|
|
356
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
357
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
358
|
+
}),
|
|
359
|
+
);
|
|
360
|
+
const rounding = computePreviewRounding(state, {
|
|
361
|
+
prevInPreview: true,
|
|
362
|
+
nextInPreview: true,
|
|
363
|
+
});
|
|
364
|
+
expect(rounding.roundLeft).toBe(false);
|
|
365
|
+
expect(rounding.roundRight).toBe(false);
|
|
366
|
+
});
|
|
367
|
+
});
|
|
368
|
+
|
|
369
|
+
describe('isPreviewHighlighted', () => {
|
|
370
|
+
const base = {
|
|
371
|
+
date: plainDateFromISO('2024-03-17'),
|
|
372
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
373
|
+
previewEnd: plainDateFromISO('2024-03-20'),
|
|
374
|
+
isDisabled: false,
|
|
375
|
+
isOutside: false,
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
it('true for an enabled in-month day inside the preview span', () => {
|
|
379
|
+
expect(isPreviewHighlighted(base)).toBe(true);
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
it('false for a disabled day', () => {
|
|
383
|
+
expect(isPreviewHighlighted({...base, isDisabled: true})).toBe(false);
|
|
384
|
+
});
|
|
385
|
+
|
|
386
|
+
it('false for an adjacent-month (outside) day', () => {
|
|
387
|
+
expect(isPreviewHighlighted({...base, isOutside: true})).toBe(false);
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
it('false outside the preview bounds', () => {
|
|
391
|
+
expect(
|
|
392
|
+
isPreviewHighlighted({...base, date: plainDateFromISO('2024-03-25')}),
|
|
393
|
+
).toBe(false);
|
|
394
|
+
});
|
|
395
|
+
|
|
396
|
+
it('false with no preview span', () => {
|
|
397
|
+
expect(
|
|
398
|
+
isPreviewHighlighted({...base, previewStart: null, previewEnd: null}),
|
|
399
|
+
).toBe(false);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
402
|
+
|
|
403
|
+
describe('computeDayNeighborContinuity', () => {
|
|
404
|
+
// A week row of 5 consecutive in-month days, Mar 15–19.
|
|
405
|
+
const week = (
|
|
406
|
+
[
|
|
407
|
+
'2024-03-15',
|
|
408
|
+
'2024-03-16',
|
|
409
|
+
'2024-03-17',
|
|
410
|
+
'2024-03-18',
|
|
411
|
+
'2024-03-19',
|
|
412
|
+
] as const
|
|
413
|
+
).map(iso => ({
|
|
414
|
+
date: plainDateFromISO(iso),
|
|
415
|
+
isOutside: false,
|
|
416
|
+
}));
|
|
417
|
+
|
|
418
|
+
const baseInput = {
|
|
419
|
+
week,
|
|
420
|
+
mode: 'range' as const,
|
|
421
|
+
rangeStart: plainDateFromISO('2024-03-15'),
|
|
422
|
+
rangeEnd: plainDateFromISO('2024-03-19'),
|
|
423
|
+
previewStart: null,
|
|
424
|
+
previewEnd: null,
|
|
425
|
+
isDisabled: () => false,
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
it('reports both range neighbours continuing for a mid-range day', () => {
|
|
429
|
+
const c = computeDayNeighborContinuity({...baseInput, dayIndex: 2});
|
|
430
|
+
expect(c.prevInRange).toBe(true);
|
|
431
|
+
expect(c.nextInRange).toBe(true);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
it('breaks continuity where a neighbour is disabled', () => {
|
|
435
|
+
// Disable Mar 18 (index 3): its neighbour Mar 17 (index 2) sees a break to
|
|
436
|
+
// the right.
|
|
437
|
+
const disabledDay = plainDateFromISO('2024-03-18');
|
|
438
|
+
const c = computeDayNeighborContinuity({
|
|
439
|
+
...baseInput,
|
|
440
|
+
dayIndex: 2,
|
|
441
|
+
isDisabled: date => plainDateIsEqual(date, disabledDay),
|
|
442
|
+
});
|
|
443
|
+
expect(c.prevInRange).toBe(true);
|
|
444
|
+
expect(c.nextInRange).toBe(false);
|
|
445
|
+
});
|
|
446
|
+
|
|
447
|
+
it('breaks continuity where a neighbour is an outside day', () => {
|
|
448
|
+
const weekWithOutside = week.map((d, i) =>
|
|
449
|
+
i === 3 ? {...d, isOutside: true} : d,
|
|
450
|
+
);
|
|
451
|
+
const c = computeDayNeighborContinuity({
|
|
452
|
+
...baseInput,
|
|
453
|
+
week: weekWithOutside,
|
|
454
|
+
dayIndex: 2,
|
|
455
|
+
});
|
|
456
|
+
expect(c.nextInRange).toBe(false);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
it('treats a missing neighbour (row edge) as a break', () => {
|
|
460
|
+
const first = computeDayNeighborContinuity({...baseInput, dayIndex: 0});
|
|
461
|
+
expect(first.prevInRange).toBe(false);
|
|
462
|
+
const last = computeDayNeighborContinuity({
|
|
463
|
+
...baseInput,
|
|
464
|
+
dayIndex: week.length - 1,
|
|
465
|
+
});
|
|
466
|
+
expect(last.nextInRange).toBe(false);
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
it('derives preview continuity independently of range', () => {
|
|
470
|
+
const c = computeDayNeighborContinuity({
|
|
471
|
+
...baseInput,
|
|
472
|
+
rangeStart: null,
|
|
473
|
+
rangeEnd: null,
|
|
474
|
+
previewStart: plainDateFromISO('2024-03-15'),
|
|
475
|
+
previewEnd: plainDateFromISO('2024-03-19'),
|
|
476
|
+
dayIndex: 2,
|
|
477
|
+
});
|
|
478
|
+
expect(c.prevInRange).toBe(false);
|
|
479
|
+
expect(c.nextInRange).toBe(false);
|
|
480
|
+
expect(c.prevInPreview).toBe(true);
|
|
481
|
+
expect(c.nextInPreview).toBe(true);
|
|
482
|
+
});
|
|
178
483
|
});
|
|
179
484
|
|
|
180
485
|
describe('isEndpoint', () => {
|
|
@@ -31,7 +31,14 @@ export interface DayCellStateInput {
|
|
|
31
31
|
isOutside: boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Derives all visual/interaction states for a single day cell.
|
|
36
|
+
*
|
|
37
|
+
* Outside (adjacent-month) days never receive selection, range, or preview
|
|
38
|
+
* state: in the two-month layout the same date renders in both panes, and
|
|
39
|
+
* highlighting the spillover copy would duplicate the selection onto the wrong
|
|
40
|
+
* month's pane (#2715).
|
|
41
|
+
*/
|
|
35
42
|
export function computeDayCellState(input: DayCellStateInput): DayCellState {
|
|
36
43
|
const {
|
|
37
44
|
date,
|
|
@@ -51,55 +58,241 @@ export function computeDayCellState(input: DayCellStateInput): DayCellState {
|
|
|
51
58
|
effectivelyDisabled: isDisabled || isOutside,
|
|
52
59
|
isToday: plainDateIsEqual(date, today),
|
|
53
60
|
isSelected: !!(
|
|
61
|
+
!isOutside &&
|
|
54
62
|
mode === 'single' &&
|
|
55
63
|
selectedDate &&
|
|
56
64
|
plainDateIsEqual(date, selectedDate)
|
|
57
65
|
),
|
|
58
66
|
isInRange: !!(
|
|
67
|
+
!isOutside &&
|
|
59
68
|
mode === 'range' &&
|
|
60
69
|
rangeStart &&
|
|
61
70
|
rangeEnd &&
|
|
62
71
|
plainDateIsInRange(date, [rangeStart, rangeEnd])
|
|
63
72
|
),
|
|
64
73
|
isRangeStart: !!(
|
|
74
|
+
!isOutside &&
|
|
65
75
|
mode === 'range' &&
|
|
66
76
|
rangeStart &&
|
|
67
77
|
plainDateIsEqual(date, rangeStart)
|
|
68
78
|
),
|
|
69
79
|
isRangeEnd: !!(
|
|
80
|
+
!isOutside &&
|
|
70
81
|
mode === 'range' &&
|
|
71
82
|
rangeEnd &&
|
|
72
83
|
plainDateIsEqual(date, rangeEnd)
|
|
73
84
|
),
|
|
74
85
|
isInPreview: !!(
|
|
86
|
+
!isOutside &&
|
|
75
87
|
previewStart &&
|
|
76
88
|
previewEnd &&
|
|
77
89
|
plainDateIsInRange(date, [previewStart, previewEnd])
|
|
78
90
|
),
|
|
79
|
-
isPreviewStart: !!(
|
|
80
|
-
|
|
91
|
+
isPreviewStart: !!(
|
|
92
|
+
!isOutside &&
|
|
93
|
+
previewStart &&
|
|
94
|
+
plainDateIsEqual(date, previewStart)
|
|
95
|
+
),
|
|
96
|
+
isPreviewEnd: !!(
|
|
97
|
+
!isOutside &&
|
|
98
|
+
previewEnd &&
|
|
99
|
+
plainDateIsEqual(date, previewEnd)
|
|
100
|
+
),
|
|
81
101
|
isFirstColumn: dayIndex === 0,
|
|
82
102
|
isLastColumn: dayIndex === 6,
|
|
83
103
|
};
|
|
84
104
|
}
|
|
85
105
|
|
|
86
|
-
/**
|
|
87
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Generic rounding for a highlight run (range or preview).
|
|
108
|
+
*
|
|
109
|
+
* Rounds at the run's endpoints and the grid row edges, and also caps the
|
|
110
|
+
* highlight where the run meets a break in continuity — a neighbouring cell
|
|
111
|
+
* that is disabled or an adjacent-month (outside) day (#2715).
|
|
112
|
+
*/
|
|
113
|
+
function computeHighlightRounding(input: {
|
|
114
|
+
isStart: boolean;
|
|
115
|
+
isEnd: boolean;
|
|
116
|
+
isFirstColumn: boolean;
|
|
117
|
+
isLastColumn: boolean;
|
|
118
|
+
prevContinues?: boolean;
|
|
119
|
+
nextContinues?: boolean;
|
|
120
|
+
}) {
|
|
121
|
+
const prevBreaks =
|
|
122
|
+
input.prevContinues !== undefined ? !input.prevContinues : false;
|
|
123
|
+
const nextBreaks =
|
|
124
|
+
input.nextContinues !== undefined ? !input.nextContinues : false;
|
|
88
125
|
return {
|
|
89
|
-
roundLeft:
|
|
90
|
-
roundRight:
|
|
126
|
+
roundLeft: input.isStart || input.isFirstColumn || prevBreaks,
|
|
127
|
+
roundRight: input.isEnd || input.isLastColumn || nextBreaks,
|
|
91
128
|
};
|
|
92
129
|
}
|
|
93
130
|
|
|
94
|
-
/**
|
|
95
|
-
export function
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
131
|
+
/** Rounding for the committed range background. */
|
|
132
|
+
export function computeRangeRounding(
|
|
133
|
+
state: DayCellState,
|
|
134
|
+
neighbors?: {prevInRange?: boolean; nextInRange?: boolean},
|
|
135
|
+
) {
|
|
136
|
+
return computeHighlightRounding({
|
|
137
|
+
isStart: state.isRangeStart,
|
|
138
|
+
isEnd: state.isRangeEnd,
|
|
139
|
+
isFirstColumn: state.isFirstColumn,
|
|
140
|
+
isLastColumn: state.isLastColumn,
|
|
141
|
+
prevContinues: neighbors?.prevInRange,
|
|
142
|
+
nextContinues: neighbors?.nextInRange,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Rounding for the hover-preview background. */
|
|
147
|
+
export function computePreviewRounding(
|
|
148
|
+
state: DayCellState,
|
|
149
|
+
neighbors?: {prevInPreview?: boolean; nextInPreview?: boolean},
|
|
150
|
+
) {
|
|
151
|
+
return computeHighlightRounding({
|
|
152
|
+
isStart: state.isPreviewStart,
|
|
153
|
+
isEnd: state.isPreviewEnd,
|
|
154
|
+
isFirstColumn: state.isFirstColumn,
|
|
155
|
+
isLastColumn: state.isLastColumn,
|
|
156
|
+
prevContinues: neighbors?.prevInPreview,
|
|
157
|
+
nextContinues: neighbors?.nextInPreview,
|
|
158
|
+
});
|
|
100
159
|
}
|
|
101
160
|
|
|
102
161
|
/** Whether a day is a selection endpoint (selected, range start, or range end). */
|
|
103
162
|
export function isEndpoint(state: DayCellState): boolean {
|
|
104
163
|
return state.isSelected || state.isRangeStart || state.isRangeEnd;
|
|
105
164
|
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Whether a day is part of an unbroken highlight run (enabled, in-month, inside
|
|
168
|
+
* the given span). Outside and disabled days break the run, producing end caps.
|
|
169
|
+
*/
|
|
170
|
+
function isSpanHighlighted(input: {
|
|
171
|
+
date: PlainDate;
|
|
172
|
+
spanStart: PlainDate | null;
|
|
173
|
+
spanEnd: PlainDate | null;
|
|
174
|
+
isDisabled: boolean;
|
|
175
|
+
isOutside: boolean;
|
|
176
|
+
}): boolean {
|
|
177
|
+
const {date, spanStart, spanEnd, isDisabled, isOutside} = input;
|
|
178
|
+
return !!(
|
|
179
|
+
!isOutside &&
|
|
180
|
+
!isDisabled &&
|
|
181
|
+
spanStart &&
|
|
182
|
+
spanEnd &&
|
|
183
|
+
plainDateIsInRange(date, [spanStart, spanEnd])
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** Whether a day participates in the continuous committed-range highlight. */
|
|
188
|
+
export function isRangeHighlighted(input: {
|
|
189
|
+
date: PlainDate;
|
|
190
|
+
mode: 'single' | 'range';
|
|
191
|
+
rangeStart: PlainDate | null;
|
|
192
|
+
rangeEnd: PlainDate | null;
|
|
193
|
+
isDisabled: boolean;
|
|
194
|
+
isOutside: boolean;
|
|
195
|
+
}): boolean {
|
|
196
|
+
if (input.mode !== 'range') {return false;}
|
|
197
|
+
return isSpanHighlighted({
|
|
198
|
+
date: input.date,
|
|
199
|
+
spanStart: input.rangeStart,
|
|
200
|
+
spanEnd: input.rangeEnd,
|
|
201
|
+
isDisabled: input.isDisabled,
|
|
202
|
+
isOutside: input.isOutside,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Whether a day participates in the continuous hover-preview highlight. */
|
|
207
|
+
export function isPreviewHighlighted(input: {
|
|
208
|
+
date: PlainDate;
|
|
209
|
+
previewStart: PlainDate | null;
|
|
210
|
+
previewEnd: PlainDate | null;
|
|
211
|
+
isDisabled: boolean;
|
|
212
|
+
isOutside: boolean;
|
|
213
|
+
}): boolean {
|
|
214
|
+
return isSpanHighlighted({
|
|
215
|
+
date: input.date,
|
|
216
|
+
spanStart: input.previewStart,
|
|
217
|
+
spanEnd: input.previewEnd,
|
|
218
|
+
isDisabled: input.isDisabled,
|
|
219
|
+
isOutside: input.isOutside,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Continuity of the highlighted run through a day's immediate neighbours in the
|
|
225
|
+
* same week row, for both the committed range and the hover preview. A day gets
|
|
226
|
+
* an end cap on whichever side its neighbour does not continue the run (see
|
|
227
|
+
* {@link computeRangeRounding} / {@link computePreviewRounding}).
|
|
228
|
+
*/
|
|
229
|
+
export interface DayNeighborContinuity {
|
|
230
|
+
prevInRange: boolean;
|
|
231
|
+
nextInRange: boolean;
|
|
232
|
+
prevInPreview: boolean;
|
|
233
|
+
nextInPreview: boolean;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** Minimal shape needed from a week's day cells to derive neighbour continuity. */
|
|
237
|
+
export interface NeighborDay {
|
|
238
|
+
date: PlainDate;
|
|
239
|
+
isOutside: boolean;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Derives whether the previous/next day in the same week row continues the
|
|
244
|
+
* highlighted run, for both range and preview. Broken out from the render path
|
|
245
|
+
* so the neighbour logic is unit-testable in isolation.
|
|
246
|
+
*/
|
|
247
|
+
export function computeDayNeighborContinuity(input: {
|
|
248
|
+
week: ReadonlyArray<NeighborDay>;
|
|
249
|
+
dayIndex: number;
|
|
250
|
+
mode: 'single' | 'range';
|
|
251
|
+
rangeStart: PlainDate | null;
|
|
252
|
+
rangeEnd: PlainDate | null;
|
|
253
|
+
previewStart: PlainDate | null;
|
|
254
|
+
previewEnd: PlainDate | null;
|
|
255
|
+
isDisabled: (date: PlainDate) => boolean;
|
|
256
|
+
}): DayNeighborContinuity {
|
|
257
|
+
const {
|
|
258
|
+
week,
|
|
259
|
+
dayIndex,
|
|
260
|
+
mode,
|
|
261
|
+
rangeStart,
|
|
262
|
+
rangeEnd,
|
|
263
|
+
previewStart,
|
|
264
|
+
previewEnd,
|
|
265
|
+
isDisabled,
|
|
266
|
+
} = input;
|
|
267
|
+
|
|
268
|
+
const prev = week[dayIndex - 1];
|
|
269
|
+
const next = week[dayIndex + 1];
|
|
270
|
+
|
|
271
|
+
const rangeContinues = (day: NeighborDay | undefined): boolean =>
|
|
272
|
+
day != null &&
|
|
273
|
+
isRangeHighlighted({
|
|
274
|
+
date: day.date,
|
|
275
|
+
mode,
|
|
276
|
+
rangeStart,
|
|
277
|
+
rangeEnd,
|
|
278
|
+
isDisabled: isDisabled(day.date),
|
|
279
|
+
isOutside: day.isOutside,
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
const previewContinues = (day: NeighborDay | undefined): boolean =>
|
|
283
|
+
day != null &&
|
|
284
|
+
isPreviewHighlighted({
|
|
285
|
+
date: day.date,
|
|
286
|
+
previewStart,
|
|
287
|
+
previewEnd,
|
|
288
|
+
isDisabled: isDisabled(day.date),
|
|
289
|
+
isOutside: day.isOutside,
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
return {
|
|
293
|
+
prevInRange: rangeContinues(prev),
|
|
294
|
+
nextInRange: rangeContinues(next),
|
|
295
|
+
prevInPreview: previewContinues(prev),
|
|
296
|
+
nextInPreview: previewContinues(next),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
@@ -27,9 +27,3 @@ export type {
|
|
|
27
27
|
UseCalendarNavigationOptions,
|
|
28
28
|
UseCalendarNavigationReturn,
|
|
29
29
|
} from './useCalendarNavigation';
|
|
30
|
-
|
|
31
|
-
export {useCalendarRovingTabindex} from './useCalendarRovingTabindex';
|
|
32
|
-
export type {
|
|
33
|
-
UseCalendarRovingTabindexOptions,
|
|
34
|
-
UseCalendarRovingTabindexReturn,
|
|
35
|
-
} from './useCalendarRovingTabindex';
|
package/src/Calendar/index.ts
CHANGED
|
@@ -17,6 +17,7 @@ export type {
|
|
|
17
17
|
CalendarHandle,
|
|
18
18
|
ISODateString,
|
|
19
19
|
DayOfWeek,
|
|
20
|
+
DayOfWeekName,
|
|
20
21
|
DateRange,
|
|
21
22
|
} from './Calendar';
|
|
22
23
|
|
|
@@ -25,7 +26,6 @@ export {
|
|
|
25
26
|
useCalendarDays,
|
|
26
27
|
useCalendarConstraints,
|
|
27
28
|
useCalendarNavigation,
|
|
28
|
-
useCalendarRovingTabindex,
|
|
29
29
|
} from './hooks';
|
|
30
30
|
export type {
|
|
31
31
|
CalendarDay,
|
|
@@ -35,8 +35,6 @@ export type {
|
|
|
35
35
|
UseCalendarConstraintsReturn,
|
|
36
36
|
UseCalendarNavigationOptions,
|
|
37
37
|
UseCalendarNavigationReturn,
|
|
38
|
-
UseCalendarRovingTabindexOptions,
|
|
39
|
-
UseCalendarRovingTabindexReturn,
|
|
40
38
|
} from './hooks';
|
|
41
39
|
|
|
42
40
|
// Re-export calendar-specific utilities for advanced usage
|
package/src/Calendar/styles.ts
CHANGED
|
@@ -78,17 +78,12 @@ export const monthGridStyles = stylex.create({
|
|
|
78
78
|
monthGrid: {
|
|
79
79
|
flex: '1 1 0',
|
|
80
80
|
},
|
|
81
|
-
weekHeader: {
|
|
82
|
-
display: 'grid',
|
|
83
|
-
gridTemplateColumns: 'repeat(7, 1fr)',
|
|
84
|
-
marginBottom: spacingVars['--spacing-1'],
|
|
85
|
-
},
|
|
86
|
-
weekHeaderWithNumbers: {
|
|
87
|
-
gridTemplateColumns: 'auto repeat(7, 1fr)',
|
|
88
|
-
},
|
|
89
81
|
dayName: {
|
|
90
82
|
width: sizeVars['--size-element-md'],
|
|
91
|
-
|
|
83
|
+
// Restores the small gap the standalone header used to have below it.
|
|
84
|
+
height: `calc(${sizeVars['--size-element-md']} + ${spacingVars['--spacing-1']})`,
|
|
85
|
+
paddingBottom: spacingVars['--spacing-1'],
|
|
86
|
+
boxSizing: 'border-box',
|
|
92
87
|
display: 'flex',
|
|
93
88
|
alignItems: 'center',
|
|
94
89
|
justifyContent: 'center',
|
|
@@ -21,7 +21,7 @@ export const docs = {
|
|
|
21
21
|
anatomy: [
|
|
22
22
|
{name: 'Scroll container', required: true, description: 'The horizontal overflow area that holds all items.'},
|
|
23
23
|
{name: 'Items', required: true, description: 'The children rendered in a row. Each item is animated with a scroll-driven scale effect.'},
|
|
24
|
-
{name: 'Fade edges', required:
|
|
24
|
+
{name: 'Fade edges', required: false, description: 'Gradient fades on the left and right edges that indicate more content is available. Enabled by default, disable with hasEdgeFade={false}.'},
|
|
25
25
|
{name: 'Navigation buttons', required: false, description: 'Prev/next buttons that appear on hover. Enabled by default, disable with hasButtons={false}.'},
|
|
26
26
|
],
|
|
27
27
|
},
|
|
@@ -29,7 +29,9 @@ export const docs = {
|
|
|
29
29
|
{name: 'children', type: 'ReactNode', description: 'Carousel items rendered in a horizontal scroll container.', required: true},
|
|
30
30
|
{name: 'gap', type: "0 | 0.5 | 1 | 1.5 | 2 | 3 | 4", description: 'Gap between items using the spacing token scale.', default: '1'},
|
|
31
31
|
{name: 'hasButtons', type: 'boolean', description: 'Show prev/next navigation buttons on hover (desktop only).', default: 'true'},
|
|
32
|
+
{name: 'hasEdgeFade', type: 'boolean', description: 'Show a gradient edge-fade mask when content overflows, signalling that more items exist off-screen.', default: 'true'},
|
|
32
33
|
{name: 'hasSnap', type: 'boolean', description: 'Enable scroll-snap so each child snaps to the start edge.', default: 'false'},
|
|
34
|
+
{name: 'padding', type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10', description: 'Inline padding inside the scroll container, with matching scroll-padding so snap points align to the content edge.'},
|
|
33
35
|
{name: 'aria-label', type: 'string', description: 'Accessible label for the carousel region.', default: "\'Carousel\'"},
|
|
34
36
|
{name: 'ref', type: 'React.Ref<HTMLDivElement>', description: 'Ref forwarded to the root element.'},
|
|
35
37
|
{name: 'xstyle', type: 'StyleXStyles', description: 'StyleX styles for layout customization (margins, positioning, sizing). Must be a stylex.create() value.'},
|
|
@@ -71,7 +73,9 @@ export const docsZh = {
|
|
|
71
73
|
children: '在水平滚动容器中渲染的轮播项目。',
|
|
72
74
|
gap: '使用间距令牌比例的项目间距。',
|
|
73
75
|
hasButtons: '悬停时显示上一个/下一个导航按钮(仅桌面端)。',
|
|
76
|
+
hasEdgeFade: '内容溢出时显示渐变边缘遮罩,提示屏幕外还有更多项目。',
|
|
74
77
|
hasSnap: '启用滚动吸附,使每个子元素吸附到起始边缘。',
|
|
78
|
+
padding: '滚动容器内的内联内边距,并设置匹配的 scroll-padding,使吸附点与内容边缘对齐。',
|
|
75
79
|
'aria-label': '轮播区域的无障碍标签。',
|
|
76
80
|
},
|
|
77
81
|
};
|
|
@@ -95,7 +99,9 @@ export const docsDense = {
|
|
|
95
99
|
children: 'carousel items in horizontal scroll',
|
|
96
100
|
gap: 'item spacing via spacing token scale',
|
|
97
101
|
hasButtons: 'prev/next buttons on hover (desktop)',
|
|
102
|
+
hasEdgeFade: 'gradient edge-fade mask on overflow',
|
|
98
103
|
hasSnap: 'scroll-snap; children snap to start edge',
|
|
104
|
+
padding: 'inline padding; scroll-padding keeps snap points on content edge',
|
|
99
105
|
'aria-label': 'accessible label for carousel region',
|
|
100
106
|
'data-testid': 'test selector for automated testing frameworks',
|
|
101
107
|
},
|