@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
|
@@ -9,7 +9,15 @@
|
|
|
9
9
|
* SYNC: When MultiSelector.tsx API changes, update these tests.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
describe,
|
|
14
|
+
it,
|
|
15
|
+
expect,
|
|
16
|
+
vi,
|
|
17
|
+
beforeAll,
|
|
18
|
+
beforeEach,
|
|
19
|
+
afterEach,
|
|
20
|
+
} from 'vitest';
|
|
13
21
|
import {
|
|
14
22
|
act,
|
|
15
23
|
render,
|
|
@@ -26,6 +34,7 @@ import {
|
|
|
26
34
|
type MultiSelectorChange,
|
|
27
35
|
} from './MultiSelector';
|
|
28
36
|
import {useRef, useState} from 'react';
|
|
37
|
+
import {Dialog} from '../Dialog/Dialog';
|
|
29
38
|
import {Icon} from '../Icon';
|
|
30
39
|
import {InternationalizationProvider} from '../i18n';
|
|
31
40
|
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
@@ -65,6 +74,15 @@ function politeRegion(): HTMLElement | null {
|
|
|
65
74
|
}
|
|
66
75
|
|
|
67
76
|
// Mock showPopover and hidePopover methods since they're not implemented in jsdom
|
|
77
|
+
// The bottom-sheet presentation renders BottomSheet through React.lazy. Its
|
|
78
|
+
// first import transforms the BottomSheet module tree, which on a loaded
|
|
79
|
+
// runner takes longer than a query's 1 s wait, so the first sheet test timed
|
|
80
|
+
// out before the dialog existed. Load the module once up front: lazy() then
|
|
81
|
+
// resolves from the module cache and every sheet test waits only on the open.
|
|
82
|
+
beforeAll(async () => {
|
|
83
|
+
await import('../BottomSheet/BottomSheet');
|
|
84
|
+
});
|
|
85
|
+
|
|
68
86
|
beforeEach(() => {
|
|
69
87
|
__resetInteractionModalityForTest();
|
|
70
88
|
HTMLDialogElement.prototype.showModal = vi.fn(function (
|
|
@@ -128,6 +146,13 @@ function expectSilentBusySpinner() {
|
|
|
128
146
|
expect(screen.queryByRole('status', {name: 'Loading'})).toBeNull();
|
|
129
147
|
}
|
|
130
148
|
|
|
149
|
+
// The bottom sheet is loaded on demand (SelectorBottomSheet's lazy import).
|
|
150
|
+
// Loading its module is not part of an open, so the file waits for it once
|
|
151
|
+
// here, and each test's open waits only for the open.
|
|
152
|
+
beforeAll(async () => {
|
|
153
|
+
await import('../BottomSheet/BottomSheet');
|
|
154
|
+
});
|
|
155
|
+
|
|
131
156
|
describe('MultiSelector', () => {
|
|
132
157
|
const defaultOptions = ['Apple', 'Banana', 'Orange'];
|
|
133
158
|
|
|
@@ -1388,6 +1413,58 @@ describe('MultiSelector', () => {
|
|
|
1388
1413
|
expect(within(listbox).getByText('Add a fruit first')).toBeInTheDocument();
|
|
1389
1414
|
});
|
|
1390
1415
|
|
|
1416
|
+
describe('count trigger text', () => {
|
|
1417
|
+
it('shows the default count in the catalog message', () => {
|
|
1418
|
+
render(
|
|
1419
|
+
<MultiSelector
|
|
1420
|
+
label="Fruit"
|
|
1421
|
+
options={defaultOptions}
|
|
1422
|
+
value={['Apple', 'Banana']}
|
|
1423
|
+
onChange={() => {}}
|
|
1424
|
+
triggerDisplay="count"
|
|
1425
|
+
/>,
|
|
1426
|
+
);
|
|
1427
|
+
expect(screen.getByText('2 selected')).toBeInTheDocument();
|
|
1428
|
+
});
|
|
1429
|
+
|
|
1430
|
+
it('translates the default count, with plural forms, under another locale', () => {
|
|
1431
|
+
render(
|
|
1432
|
+
<InternationalizationProvider
|
|
1433
|
+
locale="fr"
|
|
1434
|
+
overrides={{
|
|
1435
|
+
fr: {
|
|
1436
|
+
'@astryx.multiSelector.selectedCount':
|
|
1437
|
+
'{count, number} {count, plural, one {sélectionné} other {sélectionnés}}',
|
|
1438
|
+
},
|
|
1439
|
+
}}>
|
|
1440
|
+
<MultiSelector
|
|
1441
|
+
label="Fruit"
|
|
1442
|
+
options={defaultOptions}
|
|
1443
|
+
value={['Apple', 'Banana']}
|
|
1444
|
+
onChange={() => {}}
|
|
1445
|
+
triggerDisplay="count"
|
|
1446
|
+
/>
|
|
1447
|
+
</InternationalizationProvider>,
|
|
1448
|
+
);
|
|
1449
|
+
expect(screen.getByText('2 sélectionnés')).toBeInTheDocument();
|
|
1450
|
+
expect(screen.queryByText('2 selected')).not.toBeInTheDocument();
|
|
1451
|
+
});
|
|
1452
|
+
|
|
1453
|
+
it('still lets formatValue replace the count text', () => {
|
|
1454
|
+
render(
|
|
1455
|
+
<MultiSelector
|
|
1456
|
+
label="Fruit"
|
|
1457
|
+
options={defaultOptions}
|
|
1458
|
+
value={['Apple', 'Banana']}
|
|
1459
|
+
onChange={() => {}}
|
|
1460
|
+
triggerDisplay="count"
|
|
1461
|
+
formatValue={items => `${items.length} fruits`}
|
|
1462
|
+
/>,
|
|
1463
|
+
);
|
|
1464
|
+
expect(screen.getByText('2 fruits')).toBeInTheDocument();
|
|
1465
|
+
});
|
|
1466
|
+
});
|
|
1467
|
+
|
|
1391
1468
|
describe('result announcements', () => {
|
|
1392
1469
|
it('announces the match count politely while searching', async () => {
|
|
1393
1470
|
const user = userEvent.setup();
|
|
@@ -3436,6 +3513,47 @@ describe('MultiSelector trigger render prop', () => {
|
|
|
3436
3513
|
expect(screen.queryByText('Labels')).toBeNull();
|
|
3437
3514
|
});
|
|
3438
3515
|
|
|
3516
|
+
// spec:AST-055 AR3: a light dismiss returns focus to the caller's control,
|
|
3517
|
+
// even when the press that closed the list focused another field.
|
|
3518
|
+
it('returns focus to the caller control after a light dismiss onto another field', async () => {
|
|
3519
|
+
const user = userEvent.setup();
|
|
3520
|
+
render(
|
|
3521
|
+
<>
|
|
3522
|
+
<MultiSelector
|
|
3523
|
+
label="Labels"
|
|
3524
|
+
options={OPTIONS}
|
|
3525
|
+
value={[]}
|
|
3526
|
+
onChange={() => {}}
|
|
3527
|
+
renderTrigger={props => (
|
|
3528
|
+
<button type="button" {...props}>
|
|
3529
|
+
Pick labels
|
|
3530
|
+
</button>
|
|
3531
|
+
)}
|
|
3532
|
+
/>
|
|
3533
|
+
<input aria-label="Notes" />
|
|
3534
|
+
</>,
|
|
3535
|
+
);
|
|
3536
|
+
const opener = screen.getByRole('button', {name: 'Pick labels'});
|
|
3537
|
+
await user.click(opener);
|
|
3538
|
+
expect(opener).toHaveAttribute('aria-expanded', 'true');
|
|
3539
|
+
|
|
3540
|
+
act(() => {
|
|
3541
|
+
screen.getByRole('textbox', {name: 'Notes'}).focus();
|
|
3542
|
+
});
|
|
3543
|
+
const popover = document.querySelector('[popover]') as HTMLElement;
|
|
3544
|
+
act(() => {
|
|
3545
|
+
popover.dispatchEvent(
|
|
3546
|
+
Object.assign(new Event('toggle'), {
|
|
3547
|
+
oldState: 'open',
|
|
3548
|
+
newState: 'closed',
|
|
3549
|
+
}),
|
|
3550
|
+
);
|
|
3551
|
+
});
|
|
3552
|
+
|
|
3553
|
+
expect(opener).toHaveAttribute('aria-expanded', 'false');
|
|
3554
|
+
expect(opener).toHaveFocus();
|
|
3555
|
+
});
|
|
3556
|
+
|
|
3439
3557
|
it('opens against the caller control and names the listbox by label', async () => {
|
|
3440
3558
|
const user = userEvent.setup();
|
|
3441
3559
|
render(
|
|
@@ -3720,6 +3838,157 @@ describe('MultiSelector hasCreate', () => {
|
|
|
3720
3838
|
expect(search).toHaveValue('');
|
|
3721
3839
|
});
|
|
3722
3840
|
|
|
3841
|
+
it('says only the latest status when several keystrokes land in one frame (spec:AST-086 FR9)', async () => {
|
|
3842
|
+
// A barcode scanner, dictation or automation types faster than a frame:
|
|
3843
|
+
// each keystroke states the panel's status through the search's
|
|
3844
|
+
// `hasReplace` announcer, so a status the next keystroke replaces before
|
|
3845
|
+
// it is exposed is withdrawn, not joined.
|
|
3846
|
+
const user = userEvent.setup();
|
|
3847
|
+
render(
|
|
3848
|
+
<MultiSelector
|
|
3849
|
+
label="Labels"
|
|
3850
|
+
options={OPTIONS}
|
|
3851
|
+
value={['bug']}
|
|
3852
|
+
onChange={() => {}}
|
|
3853
|
+
hasSearch
|
|
3854
|
+
hasCreate
|
|
3855
|
+
/>,
|
|
3856
|
+
);
|
|
3857
|
+
await user.click(screen.getByRole('button', {name: 'Labels'}));
|
|
3858
|
+
const search = screen.getByRole('combobox', h);
|
|
3859
|
+
for (const value of ['Ur', 'Urg', 'Urge', 'Urgent']) {
|
|
3860
|
+
fireEvent.change(search, {target: {value}});
|
|
3861
|
+
}
|
|
3862
|
+
await act(
|
|
3863
|
+
async () =>
|
|
3864
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3865
|
+
);
|
|
3866
|
+
expect(politeRegion()?.textContent).toBe('Create "Urgent"');
|
|
3867
|
+
});
|
|
3868
|
+
|
|
3869
|
+
it('says only the empty panel’s message when the next keystroke in the frame empties the panel (spec:AST-086 FR13)', async () => {
|
|
3870
|
+
const user = userEvent.setup();
|
|
3871
|
+
render(
|
|
3872
|
+
<MultiSelector
|
|
3873
|
+
label="Labels"
|
|
3874
|
+
options={OPTIONS}
|
|
3875
|
+
value={[]}
|
|
3876
|
+
onChange={() => {}}
|
|
3877
|
+
hasSearch
|
|
3878
|
+
/>,
|
|
3879
|
+
);
|
|
3880
|
+
await user.click(screen.getByRole('button', {name: 'Labels'}));
|
|
3881
|
+
const search = screen.getByRole('combobox', h);
|
|
3882
|
+
// "Fe" matches Feature; "Fex" matches nothing, in the same frame.
|
|
3883
|
+
fireEvent.change(search, {target: {value: 'Fe'}});
|
|
3884
|
+
fireEvent.change(search, {target: {value: 'Fex'}});
|
|
3885
|
+
await act(
|
|
3886
|
+
async () =>
|
|
3887
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3888
|
+
);
|
|
3889
|
+
expect(politeRegion()?.textContent).toBe('No results found');
|
|
3890
|
+
});
|
|
3891
|
+
|
|
3892
|
+
it('says only the count when the next keystroke in the frame fills an empty panel (spec:AST-086 FR13)', async () => {
|
|
3893
|
+
// The empty panel's message comes from the search's `hasReplace`
|
|
3894
|
+
// announcer too, so the count that follows it in the frame replaces it.
|
|
3895
|
+
const user = userEvent.setup();
|
|
3896
|
+
render(
|
|
3897
|
+
<MultiSelector
|
|
3898
|
+
label="Labels"
|
|
3899
|
+
options={OPTIONS}
|
|
3900
|
+
value={[]}
|
|
3901
|
+
onChange={() => {}}
|
|
3902
|
+
hasSearch
|
|
3903
|
+
/>,
|
|
3904
|
+
);
|
|
3905
|
+
await user.click(screen.getByRole('button', {name: 'Labels'}));
|
|
3906
|
+
const search = screen.getByRole('combobox', h);
|
|
3907
|
+
fireEvent.change(search, {target: {value: 'Fex'}});
|
|
3908
|
+
fireEvent.change(search, {target: {value: 'Fe'}});
|
|
3909
|
+
await act(
|
|
3910
|
+
async () =>
|
|
3911
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3912
|
+
);
|
|
3913
|
+
expect(politeRegion()?.textContent).toBe('1 result');
|
|
3914
|
+
});
|
|
3915
|
+
|
|
3916
|
+
it('says only the empty panel’s message from inside a modal when the next keystroke in the frame empties the panel (spec:AST-086 FR14)', async () => {
|
|
3917
|
+
// Inside an open modal the search's announcer writes to the modal's own
|
|
3918
|
+
// container, which replaces the same way.
|
|
3919
|
+
HTMLDialogElement.prototype.showModal = vi.fn(function (
|
|
3920
|
+
this: HTMLDialogElement,
|
|
3921
|
+
) {
|
|
3922
|
+
this.setAttribute('open', '');
|
|
3923
|
+
this.dataset.modal = 'true';
|
|
3924
|
+
});
|
|
3925
|
+
// The file's own `matches` stand-in (for :popover-open) sits on
|
|
3926
|
+
// HTMLElement.prototype; :modal is added on top of it.
|
|
3927
|
+
const matches = HTMLElement.prototype.matches;
|
|
3928
|
+
vi.spyOn(HTMLElement.prototype, 'matches').mockImplementation(function (
|
|
3929
|
+
this: HTMLElement,
|
|
3930
|
+
selector: string,
|
|
3931
|
+
) {
|
|
3932
|
+
return selector === ':modal'
|
|
3933
|
+
? this instanceof HTMLDialogElement &&
|
|
3934
|
+
this.open &&
|
|
3935
|
+
this.dataset.modal === 'true'
|
|
3936
|
+
: matches.call(this, selector);
|
|
3937
|
+
});
|
|
3938
|
+
const user = userEvent.setup();
|
|
3939
|
+
render(
|
|
3940
|
+
<Dialog isOpen onOpenChange={() => {}} aria-label="Edit labels">
|
|
3941
|
+
<MultiSelector
|
|
3942
|
+
label="Labels"
|
|
3943
|
+
options={OPTIONS}
|
|
3944
|
+
value={[]}
|
|
3945
|
+
onChange={() => {}}
|
|
3946
|
+
hasSearch
|
|
3947
|
+
/>
|
|
3948
|
+
</Dialog>,
|
|
3949
|
+
);
|
|
3950
|
+
const dialog = screen.getByRole('dialog', {name: 'Edit labels'});
|
|
3951
|
+
await user.click(screen.getByRole('button', {name: 'Labels'}));
|
|
3952
|
+
const search = screen.getByRole('combobox', h);
|
|
3953
|
+
fireEvent.change(search, {target: {value: 'Fe'}});
|
|
3954
|
+
fireEvent.change(search, {target: {value: 'Fex'}});
|
|
3955
|
+
await act(
|
|
3956
|
+
async () =>
|
|
3957
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3958
|
+
);
|
|
3959
|
+
expect(
|
|
3960
|
+
dialog.querySelector(':scope > [data-astryx-modal-live-region="polite"]')
|
|
3961
|
+
?.textContent,
|
|
3962
|
+
).toBe('No results found');
|
|
3963
|
+
});
|
|
3964
|
+
|
|
3965
|
+
it('still says a selection change and a result count from the same frame: each has its own announcer (spec:AST-086 FR9)', async () => {
|
|
3966
|
+
const user = userEvent.setup();
|
|
3967
|
+
render(
|
|
3968
|
+
<MultiSelector
|
|
3969
|
+
label="Labels"
|
|
3970
|
+
options={OPTIONS}
|
|
3971
|
+
value={[]}
|
|
3972
|
+
onChange={() => {}}
|
|
3973
|
+
hasSearch
|
|
3974
|
+
/>,
|
|
3975
|
+
);
|
|
3976
|
+
await user.click(screen.getByRole('button', {name: 'Labels'}));
|
|
3977
|
+
await act(
|
|
3978
|
+
async () =>
|
|
3979
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3980
|
+
);
|
|
3981
|
+
fireEvent.click(screen.getByRole('option', {name: 'Bug', hidden: true}));
|
|
3982
|
+
fireEvent.change(screen.getByRole('combobox', h), {
|
|
3983
|
+
target: {value: 'Fe'},
|
|
3984
|
+
});
|
|
3985
|
+
await act(
|
|
3986
|
+
async () =>
|
|
3987
|
+
new Promise<void>(resolve => requestAnimationFrame(() => resolve())),
|
|
3988
|
+
);
|
|
3989
|
+
expect(politeRegion()?.textContent).toBe('1 of 3 selected 1 result');
|
|
3990
|
+
});
|
|
3991
|
+
|
|
3723
3992
|
it('a plain toggle passes no descriptor, so a one-argument handler is unchanged', async () => {
|
|
3724
3993
|
const user = userEvent.setup();
|
|
3725
3994
|
const onChange = vi.fn();
|
|
@@ -905,7 +905,7 @@ export interface MultiSelectorProps<
|
|
|
905
905
|
* Not called when nothing is selected — the placeholder shows instead — and
|
|
906
906
|
* not called for triggerDisplay 'badges', which renders Badge elements
|
|
907
907
|
* rather than text.
|
|
908
|
-
* @default
|
|
908
|
+
* @default the translated `@astryx.multiSelector.selectedCount` message ("2 selected") for 'count', "A, B, C, +N" for 'labels'
|
|
909
909
|
*/
|
|
910
910
|
formatValue?: (items: MultiSelectorSelectedItem[]) => string;
|
|
911
911
|
|
|
@@ -1450,6 +1450,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1450
1450
|
onHide: handleLayerHide,
|
|
1451
1451
|
onShow: handleLayerShow,
|
|
1452
1452
|
triggerRef,
|
|
1453
|
+
isFocusReturnAlways: hasExternalTrigger,
|
|
1453
1454
|
popoverOptions: {
|
|
1454
1455
|
hasLightDismiss: true,
|
|
1455
1456
|
hasCloseButton: false,
|
|
@@ -1546,21 +1547,27 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1546
1547
|
// Announce the filtered result count from the query-change handler (matching
|
|
1547
1548
|
// BaseTypeahead) rather than a reactive effect: computing the count for the
|
|
1548
1549
|
// next query here fires the announcement exactly once per keystroke and does
|
|
1549
|
-
// not re-speak on unrelated re-renders.
|
|
1550
|
-
//
|
|
1550
|
+
// not re-speak on unrelated re-renders. The count, the create row and the
|
|
1551
|
+
// empty panel's message state one thing, how the search ended, so they go
|
|
1552
|
+
// through the search's own `hasReplace` announcer: one the next keystroke
|
|
1553
|
+
// replaces before it is exposed is withdrawn rather than joined
|
|
1554
|
+
// (`spec:AST-086` FR9, FR13), and keystrokes arriving within one frame,
|
|
1555
|
+
// from a scanner, dictation or automation, say only the last query's.
|
|
1556
|
+
// Selection changes keep the plain announcer above, so they still join.
|
|
1557
|
+
const announceSearch = useAnnounce({hasReplace: true});
|
|
1551
1558
|
const handleSearchChange = useCallback(
|
|
1552
1559
|
(nextQuery: string) => {
|
|
1553
1560
|
setSearchQuery(nextQuery);
|
|
1554
1561
|
if (nextQuery.length === 0) {
|
|
1555
1562
|
// Emptying the query clears the region rather than announcing a count.
|
|
1556
|
-
|
|
1563
|
+
announceSearch('');
|
|
1557
1564
|
return;
|
|
1558
1565
|
}
|
|
1559
1566
|
// While isLoading the panel deliberately shows nothing, so announcing a
|
|
1560
1567
|
// result would put a claim in the one channel the screen has gone quiet
|
|
1561
1568
|
// for.
|
|
1562
1569
|
if (isLoading) {
|
|
1563
|
-
|
|
1570
|
+
announceSearch('');
|
|
1564
1571
|
return;
|
|
1565
1572
|
}
|
|
1566
1573
|
const count = filterOptionsByQuery(selectableItems, nextQuery).length;
|
|
@@ -1570,7 +1577,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1570
1577
|
// The create row is the one result on screen, so the panel is not
|
|
1571
1578
|
// empty and the rendered-message route below stays silent; say the
|
|
1572
1579
|
// row.
|
|
1573
|
-
|
|
1580
|
+
announceSearch(
|
|
1574
1581
|
t('@astryx.multiSelector.createOption', {query: nextCreateQuery}),
|
|
1575
1582
|
);
|
|
1576
1583
|
return;
|
|
@@ -1581,9 +1588,9 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1581
1588
|
// keystroke — an async load landing with nothing that matches.
|
|
1582
1589
|
return;
|
|
1583
1590
|
}
|
|
1584
|
-
|
|
1591
|
+
announceSearch(t('@astryx.multiSelector.resultCount', {count}));
|
|
1585
1592
|
},
|
|
1586
|
-
[
|
|
1593
|
+
[announceSearch, isLoading, selectableItems, getCreateQuery, t],
|
|
1587
1594
|
);
|
|
1588
1595
|
|
|
1589
1596
|
// The panel's empty message is role="presentation" — role="listbox" permits
|
|
@@ -1608,7 +1615,12 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1608
1615
|
const realItemCount = sortedItems.length - leadingCount;
|
|
1609
1616
|
const isPanelEmpty =
|
|
1610
1617
|
surface.isOpen && !isLoading && realItemCount === 0 && !hasCreateRow;
|
|
1611
|
-
|
|
1618
|
+
// Through the search's announcer: the empty panel is how the search ended,
|
|
1619
|
+
// so it and the count replace each other while not yet exposed
|
|
1620
|
+
// (`spec:AST-086` FR13).
|
|
1621
|
+
useAnnounceRenderedText(emptyStateRef, isPanelEmpty, searchQuery, {
|
|
1622
|
+
announce: announceSearch,
|
|
1623
|
+
});
|
|
1612
1624
|
|
|
1613
1625
|
// Handle toggle
|
|
1614
1626
|
// Clear all selected values. Shared by the clear button and the keyboard
|
|
@@ -1890,7 +1902,9 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1890
1902
|
return (
|
|
1891
1903
|
<span {...stylex.props(styles.triggerText)}>
|
|
1892
1904
|
{formatValue?.(selectedItems) ??
|
|
1893
|
-
|
|
1905
|
+
t('@astryx.multiSelector.selectedCount', {
|
|
1906
|
+
count: optimisticValue.length,
|
|
1907
|
+
})}
|
|
1894
1908
|
</span>
|
|
1895
1909
|
);
|
|
1896
1910
|
|
|
@@ -1933,6 +1947,7 @@ export function MultiSelector<T extends MultiSelectorOptionType>({
|
|
|
1933
1947
|
placeholder,
|
|
1934
1948
|
formatValue,
|
|
1935
1949
|
maxBadges,
|
|
1950
|
+
t,
|
|
1936
1951
|
]);
|
|
1937
1952
|
|
|
1938
1953
|
// Render search input
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import {cleanup, render, screen, within} from '@testing-library/react';
|
|
11
11
|
import userEvent from '@testing-library/user-event';
|
|
12
|
-
import {describe, expect, it} from 'vitest';
|
|
12
|
+
import {beforeAll, describe, expect, it} from 'vitest';
|
|
13
13
|
import {
|
|
14
14
|
expectAccessibilitySpec,
|
|
15
15
|
LISTBOX_PATTERN,
|
|
@@ -23,6 +23,13 @@ import {installListboxDialogStubs} from '../../Selector/__tests__/Listbox.a11y.d
|
|
|
23
23
|
|
|
24
24
|
installListboxDialogStubs();
|
|
25
25
|
|
|
26
|
+
// The bottom sheet is loaded on demand (SelectorBottomSheet's lazy import).
|
|
27
|
+
// Loading its module is not part of an open, so the file waits for it once
|
|
28
|
+
// here, and each scenario's open waits only for the open.
|
|
29
|
+
beforeAll(async () => {
|
|
30
|
+
await import('../../BottomSheet/BottomSheet');
|
|
31
|
+
});
|
|
32
|
+
|
|
26
33
|
const scenarios = LISTBOX_SCENARIOS.filter(
|
|
27
34
|
scenario => scenario.component === 'MultiSelector',
|
|
28
35
|
);
|
|
@@ -44,7 +44,7 @@ system_specs: [spec:AST-005/DEC-1, spec:AST-020, spec:AST-085]
|
|
|
44
44
|
| Behavior | A `role="menu"` list of `menuitem` rows inside a heading popover, with arrow, Home, End, typeahead, Enter, Space, and Escape support. Selecting an enabled item runs it and, where the host heading supplies a close action, closes the heading menu. |
|
|
45
45
|
| End-user impact | Users switch products or accounts from the heading menu by pointer or keyboard; disabled rows are skipped by keyboard and typeahead. |
|
|
46
46
|
| Builder impact | None. |
|
|
47
|
-
| Compatibility/readiness | Records shipped behavior; no public change.
|
|
47
|
+
| Compatibility/readiness | Records shipped behavior; no public change. Five implementation gaps (see Current-state impact). |
|
|
48
48
|
| Review checks | Reject losing `menu`/`menuitem` roles to caller props, keyboard focus landing on a disabled item, or a caller `onKeyDown` that silently disables the keyboard model. |
|
|
49
49
|
| Governing rules | `family:navigation-destinations` FR7; `architecture:interaction-modality`; `architecture:component-theming-surface`; `architecture:layer-runtime`. |
|
|
50
50
|
|
|
@@ -81,10 +81,6 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
81
81
|
`role="menu"` sits directly inside the heading's own `role="menu"` wrapper.
|
|
82
82
|
WAI-ARIA 1.2 allows a `menu` to own only `menuitem`-family items and groups,
|
|
83
83
|
so assistive technology meets a menu nested in a menu.
|
|
84
|
-
- **Inside a heading, arrow keys move twice.** Inside SideNavHeading or
|
|
85
|
-
TopNavHeading, the heading's own list handler also moves focus over every
|
|
86
|
-
`menuitem`, so one ArrowDown moves two items, and in a two-item menu ArrowDown
|
|
87
|
-
never moves focus. The APG menu pattern moves focus one item per arrow press.
|
|
88
84
|
- **The menu has no name of its own.** NavHeadingMenu's `menu` carries no
|
|
89
85
|
accessible name unless the caller passes `aria-label`; inside a heading only
|
|
90
86
|
the heading's wrapper `menu` is named. The APG menu pattern, which
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - /packages/core/src/NavMenu/index.ts
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import React, {useCallback,
|
|
15
|
+
import React, {useCallback, type ReactNode} from 'react';
|
|
16
16
|
import * as stylex from '@stylexjs/stylex';
|
|
17
17
|
import {renderIconSlot, type IconType} from '../Icon';
|
|
18
18
|
import {Text} from '../Text';
|
|
@@ -23,7 +23,8 @@ import {
|
|
|
23
23
|
typeScaleVars,
|
|
24
24
|
radiusVars,
|
|
25
25
|
} from '../theme/tokens.stylex';
|
|
26
|
-
import {mergeProps
|
|
26
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
27
|
+
import {useFocusAcrossSwap} from '../utils/useFocusAcrossSwap';
|
|
27
28
|
import type {BaseProps} from '../BaseProps';
|
|
28
29
|
import {useNavHeadingMenuContext} from './NavMenuContext';
|
|
29
30
|
import {useLinkComponent} from '../Link/useLinkComponent';
|
|
@@ -156,43 +157,8 @@ export function NavHeadingMenuItem({
|
|
|
156
157
|
const Element = href ? (isDisabled ? 'a' : LinkComponent) : 'div';
|
|
157
158
|
|
|
158
159
|
// The element type above changes when `isDisabled` flips, so React replaces
|
|
159
|
-
// the row
|
|
160
|
-
|
|
161
|
-
// `activeElement` is still readable there. Only a different node replacing a
|
|
162
|
-
// removed one takes focus, and only if focus has fallen to the page: React
|
|
163
|
-
// also detaches and re-attaches the same node (for example when an <Activity>
|
|
164
|
-
// boundary hides and reveals the row), and neither case may pull focus back
|
|
165
|
-
// after the person has moved elsewhere.
|
|
166
|
-
const focusedNodeRef = useRef<HTMLElement | null>(null);
|
|
167
|
-
const itemRef = useCallback(
|
|
168
|
-
(node: HTMLElement | null) => {
|
|
169
|
-
if (node === null) {
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
const outgoing = focusedNodeRef.current;
|
|
173
|
-
focusedNodeRef.current = null;
|
|
174
|
-
// Focus only follows the swap when it has fallen to the page. If the
|
|
175
|
-
// person moved focus elsewhere in the meantime (for example while an
|
|
176
|
-
// <Activity> boundary kept the row hidden), leave it alone.
|
|
177
|
-
const focusFell =
|
|
178
|
-
document.activeElement === null ||
|
|
179
|
-
document.activeElement === document.body;
|
|
180
|
-
if (
|
|
181
|
-
outgoing !== null &&
|
|
182
|
-
outgoing !== node &&
|
|
183
|
-
!outgoing.isConnected &&
|
|
184
|
-
focusFell
|
|
185
|
-
) {
|
|
186
|
-
node.focus();
|
|
187
|
-
}
|
|
188
|
-
const release = mergeRefs<HTMLElement>(ref)(node);
|
|
189
|
-
return () => {
|
|
190
|
-
focusedNodeRef.current = document.activeElement === node ? node : null;
|
|
191
|
-
release?.();
|
|
192
|
-
};
|
|
193
|
-
},
|
|
194
|
-
[ref],
|
|
195
|
-
);
|
|
160
|
+
// the row; focus follows to the replacement (spec:AST-085 FR4).
|
|
161
|
+
const itemRef = useFocusAcrossSwap<HTMLElement>(ref);
|
|
196
162
|
|
|
197
163
|
return (
|
|
198
164
|
<Element
|
|
@@ -160,7 +160,7 @@ export const docs = {
|
|
|
160
160
|
name: 'hasNumberSteppers',
|
|
161
161
|
type: 'boolean',
|
|
162
162
|
description:
|
|
163
|
-
'Shows increment and decrement buttons at the end of the input.',
|
|
163
|
+
'Shows increment and decrement buttons at the end of the input on fine pointers. Hidden on coarse pointers (such as touch screens); text entry and keyboard stepping remain available.',
|
|
164
164
|
default: 'false',
|
|
165
165
|
},
|
|
166
166
|
{
|
|
@@ -226,12 +226,14 @@ export const docs = {
|
|
|
226
226
|
{
|
|
227
227
|
name: 'containerClassName',
|
|
228
228
|
type: 'string',
|
|
229
|
-
description:
|
|
229
|
+
description:
|
|
230
|
+
'Class name for the field container. Same targeting as `containerXstyle`.',
|
|
230
231
|
},
|
|
231
232
|
{
|
|
232
233
|
name: 'containerStyle',
|
|
233
234
|
type: 'CSSProperties',
|
|
234
|
-
description:
|
|
235
|
+
description:
|
|
236
|
+
'Inline styles for the field container. Same targeting as `containerXstyle`.',
|
|
235
237
|
},
|
|
236
238
|
{
|
|
237
239
|
name: 'controlXstyle',
|
|
@@ -474,7 +476,8 @@ export const docsZh = {
|
|
|
474
476
|
{
|
|
475
477
|
name: 'hasNumberSteppers',
|
|
476
478
|
type: 'boolean',
|
|
477
|
-
description:
|
|
479
|
+
description:
|
|
480
|
+
'在精细指针设备上于输入框末尾显示递增和递减按钮。粗指针设备(例如触摸屏)上隐藏按钮;仍可直接输入数值或使用键盘步进。',
|
|
478
481
|
default: 'false',
|
|
479
482
|
},
|
|
480
483
|
{
|
|
@@ -720,10 +723,12 @@ export const docsDense = {
|
|
|
720
723
|
],
|
|
721
724
|
},
|
|
722
725
|
propDescriptions: {
|
|
723
|
-
containerXstyle:
|
|
726
|
+
containerXstyle:
|
|
727
|
+
'StyleX styles for the field container; no effect in InputGroup or horizontal-labels FormLayout. No root xstyle/className/style.',
|
|
724
728
|
containerClassName: 'Class name for the field container.',
|
|
725
729
|
containerStyle: 'Inline styles for the field container.',
|
|
726
|
-
controlXstyle:
|
|
730
|
+
controlXstyle:
|
|
731
|
+
'StyleX styles for the visual control box (border, background, icons); not the native input.',
|
|
727
732
|
controlClassName: 'Class name for the visual control box.',
|
|
728
733
|
controlStyle: 'Inline styles for the visual control box.',
|
|
729
734
|
label: 'Label text (always rendered for accessibility).',
|
|
@@ -754,7 +759,8 @@ export const docsDense = {
|
|
|
754
759
|
'Formats committed value at rest; raw number is shown while editing.',
|
|
755
760
|
isWheelEnabled:
|
|
756
761
|
'Allow focused wheel gestures to step value. Defaults to true.',
|
|
757
|
-
hasNumberSteppers:
|
|
762
|
+
hasNumberSteppers:
|
|
763
|
+
'Show increment + decrement buttons on fine pointers; hidden on coarse pointers. Defaults to false.',
|
|
758
764
|
units: 'Units suffix (e.g. "%" or "GB").',
|
|
759
765
|
isIntegerOnly: 'Only allow integer values.',
|
|
760
766
|
hasClear:
|