@astryxdesign/core 0.1.1 → 0.1.2-canary.04e71b2
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 +105 -0
- package/README.md +131 -13
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +11 -5
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +4 -1
- package/dist/Banner/Banner.d.ts +7 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +9 -2
- 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 +12 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +53 -17
- 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/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.map +1 -1
- package/dist/Chat/useTriggerMenu.js +4 -1
- 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/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +3 -3
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +49 -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 +59 -8
- 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/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +7 -1
- 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 +8 -0
- package/dist/HoverCard/HoverCard.d.ts +2 -2
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +18 -6
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +7 -3
- package/dist/InputGroup/InputGroup.d.ts +2 -2
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +14 -5
- 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/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 +34 -2
- package/dist/Layer/anchorName.d.ts +20 -0
- package/dist/Layer/anchorName.d.ts.map +1 -0
- package/dist/Layer/anchorName.js +36 -0
- 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 +29 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +55 -11
- 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 +17 -2
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +20 -9
- package/dist/Link/LinkProvider.d.ts +1 -0
- package/dist/Link/LinkProvider.d.ts.map +1 -1
- package/dist/Link/LinkProvider.js +1 -0
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +18 -3
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +13 -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 +25 -2
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +103 -22
- 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 +46 -28
- package/dist/Popover/usePopover.d.ts +25 -2
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +18 -6
- 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 +22 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +84 -23
- 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/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 +38 -11
- 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 +86 -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 +38 -16
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -7
- 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/TableRow.d.ts +6 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +15 -7
- 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/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +59 -3
- package/dist/Table/plugins/stickyColumns/index.d.ts +3 -0
- package/dist/Table/plugins/stickyColumns/index.d.ts.map +1 -0
- package/dist/Table/plugins/stickyColumns/index.js +3 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts +25 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -0
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +369 -0
- 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 +161 -5
- package/dist/Table/types.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
- package/dist/Table/useBaseTablePlugins.js +1 -1
- package/dist/Text/text.stylex.d.ts +2 -2
- package/dist/Text/text.stylex.js +2 -2
- 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 +53 -10
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +28 -3
- 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 +132 -3
- package/dist/ToggleButton/ToggleButton.d.ts +7 -9
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +34 -57
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +27 -5
- 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 +57 -9
- 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 +9 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +67 -6
- package/dist/Typeahead/Typeahead.d.ts +24 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +29 -5
- 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 +40 -1
- package/dist/astryx.umd.js +147 -0
- package/dist/astryx.umd.js.map +7 -0
- 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/theme/generateThemeRules.js +1 -1
- package/dist/theme/syntax/SyntaxTheme.d.ts +1 -1
- package/dist/theme/syntax/SyntaxTheme.js +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.d.ts.map +1 -1
- package/dist/theme/syntax/defineSyntaxTheme.js +2 -2
- package/dist/theme/syntax/presets.d.ts +1 -1
- package/dist/theme/syntax/presets.d.ts.map +1 -1
- package/dist/theme/syntax/presets.js +1 -1
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.js +1 -1
- package/dist/theme/types.d.ts +1 -1
- 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/package.json +15 -5
- package/src/Avatar/Avatar.test.tsx +37 -0
- package/src/Avatar/Avatar.tsx +10 -5
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +3 -0
- package/src/Banner/Banner.doc.mjs +8 -0
- package/src/Banner/Banner.test.tsx +16 -7
- package/src/Banner/Banner.tsx +9 -2
- package/src/Breadcrumbs/BreadcrumbItem.tsx +25 -7
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -10
- package/src/Button/Button.doc.mjs +6 -0
- package/src/Button/Button.test.tsx +105 -11
- package/src/Button/Button.tsx +76 -21
- 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/ChatComposer.doc.mjs +3 -0
- package/src/Chat/ChatComposerDrawer.doc.mjs +12 -0
- 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 +3 -0
- package/src/CheckboxInput/CheckboxInput.doc.mjs +18 -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 +169 -16
- package/src/CheckboxList/CheckboxList.tsx +56 -3
- package/src/CheckboxList/CheckboxListContext.tsx +7 -0
- package/src/Citation/Citation.doc.mjs +10 -0
- package/src/Citation/Citation.test.tsx +117 -0
- package/src/Citation/Citation.tsx +9 -1
- package/src/ClickableCard/ClickableCard.doc.mjs +15 -0
- package/src/CodeBlock/CodeBlock.test.tsx +115 -0
- package/src/CodeBlock/CodeBlock.tsx +61 -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 +281 -56
- package/src/DateInput/DateInput.test.tsx +188 -2
- package/src/DateInput/DateInput.tsx +89 -10
- 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/EmptyState/EmptyState.test.tsx +4 -2
- package/src/EmptyState/EmptyState.tsx +6 -2
- 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 +14 -4
- package/src/Grid/Grid.tsx +20 -0
- package/src/HoverCard/HoverCard.doc.mjs +3 -0
- package/src/HoverCard/HoverCard.test.tsx +189 -2
- package/src/HoverCard/HoverCard.tsx +20 -16
- package/src/HoverCard/useHoverCard.tsx +13 -10
- package/src/Icon/Icon.doc.mjs +8 -0
- package/src/InputGroup/InputGroup.doc.mjs +2 -2
- package/src/InputGroup/InputGroup.test.tsx +98 -60
- package/src/InputGroup/InputGroup.tsx +21 -4
- package/src/InputGroup/InputGroupContext.ts +9 -4
- package/src/InputGroup/index.ts +1 -0
- package/src/Kbd/Kbd.test.tsx +22 -4
- package/src/Kbd/Kbd.tsx +37 -12
- package/src/Layer/anchorName.test.ts +146 -0
- package/src/Layer/anchorName.ts +46 -0
- package/src/Layer/layerAnimations.stylex.ts +20 -4
- package/src/Layer/useLayer.doc.mjs +12 -2
- package/src/Layer/useLayer.tsx +100 -15
- package/src/Layout/Layout.doc.mjs +1 -1
- 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 -2
- 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 +52 -2
- package/src/Link/Link.tsx +42 -7
- package/src/Link/LinkProvider.tsx +1 -0
- package/src/List/List.doc.mjs +7 -0
- package/src/Markdown/Markdown.doc.mjs +2 -0
- package/src/Markdown/Markdown.test.tsx +28 -26
- package/src/Markdown/Markdown.tsx +21 -6
- package/src/MetadataList/MetadataListItem.doc.mjs +4 -0
- package/src/MobileNav/MobileNav.doc.mjs +8 -8
- package/src/MobileNav/MobileNav.tsx +13 -0
- package/src/MobileNav/MobileNavReopen.test.tsx +118 -0
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -17
- package/src/MoreMenu/MoreMenu.tsx +0 -9
- package/src/MultiSelector/MultiSelector.doc.mjs +25 -0
- package/src/MultiSelector/MultiSelector.test.tsx +375 -8
- package/src/MultiSelector/MultiSelector.tsx +145 -21
- 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/OverflowList/OverflowList.doc.mjs +17 -0
- package/src/Pagination/Pagination.doc.mjs +3 -3
- package/src/Pagination/Pagination.test.tsx +250 -14
- package/src/Pagination/Pagination.tsx +54 -29
- package/src/Popover/usePopover.doc.mjs +7 -3
- package/src/Popover/usePopover.tsx +49 -6
- 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 +45 -27
- 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/Resizable/Resizable.doc.mjs +1 -1
- package/src/Section/Section.doc.mjs +11 -0
- 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 +15 -0
- package/src/Selector/Selector.doc.mjs +25 -0
- package/src/Selector/Selector.test.tsx +322 -15
- package/src/Selector/Selector.tsx +126 -40
- package/src/Selector/hooks.ts +23 -0
- package/src/SideNav/SideNav.test.tsx +16 -0
- package/src/SideNav/SideNavItem.tsx +2 -4
- package/src/Skeleton/Skeleton.doc.mjs +11 -1
- package/src/Skeleton/Skeleton.test.tsx +25 -0
- package/src/Skeleton/Skeleton.tsx +11 -1
- package/src/Slider/Slider.doc.mjs +19 -0
- package/src/Slider/Slider.test.tsx +158 -18
- package/src/Slider/Slider.tsx +54 -6
- 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 +12 -0
- package/src/TabList/TabList.test.tsx +208 -0
- package/src/TabList/TabList.tsx +102 -12
- package/src/TabList/TabListContext.ts +7 -3
- package/src/TabList/TabMenu.tsx +6 -3
- package/src/Table/BaseTable.tsx +72 -41
- package/src/Table/Table.doc.mjs +14 -0
- package/src/Table/Table.test.tsx +39 -30
- package/src/Table/Table.tsx +27 -1
- package/src/Table/TableCell.tsx +25 -23
- package/src/Table/TableHeaderCell.tsx +28 -29
- package/src/Table/TableRow.tsx +37 -7
- package/src/Table/index.ts +6 -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/plugins/stickyColumns/index.ts +4 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +163 -0
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +407 -0
- package/src/Table/tableContextMenu.test.tsx +157 -0
- package/src/Table/tableContextMenu.tsx +142 -0
- package/src/Table/types.ts +175 -4
- package/src/Table/useBaseTablePlugins.ts +1 -0
- package/src/Table/useTableColumnResize.doc.mjs +96 -0
- package/src/Table/useTableStickyColumns.doc.mjs +59 -0
- package/src/Text/Heading.doc.mjs +15 -2
- package/src/Text/Text.doc.mjs +7 -1
- package/src/Text/text.stylex.ts +2 -2
- 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/TimeInput/TimeInput.doc.mjs +335 -60
- package/src/TimeInput/TimeInput.test.tsx +144 -7
- package/src/TimeInput/TimeInput.tsx +74 -5
- package/src/Timestamp/Timestamp.doc.mjs +9 -0
- package/src/Timestamp/Timestamp.test.tsx +44 -18
- package/src/Timestamp/Timestamp.tsx +30 -10
- package/src/Toast/Toast.tsx +14 -0
- package/src/Toast/ToastViewport.test.tsx +204 -0
- package/src/Toast/ToastViewport.tsx +167 -21
- package/src/ToggleButton/ToggleButton.doc.mjs +9 -3
- package/src/ToggleButton/ToggleButton.test.tsx +39 -18
- package/src/ToggleButton/ToggleButton.tsx +46 -83
- package/src/Tokenizer/Tokenizer.doc.mjs +15 -0
- package/src/Tokenizer/Tokenizer.test.tsx +105 -1
- package/src/Tokenizer/Tokenizer.tsx +41 -2
- package/src/Toolbar/Toolbar.doc.mjs +65 -5
- package/src/Toolbar/Toolbar.test.tsx +109 -6
- package/src/Toolbar/Toolbar.tsx +59 -5
- package/src/Tooltip/Tooltip.test.tsx +81 -0
- package/src/Tooltip/useTooltip.tsx +57 -11
- 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 +86 -9
- package/src/Typeahead/Typeahead.doc.mjs +136 -30
- package/src/Typeahead/Typeahead.test.tsx +331 -1
- package/src/Typeahead/Typeahead.tsx +52 -1
- 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/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/useImageMode.test.ts +133 -0
- 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 +4 -0
- package/src/theme/generateThemeRules.test.ts +7 -8
- package/src/theme/generateThemeRules.ts +1 -1
- package/src/theme/syntax/SyntaxTheme.tsx +1 -1
- package/src/theme/syntax/defineSyntaxTheme.ts +20 -11
- package/src/theme/syntax/presets.ts +5 -2
- package/src/theme/syntax/tokens.ts +1 -1
- package/src/theme/types.ts +1 -1
- 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
|
@@ -44,14 +44,12 @@ import {
|
|
|
44
44
|
inputStatusFocusWithinStyles,
|
|
45
45
|
} from '../Field';
|
|
46
46
|
import {Icon} from '../Icon';
|
|
47
|
+
import {VisuallyHidden} from '../VisuallyHidden';
|
|
47
48
|
import {Spinner} from '../Spinner';
|
|
48
|
-
import {
|
|
49
|
-
Calendar,
|
|
50
|
-
type ISODateString,
|
|
51
|
-
type CalendarHandle,
|
|
52
|
-
} from '../Calendar';
|
|
49
|
+
import {Calendar, type ISODateString, type CalendarHandle} from '../Calendar';
|
|
53
50
|
import {useCalendarConstraints} from '../Calendar/hooks';
|
|
54
51
|
import {usePopover} from '../Popover';
|
|
52
|
+
import {useTooltip} from '../Tooltip';
|
|
55
53
|
import {parseDateInput} from '../utils';
|
|
56
54
|
import {
|
|
57
55
|
plainDateFromISO,
|
|
@@ -177,6 +175,29 @@ export interface DateInputProps extends Omit<
|
|
|
177
175
|
*/
|
|
178
176
|
isDisabled?: boolean;
|
|
179
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Explains why the input is disabled. When set together with
|
|
180
|
+
* `isDisabled`, the input shows a tooltip with this text on hover and
|
|
181
|
+
* keyboard focus, and the field stays focusable (via `aria-disabled`)
|
|
182
|
+
* so the reason is discoverable by keyboard and assistive technology.
|
|
183
|
+
* Typing and calendar activation stay blocked.
|
|
184
|
+
*
|
|
185
|
+
* Use this instead of wrapping a disabled input in `Tooltip` — disabled
|
|
186
|
+
* controls don't emit the pointer events an external tooltip needs.
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```
|
|
190
|
+
* <DateInput
|
|
191
|
+
* label="Event date"
|
|
192
|
+
* value={date}
|
|
193
|
+
* onChange={setDate}
|
|
194
|
+
* isDisabled
|
|
195
|
+
* disabledMessage="You need the Editor role to change this"
|
|
196
|
+
* />
|
|
197
|
+
* ```
|
|
198
|
+
*/
|
|
199
|
+
disabledMessage?: string;
|
|
200
|
+
|
|
180
201
|
/**
|
|
181
202
|
* The selected date in ISO format (YYYY-MM-DD).
|
|
182
203
|
*/
|
|
@@ -279,6 +300,7 @@ export function DateInput({
|
|
|
279
300
|
isOptional = false,
|
|
280
301
|
isRequired = false,
|
|
281
302
|
isDisabled = false,
|
|
303
|
+
disabledMessage,
|
|
282
304
|
value,
|
|
283
305
|
onChange,
|
|
284
306
|
changeAction,
|
|
@@ -311,6 +333,22 @@ export function DateInput({
|
|
|
311
333
|
const isBusy = isLoading || optimisticValue !== value;
|
|
312
334
|
const isEffectivelyDisabled = isDisabled || isBusy;
|
|
313
335
|
|
|
336
|
+
// Disabled-reason tooltip. Disabled controls swallow pointer events, so the
|
|
337
|
+
// tooltip listeners attach to the input container (which already exists) and
|
|
338
|
+
// the text input stays perceivable via aria-disabled instead of the disabled
|
|
339
|
+
// attribute. Typing is blocked with readOnly and value mutation guards;
|
|
340
|
+
// calendar activation is blocked by the isEffectivelyDisabled guards. Only
|
|
341
|
+
// the persistent isDisabled state (not the transient busy state) surfaces a
|
|
342
|
+
// reason.
|
|
343
|
+
const showsDisabledMessage = isDisabled && !!disabledMessage;
|
|
344
|
+
const disabledMessageTooltip = useTooltip({
|
|
345
|
+
placement: 'above',
|
|
346
|
+
// The container div is not naturally focusable; focusin bubbles up from
|
|
347
|
+
// the input, so always attach focus listeners.
|
|
348
|
+
focusTrigger: 'always',
|
|
349
|
+
isEnabled: showsDisabledMessage,
|
|
350
|
+
});
|
|
351
|
+
|
|
314
352
|
// Status icon mapping
|
|
315
353
|
const statusIconMap: Record<InputStatusType, IconName> = {
|
|
316
354
|
warning: 'warning',
|
|
@@ -334,6 +372,7 @@ export function DateInput({
|
|
|
334
372
|
[
|
|
335
373
|
description ? descriptionID : null,
|
|
336
374
|
status?.message ? statusMessageID : null,
|
|
375
|
+
showsDisabledMessage ? disabledMessageTooltip.describedBy : null,
|
|
337
376
|
]
|
|
338
377
|
.filter(Boolean)
|
|
339
378
|
.join(' ') || undefined;
|
|
@@ -428,6 +467,11 @@ export function DateInput({
|
|
|
428
467
|
// Handle input text change - update immediately if valid and allowed
|
|
429
468
|
const handleInputChange = useCallback(
|
|
430
469
|
(e: React.ChangeEvent<HTMLInputElement>) => {
|
|
470
|
+
// With a disabledMessage the input drops `disabled` for focusability, so
|
|
471
|
+
// guard value mutation explicitly (readOnly also blocks typing).
|
|
472
|
+
if (isEffectivelyDisabled) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
431
475
|
const newValue = e.target.value;
|
|
432
476
|
setPendingInput(newValue);
|
|
433
477
|
|
|
@@ -445,7 +489,7 @@ export function DateInput({
|
|
|
445
489
|
calendarRef.current?.navigateTo(parsedISO);
|
|
446
490
|
}
|
|
447
491
|
},
|
|
448
|
-
[value, fireChange, isDateDisabled],
|
|
492
|
+
[value, fireChange, isDateDisabled, isEffectivelyDisabled],
|
|
449
493
|
);
|
|
450
494
|
|
|
451
495
|
// Commit pending input (shared by blur and Enter key)
|
|
@@ -483,12 +527,22 @@ export function DateInput({
|
|
|
483
527
|
if (e.key === 'Escape' && popover.isOpen) {
|
|
484
528
|
e.preventDefault();
|
|
485
529
|
popover.hide();
|
|
530
|
+
} else if (
|
|
531
|
+
(e.key === 'ArrowDown' || (e.altKey && e.key === 'ArrowDown')) &&
|
|
532
|
+
!popover.isOpen
|
|
533
|
+
) {
|
|
534
|
+
// APG combobox: ArrowDown (and Alt+ArrowDown) opens the calendar
|
|
535
|
+
// popover from the keyboard, keeping focus in the input (forms-13).
|
|
536
|
+
e.preventDefault();
|
|
537
|
+
if (!isEffectivelyDisabled) {
|
|
538
|
+
popover.show({skipAutoFocus: true});
|
|
539
|
+
}
|
|
486
540
|
} else if (e.key === 'Enter') {
|
|
487
541
|
e.preventDefault();
|
|
488
542
|
commitPendingInput();
|
|
489
543
|
}
|
|
490
544
|
},
|
|
491
|
-
[popover, commitPendingInput],
|
|
545
|
+
[popover, commitPendingInput, isEffectivelyDisabled],
|
|
492
546
|
);
|
|
493
547
|
|
|
494
548
|
return (
|
|
@@ -513,7 +567,13 @@ export function DateInput({
|
|
|
513
567
|
labelTooltip={labelTooltip}
|
|
514
568
|
width={width}>
|
|
515
569
|
<div
|
|
516
|
-
ref={
|
|
570
|
+
ref={el => {
|
|
571
|
+
popover.triggerRef(el);
|
|
572
|
+
// Anchor + hover/focus listeners for the disabled-message tooltip.
|
|
573
|
+
// Handlers are gated internally by isEnabled, and anchor names
|
|
574
|
+
// compose, so attaching unconditionally is safe.
|
|
575
|
+
disabledMessageTooltip.ref(el);
|
|
576
|
+
}}
|
|
517
577
|
{...rest}
|
|
518
578
|
{...mergeProps(
|
|
519
579
|
themeProps('date-input', {size, status: status?.type ?? null}),
|
|
@@ -551,10 +611,18 @@ export function DateInput({
|
|
|
551
611
|
onClick={handleInputClick}
|
|
552
612
|
onKeyDown={handleInputKeyDown}
|
|
553
613
|
placeholder={placeholder}
|
|
554
|
-
|
|
614
|
+
// With a disabledMessage the input keeps focusability via
|
|
615
|
+
// aria-disabled so the reason is focus-discoverable; typing is
|
|
616
|
+
// blocked with readOnly and the mutation guards, and calendar
|
|
617
|
+
// activation is blocked by the isEffectivelyDisabled guards.
|
|
618
|
+
disabled={isEffectivelyDisabled && !showsDisabledMessage}
|
|
619
|
+
aria-disabled={showsDisabledMessage ? 'true' : undefined}
|
|
620
|
+
readOnly={showsDisabledMessage || undefined}
|
|
555
621
|
aria-describedby={ariaDescribedBy}
|
|
556
622
|
aria-required={isRequired === true ? 'true' : undefined}
|
|
557
|
-
aria-invalid={
|
|
623
|
+
aria-invalid={
|
|
624
|
+
status?.type === 'error' || !isInputValid ? 'true' : undefined
|
|
625
|
+
}
|
|
558
626
|
aria-busy={isBusy || undefined}
|
|
559
627
|
aria-expanded={popover.isOpen}
|
|
560
628
|
aria-haspopup="dialog"
|
|
@@ -567,6 +635,14 @@ export function DateInput({
|
|
|
567
635
|
!isInputValid && styles.inputInvalid,
|
|
568
636
|
)}
|
|
569
637
|
/>
|
|
638
|
+
{/*
|
|
639
|
+
Live region announcing invalid typed input to assistive technology.
|
|
640
|
+
The value silently reverts on blur, so without this a screen-reader
|
|
641
|
+
user would get no feedback that their entry was rejected (WCAG 3.3.1).
|
|
642
|
+
*/}
|
|
643
|
+
<VisuallyHidden as="div" role="alert" aria-live="assertive">
|
|
644
|
+
{!isInputValid ? 'Invalid date' : ''}
|
|
645
|
+
</VisuallyHidden>
|
|
570
646
|
{hasClear && value !== undefined && !isEffectivelyDisabled && (
|
|
571
647
|
<button
|
|
572
648
|
type="button"
|
|
@@ -598,6 +674,9 @@ export function DateInput({
|
|
|
598
674
|
/>,
|
|
599
675
|
{placement: 'below', alignment: 'start'},
|
|
600
676
|
)}
|
|
677
|
+
|
|
678
|
+
{showsDisabledMessage &&
|
|
679
|
+
disabledMessageTooltip.renderTooltip(disabledMessage)}
|
|
601
680
|
</Field>
|
|
602
681
|
);
|
|
603
682
|
}
|
|
@@ -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
|
},
|