@astryxdesign/core 0.1.2 → 0.1.3
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 +2 -4
- 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 +82 -43
- 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 +4 -5
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +93 -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 +11 -8
- 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 +10 -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 +2 -1
- package/dist/Table/index.d.ts.map +1 -1
- package/dist/Table/index.js +2 -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/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
- package/dist/Table/tableContextMenu.d.ts +33 -0
- package/dist/Table/tableContextMenu.d.ts.map +1 -0
- package/dist/Table/tableContextMenu.js +133 -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 +18 -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.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 +3 -16
- 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 +168 -30
- package/src/Calendar/Calendar.tsx +121 -66
- 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 +113 -16
- package/src/DateInput/DateInput.doc.mjs +286 -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/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 +30 -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 +26 -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 +6 -0
- 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 +21 -17
- 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 +25 -23
- package/src/Table/TableHeaderCell.tsx +28 -29
- package/src/Table/index.ts +3 -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/sortable/useTableSortable.test.tsx +91 -2
- package/src/Table/plugins/sortable/useTableSortable.tsx +53 -1
- package/src/Table/tableContextMenu.test.tsx +157 -0
- package/src/Table/tableContextMenu.tsx +142 -0
- package/src/Table/types.ts +74 -0
- package/src/Table/useTableColumnResize.doc.mjs +3 -3
- 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 +340 -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 +141 -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
|
@@ -7,69 +7,271 @@ export const docs = {
|
|
|
7
7
|
displayName: 'Date Range Input',
|
|
8
8
|
group: 'DateInput',
|
|
9
9
|
category: 'Data Input',
|
|
10
|
-
keywords: [
|
|
10
|
+
keywords: [
|
|
11
|
+
'daterangepicker',
|
|
12
|
+
'daterange',
|
|
13
|
+
'range',
|
|
14
|
+
'calendar',
|
|
15
|
+
'filter',
|
|
16
|
+
'analytics',
|
|
17
|
+
'period',
|
|
18
|
+
'schedule',
|
|
19
|
+
],
|
|
11
20
|
props: [
|
|
12
|
-
{
|
|
13
|
-
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
{
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
{
|
|
31
|
-
|
|
32
|
-
|
|
21
|
+
{name: 'label', type: 'string', description: 'Label text.', required: true},
|
|
22
|
+
{
|
|
23
|
+
name: 'isLabelHidden',
|
|
24
|
+
type: 'boolean',
|
|
25
|
+
description: 'Visually hide the label.',
|
|
26
|
+
default: 'false',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'description',
|
|
30
|
+
type: 'string',
|
|
31
|
+
description: 'Helper text displayed below the label.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'isOptional',
|
|
35
|
+
type: 'boolean',
|
|
36
|
+
description: 'Show an "(optional)" indicator.',
|
|
37
|
+
default: 'false',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'isRequired',
|
|
41
|
+
type: 'boolean',
|
|
42
|
+
description: 'Mark the field as required.',
|
|
43
|
+
default: 'false',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'isDisabled',
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
description: 'Disable the trigger and picker.',
|
|
49
|
+
default: 'false',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'disabledMessage',
|
|
53
|
+
type: 'string',
|
|
54
|
+
description:
|
|
55
|
+
'Explains why the input is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the field focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled DateRangeInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'value',
|
|
59
|
+
type: 'DateRange | null',
|
|
60
|
+
description: 'Selected date range ({start, end} in ISO format), or null.',
|
|
61
|
+
required: true,
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'onChange',
|
|
65
|
+
type: '(value: DateRange | null) => void',
|
|
66
|
+
description:
|
|
67
|
+
'Callback when the range changes. Called with null on clear.',
|
|
68
|
+
required: true,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'changeAction',
|
|
72
|
+
type: '(value: DateRange | null) => void | Promise<void>',
|
|
73
|
+
description:
|
|
74
|
+
'Async action fired after onChange. Drives optimistic UI updates via useTransition.',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'isLoading',
|
|
78
|
+
type: 'boolean',
|
|
79
|
+
description:
|
|
80
|
+
'Whether the input is in a loading state. Disables interaction and shows a spinner.',
|
|
81
|
+
default: 'false',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: 'min',
|
|
85
|
+
type: 'ISODateString',
|
|
86
|
+
description: 'Minimum selectable date.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'max',
|
|
90
|
+
type: 'ISODateString',
|
|
91
|
+
description: 'Maximum selectable date.',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: 'dateConstraints',
|
|
95
|
+
type: 'Array<(date: Date) => boolean>',
|
|
96
|
+
description: 'Custom constraint functions to disable specific dates.',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'presets',
|
|
100
|
+
type: 'Array<DateRangePreset>',
|
|
101
|
+
description:
|
|
102
|
+
'Preset ranges shown as quick-select options beside the calendar.',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: 'hasClear',
|
|
106
|
+
type: 'boolean',
|
|
107
|
+
description: 'Shows a clear button when a range is selected.',
|
|
108
|
+
default: 'true',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'placeholder',
|
|
112
|
+
type: 'string',
|
|
113
|
+
description: 'Placeholder text when no range is selected.',
|
|
114
|
+
default: "'Select date range'",
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'size',
|
|
118
|
+
type: "'sm' | 'md' | 'lg'",
|
|
119
|
+
description: 'Size of the trigger.',
|
|
120
|
+
default: "'md'",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'status',
|
|
124
|
+
type: 'InputStatus',
|
|
125
|
+
description: 'Status indicator for error, warning, or success states.',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'labelTooltip',
|
|
129
|
+
type: 'string',
|
|
130
|
+
description: 'Tooltip text via info icon at label end.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
name: 'numberOfMonths',
|
|
134
|
+
type: '1 | 2',
|
|
135
|
+
description: 'Number of months in the calendar.',
|
|
136
|
+
default: '2',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'xstyle',
|
|
140
|
+
type: 'StyleXStyles',
|
|
141
|
+
description: 'StyleX styles for layout customization.',
|
|
142
|
+
},
|
|
33
143
|
],
|
|
34
144
|
theming: {
|
|
35
145
|
targets: [
|
|
36
|
-
{
|
|
146
|
+
{className: 'astryx-date-range-input', visualProps: ['size', 'status']},
|
|
37
147
|
],
|
|
38
148
|
},
|
|
39
149
|
usage: {
|
|
40
|
-
description:
|
|
150
|
+
description:
|
|
151
|
+
'DateRangeInput lets users select a start and end date from a dual-month calendar popover. Use it for filtering data by time period, report generation, analytics dashboards, and booking flows.',
|
|
41
152
|
bestPractices: [
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
{
|
|
153
|
+
{
|
|
154
|
+
guidance: true,
|
|
155
|
+
description:
|
|
156
|
+
'Use presets for common ranges like "Last 7 days" to speed up selection.',
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
guidance: true,
|
|
160
|
+
description:
|
|
161
|
+
'Use min/max to constrain selectable dates to valid ranges.',
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
guidance: true,
|
|
165
|
+
description:
|
|
166
|
+
'Keep hasClear enabled (default) so users can reset the filter.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
guidance: true,
|
|
170
|
+
description:
|
|
171
|
+
'Provide clear labels and descriptions so users understand what the range controls.',
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
guidance: false,
|
|
175
|
+
description:
|
|
176
|
+
'Use DateRangeInput when only a single date is needed; use DateInput instead.',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
guidance: false,
|
|
180
|
+
description:
|
|
181
|
+
'Hide the label without surrounding context that makes the purpose obvious.',
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
guidance: false,
|
|
185
|
+
description:
|
|
186
|
+
'Wrap a disabled DateRangeInput in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
187
|
+
},
|
|
48
188
|
],
|
|
49
189
|
anatomy: [
|
|
50
|
-
{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
190
|
+
{
|
|
191
|
+
name: 'Label',
|
|
192
|
+
required: true,
|
|
193
|
+
description:
|
|
194
|
+
'Text above the trigger describing what date range is expected.',
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: 'Trigger button',
|
|
198
|
+
required: true,
|
|
199
|
+
description:
|
|
200
|
+
'A button showing the formatted range or placeholder. Clicking opens the popover.',
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: 'Calendar icon',
|
|
204
|
+
required: true,
|
|
205
|
+
description: 'A trailing icon that also opens the popover.',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'Calendar popover',
|
|
209
|
+
required: true,
|
|
210
|
+
description:
|
|
211
|
+
'A dual-month calendar grid with range selection and hover preview.',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'Preset sidebar',
|
|
215
|
+
required: false,
|
|
216
|
+
description: 'A list of preset range options beside the calendar.',
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: 'Clear button',
|
|
220
|
+
required: false,
|
|
221
|
+
description: 'A × button that resets the range to null.',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'Status message',
|
|
225
|
+
required: false,
|
|
226
|
+
description: 'An error, warning, or success message below the trigger.',
|
|
227
|
+
},
|
|
57
228
|
],
|
|
58
229
|
},
|
|
59
230
|
};
|
|
60
231
|
|
|
61
232
|
/** @type {import('../docs-types').TranslationDoc} */
|
|
62
233
|
export const docsDense = {
|
|
63
|
-
description:
|
|
234
|
+
description:
|
|
235
|
+
'date range picker with dual-month calendar popover and preset ranges',
|
|
64
236
|
usage: {
|
|
65
|
-
description:
|
|
237
|
+
description:
|
|
238
|
+
'DateRangeInput lets users select start+end dates from a dual-month calendar. Use for filtering, reports, analytics, and booking.',
|
|
66
239
|
bestPractices: [
|
|
67
|
-
{
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
{
|
|
240
|
+
{
|
|
241
|
+
guidance: true,
|
|
242
|
+
description:
|
|
243
|
+
'Use presets for common ranges like "Last 7 days" to speed up selection.',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
guidance: true,
|
|
247
|
+
description:
|
|
248
|
+
'Use min/max to constrain selectable dates to valid ranges.',
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
guidance: true,
|
|
252
|
+
description:
|
|
253
|
+
'Keep hasClear enabled (default) so users can reset the filter.',
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
guidance: true,
|
|
257
|
+
description:
|
|
258
|
+
'Provide clear labels + descriptions so users understand what the range controls.',
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
guidance: false,
|
|
262
|
+
description:
|
|
263
|
+
'Use DateRangeInput when only a single date is needed; use DateInput instead.',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
guidance: false,
|
|
267
|
+
description:
|
|
268
|
+
'Hide the label without surrounding context that makes the purpose obvious.',
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
guidance: false,
|
|
272
|
+
description:
|
|
273
|
+
'Wrap a disabled DateRangeInput in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
274
|
+
},
|
|
73
275
|
],
|
|
74
276
|
},
|
|
75
277
|
propDescriptions: {
|
|
@@ -79,6 +281,8 @@ export const docsDense = {
|
|
|
79
281
|
isOptional: 'show "(optional)" indicator',
|
|
80
282
|
isRequired: 'mark field required',
|
|
81
283
|
isDisabled: 'disable trigger+picker',
|
|
284
|
+
disabledMessage:
|
|
285
|
+
'reason shown in a tooltip on hover/focus when disabled; keeps trigger focusable via aria-disabled',
|
|
82
286
|
value: 'selected range {start, end} or null',
|
|
83
287
|
onChange: 'callback on range change; null on clear',
|
|
84
288
|
min: 'min selectable date',
|
|
@@ -91,7 +295,8 @@ export const docsDense = {
|
|
|
91
295
|
status: 'error/warning/success status',
|
|
92
296
|
labelTooltip: 'tooltip via info icon at label end',
|
|
93
297
|
numberOfMonths: 'months in calendar (default 2)',
|
|
94
|
-
changeAction:
|
|
298
|
+
changeAction:
|
|
299
|
+
'async action fired after onChange; drives optimistic UI updates via useTransition',
|
|
95
300
|
isLoading: 'loading state; disables interaction + shows a spinner',
|
|
96
301
|
xstyle: 'StyleX styles for layout',
|
|
97
302
|
},
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* SYNC: When DateRangeInput.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {describe, it, expect, vi} from 'vitest';
|
|
13
|
-
import {render, screen, fireEvent} from '@testing-library/react';
|
|
12
|
+
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
13
|
+
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
|
+
import userEvent from '@testing-library/user-event';
|
|
14
15
|
import {DateRangeInput} from './DateRangeInput';
|
|
15
16
|
import type {DateRange} from './DateRangeInput';
|
|
16
17
|
|
|
@@ -23,9 +24,7 @@ describe('DateRangeInput', () => {
|
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
it('renders placeholder when value is null', () => {
|
|
26
|
-
render(
|
|
27
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
28
|
-
);
|
|
27
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
29
28
|
expect(screen.getByText('Select date range')).toBeInTheDocument();
|
|
30
29
|
});
|
|
31
30
|
|
|
@@ -99,9 +98,7 @@ describe('DateRangeInput', () => {
|
|
|
99
98
|
});
|
|
100
99
|
|
|
101
100
|
it('does not set aria-required when isRequired is false', () => {
|
|
102
|
-
render(
|
|
103
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
104
|
-
);
|
|
101
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
105
102
|
const trigger = screen.getByRole('button', {name: /Range/});
|
|
106
103
|
expect(trigger).not.toHaveAttribute('aria-required');
|
|
107
104
|
});
|
|
@@ -120,25 +117,19 @@ describe('DateRangeInput', () => {
|
|
|
120
117
|
});
|
|
121
118
|
|
|
122
119
|
it('is not disabled by default', () => {
|
|
123
|
-
render(
|
|
124
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
125
|
-
);
|
|
120
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
126
121
|
const trigger = screen.getByRole('button', {name: /Range/});
|
|
127
122
|
expect(trigger).not.toBeDisabled();
|
|
128
123
|
});
|
|
129
124
|
|
|
130
125
|
it('trigger has aria-haspopup="dialog"', () => {
|
|
131
|
-
render(
|
|
132
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
133
|
-
);
|
|
126
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
134
127
|
const trigger = screen.getByRole('button', {name: /Range/});
|
|
135
128
|
expect(trigger).toHaveAttribute('aria-haspopup', 'dialog');
|
|
136
129
|
});
|
|
137
130
|
|
|
138
131
|
it('trigger has aria-expanded=false by default', () => {
|
|
139
|
-
render(
|
|
140
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
141
|
-
);
|
|
132
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
142
133
|
const trigger = screen.getByRole('button', {name: /Range/});
|
|
143
134
|
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
144
135
|
});
|
|
@@ -201,9 +192,7 @@ describe('DateRangeInput', () => {
|
|
|
201
192
|
});
|
|
202
193
|
|
|
203
194
|
it('calendar icon button is present', () => {
|
|
204
|
-
render(
|
|
205
|
-
<DateRangeInput label="Range" value={null} onChange={() => {}} />,
|
|
206
|
-
);
|
|
195
|
+
render(<DateRangeInput label="Range" value={null} onChange={() => {}} />);
|
|
207
196
|
expect(
|
|
208
197
|
screen.getByRole('button', {name: 'Open calendar'}),
|
|
209
198
|
).toBeInTheDocument();
|
|
@@ -321,4 +310,177 @@ describe('DateRangeInput', () => {
|
|
|
321
310
|
expect(onChange).toHaveBeenCalledWith(null);
|
|
322
311
|
});
|
|
323
312
|
});
|
|
313
|
+
|
|
314
|
+
describe('presets', () => {
|
|
315
|
+
const presets = [
|
|
316
|
+
{
|
|
317
|
+
label: 'Last 7 days',
|
|
318
|
+
getRange: (): DateRange => ({
|
|
319
|
+
start: '2026-03-01',
|
|
320
|
+
end: '2026-03-07',
|
|
321
|
+
}),
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
label: 'This month',
|
|
325
|
+
getRange: (): DateRange => ({
|
|
326
|
+
start: '2026-03-01',
|
|
327
|
+
end: '2026-03-31',
|
|
328
|
+
}),
|
|
329
|
+
},
|
|
330
|
+
];
|
|
331
|
+
|
|
332
|
+
it('renders presets as a labeled group of buttons, not a listbox (forms-5)', () => {
|
|
333
|
+
render(
|
|
334
|
+
<DateRangeInput
|
|
335
|
+
label="Range"
|
|
336
|
+
value={null}
|
|
337
|
+
onChange={() => {}}
|
|
338
|
+
presets={presets}
|
|
339
|
+
/>,
|
|
340
|
+
);
|
|
341
|
+
// The preset sidebar is a group of action buttons — not a listbox of
|
|
342
|
+
// options (which would announce a Tab-navigable listbox it isn't).
|
|
343
|
+
expect(
|
|
344
|
+
screen.queryByRole('listbox', {hidden: true}),
|
|
345
|
+
).not.toBeInTheDocument();
|
|
346
|
+
expect(
|
|
347
|
+
screen.getByRole('group', {name: 'Preset date ranges', hidden: true}),
|
|
348
|
+
).toBeInTheDocument();
|
|
349
|
+
expect(
|
|
350
|
+
screen.getByRole('button', {name: 'Last 7 days', hidden: true}),
|
|
351
|
+
).toBeInTheDocument();
|
|
352
|
+
});
|
|
353
|
+
|
|
354
|
+
it('marks the applied preset with aria-current, not aria-selected', () => {
|
|
355
|
+
render(
|
|
356
|
+
<DateRangeInput
|
|
357
|
+
label="Range"
|
|
358
|
+
value={{start: '2026-03-01', end: '2026-03-07'}}
|
|
359
|
+
onChange={() => {}}
|
|
360
|
+
presets={presets}
|
|
361
|
+
/>,
|
|
362
|
+
);
|
|
363
|
+
const active = screen.getByRole('button', {
|
|
364
|
+
name: 'Last 7 days',
|
|
365
|
+
hidden: true,
|
|
366
|
+
});
|
|
367
|
+
expect(active).toHaveAttribute('aria-current', 'true');
|
|
368
|
+
expect(active).not.toHaveAttribute('aria-selected');
|
|
369
|
+
const inactive = screen.getByRole('button', {
|
|
370
|
+
name: 'This month',
|
|
371
|
+
hidden: true,
|
|
372
|
+
});
|
|
373
|
+
expect(inactive).not.toHaveAttribute('aria-current');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
describe('disabledMessage', () => {
|
|
377
|
+
// jsdom does not implement the Popover API used by the tooltip, so mock
|
|
378
|
+
// showPopover/hidePopover to toggle a `popover-open` attribute the tests
|
|
379
|
+
// can assert on.
|
|
380
|
+
beforeEach(() => {
|
|
381
|
+
HTMLElement.prototype.showPopover = vi.fn(function (this: HTMLElement) {
|
|
382
|
+
this.setAttribute('popover-open', '');
|
|
383
|
+
});
|
|
384
|
+
HTMLElement.prototype.hidePopover = vi.fn(function (this: HTMLElement) {
|
|
385
|
+
this.removeAttribute('popover-open');
|
|
386
|
+
});
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
// jsdom popover content is in the DOM but not "visible" in the
|
|
390
|
+
// accessibility tree; use hidden: true to find it.
|
|
391
|
+
const h = {hidden: true} as const;
|
|
392
|
+
|
|
393
|
+
function renderDisabled(props?: {disabledMessage?: string}) {
|
|
394
|
+
return render(
|
|
395
|
+
<DateRangeInput
|
|
396
|
+
label="Range"
|
|
397
|
+
value={null}
|
|
398
|
+
onChange={() => {}}
|
|
399
|
+
isDisabled
|
|
400
|
+
{...props}
|
|
401
|
+
/>,
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
it('shows the reason tooltip on hover when disabled with a reason', async () => {
|
|
406
|
+
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
407
|
+
|
|
408
|
+
const trigger = screen.getByRole('button', {name: /Range:/, ...h});
|
|
409
|
+
const container = trigger.parentElement as HTMLElement;
|
|
410
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
411
|
+
expect(tooltip).toHaveTextContent('You need the Editor role');
|
|
412
|
+
|
|
413
|
+
fireEvent.mouseEnter(container);
|
|
414
|
+
await waitFor(() => {
|
|
415
|
+
expect(tooltip).toHaveAttribute('popover-open');
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
fireEvent.mouseLeave(container);
|
|
419
|
+
await waitFor(() => {
|
|
420
|
+
expect(tooltip).not.toHaveAttribute('popover-open');
|
|
421
|
+
});
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
it('shows the reason tooltip on keyboard focus', async () => {
|
|
425
|
+
const user = userEvent.setup();
|
|
426
|
+
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
427
|
+
|
|
428
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
429
|
+
await user.tab();
|
|
430
|
+
expect(screen.getByRole('button', {name: /Range:/, ...h})).toHaveFocus();
|
|
431
|
+
await waitFor(() => {
|
|
432
|
+
expect(tooltip).toHaveAttribute('popover-open');
|
|
433
|
+
});
|
|
434
|
+
});
|
|
435
|
+
|
|
436
|
+
it('does not render a tooltip when not disabled', () => {
|
|
437
|
+
render(
|
|
438
|
+
<DateRangeInput
|
|
439
|
+
label="Range"
|
|
440
|
+
value={null}
|
|
441
|
+
onChange={() => {}}
|
|
442
|
+
disabledMessage="You need the Editor role"
|
|
443
|
+
/>,
|
|
444
|
+
);
|
|
445
|
+
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
446
|
+
});
|
|
447
|
+
|
|
448
|
+
it('does not render a tooltip when disabled without a reason', () => {
|
|
449
|
+
renderDisabled();
|
|
450
|
+
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
it('keeps the trigger focusable via aria-disabled when a reason is provided', () => {
|
|
454
|
+
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
455
|
+
const trigger = screen.getByRole('button', {name: /Range:/, ...h});
|
|
456
|
+
expect(trigger).not.toBeDisabled();
|
|
457
|
+
expect(trigger).toHaveAttribute('aria-disabled', 'true');
|
|
458
|
+
});
|
|
459
|
+
|
|
460
|
+
it('links the reason tooltip from the trigger via aria-describedby', () => {
|
|
461
|
+
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
462
|
+
const trigger = screen.getByRole('button', {name: /Range:/, ...h});
|
|
463
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
464
|
+
expect(trigger.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
465
|
+
});
|
|
466
|
+
|
|
467
|
+
it('blocks activation while focusable-disabled', async () => {
|
|
468
|
+
const user = userEvent.setup();
|
|
469
|
+
renderDisabled({disabledMessage: 'You need the Editor role'});
|
|
470
|
+
|
|
471
|
+
const trigger = screen.getByRole('button', {name: /Range:/, ...h});
|
|
472
|
+
await user.click(trigger);
|
|
473
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
474
|
+
|
|
475
|
+
await user.keyboard('{Enter}');
|
|
476
|
+
expect(trigger).toHaveAttribute('aria-expanded', 'false');
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
it('remains natively disabled when disabled without a reason', () => {
|
|
480
|
+
renderDisabled();
|
|
481
|
+
const trigger = screen.getByRole('button', {name: /Range:/, ...h});
|
|
482
|
+
expect(trigger).toBeDisabled();
|
|
483
|
+
expect(trigger).not.toHaveAttribute('aria-disabled');
|
|
484
|
+
});
|
|
485
|
+
});
|
|
324
486
|
});
|