@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
|
@@ -22,9 +22,16 @@ describe('Markdown', () => {
|
|
|
22
22
|
expect(screen.getByText('Heading 2').tagName).toBe('H2');
|
|
23
23
|
});
|
|
24
24
|
|
|
25
|
-
it('renders paragraphs', () => {
|
|
25
|
+
it('renders paragraphs as block <div> (never <p>) for composition safety', () => {
|
|
26
26
|
render(<Markdown>{'Hello world'}</Markdown>);
|
|
27
|
-
|
|
27
|
+
// Markdown paragraphs render as <div> so block-level inline content
|
|
28
|
+
// (images, custom inline components) never trips the phrasing-content
|
|
29
|
+
// trap that a <p> would impose. role="paragraph" re-exposes the paragraph
|
|
30
|
+
// role to assistive tech without the <p> hazard. Consumers who want a real
|
|
31
|
+
// <p> element can pass `components={{paragraph: 'p'}}`.
|
|
32
|
+
const para = screen.getByText('Hello world');
|
|
33
|
+
expect(para.tagName).toBe('DIV');
|
|
34
|
+
expect(para).toHaveAttribute('role', 'paragraph');
|
|
28
35
|
});
|
|
29
36
|
|
|
30
37
|
it('renders inline display without block wrappers', () => {
|
|
@@ -182,6 +189,17 @@ describe('Markdown', () => {
|
|
|
182
189
|
expect(document.querySelectorAll('td')).toHaveLength(2);
|
|
183
190
|
});
|
|
184
191
|
|
|
192
|
+
it('makes the table scroll wrapper keyboard-focusable', () => {
|
|
193
|
+
render(<Markdown>{'| A | B |\n| --- | --- |\n| 1 | 2 |'}</Markdown>);
|
|
194
|
+
const table = document.querySelector('table');
|
|
195
|
+
expect(table).toBeInTheDocument();
|
|
196
|
+
// The GFM table's outer overflow wrapper is keyboard-focusable so keyboard
|
|
197
|
+
// users can horizontally scroll a wide table.
|
|
198
|
+
const wrapper = table!.closest('[role="region"][tabindex="0"]');
|
|
199
|
+
expect(wrapper).toBeTruthy();
|
|
200
|
+
expect(wrapper).toHaveAttribute('aria-label', 'Table');
|
|
201
|
+
});
|
|
202
|
+
|
|
185
203
|
it('renders horizontal rules', () => {
|
|
186
204
|
render(<Markdown>{'---'}</Markdown>);
|
|
187
205
|
expect(document.querySelector('hr')).toBeInTheDocument();
|
|
@@ -201,9 +219,7 @@ describe('Markdown', () => {
|
|
|
201
219
|
});
|
|
202
220
|
|
|
203
221
|
it('shows streaming cursor when isStreaming is true', () => {
|
|
204
|
-
const {container} = render(
|
|
205
|
-
<Markdown isStreaming>{'Hello'}</Markdown>,
|
|
206
|
-
);
|
|
222
|
+
const {container} = render(<Markdown isStreaming>{'Hello'}</Markdown>);
|
|
207
223
|
// Streaming mode parses incrementally but no cursor element
|
|
208
224
|
expect(container.querySelector('[role="document"]')).toBeInTheDocument();
|
|
209
225
|
});
|
|
@@ -243,9 +259,7 @@ describe('Markdown', () => {
|
|
|
243
259
|
|
|
244
260
|
it('sanitizes data: URLs in images', () => {
|
|
245
261
|
const {container} = render(
|
|
246
|
-
<Markdown>
|
|
247
|
-
{'</script>)'}
|
|
248
|
-
</Markdown>,
|
|
262
|
+
<Markdown>{'</script>)'}</Markdown>,
|
|
249
263
|
);
|
|
250
264
|
const img = container.querySelector('img');
|
|
251
265
|
expect(img).toBeNull();
|
|
@@ -435,9 +449,7 @@ describe('inlinePlugins', () => {
|
|
|
435
449
|
},
|
|
436
450
|
};
|
|
437
451
|
const {container} = render(
|
|
438
|
-
<Markdown inlinePlugins={[plugin]}>
|
|
439
|
-
{'See TAG:important here'}
|
|
440
|
-
</Markdown>,
|
|
452
|
+
<Markdown inlinePlugins={[plugin]}>{'See TAG:important here'}</Markdown>,
|
|
441
453
|
);
|
|
442
454
|
const tag = container.querySelector('[data-testid="tag-match"]');
|
|
443
455
|
expect(tag).toBeInTheDocument();
|
|
@@ -446,9 +458,7 @@ describe('inlinePlugins', () => {
|
|
|
446
458
|
|
|
447
459
|
it('renders identically when no inlinePlugins are provided', () => {
|
|
448
460
|
const withPlugins = render(
|
|
449
|
-
<Markdown inlinePlugins={[]}>
|
|
450
|
-
{'Hello **world** and `code`'}
|
|
451
|
-
</Markdown>,
|
|
461
|
+
<Markdown inlinePlugins={[]}>{'Hello **world** and `code`'}</Markdown>,
|
|
452
462
|
);
|
|
453
463
|
const withoutPlugins = render(
|
|
454
464
|
<Markdown>{'Hello **world** and `code`'}</Markdown>,
|
|
@@ -481,9 +491,7 @@ describe('inlinePlugins', () => {
|
|
|
481
491
|
|
|
482
492
|
it('renders bare https URLs as links when autolink="gfm"', () => {
|
|
483
493
|
const {container} = render(
|
|
484
|
-
<Markdown autolink="gfm">
|
|
485
|
-
{'see https://example.com here'}
|
|
486
|
-
</Markdown>,
|
|
494
|
+
<Markdown autolink="gfm">{'see https://example.com here'}</Markdown>,
|
|
487
495
|
);
|
|
488
496
|
const link = container.querySelector('a');
|
|
489
497
|
expect(link).not.toBeNull();
|
|
@@ -503,9 +511,7 @@ describe('inlinePlugins', () => {
|
|
|
503
511
|
|
|
504
512
|
it('renders bare emails with mailto: href', () => {
|
|
505
513
|
const {container} = render(
|
|
506
|
-
<Markdown autolink="gfm">
|
|
507
|
-
{'ping user@example.com please'}
|
|
508
|
-
</Markdown>,
|
|
514
|
+
<Markdown autolink="gfm">{'ping user@example.com please'}</Markdown>,
|
|
509
515
|
);
|
|
510
516
|
const link = container.querySelector('a');
|
|
511
517
|
expect(link).not.toBeNull();
|
|
@@ -515,9 +521,7 @@ describe('inlinePlugins', () => {
|
|
|
515
521
|
|
|
516
522
|
it('does not autolink URLs inside code spans', () => {
|
|
517
523
|
const {container} = render(
|
|
518
|
-
<Markdown autolink="gfm">
|
|
519
|
-
{'try `https://example.com` here'}
|
|
520
|
-
</Markdown>,
|
|
524
|
+
<Markdown autolink="gfm">{'try `https://example.com` here'}</Markdown>,
|
|
521
525
|
);
|
|
522
526
|
expect(container.querySelector('a')).toBeNull();
|
|
523
527
|
expect(container.querySelector('code')).not.toBeNull();
|
|
@@ -525,9 +529,7 @@ describe('inlinePlugins', () => {
|
|
|
525
529
|
|
|
526
530
|
it('does not autolink URLs inside code blocks', () => {
|
|
527
531
|
const {container} = render(
|
|
528
|
-
<Markdown autolink="gfm">
|
|
529
|
-
{'```\nhttps://example.com\n```'}
|
|
530
|
-
</Markdown>,
|
|
532
|
+
<Markdown autolink="gfm">{'```\nhttps://example.com\n```'}</Markdown>,
|
|
531
533
|
);
|
|
532
534
|
expect(container.querySelector('a')).toBeNull();
|
|
533
535
|
expect(container.querySelector('pre')).not.toBeNull();
|
|
@@ -1113,9 +1113,19 @@ function renderBlock(
|
|
|
1113
1113
|
if (ParagraphComp) {
|
|
1114
1114
|
return <ParagraphComp key={index}>{paraChildren}</ParagraphComp>;
|
|
1115
1115
|
}
|
|
1116
|
+
// Markdown paragraphs render as <div>, not <p>: inline content can
|
|
1117
|
+
// include block-level nodes (images, custom inline components), and a
|
|
1118
|
+
// <p> would reparent them, desyncing SSR markup from the hydrated DOM.
|
|
1119
|
+
// Block spacing comes from token-based StyleX margins, so the rendered
|
|
1120
|
+
// appearance is unchanged. role="paragraph" re-exposes the paragraph
|
|
1121
|
+
// role in the accessibility tree (a pure ARIA hint — it does not trigger
|
|
1122
|
+
// the parser's block-child reparenting) so prose semantics are preserved
|
|
1123
|
+
// without the <p> composition hazard. Consumers who want a real <p>
|
|
1124
|
+
// element can still pass components={{paragraph: 'p'}}.
|
|
1116
1125
|
return (
|
|
1117
|
-
<
|
|
1126
|
+
<div
|
|
1118
1127
|
key={index}
|
|
1128
|
+
role="paragraph"
|
|
1119
1129
|
{...stylex.props(
|
|
1120
1130
|
spacing,
|
|
1121
1131
|
contentWidthValue != null
|
|
@@ -1128,7 +1138,7 @@ function renderBlock(
|
|
|
1128
1138
|
isLast && styles.noMarginBlockEnd,
|
|
1129
1139
|
)}>
|
|
1130
1140
|
{paraChildren}
|
|
1131
|
-
</
|
|
1141
|
+
</div>
|
|
1132
1142
|
);
|
|
1133
1143
|
}
|
|
1134
1144
|
case 'codeblock': {
|
|
@@ -1389,6 +1399,11 @@ function renderBlock(
|
|
|
1389
1399
|
return (
|
|
1390
1400
|
<div
|
|
1391
1401
|
key={index}
|
|
1402
|
+
// Keyboard-focusable so keyboard users can scroll a horizontally
|
|
1403
|
+
// overflowing GFM table.
|
|
1404
|
+
tabIndex={0}
|
|
1405
|
+
role="region"
|
|
1406
|
+
aria-label="Table"
|
|
1392
1407
|
{...stylex.props(
|
|
1393
1408
|
styles.tableWrapper,
|
|
1394
1409
|
spacing,
|
|
@@ -1487,7 +1502,7 @@ function renderBlock(
|
|
|
1487
1502
|
const safeSrc = sanitizeUrl(node.src);
|
|
1488
1503
|
if (safeSrc == null) {
|
|
1489
1504
|
return (
|
|
1490
|
-
<
|
|
1505
|
+
<div
|
|
1491
1506
|
key={index}
|
|
1492
1507
|
{...stylex.props(
|
|
1493
1508
|
spacing,
|
|
@@ -1495,11 +1510,11 @@ function renderBlock(
|
|
|
1495
1510
|
isLast && styles.noMarginBlockEnd,
|
|
1496
1511
|
)}>
|
|
1497
1512
|
[{node.alt}]
|
|
1498
|
-
</
|
|
1513
|
+
</div>
|
|
1499
1514
|
);
|
|
1500
1515
|
}
|
|
1501
1516
|
return (
|
|
1502
|
-
<
|
|
1517
|
+
<div
|
|
1503
1518
|
key={index}
|
|
1504
1519
|
{...stylex.props(
|
|
1505
1520
|
spacing,
|
|
@@ -1507,7 +1522,7 @@ function renderBlock(
|
|
|
1507
1522
|
isLast && styles.noMarginBlockEnd,
|
|
1508
1523
|
)}>
|
|
1509
1524
|
<img src={safeSrc} alt={node.alt} {...stylex.props(styles.image)} />
|
|
1510
|
-
</
|
|
1525
|
+
</div>
|
|
1511
1526
|
);
|
|
1512
1527
|
}
|
|
1513
1528
|
}
|
|
@@ -8,6 +8,10 @@ export const docs = {
|
|
|
8
8
|
displayName: 'Metadata List Item',
|
|
9
9
|
isHiddenFromOverview: true,
|
|
10
10
|
description: 'A single labeled metadata value within an MetadataList.',
|
|
11
|
+
playground: {
|
|
12
|
+
defaults: {label: 'Status', children: 'Active'},
|
|
13
|
+
wrapper: {component: 'MetadataList'},
|
|
14
|
+
},
|
|
11
15
|
props: [
|
|
12
16
|
{
|
|
13
17
|
name: 'children',
|
|
@@ -43,14 +43,14 @@ export const docs = {
|
|
|
43
43
|
type: 'number',
|
|
44
44
|
description:
|
|
45
45
|
'Drawer width in pixels. Capped at 85vw to prevent overflow on small screens.',
|
|
46
|
-
default: '
|
|
46
|
+
default: '320',
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
name: 'side',
|
|
50
|
-
type: "'start' | 'end'",
|
|
50
|
+
type: "'start' | 'end' | 'auto'",
|
|
51
51
|
description:
|
|
52
|
-
'Which side the drawer slides from. Start is left in LTR, right in RTL.',
|
|
53
|
-
default: "'
|
|
52
|
+
'Which side the drawer slides from. Start is left in LTR, right in RTL. Auto picks a side based on the trigger position.',
|
|
53
|
+
default: "'auto'",
|
|
54
54
|
},
|
|
55
55
|
],
|
|
56
56
|
},
|
|
@@ -124,14 +124,14 @@ export const docsZh = {
|
|
|
124
124
|
type: 'number',
|
|
125
125
|
description:
|
|
126
126
|
'抽屉宽度(像素)。上限为 85vw 以防止在小屏幕上溢出。',
|
|
127
|
-
default: '
|
|
127
|
+
default: '320',
|
|
128
128
|
},
|
|
129
129
|
{
|
|
130
130
|
name: 'side',
|
|
131
|
-
type: "'start' | 'end'",
|
|
131
|
+
type: "'start' | 'end' | 'auto'",
|
|
132
132
|
description:
|
|
133
|
-
'抽屉滑出的方向。在 LTR 布局中 start 为左侧,在 RTL 布局中为右侧。',
|
|
134
|
-
default: "'
|
|
133
|
+
'抽屉滑出的方向。在 LTR 布局中 start 为左侧,在 RTL 布局中为右侧。auto 根据触发元素的位置自动选择方向。',
|
|
134
|
+
default: "'auto'",
|
|
135
135
|
},
|
|
136
136
|
],
|
|
137
137
|
theming: {
|
|
@@ -363,8 +363,21 @@ export function MobileNav({
|
|
|
363
363
|
return () => {
|
|
364
364
|
if (closeTimeoutRef.current) {
|
|
365
365
|
clearTimeout(closeTimeoutRef.current);
|
|
366
|
+
closeTimeoutRef.current = null;
|
|
366
367
|
}
|
|
367
368
|
document.documentElement.style.overflow = '';
|
|
369
|
+
// Close the native dialog on teardown if it's still open. Inside AppShell
|
|
370
|
+
// the drawer is mounted in an <Activity> that switches to mode="hidden"
|
|
371
|
+
// when the drawer closes; React then runs this cleanup (with a stale
|
|
372
|
+
// isOpen) instead of re-running the effect with isOpen=false, so the
|
|
373
|
+
// close branch above never fires. If we leave the <dialog> `open` here,
|
|
374
|
+
// showModal() is skipped on the next open (the dialog is already open in
|
|
375
|
+
// the hidden tree) and the drawer can never be re-opened. Closing it
|
|
376
|
+
// unconditionally on teardown keeps the native dialog state in sync so a
|
|
377
|
+
// subsequent open cleanly calls showModal() again.
|
|
378
|
+
if (dialog.open) {
|
|
379
|
+
dialog.close();
|
|
380
|
+
}
|
|
368
381
|
};
|
|
369
382
|
}, [isOpen, side]);
|
|
370
383
|
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file MobileNavReopen.test.tsx
|
|
5
|
+
* @input Uses vitest, @testing-library/react, AppShell + SideNav
|
|
6
|
+
* @output Regression test for mobile hamburger nav re-open after close
|
|
7
|
+
* @position Testing; validates the OOTB AppShell mobile drawer toggle cycle
|
|
8
|
+
*
|
|
9
|
+
* Repro for: mobile hamburger nav can be opened and closed once, but cannot
|
|
10
|
+
* be re-opened after closing.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
describe,
|
|
15
|
+
it,
|
|
16
|
+
expect,
|
|
17
|
+
vi,
|
|
18
|
+
beforeAll,
|
|
19
|
+
beforeEach,
|
|
20
|
+
afterEach,
|
|
21
|
+
} from 'vitest';
|
|
22
|
+
import {render, screen, fireEvent, act} from '@testing-library/react';
|
|
23
|
+
import {AppShell} from '../AppShell/AppShell';
|
|
24
|
+
import {SideNav, SideNavItem, SideNavSection} from '../SideNav';
|
|
25
|
+
|
|
26
|
+
beforeAll(() => {
|
|
27
|
+
HTMLDialogElement.prototype.showModal =
|
|
28
|
+
HTMLDialogElement.prototype.showModal ||
|
|
29
|
+
function (this: HTMLDialogElement) {
|
|
30
|
+
this.setAttribute('open', '');
|
|
31
|
+
};
|
|
32
|
+
HTMLDialogElement.prototype.close =
|
|
33
|
+
HTMLDialogElement.prototype.close ||
|
|
34
|
+
function (this: HTMLDialogElement) {
|
|
35
|
+
this.removeAttribute('open');
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
class MockResizeObserver {
|
|
40
|
+
observe() {}
|
|
41
|
+
unobserve() {}
|
|
42
|
+
disconnect() {}
|
|
43
|
+
}
|
|
44
|
+
vi.stubGlobal('ResizeObserver', MockResizeObserver);
|
|
45
|
+
|
|
46
|
+
function createMockMatchMedia(matches: boolean) {
|
|
47
|
+
return {
|
|
48
|
+
matches,
|
|
49
|
+
media: '',
|
|
50
|
+
onchange: null,
|
|
51
|
+
addEventListener: vi.fn(),
|
|
52
|
+
removeEventListener: vi.fn(),
|
|
53
|
+
addListener: vi.fn(),
|
|
54
|
+
removeListener: vi.fn(),
|
|
55
|
+
dispatchEvent: vi.fn(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
beforeEach(() => {
|
|
60
|
+
vi.stubGlobal(
|
|
61
|
+
'matchMedia',
|
|
62
|
+
vi.fn().mockReturnValue(createMockMatchMedia(true)),
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
afterEach(() => {
|
|
67
|
+
vi.restoreAllMocks();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
function TestShell() {
|
|
71
|
+
return (
|
|
72
|
+
<AppShell
|
|
73
|
+
sideNav={
|
|
74
|
+
<SideNav>
|
|
75
|
+
<SideNavSection title="Test" isHeaderHidden>
|
|
76
|
+
<SideNavItem label="Home" />
|
|
77
|
+
</SideNavSection>
|
|
78
|
+
</SideNav>
|
|
79
|
+
}
|
|
80
|
+
mobileNav={{breakpoint: 'md'}}>
|
|
81
|
+
<div>Content</div>
|
|
82
|
+
</AppShell>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
describe('Mobile nav re-open after close (uncontrolled OOTB)', () => {
|
|
87
|
+
it('can be opened, closed, then opened again', () => {
|
|
88
|
+
vi.useFakeTimers();
|
|
89
|
+
try {
|
|
90
|
+
render(<TestShell />);
|
|
91
|
+
|
|
92
|
+
const getDialog = () => screen.getAllByRole('dialog', {hidden: true})[0];
|
|
93
|
+
const openToggle = () =>
|
|
94
|
+
screen.getByRole('button', {name: /open navigation/i});
|
|
95
|
+
|
|
96
|
+
// 1. Open
|
|
97
|
+
fireEvent.click(openToggle());
|
|
98
|
+
expect(getDialog()).toHaveAttribute('open');
|
|
99
|
+
|
|
100
|
+
// 2. Close via the drawer's close button
|
|
101
|
+
fireEvent.click(screen.getByRole('button', {name: /close navigation/i}));
|
|
102
|
+
// Flush the delayed dialog.close() (slide-out transition)
|
|
103
|
+
act(() => {
|
|
104
|
+
vi.advanceTimersByTime(300);
|
|
105
|
+
});
|
|
106
|
+
expect(getDialog()).not.toHaveAttribute('open');
|
|
107
|
+
|
|
108
|
+
// 3. Open AGAIN — this is the bug: it should re-open
|
|
109
|
+
fireEvent.click(openToggle());
|
|
110
|
+
act(() => {
|
|
111
|
+
vi.advanceTimersByTime(300);
|
|
112
|
+
});
|
|
113
|
+
expect(getDialog()).toHaveAttribute('open');
|
|
114
|
+
} finally {
|
|
115
|
+
vi.useRealTimers();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
@@ -46,14 +46,7 @@ export const docs = {
|
|
|
46
46
|
type: 'boolean',
|
|
47
47
|
description: 'Whether the menu trigger is disabled.',
|
|
48
48
|
default: 'false',
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
name: 'hasAutoFocus',
|
|
52
|
-
type: 'boolean',
|
|
53
|
-
description: 'Whether to auto-focus the first menu item when the menu opens. Set to false for inline showcases or documentation previews.',
|
|
54
|
-
default: 'true',
|
|
55
|
-
},
|
|
56
|
-
{
|
|
49
|
+
}, {
|
|
57
50
|
name: 'xstyle',
|
|
58
51
|
type: 'StyleXStyles',
|
|
59
52
|
description:
|
|
@@ -126,14 +119,7 @@ export const docsZh = {
|
|
|
126
119
|
type: 'boolean',
|
|
127
120
|
description: '菜单触发器是否禁用。',
|
|
128
121
|
default: 'false',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
name: 'hasAutoFocus',
|
|
132
|
-
type: 'boolean',
|
|
133
|
-
description: '菜单打开时是否自动聚焦第一个菜单项。内联展示或文档预览设为 false。',
|
|
134
|
-
default: 'true',
|
|
135
|
-
},
|
|
136
|
-
{
|
|
122
|
+
}, {
|
|
137
123
|
name: 'xstyle',
|
|
138
124
|
type: 'StyleXStyles',
|
|
139
125
|
description:
|
|
@@ -176,7 +162,6 @@ export const docsDense = {
|
|
|
176
162
|
size: 'Trigger button size.',
|
|
177
163
|
icon: 'Override default three-dot icon. Accepts any ReactNode.',
|
|
178
164
|
isDisabled: 'Whether menu trigger disabled.',
|
|
179
|
-
hasAutoFocus: 'Auto-focus first item on open; false for showcases.',
|
|
180
165
|
xstyle:
|
|
181
166
|
'StyleX styles for layout customization (margins, positioning, sizing). Must be stylex.create() value.',
|
|
182
167
|
},
|
|
@@ -81,13 +81,6 @@ export interface MoreMenuProps extends Pick<
|
|
|
81
81
|
*/
|
|
82
82
|
onOpenChange?: (isOpen: boolean) => void;
|
|
83
83
|
|
|
84
|
-
/**
|
|
85
|
-
* Whether to auto-focus the first menu item when the menu opens.
|
|
86
|
-
* Set to `false` for inline showcases or documentation previews.
|
|
87
|
-
* @default true
|
|
88
|
-
*/
|
|
89
|
-
hasAutoFocus?: boolean;
|
|
90
|
-
|
|
91
84
|
/** Test ID for testing frameworks. */
|
|
92
85
|
'data-testid'?: string;
|
|
93
86
|
}
|
|
@@ -116,7 +109,6 @@ export function MoreMenu({
|
|
|
116
109
|
isDisabled = false,
|
|
117
110
|
isMenuOpen,
|
|
118
111
|
onOpenChange,
|
|
119
|
-
hasAutoFocus,
|
|
120
112
|
xstyle,
|
|
121
113
|
className: classNameProp,
|
|
122
114
|
style,
|
|
@@ -149,7 +141,6 @@ export function MoreMenu({
|
|
|
149
141
|
}}
|
|
150
142
|
items={items}
|
|
151
143
|
hasChevron={false}
|
|
152
|
-
hasAutoFocus={hasAutoFocus}
|
|
153
144
|
data-testid={testId}
|
|
154
145
|
/>
|
|
155
146
|
);
|
|
@@ -112,6 +112,12 @@ export const docs = {
|
|
|
112
112
|
type: 'boolean',
|
|
113
113
|
description: 'Disables the selector.',
|
|
114
114
|
},
|
|
115
|
+
{
|
|
116
|
+
name: 'disabledMessage',
|
|
117
|
+
type: 'string',
|
|
118
|
+
description:
|
|
119
|
+
'Explains why the selector is disabled. With isDisabled, shows a tooltip on hover/keyboard focus and keeps the trigger focusable via aria-disabled (activation stays blocked). Use this instead of wrapping a disabled MultiSelector in Tooltip — disabled controls swallow the hover events an external Tooltip needs.',
|
|
120
|
+
},
|
|
115
121
|
{
|
|
116
122
|
name: 'isLabelHidden',
|
|
117
123
|
type: 'boolean',
|
|
@@ -189,6 +195,11 @@ export const docs = {
|
|
|
189
195
|
guidance: false,
|
|
190
196
|
description: 'Show more than ~20 options without enabling search.',
|
|
191
197
|
},
|
|
198
|
+
{
|
|
199
|
+
guidance: false,
|
|
200
|
+
description:
|
|
201
|
+
'Wrap a disabled MultiSelector in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
202
|
+
},
|
|
192
203
|
],
|
|
193
204
|
},
|
|
194
205
|
};
|
|
@@ -217,6 +228,8 @@ export const docsZh = {
|
|
|
217
228
|
hasSearch: '是否显示用于过滤选项的搜索输入。',
|
|
218
229
|
searchPlaceholder: '搜索输入的占位文本。',
|
|
219
230
|
isDisabled: '禁用选择器。',
|
|
231
|
+
disabledMessage:
|
|
232
|
+
'解释选择器被禁用的原因。与 isDisabled 一起使用时,悬停/键盘聚焦时显示工具提示,并通过 aria-disabled 保持触发器可聚焦(仍无法激活)。请使用此属性,而不是用 Tooltip 包裹被禁用的选择器。',
|
|
220
233
|
isLabelHidden: '视觉上隐藏标签同时保持其可访问性。',
|
|
221
234
|
description: '标签下方显示的辅助文本。',
|
|
222
235
|
isOptional: '将字段标记为可选。',
|
|
@@ -261,6 +274,11 @@ export const docsZh = {
|
|
|
261
274
|
guidance: false,
|
|
262
275
|
description: 'Show more than ~20 options without enabling search.',
|
|
263
276
|
},
|
|
277
|
+
{
|
|
278
|
+
guidance: false,
|
|
279
|
+
description:
|
|
280
|
+
'Wrap a disabled MultiSelector in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
281
|
+
},
|
|
264
282
|
],
|
|
265
283
|
},
|
|
266
284
|
};
|
|
@@ -301,6 +319,11 @@ export const docsDense = {
|
|
|
301
319
|
guidance: false,
|
|
302
320
|
description: 'Show more than ~20 options without enabling search.',
|
|
303
321
|
},
|
|
322
|
+
{
|
|
323
|
+
guidance: false,
|
|
324
|
+
description:
|
|
325
|
+
'Wrap a disabled MultiSelector in Tooltip to explain why it is disabled; disabled triggers swallow the hover events the wrapper needs. Use the disabledMessage prop instead.',
|
|
326
|
+
},
|
|
304
327
|
],
|
|
305
328
|
},
|
|
306
329
|
components: [
|
|
@@ -324,6 +347,8 @@ export const docsDense = {
|
|
|
324
347
|
hasSearch: 'show search input',
|
|
325
348
|
searchPlaceholder: 'search placeholder',
|
|
326
349
|
isDisabled: 'disables selector',
|
|
350
|
+
disabledMessage:
|
|
351
|
+
'why disabled; w/ isDisabled shows tooltip on hover/focus, trigger stays focusable via aria-disabled; use instead of Tooltip wrapper',
|
|
327
352
|
isLabelHidden: 'visually hides label',
|
|
328
353
|
description: 'helper text below label',
|
|
329
354
|
isOptional: 'marks optional',
|