@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
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file scrollKeyboardDelegation.ts
|
|
5
|
-
* @input A named, overflowing viewport and its real content box
|
|
5
|
+
* @input A named, overflowing viewport and its real content box (the viewport
|
|
6
|
+
* itself when it has no separate content box)
|
|
6
7
|
* @output Focus-time delegation with native forward and reverse Tab traversal
|
|
7
|
-
* @position Private
|
|
8
|
+
* @position Private keyboard behavior of useScrollableArea and of AppShell's main
|
|
9
|
+
* region; no DOM observers or scrolling
|
|
8
10
|
*/
|
|
9
11
|
|
|
10
12
|
import { FOCUSABLE_SELECTOR } from "./focusableSelector.js";
|
|
@@ -22,7 +24,9 @@ function isSequential(element) {
|
|
|
22
24
|
}
|
|
23
25
|
function firstDelegationTarget(viewport, content) {
|
|
24
26
|
const candidates = content.querySelectorAll(FOCUSABLE_SELECTOR);
|
|
25
|
-
|
|
27
|
+
// A viewport that is its own content box is the stop being entered, never
|
|
28
|
+
// the target it delegates to.
|
|
29
|
+
let first = content !== viewport && content.matches(FOCUSABLE_SELECTOR) && isSequential(content) ? content : null;
|
|
26
30
|
for (const candidate of candidates) {
|
|
27
31
|
// After finding the first target, only positive tabindex can precede it.
|
|
28
32
|
// Ordinary trailing controls need no visibility or layout reads.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAdaptivePresentation.d.ts","sourceRoot":"","sources":["../../src/hooks/useAdaptivePresentation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useAdaptivePresentation.d.ts","sourceRoot":"","sources":["../../src/hooks/useAdaptivePresentation.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,CAAC;AAC3E,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,oBAAoB,EACpB,UAAU,CACX,CAAC;AAMF,eAAO,MAAM,gCAAgC,QAAsB,CAAC;AAKpE;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,oBAAoB,GACjC,4BAA4B,CA4B9B"}
|
|
@@ -7,7 +7,10 @@
|
|
|
7
7
|
* @input Uses React's external-store subscription over window.matchMedia
|
|
8
8
|
* and the touch presentation's compact-touch query
|
|
9
9
|
* @output Resolves popover/bottom-sheet presentation policy
|
|
10
|
-
* @position Internal overlay policy shared across component families
|
|
10
|
+
* @position Internal overlay policy shared across component families. A
|
|
11
|
+
* component that also switches input modes under a finger resolves its
|
|
12
|
+
* `presentation` with usePresentation (utils/presentation.ts), whose
|
|
13
|
+
* surface is this one's
|
|
11
14
|
*/
|
|
12
15
|
import { useCallback, useSyncExternalStore } from 'react';
|
|
13
16
|
import { COMPACT_TOUCH_QUERY, useCompactDefinition } from "../utils/touchPresentation.js";
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* @input Uses React context and useCallback; DOM APIs and cancellable
|
|
4
4
|
* animation frames for a singleton live-region pair on the page body and
|
|
5
5
|
* one persistent polite/assertive pair inside each open Astryx modal
|
|
6
|
-
* @output Exports useAnnounce hook
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* @output Exports useAnnounce hook (with its `hasReplace` option),
|
|
7
|
+
* AnnouncePoliteness and UseAnnounceOptions types; the internal modal
|
|
8
|
+
* context, the in-dialog region writer the busy-announcement hook uses, and
|
|
9
|
+
* the hook the modal route (`modalAnnounce.ts`, loaded only with an Astryx
|
|
10
|
+
* modal) installs itself through
|
|
10
11
|
* @position Core a11y hook; provides imperative screen-reader announcements.
|
|
11
12
|
* A message follows the nearest open native modal enclosing its caller
|
|
12
13
|
* (`spec:AST-086` FR14): inside an Astryx modal it is written to that
|
|
@@ -14,10 +15,14 @@
|
|
|
14
15
|
* while a native modal is open; otherwise to the shared page-body pair.
|
|
15
16
|
* Containers are created empty (FR3), carry the two urgencies (FR5), join
|
|
16
17
|
* messages written before the previous is exposed and say an identical
|
|
17
|
-
* same-frame repeat once (FR9),
|
|
18
|
+
* same-frame repeat once (FR9), except that a `hasReplace` instance's
|
|
19
|
+
* message withdraws that instance's previous one not yet exposed, and clear
|
|
20
|
+
* shortly after each announcement;
|
|
18
21
|
* the route in `modalAnnounce.ts` hands a message still unexposed when its
|
|
19
22
|
* modal stops being exposed to the channel exposed after it — the modal
|
|
20
|
-
* then on top, or the page body once no modal is open.
|
|
23
|
+
* then on top, or the page body once no modal is open. Each write keeps a
|
|
24
|
+
* receipt per announcer beside the words, which follows them wherever
|
|
25
|
+
* they are moved, so the announcer can take back its own share.
|
|
21
26
|
*
|
|
22
27
|
* SYNC: When modified, update:
|
|
23
28
|
* - /packages/core/src/hooks/index.ts
|
|
@@ -35,7 +40,57 @@ export type AnnouncePoliteness = 'polite' | 'assertive';
|
|
|
35
40
|
* Imperative screen-reader announcement function.
|
|
36
41
|
*/
|
|
37
42
|
export type AnnounceFn = (message: string, politeness?: AnnouncePoliteness) => void;
|
|
38
|
-
|
|
43
|
+
/** Options for `useAnnounce`. */
|
|
44
|
+
export interface UseAnnounceOptions {
|
|
45
|
+
/**
|
|
46
|
+
* The instance states one current state of its owner, such as a search's
|
|
47
|
+
* result count: each message it writes withdraws the instance's previous
|
|
48
|
+
* message while that one is not yet exposed, whatever their urgencies, and
|
|
49
|
+
* is spoken in the region of its own urgency; a message already exposed has
|
|
50
|
+
* been heard and stays. Messages from other instances, and from instances
|
|
51
|
+
* without `hasReplace`, still join (`spec:AST-086` FR9). Give each state a
|
|
52
|
+
* component reports its own instance.
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
55
|
+
hasReplace?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Takes back one announcer's share of a message while it is not yet exposed,
|
|
59
|
+
* wherever the route put it. @internal
|
|
60
|
+
*/
|
|
61
|
+
export type WithdrawAnnouncement = () => void;
|
|
62
|
+
/**
|
|
63
|
+
* One announcer's share of words on their way to being exposed. Whatever
|
|
64
|
+
* holds the words keeps the receipt beside them; when the words move — a
|
|
65
|
+
* modal hands them to the channel exposed after it, or releases words it
|
|
66
|
+
* held through an exit — the mover points the receipt at the new place, so
|
|
67
|
+
* the announcer's handle follows its words. @internal
|
|
68
|
+
*/
|
|
69
|
+
export interface AnnounceReceipt {
|
|
70
|
+
withdraw: WithdrawAnnouncement | null;
|
|
71
|
+
}
|
|
72
|
+
/** Words waiting to be exposed, with their announcers' receipts. @internal */
|
|
73
|
+
export interface WaitingWords {
|
|
74
|
+
readonly text: string;
|
|
75
|
+
readonly receipts: ReadonlyArray<AnnounceReceipt>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The announcer's handle to `receipt`: it takes back the words wherever they
|
|
79
|
+
* are now, once. @internal
|
|
80
|
+
*/
|
|
81
|
+
export declare function handleOf(receipt: AnnounceReceipt): WithdrawAnnouncement;
|
|
82
|
+
/**
|
|
83
|
+
* Move `waiting` words elsewhere, one delivery per announcer and in order,
|
|
84
|
+
* and point each receipt at its delivery, so every announcer can still take
|
|
85
|
+
* back its own share (`spec:AST-086` FR9, FR14). The deliveries join where
|
|
86
|
+
* they land, so the words are spoken once. @internal
|
|
87
|
+
*/
|
|
88
|
+
export declare function forwardWaiting(waiting: ReadonlyArray<WaitingWords>, deliver: (text: string) => WithdrawAnnouncement | null): void;
|
|
89
|
+
/**
|
|
90
|
+
* Write `message` to the shared region for `politeness`, joining the messages
|
|
91
|
+
* not yet exposed. Returns how to take this write back while it waits.
|
|
92
|
+
*/
|
|
93
|
+
export declare function announceMessage(message: string, politeness: AnnouncePoliteness): WithdrawAnnouncement | null;
|
|
39
94
|
/**
|
|
40
95
|
* Clear any pending announcement from a region without announcing anything new.
|
|
41
96
|
* Used when the triggering context goes away (e.g. a search query is cleared),
|
|
@@ -54,6 +109,12 @@ export declare function clearRegion(politeness: AnnouncePoliteness): void;
|
|
|
54
109
|
* announced, so users browsing the DOM later do not encounter stale status
|
|
55
110
|
* text; announcing again before the clear simply resets the countdown.
|
|
56
111
|
*
|
|
112
|
+
* An instance created with `hasReplace` states one current state, such as a
|
|
113
|
+
* search's result count: each message it writes withdraws its previous one
|
|
114
|
+
* while that one is not yet exposed, so typing faster than a frame says only
|
|
115
|
+
* the latest count (`spec:AST-086` FR9).
|
|
116
|
+
*
|
|
117
|
+
* @param options - `hasReplace` (default false)
|
|
57
118
|
* @example
|
|
58
119
|
* ```
|
|
59
120
|
* function Search() {
|
|
@@ -65,7 +126,7 @@ export declare function clearRegion(politeness: AnnouncePoliteness): void;
|
|
|
65
126
|
* }
|
|
66
127
|
* ```
|
|
67
128
|
*/
|
|
68
|
-
export declare function useAnnounce(): AnnounceFn;
|
|
129
|
+
export declare function useAnnounce({ hasReplace, }?: UseAnnounceOptions): AnnounceFn;
|
|
69
130
|
/**
|
|
70
131
|
* What an Astryx modal tells the hooks beneath it: where its dialog element
|
|
71
132
|
* is, and the modal above it, so a caller inside a non-modal sheet nested in
|
|
@@ -79,12 +140,17 @@ export interface ModalAnnounceScope {
|
|
|
79
140
|
export declare const ModalAnnounceContext: import("react").Context<ModalAnnounceScope | null>;
|
|
80
141
|
/** The modal route `modalAnnounce.ts` installs when a provider loads it. */
|
|
81
142
|
export interface ModalRoute {
|
|
82
|
-
/**
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
143
|
+
/**
|
|
144
|
+
* `useAnnounce` from inside `scope`: route `message` by where it is, and
|
|
145
|
+
* return how to take this write back while it waits (a `hasReplace`
|
|
146
|
+
* instance's next message does).
|
|
147
|
+
*/
|
|
148
|
+
announce(scope: ModalAnnounceScope, message: string, politeness: AnnouncePoliteness): WithdrawAnnouncement | null;
|
|
149
|
+
/**
|
|
150
|
+
* Speak inside `dialog` with the exposure, covered and hold rules, and
|
|
151
|
+
* return how to take this write back while it waits.
|
|
152
|
+
*/
|
|
153
|
+
announceInModal(dialog: HTMLDialogElement, message: string, politeness: AnnouncePoliteness): WithdrawAnnouncement | null;
|
|
88
154
|
}
|
|
89
155
|
/** Called once by `modalAnnounce.ts` as it loads. @internal */
|
|
90
156
|
export declare function installModalRoute(route: ModalRoute): void;
|
|
@@ -103,45 +169,38 @@ export declare function enclosingModalDialog(element: Element | null | undefined
|
|
|
103
169
|
* exposure, covered and hold rules; without it — a native modal an app
|
|
104
170
|
* renders without Astryx, and no Astryx modal anywhere — the words are
|
|
105
171
|
* written to the dialog while it is open as a modal, else to the shared
|
|
106
|
-
* channel.
|
|
172
|
+
* channel. Returns how to take the words back while they wait, wherever they
|
|
173
|
+
* move, so a busy start overtaken by its own outcome is never heard ahead of
|
|
174
|
+
* it inside a modal (`spec:AST-086` FR8). Internal: used by the
|
|
175
|
+
* busy-announcement hook.
|
|
107
176
|
*/
|
|
108
|
-
export declare function announceInModal(dialog: HTMLDialogElement, message: string, politeness?: AnnouncePoliteness):
|
|
109
|
-
/**
|
|
110
|
-
* Withdraw one announcer's share of `message` from `dialog` before it is
|
|
111
|
-
* exposed, written to its region or held by the route for the dialog's
|
|
112
|
-
* close, so a busy start overtaken by its own outcome is never heard ahead
|
|
113
|
-
* of it inside a modal (`spec:AST-086` FR8). Internal: used by the
|
|
114
|
-
* busy-announcement hook's settle function.
|
|
115
|
-
*/
|
|
116
|
-
export declare function withdrawFromModalPending(dialog: HTMLDialogElement, message: string, politeness?: AnnouncePoliteness): void;
|
|
177
|
+
export declare function announceInModal(dialog: HTMLDialogElement, message: string, politeness?: AnnouncePoliteness): WithdrawAnnouncement | null;
|
|
117
178
|
/** What the route asks of the writer in the write frame. @internal */
|
|
118
179
|
export interface ModalWriteGuard {
|
|
119
180
|
isExposed: () => boolean;
|
|
120
|
-
|
|
181
|
+
/** Deliver the waiting words elsewhere, forwarding their receipts. */
|
|
182
|
+
redirect: (waiting: ReadonlyArray<WaitingWords>) => void;
|
|
121
183
|
}
|
|
122
184
|
/** Words written to `target` that assistive technology has not had yet. */
|
|
123
185
|
export declare function unexposedMessages(target: HTMLElement): string[];
|
|
186
|
+
/**
|
|
187
|
+
* The words written to `target` that assistive technology has not had yet,
|
|
188
|
+
* with their announcers' receipts, for a hand-off that forwards them.
|
|
189
|
+
*/
|
|
190
|
+
export declare function unexposedWords(target: HTMLElement): WaitingWords[];
|
|
124
191
|
export declare function modalRegion(dialog: HTMLDialogElement, politeness: AnnouncePoliteness): HTMLElement | null;
|
|
125
192
|
/**
|
|
126
193
|
* Write `message` to the modal `dialog`'s own live region for `politeness`,
|
|
127
194
|
* joining it to messages written there that are not yet exposed and saying
|
|
128
|
-
* an identical repeat once
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* Withdraw one announcer's share of `message` from `dialog`'s region before
|
|
138
|
-
* it is exposed — written but not yet spoken — so a busy start overtaken by
|
|
139
|
-
* its own outcome is never heard ahead of it (`spec:AST-086` FR8). The
|
|
140
|
-
* message stays while another announcer holds it. The region half of
|
|
141
|
-
* `withdrawFromModalPending`; the route also drops words it holds for the
|
|
142
|
-
* dialog's close.
|
|
143
|
-
*/
|
|
144
|
-
export declare function withdrawFromModalRegion(dialog: HTMLDialogElement, message: string, politeness?: AnnouncePoliteness): void;
|
|
195
|
+
* an identical repeat once. The region-writing core, shared by the full
|
|
196
|
+
* modal route and by the busy-announcement hook's fallback for a native
|
|
197
|
+
* modal an app renders without Astryx. `guard`, supplied by the route,
|
|
198
|
+
* re-checks exposure in the write frame and redirects the waiting words when
|
|
199
|
+
* the dialog stopped being exposed meanwhile. Returns this announcer's
|
|
200
|
+
* handle: it takes back only its own share, only while the words wait, and
|
|
201
|
+
* follows them when the route moves them.
|
|
202
|
+
*/
|
|
203
|
+
export declare function writeModalRegion(dialog: HTMLDialogElement, message: string, politeness: AnnouncePoliteness, guard?: ModalWriteGuard): WithdrawAnnouncement;
|
|
145
204
|
/**
|
|
146
205
|
* Withdraw whatever the dialog's region for `politeness` holds or is about to
|
|
147
206
|
* hold, as an empty message does on the shared channel. A dialog that never
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnnounce.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnnounce.ts"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"useAnnounce.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnnounce.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAA0C,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,kBAAkB,KAC5B,IAAI,CAAC;AAEV,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACvC;AAED,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CACnD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,oBAAoB,CAMvE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,EACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,oBAAoB,GAAG,IAAI,GACrD,IAAI,CAMN;AAyHD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,kBAAkB,GAC7B,oBAAoB,GAAG,IAAI,CAoC7B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAShE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,UAAkB,GACnB,GAAE,kBAAuB,GAAG,UAAU,CAiCtC;AAmBD;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IAG/C,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACnC;AAED,eAAO,MAAM,oBAAoB,oDAEhC,CAAC;AAGF,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,QAAQ,CACN,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,kBAAkB,GAC7B,oBAAoB,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,eAAe,CACb,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,kBAAkB,GAC7B,oBAAoB,GAAG,IAAI,CAAC;CAChC;AAID,+DAA+D;AAC/D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAEzD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAC3C,OAAO,CAET;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAClC,iBAAiB,GAAG,IAAI,CAS1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,kBAA6B,GACxC,oBAAoB,GAAG,IAAI,CAQ7B;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,sEAAsE;IACtE,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;CAC1D;AAkCD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAE/D;AASD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CAQlE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,kBAAkB,GAC7B,WAAW,GAAG,IAAI,CAIpB;AA2BD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,kBAAkB,EAC9B,KAAK,CAAC,EAAE,eAAe,GACtB,oBAAoB,CA+CtB;AA4CD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,iBAAiB,EACzB,UAAU,EAAE,kBAAkB,GAC7B,IAAI,CAWN;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAItD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,kBAAkB,GAC7B,IAAI,CAUN;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAWhD"}
|
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
* @input Uses React context and useCallback; DOM APIs and cancellable
|
|
8
8
|
* animation frames for a singleton live-region pair on the page body and
|
|
9
9
|
* one persistent polite/assertive pair inside each open Astryx modal
|
|
10
|
-
* @output Exports useAnnounce hook
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* @output Exports useAnnounce hook (with its `hasReplace` option),
|
|
11
|
+
* AnnouncePoliteness and UseAnnounceOptions types; the internal modal
|
|
12
|
+
* context, the in-dialog region writer the busy-announcement hook uses, and
|
|
13
|
+
* the hook the modal route (`modalAnnounce.ts`, loaded only with an Astryx
|
|
14
|
+
* modal) installs itself through
|
|
14
15
|
* @position Core a11y hook; provides imperative screen-reader announcements.
|
|
15
16
|
* A message follows the nearest open native modal enclosing its caller
|
|
16
17
|
* (`spec:AST-086` FR14): inside an Astryx modal it is written to that
|
|
@@ -18,15 +19,19 @@
|
|
|
18
19
|
* while a native modal is open; otherwise to the shared page-body pair.
|
|
19
20
|
* Containers are created empty (FR3), carry the two urgencies (FR5), join
|
|
20
21
|
* messages written before the previous is exposed and say an identical
|
|
21
|
-
* same-frame repeat once (FR9),
|
|
22
|
+
* same-frame repeat once (FR9), except that a `hasReplace` instance's
|
|
23
|
+
* message withdraws that instance's previous one not yet exposed, and clear
|
|
24
|
+
* shortly after each announcement;
|
|
22
25
|
* the route in `modalAnnounce.ts` hands a message still unexposed when its
|
|
23
26
|
* modal stops being exposed to the channel exposed after it — the modal
|
|
24
|
-
* then on top, or the page body once no modal is open.
|
|
27
|
+
* then on top, or the page body once no modal is open. Each write keeps a
|
|
28
|
+
* receipt per announcer beside the words, which follows them wherever
|
|
29
|
+
* they are moved, so the announcer can take back its own share.
|
|
25
30
|
*
|
|
26
31
|
* SYNC: When modified, update:
|
|
27
32
|
* - /packages/core/src/hooks/index.ts
|
|
28
33
|
*/
|
|
29
|
-
import { createContext, use, useCallback } from 'react';
|
|
34
|
+
import { createContext, use, useCallback, useRef } from 'react';
|
|
30
35
|
|
|
31
36
|
/**
|
|
32
37
|
* Announcement urgency:
|
|
@@ -40,6 +45,51 @@ import { createContext, use, useCallback } from 'react';
|
|
|
40
45
|
* Imperative screen-reader announcement function.
|
|
41
46
|
*/
|
|
42
47
|
|
|
48
|
+
/** Options for `useAnnounce`. */
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Takes back one announcer's share of a message while it is not yet exposed,
|
|
52
|
+
* wherever the route put it. @internal
|
|
53
|
+
*/
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* One announcer's share of words on their way to being exposed. Whatever
|
|
57
|
+
* holds the words keeps the receipt beside them; when the words move — a
|
|
58
|
+
* modal hands them to the channel exposed after it, or releases words it
|
|
59
|
+
* held through an exit — the mover points the receipt at the new place, so
|
|
60
|
+
* the announcer's handle follows its words. @internal
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
/** Words waiting to be exposed, with their announcers' receipts. @internal */
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The announcer's handle to `receipt`: it takes back the words wherever they
|
|
67
|
+
* are now, once. @internal
|
|
68
|
+
*/
|
|
69
|
+
export function handleOf(receipt) {
|
|
70
|
+
return () => {
|
|
71
|
+
const withdraw = receipt.withdraw;
|
|
72
|
+
receipt.withdraw = null;
|
|
73
|
+
withdraw?.();
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Move `waiting` words elsewhere, one delivery per announcer and in order,
|
|
79
|
+
* and point each receipt at its delivery, so every announcer can still take
|
|
80
|
+
* back its own share (`spec:AST-086` FR9, FR14). The deliveries join where
|
|
81
|
+
* they land, so the words are spoken once. @internal
|
|
82
|
+
*/
|
|
83
|
+
export function forwardWaiting(waiting, deliver) {
|
|
84
|
+
for (const {
|
|
85
|
+
text,
|
|
86
|
+
receipts
|
|
87
|
+
} of waiting) {
|
|
88
|
+
for (const receipt of receipts) {
|
|
89
|
+
receipt.withdraw = deliver(text);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
43
93
|
const CONTAINER_ATTR = 'data-astryx-live-region';
|
|
44
94
|
|
|
45
95
|
// Visually-hidden clip block (matches the VisuallyHidden primitive). Applied
|
|
@@ -134,17 +184,22 @@ function getRegions() {
|
|
|
134
184
|
};
|
|
135
185
|
return regions;
|
|
136
186
|
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Write `message` to the shared region for `politeness`, joining the messages
|
|
190
|
+
* not yet exposed. Returns how to take this write back while it waits.
|
|
191
|
+
*/
|
|
137
192
|
export function announceMessage(message, politeness) {
|
|
138
193
|
const r = getRegions();
|
|
139
194
|
if (!r) {
|
|
140
|
-
return;
|
|
195
|
+
return null;
|
|
141
196
|
}
|
|
142
197
|
const target = politeness === 'assertive' ? r.assertive : r.polite;
|
|
143
198
|
const repeat = pendingMessages[politeness].find(pending => pending.text === message);
|
|
144
199
|
if (repeat != null) {
|
|
145
200
|
repeat.holders += 1;
|
|
146
201
|
lastJoined = repeat;
|
|
147
|
-
return;
|
|
202
|
+
return () => withdrawPendingAnnouncement(repeat, politeness);
|
|
148
203
|
}
|
|
149
204
|
const pending = {
|
|
150
205
|
text: message,
|
|
@@ -168,6 +223,7 @@ export function announceMessage(message, politeness) {
|
|
|
168
223
|
// indefinitely. Scheduled per announce, so a newer announcement always
|
|
169
224
|
// resets the countdown (the delay comfortably outlasts the rAF re-set).
|
|
170
225
|
scheduleClear(politeness, target);
|
|
226
|
+
return () => withdrawPendingAnnouncement(pending, politeness);
|
|
171
227
|
}
|
|
172
228
|
|
|
173
229
|
/**
|
|
@@ -197,6 +253,12 @@ export function clearRegion(politeness) {
|
|
|
197
253
|
* announced, so users browsing the DOM later do not encounter stale status
|
|
198
254
|
* text; announcing again before the clear simply resets the countdown.
|
|
199
255
|
*
|
|
256
|
+
* An instance created with `hasReplace` states one current state, such as a
|
|
257
|
+
* search's result count: each message it writes withdraws its previous one
|
|
258
|
+
* while that one is not yet exposed, so typing faster than a frame says only
|
|
259
|
+
* the latest count (`spec:AST-086` FR9).
|
|
260
|
+
*
|
|
261
|
+
* @param options - `hasReplace` (default false)
|
|
200
262
|
* @example
|
|
201
263
|
* ```
|
|
202
264
|
* function Search() {
|
|
@@ -208,25 +270,38 @@ export function clearRegion(politeness) {
|
|
|
208
270
|
* }
|
|
209
271
|
* ```
|
|
210
272
|
*/
|
|
211
|
-
export function useAnnounce(
|
|
273
|
+
export function useAnnounce({
|
|
274
|
+
hasReplace = false
|
|
275
|
+
} = {}) {
|
|
212
276
|
const modal = use(ModalAnnounceContext);
|
|
277
|
+
// A `hasReplace` instance's latest write, which its next message takes back
|
|
278
|
+
// if assistive technology has not had it yet.
|
|
279
|
+
const withdrawPreviousRef = useRef(null);
|
|
213
280
|
return useCallback((message, politeness = 'polite') => {
|
|
281
|
+
if (hasReplace) {
|
|
282
|
+
const withdrawPrevious = withdrawPreviousRef.current;
|
|
283
|
+
withdrawPreviousRef.current = null;
|
|
284
|
+
withdrawPrevious?.();
|
|
285
|
+
}
|
|
286
|
+
let written;
|
|
214
287
|
// Inside an Astryx modal's provider: the modal route decides, per call,
|
|
215
288
|
// where the caller is heard — `modal` is non-null only where a provider
|
|
216
289
|
// rendered, and rendering one loads the route.
|
|
217
290
|
if (modal != null && modalRoute != null) {
|
|
218
|
-
modalRoute.announce(modal, message, politeness);
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
if (!message) {
|
|
291
|
+
written = modalRoute.announce(modal, message, politeness);
|
|
292
|
+
} else if (!message) {
|
|
222
293
|
// An empty message clears any lingering status from the region,
|
|
223
294
|
// including messages joined but not yet exposed — useful when the
|
|
224
295
|
// triggering context ends.
|
|
225
296
|
clearRegion(politeness);
|
|
226
|
-
|
|
297
|
+
written = null;
|
|
298
|
+
} else {
|
|
299
|
+
written = announceMessage(message, politeness);
|
|
300
|
+
}
|
|
301
|
+
if (hasReplace) {
|
|
302
|
+
withdrawPreviousRef.current = written;
|
|
227
303
|
}
|
|
228
|
-
|
|
229
|
-
}, [modal]);
|
|
304
|
+
}, [hasReplace, modal]);
|
|
230
305
|
}
|
|
231
306
|
|
|
232
307
|
// =============================================================================
|
|
@@ -292,33 +367,19 @@ export function enclosingModalDialog(element) {
|
|
|
292
367
|
* exposure, covered and hold rules; without it — a native modal an app
|
|
293
368
|
* renders without Astryx, and no Astryx modal anywhere — the words are
|
|
294
369
|
* written to the dialog while it is open as a modal, else to the shared
|
|
295
|
-
* channel.
|
|
370
|
+
* channel. Returns how to take the words back while they wait, wherever they
|
|
371
|
+
* move, so a busy start overtaken by its own outcome is never heard ahead of
|
|
372
|
+
* it inside a modal (`spec:AST-086` FR8). Internal: used by the
|
|
373
|
+
* busy-announcement hook.
|
|
296
374
|
*/
|
|
297
375
|
export function announceInModal(dialog, message, politeness = 'polite') {
|
|
298
376
|
if (modalRoute != null) {
|
|
299
|
-
modalRoute.announceInModal(dialog, message, politeness);
|
|
300
|
-
return;
|
|
377
|
+
return modalRoute.announceInModal(dialog, message, politeness);
|
|
301
378
|
}
|
|
302
379
|
if (isOpenModal(dialog)) {
|
|
303
|
-
writeModalRegion(dialog, message, politeness);
|
|
304
|
-
} else {
|
|
305
|
-
announceMessage(message, politeness);
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/**
|
|
310
|
-
* Withdraw one announcer's share of `message` from `dialog` before it is
|
|
311
|
-
* exposed, written to its region or held by the route for the dialog's
|
|
312
|
-
* close, so a busy start overtaken by its own outcome is never heard ahead
|
|
313
|
-
* of it inside a modal (`spec:AST-086` FR8). Internal: used by the
|
|
314
|
-
* busy-announcement hook's settle function.
|
|
315
|
-
*/
|
|
316
|
-
export function withdrawFromModalPending(dialog, message, politeness = 'polite') {
|
|
317
|
-
if (modalRoute != null) {
|
|
318
|
-
modalRoute.withdrawFromModalPending(dialog, message, politeness);
|
|
319
|
-
return;
|
|
380
|
+
return writeModalRegion(dialog, message, politeness);
|
|
320
381
|
}
|
|
321
|
-
|
|
382
|
+
return announceMessage(message, politeness);
|
|
322
383
|
}
|
|
323
384
|
|
|
324
385
|
/** What the route asks of the writer in the write frame. @internal */
|
|
@@ -344,11 +405,25 @@ function cancelPending(pending) {
|
|
|
344
405
|
|
|
345
406
|
/** Words written to `target` that assistive technology has not had yet. */
|
|
346
407
|
export function unexposedMessages(target) {
|
|
408
|
+
return unexposedWords(target).map(words => words.text);
|
|
409
|
+
}
|
|
410
|
+
function waitingIn(pending) {
|
|
411
|
+
return pending.messages.map(text => ({
|
|
412
|
+
text,
|
|
413
|
+
receipts: pending.receipts.get(text) ?? []
|
|
414
|
+
}));
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* The words written to `target` that assistive technology has not had yet,
|
|
419
|
+
* with their announcers' receipts, for a hand-off that forwards them.
|
|
420
|
+
*/
|
|
421
|
+
export function unexposedWords(target) {
|
|
347
422
|
const pending = pendingByRegion.get(target);
|
|
348
423
|
if (pending == null) {
|
|
349
424
|
return [];
|
|
350
425
|
}
|
|
351
|
-
return pending.frame != null || pending.settleFrame != null ? pending
|
|
426
|
+
return pending.frame != null || pending.settleFrame != null ? waitingIn(pending) : [];
|
|
352
427
|
}
|
|
353
428
|
export function modalRegion(dialog, politeness) {
|
|
354
429
|
return dialog.querySelector(`:scope > [${MODAL_REGION_ATTR}="${politeness}"]`);
|
|
@@ -376,20 +451,24 @@ function ensureModalRegion(dialog, politeness) {
|
|
|
376
451
|
/**
|
|
377
452
|
* Write `message` to the modal `dialog`'s own live region for `politeness`,
|
|
378
453
|
* joining it to messages written there that are not yet exposed and saying
|
|
379
|
-
* an identical repeat once
|
|
380
|
-
*
|
|
381
|
-
*
|
|
382
|
-
*
|
|
383
|
-
*
|
|
384
|
-
*
|
|
454
|
+
* an identical repeat once. The region-writing core, shared by the full
|
|
455
|
+
* modal route and by the busy-announcement hook's fallback for a native
|
|
456
|
+
* modal an app renders without Astryx. `guard`, supplied by the route,
|
|
457
|
+
* re-checks exposure in the write frame and redirects the waiting words when
|
|
458
|
+
* the dialog stopped being exposed meanwhile. Returns this announcer's
|
|
459
|
+
* handle: it takes back only its own share, only while the words wait, and
|
|
460
|
+
* follows them when the route moves them.
|
|
385
461
|
*/
|
|
386
462
|
export function writeModalRegion(dialog, message, politeness, guard) {
|
|
387
463
|
const target = ensureModalRegion(dialog, politeness);
|
|
388
464
|
const unexposed = unexposedMessages(target);
|
|
389
465
|
const messages = unexposed.includes(message) ? unexposed : [...unexposed, message];
|
|
390
466
|
const previous = pendingByRegion.get(target);
|
|
391
|
-
const
|
|
392
|
-
|
|
467
|
+
const receipts = unexposed.length > 0 && previous != null ? previous.receipts : new Map();
|
|
468
|
+
const receipt = {
|
|
469
|
+
withdraw: null
|
|
470
|
+
};
|
|
471
|
+
receipts.set(message, [...(receipts.get(message) ?? []), receipt]);
|
|
393
472
|
if (previous != null) {
|
|
394
473
|
cancelPending(previous);
|
|
395
474
|
}
|
|
@@ -398,7 +477,7 @@ export function writeModalRegion(dialog, message, politeness, guard) {
|
|
|
398
477
|
target.textContent = '';
|
|
399
478
|
const pending = {
|
|
400
479
|
messages,
|
|
401
|
-
|
|
480
|
+
receipts,
|
|
402
481
|
frame: null,
|
|
403
482
|
settleFrame: null,
|
|
404
483
|
timer: null
|
|
@@ -407,9 +486,9 @@ export function writeModalRegion(dialog, message, politeness, guard) {
|
|
|
407
486
|
pending.frame = null;
|
|
408
487
|
if (guard != null && !guard.isExposed()) {
|
|
409
488
|
// Stopped being exposed between the call and this frame: the words go
|
|
410
|
-
// where they will be heard.
|
|
489
|
+
// where they will be heard, their receipts with them.
|
|
411
490
|
pendingByRegion.delete(target);
|
|
412
|
-
guard.redirect(pending
|
|
491
|
+
guard.redirect(waitingIn(pending));
|
|
413
492
|
return;
|
|
414
493
|
}
|
|
415
494
|
target.textContent = pending.messages.join(' ');
|
|
@@ -422,35 +501,42 @@ export function writeModalRegion(dialog, message, politeness, guard) {
|
|
|
422
501
|
}, CLEAR_DELAY_MS);
|
|
423
502
|
});
|
|
424
503
|
pendingByRegion.set(target, pending);
|
|
504
|
+
receipt.withdraw = () => withdrawFromRegion(target, message, receipt);
|
|
505
|
+
return handleOf(receipt);
|
|
425
506
|
}
|
|
426
507
|
|
|
427
508
|
/**
|
|
428
|
-
* Withdraw one announcer's share of `message` from `
|
|
429
|
-
*
|
|
430
|
-
*
|
|
431
|
-
*
|
|
432
|
-
*
|
|
433
|
-
*
|
|
509
|
+
* Withdraw one announcer's share of `message` from `target` while it is not
|
|
510
|
+
* yet exposed — written but not yet spoken — so a busy start overtaken by its
|
|
511
|
+
* own outcome is never heard ahead of it (`spec:AST-086` FR8), and a
|
|
512
|
+
* `hasReplace` instance's next message replaces its previous one (FR9,
|
|
513
|
+
* FR14). The message stays while another announcer holds it; a receipt not
|
|
514
|
+
* among the waiting words (they were exposed, cleared, or moved) takes back
|
|
515
|
+
* nothing.
|
|
434
516
|
*/
|
|
435
|
-
|
|
436
|
-
const
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
517
|
+
function withdrawFromRegion(target, message, receipt) {
|
|
518
|
+
const pending = pendingByRegion.get(target);
|
|
519
|
+
if (pending == null || pending.frame == null && pending.settleFrame == null) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
const receipts = pending.receipts.get(message);
|
|
523
|
+
const at = receipts?.indexOf(receipt) ?? -1;
|
|
524
|
+
if (receipts == null || at < 0) {
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
receipts.splice(at, 1);
|
|
528
|
+
if (receipts.length > 0) {
|
|
529
|
+
return;
|
|
530
|
+
}
|
|
531
|
+
pending.receipts.delete(message);
|
|
532
|
+
pending.messages = pending.messages.filter(text => text !== message);
|
|
533
|
+
if (pending.messages.length === 0) {
|
|
534
|
+
cancelPending(pending);
|
|
535
|
+
pendingByRegion.delete(target);
|
|
536
|
+
target.textContent = '';
|
|
537
|
+
} else if (pending.frame == null) {
|
|
538
|
+
// Already written this frame, not yet taken: show the rest.
|
|
539
|
+
target.textContent = pending.messages.join(' ');
|
|
454
540
|
}
|
|
455
541
|
}
|
|
456
542
|
|