@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
|
@@ -39,7 +39,7 @@ system_specs: [spec:AST-085]
|
|
|
39
39
|
| Behavior | One SideNav row: a link or button with optional icon and passive end content, optional row-level actions beside it, and optional nested children that can expand and collapse. In a collapsed rail it is icon-only with a tooltip or a flyout. |
|
|
40
40
|
| End-user impact | Users see and hear the current page, reach row actions before nested items, expand or collapse groups without navigating, and return to the page after choosing a destination in the mobile drawer. |
|
|
41
41
|
| Builder impact | None. |
|
|
42
|
-
| Compatibility/readiness | Records shipped behavior; no public change.
|
|
42
|
+
| Compatibility/readiness | Records shipped behavior; no public change. Three implementation gaps (see Current-state impact). |
|
|
43
43
|
| Review checks | Reject an interactive control rendered inside the primary element, a link that also toggles collapse, a toggle or action that activates the row, collapsed children that stay reachable, or a drawer activation that leaves the drawer open after navigating. |
|
|
44
44
|
| Governing rules | `component:SideNav` FR1–FR5, DD1 (nesting and row geometry); `family:navigation-destinations`; `architecture:interaction-modality`; `architecture:public-component-api`. |
|
|
45
45
|
|
|
@@ -68,10 +68,6 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
68
68
|
|
|
69
69
|
## Current-state impact
|
|
70
70
|
|
|
71
|
-
- **A disabled item leaves the tab order.** A disabled item renders a
|
|
72
|
-
`<button>` with the native `disabled` attribute, so it is skipped by Tab and
|
|
73
|
-
exposes no focusable disabled state. `spec:AST-085` FR1 has a disabled control
|
|
74
|
-
expose `aria-disabled="true"` and keep its tab stop.
|
|
75
71
|
- **A disabled parent stays operable in a collapsed rail.** In a collapsed rail,
|
|
76
72
|
a disabled item with children renders its flyout trigger with neither
|
|
77
73
|
`disabled` nor `aria-disabled`, so it keeps its tab stop and announces no
|
|
@@ -125,7 +121,7 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
125
121
|
|
|
126
122
|
| ID | Invariant | Basis |
|
|
127
123
|
| ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ |
|
|
128
|
-
| FR1 | The primary element is the `as` component, else the `LinkProvider` link, else `<a>`, when `href` is set and the item is enabled; otherwise a `<button type="button">`. A disabled item
|
|
124
|
+
| FR1 | The primary element is the `as` component, else the `LinkProvider` link, else `<a>`, when `href` is set and the item is enabled; otherwise a `<button type="button">`. A disabled item stays focusable with `aria-disabled="true"`, keeps its tab stop, and keeps focus when it becomes disabled (`spec:AST-085` FR1, FR4). It shows the icon (`selectedIcon` when selected and given), the label, `endContent`, and, for a whole-row collapsible item, a chevron. `endContent` is passive and renders inside the primary element. | Current source and tests |
|
|
129
125
|
| FR2 | In an expanded rail and on a collapsed leaf, `isSelected` sets `aria-current="page"` on the primary element, never on a row wrapper. A collapsed parent's flyout trigger carries no `aria-current`. | Current source and tests |
|
|
130
126
|
| FR3 | A disabled item does not fire `onClick` or navigate. Its row actions stay operable. | Current source and tests |
|
|
131
127
|
| FR4 | `actions` render as siblings of the primary element at the row's trailing edge, after the toggle and before nested children in DOM and focus order, at the row's control size (`sm`) unless a control sets its own (`architecture:component-size-cascade`). Clicking an action neither activates nor toggles the row. A row wrapper exists only when there are actions or an independent toggle; a falsy `actions` adds none. | Current source and tests |
|
|
@@ -146,16 +142,16 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
146
142
|
|
|
147
143
|
### Representative states
|
|
148
144
|
|
|
149
|
-
| State | Required invariant
|
|
150
|
-
| -------------------------- |
|
|
151
|
-
| Link, selected | `aria-current="page"` on the link; selected icon if given.
|
|
152
|
-
| Disabled button | `aria-disabled`; focusable; no `onClick`.
|
|
153
|
-
| Collapsible without action | Whole row toggles; chevron turns.
|
|
154
|
-
| Collapsible with `href` | Link navigates; separate toggle button collapses.
|
|
155
|
-
| Actions | Actions after toggle, before children; never activate the row.
|
|
156
|
-
| Collapsed rail leaf | Icon-only; tooltip with label.
|
|
157
|
-
| Collapsed rail parent | Icon-only trigger; flyout with header and children.
|
|
158
|
-
| Mobile drawer | Activation closes the drawer.
|
|
145
|
+
| State | Required invariant | Allowed variation |
|
|
146
|
+
| -------------------------- | -------------------------------------------------------------- | ----------------- |
|
|
147
|
+
| Link, selected | `aria-current="page"` on the link; selected icon if given. | Fill. |
|
|
148
|
+
| Disabled button | `aria-disabled`; focusable; no `onClick`. | Muted styling. |
|
|
149
|
+
| Collapsible without action | Whole row toggles; chevron turns. | — |
|
|
150
|
+
| Collapsible with `href` | Link navigates; separate toggle button collapses. | — |
|
|
151
|
+
| Actions | Actions after toggle, before children; never activate the row. | Action content. |
|
|
152
|
+
| Collapsed rail leaf | Icon-only; tooltip with label. | — |
|
|
153
|
+
| Collapsed rail parent | Icon-only trigger; flyout with header and children. | Delay. |
|
|
154
|
+
| Mobile drawer | Activation closes the drawer. | — |
|
|
159
155
|
|
|
160
156
|
### Transformation and precedence order
|
|
161
157
|
|
|
@@ -211,16 +207,10 @@ is recorded. Row geometry visual intent is `component:SideNav` DD1.
|
|
|
211
207
|
| FR11 | `SideNav.test.tsx` focus ring suite | Plain, split, actions rows | Missing shared ring classes fail. | `audit:SideNavItem/accessibility` |
|
|
212
208
|
| FR3, FR7, FR9 | `SideNav.test.tsx` keyboard operation and focus management suites | Tab order, Enter/Space toggle, flyout Escape | Lost order, a stranded focus, or no focus return fails. | `audit:SideNavItem/accessibility` |
|
|
213
209
|
|
|
214
|
-
Pending conformance: the SideNavItem suite's native-`disabled` assertion and
|
|
215
|
-
the keyboard suite's disabled Tab-skip assertion pin FR1's implementation gap;
|
|
216
|
-
they change when disabled items follow `spec:AST-085`.
|
|
217
|
-
|
|
218
210
|
Read from source, with no focused test yet:
|
|
219
211
|
|
|
220
|
-
- FR1 and ORD1–ORD2:
|
|
221
|
-
|
|
222
|
-
button's `type="button"`, the icon, the selected-icon swap, and the whole-row
|
|
223
|
-
chevron.
|
|
212
|
+
- FR1 and ORD1–ORD2: the button's `type="button"`, the icon, the
|
|
213
|
+
selected-icon swap, and the whole-row chevron.
|
|
224
214
|
- FR4: the actions' trailing-edge placement and the wrapper for an independent
|
|
225
215
|
toggle without actions.
|
|
226
216
|
- FR5: the forwarded `ref` and `xstyle` on the outer box.
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* provided and fall back to `label` when it is missing or blank. Their label
|
|
14
14
|
* tooltip binds to the interactive control through a callback ref, so hover,
|
|
15
15
|
* keyboard focus, and `aria-describedby` follow the control from the first
|
|
16
|
-
* collapsed render. A disabled control takes
|
|
17
|
-
*
|
|
16
|
+
* collapsed render. A disabled control takes no pointer, so its row listens
|
|
17
|
+
* for the tooltip instead, while the control keeps focus and the description.
|
|
18
18
|
*
|
|
19
19
|
* Collapsed items with children open their submenu flyout through
|
|
20
20
|
* `useMenuHover`, the shared hover-intent hook (same one `SideNavHeading` and
|
|
@@ -74,6 +74,7 @@ import {
|
|
|
74
74
|
import {useSideNavRenderMode} from './SideNavRenderContext';
|
|
75
75
|
import {useAppShellMobile} from '../AppShell/AppShellMobileContext';
|
|
76
76
|
import {themeProps} from '../utils/themeProps';
|
|
77
|
+
import {disabledInteractionProps} from '../utils/disabledInteraction';
|
|
77
78
|
import {useTranslator} from '../i18n';
|
|
78
79
|
|
|
79
80
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
@@ -324,6 +325,8 @@ interface NavItemElementProps {
|
|
|
324
325
|
/**
|
|
325
326
|
* Renders `<a>` (via LinkComponent) when `href` is set, otherwise `<button>`.
|
|
326
327
|
* Centralizes the link-vs-button decision used across all SideNavItem paths.
|
|
328
|
+
* A disabled item is a `<button>` that keeps its tab stop and exposes
|
|
329
|
+
* `aria-disabled`, but is inert (spec:AST-085 FR1, FR2).
|
|
327
330
|
*/
|
|
328
331
|
function NavItemElement({
|
|
329
332
|
href,
|
|
@@ -351,8 +354,16 @@ function NavItemElement({
|
|
|
351
354
|
ref={ref as React.Ref<HTMLButtonElement>}
|
|
352
355
|
type="button"
|
|
353
356
|
onClick={onClick}
|
|
354
|
-
|
|
355
|
-
{...
|
|
357
|
+
{...rest}
|
|
358
|
+
{...(isDisabled
|
|
359
|
+
? {
|
|
360
|
+
'aria-disabled': true,
|
|
361
|
+
...disabledInteractionProps(
|
|
362
|
+
rest.onKeyDown as
|
|
363
|
+
React.KeyboardEventHandler<HTMLButtonElement> | undefined,
|
|
364
|
+
),
|
|
365
|
+
}
|
|
366
|
+
: null)}>
|
|
356
367
|
{children}
|
|
357
368
|
</button>
|
|
358
369
|
);
|
|
@@ -539,6 +550,10 @@ export function SideNavItem({
|
|
|
539
550
|
const isRailLeaf = isCollapsed && !hasChildren;
|
|
540
551
|
const railTooltip = useTooltip({
|
|
541
552
|
placement: 'end',
|
|
553
|
+
// A disabled leaf's row is the trigger (see the collapsed path). It is not
|
|
554
|
+
// focusable itself, so `auto` would never hear the focus that bubbles up
|
|
555
|
+
// from its control.
|
|
556
|
+
focusTrigger: 'always',
|
|
542
557
|
isEnabled: isRailLeaf,
|
|
543
558
|
isOpen: isRailLeaf ? undefined : false,
|
|
544
559
|
});
|
|
@@ -702,14 +717,17 @@ export function SideNavItem({
|
|
|
702
717
|
|
|
703
718
|
// Items without children: icon-only link or button, its label in a
|
|
704
719
|
// tooltip. The control is the trigger, so the element that takes focus is
|
|
705
|
-
// the one described. A disabled control takes
|
|
706
|
-
// (`navItemStyles.disabled`)
|
|
720
|
+
// the one described. A disabled control takes no pointer
|
|
721
|
+
// (`navItemStyles.disabled`), so its row listens for the tooltip instead;
|
|
722
|
+
// the control still takes focus (focusin reaches the row) and stays the
|
|
723
|
+
// element described (spec:AST-085 FR5).
|
|
707
724
|
const isRowTrigger = isDisabled;
|
|
708
725
|
const collapsedAriaProps = {
|
|
709
726
|
'aria-current': isSelected ? ('page' as const) : undefined,
|
|
710
|
-
'aria-describedby':
|
|
711
|
-
|
|
712
|
-
|
|
727
|
+
'aria-describedby': joinIds(
|
|
728
|
+
rest['aria-describedby'],
|
|
729
|
+
railTooltip.describedBy,
|
|
730
|
+
),
|
|
713
731
|
'aria-disabled': isDisabled || undefined,
|
|
714
732
|
'aria-label': collapsedAccessibleLabel,
|
|
715
733
|
'data-testid': testId,
|
|
@@ -732,7 +750,6 @@ export function SideNavItem({
|
|
|
732
750
|
return (
|
|
733
751
|
<div
|
|
734
752
|
ref={isRowTrigger ? railTooltip.ref : undefined}
|
|
735
|
-
aria-describedby={isRowTrigger ? railTooltip.describedBy : undefined}
|
|
736
753
|
{...stylex.props(styles.root, xstyle)}>
|
|
737
754
|
{collapsedElement}
|
|
738
755
|
{railTooltip.renderTooltip(label)}
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
* rest, the rail ends icons-only or with its labels, a second press mid-motion
|
|
13
13
|
* stays continuous, an expand whose old wrap is not copied keeps the edges
|
|
14
14
|
* together, and Reduce Motion cross-fades under a finger (DR2) and changes at
|
|
15
|
-
* once under a mouse (DR3)
|
|
15
|
+
* once under a mouse (DR3), also on a loaded machine: those two cases read
|
|
16
|
+
* the motion by its own start and end, never at a fixed time
|
|
16
17
|
* @position Testing; the components' unit cases are
|
|
17
18
|
* SideNav/SideNavRailMotion.test.tsx
|
|
18
19
|
*
|
|
@@ -216,30 +217,145 @@ function toggleButton(page: Page) {
|
|
|
216
217
|
return page.getByRole('button', {name: /^(Collapse|Expand) sidebar$/});
|
|
217
218
|
}
|
|
218
219
|
|
|
219
|
-
/**
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
220
|
+
/**
|
|
221
|
+
* A loaded machine, made repeatable: Chromium's CPU throttle slows the page's
|
|
222
|
+
* main thread four times, or its animation clock runs every animation at a
|
|
223
|
+
* quarter of its speed, as when frames come late. Neither changes what the
|
|
224
|
+
* motion is; both move when it starts and ends in real time.
|
|
225
|
+
*/
|
|
226
|
+
const LOADS = ['idle', 'a slow CPU', 'slow frames'] as const;
|
|
227
|
+
type Load = (typeof LOADS)[number];
|
|
228
|
+
|
|
229
|
+
async function applyLoad(page: Page, load: Load): Promise<void> {
|
|
230
|
+
if (load === 'idle') {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const cdp = await page.context().newCDPSession(page);
|
|
234
|
+
if (load === 'a slow CPU') {
|
|
235
|
+
await cdp.send('Emulation.setCPUThrottlingRate', {rate: 4});
|
|
236
|
+
} else {
|
|
237
|
+
await cdp.send('Animation.enable');
|
|
238
|
+
await cdp.send('Animation.setPlaybackRate', {playbackRate: 0.25});
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** The test-name suffix for a load: nothing when idle. */
|
|
243
|
+
function underLoad(load: Load): string {
|
|
244
|
+
return load === 'idle' ? '' : `, with ${load}`;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** One animation of the rail's motion: what it animates and when it ends. */
|
|
248
|
+
interface MotionPart {
|
|
249
|
+
readonly properties: ReadonlyArray<string>;
|
|
250
|
+
/**
|
|
251
|
+
* When it ends on its own clock, in ms: its delay, every iteration and its
|
|
252
|
+
* end delay, so a delayed or repeated fade counts in full.
|
|
253
|
+
*/
|
|
254
|
+
readonly endTime: number;
|
|
255
|
+
/** Whether it animates an element holding the page's main content. */
|
|
256
|
+
readonly holdsPage: boolean;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/** The record `recordMotion` keeps on the page, for `settledMotion`. */
|
|
260
|
+
interface MotionRecord {
|
|
261
|
+
readonly seen: Map<Animation, MotionPart>;
|
|
262
|
+
readonly collect: () => void;
|
|
263
|
+
sampling: boolean;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Starts recording the motion a press of the toggle causes: every animation
|
|
268
|
+
* running on any frame from now on, described when first seen. Animations on
|
|
269
|
+
* the toggle element itself are its press feedback (its highlight's release
|
|
270
|
+
* fade runs on the button), not the rail's, so they are left out; everything
|
|
271
|
+
* inside it, its chevron included, stays in. `settledMotion` ends the record.
|
|
272
|
+
*/
|
|
273
|
+
async function recordMotion(page: Page): Promise<void> {
|
|
274
|
+
await toggleButton(page).evaluate(toggle => {
|
|
275
|
+
const seen = new Map<Animation, MotionPart>();
|
|
276
|
+
const collect = () => {
|
|
277
|
+
for (const animation of document.getAnimations()) {
|
|
278
|
+
const effect = animation.effect;
|
|
279
|
+
if (
|
|
280
|
+
seen.has(animation) ||
|
|
281
|
+
!(effect instanceof KeyframeEffect) ||
|
|
282
|
+
effect.target === toggle
|
|
283
|
+
) {
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
const properties = new Set<string>();
|
|
287
|
+
for (const frame of effect.getKeyframes()) {
|
|
288
|
+
for (const key of Object.keys(frame)) {
|
|
289
|
+
if (
|
|
290
|
+
!['offset', 'computedOffset', 'easing', 'composite'].includes(key)
|
|
291
|
+
) {
|
|
292
|
+
properties.add(key);
|
|
293
|
+
}
|
|
231
294
|
}
|
|
232
295
|
}
|
|
296
|
+
seen.set(animation, {
|
|
297
|
+
properties: [...properties],
|
|
298
|
+
endTime: Number(effect.getComputedTiming().endTime),
|
|
299
|
+
holdsPage:
|
|
300
|
+
effect.target instanceof Element &&
|
|
301
|
+
effect.target.contains(document.querySelector('[role="main"]')),
|
|
302
|
+
});
|
|
233
303
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
304
|
+
};
|
|
305
|
+
const record: MotionRecord = {seen, collect, sampling: true};
|
|
306
|
+
(window as unknown as {railMotion: MotionRecord}).railMotion = record;
|
|
307
|
+
const sample = () => {
|
|
308
|
+
if (record.sampling) {
|
|
309
|
+
collect();
|
|
310
|
+
requestAnimationFrame(sample);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
requestAnimationFrame(sample);
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Ends the record once the motion has ended on its own clock: every recorded
|
|
319
|
+
* animation has finished or been cancelled, and two more frames have passed
|
|
320
|
+
* without a new one, so what its end commits has landed. One that never ends
|
|
321
|
+
* (endless iterations) is not waited for; it is returned with an `endTime`
|
|
322
|
+
* of Infinity, for the cases to fail on. It never waits a fixed time: a loaded
|
|
323
|
+
* machine changes how long this takes, not what it reads.
|
|
324
|
+
*/
|
|
325
|
+
async function settledMotion(page: Page): Promise<ReadonlyArray<MotionPart>> {
|
|
326
|
+
return page.evaluate(async () => {
|
|
327
|
+
const record = (window as unknown as {railMotion: MotionRecord}).railMotion;
|
|
328
|
+
const isRunning = (animation: Animation) =>
|
|
329
|
+
animation.playState === 'running' &&
|
|
330
|
+
Number.isFinite(Number(animation.effect?.getComputedTiming().endTime));
|
|
331
|
+
const twoFrames = async () =>
|
|
332
|
+
new Promise<void>(resolve => {
|
|
333
|
+
requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
|
|
334
|
+
});
|
|
335
|
+
for (;;) {
|
|
336
|
+
record.collect();
|
|
337
|
+
const running = [...record.seen.keys()].filter(isRunning);
|
|
338
|
+
if (running.length > 0) {
|
|
339
|
+
await Promise.all(
|
|
340
|
+
running.map(async animation =>
|
|
341
|
+
animation.finished.catch(() => undefined),
|
|
342
|
+
),
|
|
343
|
+
);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
const seenBefore = record.seen.size;
|
|
347
|
+
await twoFrames();
|
|
348
|
+
record.collect();
|
|
349
|
+
if (
|
|
350
|
+
record.seen.size === seenBefore &&
|
|
351
|
+
![...record.seen.keys()].some(isRunning)
|
|
352
|
+
) {
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
record.sampling = false;
|
|
357
|
+
return [...record.seen.values()];
|
|
358
|
+
});
|
|
243
359
|
}
|
|
244
360
|
|
|
245
361
|
test.describe('component:SideNav FR6 and component:AppShell FR17 under a finger', () => {
|
|
@@ -341,25 +457,29 @@ test.describe('component:SideNav FR6 and component:AppShell FR17 under a finger'
|
|
|
341
457
|
});
|
|
342
458
|
});
|
|
343
459
|
|
|
344
|
-
|
|
345
|
-
page
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
expect(
|
|
354
|
-
|
|
355
|
-
expect(
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
460
|
+
for (const load of LOADS) {
|
|
461
|
+
test(`under Reduce Motion a tap only cross-fades, in 200 ms or less, with the page surface still${underLoad(load)} (design:reduced-motion DR2)`, async ({
|
|
462
|
+
page,
|
|
463
|
+
}) => {
|
|
464
|
+
await page.emulateMedia({reducedMotion: 'reduce'});
|
|
465
|
+
await openStory(page, PHONE_STORY);
|
|
466
|
+
await applyLoad(page, load);
|
|
467
|
+
await recordMotion(page);
|
|
468
|
+
await toggleButton(page).tap();
|
|
469
|
+
await expect(toggleButton(page)).toHaveAccessibleName('Expand sidebar');
|
|
470
|
+
const motion = await settledMotion(page);
|
|
471
|
+
expect(motion.length).toBeGreaterThan(0);
|
|
472
|
+
for (const {properties, endTime, holdsPage} of motion) {
|
|
473
|
+
expect(properties).toEqual(['opacity']);
|
|
474
|
+
expect(endTime).toBeLessThanOrEqual(200);
|
|
475
|
+
expect(holdsPage).toBe(false);
|
|
476
|
+
}
|
|
477
|
+
expect(await railAtRest(page)).toMatchObject({
|
|
478
|
+
labelsShown: false,
|
|
479
|
+
copies: 0,
|
|
480
|
+
});
|
|
361
481
|
});
|
|
362
|
-
}
|
|
482
|
+
}
|
|
363
483
|
});
|
|
364
484
|
|
|
365
485
|
test.describe('component:SideNav FR6 and component:AppShell FR17 under a mouse', () => {
|
|
@@ -402,16 +522,21 @@ test.describe('component:SideNav FR6 and component:AppShell FR17 under a mouse',
|
|
|
402
522
|
});
|
|
403
523
|
});
|
|
404
524
|
|
|
405
|
-
|
|
406
|
-
page
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
525
|
+
for (const load of LOADS) {
|
|
526
|
+
test(`under Reduce Motion a click changes the rail and the page at once${underLoad(load)} (design:reduced-motion DR3)`, async ({
|
|
527
|
+
page,
|
|
528
|
+
}) => {
|
|
529
|
+
await page.emulateMedia({reducedMotion: 'reduce'});
|
|
530
|
+
await openStory(page, DESKTOP_STORY);
|
|
531
|
+
await applyLoad(page, load);
|
|
532
|
+
await recordMotion(page);
|
|
533
|
+
await toggleButton(page).click();
|
|
534
|
+
await expect(toggleButton(page)).toHaveAccessibleName('Expand sidebar');
|
|
535
|
+
expect(await settledMotion(page)).toEqual([]);
|
|
536
|
+
expect(await railAtRest(page)).toMatchObject({
|
|
537
|
+
labelsShown: false,
|
|
538
|
+
copies: 0,
|
|
539
|
+
});
|
|
415
540
|
});
|
|
416
|
-
}
|
|
541
|
+
}
|
|
417
542
|
});
|
|
@@ -97,7 +97,9 @@ const styles = stylex.create({
|
|
|
97
97
|
},
|
|
98
98
|
animate: {
|
|
99
99
|
animationDirection: 'alternate',
|
|
100
|
-
|
|
100
|
+
// The loop reads the duration before a theme's tempo scales it
|
|
101
|
+
// (spec:AST-108 FR4).
|
|
102
|
+
animationDuration: `var(--_astryx-pre-tempo-duration-medium-max, ${durationVars['--duration-medium-max']})`,
|
|
101
103
|
animationIterationCount: 'infinite',
|
|
102
104
|
// Disable the pulse under reduced-motion; the static placeholder still
|
|
103
105
|
// reads as loading (complex-20).
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* SYNC: When Slider.tsx changes, update tests to match new behavior
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
import {InternationalizationProvider} from '../i18n';
|
|
12
13
|
import {useState} from 'react';
|
|
13
14
|
import {describe, it, expect, vi, beforeEach} from 'vitest';
|
|
14
15
|
import {render, screen, act, fireEvent, waitFor} from '@testing-library/react';
|
|
@@ -75,6 +76,24 @@ describe('Slider', () => {
|
|
|
75
76
|
expect(sliders[1]).toHaveAccessibleName('Maximum value');
|
|
76
77
|
});
|
|
77
78
|
|
|
79
|
+
it('translates the range thumb names under another locale', () => {
|
|
80
|
+
render(
|
|
81
|
+
<InternationalizationProvider
|
|
82
|
+
locale="fr"
|
|
83
|
+
overrides={{
|
|
84
|
+
fr: {
|
|
85
|
+
'@astryx.slider.minimumThumb': 'Valeur minimale',
|
|
86
|
+
'@astryx.slider.maximumThumb': 'Valeur maximale',
|
|
87
|
+
},
|
|
88
|
+
}}>
|
|
89
|
+
<Slider label="Prix" value={[20, 80] as [number, number]} />
|
|
90
|
+
</InternationalizationProvider>,
|
|
91
|
+
);
|
|
92
|
+
const sliders = screen.getAllByRole('slider');
|
|
93
|
+
expect(sliders[0]).toHaveAccessibleName('Valeur minimale');
|
|
94
|
+
expect(sliders[1]).toHaveAccessibleName('Valeur maximale');
|
|
95
|
+
});
|
|
96
|
+
|
|
78
97
|
it('sets aria-valuetext with formatValue', () => {
|
|
79
98
|
render(
|
|
80
99
|
<Slider label="Temperature" value={72} formatValue={v => `${v}°F`} />,
|
|
@@ -337,6 +356,18 @@ describe('Slider', () => {
|
|
|
337
356
|
expect(slider).not.toHaveAttribute('aria-required');
|
|
338
357
|
});
|
|
339
358
|
|
|
359
|
+
it('conveys required state under FormLayout defaultOptionality="required" unless isOptional (FormLayout FR5)', () => {
|
|
360
|
+
render(
|
|
361
|
+
<FormLayout defaultOptionality="required">
|
|
362
|
+
<Slider label="Volume" value={50} />
|
|
363
|
+
<Slider label="Balance" value={50} isOptional />
|
|
364
|
+
</FormLayout>,
|
|
365
|
+
);
|
|
366
|
+
const [volume, balance] = screen.getAllByRole('slider');
|
|
367
|
+
expect(volume).toHaveAccessibleDescription(/Required/);
|
|
368
|
+
expect(balance).not.toHaveAccessibleDescription(/Required/);
|
|
369
|
+
});
|
|
370
|
+
|
|
340
371
|
it('conveys required state on both thumbs of a range slider', () => {
|
|
341
372
|
render(
|
|
342
373
|
<Slider
|
package/src/Slider/Slider.tsx
CHANGED
|
@@ -58,6 +58,8 @@ import type {SizeValue} from '../utils/types';
|
|
|
58
58
|
import {themeProps} from '../utils/themeProps';
|
|
59
59
|
|
|
60
60
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
61
|
+
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
62
|
+
import {useTranslator} from '../i18n';
|
|
61
63
|
// =============================================================================
|
|
62
64
|
// Types
|
|
63
65
|
// =============================================================================
|
|
@@ -512,6 +514,7 @@ export function Slider({ref, ...props}: SliderProps) {
|
|
|
512
514
|
'aria-describedby': ariaDescribedByProp,
|
|
513
515
|
...restWithRange
|
|
514
516
|
} = props;
|
|
517
|
+
const t = useTranslator();
|
|
515
518
|
const {minStepsBetweenThumbs: _minSteps, ...restProps} =
|
|
516
519
|
restWithRange as typeof restWithRange & {minStepsBetweenThumbs?: number};
|
|
517
520
|
const {rest, container} = useFieldInputStyling('Slider', restProps, {
|
|
@@ -591,7 +594,9 @@ export function Slider({ref, ...props}: SliderProps) {
|
|
|
591
594
|
// role="slider" in WAI-ARIA 1.2, so the thumb instead points its
|
|
592
595
|
// aria-describedby at a visually hidden "Required" span — mirroring the
|
|
593
596
|
// Field label's visible indicator (where isOptional takes precedence).
|
|
594
|
-
|
|
597
|
+
// A surrounding FormLayout's defaultOptionality="required" makes an unmarked
|
|
598
|
+
// field required too (FormLayout FR5).
|
|
599
|
+
const conveysRequired = useResolvedRequired({isRequired, isOptional});
|
|
595
600
|
|
|
596
601
|
// Build aria-describedby
|
|
597
602
|
const describedByParts: string[] = [];
|
|
@@ -980,8 +985,8 @@ export function Slider({ref, ...props}: SliderProps) {
|
|
|
980
985
|
// name from the visible label element via aria-labelledby.
|
|
981
986
|
const thumbLabel = isRange
|
|
982
987
|
? thumbIndex === 0
|
|
983
|
-
? '
|
|
984
|
-
: '
|
|
988
|
+
? t('@astryx.slider.minimumThumb')
|
|
989
|
+
: t('@astryx.slider.maximumThumb')
|
|
985
990
|
: undefined;
|
|
986
991
|
|
|
987
992
|
// ARIA bounds must agree with the movement clamping in updateValue: in
|
|
@@ -87,16 +87,28 @@ async function runState(
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
90
|
+
// Checking coverage runs every state again, which on a loaded runner nears
|
|
91
|
+
// the per-test timeout as one test. It runs as one serial part per state,
|
|
92
|
+
// sharing their results, then one check over all of them.
|
|
93
|
+
test.describe('every slider expectation is exercised by a Slider state', () => {
|
|
94
|
+
test.describe.configure({mode: 'serial'});
|
|
94
95
|
const results: BindingResult[] = [];
|
|
96
|
+
|
|
95
97
|
for (const state of SLIDER_BINDING_STATES) {
|
|
96
|
-
|
|
98
|
+
test(`runs ${state.id}`, async ({page}) => {
|
|
99
|
+
const cdp = await page.context().newCDPSession(page);
|
|
100
|
+
results.push(await runState(page, cdp, state));
|
|
101
|
+
});
|
|
97
102
|
}
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
|
|
104
|
+
test('no expectation is left unexercised', () => {
|
|
105
|
+
// Every part ran in this worker; this test alone proves nothing.
|
|
106
|
+
expect(results.map(result => result.state).sort()).toEqual(
|
|
107
|
+
SLIDER_BINDING_STATES.map(state => state.id).sort(),
|
|
108
|
+
);
|
|
109
|
+
expect(neverExercised(results)).toEqual([]);
|
|
110
|
+
expect(unmatchedKnownFailures(SLIDER_KNOWN_FAILURES, results)).toEqual([]);
|
|
111
|
+
});
|
|
100
112
|
});
|
|
101
113
|
|
|
102
114
|
for (const state of SLIDER_BINDING_STATES) {
|
package/src/Spinner/Spinner.tsx
CHANGED
|
@@ -21,8 +21,8 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
21
21
|
import {colorVars, durationVars, spacingVars} from '../theme/tokens.stylex';
|
|
22
22
|
import type {BaseProps} from '../BaseProps';
|
|
23
23
|
import {Text} from '../Text/Text';
|
|
24
|
-
import {mergeProps} from '../utils';
|
|
25
|
-
import {useTranslator} from '../i18n';
|
|
24
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
25
|
+
import {useTranslator} from '../i18n/useTranslator';
|
|
26
26
|
import {themeProps} from '../utils/themeProps';
|
|
27
27
|
|
|
28
28
|
// =============================================================================
|
|
@@ -334,7 +334,9 @@ const styles = stylex.create({
|
|
|
334
334
|
// it (a frozen spinner reads as broken), matching ProgressBar's approach.
|
|
335
335
|
// The role="status" + "Loading" label still convey busy state (obs-6).
|
|
336
336
|
animationDuration: {
|
|
337
|
-
|
|
337
|
+
// The loop reads the duration before a theme's tempo scales it
|
|
338
|
+
// (spec:AST-108 FR4).
|
|
339
|
+
default: `var(--_astryx-pre-tempo-duration-slow-min, ${durationVars['--duration-slow-min']})`,
|
|
338
340
|
'@media (prefers-reduced-motion: reduce)': '3s',
|
|
339
341
|
},
|
|
340
342
|
animationIterationCount: 'infinite',
|
package/src/Stack/Stack.tsx
CHANGED
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
paddingBlockStartStyles,
|
|
31
31
|
paddingBlockEndStyles,
|
|
32
32
|
} from '../Layout/padding.stylex';
|
|
33
|
-
import {mergeProps} from '../utils';
|
|
33
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
34
34
|
import {themeProps} from '../utils/themeProps';
|
|
35
35
|
|
|
36
36
|
const overflowStyles = stylex.create({
|
package/src/Stack/StackItem.tsx
CHANGED
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
type StackItemCrossAlignSelf,
|
|
20
20
|
type StackItemSize,
|
|
21
21
|
} from './stackItem.stylex';
|
|
22
|
-
import {mergeProps} from '../utils';
|
|
22
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
23
23
|
import {themeProps} from '../utils/themeProps';
|
|
24
24
|
|
|
25
25
|
const overflowStyles = stylex.create({
|