@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
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file popoverOperations.ts
|
|
5
|
+
* @input Popover API events (`beforetoggle`, `toggle`) and the layers' own show/hide calls
|
|
6
|
+
* @output The per-document ledger of popover operations in flight, and the deferral of a show that arrives inside one
|
|
7
|
+
* @position Internal to the layer runtime; used by useLayer
|
|
8
|
+
*
|
|
9
|
+
* SYNC: When modified, update:
|
|
10
|
+
* - /packages/core/src/Layer/useLayer.tsx
|
|
11
|
+
* - /packages/core/src/Layer/popoverOperations.test.ts
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Popover operations in flight, per document.
|
|
16
|
+
*
|
|
17
|
+
* The Popover API refuses to show a popover while the document is in the
|
|
18
|
+
* middle of showing or hiding ANY popover: `showPopover()` throws an
|
|
19
|
+
* `InvalidStateError` ("Invalid to show a popover during another show
|
|
20
|
+
* operation"; Chromium 150+, where 149 still accepts such a show).
|
|
21
|
+
* Hiding a popover restores focus to the element that had it —
|
|
22
|
+
* synchronously, inside that window — so a focus-driven layer on the element
|
|
23
|
+
* receiving focus (a tooltip on the trigger that just closed a popover) asks
|
|
24
|
+
* to show while the hide is still running.
|
|
25
|
+
*
|
|
26
|
+
* Two kinds of operation are counted:
|
|
27
|
+
*
|
|
28
|
+
* - The layers' own shows and hides pass through `runPopoverOperation`, so
|
|
29
|
+
* their windows are known exactly: a `show()` that arrives inside one is
|
|
30
|
+
* deferred ahead of asking the browser.
|
|
31
|
+
* - A hide the browser runs on its own — an Escape its close watcher answers,
|
|
32
|
+
* a light dismiss, an `auto` popover evicted by another one opening — never
|
|
33
|
+
* passes through here. It is observable from its element's events:
|
|
34
|
+
* `beforetoggle` fires synchronously as the hide starts, and `toggle` in a
|
|
35
|
+
* task once it has ended; `observeBrowserHide` counts it between the two.
|
|
36
|
+
* That window is wider than the engine's, which ends when the hide returns,
|
|
37
|
+
* so a show inside it is asked of the browser first and deferred only when
|
|
38
|
+
* the browser refuses it: a light dismiss at `pointerup` followed by a show
|
|
39
|
+
* at `click` in the same gesture still opens at once.
|
|
40
|
+
*
|
|
41
|
+
* A deferred show waits in `afterPopoverOperations` and replays, one
|
|
42
|
+
* microtask each, once the document's last operation of either kind has
|
|
43
|
+
* ended and the script that started it has unwound.
|
|
44
|
+
*/
|
|
45
|
+
const ownOperationsByDocument = new WeakMap();
|
|
46
|
+
const browserHidesByDocument = new WeakMap();
|
|
47
|
+
const settledCallbacksByDocument = new WeakMap();
|
|
48
|
+
function count(map, doc, delta) {
|
|
49
|
+
map.set(doc, Math.max(0, (map.get(doc) ?? 0) + delta));
|
|
50
|
+
}
|
|
51
|
+
function anyInFlight(doc) {
|
|
52
|
+
return (ownOperationsByDocument.get(doc) ?? 0) > 0 || (browserHidesByDocument.get(doc) ?? 0) > 0;
|
|
53
|
+
}
|
|
54
|
+
function ended(doc) {
|
|
55
|
+
if (!anyInFlight(doc) && settledCallbacksByDocument.has(doc)) {
|
|
56
|
+
// The operation's own script is still on the stack (the `finally` of a
|
|
57
|
+
// `runPopoverOperation`, a `toggle` listener): replay once it has unwound.
|
|
58
|
+
queueMicrotask(() => replaySettled(doc));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function replaySettled(doc) {
|
|
62
|
+
if (anyInFlight(doc)) {
|
|
63
|
+
// Another operation started before the replay ran; its end replays.
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const callbacks = settledCallbacksByDocument.get(doc);
|
|
67
|
+
if (callbacks == null) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
settledCallbacksByDocument.delete(doc);
|
|
71
|
+
// One microtask each: a replay that throws reaches the page on its own and
|
|
72
|
+
// leaves the ones after it to run.
|
|
73
|
+
for (const callback of callbacks) {
|
|
74
|
+
queueMicrotask(callback);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Runs `operation`, counting it as one of the layers' own popover operations in `doc`. */
|
|
79
|
+
export function runPopoverOperation(doc, operation) {
|
|
80
|
+
count(ownOperationsByDocument, doc, 1);
|
|
81
|
+
try {
|
|
82
|
+
operation();
|
|
83
|
+
} finally {
|
|
84
|
+
count(ownOperationsByDocument, doc, -1);
|
|
85
|
+
ended(doc);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Whether one of the layers' own shows or hides is running in `doc`: a show asked now would be refused. */
|
|
90
|
+
export function isPopoverOperationInFlight(doc) {
|
|
91
|
+
return (ownOperationsByDocument.get(doc) ?? 0) > 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Whether a hide the browser runs itself is counted in `doc`. The count
|
|
96
|
+
* outlasts the engine's own window (it ends at the element's `toggle`, a task
|
|
97
|
+
* later), so a show asked inside it may well succeed; one the browser refuses
|
|
98
|
+
* is deferred to the count's end.
|
|
99
|
+
*/
|
|
100
|
+
export function isBrowserHideInFlight(doc) {
|
|
101
|
+
return (browserHidesByDocument.get(doc) ?? 0) > 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Popovers whose browser-run hide is being counted, so one hide is counted once. */
|
|
105
|
+
const browserHidesInFlight = new WeakSet();
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Counts a hide the browser runs itself. Called as the element's `beforetoggle`
|
|
109
|
+
* fires, which the hide dispatches synchronously as it starts; the count ends
|
|
110
|
+
* at the element's `toggle`, which the browser queues for the task after the
|
|
111
|
+
* hide, and in any case at the next task: the hide is synchronous, so the task
|
|
112
|
+
* after it is past the window even when the element has left the document and
|
|
113
|
+
* its `toggle` never arrives. Calling it again for the same hide is a no-op.
|
|
114
|
+
*/
|
|
115
|
+
export function observeBrowserHide(popover) {
|
|
116
|
+
if (browserHidesInFlight.has(popover)) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
browserHidesInFlight.add(popover);
|
|
120
|
+
const doc = popover.ownerDocument;
|
|
121
|
+
count(browserHidesByDocument, doc, 1);
|
|
122
|
+
const view = doc.defaultView ?? globalThis;
|
|
123
|
+
let timer = null;
|
|
124
|
+
let done = false;
|
|
125
|
+
const finish = () => {
|
|
126
|
+
if (done) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
done = true;
|
|
130
|
+
popover.removeEventListener('toggle', finish);
|
|
131
|
+
if (timer != null) {
|
|
132
|
+
view.clearTimeout(timer);
|
|
133
|
+
timer = null;
|
|
134
|
+
}
|
|
135
|
+
browserHidesInFlight.delete(popover);
|
|
136
|
+
count(browserHidesByDocument, doc, -1);
|
|
137
|
+
ended(doc);
|
|
138
|
+
};
|
|
139
|
+
popover.addEventListener('toggle', finish);
|
|
140
|
+
timer = view.setTimeout(finish, 0);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Runs `callback` once no popover operation of either kind is in flight in
|
|
145
|
+
* `doc`: at once when none is, otherwise in its own microtask after the last
|
|
146
|
+
* one has ended and the script that started it has unwound.
|
|
147
|
+
*/
|
|
148
|
+
export function afterPopoverOperations(doc, callback) {
|
|
149
|
+
if (!anyInFlight(doc)) {
|
|
150
|
+
callback();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const callbacks = settledCallbacksByDocument.get(doc);
|
|
154
|
+
if (callbacks == null) {
|
|
155
|
+
settledCallbacksByDocument.set(doc, [callback]);
|
|
156
|
+
} else {
|
|
157
|
+
callbacks.push(callback);
|
|
158
|
+
}
|
|
159
|
+
}
|
package/dist/Layer/useLayer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file useLayer.tsx
|
|
3
|
-
* @input Uses React hooks, Popover API, CSS anchor positioning, shared text/provider boundaries
|
|
3
|
+
* @input Uses React hooks, Popover API (its `beforetoggle`/`toggle` events through the popoverOperations ledger), CSS anchor positioning, shared text/provider boundaries
|
|
4
4
|
* @output Exports the public useLayer hook plus internal trigger helpers.
|
|
5
5
|
* @position Core layer utility; used by useHoverCard, useTooltip, etc.
|
|
6
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayer.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayer.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,EAQZ,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"useLayer.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayer.tsx"],"names":[],"mappings":"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"}
|
package/dist/Layer/useLayer.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useLayer.tsx
|
|
7
|
-
* @input Uses React hooks, Popover API, CSS anchor positioning, shared text/provider boundaries
|
|
7
|
+
* @input Uses React hooks, Popover API (its `beforetoggle`/`toggle` events through the popoverOperations ledger), CSS anchor positioning, shared text/provider boundaries
|
|
8
8
|
* @output Exports the public useLayer hook plus internal trigger helpers.
|
|
9
9
|
* @position Core layer utility; used by useHoverCard, useTooltip, etc.
|
|
10
10
|
*
|
|
@@ -26,6 +26,7 @@ import "./layerViewportInset.stylex.js";
|
|
|
26
26
|
import { layerViewportInset } from "./layerViewportInset.stylex.js";
|
|
27
27
|
import { layerInsetProperties } from "./layerInset.js";
|
|
28
28
|
import { LAYER_CLEARANCE_PROPERTY, LAYER_CLEARS_ANCHOR_ATTRIBUTE, LAYER_SCROLLS_ATTRIBUTE, LAYER_CLEAR_FALLBACKS_PROPERTY, LAYER_TRY_FALLBACKS_PROPERTY, ensureSlideRules, getAnchorClearFallbacks, slideRuleName } from "./layerSlideRules.js";
|
|
29
|
+
import { afterPopoverOperations, isBrowserHideInFlight, isPopoverOperationInFlight, observeBrowserHide, runPopoverOperation } from "./popoverOperations.js";
|
|
29
30
|
import { preserveAnimations } from "./preserveAnimations.js";
|
|
30
31
|
import { useLayerContext } from "./LayerContext.js";
|
|
31
32
|
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
@@ -500,35 +501,6 @@ function observeAnchorClearance(layer, anchor, isCurrent) {
|
|
|
500
501
|
};
|
|
501
502
|
}
|
|
502
503
|
|
|
503
|
-
/**
|
|
504
|
-
* Popover operations in flight, per document.
|
|
505
|
-
*
|
|
506
|
-
* The Popover API refuses to show a popover while the document is in the
|
|
507
|
-
* middle of showing or hiding ANY popover: `showPopover()` throws an
|
|
508
|
-
* `InvalidStateError` ("Invalid to show a popover during another show
|
|
509
|
-
* operation"); an engine still rolling the rule out instead refuses silently
|
|
510
|
-
* with a console warning, which would leave this hook open with nothing
|
|
511
|
-
* shown. Hiding a popover restores focus to the element that had it —
|
|
512
|
-
* synchronously, inside that window — so a focus-driven layer on the element
|
|
513
|
-
* receiving focus (a tooltip on the trigger that just closed a popover) asks
|
|
514
|
-
* to show while the hide is still running. Every layer's show and hide passes
|
|
515
|
-
* through here, so the window is observable: a `show()` that arrives inside
|
|
516
|
-
* it is replayed in a microtask, which runs once the script that started the
|
|
517
|
-
* operation — and the event dispatch it answered — has unwound.
|
|
518
|
-
*/
|
|
519
|
-
const popoverOperationsByDocument = new WeakMap();
|
|
520
|
-
function runPopoverOperation(doc, operation) {
|
|
521
|
-
popoverOperationsByDocument.set(doc, (popoverOperationsByDocument.get(doc) ?? 0) + 1);
|
|
522
|
-
try {
|
|
523
|
-
operation();
|
|
524
|
-
} finally {
|
|
525
|
-
popoverOperationsByDocument.set(doc, (popoverOperationsByDocument.get(doc) ?? 1) - 1);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
function isPopoverOperationInFlight(doc) {
|
|
529
|
-
return (popoverOperationsByDocument.get(doc) ?? 0) > 0;
|
|
530
|
-
}
|
|
531
|
-
|
|
532
504
|
/**
|
|
533
505
|
* Where a context layer is hosted, published to the one component that
|
|
534
506
|
* renders it. The hook resolves the mount from the marker's parent once the
|
|
@@ -851,34 +823,56 @@ function useLayerImplementation(options) {
|
|
|
851
823
|
const gesture = currentGesture();
|
|
852
824
|
return dismissedByGestureRef.current === gesture;
|
|
853
825
|
}, []);
|
|
826
|
+
|
|
827
|
+
/**
|
|
828
|
+
* Asks the browser to show the popover. Returns false when the browser
|
|
829
|
+
* refused with an `InvalidStateError` while a hide it runs itself is still
|
|
830
|
+
* in flight (the ledger counts it from `beforetoggle`); the caller then
|
|
831
|
+
* replays the show once that hide has ended. Any other failure, and a
|
|
832
|
+
* refusal outside such a hide, reaches the caller: a replay runs outside
|
|
833
|
+
* the hide, so one that fails is not caught here.
|
|
834
|
+
*/
|
|
854
835
|
const showPopoverElement = useCallback(popover => {
|
|
855
836
|
// Finding infra-4: the Popover API is unsupported on Safari <17 and
|
|
856
837
|
// Firefox <125. On those browsers `showPopover` does not exist, so fall
|
|
857
838
|
// back to plain visibility instead of throwing.
|
|
858
839
|
if (typeof popover.showPopover === 'function') {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
source
|
|
840
|
+
const doc = popover.ownerDocument;
|
|
841
|
+
const duringBrowserHide = isBrowserHideInFlight(doc);
|
|
842
|
+
try {
|
|
843
|
+
runPopoverOperation(doc, () => {
|
|
844
|
+
// The trigger is passed as the popover's invoker `source`: a layer
|
|
845
|
+
// hosted away from its trigger then still takes its sequential
|
|
846
|
+
// focus order (and its popover nesting) from the trigger rather
|
|
847
|
+
// than from its own DOM position. Browsers without the option
|
|
848
|
+
// ignore it. `source` is declared as an `HTMLElement`. A
|
|
849
|
+
// caller-rendered icon trigger is an `SVGElement`, whose dictionary
|
|
850
|
+
// conversion throws before the popover opens. Omitting the option
|
|
851
|
+
// for it still anchors the layer, because positioning reads the
|
|
852
|
+
// anchor-name pair, and only gives up the invoker's focus order.
|
|
853
|
+
// The check asks the trigger's own window: an HTML trigger rendered
|
|
854
|
+
// into another document (an iframe, a Picture-in-Picture window) is
|
|
855
|
+
// not an instance of this window's `HTMLElement`, and keeps its
|
|
856
|
+
// source.
|
|
857
|
+
const trigger = triggerRef.current;
|
|
858
|
+
const triggerView = trigger?.ownerDocument.defaultView;
|
|
859
|
+
popover.showPopover({
|
|
860
|
+
source: triggerView != null && trigger instanceof triggerView.HTMLElement ? trigger : undefined
|
|
861
|
+
});
|
|
876
862
|
});
|
|
877
|
-
})
|
|
863
|
+
} catch (error) {
|
|
864
|
+
// The name, not the constructor: a popover in another document throws
|
|
865
|
+
// that document's `DOMException`.
|
|
866
|
+
if (duringBrowserHide && error?.name === 'InvalidStateError') {
|
|
867
|
+
return false;
|
|
868
|
+
}
|
|
869
|
+
throw error;
|
|
870
|
+
}
|
|
878
871
|
} else {
|
|
879
872
|
popover.style.display = 'block';
|
|
880
873
|
}
|
|
881
874
|
openedPopoverRef.current = popover;
|
|
875
|
+
return true;
|
|
882
876
|
}, []);
|
|
883
877
|
const isCurrentContextPopover = useCallback(popover => {
|
|
884
878
|
if (mode !== 'context') {
|
|
@@ -970,23 +964,35 @@ function useLayerImplementation(options) {
|
|
|
970
964
|
return;
|
|
971
965
|
}
|
|
972
966
|
if (!isOpenRef.current) {
|
|
973
|
-
|
|
974
|
-
// focus back to this layer's trigger): the browser would refuse the
|
|
975
|
-
// show, so replay this call once that operation has returned.
|
|
976
|
-
if (isPopoverOperationInFlight(popover.ownerDocument)) {
|
|
967
|
+
const replayWhenSettled = () => {
|
|
977
968
|
pendingShowRef.current = true;
|
|
978
|
-
|
|
969
|
+
afterPopoverOperations(popover.ownerDocument, () => {
|
|
979
970
|
if (pendingShowRef.current) {
|
|
980
971
|
pendingShowRef.current = false;
|
|
981
972
|
showRef.current();
|
|
982
973
|
}
|
|
983
974
|
});
|
|
975
|
+
};
|
|
976
|
+
// Another layer's own show or hide is running (typically a hide that is
|
|
977
|
+
// handing focus back to this layer's trigger): the browser would refuse
|
|
978
|
+
// the show, so replay this call once that operation has returned.
|
|
979
|
+
if (isPopoverOperationInFlight(popover.ownerDocument)) {
|
|
980
|
+
replayWhenSettled();
|
|
984
981
|
return;
|
|
985
982
|
}
|
|
986
983
|
popover.removeAttribute(LAYER_CLEARS_ANCHOR_ATTRIBUTE);
|
|
987
984
|
popover.removeAttribute(LAYER_SCROLLS_ATTRIBUTE);
|
|
988
985
|
applyDeferredWritingContext(popover);
|
|
989
|
-
|
|
986
|
+
// A hide the browser runs itself (an Escape its close watcher answers)
|
|
987
|
+
// is counted too, from `beforetoggle` until the element's `toggle`, a
|
|
988
|
+
// task after the hide has returned. The show is asked of the browser
|
|
989
|
+
// first, because the browser accepts it once its hide has returned (a
|
|
990
|
+
// light dismiss at pointerup, then this show at the click); only a show
|
|
991
|
+
// it refuses replays once the hide's count has ended.
|
|
992
|
+
if (!showPopoverElement(popover)) {
|
|
993
|
+
replayWhenSettled();
|
|
994
|
+
return;
|
|
995
|
+
}
|
|
990
996
|
if (keepsAnchorClear) {
|
|
991
997
|
keepAnchorClear(popover, triggerRef.current);
|
|
992
998
|
}
|
|
@@ -1118,6 +1124,21 @@ function useLayerImplementation(options) {
|
|
|
1118
1124
|
// The isOpenRef guard prevents double-firing: when our hide() already set
|
|
1119
1125
|
// the ref to false, the subsequent toggle event (which the browser fires
|
|
1120
1126
|
// as a side-effect of hidePopover) sees false and skips.
|
|
1127
|
+
// A hide the browser runs itself (light dismiss, popover="auto" stack
|
|
1128
|
+
// eviction, an Escape its close watcher answers) never passes through
|
|
1129
|
+
// hide(), so the ledger of popover operations would not know the document
|
|
1130
|
+
// is mid-hide, and a layer that the hide's focus restore wakes would ask the
|
|
1131
|
+
// browser to show inside it. `beforetoggle` fires synchronously as such a
|
|
1132
|
+
// hide starts; the ledger counts the hide from there until the element's
|
|
1133
|
+
// own `toggle`, independent of this hook's bindings, which a render inside
|
|
1134
|
+
// the hide can replace.
|
|
1135
|
+
const handleBeforeToggle = useCallback(e => {
|
|
1136
|
+
const toggleEvent = e;
|
|
1137
|
+
const el = e.currentTarget;
|
|
1138
|
+
if (toggleEvent.newState === 'closed' && isOpenRef.current && el != null) {
|
|
1139
|
+
observeBrowserHide(el);
|
|
1140
|
+
}
|
|
1141
|
+
}, []);
|
|
1121
1142
|
const handleToggle = useCallback(e => {
|
|
1122
1143
|
const toggleEvent = e;
|
|
1123
1144
|
if (toggleEvent.newState === 'closed' && isOpenRef.current) {
|
|
@@ -1140,15 +1161,17 @@ function useLayerImplementation(options) {
|
|
|
1140
1161
|
const bindToggleListener = useCallback((el, handler) => {
|
|
1141
1162
|
if (listenedElRef.current && listenedHandlerRef.current && (listenedElRef.current !== el || listenedHandlerRef.current !== handler)) {
|
|
1142
1163
|
listenedElRef.current.removeEventListener('toggle', listenedHandlerRef.current);
|
|
1164
|
+
listenedElRef.current.removeEventListener('beforetoggle', handleBeforeToggle);
|
|
1143
1165
|
listenedElRef.current = null;
|
|
1144
1166
|
listenedHandlerRef.current = null;
|
|
1145
1167
|
}
|
|
1146
1168
|
if (el && listenedElRef.current !== el) {
|
|
1147
1169
|
el.addEventListener('toggle', handler);
|
|
1170
|
+
el.addEventListener('beforetoggle', handleBeforeToggle);
|
|
1148
1171
|
listenedElRef.current = el;
|
|
1149
1172
|
listenedHandlerRef.current = handler;
|
|
1150
1173
|
}
|
|
1151
|
-
}, []);
|
|
1174
|
+
}, [handleBeforeToggle]);
|
|
1152
1175
|
const popoverRefCallback = useCallback(el => {
|
|
1153
1176
|
popoverRef.current = el;
|
|
1154
1177
|
bindToggleListener(el, handleToggle);
|
|
@@ -1158,9 +1181,19 @@ function useLayerImplementation(options) {
|
|
|
1158
1181
|
} else if (el && isOpenRef.current && openedPopoverRef.current !== el && isCurrentContextPopover(el)) {
|
|
1159
1182
|
// Changing a portal target remounts the popover. Preserve the logical
|
|
1160
1183
|
// open state without firing onShow again for the replacement element.
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1184
|
+
// A show the browser refused during one of its own hides replays once
|
|
1185
|
+
// that hide has ended, for the element still mounted then.
|
|
1186
|
+
if (showPopoverElement(el)) {
|
|
1187
|
+
if (keepsAnchorClear) {
|
|
1188
|
+
keepAnchorClear(el, triggerRef.current);
|
|
1189
|
+
}
|
|
1190
|
+
} else {
|
|
1191
|
+
afterPopoverOperations(el.ownerDocument, () => {
|
|
1192
|
+
const current = popoverRef.current;
|
|
1193
|
+
if (isOpenRef.current && current === el && openedPopoverRef.current !== el && showPopoverElement(el) && keepsAnchorClear) {
|
|
1194
|
+
keepAnchorClear(el, triggerRef.current);
|
|
1195
|
+
}
|
|
1196
|
+
});
|
|
1164
1197
|
}
|
|
1165
1198
|
}
|
|
1166
1199
|
}, [handleToggle, bindToggleListener, show, showPopoverElement, isCurrentContextPopover, keepsAnchorClear]);
|
|
@@ -1183,11 +1216,12 @@ function useLayerImplementation(options) {
|
|
|
1183
1216
|
return () => {
|
|
1184
1217
|
if (listenedElRef.current && listenedHandlerRef.current) {
|
|
1185
1218
|
listenedElRef.current.removeEventListener('toggle', listenedHandlerRef.current);
|
|
1219
|
+
listenedElRef.current.removeEventListener('beforetoggle', handleBeforeToggle);
|
|
1186
1220
|
listenedElRef.current = null;
|
|
1187
1221
|
listenedHandlerRef.current = null;
|
|
1188
1222
|
}
|
|
1189
1223
|
};
|
|
1190
|
-
}, [handleToggle, bindToggleListener]);
|
|
1224
|
+
}, [handleToggle, bindToggleListener, handleBeforeToggle]);
|
|
1191
1225
|
|
|
1192
1226
|
// Anchor visibility (FR5). The first frame must already be right (FR8), so
|
|
1193
1227
|
// the opening read is synchronous — a layout effect runs before paint, and a
|
package/dist/Layout/Layout.js
CHANGED
|
@@ -23,7 +23,7 @@ import { LayoutSlotsContext } from "./LayoutSlotsContext.js";
|
|
|
23
23
|
import { LayoutDividerContext } from "./LayoutDividerContext.js";
|
|
24
24
|
import { stack } from "../Stack/stack.stylex.js";
|
|
25
25
|
import { stackItem } from "../Stack/stackItem.stylex.js";
|
|
26
|
-
import { mergeProps } from "../utils/
|
|
26
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
27
27
|
import "./layoutEdges.stylex.js";
|
|
28
28
|
import { layoutFooterMarker, layoutHeaderMarker } from "./layoutEdges.stylex.js";
|
|
29
29
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -19,7 +19,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
19
19
|
import "../theme/tokens.stylex.js";
|
|
20
20
|
import { spacingVars } from "../theme/tokens.stylex.js";
|
|
21
21
|
import { LayoutSlotsContext } from "./LayoutSlotsContext.js";
|
|
22
|
-
import { mergeProps } from "../utils/
|
|
22
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
23
23
|
import { themeProps } from "../utils/themeProps.js";
|
|
24
24
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
25
25
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -20,7 +20,7 @@ import { layoutFooterMarker } from "./layoutEdges.stylex.js";
|
|
|
20
20
|
import { LayoutDividerContext } from "./LayoutDividerContext.js";
|
|
21
21
|
import "../theme/tokens.stylex.js";
|
|
22
22
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
23
|
-
import { mergeProps } from "../utils/
|
|
23
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
24
24
|
import { themeProps } from "../utils/themeProps.js";
|
|
25
25
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
26
26
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -21,7 +21,7 @@ import { layoutHeaderMarker } from "./layoutEdges.stylex.js";
|
|
|
21
21
|
import { LayoutDividerContext } from "./LayoutDividerContext.js";
|
|
22
22
|
import "../theme/tokens.stylex.js";
|
|
23
23
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
24
|
-
import { mergeProps } from "../utils/
|
|
24
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
25
25
|
import { themeProps } from "../utils/themeProps.js";
|
|
26
26
|
import { paddingStyles, paddingBlockEndStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
27
27
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAc5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,sCAidf;yBAjee,QAAQ"}
|
|
@@ -343,6 +343,11 @@ export function Lightbox({
|
|
|
343
343
|
// behind React's back, then answer with the stack's own rules: top-most
|
|
344
344
|
// only, and never while an IME composition is in progress.
|
|
345
345
|
const handleCancel = useCallback(e => {
|
|
346
|
+
// A cancel that bubbles up from inside (a dismissed file picker) is not
|
|
347
|
+
// a close request; the platform's is fired at the dialog itself.
|
|
348
|
+
if (e.target !== e.currentTarget) {
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
346
351
|
e.preventDefault();
|
|
347
352
|
if (!shouldDismissOnCloseRequest()) {
|
|
348
353
|
return;
|
|
@@ -49,11 +49,12 @@ test('the viewer is as tall as the dynamic viewport, so a toolbar never covers i
|
|
|
49
49
|
}
|
|
50
50
|
};
|
|
51
51
|
for (const sheet of Array.from(document.styleSheets)) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
// A cross-origin stylesheet's rules are unreadable, and not ours: skip
|
|
53
|
+
// only such a sheet, so any other error still fails the proof.
|
|
54
|
+
if (sheet.href != null && new URL(sheet.href, document.baseURI).origin !== location.origin) {
|
|
55
|
+
continue;
|
|
56
56
|
}
|
|
57
|
+
walk(sheet.cssRules);
|
|
57
58
|
}
|
|
58
59
|
return {
|
|
59
60
|
heights,
|
package/dist/List/List.js
CHANGED
|
@@ -23,7 +23,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
23
23
|
import "../theme/tokens.stylex.js";
|
|
24
24
|
import { spacingVars } from "../theme/tokens.stylex.js";
|
|
25
25
|
import { ListContext } from "./ListContext.js";
|
|
26
|
-
import { mergeProps } from "../utils/
|
|
26
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
27
27
|
import { themeProps } from "../utils/themeProps.js";
|
|
28
28
|
import { useDevWarning } from "../hooks/useDevWarning.js";
|
|
29
29
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
package/dist/List/ListItem.js
CHANGED
|
@@ -32,9 +32,9 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
32
32
|
import "../theme/tokens.stylex.js";
|
|
33
33
|
import { colorVars, spacingVars, typeScaleVars, borderVars } from "../theme/tokens.stylex.js";
|
|
34
34
|
import { ListContext } from "./ListContext.js";
|
|
35
|
-
import { CheckboxInput } from "../CheckboxInput/
|
|
36
|
-
import { mergeProps } from "../utils/
|
|
37
|
-
import { Item } from "../Item/
|
|
35
|
+
import { CheckboxInput } from "../CheckboxInput/CheckboxInput.js";
|
|
36
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
37
|
+
import { Item } from "../Item/Item.js";
|
|
38
38
|
import { ItemMarkerColumnsContext } from "../Item/ItemMarkerColumnsContext.js";
|
|
39
39
|
import { themeProps } from "../utils/themeProps.js";
|
|
40
40
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAyBf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAyBf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAkM5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAItC;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBpE;AA+DD,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EACR,MAAM,EACN,KAAW,EACX,IAAa,EACb,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAoRhB;yBAnSe,SAAS"}
|
|
@@ -455,6 +455,11 @@ export function MobileNav({
|
|
|
455
455
|
// behind React's back, then answer with the stack's own rules: top-most
|
|
456
456
|
// only, and never while an IME composition is in progress.
|
|
457
457
|
const handleCancel = useCallback(event => {
|
|
458
|
+
// A cancel that bubbles up from inside (a dismissed file picker) is not
|
|
459
|
+
// a close request; the platform's is fired at the dialog itself.
|
|
460
|
+
if (event.target !== event.currentTarget) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
458
463
|
event.preventDefault();
|
|
459
464
|
if (!shouldDismissOnCloseRequest()) {
|
|
460
465
|
return;
|
|
@@ -493,10 +498,10 @@ export function MobileNav({
|
|
|
493
498
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
494
499
|
...{
|
|
495
500
|
0: {
|
|
496
|
-
className: "x78zum5 x6s0dn4 x1qughib
|
|
501
|
+
className: "x78zum5 x6s0dn4 x1qughib x3unnv6 xf314gf x2lah0s x92x3c3 x1q0q8m5 xw8gpjh"
|
|
497
502
|
},
|
|
498
503
|
1: {
|
|
499
|
-
className: "x78zum5 x6s0dn4
|
|
504
|
+
className: "x78zum5 x6s0dn4 x3unnv6 xf314gf x2lah0s x92x3c3 x1q0q8m5 xw8gpjh x13a6bvl"
|
|
500
505
|
}
|
|
501
506
|
}[!!!header << 0],
|
|
502
507
|
children: [typeof header === 'string' ? /*#__PURE__*/_jsx(Heading, {
|
|
@@ -58,10 +58,11 @@ async function politeSince(page, since) {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
/**
|
|
61
|
-
* Matches a polite region whose newest message is `message`. Messages
|
|
62
|
-
* before the region exposes the previous one are
|
|
63
|
-
* (spec:AST-086 FR9), so
|
|
64
|
-
*
|
|
61
|
+
* Matches a polite region whose newest message is `message`. Messages from
|
|
62
|
+
* different announcers written before the region exposes the previous one are
|
|
63
|
+
* joined in order (spec:AST-086 FR9), so the creation can follow a search
|
|
64
|
+
* status still waiting. The search's own statuses replace each other instead
|
|
65
|
+
* (its `hasReplace` announcer), so they are read whole.
|
|
65
66
|
*/
|
|
66
67
|
function newestMessage(message) {
|
|
67
68
|
const escaped = message.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
@@ -84,7 +85,7 @@ test('the create row is announced as it appears and the highlight survives it va
|
|
|
84
85
|
// "Bu": a partial match plus the create row above it.
|
|
85
86
|
await search.pressSequentially('Bu');
|
|
86
87
|
await expect(page.getByRole('option')).toHaveText(['Create "Bu"', 'Bug']);
|
|
87
|
-
await expect.poll(async () => politeSince(page, 0)).
|
|
88
|
+
await expect.poll(async () => politeSince(page, 0)).toBe('1 result');
|
|
88
89
|
|
|
89
90
|
// Highlight the create row, then type the letter that makes it vanish: the
|
|
90
91
|
// highlight must not be left pointing at a row that no longer exists.
|
|
@@ -102,7 +103,7 @@ test('the create row is announced as it appears and the highlight survives it va
|
|
|
102
103
|
await search.fill('');
|
|
103
104
|
await search.pressSequentially('Urgent');
|
|
104
105
|
await expect(page.getByRole('option')).toHaveText(['Create "Urgent"']);
|
|
105
|
-
await expect.poll(async () => politeSince(page, beforeUrgent)).
|
|
106
|
+
await expect.poll(async () => politeSince(page, beforeUrgent)).toBe('Create "Urgent"');
|
|
106
107
|
|
|
107
108
|
// Enter commits: the caller adds the option, the search clears, and the new
|
|
108
109
|
// label is a real row.
|
|
@@ -324,7 +324,7 @@ export interface MultiSelectorProps<T extends MultiSelectorOptionType = MultiSel
|
|
|
324
324
|
* Not called when nothing is selected — the placeholder shows instead — and
|
|
325
325
|
* not called for triggerDisplay 'badges', which renders Badge elements
|
|
326
326
|
* rather than text.
|
|
327
|
-
* @default
|
|
327
|
+
* @default the translated `@astryx.multiSelector.selectedCount` message ("2 selected") for 'count', "A, B, C, +N" for 'labels'
|
|
328
328
|
*/
|
|
329
329
|
formatValue?: (items: MultiSelectorSelectedItem[]) => string;
|
|
330
330
|
/**
|