@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
package/src/Token/Token.test.tsx
CHANGED
|
@@ -256,6 +256,110 @@ describe('Token accessibility', () => {
|
|
|
256
256
|
).toBeInTheDocument();
|
|
257
257
|
});
|
|
258
258
|
|
|
259
|
+
it('keeps aria-labelledby and aria-describedby on a disabled link token', () => {
|
|
260
|
+
render(
|
|
261
|
+
<>
|
|
262
|
+
<span id="dl-label">Docs section</span>
|
|
263
|
+
<span id="dl-hint">Unavailable offline</span>
|
|
264
|
+
<Token
|
|
265
|
+
label="Docs"
|
|
266
|
+
href="/docs"
|
|
267
|
+
isDisabled
|
|
268
|
+
aria-labelledby="dl-label"
|
|
269
|
+
aria-describedby="dl-hint"
|
|
270
|
+
/>
|
|
271
|
+
</>,
|
|
272
|
+
);
|
|
273
|
+
const link = screen.getByRole('link', {name: 'Docs section'});
|
|
274
|
+
expect(link).toHaveAccessibleDescription('Unavailable offline');
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
it("passes aria-labelledby and aria-describedby to a clickable token's button (public-component-api INV5)", () => {
|
|
278
|
+
render(
|
|
279
|
+
<>
|
|
280
|
+
<span id="field-label">Fruit</span>
|
|
281
|
+
<span id="field-hint">Pick one</span>
|
|
282
|
+
<Token
|
|
283
|
+
label="Apple"
|
|
284
|
+
onClick={() => {}}
|
|
285
|
+
aria-labelledby="field-label"
|
|
286
|
+
aria-describedby="field-hint"
|
|
287
|
+
data-testid="token"
|
|
288
|
+
/>
|
|
289
|
+
</>,
|
|
290
|
+
);
|
|
291
|
+
const button = screen.getByRole('button', {name: 'Fruit'});
|
|
292
|
+
expect(button).toHaveAccessibleDescription('Pick one');
|
|
293
|
+
expect(screen.getByTestId('token')).not.toHaveAttribute('aria-labelledby');
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
it('reflects the disabled state on the token target in every structure (theming-surface INV6)', () => {
|
|
297
|
+
render(
|
|
298
|
+
<>
|
|
299
|
+
<Token label="Static" isDisabled data-testid="static" />
|
|
300
|
+
<Token
|
|
301
|
+
label="Clickable"
|
|
302
|
+
onClick={() => {}}
|
|
303
|
+
isDisabled
|
|
304
|
+
data-testid="clickable"
|
|
305
|
+
/>
|
|
306
|
+
<Token label="Link" href="/docs" isDisabled data-testid="link" />
|
|
307
|
+
<Token
|
|
308
|
+
label="Link with remove"
|
|
309
|
+
href="/docs"
|
|
310
|
+
onRemove={() => {}}
|
|
311
|
+
isDisabled
|
|
312
|
+
data-testid="link-and-remove"
|
|
313
|
+
/>
|
|
314
|
+
<Token label="Enabled" href="/docs" data-testid="enabled" />
|
|
315
|
+
</>,
|
|
316
|
+
);
|
|
317
|
+
for (const id of ['static', 'clickable', 'link', 'link-and-remove']) {
|
|
318
|
+
expect(screen.getByTestId(id), id).toHaveAttribute(
|
|
319
|
+
'data-disabled',
|
|
320
|
+
'disabled',
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
expect(screen.getByTestId('enabled')).not.toHaveAttribute('data-disabled');
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
it('keeps a disabled link token a focusable link with no destination (spec:AST-085 FR1, FR5)', async () => {
|
|
327
|
+
const user = userEvent.setup();
|
|
328
|
+
const onRemove = vi.fn();
|
|
329
|
+
render(
|
|
330
|
+
<>
|
|
331
|
+
<Token label="Docs" href="/docs" isDisabled />
|
|
332
|
+
<Token label="Guide" href="/guide" isDisabled onRemove={onRemove} />
|
|
333
|
+
</>,
|
|
334
|
+
);
|
|
335
|
+
for (const name of ['Docs', 'Guide']) {
|
|
336
|
+
const link = screen.getByRole('link', {name});
|
|
337
|
+
expect(link, name).toHaveAttribute('aria-disabled', 'true');
|
|
338
|
+
expect(link, name).not.toHaveAttribute('href');
|
|
339
|
+
}
|
|
340
|
+
await user.tab();
|
|
341
|
+
expect(screen.getByRole('link', {name: 'Docs'})).toHaveFocus();
|
|
342
|
+
await user.tab();
|
|
343
|
+
expect(screen.getByRole('link', {name: 'Guide'})).toHaveFocus();
|
|
344
|
+
await user.tab();
|
|
345
|
+
await user.keyboard('{Enter}');
|
|
346
|
+
expect(onRemove).not.toHaveBeenCalled();
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
it("passes other keys to a disabled link token's onKeyDown, but not Enter or Space", async () => {
|
|
350
|
+
const user = userEvent.setup();
|
|
351
|
+
const onKeyDown = vi.fn();
|
|
352
|
+
render(
|
|
353
|
+
<Token label="Docs" href="/docs" isDisabled onKeyDown={onKeyDown} />,
|
|
354
|
+
);
|
|
355
|
+
await user.tab();
|
|
356
|
+
await user.keyboard('{ArrowRight}');
|
|
357
|
+
expect(onKeyDown).toHaveBeenCalledTimes(1);
|
|
358
|
+
expect(onKeyDown.mock.calls[0][0].key).toBe('ArrowRight');
|
|
359
|
+
await user.keyboard('{Enter} ');
|
|
360
|
+
expect(onKeyDown).toHaveBeenCalledTimes(1);
|
|
361
|
+
});
|
|
362
|
+
|
|
259
363
|
it('keeps both buttons focusable and inert when isDisabled is true', async () => {
|
|
260
364
|
const user = userEvent.setup();
|
|
261
365
|
const handleClick = vi.fn();
|
package/src/Token/Token.tsx
CHANGED
|
@@ -299,6 +299,8 @@ export function Token({
|
|
|
299
299
|
className,
|
|
300
300
|
style,
|
|
301
301
|
'data-testid': testId,
|
|
302
|
+
'aria-labelledby': ariaLabelledBy,
|
|
303
|
+
'aria-describedby': ariaDescribedBy,
|
|
302
304
|
ref,
|
|
303
305
|
...rest
|
|
304
306
|
}: TokenProps) {
|
|
@@ -342,13 +344,61 @@ export function Token({
|
|
|
342
344
|
</>
|
|
343
345
|
);
|
|
344
346
|
|
|
347
|
+
// Naming inputs reach the element that owns the token's action: the inner
|
|
348
|
+
// button of a clickable token, otherwise the root
|
|
349
|
+
// (architecture:public-component-api INV5).
|
|
350
|
+
const labellingProps = {
|
|
351
|
+
'aria-labelledby': ariaLabelledBy,
|
|
352
|
+
'aria-describedby': ariaDescribedBy,
|
|
353
|
+
};
|
|
354
|
+
|
|
345
355
|
const sharedProps = {
|
|
346
356
|
'data-testid': testId,
|
|
347
357
|
...(isLabelHidden ? {'aria-label': label} : {}),
|
|
348
358
|
...(description != null ? {'aria-description': description} : {}),
|
|
349
359
|
};
|
|
350
360
|
|
|
351
|
-
|
|
361
|
+
// A disabled link keeps a focusable link with aria-disabled and no
|
|
362
|
+
// destination, as a disabled Link does (spec:AST-085 FR1, FR5;
|
|
363
|
+
// component:Link FR5). useInteractiveRole reports no link role once
|
|
364
|
+
// disabled, so the structure is chosen here.
|
|
365
|
+
const isDisabledLink = isDisabled && href != null && effectiveOnClick == null;
|
|
366
|
+
|
|
367
|
+
if (isDisabledLink && onRemove == null) {
|
|
368
|
+
// A disabled link is an <a> with no href, as Link renders one: nothing can
|
|
369
|
+
// navigate, it keeps a Tab stop and the link role (spec:AST-085 FR1, FR5).
|
|
370
|
+
// The router LinkComponent is skipped, since a custom router link may
|
|
371
|
+
// require a live href.
|
|
372
|
+
const DisabledAnchor = 'a';
|
|
373
|
+
return (
|
|
374
|
+
<DisabledAnchor
|
|
375
|
+
ref={ref as React.Ref<HTMLAnchorElement>}
|
|
376
|
+
role="link"
|
|
377
|
+
aria-disabled={true}
|
|
378
|
+
tabIndex={0}
|
|
379
|
+
{...mergeProps(
|
|
380
|
+
themeProps('token', {color, size, disabled: 'disabled'}),
|
|
381
|
+
focusOutlineProps.focusVisible(
|
|
382
|
+
styles.base,
|
|
383
|
+
sizeStyles[size],
|
|
384
|
+
colorStyles[color],
|
|
385
|
+
styles.interactive,
|
|
386
|
+
styles.disabled,
|
|
387
|
+
xstyle,
|
|
388
|
+
),
|
|
389
|
+
className,
|
|
390
|
+
style,
|
|
391
|
+
)}
|
|
392
|
+
{...rest}
|
|
393
|
+
{...labellingProps}
|
|
394
|
+
{...disabledInteractionProps(rest.onKeyDown)}
|
|
395
|
+
{...sharedProps}>
|
|
396
|
+
{content}
|
|
397
|
+
</DisabledAnchor>
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
if (role === 'link' || isDisabledLink) {
|
|
352
402
|
if (onRemove == null) {
|
|
353
403
|
return (
|
|
354
404
|
<LinkComponent
|
|
@@ -356,7 +406,11 @@ export function Token({
|
|
|
356
406
|
href={href as string}
|
|
357
407
|
{...pressable}
|
|
358
408
|
{...mergeProps(
|
|
359
|
-
themeProps('token', {
|
|
409
|
+
themeProps('token', {
|
|
410
|
+
color,
|
|
411
|
+
size,
|
|
412
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
413
|
+
}),
|
|
360
414
|
focusOutlineProps.focusVisible(
|
|
361
415
|
styles.base,
|
|
362
416
|
sizeStyles[size],
|
|
@@ -370,6 +424,7 @@ export function Token({
|
|
|
370
424
|
style,
|
|
371
425
|
)}
|
|
372
426
|
{...rest}
|
|
427
|
+
{...labellingProps}
|
|
373
428
|
{...(isDisabled ? {'aria-disabled': true} : {})}
|
|
374
429
|
{...sharedProps}>
|
|
375
430
|
{content}
|
|
@@ -405,7 +460,11 @@ export function Token({
|
|
|
405
460
|
</span>
|
|
406
461
|
}
|
|
407
462
|
{...mergeProps(
|
|
408
|
-
themeProps('token', {
|
|
463
|
+
themeProps('token', {
|
|
464
|
+
color,
|
|
465
|
+
size,
|
|
466
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
467
|
+
}),
|
|
409
468
|
focusOutlineProps.focusWithin(
|
|
410
469
|
styles.base,
|
|
411
470
|
sizeStyles[size],
|
|
@@ -419,6 +478,7 @@ export function Token({
|
|
|
419
478
|
style,
|
|
420
479
|
)}
|
|
421
480
|
{...rest}
|
|
481
|
+
{...labellingProps}
|
|
422
482
|
{...sharedProps}
|
|
423
483
|
/>
|
|
424
484
|
);
|
|
@@ -439,7 +499,11 @@ export function Token({
|
|
|
439
499
|
onClick={isDisabled ? undefined : handleContainerClick}
|
|
440
500
|
{...pressable}
|
|
441
501
|
{...mergeProps(
|
|
442
|
-
themeProps('token', {
|
|
502
|
+
themeProps('token', {
|
|
503
|
+
color,
|
|
504
|
+
size,
|
|
505
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
506
|
+
}),
|
|
443
507
|
focusOutlineProps.focusWithin(
|
|
444
508
|
styles.base,
|
|
445
509
|
sizeStyles[size],
|
|
@@ -458,6 +522,7 @@ export function Token({
|
|
|
458
522
|
<button
|
|
459
523
|
type="button"
|
|
460
524
|
onClick={effectiveOnClick}
|
|
525
|
+
{...labellingProps}
|
|
461
526
|
aria-disabled={isDisabled || undefined}
|
|
462
527
|
{...(isDisabled ? disabledInteractionProps() : null)}
|
|
463
528
|
{...stylex.props(styles.invisibleButton)}>
|
|
@@ -479,7 +544,11 @@ export function Token({
|
|
|
479
544
|
<span
|
|
480
545
|
ref={ref}
|
|
481
546
|
{...mergeProps(
|
|
482
|
-
themeProps('token', {
|
|
547
|
+
themeProps('token', {
|
|
548
|
+
color,
|
|
549
|
+
size,
|
|
550
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
551
|
+
}),
|
|
483
552
|
stylex.props(
|
|
484
553
|
styles.base,
|
|
485
554
|
sizeStyles[size],
|
|
@@ -491,6 +560,7 @@ export function Token({
|
|
|
491
560
|
style,
|
|
492
561
|
)}
|
|
493
562
|
{...rest}
|
|
563
|
+
{...labellingProps}
|
|
494
564
|
{...sharedProps}>
|
|
495
565
|
{content}
|
|
496
566
|
</span>
|
package/src/Token/TokenLink.tsx
CHANGED
|
@@ -32,6 +32,7 @@ import type {LinkComponentType} from '../Link/types';
|
|
|
32
32
|
import {composeEventHandlers} from '../utils';
|
|
33
33
|
|
|
34
34
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
35
|
+
import {disabledInteractionProps} from '../utils/disabledInteraction';
|
|
35
36
|
export interface TokenLinkProps extends HTMLAttributes<HTMLElement> {
|
|
36
37
|
/** Ref forwarded to the container element. */
|
|
37
38
|
ref?: Ref<HTMLElement>;
|
|
@@ -100,13 +101,26 @@ export function TokenLink({
|
|
|
100
101
|
: composeEventHandlers(onMouseUpProp, onMouseUp)
|
|
101
102
|
}>
|
|
102
103
|
{icon}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
{isDisabled ? (
|
|
105
|
+
// A disabled link stays a focusable link with no destination, as a
|
|
106
|
+
// disabled Link does (spec:AST-085 FR1, FR5; component:Link FR5).
|
|
107
|
+
<a
|
|
108
|
+
ref={linkRef as Ref<HTMLAnchorElement>}
|
|
109
|
+
role="link"
|
|
110
|
+
aria-disabled={true}
|
|
111
|
+
tabIndex={0}
|
|
112
|
+
{...linkStyleProps}
|
|
113
|
+
{...disabledInteractionProps()}>
|
|
114
|
+
{labelContent}
|
|
115
|
+
</a>
|
|
116
|
+
) : (
|
|
117
|
+
<LinkComponent
|
|
118
|
+
ref={linkRef as Ref<HTMLAnchorElement>}
|
|
119
|
+
href={href}
|
|
120
|
+
{...linkStyleProps}>
|
|
121
|
+
{labelContent}
|
|
122
|
+
</LinkComponent>
|
|
123
|
+
)}
|
|
110
124
|
{endContent}
|
|
111
125
|
{removeButton}
|
|
112
126
|
</span>
|
|
@@ -16,6 +16,7 @@ verified_by:
|
|
|
16
16
|
packages/core/src/Tokenizer/Tokenizer.ssr.test.tsx,
|
|
17
17
|
packages/core/src/Tokenizer/TokenizerBottomSheet.test.tsx,
|
|
18
18
|
packages/core/src/Tokenizer/Tokenizer.props-type.test.tsx,
|
|
19
|
+
packages/core/src/PowerSearch/PowerSearch.test.tsx,
|
|
19
20
|
packages/core/src/internal/tokenizer-presentation.test.ts,
|
|
20
21
|
packages/core/src/Typeahead/Typeahead.test.tsx,
|
|
21
22
|
packages/core/src/Layer/useLayer.test.tsx,
|
|
@@ -325,7 +326,7 @@ presentation, which has no inline combobox, suggestion menu, or end lane.
|
|
|
325
326
|
|
|
326
327
|
## Accessibility contract
|
|
327
328
|
|
|
328
|
-
AR1–AR5 describe the `popover` presentation; AR6 describes the sheet
|
|
329
|
+
AR1–AR5 and AR7 describe the `popover` presentation; AR6 describes the sheet
|
|
329
330
|
presentation.
|
|
330
331
|
|
|
331
332
|
- **AR1 — Modality equivalence.** The same input or token/control produces the
|
|
@@ -371,15 +372,27 @@ presentation.
|
|
|
371
372
|
once the confirmation has closed, since a message sent while the
|
|
372
373
|
confirmation covers the sheet is not heard — `spec:AST-086/FR14`), the
|
|
373
374
|
search's busy start, and how each search
|
|
374
|
-
ended — the result count for a non-empty query, or the empty state's text
|
|
375
|
-
|
|
376
|
-
|
|
375
|
+
ended — the result count for a non-empty query, or the empty state's text when
|
|
376
|
+
it shows, both from the search's own `useAnnounce({hasReplace: true})`
|
|
377
|
+
instance (`spec:AST-086/FR9`, FR13), so a newer one replaces one not yet
|
|
378
|
+
spoken — are announced once per occasion from inside the sheet through
|
|
379
|
+
`useAnnounce`, which `spec:AST-086/FR14` routes into the persistent
|
|
377
380
|
polite container of the sheet's own dialog while it is open, because the
|
|
378
381
|
shared page-body channel is not exposed behind a native modal; the
|
|
379
382
|
container follows FR3, FR5, and FR6 of that record (WCAG 2.2 SC 4.1.3
|
|
380
383
|
through `spec:AST-020/FR1`). After the sheet closes focus returns to the
|
|
381
384
|
trigger and the field's announcements follow the same FR14 route from
|
|
382
385
|
wherever the field renders.
|
|
386
|
+
- **AR7 — Clear all is announced.** In the `popover` presentation, the field's
|
|
387
|
+
Clear all, which empties every token at once and moves focus to the input,
|
|
388
|
+
announces "All items removed" (`@astryx.tokenizer.allRemoved`, the words of
|
|
389
|
+
the sheet's Clear all in AR6) the same way the field announces a token added
|
|
390
|
+
or removed: politely, through the shared channel (`spec:AST-086/FR2`, FR5).
|
|
391
|
+
It is announced once per Clear all (`spec:AST-086/FR6`); a Clear all
|
|
392
|
+
confirmed in the sheet is announced by the sheet alone (AR6), and the field
|
|
393
|
+
stays silent for it (WCAG 2.2 SC 4.1.3 through `spec:AST-020/FR9`). A
|
|
394
|
+
component that composes Tokenizer and words its own Clear all announces its
|
|
395
|
+
own words instead (`component:PowerSearch`).
|
|
383
396
|
|
|
384
397
|
## Design relationships
|
|
385
398
|
|
|
@@ -460,6 +473,7 @@ become Tokenizer policy.
|
|
|
460
473
|
| FR13–FR15, AR5 | Focused Tokenizer/BaseTypeahead tests and exact-head Chromium interaction evidence | pointer/keyboard commit, first/middle/last choice, rejected/deferred control, loading, disabled, max, exhaustion, Escape, Tab, outside focus | Selected values remain available, order changes, focus leaves the combobox, active descendant names no option, stale work reopens, or a terminal state stays interactive. | `audit:Tokenizer/multi-select` |
|
|
461
474
|
| PR1–PR5 | Instrumented reads, pending-frame cleanup tests, and first-frame Chromium capture | open, close before frame, reopen opposite side, resize while open | Render-time/repeated reads, observer/pointer tracking, uncancelled frame, or first-frame jump occurs. | `audit:Tokenizer/performance` |
|
|
462
475
|
| AR1–AR5 | Existing interaction suites plus focused pointer/keyboard/browser checks; native-disabled assertions pending conformance (`spec:AST-085`) | add/edit, focus/refocus, overflow, disabled, dismissal, retained bootstrap selection | Modality changes placement, semantics/focus regress, active descendant becomes invalid, or visible placement is wrong before fallback. | `audit:Tokenizer/accessibility` |
|
|
476
|
+
| AR7 | Focused Tokenizer tests, inline and sheet, and the PowerSearch test | inline Clear all; a localized catalog; a Clear all confirmed in the sheet counted across every live region; PowerSearch's own words | The inline Clear all is silent, speaks words other than its catalog message, a sheet Clear all is announced twice, or PowerSearch speaks Tokenizer's words. | `audit:Tokenizer/accessibility` |
|
|
463
477
|
| FR16–FR24, AR6, PR6 | Focused Tokenizer sheet tests with the compact-touch query stubbed both ways, a server-render-then-hydrate test, plus real-engine touch evidence | default popover, forced sheet, adaptive both ways, `adaptive` server-rendered as the combobox and hydrated without a recoverable error, then the trigger on a coarse-pointer client with the body still active, with `hasAutoFocus` the autofocused input's focus on the trigger after the swap and no `onBlur`/`onFocus` reported, the trigger's box against the hydrating field's at 390 and 414px, base props and ref on the trigger, the trigger's description in the inline input's order — a disabled trigger with `disabledMessage`, `description` and a status exposing the caller's ids, the description, the status message and the reason before the count and the tokens —, inert-prop warning, pending search, in-sheet announcements of toggles, busy start, result count and the rendered empty outcome, the confirmed Clear all announced once the confirmation has closed, a below-threshold query, a rejecting source, focus on the panel at open, the query cleared by a swipe, scrim, or Escape close, focus after a presentation change with the sheet closed, focus after the create row, focus after a confirmed Clear all, a spent Clear all focusable with `aria-disabled` and no action, focus after a settled search removes the focused row, no busy feedback or busy-start announcement on open with an instant source, only the search field — no list, no message, no announcement — for an empty query with nothing to list (a search-only source, nothing selected), and the list once a query finds items, element counts under a fine and a coarse pointer at rest and open (Chromium, Experimental stories: adaptive 154/120 at rest — the closed trigger in place of the inline field, a different element that stays under the fine count — and 157/165 open at the query "e" with no footer, the coarse total reconciled as rest − the re-hosted surfaces host + the dialog of 47 by part, forced sheet 114/114 and 165/165; the two owner exceptions DEC-3 records beyond the FR60 allowance, with before and after counts), no confirmation dialog in the DOM while none is pending, the query kept across a disabled-forced close, `aria-setsize`/`aria-posinset` on each row's `listitem` and the next batch on focus reaching the last rendered row, open/toggle/reopen order, create, batches, limit, Clear all, disabled while open, focus return | A field without `experimental` changes, a toggle moves a row, Clear all skips confirmation, the limit disables checked rows, or the popover bundle carries the sheet. | `audit:Tokenizer/sheet` |
|
|
464
478
|
| Record structure | `scripts/check-knowledge.mjs` | Template-v3 current record and current-only frontmatter links | Invalid metadata, authority, or relationship references fail repository validation. | `audit:Tokenizer/knowledge` |
|
|
465
479
|
|
|
@@ -28,6 +28,7 @@ import type {SearchSource, SearchableItem} from '../Typeahead/types';
|
|
|
28
28
|
import {TestIcon} from '../__tests__/TestIcon';
|
|
29
29
|
import {InternationalizationProvider} from '../i18n';
|
|
30
30
|
import type * as TokenModule from '../Token';
|
|
31
|
+
import {FormLayout} from '../FormLayout/FormLayout';
|
|
31
32
|
|
|
32
33
|
// Every Token render, in order, by label.
|
|
33
34
|
//
|
|
@@ -723,6 +724,54 @@ describe('Tokenizer', () => {
|
|
|
723
724
|
bootstrap: () => [],
|
|
724
725
|
};
|
|
725
726
|
|
|
727
|
+
it('labels the inline create row from the catalog, following the locale', async () => {
|
|
728
|
+
const overrides = {
|
|
729
|
+
de: {'@astryx.tokenizer.create': '„{value}“ erstellen'},
|
|
730
|
+
};
|
|
731
|
+
const {rerender} = render(
|
|
732
|
+
<InternationalizationProvider locale="de" overrides={overrides}>
|
|
733
|
+
<Tokenizer
|
|
734
|
+
label="Obst"
|
|
735
|
+
searchSource={emptySource}
|
|
736
|
+
value={[]}
|
|
737
|
+
onChange={() => {}}
|
|
738
|
+
hasCreate
|
|
739
|
+
debounceMs={0}
|
|
740
|
+
/>
|
|
741
|
+
</InternationalizationProvider>,
|
|
742
|
+
);
|
|
743
|
+
await act(async () => {
|
|
744
|
+
fireEvent.change(screen.getByRole('combobox'), {
|
|
745
|
+
target: {value: 'Kiwi'},
|
|
746
|
+
});
|
|
747
|
+
});
|
|
748
|
+
await act(async () => {
|
|
749
|
+
await new Promise(r => setTimeout(r, 50));
|
|
750
|
+
});
|
|
751
|
+
expect(screen.getByText('„Kiwi“ erstellen')).toBeInTheDocument();
|
|
752
|
+
expect(screen.queryByText('Create "Kiwi"')).not.toBeInTheDocument();
|
|
753
|
+
|
|
754
|
+
rerender(
|
|
755
|
+
<InternationalizationProvider locale="en" overrides={overrides}>
|
|
756
|
+
<Tokenizer
|
|
757
|
+
label="Obst"
|
|
758
|
+
searchSource={emptySource}
|
|
759
|
+
value={[]}
|
|
760
|
+
onChange={() => {}}
|
|
761
|
+
hasCreate
|
|
762
|
+
debounceMs={0}
|
|
763
|
+
/>
|
|
764
|
+
</InternationalizationProvider>,
|
|
765
|
+
);
|
|
766
|
+
// The row is derived per query, so the next query takes the new locale.
|
|
767
|
+
await act(async () => {
|
|
768
|
+
fireEvent.change(screen.getByRole('combobox'), {
|
|
769
|
+
target: {value: 'Kiwis'},
|
|
770
|
+
});
|
|
771
|
+
});
|
|
772
|
+
expect(await screen.findByText('Create "Kiwis"')).toBeInTheDocument();
|
|
773
|
+
});
|
|
774
|
+
|
|
726
775
|
it('still offers Create below minQueryLength, and does not search', async () => {
|
|
727
776
|
// The threshold exists to avoid a fetch too broad to be worth making.
|
|
728
777
|
// Creating costs no fetch, so a field that can create `QA` should not
|
|
@@ -1355,6 +1404,33 @@ describe('Tokenizer', () => {
|
|
|
1355
1404
|
});
|
|
1356
1405
|
});
|
|
1357
1406
|
describe('announcements', () => {
|
|
1407
|
+
it("announces Clear all politely, in the sheet's words", async () => {
|
|
1408
|
+
const onChange = vi.fn();
|
|
1409
|
+
render(
|
|
1410
|
+
<InternationalizationProvider
|
|
1411
|
+
locale="fr"
|
|
1412
|
+
overrides={{
|
|
1413
|
+
fr: {'@astryx.tokenizer.allRemoved': 'Tout a été retiré'},
|
|
1414
|
+
}}>
|
|
1415
|
+
<Tokenizer
|
|
1416
|
+
label="Members"
|
|
1417
|
+
searchSource={userSource}
|
|
1418
|
+
value={[users[0], users[1]]}
|
|
1419
|
+
onChange={onChange}
|
|
1420
|
+
hasClear
|
|
1421
|
+
/>
|
|
1422
|
+
</InternationalizationProvider>,
|
|
1423
|
+
);
|
|
1424
|
+
fireEvent.click(screen.getByRole('button', {name: /clear/i}));
|
|
1425
|
+
expect(onChange).toHaveBeenCalledWith(
|
|
1426
|
+
[],
|
|
1427
|
+
expect.objectContaining({type: 'remove'}),
|
|
1428
|
+
);
|
|
1429
|
+
await waitFor(() => {
|
|
1430
|
+
expect(politeRegion()?.textContent).toBe('Tout a été retiré');
|
|
1431
|
+
});
|
|
1432
|
+
});
|
|
1433
|
+
|
|
1358
1434
|
it('announces removal politely on Backspace with an empty input', async () => {
|
|
1359
1435
|
const onChange = vi.fn();
|
|
1360
1436
|
render(
|
|
@@ -1525,6 +1601,86 @@ describe('Tokenizer', () => {
|
|
|
1525
1601
|
});
|
|
1526
1602
|
});
|
|
1527
1603
|
|
|
1604
|
+
describe('Tokenizer required state (FormLayout FR5, AR2)', () => {
|
|
1605
|
+
it('exposes the resolved required state on the combobox', () => {
|
|
1606
|
+
const field = (props: {
|
|
1607
|
+
isRequired?: boolean;
|
|
1608
|
+
isOptional?: boolean;
|
|
1609
|
+
label: string;
|
|
1610
|
+
}) => (
|
|
1611
|
+
<Tokenizer
|
|
1612
|
+
{...props}
|
|
1613
|
+
searchSource={userSource}
|
|
1614
|
+
value={[]}
|
|
1615
|
+
onChange={() => {}}
|
|
1616
|
+
/>
|
|
1617
|
+
);
|
|
1618
|
+
render(
|
|
1619
|
+
<>
|
|
1620
|
+
{field({label: 'Plain'})}
|
|
1621
|
+
{field({label: 'Explicit', isRequired: true})}
|
|
1622
|
+
<FormLayout defaultOptionality="required">
|
|
1623
|
+
{field({label: 'By default'})}
|
|
1624
|
+
{field({label: 'Opted out', isOptional: true})}
|
|
1625
|
+
</FormLayout>
|
|
1626
|
+
</>,
|
|
1627
|
+
);
|
|
1628
|
+
const required = (name: string) =>
|
|
1629
|
+
screen
|
|
1630
|
+
.getByRole('combobox', {name: new RegExp(`^${name}`)})
|
|
1631
|
+
.getAttribute('aria-required');
|
|
1632
|
+
expect(required('Plain')).toBeNull();
|
|
1633
|
+
expect(required('Explicit')).toBe('true');
|
|
1634
|
+
expect(required('By default')).toBe('true');
|
|
1635
|
+
expect(required('Opted out')).toBeNull();
|
|
1636
|
+
});
|
|
1637
|
+
});
|
|
1638
|
+
|
|
1639
|
+
describe('Tokenizer invalid state', () => {
|
|
1640
|
+
it('marks the combobox invalid for an error status only (WCAG 4.1.2)', () => {
|
|
1641
|
+
const field = (
|
|
1642
|
+
label: string,
|
|
1643
|
+
status?: {type: 'error' | 'warning'; message: string},
|
|
1644
|
+
) => (
|
|
1645
|
+
<Tokenizer
|
|
1646
|
+
label={label}
|
|
1647
|
+
status={status}
|
|
1648
|
+
searchSource={userSource}
|
|
1649
|
+
value={[]}
|
|
1650
|
+
onChange={() => {}}
|
|
1651
|
+
/>
|
|
1652
|
+
);
|
|
1653
|
+
render(
|
|
1654
|
+
<>
|
|
1655
|
+
{field('None')}
|
|
1656
|
+
{field('Warned', {type: 'warning', message: 'Check this'})}
|
|
1657
|
+
{field('Failed', {type: 'error', message: 'Pick one'})}
|
|
1658
|
+
</>,
|
|
1659
|
+
);
|
|
1660
|
+
const invalid = (name: string) =>
|
|
1661
|
+
screen.getByRole('combobox', {name}).getAttribute('aria-invalid');
|
|
1662
|
+
expect(invalid('None')).toBeNull();
|
|
1663
|
+
expect(invalid('Warned')).toBeNull();
|
|
1664
|
+
expect(invalid('Failed')).toBe('true');
|
|
1665
|
+
});
|
|
1666
|
+
|
|
1667
|
+
it("keeps a caller's own aria-invalid and aria-required when the field's own state is off", () => {
|
|
1668
|
+
render(
|
|
1669
|
+
<Tokenizer
|
|
1670
|
+
label="Caller"
|
|
1671
|
+
aria-invalid="true"
|
|
1672
|
+
aria-required="true"
|
|
1673
|
+
searchSource={userSource}
|
|
1674
|
+
value={[]}
|
|
1675
|
+
onChange={() => {}}
|
|
1676
|
+
/>,
|
|
1677
|
+
);
|
|
1678
|
+
const combobox = screen.getByRole('combobox', {name: 'Caller'});
|
|
1679
|
+
expect(combobox).toHaveAttribute('aria-invalid', 'true');
|
|
1680
|
+
expect(combobox).toHaveAttribute('aria-required', 'true');
|
|
1681
|
+
});
|
|
1682
|
+
});
|
|
1683
|
+
|
|
1528
1684
|
describe('Tokenizer statusVariant forwarding', () => {
|
|
1529
1685
|
it('defaults to attached (status renders with data-variant="attached")', () => {
|
|
1530
1686
|
const {container} = render(
|
|
@@ -2119,3 +2275,23 @@ describe('Tokenizer consumer key handler order', () => {
|
|
|
2119
2275
|
expect(currentTarget).toBe(screen.getByRole('combobox'));
|
|
2120
2276
|
});
|
|
2121
2277
|
});
|
|
2278
|
+
|
|
2279
|
+
describe('Tokenizer caller aria-labelledby', () => {
|
|
2280
|
+
it('names the input by its label and a caller aria-labelledby', () => {
|
|
2281
|
+
render(
|
|
2282
|
+
<>
|
|
2283
|
+
<span id="billing-heading">Billing</span>
|
|
2284
|
+
<Tokenizer
|
|
2285
|
+
label="Members"
|
|
2286
|
+
searchSource={userSource}
|
|
2287
|
+
value={[]}
|
|
2288
|
+
onChange={() => {}}
|
|
2289
|
+
aria-labelledby="billing-heading"
|
|
2290
|
+
/>
|
|
2291
|
+
</>,
|
|
2292
|
+
);
|
|
2293
|
+
expect(
|
|
2294
|
+
screen.getByRole('combobox', {name: 'Members Billing'}),
|
|
2295
|
+
).toBeInTheDocument();
|
|
2296
|
+
});
|
|
2297
|
+
});
|