@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
|
@@ -7,7 +7,15 @@ export const docs = {
|
|
|
7
7
|
displayName: 'Date Input',
|
|
8
8
|
group: 'DateInput',
|
|
9
9
|
category: 'Data Input',
|
|
10
|
-
keywords: [
|
|
10
|
+
keywords: [
|
|
11
|
+
'dateinput',
|
|
12
|
+
'datepicker',
|
|
13
|
+
'datefield',
|
|
14
|
+
'calendar',
|
|
15
|
+
'dateselect',
|
|
16
|
+
'dateentry',
|
|
17
|
+
'datechooser',
|
|
18
|
+
],
|
|
11
19
|
props: [
|
|
12
20
|
{
|
|
13
21
|
name: 'label',
|
|
@@ -44,6 +52,12 @@ export const docs = {
|
|
|
44
52
|
description: 'Disable the input and calendar.',
|
|
45
53
|
default: 'false',
|
|
46
54
|
},
|
|
55
|
+
{
|
|
56
|
+
name: 'disabledMessage',
|
|
57
|
+
type: 'string',
|
|
58
|
+
description:
|
|
59
|
+
'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 DateInput in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
|
|
60
|
+
},
|
|
47
61
|
{
|
|
48
62
|
name: 'value',
|
|
49
63
|
type: 'ISODateString',
|
|
@@ -57,12 +71,14 @@ export const docs = {
|
|
|
57
71
|
{
|
|
58
72
|
name: 'changeAction',
|
|
59
73
|
type: '(value: ISODateString | undefined) => void | Promise<void>',
|
|
60
|
-
description:
|
|
74
|
+
description:
|
|
75
|
+
'Async action fired after onChange. Drives optimistic UI updates via useTransition.',
|
|
61
76
|
},
|
|
62
77
|
{
|
|
63
78
|
name: 'isLoading',
|
|
64
79
|
type: 'boolean',
|
|
65
|
-
description:
|
|
80
|
+
description:
|
|
81
|
+
'Whether the input is in a loading state. Disables interaction and shows a spinner.',
|
|
66
82
|
default: 'false',
|
|
67
83
|
},
|
|
68
84
|
{
|
|
@@ -102,7 +118,8 @@ export const docs = {
|
|
|
102
118
|
{
|
|
103
119
|
name: 'labelTooltip',
|
|
104
120
|
type: 'string',
|
|
105
|
-
description:
|
|
121
|
+
description:
|
|
122
|
+
'Tooltip text displayed via an info icon at the end of the label.',
|
|
106
123
|
},
|
|
107
124
|
{
|
|
108
125
|
name: 'hasClear',
|
|
@@ -131,23 +148,85 @@ export const docs = {
|
|
|
131
148
|
],
|
|
132
149
|
},
|
|
133
150
|
usage: {
|
|
134
|
-
description:
|
|
151
|
+
description:
|
|
152
|
+
'DateInput lets the user type or pick a date from a calendar popover. Use it for scheduling, deadlines, booking dates, or any form field that needs a specific calendar date.',
|
|
135
153
|
bestPractices: [
|
|
136
|
-
{
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
{
|
|
142
|
-
|
|
154
|
+
{
|
|
155
|
+
guidance: true,
|
|
156
|
+
description:
|
|
157
|
+
'Provide clear labels and descriptions so users understand what date is expected.',
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
guidance: true,
|
|
161
|
+
description:
|
|
162
|
+
'Use min, max, and dateConstraints to restrict selectable dates to valid ranges.',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
guidance: true,
|
|
166
|
+
description:
|
|
167
|
+
'Use hasClear when the date is optional so the user can reset it.',
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
guidance: true,
|
|
171
|
+
description:
|
|
172
|
+
'Show a loading state with changeAction when the date triggers a server-side save.',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
guidance: false,
|
|
176
|
+
description:
|
|
177
|
+
'Use a DateInput for free-form text that does not represent a calendar date.',
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
guidance: false,
|
|
181
|
+
description:
|
|
182
|
+
'Hide the label without surrounding context that makes the field purpose obvious.',
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
guidance: false,
|
|
186
|
+
description:
|
|
187
|
+
'Rely on the calendar alone; the text input lets users type dates directly, which is faster for known dates.',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
guidance: false,
|
|
191
|
+
description:
|
|
192
|
+
'Wrap a disabled DateInput in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
193
|
+
},
|
|
143
194
|
],
|
|
144
195
|
anatomy: [
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
{
|
|
196
|
+
{
|
|
197
|
+
name: 'Label',
|
|
198
|
+
required: true,
|
|
199
|
+
description: 'Text above the input describing what date is expected.',
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: 'Text input',
|
|
203
|
+
required: true,
|
|
204
|
+
description:
|
|
205
|
+
'A field where the user can type a date directly. Parses common formats like MM/DD/YYYY.',
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
name: 'Calendar icon',
|
|
209
|
+
required: true,
|
|
210
|
+
description:
|
|
211
|
+
'A button that opens the calendar popover for visual date picking.',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'Calendar popover',
|
|
215
|
+
required: false,
|
|
216
|
+
description:
|
|
217
|
+
'A month grid that appears when the icon is clicked or the input is focused.',
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
name: 'Clear button',
|
|
221
|
+
required: false,
|
|
222
|
+
description:
|
|
223
|
+
'A × button that resets the date value. Shown when hasClear is true and a date is set.',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
name: 'Status message',
|
|
227
|
+
required: false,
|
|
228
|
+
description: 'An error, warning, or success message below the input.',
|
|
229
|
+
},
|
|
151
230
|
],
|
|
152
231
|
},
|
|
153
232
|
};
|
|
@@ -157,40 +236,153 @@ export const docsZh = {
|
|
|
157
236
|
name: 'DateInput',
|
|
158
237
|
displayName: 'Date Input',
|
|
159
238
|
usage: {
|
|
160
|
-
description:
|
|
239
|
+
description:
|
|
240
|
+
'DateInput lets the user type or pick a date from a calendar popover. Use it for scheduling, deadlines, booking dates, or any form field that needs a specific calendar date.',
|
|
161
241
|
bestPractices: [
|
|
162
|
-
{
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
{
|
|
168
|
-
|
|
242
|
+
{
|
|
243
|
+
guidance: true,
|
|
244
|
+
description:
|
|
245
|
+
'Provide clear labels and descriptions so users understand what date is expected.',
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
guidance: true,
|
|
249
|
+
description:
|
|
250
|
+
'Use min, max, and dateConstraints to restrict selectable dates to valid ranges.',
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
guidance: true,
|
|
254
|
+
description:
|
|
255
|
+
'Use hasClear when the date is optional so the user can reset it.',
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
guidance: true,
|
|
259
|
+
description:
|
|
260
|
+
'Show a loading state with changeAction when the date triggers a server-side save.',
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
guidance: false,
|
|
264
|
+
description:
|
|
265
|
+
'Use a DateInput for free-form text that does not represent a calendar date.',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
guidance: false,
|
|
269
|
+
description:
|
|
270
|
+
'Hide the label without surrounding context that makes the field purpose obvious.',
|
|
271
|
+
},
|
|
272
|
+
{
|
|
273
|
+
guidance: false,
|
|
274
|
+
description:
|
|
275
|
+
'Rely on the calendar alone; the text input lets users type dates directly, which is faster for known dates.',
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
guidance: false,
|
|
279
|
+
description:
|
|
280
|
+
'Wrap a disabled DateInput in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
281
|
+
},
|
|
169
282
|
],
|
|
170
283
|
},
|
|
171
284
|
props: [
|
|
172
285
|
{name: 'label', type: 'string', description: '标签文本。', required: true},
|
|
173
|
-
{
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
{
|
|
286
|
+
{
|
|
287
|
+
name: 'isLabelHidden',
|
|
288
|
+
type: 'boolean',
|
|
289
|
+
description: '视觉隐藏标签。',
|
|
290
|
+
default: 'false',
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
name: 'description',
|
|
294
|
+
type: 'string',
|
|
295
|
+
description: '显示在标签下方的辅助文本。',
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
name: 'isOptional',
|
|
299
|
+
type: 'boolean',
|
|
300
|
+
description: '在标签旁显示"(optional)"指示器。',
|
|
301
|
+
default: 'false',
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: 'isRequired',
|
|
305
|
+
type: 'boolean',
|
|
306
|
+
description: '将字段标记为必填。',
|
|
307
|
+
default: 'false',
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
name: 'isDisabled',
|
|
311
|
+
type: 'boolean',
|
|
312
|
+
description: '禁用输入框和日历。',
|
|
313
|
+
default: 'false',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
name: 'disabledMessage',
|
|
317
|
+
type: 'string',
|
|
318
|
+
description:
|
|
319
|
+
'说明输入框为何被禁用。与 isDisabled 一起使用时,在悬停/键盘聚焦时显示提示,并通过 aria-disabled 保持输入框可聚焦(仍阻止输入和激活)。请使用此属性,而不是用 Tooltip 包裹已禁用的 DateInput。',
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
name: 'value',
|
|
323
|
+
type: 'ISODateString',
|
|
324
|
+
description: '选中的日期,YYYY-MM-DD 格式。',
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'onChange',
|
|
328
|
+
type: '(value: ISODateString | undefined) => void',
|
|
329
|
+
description: '选中日期变更时调用的回调。',
|
|
330
|
+
},
|
|
180
331
|
{
|
|
181
332
|
name: 'changeAction',
|
|
182
333
|
type: '(value: ISODateString | undefined) => void | Promise<void>',
|
|
183
|
-
description:
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
{
|
|
193
|
-
|
|
334
|
+
description:
|
|
335
|
+
'在 onChange 之后触发的异步操作。通过 useTransition 驱动乐观更新。',
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: 'isLoading',
|
|
339
|
+
type: 'boolean',
|
|
340
|
+
description: '输入框是否处于加载状态。禁用交互并显示加载指示器。',
|
|
341
|
+
default: 'false',
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
name: 'min',
|
|
345
|
+
type: 'ISODateString',
|
|
346
|
+
description: '可选择的最早日期(YYYY-MM-DD)。',
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
name: 'max',
|
|
350
|
+
type: 'ISODateString',
|
|
351
|
+
description: '可选择的最晚日期(YYYY-MM-DD)。',
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
name: 'dateConstraints',
|
|
355
|
+
type: 'Array<(date: Date) => boolean>',
|
|
356
|
+
description: '自定义约束函数数组,用于禁用特定日期。',
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
name: 'placeholder',
|
|
360
|
+
type: 'string',
|
|
361
|
+
description: '文本输入框中显示的占位符文本。',
|
|
362
|
+
default: "'Select a date'",
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: 'size',
|
|
366
|
+
type: "'sm' | 'md' | 'lg'",
|
|
367
|
+
description: '输入控件的尺寸。',
|
|
368
|
+
default: "'md'",
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
name: 'status',
|
|
372
|
+
type: 'InputStatus',
|
|
373
|
+
description: '错误、警告或成功状态的状态指示对象,附带消息。',
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
name: 'labelTooltip',
|
|
377
|
+
type: 'string',
|
|
378
|
+
description: '通过标签末尾的信息图标显示的提示文本。',
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
name: 'numberOfMonths',
|
|
382
|
+
type: '1 | 2',
|
|
383
|
+
description: '日历弹出层中同时显示的月份数量。',
|
|
384
|
+
default: '1',
|
|
385
|
+
},
|
|
194
386
|
{
|
|
195
387
|
name: 'xstyle',
|
|
196
388
|
type: 'StyleXStyles',
|
|
@@ -202,10 +394,7 @@ export const docsZh = {
|
|
|
202
394
|
targets: [
|
|
203
395
|
{
|
|
204
396
|
className: 'astryx-date-input',
|
|
205
|
-
visualProps: [
|
|
206
|
-
'size',
|
|
207
|
-
'status',
|
|
208
|
-
],
|
|
397
|
+
visualProps: ['size', 'status'],
|
|
209
398
|
},
|
|
210
399
|
],
|
|
211
400
|
},
|
|
@@ -215,15 +404,49 @@ export const docsZh = {
|
|
|
215
404
|
export const docsDense = {
|
|
216
405
|
description: 'text input w/ calendar popover for picking a date',
|
|
217
406
|
usage: {
|
|
218
|
-
description:
|
|
407
|
+
description:
|
|
408
|
+
'DateInput lets the user type or pick a date from a calendar popover. Use for scheduling, deadlines, booking dates, or any form field needing a calendar date.',
|
|
219
409
|
bestPractices: [
|
|
220
|
-
{
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
{
|
|
226
|
-
|
|
410
|
+
{
|
|
411
|
+
guidance: true,
|
|
412
|
+
description:
|
|
413
|
+
'Provide clear labels + descriptions so users understand what date is expected.',
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
guidance: true,
|
|
417
|
+
description:
|
|
418
|
+
'Use min, max, and dateConstraints to restrict selectable dates to valid ranges.',
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
guidance: true,
|
|
422
|
+
description:
|
|
423
|
+
'Use hasClear when the date is optional so the user can reset it.',
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
guidance: true,
|
|
427
|
+
description:
|
|
428
|
+
'Show a loading state with changeAction when the date triggers a server-side save.',
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
guidance: false,
|
|
432
|
+
description:
|
|
433
|
+
'Use a DateInput for free-form text that does not represent a calendar date.',
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
guidance: false,
|
|
437
|
+
description:
|
|
438
|
+
'Hide the label without surrounding context that makes the field purpose obvious.',
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
guidance: false,
|
|
442
|
+
description:
|
|
443
|
+
'Rely on the calendar alone; the text input lets users type dates directly, which is faster for known dates.',
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
guidance: false,
|
|
447
|
+
description:
|
|
448
|
+
'Wrap a disabled DateInput in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
449
|
+
},
|
|
227
450
|
],
|
|
228
451
|
},
|
|
229
452
|
propDescriptions: {
|
|
@@ -233,6 +456,8 @@ export const docsDense = {
|
|
|
233
456
|
isOptional: 'show "(optional)" indicator',
|
|
234
457
|
isRequired: 'mark field required',
|
|
235
458
|
isDisabled: 'disable input+calendar',
|
|
459
|
+
disabledMessage:
|
|
460
|
+
'reason shown in a tooltip on hover/focus when disabled; keeps field focusable via aria-disabled',
|
|
236
461
|
value: 'selected date YYYY-MM-DD',
|
|
237
462
|
onChange: 'callback on date change',
|
|
238
463
|
changeAction: 'async action after onChange; drives optimistic UI',
|
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* SYNC: When DateInput.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 {DateInput} from './DateInput';
|
|
15
16
|
|
|
16
17
|
describe('DateInput', () => {
|
|
@@ -110,6 +111,43 @@ describe('DateInput', () => {
|
|
|
110
111
|
expect(onChange).not.toHaveBeenCalled();
|
|
111
112
|
});
|
|
112
113
|
|
|
114
|
+
it('sets aria-invalid="true" when typed input is unparseable', () => {
|
|
115
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
116
|
+
|
|
117
|
+
const input = screen.getByRole('combobox');
|
|
118
|
+
fireEvent.change(input, {target: {value: '13/45/2024'}});
|
|
119
|
+
|
|
120
|
+
expect(input).toHaveAttribute('aria-invalid', 'true');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('does not set aria-invalid when typed input is a valid date', () => {
|
|
124
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
125
|
+
|
|
126
|
+
const input = screen.getByRole('combobox');
|
|
127
|
+
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
128
|
+
|
|
129
|
+
expect(input).not.toHaveAttribute('aria-invalid');
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('announces an alert message when typed input is invalid', () => {
|
|
133
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
134
|
+
|
|
135
|
+
const input = screen.getByRole('combobox');
|
|
136
|
+
fireEvent.change(input, {target: {value: '13/45/2024'}});
|
|
137
|
+
|
|
138
|
+
expect(screen.getByRole('alert')).toHaveTextContent('Invalid date');
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it('does not announce an alert message when input is valid', () => {
|
|
142
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
143
|
+
|
|
144
|
+
const input = screen.getByRole('combobox');
|
|
145
|
+
fireEvent.change(input, {target: {value: '03/15/2026'}});
|
|
146
|
+
|
|
147
|
+
expect(screen.getByRole('alert')).toHaveTextContent('');
|
|
148
|
+
expect(screen.queryByText('Invalid date')).not.toBeInTheDocument();
|
|
149
|
+
});
|
|
150
|
+
|
|
113
151
|
it('reverts to previous value on blur when input is invalid', async () => {
|
|
114
152
|
const onChange = vi.fn();
|
|
115
153
|
render(<DateInput label="Date" value="2026-01-25" onChange={onChange} />);
|
|
@@ -280,6 +318,28 @@ describe('DateInput', () => {
|
|
|
280
318
|
);
|
|
281
319
|
});
|
|
282
320
|
|
|
321
|
+
it('opens the calendar popover on ArrowDown (keyboard, forms-13)', () => {
|
|
322
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
323
|
+
const input = screen.getByRole('combobox');
|
|
324
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
325
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
326
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
it('opens the calendar popover on Alt+ArrowDown (keyboard, forms-13)', () => {
|
|
330
|
+
render(<DateInput label="Date" onChange={() => {}} />);
|
|
331
|
+
const input = screen.getByRole('combobox');
|
|
332
|
+
fireEvent.keyDown(input, {key: 'ArrowDown', altKey: true});
|
|
333
|
+
expect(input).toHaveAttribute('aria-expanded', 'true');
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
it('does not open on ArrowDown when disabled', () => {
|
|
337
|
+
render(<DateInput label="Date" isDisabled onChange={() => {}} />);
|
|
338
|
+
const input = screen.getByRole('combobox');
|
|
339
|
+
fireEvent.keyDown(input, {key: 'ArrowDown'});
|
|
340
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
341
|
+
});
|
|
342
|
+
|
|
283
343
|
it('input has aria-haspopup="dialog"', () => {
|
|
284
344
|
render(<DateInput label="Date" onChange={() => {}} />);
|
|
285
345
|
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
@@ -585,4 +645,130 @@ describe('DateInput', () => {
|
|
|
585
645
|
expect(input).toHaveValue('March 20, 2026');
|
|
586
646
|
});
|
|
587
647
|
});
|
|
648
|
+
describe('disabledMessage', () => {
|
|
649
|
+
// jsdom does not implement the Popover API used by the tooltip, so mock
|
|
650
|
+
// showPopover/hidePopover to toggle a `popover-open` attribute the tests
|
|
651
|
+
// can assert on.
|
|
652
|
+
beforeEach(() => {
|
|
653
|
+
HTMLElement.prototype.showPopover = vi.fn(function (this: HTMLElement) {
|
|
654
|
+
this.setAttribute('popover-open', '');
|
|
655
|
+
});
|
|
656
|
+
HTMLElement.prototype.hidePopover = vi.fn(function (this: HTMLElement) {
|
|
657
|
+
this.removeAttribute('popover-open');
|
|
658
|
+
});
|
|
659
|
+
});
|
|
660
|
+
|
|
661
|
+
// jsdom popover content is in the DOM but not "visible" in the
|
|
662
|
+
// accessibility tree; use hidden: true to find it.
|
|
663
|
+
const h = {hidden: true} as const;
|
|
664
|
+
|
|
665
|
+
it('shows the reason tooltip on hover when disabled with a reason', async () => {
|
|
666
|
+
render(
|
|
667
|
+
<DateInput
|
|
668
|
+
label="Date"
|
|
669
|
+
isDisabled
|
|
670
|
+
disabledMessage="You need the Editor role"
|
|
671
|
+
/>,
|
|
672
|
+
);
|
|
673
|
+
|
|
674
|
+
const container = screen.getByRole('combobox')
|
|
675
|
+
.parentElement as HTMLElement;
|
|
676
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
677
|
+
expect(tooltip).toHaveTextContent('You need the Editor role');
|
|
678
|
+
|
|
679
|
+
fireEvent.mouseEnter(container);
|
|
680
|
+
await waitFor(() => {
|
|
681
|
+
expect(tooltip).toHaveAttribute('popover-open');
|
|
682
|
+
});
|
|
683
|
+
|
|
684
|
+
fireEvent.mouseLeave(container);
|
|
685
|
+
await waitFor(() => {
|
|
686
|
+
expect(tooltip).not.toHaveAttribute('popover-open');
|
|
687
|
+
});
|
|
688
|
+
});
|
|
689
|
+
|
|
690
|
+
it('shows the reason tooltip on keyboard focus', async () => {
|
|
691
|
+
const user = userEvent.setup();
|
|
692
|
+
render(
|
|
693
|
+
<DateInput
|
|
694
|
+
label="Date"
|
|
695
|
+
isDisabled
|
|
696
|
+
disabledMessage="You need the Editor role"
|
|
697
|
+
/>,
|
|
698
|
+
);
|
|
699
|
+
|
|
700
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
701
|
+
await user.tab();
|
|
702
|
+
expect(screen.getByRole('combobox')).toHaveFocus();
|
|
703
|
+
await waitFor(() => {
|
|
704
|
+
expect(tooltip).toHaveAttribute('popover-open');
|
|
705
|
+
});
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
it('does not render a tooltip when not disabled', () => {
|
|
709
|
+
render(
|
|
710
|
+
<DateInput label="Date" disabledMessage="You need the Editor role" />,
|
|
711
|
+
);
|
|
712
|
+
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
it('does not render a tooltip when disabled without a reason', () => {
|
|
716
|
+
render(<DateInput label="Date" isDisabled />);
|
|
717
|
+
expect(screen.queryByRole('tooltip', h)).not.toBeInTheDocument();
|
|
718
|
+
});
|
|
719
|
+
|
|
720
|
+
it('keeps the input focusable via aria-disabled when a reason is provided', () => {
|
|
721
|
+
render(
|
|
722
|
+
<DateInput
|
|
723
|
+
label="Date"
|
|
724
|
+
isDisabled
|
|
725
|
+
disabledMessage="You need the Editor role"
|
|
726
|
+
/>,
|
|
727
|
+
);
|
|
728
|
+
const input = screen.getByRole('combobox');
|
|
729
|
+
expect(input).not.toBeDisabled();
|
|
730
|
+
expect(input).toHaveAttribute('aria-disabled', 'true');
|
|
731
|
+
expect(input).toHaveAttribute('readonly');
|
|
732
|
+
});
|
|
733
|
+
|
|
734
|
+
it('links the reason tooltip from the input via aria-describedby', () => {
|
|
735
|
+
render(
|
|
736
|
+
<DateInput
|
|
737
|
+
label="Date"
|
|
738
|
+
isDisabled
|
|
739
|
+
disabledMessage="You need the Editor role"
|
|
740
|
+
/>,
|
|
741
|
+
);
|
|
742
|
+
const input = screen.getByRole('combobox');
|
|
743
|
+
const tooltip = screen.getByRole('tooltip', h);
|
|
744
|
+
expect(input.getAttribute('aria-describedby')).toContain(tooltip.id);
|
|
745
|
+
});
|
|
746
|
+
|
|
747
|
+
it('blocks value changes and opening while focusable-disabled', async () => {
|
|
748
|
+
const user = userEvent.setup();
|
|
749
|
+
const onChange = vi.fn();
|
|
750
|
+
render(
|
|
751
|
+
<DateInput
|
|
752
|
+
label="Date"
|
|
753
|
+
onChange={onChange}
|
|
754
|
+
isDisabled
|
|
755
|
+
disabledMessage="You need the Editor role"
|
|
756
|
+
/>,
|
|
757
|
+
);
|
|
758
|
+
|
|
759
|
+
const input = screen.getByRole('combobox');
|
|
760
|
+
await user.click(input);
|
|
761
|
+
await user.type(input, '2026-03-15');
|
|
762
|
+
expect(input).toHaveValue('');
|
|
763
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
764
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
765
|
+
});
|
|
766
|
+
|
|
767
|
+
it('remains natively disabled when disabled without a reason', () => {
|
|
768
|
+
render(<DateInput label="Date" isDisabled />);
|
|
769
|
+
const input = screen.getByRole('combobox');
|
|
770
|
+
expect(input).toBeDisabled();
|
|
771
|
+
expect(input).not.toHaveAttribute('aria-disabled');
|
|
772
|
+
});
|
|
773
|
+
});
|
|
588
774
|
});
|