@astryxdesign/core 0.7.5 → 0.7.6-canary.0d71e8d
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/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +5 -5
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +183 -5
- package/dist/AppShell/observeMainOverflow.d.ts +9 -0
- package/dist/AppShell/observeMainOverflow.d.ts.map +1 -0
- package/dist/AppShell/observeMainOverflow.js +125 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +12 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +7 -1
- package/dist/BottomSheet/BottomSheet.js +1 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +2 -1
- package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +30 -3
- package/dist/Button/Button.js +4 -4
- package/dist/Carousel/Carousel.d.ts +3 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +12 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -5
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +37 -4
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +41 -4
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -4
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +101 -15
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +8 -3
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +11 -7
- package/dist/DateInput/usePointerDragScroll.d.ts +10 -1
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
- package/dist/DateInput/usePointerDragScroll.js +25 -9
- package/dist/DateInput/useScrollSettle.d.ts +3 -1
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
- package/dist/DateInput/useScrollSettle.js +37 -8
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +23 -12
- package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
- package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +34 -9
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +5 -4
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +2 -1
- package/dist/Drawer/Drawer.d.ts +1 -0
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +7 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +35 -22
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -16
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +2 -1
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +4 -4
- package/dist/Field/InputClearButton.js +3 -3
- package/dist/Field/PanelSearchInput.js +2 -2
- package/dist/FieldStatus/FieldStatus.d.ts +3 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +3 -2
- package/dist/FileInput/FileInput.d.ts +3 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +34 -13
- package/dist/Heading/Heading.js +1 -1
- package/dist/Icon/Icon.js +1 -1
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckIndicator.js +2 -1
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +3 -1
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
- package/dist/Indicator/RadioIndicator.js +3 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +21 -7
- package/dist/Item/ItemSwipeLayer.js +1 -1
- package/dist/Layer/popoverOperations.d.ts +27 -0
- package/dist/Layer/popoverOperations.d.ts.map +1 -0
- package/dist/Layer/popoverOperations.js +159 -0
- package/dist/Layer/useLayer.d.ts +1 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +120 -65
- package/dist/Layout/Layout.js +1 -1
- package/dist/Layout/LayoutContent.js +1 -1
- package/dist/Layout/LayoutFooter.js +1 -1
- package/dist/Layout/LayoutHeader.js +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +5 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +8 -3
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +7 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +26 -10
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
- package/dist/NumberInput/NumberInput.d.ts +3 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +26 -5
- package/dist/NumberInput/numberParser.d.ts +3 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -1
- package/dist/NumberInput/numberParser.js +7 -44
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +27 -0
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +32 -12
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +10 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +37 -30
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +11 -3
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +28 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
- package/dist/Selector/useSelectorPresentation.d.ts +8 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +20 -4
- package/dist/SideNav/SideNavItem.d.ts +2 -2
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +18 -7
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +10 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +3 -3
- package/dist/Stack/Stack.js +1 -1
- package/dist/Stack/StackItem.js +1 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +26 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +10 -3
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +16 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -10
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
- package/dist/Text/Text.js +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +23 -5
- package/dist/TextArea/TextArea.d.ts +1 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -3
- package/dist/TimeInput/TimeInput.d.ts +6 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -14
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +5 -4
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +2 -2
- package/dist/Timestamp/TimestampHoverCard.js +4 -4
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +60 -20
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +101 -54
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +52 -5
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +14 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +44 -7
- package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +2 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -0
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +1 -0
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -4
- package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +43 -7
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +43 -9
- package/dist/astryx.css +25 -4
- package/dist/gestures/GestureArena.d.ts +32 -1
- package/dist/gestures/GestureArena.d.ts.map +1 -1
- package/dist/gestures/GestureArena.js +110 -9
- package/dist/gestures/GestureHost.d.ts +351 -0
- package/dist/gestures/GestureHost.d.ts.map +1 -0
- package/dist/gestures/GestureHost.js +1773 -0
- package/dist/gestures/GestureRecognizer.d.ts +13 -1
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/GestureRecognizer.js +19 -1
- package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/LongPressGestureRecognizer.js +3 -0
- package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +3 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/PinchGestureRecognizer.js +128 -0
- package/dist/gestures/PressTracker.d.ts +112 -0
- package/dist/gestures/PressTracker.d.ts.map +1 -0
- package/dist/gestures/PressTracker.js +267 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/SwipeGestureRecognizer.js +148 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/TapGestureRecognizer.js +3 -0
- package/dist/gestures/VelocityTracker.d.ts +6 -2
- package/dist/gestures/VelocityTracker.d.ts.map +1 -1
- package/dist/gestures/VelocityTracker.js +7 -3
- package/dist/gestures/haptics.d.ts +65 -0
- package/dist/gestures/haptics.d.ts.map +1 -0
- package/dist/gestures/haptics.js +182 -0
- package/dist/gestures/index.d.ts +37 -0
- package/dist/gestures/index.d.ts.map +1 -0
- package/dist/gestures/index.js +25 -0
- package/dist/gestures/nativeScroll.d.ts +42 -0
- package/dist/gestures/nativeScroll.d.ts.map +1 -0
- package/dist/gestures/nativeScroll.js +228 -0
- package/dist/gestures/touchAction.d.ts +60 -0
- package/dist/gestures/touchAction.d.ts.map +1 -0
- package/dist/gestures/touchAction.js +157 -0
- package/dist/gestures/touchActionRule.d.ts +34 -0
- package/dist/gestures/touchActionRule.d.ts.map +1 -0
- package/dist/gestures/touchActionRule.js +140 -0
- package/dist/gestures/types.d.ts +18 -7
- package/dist/gestures/types.d.ts.map +1 -1
- package/dist/gestures/types.js +22 -2
- package/dist/gestures/useGestureRecognizer.d.ts +56 -0
- package/dist/gestures/useGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/useGestureRecognizer.js +226 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.js +107 -61
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
- package/dist/hooks/scrollKeyboardDelegation.js +7 -3
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +4 -1
- package/dist/hooks/useAnnounce.d.ts +101 -42
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +161 -75
- package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +5 -3
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +6 -12
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +12 -1
- package/dist/hooks/useScrollOverflow.d.ts +2 -1
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +56 -10
- package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
- package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
- package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
- package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
- package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
- package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +8 -5
- package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
- package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
- package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
- package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
- package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
- package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
- package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
- package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
- package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
- package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +8 -5
- package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
- package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
- package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
- package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
- package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
- package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
- package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
- package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
- package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
- package/dist/i18n/useListFormatter.d.ts +9 -0
- package/dist/i18n/useListFormatter.d.ts.map +1 -0
- package/dist/i18n/useListFormatter.js +41 -0
- package/dist/motion/animator.d.ts +83 -8
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +701 -119
- package/dist/motion/coast.d.ts +4 -1
- package/dist/motion/coast.d.ts.map +1 -1
- package/dist/motion/coast.js +4 -2
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +6 -2
- package/dist/motion/reducedMotionPlan.d.ts +7 -0
- package/dist/motion/reducedMotionPlan.d.ts.map +1 -1
- package/dist/motion/reducedMotionPlan.js +14 -1
- package/dist/motion/resolveMotion.d.ts +42 -0
- package/dist/motion/resolveMotion.d.ts.map +1 -0
- package/dist/motion/resolveMotion.js +43 -0
- package/dist/motion/roleValue.d.ts +2 -1
- package/dist/motion/roleValue.d.ts.map +1 -1
- package/dist/motion/roleValue.js +2 -1
- package/dist/motion/uikit/timing.d.ts +7 -1
- package/dist/motion/uikit/timing.d.ts.map +1 -1
- package/dist/motion/uikit/timing.js +19 -1
- package/dist/theme/defineTheme.d.ts +19 -5
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +64 -4
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
- package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
- package/dist/theme/domainTokens/index.d.ts +5 -4
- package/dist/theme/domainTokens/index.d.ts.map +1 -1
- package/dist/theme/domainTokens/index.js +5 -9
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/motionKnobs.d.ts +56 -0
- package/dist/theme/motionKnobs.d.ts.map +1 -0
- package/dist/theme/motionKnobs.js +48 -0
- package/dist/theme/resolveThemeValues.d.ts +11 -4
- package/dist/theme/resolveThemeValues.d.ts.map +1 -1
- package/dist/theme/resolveThemeValues.js +40 -4
- package/dist/theme/themeAdaptations.d.ts +7 -3
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +36 -7
- package/dist/theme/themeMotion.d.ts +96 -0
- package/dist/theme/themeMotion.d.ts.map +1 -0
- package/dist/theme/themeMotion.js +177 -0
- package/dist/theme/tokenReferences.d.ts +31 -0
- package/dist/theme/tokenReferences.d.ts.map +1 -0
- package/dist/theme/tokenReferences.js +132 -0
- package/dist/theme/tokens.d.ts +1 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +9 -129
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +12 -0
- package/dist/utils/focusOutline.stylex.d.ts +6 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +7 -0
- package/dist/utils/focusReturn.d.ts +17 -1
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +11 -4
- package/dist/utils/getNodeText.d.ts +8 -0
- package/dist/utils/getNodeText.d.ts.map +1 -0
- package/dist/utils/getNodeText.js +37 -0
- package/dist/utils/interactionModality.d.ts +11 -2
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +58 -5
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +17 -8
- package/dist/utils/plainDate.d.ts +2 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +46 -3
- package/dist/utils/presentation.d.ts +50 -0
- package/dist/utils/presentation.d.ts.map +1 -0
- package/dist/utils/presentation.js +125 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -1
- package/dist/utils/primaryClick.d.ts +11 -0
- package/dist/utils/primaryClick.d.ts.map +1 -0
- package/dist/utils/primaryClick.js +25 -0
- package/dist/utils/sharedMutationObserver.d.ts +19 -11
- package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
- package/dist/utils/sharedMutationObserver.js +66 -26
- package/dist/utils/timeFormat.d.ts +47 -0
- package/dist/utils/timeFormat.d.ts.map +1 -0
- package/dist/utils/timeFormat.js +240 -0
- package/dist/utils/touchPresentation.d.ts +2 -2
- package/dist/utils/touchPresentation.d.ts.map +1 -1
- package/dist/utils/touchPresentation.js +13 -8
- package/dist/utils/touchPresentation.stylex.d.ts +15 -0
- package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
- package/dist/utils/touchPresentation.stylex.js +33 -0
- package/dist/utils/touchQueries.d.ts +13 -0
- package/dist/utils/touchQueries.d.ts.map +1 -0
- package/dist/utils/touchQueries.js +15 -0
- package/dist/utils/unicodeDigits.d.ts +20 -0
- package/dist/utils/unicodeDigits.d.ts.map +1 -0
- package/dist/utils/unicodeDigits.js +70 -0
- package/dist/utils/useFocusAcrossSwap.d.ts +19 -0
- package/dist/utils/useFocusAcrossSwap.d.ts.map +1 -0
- package/dist/utils/useFocusAcrossSwap.js +41 -0
- package/locales/af-ZA.json +0 -21
- package/locales/ar-SA.json +0 -21
- package/locales/ca-ES.json +0 -21
- package/locales/cs-CZ.json +0 -21
- package/locales/da-DK.json +0 -21
- package/locales/de-DE.json +0 -21
- package/locales/el-GR.json +0 -21
- package/locales/en.json +35 -23
- package/locales/es-ES.json +0 -21
- package/locales/fi-FI.json +0 -21
- package/locales/fr-FR.json +0 -21
- package/locales/he-IL.json +0 -21
- package/locales/hu-HU.json +0 -21
- package/locales/it-IT.json +0 -21
- package/locales/ja-JP.json +0 -21
- package/locales/ko-KR.json +0 -21
- package/locales/nl-NL.json +0 -21
- package/locales/no-NO.json +0 -21
- package/locales/pl-PL.json +0 -21
- package/locales/pseudo.json +23 -14
- package/locales/pt-BR.json +0 -21
- package/locales/pt-PT.json +0 -21
- package/locales/ro-RO.json +0 -21
- package/locales/ru-RU.json +0 -21
- package/locales/sr-SP.json +0 -21
- package/locales/sv-SE.json +0 -21
- package/locales/tr-TR.json +0 -21
- package/locales/uk-UA.json +0 -21
- package/locales/vi-VN.json +0 -21
- package/locales/zh-CN.json +0 -21
- package/locales/zh-TW.json +0 -21
- package/package.json +5 -4
- package/src/AlertDialog/AlertDialog.tsx +6 -5
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
- package/src/AppShell/AppShell.doc.mjs +1 -1
- package/src/AppShell/AppShell.spec.md +9 -12
- package/src/AppShell/AppShell.test.tsx +164 -2
- package/src/AppShell/AppShell.tsx +225 -5
- package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +534 -0
- package/src/AppShell/observeMainOverflow.test.ts +173 -0
- package/src/AppShell/observeMainOverflow.ts +143 -0
- package/src/Avatar/Avatar.spec.md +22 -22
- package/src/Avatar/Avatar.tsx +18 -1
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
- package/src/Badge/Badge.doc.mjs +1 -1
- package/src/Badge/Badge.tsx +19 -2
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
- package/src/BottomSheet/BottomSheet.test.tsx +46 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
- package/src/BottomSheet/useSheetGestures.test.ts +52 -0
- package/src/BottomSheet/useSheetGestures.ts +37 -6
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
- package/src/Button/Button.tsx +4 -4
- package/src/Calendar/Calendar.spec.md +87 -48
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.spec.md +9 -9
- package/src/Carousel/Carousel.test.tsx +124 -3
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +1 -16
- package/src/Chat/ChatComposer.spec.md +75 -59
- package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
- package/src/Chat/ChatDictationButton.spec.md +126 -81
- package/src/Chat/ChatLayout.spec.md +41 -36
- package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
- package/src/Chat/ChatMessage.spec.md +64 -65
- package/src/Chat/ChatSendButton.spec.md +78 -67
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/Citation/Citation.spec.md +60 -47
- package/src/ClickableCard/ClickableCard.test.tsx +96 -0
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +38 -3
- package/src/Collapsible/Collapsible.spec.md +2 -0
- package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
- package/src/ComplexSelector/ComplexSelector.test.tsx +148 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -4
- package/src/ContextMenu/ContextMenu.spec.md +84 -56
- package/src/ContextMenu/ContextMenu.test.tsx +35 -0
- package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
- package/src/DateInput/DateInput.spec.md +74 -57
- package/src/DateInput/DateInput.test.tsx +115 -3
- package/src/DateInput/DateInput.tsx +29 -14
- package/src/DateInput/DateInputTouch.test.tsx +120 -0
- package/src/DateInput/MonthScroller.tsx +106 -20
- package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
- package/src/DateInput/TouchDateField.tsx +14 -3
- package/src/DateInput/Wheel.tsx +9 -6
- package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
- package/src/DateInput/usePointerDragScroll.ts +34 -10
- package/src/DateInput/useScrollSettle.ts +38 -7
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
- package/src/DateRangeInput/DateRangeInput.tsx +16 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
- package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
- package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
- package/src/DateTimeInput/DateTimeInput.tsx +46 -24
- package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
- package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
- package/src/Dialog/Dialog.test.tsx +216 -2
- package/src/Dialog/Dialog.tsx +42 -9
- package/src/Dialog/DialogHeader.tsx +5 -4
- package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
- package/src/Divider/Divider.tsx +2 -1
- package/src/Drawer/Drawer.spec.md +111 -80
- package/src/Drawer/Drawer.test.tsx +35 -0
- package/src/Drawer/Drawer.tsx +13 -2
- package/src/Drawer/DrawerHeader.spec.md +181 -0
- package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
- package/src/DropdownMenu/DropdownMenu.test.tsx +158 -0
- package/src/DropdownMenu/DropdownMenu.tsx +43 -21
- package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
- package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
- package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
- package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
- package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
- package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
- package/src/EmptyState/EmptyState.spec.md +35 -29
- package/src/EmptyState/EmptyState.tsx +2 -1
- package/src/Field/FieldLabel.tsx +5 -4
- package/src/Field/InputClearButton.tsx +3 -3
- package/src/Field/PanelSearchInput.tsx +2 -2
- package/src/FieldStatus/FieldStatus.tsx +9 -2
- package/src/FieldStatus/__tests__/FieldStatusAudit.a11y.chromium.spec.ts +477 -0
- package/src/FileInput/FileInput.test.tsx +159 -0
- package/src/FileInput/FileInput.tsx +34 -6
- package/src/FileInput/__tests__/FileInputAudit.a11y.chromium.spec.ts +796 -0
- package/src/FormLayout/FormLayout.spec.md +11 -20
- package/src/Heading/Heading.tsx +1 -1
- package/src/Icon/Icon.tsx +1 -1
- package/src/Indicator/CheckIndicator.spec.md +47 -42
- package/src/Indicator/CheckIndicator.tsx +2 -1
- package/src/Indicator/CheckboxIndicator.spec.md +40 -37
- package/src/Indicator/CheckboxIndicator.tsx +3 -1
- package/src/Indicator/Indicator.spec.md +188 -0
- package/src/Indicator/RadioIndicator.tsx +3 -1
- package/src/Item/Item.test.tsx +60 -0
- package/src/Item/Item.tsx +16 -8
- package/src/Item/ItemSwipeLayer.tsx +1 -1
- package/src/Kbd/Kbd.spec.md +81 -38
- package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
- package/src/Layer/popoverOperations.test.ts +205 -0
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.test.tsx +426 -4
- package/src/Layer/useLayer.tsx +145 -77
- package/src/Layout/Layout.spec.md +127 -131
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.spec.md +205 -0
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.spec.md +190 -0
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.spec.md +193 -0
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Layout/LayoutPanel.spec.md +194 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
- package/src/Lightbox/Lightbox.test.tsx +18 -0
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
- package/src/Link/Link.spec.md +3 -2
- package/src/Link/Link.tsx +11 -0
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
- package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +58 -0
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.spec.md +205 -0
- package/src/List/ListItem.tsx +3 -3
- package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +1 -1
- package/src/MetadataList/MetadataList.spec.md +187 -0
- package/src/MetadataList/MetadataListItem.spec.md +165 -0
- package/src/MobileNav/MobileNav.test.tsx +15 -0
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
- package/src/MoreMenu/MoreMenu.test.tsx +11 -0
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
- package/src/MultiSelector/MultiSelector.spec.md +7 -4
- package/src/MultiSelector/MultiSelector.test.tsx +270 -1
- package/src/MultiSelector/MultiSelector.tsx +25 -10
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
- package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
- package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
- package/src/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.spec.md +59 -37
- package/src/NumberInput/NumberInput.test.tsx +68 -7
- package/src/NumberInput/NumberInput.tsx +44 -4
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/Outline/Outline.spec.md +165 -69
- package/src/Outline/Outline.test.tsx +67 -2
- package/src/Outline/Outline.tsx +23 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
- package/src/OverflowList/OverflowList.spec.md +102 -55
- package/src/Pagination/Pagination.spec.md +158 -84
- package/src/Popover/Popover.test.tsx +84 -0
- package/src/Popover/Popover.tsx +34 -14
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +70 -8
- package/src/Popover/usePopover.tsx +10 -3
- package/src/PowerSearch/PowerSearch.test.tsx +24 -0
- package/src/PowerSearch/PowerSearch.tsx +42 -31
- package/src/ProgressBar/ProgressBar.spec.md +143 -119
- package/src/ProgressBar/ProgressBar.test.tsx +108 -32
- package/src/ProgressBar/ProgressBar.tsx +58 -10
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
- package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
- package/src/RadioList/RadioList.spec.md +1 -1
- package/src/RadioList/RadioList.test.tsx +84 -0
- package/src/RadioList/RadioListItem.tsx +11 -2
- package/src/Resizable/Resizable.spec.md +144 -124
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
- package/src/Resizable/useResizable.test.ts +43 -0
- package/src/Resizable/useResizable.ts +32 -9
- package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
- package/src/Selector/Selector.test.tsx +90 -1
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
- package/src/Selector/useSelectorPresentation.ts +31 -3
- package/src/SideNav/SideNav.test.tsx +151 -4
- package/src/SideNav/SideNavItem.spec.md +14 -24
- package/src/SideNav/SideNavItem.tsx +27 -10
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
- package/src/Skeleton/Skeleton.tsx +3 -1
- package/src/Slider/Slider.test.tsx +31 -0
- package/src/Slider/Slider.tsx +8 -3
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
- package/src/Spinner/Spinner.tsx +5 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/Stepper/Step.spec.md +36 -42
- package/src/Stepper/Step.tsx +33 -6
- package/src/Stepper/Stepper.doc.mjs +1 -1
- package/src/Stepper/Stepper.test.tsx +69 -7
- package/src/Switch/Switch.spec.md +1 -1
- package/src/Switch/Switch.test.tsx +66 -1
- package/src/Switch/Switch.tsx +11 -3
- package/src/TabList/TabList.test.tsx +58 -4
- package/src/TabList/TabList.tsx +16 -1
- package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
- package/src/Table/Table.spec.md +1 -1
- package/src/Table/Table.test.tsx +32 -0
- package/src/Table/Table.tsx +43 -11
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
- package/src/Table/__tests__/Table.a11y.states.ts +1 -5
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
- package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
- package/src/Text/Text.tsx +1 -1
- package/src/Text/useTruncation.test.tsx +128 -1
- package/src/Text/useTruncation.ts +23 -5
- package/src/TextArea/TextArea.spec.md +10 -13
- package/src/TextArea/TextArea.test.tsx +60 -0
- package/src/TextArea/TextArea.tsx +15 -1
- package/src/TextInput/TextInput.test.tsx +21 -0
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
- package/src/TimeInput/Presentation.test.tsx +21 -0
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.spec.md +58 -61
- package/src/TimeInput/TimeInput.test.tsx +76 -0
- package/src/TimeInput/TimeInput.tsx +36 -18
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timestamp/Timestamp.spec.md +6 -12
- package/src/Timestamp/Timestamp.test.tsx +30 -5
- package/src/Timestamp/Timestamp.tsx +6 -2
- package/src/Timestamp/TimestampHoverCard.tsx +4 -4
- package/src/Toast/Toast.spec.md +15 -24
- package/src/Toast/Toast.tsx +104 -36
- package/src/Toast/ToastViewport.test.tsx +798 -1
- package/src/Toast/ToastViewport.tsx +121 -53
- package/src/ToggleButton/ToggleButton.test.tsx +27 -0
- package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
- package/src/Token/Token.doc.mjs +2 -2
- package/src/Token/Token.spec.md +52 -61
- package/src/Token/Token.test.tsx +104 -0
- package/src/Token/Token.tsx +75 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/Tokenizer/Tokenizer.spec.md +18 -4
- package/src/Tokenizer/Tokenizer.test.tsx +176 -0
- package/src/Tokenizer/Tokenizer.tsx +48 -12
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +23 -4
- package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
- package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
- package/src/Toolbar/Toolbar.spec.md +5 -6
- package/src/Toolbar/Toolbar.test.tsx +30 -0
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
- package/src/TopNav/TopNav.test.tsx +27 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
- package/src/TopNav/TopNavMegaMenu.tsx +4 -1
- package/src/TopNav/TopNavMenu.test.tsx +17 -0
- package/src/TopNav/TopNavMenu.tsx +1 -0
- package/src/TreeList/TreeList.test.tsx +26 -0
- package/src/TreeList/TreeListItem.tsx +26 -4
- package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
- package/src/Typeahead/BaseTypeahead.spec.md +45 -45
- package/src/Typeahead/BaseTypeahead.tsx +48 -9
- package/src/Typeahead/Typeahead.test.tsx +294 -11
- package/src/Typeahead/Typeahead.tsx +51 -9
- package/src/__tests__/internalModulesNotExperimental.test.ts +88 -0
- package/src/__tests__/pressState.ts +8 -4
- package/src/gestures/GestureArena.ts +111 -11
- package/src/gestures/GestureHost.ts +2064 -0
- package/src/gestures/GestureRecognizer.ts +21 -1
- package/src/gestures/LongPressGestureRecognizer.ts +4 -0
- package/src/gestures/PanGestureRecognizer.ts +4 -0
- package/src/gestures/PinchGestureRecognizer.ts +148 -0
- package/src/gestures/PressTracker.ts +386 -0
- package/src/gestures/README.md +420 -0
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
- package/src/gestures/SwipeGestureRecognizer.ts +197 -0
- package/src/gestures/TapGestureRecognizer.ts +4 -0
- package/src/gestures/VelocityTracker.ts +10 -3
- package/src/gestures/__tests__/GestureHost.test.ts +2136 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
- package/src/gestures/__tests__/PressTracker.test.ts +275 -0
- package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
- package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
- package/src/gestures/__tests__/arena.test.ts +40 -0
- package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
- package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
- package/src/gestures/__tests__/browser/fixture.ts +307 -0
- package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
- package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
- package/src/gestures/__tests__/haptics.test.ts +187 -0
- package/src/gestures/__tests__/harness.ts +52 -4
- package/src/gestures/__tests__/pressTrackerFactory.test.ts +59 -0
- package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
- package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
- package/src/gestures/__tests__/useGestureRecognizer.test.tsx +570 -0
- package/src/gestures/haptics.ts +203 -0
- package/src/gestures/index.ts +79 -0
- package/src/gestures/nativeScroll.ts +277 -0
- package/src/gestures/touchAction.ts +191 -0
- package/src/gestures/touchActionRule.ts +157 -0
- package/src/gestures/types.ts +30 -9
- package/src/gestures/useGestureRecognizer.ts +305 -0
- package/src/hooks/index.ts +5 -1
- package/src/hooks/modalAnnounce.ts +129 -72
- package/src/hooks/scrollKeyboardDelegation.test.ts +33 -0
- package/src/hooks/scrollKeyboardDelegation.ts +9 -3
- package/src/hooks/useAdaptivePresentation.ts +4 -1
- package/src/hooks/useAnnounce.doc.mjs +35 -3
- package/src/hooks/useAnnounce.replace.test.tsx +516 -0
- package/src/hooks/useAnnounce.ts +209 -102
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
- package/src/hooks/useAnnounceRenderedText.ts +17 -3
- package/src/hooks/useBusyAnnouncement.ts +7 -10
- package/src/hooks/useMenuHover.ts +15 -1
- package/src/hooks/useScrollOverflow.doc.mjs +1 -1
- package/src/hooks/useScrollOverflow.test.tsx +102 -1
- package/src/hooks/useScrollOverflow.ts +59 -10
- package/src/i18n/__tests__/useListFormatter.test.tsx +58 -0
- package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
- package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
- package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
- package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
- package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
- package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
- package/src/i18n/generated-locales/en.generated.ts +9 -6
- package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
- package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
- package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
- package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
- package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
- package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
- package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
- package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
- package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
- package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
- package/src/i18n/generated-locales/pseudo.generated.ts +9 -6
- package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
- package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
- package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
- package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
- package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
- package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
- package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
- package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
- package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
- package/src/i18n/useListFormatter.ts +42 -0
- package/src/motion/MEASUREMENTS.md +2 -1
- package/src/motion/README.md +113 -33
- package/src/motion/__tests__/animator.interaction.browser.spec.ts +843 -0
- package/src/motion/__tests__/motionBundle.ts +14 -0
- package/src/motion/animator.test.ts +1125 -32
- package/src/motion/animator.ts +932 -130
- package/src/motion/coast.ts +10 -3
- package/src/motion/reducedMotion.ts +12 -2
- package/src/motion/reducedMotionPlan.test.ts +26 -0
- package/src/motion/reducedMotionPlan.ts +20 -1
- package/src/motion/resolveMotion.test.ts +123 -0
- package/src/motion/resolveMotion.ts +68 -0
- package/src/motion/roleValue.ts +2 -1
- package/src/motion/roles.test.ts +21 -4
- package/src/motion/uikit/tableImports.test.ts +293 -0
- package/src/motion/uikit/timing.ts +15 -1
- package/src/motion/uikit/values.test.ts +23 -12
- package/src/theme/Theme.doc.mjs +1 -1
- package/src/theme/defineTheme.ts +117 -8
- package/src/theme/derivedVarRegistry.test.ts +4 -0
- package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
- package/src/theme/domainTokens/index.ts +6 -10
- package/src/theme/expandMotionScale.test.ts +1 -1
- package/src/theme/index.ts +5 -0
- package/src/theme/motionKnobs.ts +82 -0
- package/src/theme/resolveThemeValues.ts +68 -6
- package/src/theme/themeAdaptations.ts +52 -12
- package/src/theme/themeMotion.test.ts +620 -0
- package/src/theme/themeMotion.ts +221 -0
- package/src/theme/tokenReferences.ts +149 -0
- package/src/theme/tokens.stylex.ts +10 -0
- package/src/theme/tokens.ts +15 -158
- package/src/utils/focusOutline.stylex.ts +28 -0
- package/src/utils/focusReturn.ts +17 -6
- package/src/utils/getNodeText.test.ts +24 -0
- package/src/utils/getNodeText.ts +37 -0
- package/src/utils/interactionModality.test.ts +45 -1
- package/src/utils/interactionModality.ts +64 -5
- package/src/utils/interactionOverlay.stylex.ts +12 -3
- package/src/utils/plainDate.test.ts +90 -0
- package/src/utils/plainDate.ts +58 -3
- package/src/utils/presentation.test.ts +380 -0
- package/src/utils/presentation.ts +180 -0
- package/src/utils/pressFeedback.test.ts +138 -0
- package/src/utils/pressFeedback.ts +34 -11
- package/src/utils/pressGesture.test.ts +9 -0
- package/src/utils/pressPaintPriority.test.ts +80 -0
- package/src/utils/primaryClick.test.ts +38 -0
- package/src/utils/primaryClick.ts +28 -0
- package/src/utils/sharedMutationObserver.test.ts +54 -1
- package/src/utils/sharedMutationObserver.ts +87 -29
- package/src/utils/timeFormat.test.ts +204 -0
- package/src/utils/timeFormat.ts +314 -0
- package/src/utils/touchPresentation.stylex.ts +43 -0
- package/src/utils/touchPresentation.test.ts +140 -1
- package/src/utils/touchPresentation.ts +13 -8
- package/src/utils/touchQueries.ts +15 -0
- package/src/utils/unicodeDigits.test.ts +44 -0
- package/src/utils/unicodeDigits.ts +71 -0
- package/src/utils/useFocusAcrossSwap.ts +55 -0
|
@@ -30,6 +30,7 @@ import {DropdownMenuGroup} from './DropdownMenuGroup';
|
|
|
30
30
|
import {warmMenuBottomSheet} from './__tests__/warmMenuBottomSheet';
|
|
31
31
|
import {DropdownMenuSubMenu} from './DropdownMenuSubMenu';
|
|
32
32
|
import {Divider} from '../Divider';
|
|
33
|
+
import {Tooltip} from '../Tooltip/Tooltip';
|
|
33
34
|
import {rtlStyles} from '../utils';
|
|
34
35
|
import {__resetInteractionModalityForTest} from '../utils/interactionModality';
|
|
35
36
|
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
@@ -127,6 +128,47 @@ describe('DropdownMenu', () => {
|
|
|
127
128
|
).not.toBeInTheDocument();
|
|
128
129
|
});
|
|
129
130
|
|
|
131
|
+
it("forwards the button's ref object to the popover trigger", () => {
|
|
132
|
+
const ref = createRef<HTMLButtonElement>();
|
|
133
|
+
render(
|
|
134
|
+
<DropdownMenu
|
|
135
|
+
button={{label: 'Project actions', ref}}
|
|
136
|
+
items={[{label: 'Edit project', onClick: vi.fn()}]}
|
|
137
|
+
/>,
|
|
138
|
+
);
|
|
139
|
+
expect(ref.current).toBe(
|
|
140
|
+
screen.getByRole('button', {name: /Project actions/}),
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("forwards the button's ref object to the bottom-sheet trigger", () => {
|
|
145
|
+
const ref = createRef<HTMLButtonElement>();
|
|
146
|
+
render(
|
|
147
|
+
<DropdownMenu
|
|
148
|
+
button={{label: 'Project actions', ref}}
|
|
149
|
+
presentation="bottom-sheet"
|
|
150
|
+
items={[{label: 'Edit project', onClick: vi.fn()}]}
|
|
151
|
+
/>,
|
|
152
|
+
);
|
|
153
|
+
expect(ref.current).toBe(
|
|
154
|
+
screen.getByRole('button', {name: /Project actions/}),
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
it("forwards the button's callback ref to the bottom-sheet trigger", () => {
|
|
159
|
+
const ref = vi.fn();
|
|
160
|
+
render(
|
|
161
|
+
<DropdownMenu
|
|
162
|
+
button={{label: 'Project actions', ref}}
|
|
163
|
+
presentation="bottom-sheet"
|
|
164
|
+
items={[{label: 'Edit project', onClick: vi.fn()}]}
|
|
165
|
+
/>,
|
|
166
|
+
);
|
|
167
|
+
expect(ref).toHaveBeenCalledWith(
|
|
168
|
+
screen.getByRole('button', {name: /Project actions/}),
|
|
169
|
+
);
|
|
170
|
+
});
|
|
171
|
+
|
|
130
172
|
it('renders data-driven actions in a bottom sheet when requested', async () => {
|
|
131
173
|
const user = userEvent.setup();
|
|
132
174
|
const onEdit = vi.fn();
|
|
@@ -4338,3 +4380,119 @@ describe('DropdownMenu header and footer', () => {
|
|
|
4338
4380
|
).toBeTruthy();
|
|
4339
4381
|
});
|
|
4340
4382
|
});
|
|
4383
|
+
|
|
4384
|
+
describe('DropdownMenu trigger refs across renders', () => {
|
|
4385
|
+
// A ref that is a new function on every render makes React call it again on
|
|
4386
|
+
// every commit (with null, then the element). Each call moved the menu's
|
|
4387
|
+
// anchor off the trigger and back, rewriting the trigger's style and
|
|
4388
|
+
// reordering its anchor names whenever a tooltip anchors there too.
|
|
4389
|
+
function watchStyleWrites(element: HTMLElement) {
|
|
4390
|
+
const records: MutationRecord[] = [];
|
|
4391
|
+
const observer = new MutationObserver(found => records.push(...found));
|
|
4392
|
+
observer.observe(element, {attributes: true, attributeFilter: ['style']});
|
|
4393
|
+
return () => {
|
|
4394
|
+
records.push(...observer.takeRecords());
|
|
4395
|
+
observer.disconnect();
|
|
4396
|
+
return records.length;
|
|
4397
|
+
};
|
|
4398
|
+
}
|
|
4399
|
+
|
|
4400
|
+
const anchorNames = (element: HTMLElement) =>
|
|
4401
|
+
element.style.getPropertyValue('anchor-name');
|
|
4402
|
+
|
|
4403
|
+
it('hands renderTrigger the same ref on every render, so a render leaves the trigger and its tooltip anchor alone', () => {
|
|
4404
|
+
const refs: DropdownMenuTriggerProps['ref'][] = [];
|
|
4405
|
+
function Menu({count}: {count: number}) {
|
|
4406
|
+
return (
|
|
4407
|
+
<DropdownMenu
|
|
4408
|
+
renderTrigger={props => {
|
|
4409
|
+
refs.push(props.ref);
|
|
4410
|
+
return (
|
|
4411
|
+
<Tooltip content="More actions">
|
|
4412
|
+
<button type="button" {...props}>
|
|
4413
|
+
Menu {count}
|
|
4414
|
+
</button>
|
|
4415
|
+
</Tooltip>
|
|
4416
|
+
);
|
|
4417
|
+
}}>
|
|
4418
|
+
<DropdownMenuItem label="Profile" onClick={() => {}} />
|
|
4419
|
+
</DropdownMenu>
|
|
4420
|
+
);
|
|
4421
|
+
}
|
|
4422
|
+
const {rerender} = render(<Menu count={0} />);
|
|
4423
|
+
const trigger = screen.getByRole('button', {name: /^Menu/});
|
|
4424
|
+
const before = anchorNames(trigger);
|
|
4425
|
+
// The menu's anchor and the tooltip's, on one element.
|
|
4426
|
+
expect(before.split(',')).toHaveLength(2);
|
|
4427
|
+
|
|
4428
|
+
const stopWatching = watchStyleWrites(trigger);
|
|
4429
|
+
rerender(<Menu count={1} />);
|
|
4430
|
+
|
|
4431
|
+
expect(stopWatching()).toBe(0);
|
|
4432
|
+
expect(anchorNames(trigger)).toBe(before);
|
|
4433
|
+
expect(refs.length).toBeGreaterThan(1);
|
|
4434
|
+
expect(refs.at(-1)).toBe(refs[0]);
|
|
4435
|
+
});
|
|
4436
|
+
|
|
4437
|
+
it('leaves the default trigger and its tooltip anchor alone on a render', () => {
|
|
4438
|
+
function Menu({count}: {count: number}) {
|
|
4439
|
+
return (
|
|
4440
|
+
<>
|
|
4441
|
+
<output>{count}</output>
|
|
4442
|
+
<DropdownMenu
|
|
4443
|
+
button={{label: 'Actions', tooltip: 'More actions'}}
|
|
4444
|
+
onOpenChange={() => {}}>
|
|
4445
|
+
<DropdownMenuItem label="Profile" onClick={() => {}} />
|
|
4446
|
+
</DropdownMenu>
|
|
4447
|
+
</>
|
|
4448
|
+
);
|
|
4449
|
+
}
|
|
4450
|
+
const {rerender} = render(<Menu count={0} />);
|
|
4451
|
+
const trigger = screen.getByRole('button', {name: 'Actions'});
|
|
4452
|
+
const before = anchorNames(trigger);
|
|
4453
|
+
expect(before.split(',')).toHaveLength(2);
|
|
4454
|
+
|
|
4455
|
+
const stopWatching = watchStyleWrites(trigger);
|
|
4456
|
+
rerender(<Menu count={1} />);
|
|
4457
|
+
|
|
4458
|
+
expect(stopWatching()).toBe(0);
|
|
4459
|
+
expect(anchorNames(trigger)).toBe(before);
|
|
4460
|
+
});
|
|
4461
|
+
|
|
4462
|
+
it('still hands the default trigger to a ref the caller passes', () => {
|
|
4463
|
+
const buttonRef = createRef<HTMLButtonElement>();
|
|
4464
|
+
render(
|
|
4465
|
+
<DropdownMenu button={{label: 'Actions', ref: buttonRef}}>
|
|
4466
|
+
<DropdownMenuItem label="Profile" onClick={() => {}} />
|
|
4467
|
+
</DropdownMenu>,
|
|
4468
|
+
);
|
|
4469
|
+
expect(buttonRef.current).toBe(
|
|
4470
|
+
screen.getByRole('button', {name: 'Actions'}),
|
|
4471
|
+
);
|
|
4472
|
+
});
|
|
4473
|
+
|
|
4474
|
+
it('hands the bottom-sheet trigger the same ref on every render', () => {
|
|
4475
|
+
const refs: DropdownMenuTriggerProps['ref'][] = [];
|
|
4476
|
+
function Menu({count}: {count: number}) {
|
|
4477
|
+
return (
|
|
4478
|
+
<DropdownMenu
|
|
4479
|
+
presentation="bottom-sheet"
|
|
4480
|
+
items={[{label: 'Profile'}]}
|
|
4481
|
+
renderTrigger={props => {
|
|
4482
|
+
refs.push(props.ref);
|
|
4483
|
+
return (
|
|
4484
|
+
<button type="button" {...props}>
|
|
4485
|
+
Menu {count}
|
|
4486
|
+
</button>
|
|
4487
|
+
);
|
|
4488
|
+
}}
|
|
4489
|
+
/>
|
|
4490
|
+
);
|
|
4491
|
+
}
|
|
4492
|
+
const {rerender} = render(<Menu count={0} />);
|
|
4493
|
+
rerender(<Menu count={1} />);
|
|
4494
|
+
|
|
4495
|
+
expect(refs.length).toBeGreaterThan(1);
|
|
4496
|
+
expect(refs.at(-1)).toBe(refs[0]);
|
|
4497
|
+
});
|
|
4498
|
+
});
|
|
@@ -67,6 +67,7 @@ import {
|
|
|
67
67
|
type DropdownMenuSurfaceValue,
|
|
68
68
|
} from './DropdownMenuContext';
|
|
69
69
|
import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
|
|
70
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
70
71
|
import {useListFocus} from '../hooks/useListFocus';
|
|
71
72
|
import {useMenuPress} from '../hooks/useMenuPress';
|
|
72
73
|
import type {MenuPressPointerType} from '../hooks/menuPressGesture';
|
|
@@ -621,6 +622,11 @@ function DropdownMenuBottomSheet({
|
|
|
621
622
|
const button = buttonFromProps ?? {label: t(DEFAULT_BUTTON_I18N_KEY)};
|
|
622
623
|
const backLabel = t('@astryx.dropdownMenu.back');
|
|
623
624
|
const buttonRef = useRef<HTMLElement>(null);
|
|
625
|
+
// The caller's `button.ref` rides along with the sheet's own trigger ref.
|
|
626
|
+
const triggerRef = useMergedRefs<HTMLButtonElement>(
|
|
627
|
+
buttonRef as React.Ref<HTMLButtonElement>,
|
|
628
|
+
button.ref,
|
|
629
|
+
);
|
|
624
630
|
const triggerId = useId();
|
|
625
631
|
const sheetId = useId();
|
|
626
632
|
const actionListRef = useRef<HTMLDivElement>(null);
|
|
@@ -645,9 +651,10 @@ function DropdownMenuBottomSheet({
|
|
|
645
651
|
}
|
|
646
652
|
}
|
|
647
653
|
// The closed sheet renders nothing, so load its rows at rest: the first
|
|
648
|
-
// open shows the actions at once.
|
|
654
|
+
// open shows the actions at once. The preload's result says whether they
|
|
655
|
+
// loaded; after a failure the first open loads them.
|
|
649
656
|
useEffect(() => {
|
|
650
|
-
preloadMenuBottomSheetActionList();
|
|
657
|
+
void preloadMenuBottomSheetActionList();
|
|
651
658
|
}, []);
|
|
652
659
|
const currentSubmenu = submenuPath.at(-1);
|
|
653
660
|
const currentItems = currentSubmenu?.items ?? items;
|
|
@@ -785,13 +792,15 @@ function DropdownMenuBottomSheet({
|
|
|
785
792
|
{currentTitle}
|
|
786
793
|
</Heading>
|
|
787
794
|
);
|
|
795
|
+
// A stable ref: an inline one re-runs on every render (null, then the element).
|
|
796
|
+
const sheetTriggerRef = useCallback((el: HTMLElement | null) => {
|
|
797
|
+
buttonRef.current = el;
|
|
798
|
+
}, []);
|
|
788
799
|
return (
|
|
789
800
|
<>
|
|
790
801
|
{renderTrigger != null ? (
|
|
791
802
|
renderTrigger({
|
|
792
|
-
ref:
|
|
793
|
-
buttonRef.current = el;
|
|
794
|
-
},
|
|
803
|
+
ref: sheetTriggerRef,
|
|
795
804
|
id: triggerId,
|
|
796
805
|
onClick: handleSheetTriggerClick,
|
|
797
806
|
onClickCapture: () => {},
|
|
@@ -806,7 +815,7 @@ function DropdownMenuBottomSheet({
|
|
|
806
815
|
) : (
|
|
807
816
|
<Button
|
|
808
817
|
{...button}
|
|
809
|
-
ref={
|
|
818
|
+
ref={triggerRef}
|
|
810
819
|
xstyle={[
|
|
811
820
|
isOpen && styles.triggerOpen,
|
|
812
821
|
button.xstyle,
|
|
@@ -1584,11 +1593,35 @@ function DropdownMenuPopover({
|
|
|
1584
1593
|
</>
|
|
1585
1594
|
);
|
|
1586
1595
|
|
|
1587
|
-
|
|
1588
|
-
|
|
1596
|
+
// Stable trigger refs. An inline ref is a new function every render, so React
|
|
1597
|
+
// re-runs it on every commit (null, then the element), and each run moved the
|
|
1598
|
+
// popover's anchor off the trigger and back: two inline-style writes on the
|
|
1599
|
+
// trigger per render of the menu.
|
|
1600
|
+
const popoverTriggerRef = popover.triggerRef;
|
|
1601
|
+
const triggerRef = useCallback(
|
|
1602
|
+
(el: HTMLElement | null) => {
|
|
1589
1603
|
buttonRef.current = el;
|
|
1590
|
-
|
|
1604
|
+
popoverTriggerRef(el);
|
|
1605
|
+
},
|
|
1606
|
+
[popoverTriggerRef],
|
|
1607
|
+
);
|
|
1608
|
+
const consumerButtonRef = button.ref;
|
|
1609
|
+
const buttonTriggerRef = useCallback(
|
|
1610
|
+
(el: HTMLButtonElement | null) => {
|
|
1611
|
+
triggerRef(el);
|
|
1612
|
+
if (typeof consumerButtonRef === 'function') {
|
|
1613
|
+
consumerButtonRef(el);
|
|
1614
|
+
} else if (consumerButtonRef) {
|
|
1615
|
+
/* eslint-disable react-compiler/react-compiler -- ref callback: forwarding consumer ref object */
|
|
1616
|
+
consumerButtonRef.current = el;
|
|
1617
|
+
/* eslint-enable react-compiler/react-compiler */
|
|
1618
|
+
}
|
|
1591
1619
|
},
|
|
1620
|
+
[triggerRef, consumerButtonRef],
|
|
1621
|
+
);
|
|
1622
|
+
|
|
1623
|
+
const triggerProps: DropdownMenuTriggerProps = {
|
|
1624
|
+
ref: triggerRef,
|
|
1592
1625
|
id: triggerId,
|
|
1593
1626
|
onClick: handleButtonClick,
|
|
1594
1627
|
onClickCapture: handleTriggerClickCapture,
|
|
@@ -1611,18 +1644,7 @@ function DropdownMenuPopover({
|
|
|
1611
1644
|
) : (
|
|
1612
1645
|
<Button
|
|
1613
1646
|
{...button}
|
|
1614
|
-
ref={
|
|
1615
|
-
buttonRef.current = el;
|
|
1616
|
-
popover.triggerRef(el);
|
|
1617
|
-
const consumerRef = button.ref;
|
|
1618
|
-
if (typeof consumerRef === 'function') {
|
|
1619
|
-
consumerRef(el);
|
|
1620
|
-
} else if (consumerRef) {
|
|
1621
|
-
/* eslint-disable react-compiler/react-compiler -- ref callback: forwarding consumer ref object */
|
|
1622
|
-
consumerRef.current = el;
|
|
1623
|
-
/* eslint-enable react-compiler/react-compiler */
|
|
1624
|
-
}
|
|
1625
|
-
}}
|
|
1647
|
+
ref={buttonTriggerRef}
|
|
1626
1648
|
xstyle={[
|
|
1627
1649
|
styles.triggerPressable,
|
|
1628
1650
|
isOpen && styles.triggerOpen,
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
schema_version: 3
|
|
3
|
+
template_version: 7
|
|
4
|
+
kind: component
|
|
5
|
+
id: component:DropdownMenuCheckboxItem
|
|
6
|
+
authority: current
|
|
7
|
+
archive_reason: null
|
|
8
|
+
superseded_by: null
|
|
9
|
+
approved_by: cixzhang
|
|
10
|
+
approved_at: 2026-10-31
|
|
11
|
+
owners: [cixzhang]
|
|
12
|
+
review_triggers: [public-api, behavior, accessibility, theming]
|
|
13
|
+
verified_by:
|
|
14
|
+
[
|
|
15
|
+
packages/core/src/DropdownMenu/DropdownMenuSelectable.test.tsx,
|
|
16
|
+
packages/core/src/DropdownMenu/DropdownMenu.test.tsx,
|
|
17
|
+
]
|
|
18
|
+
modules: []
|
|
19
|
+
families: []
|
|
20
|
+
design_specs: []
|
|
21
|
+
architecture:
|
|
22
|
+
[
|
|
23
|
+
architecture:public-component-api,
|
|
24
|
+
architecture:component-theming-surface,
|
|
25
|
+
architecture:interaction-modality,
|
|
26
|
+
]
|
|
27
|
+
contributing: []
|
|
28
|
+
system_specs: [spec:AST-020]
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
# DropdownMenuCheckboxItem component contract
|
|
32
|
+
|
|
33
|
+
## Contract at a glance
|
|
34
|
+
|
|
35
|
+
| Area | Contract |
|
|
36
|
+
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
37
|
+
| Public contract | One pointer-menu row that toggles an independent boolean: `label`, `description`, `icon`, `endContent`, controlled `value` and `onChange`, `isDisabled`, `hasCloseOnSelect` (default `false`), root inputs, and a ref. |
|
|
38
|
+
| Behavior | The row is one `menuitemcheckbox` whose `aria-checked` is its `value`; an enabled activation reports `!value` and keeps the menu open unless asked to close; a disabled row is inert. |
|
|
39
|
+
| End-user impact | People toggle options without the menu closing on each change, and screen-reader users hear one checkbox per row. |
|
|
40
|
+
| Builder impact | Builders own the value; the row composes their click and pointer-move handlers with its own activation and hover focus. |
|
|
41
|
+
| Compatibility/readiness | Records shipped behavior; no API, default, or DOM change. Enter keeping the menu open is listed under Current-state impact (OQ1). |
|
|
42
|
+
| Review checks | Reject a nested announced checkbox, a row that closes by default, a dropped caller handler, or an activation while disabled. |
|
|
43
|
+
| Governing rules | `spec:AST-020` FR15; `architecture:public-component-api` INV5–INV8; `architecture:interaction-modality`. |
|
|
44
|
+
|
|
45
|
+
This table is a review projection; the body below is authoritative.
|
|
46
|
+
|
|
47
|
+
## Intent
|
|
48
|
+
|
|
49
|
+
DropdownMenuCheckboxItem renders one compound-mode row that toggles an
|
|
50
|
+
independent boolean inside the pointer presentation of DropdownMenu.
|
|
51
|
+
DropdownMenu owns focus movement, typeahead, keyboard click synthesis, and the
|
|
52
|
+
close lifecycle.
|
|
53
|
+
|
|
54
|
+
## Compatibility and migration
|
|
55
|
+
|
|
56
|
+
- Released default preserved: yes (`hasCloseOnSelect=false`).
|
|
57
|
+
- Compatibility class: records shipped behavior; no public prop, default,
|
|
58
|
+
export, or DOM change.
|
|
59
|
+
- Controlled/uncontrolled behavior: controlled; `value` is caller-owned.
|
|
60
|
+
- Migration decision: none.
|
|
61
|
+
|
|
62
|
+
Consumer migration instructions belong in consumer docs and release notes.
|
|
63
|
+
|
|
64
|
+
## Ownership boundary
|
|
65
|
+
|
|
66
|
+
**Owns**
|
|
67
|
+
|
|
68
|
+
- One `role="menuitemcheckbox"` root, its `aria-checked`, label, description,
|
|
69
|
+
icon, end content, disabled state, ref, supported host inputs, and styling
|
|
70
|
+
inputs.
|
|
71
|
+
- Activation: reporting `!value`, the close policy, and composing the caller's
|
|
72
|
+
click and pointer-move handlers.
|
|
73
|
+
- The decorative checkbox marker and the row's `dropdown-menu-item` target.
|
|
74
|
+
|
|
75
|
+
**Does not own / non-goals**
|
|
76
|
+
|
|
77
|
+
- Focus entry, roving focus, typeahead, and Enter/Space click synthesis — owned
|
|
78
|
+
by `component:DropdownMenu`.
|
|
79
|
+
- Checkbox chrome — delegated to `component:Indicator`.
|
|
80
|
+
- Whether disabled rows stay keyboard-discoverable — `component:DropdownMenu`
|
|
81
|
+
OQ1.
|
|
82
|
+
|
|
83
|
+
## Public concepts
|
|
84
|
+
|
|
85
|
+
| Concept | Closed values or states | Meaning | Availability | Default | Owner | Stability | Invalid-value behavior |
|
|
86
|
+
| ------------- | ----------------------- | ------------------------------------------ | ----------------- | ----------- | --------- | --------- | ----------------------------- |
|
|
87
|
+
| Checked state | `true`, `false` | The boolean the row shows and toggles. | Every row | required | caller | stable | Required by the public type. |
|
|
88
|
+
| Close policy | close; remain open | Whether an enabled toggle closes the menu. | Every enabled row | remain open | component | stable | Omission keeps the menu open. |
|
|
89
|
+
| Availability | enabled; disabled | Whether the row can activate. | Every row | enabled | component | stable | Disabled blocks activation. |
|
|
90
|
+
|
|
91
|
+
## Behavioral and layout contract
|
|
92
|
+
|
|
93
|
+
| ID | Invariant | Basis |
|
|
94
|
+
| --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
|
|
95
|
+
| FR1 | The row renders one element with `role="menuitemcheckbox"` whose `aria-checked` equals `value`; the checkbox marker is decorative (`aria-hidden`), so the row is the only announced control. | `spec:AST-020` FR15; current source and tests |
|
|
96
|
+
| FR2 | An enabled activation, by pointer or by the parent's synthesized Enter/Space click, calls `onChange(!value)`, then closes the menu when `hasCloseOnSelect` is set, then calls the caller's `onClick`; without `hasCloseOnSelect` the menu stays open. The APG Menu pattern's Enter closes the menu, and `spec:AST-020` FR15 requires this record to name any required part it does not adopt. Implementation gap: Enter keeps the menu open by default, and no exception is named (OQ1). | `spec:AST-020` FR15; `architecture:public-component-api` INV7; current tests |
|
|
97
|
+
| FR3 | A disabled row exposes `aria-disabled="true"`, renders no `tabindex`, and on activation calls neither `onChange` nor the caller's activation handlers. | Current source and tests |
|
|
98
|
+
| FR4 | Ref, supported host attributes and handlers, `className`, `style`, and `xstyle` reach or compose on the row root; caller `onPointerMove` composes with the row's hover focus. | `architecture:public-component-api` INV5–INV8; current tests |
|
|
99
|
+
| FR5 | The marker is the shared checkbox Indicator, `sm` in a small menu; the row carries the `dropdown-menu-item` target with the menu size. | `architecture:component-theming-surface`; current source and tests |
|
|
100
|
+
| FR6 | The row adds no key handler or tab stop of its own: enabled rows are `tabindex="-1"` for the parent's roving focus, and the parent's arrow keys skip a disabled row (`component:DropdownMenu` FR17). | `architecture:interaction-modality`; parent tests |
|
|
101
|
+
|
|
102
|
+
### Allowed variation
|
|
103
|
+
|
|
104
|
+
- **AV1 — Content.** Label, description, icon, and end content are caller
|
|
105
|
+
content.
|
|
106
|
+
- **AV2 — Theme paint.** Themes may restyle the row and marker targets.
|
|
107
|
+
|
|
108
|
+
### Representative states
|
|
109
|
+
|
|
110
|
+
| State | Required invariant | Allowed variation |
|
|
111
|
+
| --------------- | -------------------------------------- | ---------------------- |
|
|
112
|
+
| Unchecked | `aria-checked="false"`; marker empty. | Content. |
|
|
113
|
+
| Checked | `aria-checked="true"`; marker checked. | Content. |
|
|
114
|
+
| Close on select | An enabled toggle closes the menu. | — |
|
|
115
|
+
| Disabled | `aria-disabled="true"`; no activation. | Content stays visible. |
|
|
116
|
+
|
|
117
|
+
### Transformation and precedence order
|
|
118
|
+
|
|
119
|
+
- **ORD1 — Activation.** Disabled guard → `onChange(!value)` → close when
|
|
120
|
+
`hasCloseOnSelect` → caller `onClick`.
|
|
121
|
+
|
|
122
|
+
### Performance and resources
|
|
123
|
+
|
|
124
|
+
- **PR1 — Shared press listeners.** The row shares the press controller's
|
|
125
|
+
window and document listeners; it adds no per-row listener, observer, timer,
|
|
126
|
+
or request.
|
|
127
|
+
|
|
128
|
+
## Accessibility contract
|
|
129
|
+
|
|
130
|
+
- **AR1 — One checkbox control.** The row owns `menuitemcheckbox`, its
|
|
131
|
+
accessible name, checked state, focus, and activation; the marker is
|
|
132
|
+
decorative.
|
|
133
|
+
- **AR2 — Disabled state.** A disabled row is inert.
|
|
134
|
+
- **AR3 — Focus visibility.** Keyboard focus paints only the menu overlay
|
|
135
|
+
tint, about 1.1:1 against the menu surface in the default themes, with no
|
|
136
|
+
outline, and nothing under forced colors. The shared row treatment is
|
|
137
|
+
`component:DropdownMenuItem` OQ2.
|
|
138
|
+
|
|
139
|
+
## Design relationships
|
|
140
|
+
|
|
141
|
+
| Anatomy or state | Design requirement | Representation authority | Hierarchy role | Component contract |
|
|
142
|
+
| ---------------- | -------------------------- | ------------------------ | -------------- | ------------------ |
|
|
143
|
+
| Row | One full-width toggle row. | Current source | Prominent | FR1, FR5 |
|
|
144
|
+
| Marker | Shows the checked state. | `component:Indicator` | Supporting | FR1, FR5 |
|
|
145
|
+
|
|
146
|
+
The shared `DropdownMenu.doc.mjs` anatomy and `component:DropdownMenu` theming
|
|
147
|
+
anatomy map the row and checkbox indicator, so this record carries no
|
|
148
|
+
anatomy-theming map.
|
|
149
|
+
|
|
150
|
+
## Family and system relationships
|
|
151
|
+
|
|
152
|
+
- `component:DropdownMenu` owns the keyboard model and close lifecycle.
|
|
153
|
+
- `component:Indicator` owns the checkbox chrome.
|
|
154
|
+
- `architecture:public-component-api` owns root composition and handler order.
|
|
155
|
+
|
|
156
|
+
## Verification map
|
|
157
|
+
|
|
158
|
+
| Contract | Verification | Representative states | Mutation or failure expectation | Audit section |
|
|
159
|
+
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
|
|
160
|
+
| FR1, AR1 | `DropdownMenuSelectable.test.tsx` "keeps the checkbox indicator decorative (row is the only announced control)"; "a ref reaches the menuitemcheckbox element" | Checked and unchecked | An announced marker or a row that is not `menuitemcheckbox` fails. | `audit:DropdownMenuCheckboxItem/semantics` |
|
|
161
|
+
| FR2, ORD1 | `DropdownMenuSelectable.test.tsx` "calls onChange with the toggled value on click", "composes the caller click handler with the checked-state change", "composes the caller click handler on keyboard activation", "closes after a successful toggle only when requested"; `DropdownMenu.test.tsx` "activates a focused menuitemradio with Enter and a menuitemcheckbox with Space" | Pointer and keyboard; close on and off | A wrong value, a dropped caller `onClick`, or a close without the opt-in fails. Evidence gap: no test asserts the `onChange`, close, `onClick` order. | `audit:DropdownMenuCheckboxItem/behavior` |
|
|
162
|
+
| FR3, AR2 | `DropdownMenuSelectable.test.tsx` "does not call consumer activation handlers when disabled" and "does not toggle when disabled" | Disabled | A toggle or caller handler while disabled fails. Evidence gap: no test asserts the absent `tabindex`. | `audit:DropdownMenuCheckboxItem/behavior` |
|
|
163
|
+
| FR4 | `DropdownMenuSelectable.test.tsx` "composes the caller pointer-move handler with menu hover focus" and "a ref reaches the menuitemcheckbox element" | Ref; pointer move | A dropped ref or handler fails. Evidence gap: no test asserts host attributes, `className`, `style`, or `xstyle` on the row. | `audit:DropdownMenuCheckboxItem/api` |
|
|
164
|
+
| FR5 | `DropdownMenuSelectable.test.tsx` "maps a small menu to the small shared checkbox marker" | Small menu | A marker that ignores the menu size fails. Evidence gap: no test asserts the `dropdown-menu-item` target on this row. | `audit:DropdownMenuCheckboxItem/theming` |
|
|
165
|
+
| FR6 | `DropdownMenu.test.tsx` "arrow navigation reaches consumer-rendered menuitemradio and menuitemcheckbox items" and "skips aria-disabled menuitemradio and menuitemcheckbox items during arrow navigation" | Enabled and disabled rows | A row the arrows miss, or a disabled row they land on, fails. | `audit:DropdownMenuCheckboxItem/accessibility` |
|
|
166
|
+
| AR3, PR1 | Evidence gap: no test asserts the focus paint or the listener bound | — | — | `audit:DropdownMenuCheckboxItem/behavior` |
|
|
167
|
+
|
|
168
|
+
## Current-state impact
|
|
169
|
+
|
|
170
|
+
- **Focus visibility (AR3).** Keyboard focus on a checkbox row shows only an
|
|
171
|
+
overlay tint about 1.1:1 against the menu surface, and no indicator in
|
|
172
|
+
forced-colors mode; the shared row treatment is `component:DropdownMenuItem`
|
|
173
|
+
OQ2.
|
|
174
|
+
- **Enter keeps the menu open (FR2).** Enter on a checkbox row toggles it and
|
|
175
|
+
leaves the menu open by default, against the Menu pattern's Enter that
|
|
176
|
+
`spec:AST-020` FR15 adopts, with no named exception (OQ1).
|
|
177
|
+
|
|
178
|
+
## Decision log
|
|
179
|
+
|
|
180
|
+
No component-local decision.
|
|
181
|
+
|
|
182
|
+
## Open questions
|
|
183
|
+
|
|
184
|
+
- **OQ1 — Does a checkbox row keep the menu open on Enter as a named
|
|
185
|
+
exception to the Menu pattern, or close like other rows?** (`human-api`)
|
|
186
|
+
Keeping it open lets a person toggle several options in one visit; closing
|
|
187
|
+
matches the pattern's Enter and the other row types.
|
|
188
|
+
|
|
189
|
+
## Content boundary
|
|
190
|
+
|
|
191
|
+
This file does not duplicate consumer prop tables/examples, current audit
|
|
192
|
+
results, implementation steps, or parent contracts. It links to their owners.
|
|
@@ -3,11 +3,11 @@ schema_version: 3
|
|
|
3
3
|
template_version: 7
|
|
4
4
|
kind: component
|
|
5
5
|
id: component:DropdownMenuDivider
|
|
6
|
-
authority:
|
|
6
|
+
authority: current
|
|
7
7
|
archive_reason: null
|
|
8
8
|
superseded_by: null
|
|
9
|
-
approved_by:
|
|
10
|
-
approved_at:
|
|
9
|
+
approved_by: cixzhang
|
|
10
|
+
approved_at: 2026-10-31
|
|
11
11
|
owners: [cixzhang]
|
|
12
12
|
review_triggers: [public-api, behavior, theming, accessibility, testing]
|
|
13
13
|
verified_by:
|
|
@@ -16,7 +16,6 @@ verified_by:
|
|
|
16
16
|
packages/core/src/ContextMenu/ContextMenu.test.tsx,
|
|
17
17
|
packages/core/src/Breadcrumbs/Breadcrumbs.test.tsx,
|
|
18
18
|
packages/core/src/theme/themingTargets.test.ts,
|
|
19
|
-
apps/storybook/stories/DropdownMenuDivider.stories.tsx,
|
|
20
19
|
scripts/check-knowledge.mjs,
|
|
21
20
|
]
|
|
22
21
|
modules: []
|
|
@@ -29,7 +28,7 @@ architecture:
|
|
|
29
28
|
architecture:component-test-sufficiency,
|
|
30
29
|
]
|
|
31
30
|
contributing: []
|
|
32
|
-
system_specs: [spec:AST-020
|
|
31
|
+
system_specs: [spec:AST-020]
|
|
33
32
|
---
|
|
34
33
|
|
|
35
34
|
# DropdownMenuDivider component contract
|
|
@@ -42,9 +41,9 @@ system_specs: [spec:AST-020, spec:AST-029]
|
|
|
42
41
|
| Behavior | One unlabelled horizontal separator divides pointer-menu rows and stays out of arrow-key order; data and compound pointer modes render the same component. |
|
|
43
42
|
| End-user impact | Pointer-menu sections remain visually separated without adding a focus stop or changing row operation. |
|
|
44
43
|
| Builder impact | No new caller choice. Host attributes, handlers, and styling inputs continue to compose on the separator. |
|
|
45
|
-
| Compatibility/readiness |
|
|
44
|
+
| Compatibility/readiness | Records shipped behavior; no API, default, or DOM change. |
|
|
46
45
|
| Review checks | Reject a focusable separator, changed role/orientation, pointer data/compound divergence, dropped root inputs, or a target moved off the visible separator. |
|
|
47
|
-
| Governing rules | `architecture:public-component-api/INV1,INV5–INV9`; `architecture:component-theming-surface/INV3–INV6`;
|
|
46
|
+
| Governing rules | `architecture:public-component-api/INV1,INV5–INV9`; `architecture:component-theming-surface/INV3–INV6`; `spec:AST-020`. |
|
|
48
47
|
|
|
49
48
|
This table is a review projection; the body below is authoritative.
|
|
50
49
|
|
|
@@ -63,7 +62,8 @@ Consumer syntax and examples belong in `DropdownMenuDivider.doc.mjs`.
|
|
|
63
62
|
## Compatibility and migration
|
|
64
63
|
|
|
65
64
|
- Released default preserved: yes — one horizontal, unlabelled separator.
|
|
66
|
-
- Compatibility class:
|
|
65
|
+
- Compatibility class: records shipped behavior; no public prop, default,
|
|
66
|
+
export, or DOM change.
|
|
67
67
|
- Controlled/uncontrolled behavior: not applicable.
|
|
68
68
|
- Migration decision: none.
|
|
69
69
|
|
|
@@ -98,16 +98,13 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
98
98
|
|
|
99
99
|
## Behavioral and layout contract
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
| FR3 | In pointer-menu presentation, `{type: "divider"}` in the data API and the compound divider component or alias MUST render the same component DOM, spacing, semantics, and targets. | Released docs/source; data/compound parity test | verify |
|
|
109
|
-
| FR4 | The visible root MUST carry both the delegated `divider` target and the menu-specific `dropdown-menu-divider` target; menu spacing applies before caller `xstyle`. | `architecture:component-theming-surface/INV3–INV6`; source/tests | verify |
|
|
110
|
-
| FR5 | Accepted ref, DOM/data/ARIA, class, style, events, and `xstyle` MUST reach or compose on the separator root without replacing component-owned role or orientation. | `architecture:public-component-api/INV5–INV8` | verify |
|
|
101
|
+
| ID | Invariant | Basis |
|
|
102
|
+
| --- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
|
|
103
|
+
| FR1 | The component renders one unlabelled horizontal separator with pointer-menu-specific block spacing. | Released source/docs and focused tests |
|
|
104
|
+
| FR2 | The root exposes `role="separator"` and `aria-orientation="horizontal"`, stays outside menu-item collection and arrow-key order, and is never focusable. | `spec:AST-020`; current tests |
|
|
105
|
+
| FR3 | In pointer-menu presentation, `{type: "divider"}` in the data API and the compound divider component or alias render the same component DOM, spacing, semantics, and targets. | Released docs/source; data/compound parity test |
|
|
106
|
+
| FR4 | The visible root carries both the delegated `divider` target and the menu-specific `dropdown-menu-divider` target; menu spacing applies before caller `xstyle`. | `architecture:component-theming-surface`; current source and tests |
|
|
107
|
+
| FR5 | Accepted ref, DOM/data/ARIA, class, style, events, and `xstyle` reach or compose on the separator root without replacing component-owned role or orientation. | `architecture:public-component-api` INV5–INV8; current tests |
|
|
111
108
|
|
|
112
109
|
### Allowed variation
|
|
113
110
|
|
|
@@ -151,7 +148,7 @@ intentional decision.
|
|
|
151
148
|
| ---------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------- | ------------------ |
|
|
152
149
|
| Menu separator | Visually separates adjacent menu row groups without competing with row content. | Current source and delegated Divider tokens; no component-local visual decision added | supporting | FR1–FR4 |
|
|
153
150
|
|
|
154
|
-
No component-local visual decision is
|
|
151
|
+
No component-local visual decision is recorded.
|
|
155
152
|
|
|
156
153
|
## Family and system relationships
|
|
157
154
|
|
|
@@ -164,22 +161,20 @@ No component-local visual decision is settled by this draft.
|
|
|
164
161
|
props aliases; their pointer presentations retain the same component contract.
|
|
165
162
|
- Touch and bottom-sheet data dividers bypass this component and delegate directly
|
|
166
163
|
to Divider under the parent menu contract.
|
|
167
|
-
- Divider provides the base separator implementation
|
|
168
|
-
observational context, not authority for this contract.
|
|
169
|
-
- `spec:AST-029` keeps this observational draft separate from the audit receipt.
|
|
164
|
+
- Divider provides the base separator implementation.
|
|
170
165
|
|
|
171
166
|
## Verification map
|
|
172
167
|
|
|
173
|
-
| Contract
|
|
174
|
-
|
|
|
175
|
-
| FR1
|
|
176
|
-
|
|
|
177
|
-
| FR5
|
|
178
|
-
| PR1
|
|
168
|
+
| Contract | Verification | Representative states | Mutation or failure expectation | Audit section |
|
|
169
|
+
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- |
|
|
170
|
+
| FR1, FR2, AR1, AR2 | `DropdownMenu.test.tsx` divider and parity cases ("renders dividers between items", "renders an identical divider from either mode", "skips a compound divider in the arrow-key order", "forwards host attributes to a compound divider while keeping its role"); `ContextMenu.test.tsx` divider cases; `Breadcrumbs.test.tsx` "renders the separator and props types through the BreadcrumbMenuDivider aliases" | Data and compound pointer menus; aliases; arrow traversal | A missing separator, a changed role, a separator in the arrow-key order, or a lost alias fails. Evidence gap: no test asserts `aria-orientation` or the menu block spacing. | `audit:DropdownMenuDivider/semantics` |
|
|
171
|
+
| FR3 | `DropdownMenu.test.tsx` "renders an identical divider from either mode" | Data and compound | Different DOM between the modes fails. | `audit:DropdownMenuDivider/behavior` |
|
|
172
|
+
| FR4, FR5 | `DropdownMenu.test.tsx` "composes the complete public root surface on the separator" and the parity case's `dropdown-menu-divider` class assertion; `themingTargets.test.ts` | Ref, class, style, xstyle, handler | A dropped ref, class, style, `xstyle`, or handler, or a missing `dropdown-menu-divider` target, fails. Evidence gap: no test asserts the delegated `divider` target or that menu spacing applies before caller `xstyle`. | `audit:DropdownMenuDivider/api` |
|
|
173
|
+
| PR1 | Evidence gap: no test asserts the absence of lifecycle resources | — | — | `audit:DropdownMenuDivider/behavior` |
|
|
179
174
|
|
|
180
175
|
## Decision log
|
|
181
176
|
|
|
182
|
-
|
|
177
|
+
No component-local decision.
|
|
183
178
|
|
|
184
179
|
## Open questions
|
|
185
180
|
|
|
@@ -188,5 +183,4 @@ None.
|
|
|
188
183
|
## Content boundary
|
|
189
184
|
|
|
190
185
|
This file does not duplicate consumer prop tables/examples, current audit scores,
|
|
191
|
-
screenshot matrices, implementation steps, or system rules.
|
|
192
|
-
owns the closed run evidence required by `spec:AST-029/FR5`.
|
|
186
|
+
screenshot matrices, implementation steps, or system rules. It links to their owners.
|