@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
|
@@ -31,6 +31,7 @@ import {
|
|
|
31
31
|
useState,
|
|
32
32
|
type ProfilerOnRenderCallback,
|
|
33
33
|
} from 'react';
|
|
34
|
+
import {FormLayout} from '../FormLayout/FormLayout';
|
|
34
35
|
import {Typeahead} from './Typeahead';
|
|
35
36
|
import {readFile} from 'node:fs/promises';
|
|
36
37
|
import {resolve} from 'node:path';
|
|
@@ -93,6 +94,9 @@ const fruits: SearchableItem[] = [
|
|
|
93
94
|
{id: '5', label: 'Elderberry'},
|
|
94
95
|
];
|
|
95
96
|
|
|
97
|
+
// The token's value also sits in a hidden span its button is labelled by.
|
|
98
|
+
const VISIBLE = {selector: ':not([hidden])'};
|
|
99
|
+
|
|
96
100
|
const fruitSource: SearchSource = {
|
|
97
101
|
search: (query: string) =>
|
|
98
102
|
fruits.filter(f => f.label.toLowerCase().includes(query.toLowerCase())),
|
|
@@ -693,6 +697,121 @@ describe('Typeahead', () => {
|
|
|
693
697
|
expect(screen.getByText(/Required/)).toBeInTheDocument();
|
|
694
698
|
});
|
|
695
699
|
|
|
700
|
+
it('names the token button, the Tab stop while a value shows, by the field label and the value', async () => {
|
|
701
|
+
const user = userEvent.setup();
|
|
702
|
+
render(
|
|
703
|
+
<Typeahead
|
|
704
|
+
label="Fruit"
|
|
705
|
+
description="Pick your favorite fruit"
|
|
706
|
+
status={{type: 'error', message: 'Pick a ripe one'}}
|
|
707
|
+
searchSource={fruitSource}
|
|
708
|
+
value={{id: 'apple', label: 'Apple'}}
|
|
709
|
+
onChange={() => {}}
|
|
710
|
+
/>,
|
|
711
|
+
);
|
|
712
|
+
await user.tab();
|
|
713
|
+
const tabStop = document.activeElement as HTMLElement;
|
|
714
|
+
expect(tabStop).toHaveAccessibleName('Fruit Apple');
|
|
715
|
+
expect(tabStop).toHaveAccessibleDescription(/Pick your favorite fruit/);
|
|
716
|
+
expect(tabStop).toHaveAccessibleDescription(/Pick a ripe one/);
|
|
717
|
+
});
|
|
718
|
+
|
|
719
|
+
it('names the token button with a caller aria-labelledby as the input is named', async () => {
|
|
720
|
+
const user = userEvent.setup();
|
|
721
|
+
render(
|
|
722
|
+
<>
|
|
723
|
+
<span id="section-title">Lunch</span>
|
|
724
|
+
<Typeahead
|
|
725
|
+
label="Fruit"
|
|
726
|
+
aria-labelledby="section-title"
|
|
727
|
+
searchSource={fruitSource}
|
|
728
|
+
value={{id: 'apple', label: 'Apple'}}
|
|
729
|
+
onChange={() => {}}
|
|
730
|
+
/>
|
|
731
|
+
</>,
|
|
732
|
+
);
|
|
733
|
+
await user.tab();
|
|
734
|
+
expect(document.activeElement).toHaveAccessibleName('Fruit Lunch Apple');
|
|
735
|
+
});
|
|
736
|
+
|
|
737
|
+
it('exposes the resolved required state on the combobox (FormLayout FR5, AR2)', () => {
|
|
738
|
+
const field = (props: {
|
|
739
|
+
isRequired?: boolean;
|
|
740
|
+
isOptional?: boolean;
|
|
741
|
+
label: string;
|
|
742
|
+
}) => (
|
|
743
|
+
<Typeahead
|
|
744
|
+
{...props}
|
|
745
|
+
searchSource={fruitSource}
|
|
746
|
+
value={null}
|
|
747
|
+
onChange={() => {}}
|
|
748
|
+
/>
|
|
749
|
+
);
|
|
750
|
+
render(
|
|
751
|
+
<>
|
|
752
|
+
{field({label: 'Plain'})}
|
|
753
|
+
{field({label: 'Explicit', isRequired: true})}
|
|
754
|
+
<FormLayout defaultOptionality="required">
|
|
755
|
+
{field({label: 'By default'})}
|
|
756
|
+
{field({label: 'Opted out', isOptional: true})}
|
|
757
|
+
</FormLayout>
|
|
758
|
+
</>,
|
|
759
|
+
);
|
|
760
|
+
const required = (name: string) =>
|
|
761
|
+
screen
|
|
762
|
+
.getByRole('combobox', {name: new RegExp(`^${name}`)})
|
|
763
|
+
.getAttribute('aria-required');
|
|
764
|
+
expect(required('Plain')).toBeNull();
|
|
765
|
+
expect(required('Explicit')).toBe('true');
|
|
766
|
+
// The form default hides the visible marker, so assistive technology
|
|
767
|
+
// must still hear the field as required.
|
|
768
|
+
expect(required('By default')).toBe('true');
|
|
769
|
+
expect(required('Opted out')).toBeNull();
|
|
770
|
+
});
|
|
771
|
+
|
|
772
|
+
it('marks the combobox invalid for an error status only (WCAG 4.1.2)', () => {
|
|
773
|
+
const field = (
|
|
774
|
+
label: string,
|
|
775
|
+
status?: {type: 'error' | 'warning'; message: string},
|
|
776
|
+
) => (
|
|
777
|
+
<Typeahead
|
|
778
|
+
label={label}
|
|
779
|
+
status={status}
|
|
780
|
+
searchSource={fruitSource}
|
|
781
|
+
value={null}
|
|
782
|
+
onChange={() => {}}
|
|
783
|
+
/>
|
|
784
|
+
);
|
|
785
|
+
render(
|
|
786
|
+
<>
|
|
787
|
+
{field('None')}
|
|
788
|
+
{field('Warned', {type: 'warning', message: 'Check this'})}
|
|
789
|
+
{field('Failed', {type: 'error', message: 'Pick one'})}
|
|
790
|
+
</>,
|
|
791
|
+
);
|
|
792
|
+
const invalid = (name: string) =>
|
|
793
|
+
screen.getByRole('combobox', {name}).getAttribute('aria-invalid');
|
|
794
|
+
expect(invalid('None')).toBeNull();
|
|
795
|
+
expect(invalid('Warned')).toBeNull();
|
|
796
|
+
expect(invalid('Failed')).toBe('true');
|
|
797
|
+
});
|
|
798
|
+
|
|
799
|
+
it("keeps a caller's own aria-invalid and aria-required when the field's own state is off", () => {
|
|
800
|
+
render(
|
|
801
|
+
<Typeahead
|
|
802
|
+
label="Caller"
|
|
803
|
+
aria-invalid="true"
|
|
804
|
+
aria-required="true"
|
|
805
|
+
searchSource={fruitSource}
|
|
806
|
+
value={null}
|
|
807
|
+
onChange={() => {}}
|
|
808
|
+
/>,
|
|
809
|
+
);
|
|
810
|
+
const combobox = screen.getByRole('combobox', {name: 'Caller'});
|
|
811
|
+
expect(combobox).toHaveAttribute('aria-invalid', 'true');
|
|
812
|
+
expect(combobox).toHaveAttribute('aria-required', 'true');
|
|
813
|
+
});
|
|
814
|
+
|
|
696
815
|
it('renders error status message', () => {
|
|
697
816
|
render(
|
|
698
817
|
<Typeahead
|
|
@@ -715,7 +834,7 @@ describe('Typeahead', () => {
|
|
|
715
834
|
onChange={() => {}}
|
|
716
835
|
/>,
|
|
717
836
|
);
|
|
718
|
-
expect(screen.getByText(fruits[0].label)).toBeInTheDocument();
|
|
837
|
+
expect(screen.getByText(fruits[0].label, VISIBLE)).toBeInTheDocument();
|
|
719
838
|
});
|
|
720
839
|
|
|
721
840
|
it('shows clear button when hasClear and value is selected', () => {
|
|
@@ -1616,10 +1735,10 @@ describe('Typeahead edit mode', () => {
|
|
|
1616
1735
|
// iOS raises the software keyboard only for a focus made while the browser
|
|
1617
1736
|
// still dispatches the person's tap, so the focus must not wait for a frame.
|
|
1618
1737
|
it.each([
|
|
1619
|
-
['the token', () => screen.getByText(fruits[0].label)],
|
|
1738
|
+
['the token', () => screen.getByText(fruits[0].label, VISIBLE)],
|
|
1620
1739
|
[
|
|
1621
1740
|
'the field around it',
|
|
1622
|
-
() => screen.getByText(fruits[0].label).closest('div')!,
|
|
1741
|
+
() => screen.getByText(fruits[0].label, VISIBLE).closest('div')!,
|
|
1623
1742
|
],
|
|
1624
1743
|
])(
|
|
1625
1744
|
'focuses the input with the label selected inside the tap on %s',
|
|
@@ -1679,7 +1798,7 @@ describe('Typeahead edit mode', () => {
|
|
|
1679
1798
|
);
|
|
1680
1799
|
const input = screen.getByRole<HTMLInputElement>('combobox');
|
|
1681
1800
|
|
|
1682
|
-
fireEvent.click(screen.getByText(fruits[3].label));
|
|
1801
|
+
fireEvent.click(screen.getByText(fruits[3].label, VISIBLE));
|
|
1683
1802
|
|
|
1684
1803
|
expect(input).toHaveFocus();
|
|
1685
1804
|
expect(input.value).toBe(fruits[3].label);
|
|
@@ -1706,7 +1825,7 @@ describe('Typeahead edit mode', () => {
|
|
|
1706
1825
|
screen.getByRole('combobox');
|
|
1707
1826
|
|
|
1708
1827
|
// Click the token text to enter edit mode
|
|
1709
|
-
const tokenText = screen.getByText(fruits[0].label);
|
|
1828
|
+
const tokenText = screen.getByText(fruits[0].label, VISIBLE);
|
|
1710
1829
|
const tokenContainer = tokenText.closest('div')!;
|
|
1711
1830
|
fireEvent.click(tokenContainer);
|
|
1712
1831
|
|
|
@@ -1733,7 +1852,7 @@ describe('Typeahead edit mode', () => {
|
|
|
1733
1852
|
const input = screen.getByRole<HTMLInputElement>('combobox');
|
|
1734
1853
|
|
|
1735
1854
|
// Enter edit mode: the token gives way to the label as editable text
|
|
1736
|
-
fireEvent.click(screen.getByText(fruits[0].label).closest('div')!);
|
|
1855
|
+
fireEvent.click(screen.getByText(fruits[0].label, VISIBLE).closest('div')!);
|
|
1737
1856
|
await waitFor(() => expect(input.value).toBe(fruits[0].label));
|
|
1738
1857
|
|
|
1739
1858
|
fireEvent.click(screen.getByRole('button', {name: 'Clear selection'}));
|
|
@@ -1772,7 +1891,9 @@ describe('Typeahead edit mode', () => {
|
|
|
1772
1891
|
render(<Controlled />);
|
|
1773
1892
|
const input = screen.getByRole<HTMLInputElement>('combobox');
|
|
1774
1893
|
|
|
1775
|
-
fireEvent.click(
|
|
1894
|
+
fireEvent.click(
|
|
1895
|
+
screen.getByText(fruits[0].label, VISIBLE).closest('div')!,
|
|
1896
|
+
);
|
|
1776
1897
|
await waitFor(() => expect(input.value).toBe(fruits[0].label));
|
|
1777
1898
|
|
|
1778
1899
|
leaveEditMode(input);
|
|
@@ -1816,7 +1937,7 @@ describe('Typeahead edit mode', () => {
|
|
|
1816
1937
|
const input = screen.getByRole('combobox');
|
|
1817
1938
|
|
|
1818
1939
|
// Enter edit mode
|
|
1819
|
-
const tokenText = screen.getByText(fruits[0].label);
|
|
1940
|
+
const tokenText = screen.getByText(fruits[0].label, VISIBLE);
|
|
1820
1941
|
fireEvent.click(tokenText.closest('div')!);
|
|
1821
1942
|
|
|
1822
1943
|
// Blur without selecting anything
|
|
@@ -1839,7 +1960,7 @@ describe('Typeahead edit mode', () => {
|
|
|
1839
1960
|
|
|
1840
1961
|
// Enter edit mode by clicking the token; the input uncollapses and
|
|
1841
1962
|
// rejoins the Tab order (tabindex is cleared).
|
|
1842
|
-
const tokenText = screen.getByText(fruits[0].label);
|
|
1963
|
+
const tokenText = screen.getByText(fruits[0].label, VISIBLE);
|
|
1843
1964
|
fireEvent.click(tokenText.closest('div')!);
|
|
1844
1965
|
await act(async () => {
|
|
1845
1966
|
await new Promise(r => requestAnimationFrame(r));
|
|
@@ -1890,7 +2011,9 @@ describe('Typeahead collapsed input tab order', () => {
|
|
|
1890
2011
|
);
|
|
1891
2012
|
// Focus the token's internal button, then Tab away — focus must not land
|
|
1892
2013
|
// on the visually hidden combobox input.
|
|
1893
|
-
const tokenButton = screen.getByRole('button', {
|
|
2014
|
+
const tokenButton = screen.getByRole('button', {
|
|
2015
|
+
name: new RegExp(`${fruits[0].label}$`),
|
|
2016
|
+
});
|
|
1894
2017
|
tokenButton.focus();
|
|
1895
2018
|
await user.tab();
|
|
1896
2019
|
expect(screen.getByRole('combobox')).not.toHaveFocus();
|
|
@@ -1918,7 +2041,7 @@ describe('Typeahead collapsed input tab order', () => {
|
|
|
1918
2041
|
/>,
|
|
1919
2042
|
);
|
|
1920
2043
|
// Entering edit mode removes the token and uncollapses the input
|
|
1921
|
-
const tokenText = screen.getByText(fruits[0].label);
|
|
2044
|
+
const tokenText = screen.getByText(fruits[0].label, VISIBLE);
|
|
1922
2045
|
fireEvent.click(tokenText.closest('div')!);
|
|
1923
2046
|
expect(screen.getByRole('combobox')).not.toHaveAttribute('tabindex');
|
|
1924
2047
|
});
|
|
@@ -2228,6 +2351,126 @@ describe('Typeahead disabledMessage', () => {
|
|
|
2228
2351
|
expect(onChange).not.toHaveBeenCalled();
|
|
2229
2352
|
});
|
|
2230
2353
|
|
|
2354
|
+
it('opens no list and picks nothing while focusable-disabled (spec:AST-085 FR2)', async () => {
|
|
2355
|
+
const user = userEvent.setup();
|
|
2356
|
+
const onChange = vi.fn();
|
|
2357
|
+
render(
|
|
2358
|
+
<Typeahead
|
|
2359
|
+
label="Assignee"
|
|
2360
|
+
searchSource={fruitSource}
|
|
2361
|
+
value={null}
|
|
2362
|
+
onChange={onChange}
|
|
2363
|
+
hasEntriesOnFocus
|
|
2364
|
+
isDisabled
|
|
2365
|
+
disabledMessage="You need the Editor role"
|
|
2366
|
+
/>,
|
|
2367
|
+
);
|
|
2368
|
+
const input = screen.getByRole('combobox');
|
|
2369
|
+
await user.click(input);
|
|
2370
|
+
await user.click(input);
|
|
2371
|
+
await user.keyboard('{ArrowDown}{Enter}');
|
|
2372
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
2373
|
+
expect(screen.queryByRole('option', {hidden: true})).toBeNull();
|
|
2374
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
2375
|
+
});
|
|
2376
|
+
|
|
2377
|
+
it('does not reopen on a click into the still-focused input once disabled', async () => {
|
|
2378
|
+
const user = userEvent.setup();
|
|
2379
|
+
const field = (isDisabled: boolean) => (
|
|
2380
|
+
<Typeahead
|
|
2381
|
+
label="Assignee"
|
|
2382
|
+
searchSource={fruitSource}
|
|
2383
|
+
value={null}
|
|
2384
|
+
onChange={() => {}}
|
|
2385
|
+
hasEntriesOnFocus
|
|
2386
|
+
isDisabled={isDisabled}
|
|
2387
|
+
disabledMessage={isDisabled ? 'You need the Editor role' : undefined}
|
|
2388
|
+
/>
|
|
2389
|
+
);
|
|
2390
|
+
const {rerender} = render(field(false));
|
|
2391
|
+
const input = screen.getByRole('combobox');
|
|
2392
|
+
await user.click(input);
|
|
2393
|
+
await waitFor(() => expect(input).toHaveAttribute('aria-expanded', 'true'));
|
|
2394
|
+
// A pick closes the list and leaves focus in the input.
|
|
2395
|
+
await user.click(screen.getAllByRole('option', {hidden: true})[0]);
|
|
2396
|
+
await waitFor(() =>
|
|
2397
|
+
expect(input).toHaveAttribute('aria-expanded', 'false'),
|
|
2398
|
+
);
|
|
2399
|
+
rerender(field(true));
|
|
2400
|
+
const disabled = screen.getByRole('combobox');
|
|
2401
|
+
await user.click(disabled);
|
|
2402
|
+
await user.click(disabled);
|
|
2403
|
+
expect(disabled).toHaveAttribute('aria-expanded', 'false');
|
|
2404
|
+
});
|
|
2405
|
+
|
|
2406
|
+
it('picks nothing from a list opened before the field became disabled, and lets it close', async () => {
|
|
2407
|
+
const user = userEvent.setup();
|
|
2408
|
+
const onChange = vi.fn();
|
|
2409
|
+
const onSubmit = vi.fn((event: React.FormEvent) => event.preventDefault());
|
|
2410
|
+
const field = (isDisabled: boolean) => (
|
|
2411
|
+
<form onSubmit={onSubmit}>
|
|
2412
|
+
<Typeahead
|
|
2413
|
+
label="Assignee"
|
|
2414
|
+
searchSource={fruitSource}
|
|
2415
|
+
value={null}
|
|
2416
|
+
onChange={onChange}
|
|
2417
|
+
hasEntriesOnFocus
|
|
2418
|
+
isDisabled={isDisabled}
|
|
2419
|
+
disabledMessage="You need the Editor role"
|
|
2420
|
+
/>
|
|
2421
|
+
</form>
|
|
2422
|
+
);
|
|
2423
|
+
const {rerender} = render(field(false));
|
|
2424
|
+
const input = screen.getByRole('combobox');
|
|
2425
|
+
await user.click(input);
|
|
2426
|
+
await waitFor(() => expect(input).toHaveAttribute('aria-expanded', 'true'));
|
|
2427
|
+
await user.keyboard('{ArrowDown}');
|
|
2428
|
+
|
|
2429
|
+
rerender(field(true));
|
|
2430
|
+
// The open list stays in the DOM (hidden from the accessibility tree).
|
|
2431
|
+
await user.keyboard('{Enter}');
|
|
2432
|
+
fireEvent.click(screen.getAllByRole('option', {hidden: true})[0]);
|
|
2433
|
+
expect(onChange).not.toHaveBeenCalled();
|
|
2434
|
+
// Enter on the still-open list does not submit the form.
|
|
2435
|
+
expect(onSubmit).not.toHaveBeenCalled();
|
|
2436
|
+
await user.keyboard('{Escape}');
|
|
2437
|
+
expect(input).toHaveAttribute('aria-expanded', 'false');
|
|
2438
|
+
});
|
|
2439
|
+
|
|
2440
|
+
it('does not open a list for a search that settles after the field became disabled', async () => {
|
|
2441
|
+
let resolveSearch: (items: SearchableItem[]) => void = () => {};
|
|
2442
|
+
const pendingSource: SearchSource = {
|
|
2443
|
+
search: async () =>
|
|
2444
|
+
new Promise(resolve => {
|
|
2445
|
+
resolveSearch = resolve;
|
|
2446
|
+
}),
|
|
2447
|
+
bootstrap: () => [],
|
|
2448
|
+
};
|
|
2449
|
+
const user = userEvent.setup();
|
|
2450
|
+
const field = (isDisabled: boolean) => (
|
|
2451
|
+
<Typeahead
|
|
2452
|
+
label="Assignee"
|
|
2453
|
+
searchSource={pendingSource}
|
|
2454
|
+
value={null}
|
|
2455
|
+
onChange={() => {}}
|
|
2456
|
+
debounceMs={0}
|
|
2457
|
+
isDisabled={isDisabled}
|
|
2458
|
+
disabledMessage={isDisabled ? 'You need the Editor role' : undefined}
|
|
2459
|
+
/>
|
|
2460
|
+
);
|
|
2461
|
+
const {rerender} = render(field(false));
|
|
2462
|
+
const input = screen.getByRole('combobox');
|
|
2463
|
+
await user.type(input, 'ap');
|
|
2464
|
+
rerender(field(true));
|
|
2465
|
+
await act(async () => {
|
|
2466
|
+
resolveSearch(fruits);
|
|
2467
|
+
});
|
|
2468
|
+
expect(screen.getByRole('combobox')).toHaveAttribute(
|
|
2469
|
+
'aria-expanded',
|
|
2470
|
+
'false',
|
|
2471
|
+
);
|
|
2472
|
+
});
|
|
2473
|
+
|
|
2231
2474
|
it('remains natively disabled when disabled without a reason', () => {
|
|
2232
2475
|
render(
|
|
2233
2476
|
<Typeahead
|
|
@@ -2822,3 +3065,43 @@ describe('Typeahead consumer key handler target', () => {
|
|
|
2822
3065
|
expect(onKeyDown).toHaveBeenCalledOnce();
|
|
2823
3066
|
});
|
|
2824
3067
|
});
|
|
3068
|
+
|
|
3069
|
+
describe('Typeahead caller aria-labelledby', () => {
|
|
3070
|
+
it('names the input by its label and a caller aria-labelledby', () => {
|
|
3071
|
+
render(
|
|
3072
|
+
<>
|
|
3073
|
+
<span id="billing-heading">Billing</span>
|
|
3074
|
+
<Typeahead
|
|
3075
|
+
label="Fruit"
|
|
3076
|
+
searchSource={fruitSource}
|
|
3077
|
+
value={null}
|
|
3078
|
+
onChange={() => {}}
|
|
3079
|
+
aria-labelledby="billing-heading"
|
|
3080
|
+
/>
|
|
3081
|
+
</>,
|
|
3082
|
+
);
|
|
3083
|
+
expect(
|
|
3084
|
+
screen.getByRole('combobox', {name: 'Fruit Billing'}),
|
|
3085
|
+
).toBeInTheDocument();
|
|
3086
|
+
});
|
|
3087
|
+
|
|
3088
|
+
it('names a grouped input by the group, its label, and a caller aria-labelledby', () => {
|
|
3089
|
+
render(
|
|
3090
|
+
<>
|
|
3091
|
+
<span id="billing-heading">Billing</span>
|
|
3092
|
+
<InputGroup label="Contact">
|
|
3093
|
+
<Typeahead
|
|
3094
|
+
label="Fruit"
|
|
3095
|
+
searchSource={fruitSource}
|
|
3096
|
+
value={null}
|
|
3097
|
+
onChange={() => {}}
|
|
3098
|
+
aria-labelledby="billing-heading"
|
|
3099
|
+
/>
|
|
3100
|
+
</InputGroup>
|
|
3101
|
+
</>,
|
|
3102
|
+
);
|
|
3103
|
+
expect(
|
|
3104
|
+
screen.getByRole('combobox', {name: 'Contact Fruit Billing'}),
|
|
3105
|
+
).toBeInTheDocument();
|
|
3106
|
+
});
|
|
3107
|
+
});
|
|
@@ -63,6 +63,7 @@ import {
|
|
|
63
63
|
isImeKeyEvent,
|
|
64
64
|
mergeProps,
|
|
65
65
|
} from '../utils';
|
|
66
|
+
import {joinAriaIDs} from '../utils/inputAria';
|
|
66
67
|
import {TrailingKeyDownContext} from './trailingKeyDown';
|
|
67
68
|
import {
|
|
68
69
|
type FieldInputBaseProps,
|
|
@@ -75,6 +76,7 @@ import {useTranslator} from '../i18n';
|
|
|
75
76
|
|
|
76
77
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
77
78
|
import {useBusyAnnouncement} from '../hooks/useBusyAnnouncement';
|
|
79
|
+
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
78
80
|
export type {
|
|
79
81
|
InputStatus as TypeaheadStatus,
|
|
80
82
|
InputStatusType as TypeaheadStatusType,
|
|
@@ -416,8 +418,10 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
416
418
|
controlStyle,
|
|
417
419
|
id: idProp,
|
|
418
420
|
'aria-describedby': ariaDescribedByProp,
|
|
421
|
+
'aria-labelledby': ariaLabelledByProp,
|
|
419
422
|
...restProps
|
|
420
423
|
}: TypeaheadProps<T>) {
|
|
424
|
+
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
421
425
|
const {rest, container} = useFieldInputStyling('Typeahead', restProps, {
|
|
422
426
|
containerXstyle,
|
|
423
427
|
containerClassName,
|
|
@@ -428,6 +432,8 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
428
432
|
const generatedInputId = useId();
|
|
429
433
|
const inputId = idProp ?? generatedInputId;
|
|
430
434
|
const inputLabelId = useId();
|
|
435
|
+
const fieldLabelId = useId();
|
|
436
|
+
const tokenValueId = useId();
|
|
431
437
|
const descriptionId = useId();
|
|
432
438
|
const statusMessageId = useId();
|
|
433
439
|
const inputGroup = useInputGroup();
|
|
@@ -609,6 +615,13 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
609
615
|
inputGroup,
|
|
610
616
|
);
|
|
611
617
|
|
|
618
|
+
// A caller aria-labelledby names the input together with the field's own
|
|
619
|
+
// label (the Field label standalone, the group and input labels in a group).
|
|
620
|
+
const inputLabelledBy =
|
|
621
|
+
ariaLabelledByProp != null
|
|
622
|
+
? joinAriaIDs(ariaLabelledBy ?? fieldLabelId, ariaLabelledByProp)
|
|
623
|
+
: ariaLabelledBy;
|
|
624
|
+
|
|
612
625
|
const sizeStyle = wrapperSizeStyles[size];
|
|
613
626
|
|
|
614
627
|
const typeaheadContent = (
|
|
@@ -653,14 +666,33 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
653
666
|
<BusyIndicatorLaneProvider value={busyLane}>
|
|
654
667
|
<div {...stylex.props(styles.contentLane)}>
|
|
655
668
|
{showToken && (
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
669
|
+
<>
|
|
670
|
+
{/* The token's button is the field's Tab stop while a value
|
|
671
|
+
shows, so it is named as the input is (the field label,
|
|
672
|
+
with a caller aria-labelledby) plus the value, and
|
|
673
|
+
described like the input (input-fields FR10; WCAG 2.4.6,
|
|
674
|
+
4.1.2). */}
|
|
675
|
+
<span id={tokenValueId} hidden>
|
|
676
|
+
{value.label}
|
|
677
|
+
</span>
|
|
678
|
+
<Token
|
|
679
|
+
ref={tokenRef}
|
|
680
|
+
label={value.label}
|
|
681
|
+
size={size}
|
|
682
|
+
onClick={handleEnterEditMode}
|
|
683
|
+
isDisabled={isDisabled}
|
|
684
|
+
aria-labelledby={joinAriaIDs(
|
|
685
|
+
inputLabelledBy ?? fieldLabelId,
|
|
686
|
+
tokenValueId,
|
|
687
|
+
)}
|
|
688
|
+
aria-describedby={
|
|
689
|
+
[ariaDescribedByProp, ariaDescribedBy]
|
|
690
|
+
.filter(Boolean)
|
|
691
|
+
.join(' ') || undefined
|
|
692
|
+
}
|
|
693
|
+
xstyle={styles.tokenOverlay}
|
|
694
|
+
/>
|
|
695
|
+
</>
|
|
664
696
|
)}
|
|
665
697
|
<TrailingKeyDownContext value={onKeyDown}>
|
|
666
698
|
<BaseTypeahead
|
|
@@ -684,7 +716,15 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
684
716
|
.filter(Boolean)
|
|
685
717
|
.join(' ') || undefined
|
|
686
718
|
}
|
|
687
|
-
ariaLabelledBy={
|
|
719
|
+
ariaLabelledBy={inputLabelledBy}
|
|
720
|
+
// The resolved required state reaches the combobox, also when a
|
|
721
|
+
// FormLayout default hides the visible marker (component:FormLayout
|
|
722
|
+
// FR5, AR2).
|
|
723
|
+
aria-required={isEffectivelyRequired || rest['aria-required']}
|
|
724
|
+
// An error status is exposed on the combobox as on every other field
|
|
725
|
+
// (WCAG 4.1.2; spec:AST-020 FR9). Without one, a caller's own
|
|
726
|
+
// aria-required / aria-invalid still applies.
|
|
727
|
+
aria-invalid={status?.type === 'error' || rest['aria-invalid']}
|
|
688
728
|
onChangeQuery={onChangeQuery}
|
|
689
729
|
onOpenChange={onOpenChange}
|
|
690
730
|
debounceMs={debounceMs}
|
|
@@ -735,6 +775,8 @@ export function Typeahead<T extends SearchableItem>({
|
|
|
735
775
|
isLabelHidden={isLabelHidden}
|
|
736
776
|
description={description}
|
|
737
777
|
inputID={inputId}
|
|
778
|
+
// Always set: the value token's name references the field label.
|
|
779
|
+
labelID={fieldLabelId}
|
|
738
780
|
descriptionID={description ? descriptionId : undefined}
|
|
739
781
|
isOptional={isOptional}
|
|
740
782
|
isRequired={isRequired}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file internalModulesNotExperimental.test.ts
|
|
5
|
+
* @input vitest, the source of core's internal motion, gesture and keyboard
|
|
6
|
+
* modules, and of the package-private utility module (touchPresentation)
|
|
7
|
+
* @output Fails when one of them declares `@experimental`: those modules are
|
|
8
|
+
* internal and never exported (spec:AST-017 FR21, DEC-27), and the tag
|
|
9
|
+
* belongs only to a deliberately experimental public API
|
|
10
|
+
* @position Testing; a repository guard over src/motion, src/gestures,
|
|
11
|
+
* src/keyboard and src/utils/touchPresentation.ts. The rest of src/utils
|
|
12
|
+
* backs the public `@astryxdesign/core/utils` entry, where an experimental
|
|
13
|
+
* API may carry the tag
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import fs from 'node:fs';
|
|
17
|
+
import path from 'node:path';
|
|
18
|
+
import {describe, expect, it} from 'vitest';
|
|
19
|
+
|
|
20
|
+
const SRC = path.resolve(__dirname, '..');
|
|
21
|
+
const INTERNAL_DIRS = ['motion', 'gestures', 'keyboard'];
|
|
22
|
+
/** Package-private files in a directory that also backs a public entry. */
|
|
23
|
+
const INTERNAL_FILES = ['utils/touchPresentation.ts'];
|
|
24
|
+
|
|
25
|
+
/** Every source file under `dir`, tests and declarations left out. */
|
|
26
|
+
function sourcesUnder(dir: string): string[] {
|
|
27
|
+
const files: string[] = [];
|
|
28
|
+
for (const entry of fs.readdirSync(dir, {withFileTypes: true})) {
|
|
29
|
+
const full = path.join(dir, entry.name);
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
if (entry.name !== '__tests__') {
|
|
32
|
+
files.push(...sourcesUnder(full));
|
|
33
|
+
}
|
|
34
|
+
} else if (
|
|
35
|
+
/\.(ts|tsx|mjs|js)$/.test(entry.name) &&
|
|
36
|
+
!/\.(test|spec)\.[cm]?[jt]sx?$/.test(entry.name) &&
|
|
37
|
+
!entry.name.endsWith('.d.ts')
|
|
38
|
+
) {
|
|
39
|
+
files.push(full);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return files;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** The internal files the guard reads, relative to src. */
|
|
46
|
+
function checkedFiles(): string[] {
|
|
47
|
+
const files: string[] = [];
|
|
48
|
+
for (const dir of INTERNAL_DIRS) {
|
|
49
|
+
const root = path.join(SRC, dir);
|
|
50
|
+
if (fs.existsSync(root)) {
|
|
51
|
+
files.push(...sourcesUnder(root));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
files.push(...INTERNAL_FILES.map(file => path.join(SRC, file)));
|
|
55
|
+
return files.map(file => path.relative(SRC, file));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
describe('internal modules', () => {
|
|
59
|
+
it('declare no @experimental: only an experimental public API carries it', () => {
|
|
60
|
+
const offenders: string[] = [];
|
|
61
|
+
for (const file of checkedFiles()) {
|
|
62
|
+
fs.readFileSync(path.join(SRC, file), 'utf8')
|
|
63
|
+
.split('\n')
|
|
64
|
+
.forEach((line, index) => {
|
|
65
|
+
if (/@experimental\b/.test(line)) {
|
|
66
|
+
offenders.push(`${file}:${index + 1}`);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
expect(offenders).toEqual([]);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('checks the directories and files it names', () => {
|
|
74
|
+
expect(fs.existsSync(path.join(SRC, 'motion'))).toBe(true);
|
|
75
|
+
expect(fs.existsSync(path.join(SRC, 'gestures'))).toBe(true);
|
|
76
|
+
expect(sourcesUnder(path.join(SRC, 'motion')).length).toBeGreaterThan(5);
|
|
77
|
+
for (const file of INTERNAL_FILES) {
|
|
78
|
+
expect(fs.existsSync(path.join(SRC, file)), file).toBe(true);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('leaves the public utils entry alone: of src/utils, only its package-private files are checked', () => {
|
|
83
|
+
const utils = checkedFiles().filter(file =>
|
|
84
|
+
file.startsWith('utils' + path.sep),
|
|
85
|
+
);
|
|
86
|
+
expect(utils).toEqual([path.join('utils', 'touchPresentation.ts')]);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
@@ -177,9 +177,11 @@ export function declaresPressPaint(el: Element): boolean {
|
|
|
177
177
|
);
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
/** `.2s`, `200ms`, `0.2s` → 200. */
|
|
180
|
+
/** `.2s`, `200ms`, `0.2s` → 200; a scaled clock reads its base, at tempo 1. */
|
|
181
181
|
export function durationToMs(value: string): number {
|
|
182
|
-
|
|
182
|
+
// The press release scales its base clock by the theme's tempo, capped under
|
|
183
|
+
// Reduce Motion: `calc(<ms> * …)`, `min(<ms>, …)` (`spec:AST-108` FR4).
|
|
184
|
+
const match = value.trim().match(/^(?:(?:calc|min)\(\s*)?([\d.]+)(ms|s)\b/);
|
|
183
185
|
if (match == null) {
|
|
184
186
|
return Number.NaN;
|
|
185
187
|
}
|
|
@@ -203,10 +205,12 @@ export function hasReleaseFade(el: Element): boolean {
|
|
|
203
205
|
const onArmAnimates = rulesWithSelector(el, '[data-astryx-press="on"]').some(
|
|
204
206
|
rule => rule.includes('animation'),
|
|
205
207
|
);
|
|
208
|
+
// One duration and its Reduce Motion cap: both the machine's clock.
|
|
206
209
|
return (
|
|
207
210
|
named &&
|
|
208
|
-
durations.length
|
|
209
|
-
durations
|
|
211
|
+
durations.length >= 1 &&
|
|
212
|
+
durations.length <= 2 &&
|
|
213
|
+
durations.every(duration => duration === PRESS_FADE_MS) &&
|
|
210
214
|
!onArmAnimates
|
|
211
215
|
);
|
|
212
216
|
}
|