@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
|
@@ -39,11 +39,10 @@ interface ContextMenuBaseProps extends BaseProps {
|
|
|
39
39
|
/** Size of menu items. @default 'md' */
|
|
40
40
|
size?: 'sm' | 'md' | 'lg';
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
* @default true
|
|
42
|
+
* Accessible name for the menu surface, announced when it opens.
|
|
43
|
+
* @default 'Context menu'
|
|
45
44
|
*/
|
|
46
|
-
|
|
45
|
+
label?: string;
|
|
47
46
|
/** When true, right-click shows the native browser context menu instead. */
|
|
48
47
|
isDisabled?: boolean;
|
|
49
48
|
/** Called when the menu opens or closes. */
|
|
@@ -84,7 +83,7 @@ export type ContextMenuProps = ContextMenuDataProps | ContextMenuCompoundProps;
|
|
|
84
83
|
* </ContextMenu>
|
|
85
84
|
* ```
|
|
86
85
|
*/
|
|
87
|
-
export declare function ContextMenu({ children, menuWidth, size,
|
|
86
|
+
export declare function ContextMenu({ children, menuWidth, size, label, isDisabled, onOpenChange, ref, className, style, xstyle, 'data-testid': testId, ...props }: ContextMenuProps): React.JSX.Element;
|
|
88
87
|
export declare namespace ContextMenu {
|
|
89
88
|
var displayName: string;
|
|
90
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../src/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../src/ContextMenu/ContextMenu.tsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAqBrC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAsCtC,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAErD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAErD,MAAM,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAMnD,UAAU,oBAAqB,SAAQ,SAAS;IAC9C,oDAAoD;IACpD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC,+DAA+D;IAC/D,QAAQ,EAAE,SAAS,CAAC;IACpB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,wCAAwC;IACxC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,oBAAqB,SAAQ,oBAAoB;IACzD,gDAAgD;IAChD,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,UAAU,wBAAyB,SAAQ,oBAAoB;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,+CAA+C;IAC/C,WAAW,EAAE,SAAS,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;AAM/E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAAS,EACT,IAAW,EACX,KAAsB,EACtB,UAAkB,EAClB,YAAY,EACZ,GAAG,EACH,SAAS,EACT,KAAK,EACL,MAAM,EACN,aAAa,EAAE,MAAM,EACrB,GAAG,KAAK,EACT,EAAE,gBAAgB,qBAiOlB;yBA9Oe,WAAW"}
|
|
@@ -30,6 +30,8 @@ import { useLayer } from "../Layer/useLayer.js";
|
|
|
30
30
|
import { renderDropdownItems } from "../DropdownMenu/renderDropdownItems.js";
|
|
31
31
|
import { DropdownMenuContext } from "../DropdownMenu/DropdownMenuContext.js";
|
|
32
32
|
import { useListFocus } from "../hooks/useListFocus.js";
|
|
33
|
+
import { useTypeahead } from "../hooks/useTypeahead.js";
|
|
34
|
+
import { useLongPress } from "../hooks/useLongPress.js";
|
|
33
35
|
import { layerAnimations } from "../Layer/layerAnimations.stylex.js";
|
|
34
36
|
import "../theme/tokens.stylex.js";
|
|
35
37
|
import { colorVars, spacingVars, radiusVars, durationVars, easeVars, shadowVars } from "../theme/tokens.stylex.js";
|
|
@@ -107,7 +109,7 @@ export function ContextMenu({
|
|
|
107
109
|
children,
|
|
108
110
|
menuWidth,
|
|
109
111
|
size = 'md',
|
|
110
|
-
|
|
112
|
+
label = 'Context menu',
|
|
111
113
|
isDisabled = false,
|
|
112
114
|
onOpenChange,
|
|
113
115
|
ref,
|
|
@@ -124,12 +126,21 @@ export function ContextMenu({
|
|
|
124
126
|
x: 0,
|
|
125
127
|
y: 0
|
|
126
128
|
});
|
|
129
|
+
// Element focused before the menu opened, restored when it closes so focus
|
|
130
|
+
// does not fall to <body> after Escape or outside-click dismissal.
|
|
131
|
+
const triggerFocusRef = useRef(null);
|
|
127
132
|
const [isOpen, setIsOpen] = useState(false);
|
|
128
133
|
const layer = useLayer({
|
|
129
134
|
mode: 'fixed',
|
|
130
135
|
onHide: useCallback(() => {
|
|
131
136
|
setIsOpen(false);
|
|
132
137
|
onOpenChange?.(false);
|
|
138
|
+
// Restore focus to the element that was focused before opening.
|
|
139
|
+
const toRestore = triggerFocusRef.current;
|
|
140
|
+
triggerFocusRef.current = null;
|
|
141
|
+
if (toRestore && document.contains(toRestore)) {
|
|
142
|
+
toRestore.focus();
|
|
143
|
+
}
|
|
133
144
|
}, [onOpenChange]),
|
|
134
145
|
onShow: useCallback(() => {
|
|
135
146
|
setIsOpen(true);
|
|
@@ -143,13 +154,22 @@ export function ContextMenu({
|
|
|
143
154
|
const {
|
|
144
155
|
listRef,
|
|
145
156
|
handleKeyDown: listNavKeyDown,
|
|
146
|
-
focusFirst
|
|
157
|
+
focusFirst,
|
|
158
|
+
focusItem
|
|
147
159
|
} = useListFocus({
|
|
148
160
|
itemSelector: '[role="menuitem"]:not([aria-disabled="true"])',
|
|
149
161
|
wrap: false,
|
|
150
162
|
onEscape: closeMenu
|
|
151
163
|
});
|
|
152
164
|
|
|
165
|
+
// First-character typeahead over the enabled menu items (menus-11).
|
|
166
|
+
const getMenuItems = useCallback(() => listRef.current ? Array.from(listRef.current.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')) : [], [listRef]);
|
|
167
|
+
const typeahead = useTypeahead({
|
|
168
|
+
getItemLabels: () => getMenuItems().map(el => el.textContent),
|
|
169
|
+
onMatch: focusItem,
|
|
170
|
+
getCurrentIndex: () => getMenuItems().findIndex(el => el === document.activeElement || el.contains(document.activeElement))
|
|
171
|
+
});
|
|
172
|
+
|
|
153
173
|
// Dismiss on any click outside the menu. We use popover="manual" (not
|
|
154
174
|
// "auto") because the native light-dismiss treats the mouseup from the
|
|
155
175
|
// opening right-click as a dismiss event. Handling it ourselves via
|
|
@@ -169,6 +189,30 @@ export function ContextMenu({
|
|
|
169
189
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
170
190
|
};
|
|
171
191
|
}, [isOpen, closeMenu, listRef]);
|
|
192
|
+
|
|
193
|
+
// Dismiss on Escape from anywhere while open. The menu div's own onKeyDown
|
|
194
|
+
// only fires when focus is inside the menu; a document-level listener is
|
|
195
|
+
// kept as a reliable fallback Escape path (e.g. if focus has moved out of
|
|
196
|
+
// the menu). Guards against IME composition-cancel.
|
|
197
|
+
useEffect(() => {
|
|
198
|
+
if (!isOpen) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const handleEscape = e => {
|
|
202
|
+
if (e.key !== 'Escape') {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (e.isComposing || e.keyCode === 229) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
e.preventDefault();
|
|
209
|
+
closeMenu();
|
|
210
|
+
};
|
|
211
|
+
document.addEventListener('keydown', handleEscape);
|
|
212
|
+
return () => {
|
|
213
|
+
document.removeEventListener('keydown', handleEscape);
|
|
214
|
+
};
|
|
215
|
+
}, [isOpen, closeMenu]);
|
|
172
216
|
const listKeyDown = useCallback(e => {
|
|
173
217
|
if (e.key === 'Enter' || e.key === ' ') {
|
|
174
218
|
e.preventDefault();
|
|
@@ -178,22 +222,56 @@ export function ContextMenu({
|
|
|
178
222
|
}
|
|
179
223
|
return;
|
|
180
224
|
}
|
|
225
|
+
if (typeahead.onKeyDown(e)) {
|
|
226
|
+
e.preventDefault();
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
181
229
|
listNavKeyDown(e);
|
|
182
|
-
}, [listNavKeyDown]);
|
|
230
|
+
}, [listNavKeyDown, typeahead]);
|
|
183
231
|
const handleContextMenu = useCallback(e => {
|
|
184
232
|
if (isDisabled) {
|
|
185
233
|
return;
|
|
186
234
|
}
|
|
187
235
|
e.preventDefault();
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
236
|
+
// A keyboard-initiated contextmenu (Shift+F10 / the Menu key) fires a
|
|
237
|
+
// `contextmenu` event whose coordinates are (0, 0) in several browsers.
|
|
238
|
+
// Detect that and anchor the menu to the trigger's box instead, so the
|
|
239
|
+
// menu is reachable without a pointer (menus-8).
|
|
240
|
+
const isKeyboardInvoked = e.clientX === 0 && e.clientY === 0 && e.detail === 0;
|
|
241
|
+
if (isKeyboardInvoked && e.currentTarget instanceof HTMLElement) {
|
|
242
|
+
const rect = e.currentTarget.getBoundingClientRect();
|
|
243
|
+
positionRef.current = {
|
|
244
|
+
x: rect.left,
|
|
245
|
+
y: rect.bottom
|
|
246
|
+
};
|
|
247
|
+
} else {
|
|
248
|
+
positionRef.current = {
|
|
249
|
+
x: e.clientX,
|
|
250
|
+
y: e.clientY
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
// Remember the element focused before opening so we can restore it on
|
|
254
|
+
// close (Escape or outside-click), instead of dropping focus to <body>.
|
|
255
|
+
triggerFocusRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : e.currentTarget;
|
|
192
256
|
layer.show();
|
|
193
|
-
|
|
257
|
+
requestAnimationFrame(() => focusFirst());
|
|
258
|
+
}, [isDisabled, layer, focusFirst]);
|
|
259
|
+
|
|
260
|
+
// Touch long-press invocation (menus-8). iOS Safari never synthesizes a
|
|
261
|
+
// `contextmenu` event on long-press, so a context menu is otherwise
|
|
262
|
+
// unreachable on touch. Open the menu at the touch point once the press is
|
|
263
|
+
// held long enough (see useLongPress for timer/move-cancel/cleanup logic).
|
|
264
|
+
const longPressHandlers = useLongPress({
|
|
265
|
+
disabled: isDisabled,
|
|
266
|
+
onLongPress: useCallback(point => {
|
|
267
|
+
positionRef.current = {
|
|
268
|
+
x: point.x,
|
|
269
|
+
y: point.y
|
|
270
|
+
};
|
|
271
|
+
layer.show();
|
|
194
272
|
requestAnimationFrame(() => focusFirst());
|
|
195
|
-
}
|
|
196
|
-
}
|
|
273
|
+
}, [layer, focusFirst])
|
|
274
|
+
});
|
|
197
275
|
const popoverXstyle = menuWidth ? styles.popoverCustomWidth(menuWidth) : styles.popover;
|
|
198
276
|
const contextValue = useMemo(() => ({
|
|
199
277
|
closeMenu,
|
|
@@ -204,13 +282,17 @@ export function ContextMenu({
|
|
|
204
282
|
children: [/*#__PURE__*/_jsx("div", {
|
|
205
283
|
ref: ref,
|
|
206
284
|
onContextMenu: handleContextMenu,
|
|
207
|
-
|
|
285
|
+
...longPressHandlers,
|
|
208
286
|
"data-testid": testId,
|
|
287
|
+
...{
|
|
288
|
+
className: "xpdipgo"
|
|
289
|
+
},
|
|
209
290
|
children: children
|
|
210
291
|
}), layer.render(/*#__PURE__*/_jsx("div", {
|
|
211
292
|
ref: listRef,
|
|
212
293
|
id: menuId,
|
|
213
294
|
role: "menu",
|
|
295
|
+
"aria-label": label,
|
|
214
296
|
onKeyDown: listKeyDown,
|
|
215
297
|
...mergeProps(themeProps('context-menu'), stylex.props(styles.menu, xstyle), className, style),
|
|
216
298
|
children: /*#__PURE__*/_jsx(DropdownMenuContext, {
|
|
@@ -50,6 +50,28 @@ export interface DateInputProps extends Omit<BaseProps, 'onChange' | 'defaultVal
|
|
|
50
50
|
* @default false
|
|
51
51
|
*/
|
|
52
52
|
isDisabled?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Explains why the input is disabled. When set together with
|
|
55
|
+
* `isDisabled`, the input shows a tooltip with this text on hover and
|
|
56
|
+
* keyboard focus, and the field stays focusable (via `aria-disabled`)
|
|
57
|
+
* so the reason is discoverable by keyboard and assistive technology.
|
|
58
|
+
* Typing and calendar activation stay blocked.
|
|
59
|
+
*
|
|
60
|
+
* Use this instead of wrapping a disabled input in `Tooltip` — disabled
|
|
61
|
+
* controls don't emit the pointer events an external tooltip needs.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```
|
|
65
|
+
* <DateInput
|
|
66
|
+
* label="Event date"
|
|
67
|
+
* value={date}
|
|
68
|
+
* onChange={setDate}
|
|
69
|
+
* isDisabled
|
|
70
|
+
* disabledMessage="You need the Editor role to change this"
|
|
71
|
+
* />
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
disabledMessage?: string;
|
|
53
75
|
/**
|
|
54
76
|
* The selected date in ISO format (YYYY-MM-DD).
|
|
55
77
|
*/
|
|
@@ -132,7 +154,7 @@ export interface DateInputProps extends Omit<BaseProps, 'onChange' | 'defaultVal
|
|
|
132
154
|
* />
|
|
133
155
|
* ```
|
|
134
156
|
*/
|
|
135
|
-
export declare function DateInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder, size, status, labelTooltip, hasClear, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateInputProps): import("react").JSX.Element;
|
|
157
|
+
export declare function DateInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder, size, status, labelTooltip, hasClear, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateInputProps): import("react").JSX.Element;
|
|
136
158
|
export declare namespace DateInput {
|
|
137
159
|
var displayName: string;
|
|
138
160
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../src/DateInput/DateInput.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAU3C,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../src/DateInput/DateInput.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAU3C,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAW,KAAK,aAAa,EAAsB,MAAM,aAAa,CAAC;AA6D9E,QAAA,MAAM,UAAU;;;;;;;;;;;;;EAad,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,UAAU,CAAC;AAIpD,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,mBAAmB,GACvC,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,EACT,UAAU,GAAG,cAAc,CAC5B;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;IAEtD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1E;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,aAAa,CAAC;IAEpB;;OAEG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAA6B,EAC7B,IAAW,EACX,MAAM,EACN,YAAY,EACZ,QAAgB,EAChB,cAAkB,EAClB,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAuWhB;yBAlYe,SAAS"}
|
|
@@ -21,10 +21,12 @@ import "../theme/tokens.stylex.js";
|
|
|
21
21
|
import { colorVars, sizeVars, radiusVars, typographyVars, typeScaleVars, borderVars } from "../theme/tokens.stylex.js";
|
|
22
22
|
import { Field, inputWrapperStyles, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputStatusFocusWithinStyles } from "../Field/index.js";
|
|
23
23
|
import { Icon } from "../Icon/index.js";
|
|
24
|
+
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
24
25
|
import { Spinner } from "../Spinner/index.js";
|
|
25
26
|
import { Calendar } from "../Calendar/index.js";
|
|
26
27
|
import { useCalendarConstraints } from "../Calendar/hooks/index.js";
|
|
27
28
|
import { usePopover } from "../Popover/index.js";
|
|
29
|
+
import { useTooltip } from "../Tooltip/index.js";
|
|
28
30
|
import { parseDateInput } from "../utils/index.js";
|
|
29
31
|
import { plainDateFromISO, plainDateToISO, plainDateFormat, DATE_FORMAT_LONG } from "../utils/plainDate.js";
|
|
30
32
|
const sizeStyles = {
|
|
@@ -69,6 +71,7 @@ export function DateInput({
|
|
|
69
71
|
isOptional = false,
|
|
70
72
|
isRequired = false,
|
|
71
73
|
isDisabled = false,
|
|
74
|
+
disabledMessage,
|
|
72
75
|
value,
|
|
73
76
|
onChange,
|
|
74
77
|
changeAction,
|
|
@@ -100,6 +103,22 @@ export function DateInput({
|
|
|
100
103
|
const isBusy = isLoading || optimisticValue !== value;
|
|
101
104
|
const isEffectivelyDisabled = isDisabled || isBusy;
|
|
102
105
|
|
|
106
|
+
// Disabled-reason tooltip. Disabled controls swallow pointer events, so the
|
|
107
|
+
// tooltip listeners attach to the input container (which already exists) and
|
|
108
|
+
// the text input stays perceivable via aria-disabled instead of the disabled
|
|
109
|
+
// attribute. Typing is blocked with readOnly and value mutation guards;
|
|
110
|
+
// calendar activation is blocked by the isEffectivelyDisabled guards. Only
|
|
111
|
+
// the persistent isDisabled state (not the transient busy state) surfaces a
|
|
112
|
+
// reason.
|
|
113
|
+
const showsDisabledMessage = isDisabled && !!disabledMessage;
|
|
114
|
+
const disabledMessageTooltip = useTooltip({
|
|
115
|
+
placement: 'above',
|
|
116
|
+
// The container div is not naturally focusable; focusin bubbles up from
|
|
117
|
+
// the input, so always attach focus listeners.
|
|
118
|
+
focusTrigger: 'always',
|
|
119
|
+
isEnabled: showsDisabledMessage
|
|
120
|
+
});
|
|
121
|
+
|
|
103
122
|
// Status icon mapping
|
|
104
123
|
const statusIconMap = {
|
|
105
124
|
warning: 'warning',
|
|
@@ -120,7 +139,7 @@ export function DateInput({
|
|
|
120
139
|
max,
|
|
121
140
|
dateConstraints
|
|
122
141
|
});
|
|
123
|
-
const ariaDescribedBy = [description ? descriptionID : null, status?.message ? statusMessageID : null].filter(Boolean).join(' ') || undefined;
|
|
142
|
+
const ariaDescribedBy = [description ? descriptionID : null, status?.message ? statusMessageID : null, showsDisabledMessage ? disabledMessageTooltip.describedBy : null].filter(Boolean).join(' ') || undefined;
|
|
124
143
|
|
|
125
144
|
// Pending input while user is typing (null = show formatted value)
|
|
126
145
|
const [pendingInput, setPendingInput] = useState(null);
|
|
@@ -198,6 +217,11 @@ export function DateInput({
|
|
|
198
217
|
|
|
199
218
|
// Handle input text change - update immediately if valid and allowed
|
|
200
219
|
const handleInputChange = useCallback(e => {
|
|
220
|
+
// With a disabledMessage the input drops `disabled` for focusability, so
|
|
221
|
+
// guard value mutation explicitly (readOnly also blocks typing).
|
|
222
|
+
if (isEffectivelyDisabled) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
201
225
|
const newValue = e.target.value;
|
|
202
226
|
setPendingInput(newValue);
|
|
203
227
|
|
|
@@ -210,7 +234,7 @@ export function DateInput({
|
|
|
210
234
|
// Navigate calendar to show the parsed date's month
|
|
211
235
|
calendarRef.current?.navigateTo(parsedISO);
|
|
212
236
|
}
|
|
213
|
-
}, [value, fireChange, isDateDisabled]);
|
|
237
|
+
}, [value, fireChange, isDateDisabled, isEffectivelyDisabled]);
|
|
214
238
|
|
|
215
239
|
// Commit pending input (shared by blur and Enter key)
|
|
216
240
|
const commitPendingInput = useCallback(() => {
|
|
@@ -244,11 +268,20 @@ export function DateInput({
|
|
|
244
268
|
if (e.key === 'Escape' && popover.isOpen) {
|
|
245
269
|
e.preventDefault();
|
|
246
270
|
popover.hide();
|
|
271
|
+
} else if ((e.key === 'ArrowDown' || e.altKey && e.key === 'ArrowDown') && !popover.isOpen) {
|
|
272
|
+
// APG combobox: ArrowDown (and Alt+ArrowDown) opens the calendar
|
|
273
|
+
// popover from the keyboard, keeping focus in the input (forms-13).
|
|
274
|
+
e.preventDefault();
|
|
275
|
+
if (!isEffectivelyDisabled) {
|
|
276
|
+
popover.show({
|
|
277
|
+
skipAutoFocus: true
|
|
278
|
+
});
|
|
279
|
+
}
|
|
247
280
|
} else if (e.key === 'Enter') {
|
|
248
281
|
e.preventDefault();
|
|
249
282
|
commitPendingInput();
|
|
250
283
|
}
|
|
251
|
-
}, [popover, commitPendingInput]);
|
|
284
|
+
}, [popover, commitPendingInput, isEffectivelyDisabled]);
|
|
252
285
|
return /*#__PURE__*/_jsxs(Field, {
|
|
253
286
|
label: label,
|
|
254
287
|
isLabelHidden: isLabelHidden,
|
|
@@ -266,7 +299,13 @@ export function DateInput({
|
|
|
266
299
|
labelTooltip: labelTooltip,
|
|
267
300
|
width: width,
|
|
268
301
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
269
|
-
ref:
|
|
302
|
+
ref: el => {
|
|
303
|
+
popover.triggerRef(el);
|
|
304
|
+
// Anchor + hover/focus listeners for the disabled-message tooltip.
|
|
305
|
+
// Handlers are gated internally by isEnabled, and anchor names
|
|
306
|
+
// compose, so attaching unconditionally is safe.
|
|
307
|
+
disabledMessageTooltip.ref(el);
|
|
308
|
+
},
|
|
270
309
|
...rest,
|
|
271
310
|
...mergeProps(themeProps('date-input', {
|
|
272
311
|
size,
|
|
@@ -300,11 +339,18 @@ export function DateInput({
|
|
|
300
339
|
onBlur: handleBlur,
|
|
301
340
|
onClick: handleInputClick,
|
|
302
341
|
onKeyDown: handleInputKeyDown,
|
|
303
|
-
placeholder: placeholder
|
|
304
|
-
|
|
342
|
+
placeholder: placeholder
|
|
343
|
+
// With a disabledMessage the input keeps focusability via
|
|
344
|
+
// aria-disabled so the reason is focus-discoverable; typing is
|
|
345
|
+
// blocked with readOnly and the mutation guards, and calendar
|
|
346
|
+
// activation is blocked by the isEffectivelyDisabled guards.
|
|
347
|
+
,
|
|
348
|
+
disabled: isEffectivelyDisabled && !showsDisabledMessage,
|
|
349
|
+
"aria-disabled": showsDisabledMessage ? 'true' : undefined,
|
|
350
|
+
readOnly: showsDisabledMessage || undefined,
|
|
305
351
|
"aria-describedby": ariaDescribedBy,
|
|
306
352
|
"aria-required": isRequired === true ? 'true' : undefined,
|
|
307
|
-
"aria-invalid": status?.type === 'error' ? 'true' : undefined,
|
|
353
|
+
"aria-invalid": status?.type === 'error' || !isInputValid ? 'true' : undefined,
|
|
308
354
|
"aria-busy": isBusy || undefined,
|
|
309
355
|
"aria-expanded": popover.isOpen,
|
|
310
356
|
"aria-haspopup": "dialog",
|
|
@@ -325,6 +371,11 @@ export function DateInput({
|
|
|
325
371
|
className: "x1lliihq x98rzlu xeuugli xc342km xng3xce x1717udv x9ynric xjm74w1 x6pjikd xw6l6zx xjbqb8w x1a2a7pz xeyghm5 x1h6gzvc xv1l7n4"
|
|
326
372
|
}
|
|
327
373
|
}[!!isEffectivelyDisabled << 1 | !!!isInputValid << 0]
|
|
374
|
+
}), /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
375
|
+
as: "div",
|
|
376
|
+
role: "alert",
|
|
377
|
+
"aria-live": "assertive",
|
|
378
|
+
children: !isInputValid ? 'Invalid date' : ''
|
|
328
379
|
}), hasClear && value !== undefined && !isEffectivelyDisabled && /*#__PURE__*/_jsx("button", {
|
|
329
380
|
type: "button",
|
|
330
381
|
onClick: handleClear,
|
|
@@ -356,7 +407,7 @@ export function DateInput({
|
|
|
356
407
|
}), {
|
|
357
408
|
placement: 'below',
|
|
358
409
|
alignment: 'start'
|
|
359
|
-
})]
|
|
410
|
+
}), showsDisabledMessage && disabledMessageTooltip.renderTooltip(disabledMessage)]
|
|
360
411
|
});
|
|
361
412
|
}
|
|
362
413
|
DateInput.displayName = 'DateInput';
|
|
@@ -40,6 +40,28 @@ export interface DateRangeInputProps extends Omit<BaseProps, 'onChange' | 'defau
|
|
|
40
40
|
* @default false
|
|
41
41
|
*/
|
|
42
42
|
isDisabled?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Explains why the input is disabled. When set together with
|
|
45
|
+
* `isDisabled`, the input shows a tooltip with this text on hover and
|
|
46
|
+
* keyboard focus, and the trigger stays focusable (via `aria-disabled`)
|
|
47
|
+
* so the reason is discoverable by keyboard and assistive technology.
|
|
48
|
+
* Activation stays blocked.
|
|
49
|
+
*
|
|
50
|
+
* Use this instead of wrapping a disabled input in `Tooltip` — disabled
|
|
51
|
+
* controls don't emit the pointer events an external tooltip needs.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```
|
|
55
|
+
* <DateRangeInput
|
|
56
|
+
* label="Reporting period"
|
|
57
|
+
* value={range}
|
|
58
|
+
* onChange={setRange}
|
|
59
|
+
* isDisabled
|
|
60
|
+
* disabledMessage="You need the Editor role to change this"
|
|
61
|
+
* />
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
disabledMessage?: string;
|
|
43
65
|
/**
|
|
44
66
|
* The selected date range, or null if no range is selected.
|
|
45
67
|
*/
|
|
@@ -126,7 +148,7 @@ export interface DateRangeInputProps extends Omit<BaseProps, 'onChange' | 'defau
|
|
|
126
148
|
* />
|
|
127
149
|
* ```
|
|
128
150
|
*/
|
|
129
|
-
export declare function DateRangeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, value, onChange, changeAction, isLoading, min, max, dateConstraints, presets, hasClear, placeholder, size: sizeProp, status, labelTooltip, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateRangeInputProps): import("react").JSX.Element;
|
|
151
|
+
export declare function DateRangeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, presets, hasClear, placeholder, size: sizeProp, status, labelTooltip, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateRangeInputProps): import("react").JSX.Element;
|
|
130
152
|
export declare namespace DateRangeInput {
|
|
131
153
|
var displayName: string;
|
|
132
154
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../src/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAW,KAAK,aAAa,EAAE,KAAK,SAAS,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DateRangeInput.d.ts","sourceRoot":"","sources":["../../src/DateRangeInput/DateRangeInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ import { Icon } from "../Icon/index.js";
|
|
|
25
25
|
import { Spinner } from "../Spinner/index.js";
|
|
26
26
|
import { Calendar } from "../Calendar/index.js";
|
|
27
27
|
import { usePopover } from "../Popover/index.js";
|
|
28
|
+
import { useTooltip } from "../Tooltip/index.js";
|
|
28
29
|
import { mergeProps } from "../utils/index.js";
|
|
29
30
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
30
31
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -89,6 +90,7 @@ export function DateRangeInput({
|
|
|
89
90
|
isOptional = false,
|
|
90
91
|
isRequired = false,
|
|
91
92
|
isDisabled = false,
|
|
93
|
+
disabledMessage,
|
|
92
94
|
value,
|
|
93
95
|
onChange,
|
|
94
96
|
changeAction,
|
|
@@ -118,6 +120,21 @@ export function DateRangeInput({
|
|
|
118
120
|
const [optimisticValue, setOptimisticValue] = useOptimistic(value);
|
|
119
121
|
const isBusy = isLoading || optimisticValue !== value;
|
|
120
122
|
const isEffectivelyDisabled = isDisabled || isBusy;
|
|
123
|
+
|
|
124
|
+
// Disabled-reason tooltip. Disabled controls swallow pointer events, so the
|
|
125
|
+
// tooltip listeners attach to the trigger container (which already exists)
|
|
126
|
+
// and the trigger button stays perceivable via aria-disabled instead of the
|
|
127
|
+
// disabled attribute. Activation is blocked by the isEffectivelyDisabled
|
|
128
|
+
// guard in handleToggle. Only the persistent isDisabled state (not the
|
|
129
|
+
// transient busy state) surfaces a reason.
|
|
130
|
+
const showsDisabledMessage = isDisabled && !!disabledMessage;
|
|
131
|
+
const disabledMessageTooltip = useTooltip({
|
|
132
|
+
placement: 'above',
|
|
133
|
+
// The container div is not naturally focusable; focusin bubbles up from
|
|
134
|
+
// the trigger button, so always attach focus listeners.
|
|
135
|
+
focusTrigger: 'always',
|
|
136
|
+
isEnabled: showsDisabledMessage
|
|
137
|
+
});
|
|
121
138
|
const statusIconMap = {
|
|
122
139
|
warning: 'warning',
|
|
123
140
|
error: 'error',
|
|
@@ -128,7 +145,7 @@ export function DateRangeInput({
|
|
|
128
145
|
error: 'error',
|
|
129
146
|
success: 'success'
|
|
130
147
|
};
|
|
131
|
-
const ariaDescribedBy = [description ? descriptionID : null, status?.message ? statusMessageID : null].filter(Boolean).join(' ') || undefined;
|
|
148
|
+
const ariaDescribedBy = [description ? descriptionID : null, status?.message ? statusMessageID : null, showsDisabledMessage ? disabledMessageTooltip.describedBy : null].filter(Boolean).join(' ') || undefined;
|
|
132
149
|
const displayValue = useMemo(() => formatRangeDisplay(optimisticValue), [optimisticValue]);
|
|
133
150
|
const popover = usePopover({
|
|
134
151
|
dialogLabel: 'Choose date range',
|
|
@@ -185,7 +202,13 @@ export function DateRangeInput({
|
|
|
185
202
|
labelTooltip: labelTooltip,
|
|
186
203
|
width: width,
|
|
187
204
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
188
|
-
ref:
|
|
205
|
+
ref: el => {
|
|
206
|
+
popover.triggerRef(el);
|
|
207
|
+
// Anchor + hover/focus listeners for the disabled-message tooltip.
|
|
208
|
+
// Handlers are gated internally by isEnabled, and anchor names
|
|
209
|
+
// compose, so attaching unconditionally is safe.
|
|
210
|
+
disabledMessageTooltip.ref(el);
|
|
211
|
+
},
|
|
189
212
|
...rest,
|
|
190
213
|
...mergeProps(themeProps('date-range-input', {
|
|
191
214
|
size,
|
|
@@ -214,8 +237,13 @@ export function DateRangeInput({
|
|
|
214
237
|
ref: ref,
|
|
215
238
|
id: id,
|
|
216
239
|
type: "button",
|
|
217
|
-
onClick: handleToggle
|
|
218
|
-
|
|
240
|
+
onClick: handleToggle
|
|
241
|
+
// With a disabledMessage the trigger keeps focusability via
|
|
242
|
+
// aria-disabled so the reason is focus-discoverable; activation is
|
|
243
|
+
// still blocked by the isEffectivelyDisabled guard in handleToggle.
|
|
244
|
+
,
|
|
245
|
+
disabled: isEffectivelyDisabled && !showsDisabledMessage,
|
|
246
|
+
"aria-disabled": showsDisabledMessage ? 'true' : undefined,
|
|
219
247
|
"aria-label": triggerAriaLabel,
|
|
220
248
|
"aria-describedby": ariaDescribedBy,
|
|
221
249
|
"aria-required": isRequired === true ? 'true' : undefined,
|
|
@@ -263,7 +291,7 @@ export function DateRangeInput({
|
|
|
263
291
|
className: "x78zum5"
|
|
264
292
|
},
|
|
265
293
|
children: [presets && presets.length > 0 && /*#__PURE__*/_jsx("div", {
|
|
266
|
-
role: "
|
|
294
|
+
role: "group",
|
|
267
295
|
"aria-label": "Preset date ranges",
|
|
268
296
|
...{
|
|
269
297
|
className: "x78zum5 xdt5ytf xzye2dw x1b2ylru x1pcaw5z x32b0ac xdz7fjg x1d77m7x"
|
|
@@ -272,9 +300,14 @@ export function DateRangeInput({
|
|
|
272
300
|
const presetRange = preset.getRange();
|
|
273
301
|
const isActive = isRangeEqual(value, presetRange);
|
|
274
302
|
return /*#__PURE__*/_jsx("button", {
|
|
275
|
-
type: "button"
|
|
276
|
-
|
|
277
|
-
|
|
303
|
+
type: "button"
|
|
304
|
+
// These presets are independent action buttons navigated by
|
|
305
|
+
// Tab, not a single-tab-stop listbox — so they are a labeled
|
|
306
|
+
// group of buttons, and the currently-applied preset is
|
|
307
|
+
// marked with aria-current (not aria-selected, a listbox
|
|
308
|
+
// concept that contradicted the Tab interaction) (forms-5).
|
|
309
|
+
,
|
|
310
|
+
"aria-current": isActive ? 'true' : undefined,
|
|
278
311
|
onClick: () => handlePresetClick(preset),
|
|
279
312
|
...{
|
|
280
313
|
0: {
|
|
@@ -299,7 +332,7 @@ export function DateRangeInput({
|
|
|
299
332
|
}), {
|
|
300
333
|
placement: 'below',
|
|
301
334
|
alignment: 'start'
|
|
302
|
-
})]
|
|
335
|
+
}), showsDisabledMessage && disabledMessageTooltip.renderTooltip(disabledMessage)]
|
|
303
336
|
});
|
|
304
337
|
}
|
|
305
338
|
DateRangeInput.displayName = 'DateRangeInput';
|
|
@@ -39,6 +39,28 @@ export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaul
|
|
|
39
39
|
* @default false
|
|
40
40
|
*/
|
|
41
41
|
isDisabled?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Explains why the input is disabled. When set together with
|
|
44
|
+
* `isDisabled`, the input shows a tooltip with this text on hover and
|
|
45
|
+
* keyboard focus, and the date and time fields stay focusable (via
|
|
46
|
+
* `aria-disabled`) so the reason is discoverable by keyboard and assistive
|
|
47
|
+
* technology. Typing and calendar activation stay blocked.
|
|
48
|
+
*
|
|
49
|
+
* Use this instead of wrapping a disabled input in `Tooltip` — disabled
|
|
50
|
+
* controls don't emit the pointer events an external tooltip needs.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```
|
|
54
|
+
* <DateTimeInput
|
|
55
|
+
* label="Meeting time"
|
|
56
|
+
* value={dateTime}
|
|
57
|
+
* onChange={setDateTime}
|
|
58
|
+
* isDisabled
|
|
59
|
+
* disabledMessage="You need the Editor role to change this"
|
|
60
|
+
* />
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
disabledMessage?: string;
|
|
42
64
|
/**
|
|
43
65
|
* The selected datetime in ISO 8601 format ("YYYY-MM-DDTHH:MM" or "YYYY-MM-DDTHH:MM:SS").
|
|
44
66
|
*/
|
|
@@ -93,10 +115,21 @@ export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaul
|
|
|
93
115
|
*/
|
|
94
116
|
hasClear?: boolean;
|
|
95
117
|
/**
|
|
96
|
-
* Placeholder text shown when no date is selected.
|
|
118
|
+
* Placeholder text shown in the date portion when no date is selected.
|
|
97
119
|
* @default "Select a date"
|
|
98
120
|
*/
|
|
99
121
|
placeholder?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Placeholder text shown in the time portion when no time is selected.
|
|
124
|
+
* @default "Select a time"
|
|
125
|
+
*/
|
|
126
|
+
timePlaceholder?: string;
|
|
127
|
+
/**
|
|
128
|
+
* Accessible label for the time portion of the field. Defaults to
|
|
129
|
+
* `"{label} time"` so it is tied to the field's own label and localizable,
|
|
130
|
+
* rather than a hardcoded English "Time".
|
|
131
|
+
*/
|
|
132
|
+
timeLabel?: string;
|
|
100
133
|
/**
|
|
101
134
|
* The size of the inputs.
|
|
102
135
|
* @default 'md'
|
|
@@ -140,7 +173,7 @@ export interface DateTimeInputProps extends Omit<BaseProps, 'onChange' | 'defaul
|
|
|
140
173
|
* />
|
|
141
174
|
* ```
|
|
142
175
|
*/
|
|
143
|
-
export declare function DateTimeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement, hasClear, placeholder, size: sizeProp, status, labelTooltip, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateTimeInputProps): import("react").JSX.Element;
|
|
176
|
+
export declare function DateTimeInput({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement, hasClear, placeholder, timePlaceholder, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths, width, xstyle, className, style, ref, ...rest }: DateTimeInputProps): import("react").JSX.Element;
|
|
144
177
|
export declare namespace DateTimeInput {
|
|
145
178
|
var displayName: string;
|
|
146
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AAuCA,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"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"}
|