@astryxdesign/core 0.7.5 → 0.7.6-canary.0ef60dd
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/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/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/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/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 +7 -3
- 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.js +2 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +7 -1
- 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 +2 -1
- 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 +93 -59
- 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/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- 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/NumberInput/NumberInput.d.ts +3 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +3 -3
- 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/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- 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/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/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +16 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
- 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 +82 -51
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +13 -2
- package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
- 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/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +9 -1
- package/dist/astryx.css +20 -4
- package/dist/gestures/GestureArena.d.ts +6 -0
- package/dist/gestures/GestureArena.d.ts.map +1 -1
- package/dist/gestures/GestureArena.js +39 -0
- package/dist/gestures/GestureHost.d.ts +352 -0
- package/dist/gestures/GestureHost.d.ts.map +1 -0
- package/dist/gestures/GestureHost.js +1773 -0
- package/dist/gestures/GestureRecognizer.d.ts +10 -0
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/GestureRecognizer.js +16 -0
- 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/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/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/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/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/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +5 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
- package/dist/motion/animator.d.ts +7 -1
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +119 -27
- 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/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/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.map +1 -1
- package/dist/utils/touchPresentation.js +5 -3
- 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/unicodeDigits.d.ts +20 -0
- package/dist/utils/unicodeDigits.d.ts.map +1 -0
- package/dist/utils/unicodeDigits.js +70 -0
- package/locales/en.json +23 -3
- package/locales/pseudo.json +15 -0
- 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/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/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/ClickableCard/ClickableCard.test.tsx +96 -0
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- 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 +37 -0
- package/src/ContextMenu/ContextMenu.test.tsx +35 -0
- package/src/DateInput/DateInput.test.tsx +115 -3
- package/src/DateInput/DateInput.tsx +29 -14
- package/src/DateInput/DateInputTouch.test.tsx +76 -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/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
- 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.test.tsx +41 -0
- package/src/DropdownMenu/DropdownMenu.tsx +10 -3
- 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.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 +2 -2
- package/src/FileInput/FileInput.test.tsx +21 -0
- package/src/FileInput/FileInput.tsx +4 -1
- package/src/FormLayout/FormLayout.spec.md +7 -8
- 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.tsx +2 -1
- 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 +348 -1
- package/src/Layer/useLayer.tsx +118 -71
- 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/__tests__/Link.a11y.chromium.spec.ts +18 -8
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.spec.md +205 -0
- package/src/List/ListItem.tsx +3 -3
- 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/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.spec.md +59 -37
- package/src/NumberInput/NumberInput.tsx +13 -3
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
- package/src/NumberInput/numberParser.ts +7 -45
- 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/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 +27 -0
- 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/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/__tests__/Table.a11y.chromium.spec.ts +18 -6
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- 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 +45 -48
- 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 +14 -20
- package/src/Toast/Toast.tsx +104 -36
- package/src/Toast/ToastViewport.test.tsx +719 -1
- package/src/Toast/ToastViewport.tsx +100 -50
- package/src/Tokenizer/Tokenizer.spec.md +5 -3
- package/src/Tokenizer/Tokenizer.test.tsx +68 -0
- package/src/Tokenizer/Tokenizer.tsx +14 -2
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +15 -4
- package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
- 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/Typeahead/Typeahead.test.tsx +40 -0
- package/src/Typeahead/Typeahead.tsx +12 -1
- package/src/__tests__/pressState.ts +8 -4
- package/src/gestures/GestureArena.ts +35 -0
- package/src/gestures/GestureHost.ts +2065 -0
- package/src/gestures/GestureRecognizer.ts +18 -0
- package/src/gestures/LongPressGestureRecognizer.ts +4 -0
- package/src/gestures/PanGestureRecognizer.ts +4 -0
- package/src/gestures/PinchGestureRecognizer.ts +148 -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 +2087 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -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 +5 -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 +21 -2
- package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
- package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
- package/src/gestures/haptics.ts +203 -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/hooks/index.ts +5 -1
- package/src/hooks/modalAnnounce.ts +129 -72
- 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/i18n/generated-locales/en.generated.ts +6 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +6 -0
- package/src/motion/README.md +11 -1
- package/src/motion/animator.test.ts +151 -3
- package/src/motion/animator.ts +149 -33
- 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/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/pressPaintPriority.test.ts +80 -0
- package/src/utils/primaryClick.test.ts +38 -0
- package/src/utils/primaryClick.ts +28 -0
- 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 +5 -3
- package/src/utils/unicodeDigits.test.ts +44 -0
- package/src/utils/unicodeDigits.ts +71 -0
|
@@ -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
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @input A ref to a rendered element, whether it is showing, and a token that
|
|
4
4
|
* marks a new occasion to speak
|
|
5
5
|
* @output Announces that element's own rendered text through the persistent
|
|
6
|
-
* polite live region
|
|
6
|
+
* polite live region, or through the announcer the owner passes
|
|
7
7
|
* @position Core a11y hook; mirrors on-screen content into the shared live
|
|
8
8
|
* region by reading the DOM
|
|
9
9
|
*
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
* admission. Import it by path from inside the package.
|
|
40
40
|
*/
|
|
41
41
|
import { type RefObject } from 'react';
|
|
42
|
-
import { type AnnouncePoliteness } from './useAnnounce.js';
|
|
42
|
+
import { type AnnounceFn, type AnnouncePoliteness } from './useAnnounce.js';
|
|
43
43
|
export interface AnnounceRenderedTextOptions {
|
|
44
44
|
/**
|
|
45
45
|
* Text present or changed while the document loads or hydrates is silent;
|
|
@@ -53,6 +53,14 @@ export interface AnnounceRenderedTextOptions {
|
|
|
53
53
|
* every other message polite (`spec:AST-086` FR5). Defaults to polite.
|
|
54
54
|
*/
|
|
55
55
|
politeness?: AnnouncePoliteness;
|
|
56
|
+
/**
|
|
57
|
+
* The owner's announcer to speak through, when the rendered text states
|
|
58
|
+
* the next value of a state that announcer states: a picker's empty-panel
|
|
59
|
+
* message goes through its search's `hasReplace` instance, so the two
|
|
60
|
+
* replace each other while not yet exposed (`spec:AST-086` FR13).
|
|
61
|
+
* Defaults to this hook's own instance.
|
|
62
|
+
*/
|
|
63
|
+
announce?: AnnounceFn;
|
|
56
64
|
}
|
|
57
65
|
/** The rendered text an assistive technology would read from `element`. */
|
|
58
66
|
export declare function renderedText(element: HTMLElement): string;
|
|
@@ -76,5 +84,5 @@ export declare function renderedText(element: HTMLElement): string;
|
|
|
76
84
|
* useAnnounceRenderedText(emptyStateRef, isPanelEmpty, searchQuery);
|
|
77
85
|
* ```
|
|
78
86
|
*/
|
|
79
|
-
export declare function useAnnounceRenderedText(ref: RefObject<HTMLElement | null>, isShown: boolean, occasion: string, { skipFirstRender, politeness, }?: AnnounceRenderedTextOptions): void;
|
|
87
|
+
export declare function useAnnounceRenderedText(ref: RefObject<HTMLElement | null>, isShown: boolean, occasion: string, { skipFirstRender, politeness, announce: ownerAnnounce, }?: AnnounceRenderedTextOptions): void;
|
|
80
88
|
//# sourceMappingURL=useAnnounceRenderedText.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAnnounceRenderedText.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnnounceRenderedText.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAA8B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"useAnnounceRenderedText.d.ts","sourceRoot":"","sources":["../../src/hooks/useAnnounceRenderedText.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAA8B,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAC;AAgCvB,MAAM,WAAW,2BAA2B;IAC1C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;OAGG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,UAAU,CAAC;CACvB;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,CAOzD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,EACE,eAAuB,EACvB,UAAqB,EACrB,QAAQ,EAAE,aAAa,GACxB,GAAE,2BAAgC,GAClC,IAAI,CAsDN"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* @input A ref to a rendered element, whether it is showing, and a token that
|
|
8
8
|
* marks a new occasion to speak
|
|
9
9
|
* @output Announces that element's own rendered text through the persistent
|
|
10
|
-
* polite live region
|
|
10
|
+
* polite live region, or through the announcer the owner passes
|
|
11
11
|
* @position Core a11y hook; mirrors on-screen content into the shared live
|
|
12
12
|
* region by reading the DOM
|
|
13
13
|
*
|
|
@@ -101,9 +101,11 @@ export function renderedText(element) {
|
|
|
101
101
|
*/
|
|
102
102
|
export function useAnnounceRenderedText(ref, isShown, occasion, {
|
|
103
103
|
skipFirstRender = false,
|
|
104
|
-
politeness = 'polite'
|
|
104
|
+
politeness = 'polite',
|
|
105
|
+
announce: ownerAnnounce
|
|
105
106
|
} = {}) {
|
|
106
|
-
const
|
|
107
|
+
const ownAnnounce = useAnnounce();
|
|
108
|
+
const announce = ownerAnnounce ?? ownAnnounce;
|
|
107
109
|
const spokenRef = useRef(null);
|
|
108
110
|
const isHydrating = useIsHydrating();
|
|
109
111
|
// Captured once: an owner rendered before the document finished loading, or
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBusyAnnouncement.d.ts","sourceRoot":"","sources":["../../src/hooks/useBusyAnnouncement.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAUrE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GACpC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"useBusyAnnouncement.d.ts","sourceRoot":"","sources":["../../src/hooks/useBusyAnnouncement.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAUrE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,GACpC,MAAM,IAAI,CAgEZ"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* this is a shared implementation detail of Astryx's busy controls.
|
|
27
27
|
*/
|
|
28
28
|
import { useCallback, useEffect, useRef } from 'react';
|
|
29
|
-
import { announceInModal, enclosingModalDialog, takeJoinedAnnouncement, useAnnounce,
|
|
29
|
+
import { announceInModal, enclosingModalDialog, takeJoinedAnnouncement, useAnnounce, withdrawPendingAnnouncement } from "./useAnnounce.js";
|
|
30
30
|
export function useBusyAnnouncement(isBusy, message, elementRef) {
|
|
31
31
|
const announce = useAnnounce();
|
|
32
32
|
const hasAnnouncedRef = useRef(false);
|
|
@@ -34,7 +34,8 @@ export function useBusyAnnouncement(isBusy, message, elementRef) {
|
|
|
34
34
|
// This busy start's share of the shared channel's pending text, until it
|
|
35
35
|
// settles.
|
|
36
36
|
const channelMessageRef = useRef(null);
|
|
37
|
-
// Or its write inside a modal
|
|
37
|
+
// Or how to take back its write inside a modal, wherever the modal moves
|
|
38
|
+
// it, until it settles.
|
|
38
39
|
const modalMessageRef = useRef(null);
|
|
39
40
|
useEffect(() => {
|
|
40
41
|
if (!isBusy) {
|
|
@@ -58,11 +59,7 @@ export function useBusyAnnouncement(isBusy, message, elementRef) {
|
|
|
58
59
|
// nearest Astryx modal around this hook's caller.
|
|
59
60
|
const dialog = enclosingModalDialog(elementRef.current);
|
|
60
61
|
if (dialog != null) {
|
|
61
|
-
announceInModal(dialog, message);
|
|
62
|
-
modalMessageRef.current = {
|
|
63
|
-
dialog,
|
|
64
|
-
message
|
|
65
|
-
};
|
|
62
|
+
modalMessageRef.current = announceInModal(dialog, message);
|
|
66
63
|
} else {
|
|
67
64
|
announce(message, 'polite');
|
|
68
65
|
channelMessageRef.current = takeJoinedAnnouncement();
|
|
@@ -88,12 +85,9 @@ export function useBusyAnnouncement(isBusy, message, elementRef) {
|
|
|
88
85
|
channelMessageRef.current = null;
|
|
89
86
|
}
|
|
90
87
|
if (modalMessageRef.current != null) {
|
|
91
|
-
const
|
|
92
|
-
dialog,
|
|
93
|
-
message
|
|
94
|
-
} = modalMessageRef.current;
|
|
95
|
-
withdrawFromModalPending(dialog, message, 'polite');
|
|
88
|
+
const withdraw = modalMessageRef.current;
|
|
96
89
|
modalMessageRef.current = null;
|
|
90
|
+
withdraw();
|
|
97
91
|
}
|
|
98
92
|
}, []);
|
|
99
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMenuHover.d.ts","sourceRoot":"","sources":["../../src/hooks/useMenuHover.ts"],"names":[],"mappings":"AA+DA,UAAU,KAAK;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAeD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,QAAQ,GACf,OAAO,CAqBT;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE,YAAY,EAAE;QACZ,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QAC5C,YAAY,EAAE,MAAM,IAAI,CAAC;QACzB;;;WAGG;QACH,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QACjD,iDAAiD;QACjD,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,YAAY,EAAE,MAAM,IAAI,CAAC;QACzB,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QACjD,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;KAC7C,CAAC;IACF,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnC,uEAAuE;IACvE,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,YAAY,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC9D,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"useMenuHover.d.ts","sourceRoot":"","sources":["../../src/hooks/useMenuHover.ts"],"names":[],"mappings":"AA+DA,UAAU,KAAK;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAeD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,QAAQ,GACf,OAAO,CAqBT;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IACpD,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrE,YAAY,EAAE;QACZ,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QAC5C,YAAY,EAAE,MAAM,IAAI,CAAC;QACzB;;;WAGG;QACH,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QACjD,iDAAiD;QACjD,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,YAAY,EAAE;QACZ,YAAY,EAAE,MAAM,IAAI,CAAC;QACzB,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;QACjD,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;KAC7C,CAAC;IACF,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACnC,uEAAuE;IACvE,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,OAAO,CAAC;IAChC;;;;OAIG;IACH,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,YAAY,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAChD;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,EAC9D,OAAO,EAAE,mBAAmB,GAC3B,kBAAkB,CAAC,CAAC,CAAC,CAoWvB"}
|
|
@@ -201,6 +201,17 @@ export function useMenuHover(options) {
|
|
|
201
201
|
focusForLastInput(trigger);
|
|
202
202
|
}
|
|
203
203
|
}, [hide, menuRef]);
|
|
204
|
+
|
|
205
|
+
// A menu placed in the content can own its own list keys (NavHeadingMenu
|
|
206
|
+
// runs useListFocus over the same `menuitem`s); a key it consumed must not
|
|
207
|
+
// move focus a second time here as it bubbles out (APG menu: one item per
|
|
208
|
+
// arrow press).
|
|
209
|
+
const handleContentKeyDown = useCallback(event => {
|
|
210
|
+
if (event.defaultPrevented) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
handleListKeyDown(event);
|
|
214
|
+
}, [handleListKeyDown]);
|
|
204
215
|
useEffect(() => {
|
|
205
216
|
escapeHandlerRef.current = () => {
|
|
206
217
|
clearTimeouts();
|
|
@@ -427,7 +438,7 @@ export function useMenuHover(options) {
|
|
|
427
438
|
contentProps: {
|
|
428
439
|
onMouseEnter: handleContentMouseEnter,
|
|
429
440
|
onMouseLeave: handleMouseLeave,
|
|
430
|
-
onKeyDown:
|
|
441
|
+
onKeyDown: handleContentKeyDown
|
|
431
442
|
},
|
|
432
443
|
menuRef,
|
|
433
444
|
focusFirst,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.generated.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated-locales/en.generated.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,QAAA,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"en.generated.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated-locales/en.generated.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,QAAA,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwmBpD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -205,9 +205,12 @@ const runtimeCatalog = {
|
|
|
205
205
|
'@astryx.sideNav.label': 'Side navigation',
|
|
206
206
|
'@astryx.sideNav.resizeSidebar': 'Resize sidebar',
|
|
207
207
|
'@astryx.sideNav.heading.openMenu': 'Open menu',
|
|
208
|
+
'@astryx.slider.minimumThumb': 'Minimum value',
|
|
209
|
+
'@astryx.slider.maximumThumb': 'Maximum value',
|
|
208
210
|
'@astryx.tabList.label': 'Tabs',
|
|
209
211
|
'@astryx.table.label': 'Table',
|
|
210
212
|
'@astryx.table.noData': 'No data',
|
|
213
|
+
'@astryx.table.columnResize.resizeColumn': 'Resize column {label}',
|
|
211
214
|
'@astryx.table.filter.allPlaceholder': 'All',
|
|
212
215
|
'@astryx.table.filter.reset': 'Reset',
|
|
213
216
|
'@astryx.table.filter.apply': 'Apply',
|
|
@@ -399,6 +402,7 @@ const runtimeCatalog = {
|
|
|
399
402
|
'@astryx.tableTree.expandRow': 'Expand row',
|
|
400
403
|
'@astryx.tableTree.collapseAllRows': 'Collapse all rows',
|
|
401
404
|
'@astryx.tableTree.expandAllRows': 'Expand all rows',
|
|
405
|
+
'@astryx.textArea.counter': '{count, number}/{limit, number}',
|
|
402
406
|
'@astryx.textArea.charactersRemaining': '{count, number} {count, plural, one {character} other {characters}} remaining',
|
|
403
407
|
'@astryx.textArea.charactersOverLimit': '{count, number} {count, plural, one {character} other {characters}} over the limit',
|
|
404
408
|
'@astryx.inputClearButton.tooltip': 'Clear',
|
|
@@ -418,6 +422,7 @@ const runtimeCatalog = {
|
|
|
418
422
|
'@astryx.multiSelector.selectionCleared': 'Selection cleared',
|
|
419
423
|
'@astryx.multiSelector.allSelected': 'All selected',
|
|
420
424
|
'@astryx.multiSelector.selectionCount': '{count, number} of {total, number} selected',
|
|
425
|
+
'@astryx.multiSelector.selectedCount': '{count, plural, one {# selected} other {# selected}}',
|
|
421
426
|
'@astryx.multiSelector.createOption': 'Create "{query}"',
|
|
422
427
|
'@astryx.multiSelector.optionCreated': '{label} created',
|
|
423
428
|
'@astryx.multiSelector.emptySearchResults': 'No results found',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pseudo.generated.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated-locales/pseudo.generated.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,QAAA,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"pseudo.generated.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated-locales/pseudo.generated.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH,QAAA,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmnBpD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -205,9 +205,12 @@ const runtimeCatalog = {
|
|
|
205
205
|
'@astryx.sideNav.label': '⟦Šíðé ñàṽíĝàţíóñ⟧',
|
|
206
206
|
'@astryx.sideNav.resizeSidebar': '⟦Řéšížé šíðéƀàř⟧',
|
|
207
207
|
'@astryx.sideNav.heading.openMenu': '⟦Óþéñ ɱéñú⟧',
|
|
208
|
+
'@astryx.slider.minimumThumb': '⟦Ṁíñíɱúɱ ṽàłúé⟧',
|
|
209
|
+
'@astryx.slider.maximumThumb': '⟦Ṁàẋíɱúɱ ṽàłúé⟧',
|
|
208
210
|
'@astryx.tabList.label': '⟦Ţàƀš⟧',
|
|
209
211
|
'@astryx.table.label': '⟦Ţàƀłé⟧',
|
|
210
212
|
'@astryx.table.noData': '⟦Ñó ðàţà⟧',
|
|
213
|
+
'@astryx.table.columnResize.resizeColumn': '⟦Řéšížé çółúɱñ {label}⟧',
|
|
211
214
|
'@astryx.table.filter.allPlaceholder': '⟦Àłł⟧',
|
|
212
215
|
'@astryx.table.filter.reset': '⟦Řéšéţ⟧',
|
|
213
216
|
'@astryx.table.filter.apply': '⟦Àþþłý⟧',
|
|
@@ -399,6 +402,7 @@ const runtimeCatalog = {
|
|
|
399
402
|
'@astryx.tableTree.expandRow': '⟦Éẋþàñð řóŵ⟧',
|
|
400
403
|
'@astryx.tableTree.collapseAllRows': '⟦Çółłàþšé àłł řóŵš⟧',
|
|
401
404
|
'@astryx.tableTree.expandAllRows': '⟦Éẋþàñð àłł řóŵš⟧',
|
|
405
|
+
'@astryx.textArea.counter': '⟦{count, number}/{limit, number}⟧',
|
|
402
406
|
'@astryx.textArea.charactersRemaining': '⟦{count, number} {count, plural, one {character} other {characters}} řéɱàíñíñĝ⟧',
|
|
403
407
|
'@astryx.textArea.charactersOverLimit': '⟦{count, number} {count, plural, one {character} other {characters}} óṽéř ţĥé łíɱíţ⟧',
|
|
404
408
|
'@astryx.inputClearButton.tooltip': '⟦Çłéàř⟧',
|
|
@@ -418,6 +422,7 @@ const runtimeCatalog = {
|
|
|
418
422
|
'@astryx.multiSelector.selectionCleared': '⟦Šéłéçţíóñ çłéàřéð⟧',
|
|
419
423
|
'@astryx.multiSelector.allSelected': '⟦Àłł šéłéçţéð⟧',
|
|
420
424
|
'@astryx.multiSelector.selectionCount': '⟦{count, number} óƒ {total, number} šéłéçţéð⟧',
|
|
425
|
+
'@astryx.multiSelector.selectedCount': '⟦{count, plural, one {# selected} other {# selected}}⟧',
|
|
421
426
|
'@astryx.multiSelector.createOption': '⟦Çřéàţé "{query}"⟧',
|
|
422
427
|
'@astryx.multiSelector.optionCreated': '⟦{label} çřéàţéð⟧',
|
|
423
428
|
'@astryx.multiSelector.emptySearchResults': '⟦Ñó řéšúłţš ƒóúñð⟧',
|
|
@@ -74,6 +74,12 @@ export interface MotionCurve {
|
|
|
74
74
|
* Options of `createAnimator`.
|
|
75
75
|
*/
|
|
76
76
|
export interface AnimatorOptions {
|
|
77
|
+
/**
|
|
78
|
+
* Animates a pseudo-element of the element instead (`'::backdrop'` of a
|
|
79
|
+
* native dialog). A pseudo-element has no inline style, so a static filling
|
|
80
|
+
* animation holds its value after a curve ends and after `set`.
|
|
81
|
+
*/
|
|
82
|
+
pseudoElement?: string;
|
|
77
83
|
/** Starting values; identity by default. Never read from the DOM. */
|
|
78
84
|
initial?: MotionValues;
|
|
79
85
|
/** Clock in ms on the document timeline's time base. */
|
|
@@ -202,7 +208,7 @@ export declare const END_HOLD_MS = 5000;
|
|
|
202
208
|
/** How long an element stays promoted after its last motion, ms. */
|
|
203
209
|
export declare const PROMOTION_LINGER_MS = 500;
|
|
204
210
|
/**
|
|
205
|
-
* The one animator for `element
|
|
211
|
+
* The one animator for `element` (and `options.pseudoElement`), created on
|
|
206
212
|
* first use. Code that animates one element from several places (a swipe on
|
|
207
213
|
* x, a removal on y) shares it, so their curves compose in one `translate`
|
|
208
214
|
* track and retargeting one axis leaves the other on its curve; two
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../../src/motion/animator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../../src/motion/animator.ts"],"names":[],"mappings":"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"}
|