@astryxdesign/core 0.7.8 → 0.7.9-canary.07992bb
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/AppShell/observeMainOverflow.d.ts.map +1 -1
- package/dist/AppShell/observeMainOverflow.js +9 -6
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +5 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +40 -8
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +61 -21
- package/dist/Calendar/Calendar.d.ts +14 -2
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +63 -74
- package/dist/Calendar/getInitialFocusDate.d.ts +4 -1
- package/dist/Calendar/getInitialFocusDate.d.ts.map +1 -1
- package/dist/Calendar/getInitialFocusDate.js +7 -5
- package/dist/Calendar/hooks/useCalendarDays.d.ts +19 -2
- package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarDays.js +57 -64
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts +28 -3
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarNavigation.js +33 -22
- package/dist/Calendar/styles.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +54 -11
- package/dist/ClickableCard/ClickableCard.d.ts +1 -1
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +5 -1
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +4 -1
- package/dist/DateInput/PickerWheel.d.ts.map +1 -1
- package/dist/DateInput/PickerWheel.js +7 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +4 -1
- package/dist/Dialog/Dialog.d.ts +2 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +11 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +9 -4
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
- package/dist/Field/inputDisabledFocus.d.ts +4 -4
- package/dist/Field/inputStyles.stylex.d.ts +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +16 -2
- package/dist/HoverCard/useHoverCard.d.ts +3 -1
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/Icon/Icon.d.ts +1 -1
- package/dist/InfoTip/InfoTip.d.ts +1 -0
- package/dist/InfoTip/InfoTip.d.ts.map +1 -1
- package/dist/InfoTip/InfoTip.js +1 -0
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +2 -2
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +1 -1
- package/dist/Item/Item.d.ts +2 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +29 -6
- package/dist/Layer/holdEntranceInput.d.ts +24 -0
- package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
- package/dist/Layer/holdEntranceInput.js +65 -0
- package/dist/Layer/inputHold.d.ts +49 -0
- package/dist/Layer/inputHold.d.ts.map +1 -0
- package/dist/Layer/inputHold.js +636 -0
- package/dist/Layer/preserveAnimations.d.ts +1 -5
- package/dist/Layer/preserveAnimations.d.ts.map +1 -1
- package/dist/Layer/preserveAnimations.js +12 -214
- package/dist/Layer/useLayer.d.ts +3 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +64 -4
- package/dist/Layout/LayoutContent.d.ts +3 -1
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +12 -4
- package/dist/Layout/LayoutPanel.d.ts +4 -1
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.js +13 -4
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -0
- package/dist/MetadataList/MetadataList.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts +11 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +39 -1
- package/dist/MoreMenu/MoreMenu.d.ts +5 -3
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.d.ts +4 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +244 -11
- package/dist/Popover/usePopover.d.ts +1 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +12 -5
- package/dist/PowerSearch/PowerSearchBottomSheet.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchBottomSheet.js +4 -2
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +3 -1
- package/dist/PowerSearch/formatFilterValue.d.ts +9 -3
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +14 -11
- package/dist/PowerSearch/formatTokenValue.d.ts +6 -2
- package/dist/PowerSearch/formatTokenValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatTokenValue.js +6 -3
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +22 -4
- package/dist/SelectableCard/SelectableCard.d.ts +1 -1
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +5 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +14 -71
- package/dist/Spinner/index.d.ts +1 -1
- package/dist/Spinner/index.d.ts.map +1 -1
- package/dist/Spinner/spinnerRotor.d.ts +28 -0
- package/dist/Spinner/spinnerRotor.d.ts.map +1 -0
- package/dist/Spinner/spinnerRotor.js +98 -0
- package/dist/Stack/StackItem.d.ts +8 -4
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +17 -4
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +13 -10
- package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -8
- package/dist/Timestamp/formatInstant.d.ts +10 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +13 -27
- package/dist/Timestamp/tooltipEntries.d.ts +5 -3
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.js +6 -4
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +9 -0
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +4 -1
- package/dist/Tokenizer/Tokenizer.d.ts +14 -10
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +189 -89
- package/dist/Tooltip/useTooltip.d.ts +3 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +162 -59
- package/dist/TreeList/TreeListItem.d.ts +2 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -3
- package/dist/astryx.css +45 -18
- package/dist/gestures/GestureHost.d.ts +2 -2
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +21 -6
- package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +15 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/nativeScroll.d.ts +3 -6
- package/dist/gestures/nativeScroll.d.ts.map +1 -1
- package/dist/gestures/nativeScroll.js +7 -52
- package/dist/gestures/wheelSegmenter.d.ts +68 -1
- package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
- package/dist/gestures/wheelSegmenter.js +199 -10
- package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
- package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
- package/dist/hooks/StackItemScrollRegion.js +40 -0
- package/dist/hooks/menuPressGesture.d.ts +133 -21
- package/dist/hooks/menuPressGesture.d.ts.map +1 -1
- package/dist/hooks/menuPressGesture.js +155 -30
- package/dist/hooks/menuPressValues.d.ts +16 -0
- package/dist/hooks/menuPressValues.d.ts.map +1 -0
- package/dist/hooks/menuPressValues.js +18 -0
- package/dist/hooks/useClickableContainer.d.ts +27 -5
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +41 -5
- package/dist/hooks/useFocusTrap.d.ts +10 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +225 -132
- package/dist/hooks/useMenuPress.d.ts +34 -1
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +93 -5
- package/dist/hooks/usePressFeedback.d.ts +6 -6
- package/dist/hooks/usePressFeedback.js +6 -6
- package/dist/hooks/useScrollRegionProps.d.ts +35 -0
- package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
- package/dist/hooks/useScrollRegionProps.js +51 -0
- package/dist/i18n/InternationalizationContext.d.ts +6 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.d.ts +21 -3
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +8 -3
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +1 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +1 -0
- package/dist/i18n/index.d.ts +2 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +1 -0
- package/dist/i18n/useCalendarSystem.d.ts +19 -0
- package/dist/i18n/useCalendarSystem.d.ts.map +1 -0
- package/dist/i18n/useCalendarSystem.js +61 -0
- package/dist/internal/spinner-rotor.d.ts +16 -0
- package/dist/internal/spinner-rotor.d.ts.map +1 -0
- package/dist/internal/spinner-rotor.js +16 -0
- package/dist/internal/touch.d.ts +14 -1
- package/dist/internal/touch.d.ts.map +1 -1
- package/dist/internal/touch.js +20 -2
- package/dist/motion/carryAnimations.d.ts +58 -0
- package/dist/motion/carryAnimations.d.ts.map +1 -0
- package/dist/motion/carryAnimations.js +305 -0
- package/dist/motion/transientCopy.d.ts +4 -2
- package/dist/motion/transientCopy.d.ts.map +1 -1
- package/dist/motion/transientCopy.js +34 -5
- package/dist/motion/uikit/gestures.d.ts +41 -0
- package/dist/motion/uikit/gestures.d.ts.map +1 -1
- package/dist/motion/uikit/gestures.js +25 -0
- package/dist/motion/uikit/index.d.ts +1 -1
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +1 -1
- package/dist/motion/uikit/timing.d.ts +14 -10
- package/dist/motion/uikit/timing.d.ts.map +1 -1
- package/dist/motion/uikit/timing.js +7 -5
- package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
- package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
- package/dist/privateAttributes/press.stylex.d.ts +139 -0
- package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/press.stylex.js +97 -0
- package/dist/theme/themeMotion.d.ts +3 -2
- package/dist/theme/themeMotion.d.ts.map +1 -1
- package/dist/theme/themeMotion.js +3 -2
- package/dist/theme/tokens.stylex.d.ts +2 -2
- package/dist/theme/tokens.stylex.js +1 -1
- package/dist/utils/calendarSystem.d.ts +114 -0
- package/dist/utils/calendarSystem.d.ts.map +1 -0
- package/dist/utils/calendarSystem.js +386 -0
- package/dist/utils/flatTree.d.ts +6 -3
- package/dist/utils/flatTree.d.ts.map +1 -1
- package/dist/utils/flatTree.js +13 -3
- package/dist/utils/hitArea.d.ts.map +1 -1
- package/dist/utils/hitArea.js +82 -5
- package/dist/utils/inputStream.d.ts +14 -1
- package/dist/utils/inputStream.d.ts.map +1 -1
- package/dist/utils/inputStream.js +40 -9
- package/dist/utils/interactionOverlay.stylex.d.ts +5 -9
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +29 -31
- package/dist/utils/plainDate.d.ts +23 -7
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +57 -18
- package/dist/utils/pressFeedback.d.ts +10 -2
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +40 -15
- package/dist/utils/pressGesture.d.ts +12 -6
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +26 -8
- package/dist/utils/scrollView.d.ts +25 -0
- package/dist/utils/scrollView.d.ts.map +1 -0
- package/dist/utils/scrollView.js +108 -0
- package/dist/utils/selectionLock.d.ts.map +1 -1
- package/dist/utils/selectionLock.js +1 -10
- package/dist/utils/touchHitArea.stylex.d.ts +35 -0
- package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
- package/dist/utils/touchHitArea.stylex.js +32 -0
- package/dist/utils/triggerFocus.d.ts +5 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -1
- package/dist/utils/triggerFocus.js +9 -2
- package/locales/en.json +4 -0
- package/locales/pseudo.json +3 -0
- package/package.json +10 -4
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/BottomSheet/BottomSheet.tsx +5 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
- package/src/BottomSheet/useSheetGestures.ts +83 -20
- package/src/Calendar/Calendar.doc.mjs +76 -6
- package/src/Calendar/Calendar.tsx +123 -104
- package/src/Calendar/getInitialFocusDate.ts +22 -8
- package/src/Calendar/hooks/useCalendarDays.ts +89 -63
- package/src/Calendar/hooks/useCalendarNavigation.ts +68 -26
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -2
- package/src/CheckboxInput/CheckboxInput.tsx +71 -9
- package/src/ClickableCard/ClickableCard.tsx +8 -1
- package/src/DateInput/DateInput.tsx +2 -0
- package/src/DateInput/PickerWheel.tsx +7 -2
- package/src/DateRangeInput/DateRangeInput.tsx +3 -1
- package/src/DateTimeInput/DateTimeInput.tsx +2 -0
- package/src/Dialog/Dialog.doc.mjs +1 -1
- package/src/Dialog/Dialog.tsx +12 -1
- package/src/Drawer/Drawer.doc.mjs +1 -1
- package/src/Drawer/useDrawerDialogPresence.ts +9 -2
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
- package/src/DropdownMenu/DropdownMenu.tsx +29 -5
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
- package/src/FileInput/FileInput.tsx +16 -2
- package/src/HoverCard/useHoverCard.tsx +3 -1
- package/src/InfoTip/InfoTip.doc.mjs +26 -2
- package/src/InfoTip/InfoTip.tsx +1 -0
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Item/Item.tsx +51 -9
- package/src/Layer/holdEntranceInput.ts +84 -0
- package/src/Layer/inputHold.ts +734 -0
- package/src/Layer/preserveAnimations.ts +12 -275
- package/src/Layer/useLayer.tsx +77 -4
- package/src/Layout/LayoutContent.doc.mjs +6 -3
- package/src/Layout/LayoutContent.tsx +10 -4
- package/src/Layout/LayoutPanel.doc.mjs +6 -3
- package/src/Layout/LayoutPanel.tsx +11 -4
- package/src/Lightbox/Lightbox.tsx +4 -0
- package/src/MetadataList/MetadataList.tsx +1 -1
- package/src/MobileNav/MobileNav.doc.mjs +3 -3
- package/src/MobileNav/MobileNav.tsx +39 -1
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
- package/src/MoreMenu/MoreMenu.tsx +5 -3
- package/src/NumberInput/NumberInput.doc.mjs +1 -1
- package/src/NumberInput/NumberInput.tsx +259 -11
- package/src/Popover/usePopover.tsx +1 -0
- package/src/PowerSearch/PowerSearch.doc.mjs +3 -3
- package/src/PowerSearch/PowerSearch.tsx +20 -3
- package/src/PowerSearch/PowerSearchBottomSheet.tsx +4 -1
- package/src/PowerSearch/PowerSearchToken.tsx +3 -0
- package/src/PowerSearch/formatFilterValue.ts +21 -11
- package/src/PowerSearch/formatTokenValue.ts +7 -1
- package/src/RadioList/RadioListItem.doc.mjs +3 -2
- package/src/RadioList/RadioListItem.tsx +25 -7
- package/src/SelectableCard/SelectableCard.tsx +8 -1
- package/src/Spinner/Spinner.tsx +7 -89
- package/src/Spinner/index.ts +1 -5
- package/src/Spinner/spinnerRotor.ts +113 -0
- package/src/Stack/Stack.doc.mjs +1 -1
- package/src/Stack/StackItem.tsx +27 -13
- package/src/Switch/Switch.tsx +7 -6
- package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
- package/src/Timestamp/Timestamp.doc.mjs +3 -3
- package/src/Timestamp/Timestamp.tsx +13 -8
- package/src/Timestamp/formatInstant.ts +49 -28
- package/src/Timestamp/tooltipEntries.ts +7 -3
- package/src/Token/Token.tsx +18 -1
- package/src/Token/TokenLink.tsx +7 -1
- package/src/Tokenizer/Tokenizer.doc.mjs +3 -3
- package/src/Tokenizer/Tokenizer.tsx +252 -115
- package/src/Tooltip/useTooltip.tsx +178 -80
- package/src/TreeList/TreeListItem.tsx +36 -2
- package/src/gestures/GestureHost.ts +21 -5
- package/src/gestures/PanGestureRecognizer.ts +19 -2
- package/src/gestures/README.md +14 -5
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
- package/src/gestures/nativeScroll.ts +12 -68
- package/src/gestures/wheelSegmenter.ts +243 -10
- package/src/hooks/StackItemScrollRegion.tsx +57 -0
- package/src/hooks/menuPressGesture.ts +244 -38
- package/src/hooks/menuPressValues.ts +18 -0
- package/src/hooks/useClickableContainer.doc.mjs +8 -2
- package/src/hooks/useClickableContainer.ts +72 -6
- package/src/hooks/useFocusTrap.ts +268 -151
- package/src/hooks/useMenuPress.ts +118 -11
- package/src/hooks/usePressFeedback.doc.mjs +3 -3
- package/src/hooks/usePressFeedback.ts +6 -6
- package/src/hooks/useScrollRegionProps.ts +76 -0
- package/src/i18n/InternationalizationContext.ts +6 -0
- package/src/i18n/InternationalizationProvider.doc.mjs +29 -1
- package/src/i18n/InternationalizationProvider.tsx +33 -3
- package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
- package/src/i18n/generated-locales/en.generated.ts +1 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
- package/src/i18n/index.ts +2 -0
- package/src/i18n/useCalendarSystem.ts +95 -0
- package/src/internal/spinner-rotor.ts +20 -0
- package/src/internal/touch.ts +34 -1
- package/src/motion/MEASUREMENTS.md +11 -0
- package/src/motion/carryAnimations.ts +389 -0
- package/src/motion/transientCopy.ts +45 -5
- package/src/motion/uikit/gestures.ts +22 -0
- package/src/motion/uikit/index.ts +1 -0
- package/src/motion/uikit/timing.ts +7 -5
- package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
- package/src/privateAttributes/press.stylex.ts +243 -0
- package/src/theme/themeMotion.ts +3 -2
- package/src/theme/tokens.stylex.ts +1 -1
- package/src/utils/calendarSystem.ts +548 -0
- package/src/utils/flatTree.ts +15 -3
- package/src/utils/hitArea.ts +107 -5
- package/src/utils/inputStream.ts +47 -10
- package/src/utils/interactionOverlay.stylex.ts +19 -22
- package/src/utils/plainDate.ts +84 -19
- package/src/utils/pressFeedback.ts +46 -14
- package/src/utils/pressGesture.ts +35 -9
- package/src/utils/scrollView.ts +135 -0
- package/src/utils/selectionLock.ts +5 -10
- package/src/utils/touchHitArea.stylex.ts +41 -0
- package/src/utils/triggerFocus.ts +17 -4
|
@@ -11,189 +11,23 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Taking an element out of rendering cancels every CSS animation and
|
|
13
13
|
* transition of it and its subtree. When it returns, the browser creates the
|
|
14
|
-
* animations again from the stylesheet, at their start
|
|
15
|
-
*
|
|
16
|
-
* reads every animation's state first
|
|
17
|
-
* CSS animation that state and resumes
|
|
18
|
-
* script animation at the same point.
|
|
19
|
-
*
|
|
20
|
-
* The
|
|
21
|
-
*
|
|
22
|
-
* chains, every field of the effect's timing, and its keyframes. Only values
|
|
23
|
-
* that differ from the recreated animation's are written, so a value the
|
|
24
|
-
* stylesheet controls stays under its control. A few members are not plain
|
|
25
|
-
* state and are handled in their own step (`ORDERED`); the rest need no
|
|
26
|
-
* handling (`DERIVED`). What cannot be carried over is the Animation and
|
|
27
|
-
* effect objects themselves: the old ones are idle, their `addEventListener`
|
|
28
|
-
* listeners and `finished`/`ready` promises stay with them, and the browser
|
|
29
|
-
* fires `animationcancel`/`transitioncancel` for them and `animationstart`
|
|
14
|
+
* animations again from the stylesheet, at their start. It starts no
|
|
15
|
+
* transition but one from `@starting-style`, and script-created animations
|
|
16
|
+
* are untouched. `preserveAnimations` reads every animation's state first.
|
|
17
|
+
* Afterwards it gives each recreated CSS animation that state, and resumes
|
|
18
|
+
* each cancelled transition with a script animation at the same point. Any
|
|
19
|
+
* other animation the return started is finished, unless it never ends
|
|
20
|
+
* (motion/carryAnimations.ts). The browser fires
|
|
21
|
+
* `animationcancel`/`transitioncancel` for the old ones and `animationstart`
|
|
30
22
|
* for the new ones.
|
|
31
23
|
*/
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
* Animation members written in a fixed order rather than generically: the
|
|
35
|
-
* timeline before the range that is measured on it, the rate before the
|
|
36
|
-
* time, and the start time (or, for a paused animation, the current time)
|
|
37
|
-
* last, once the play state is set. `effect` is not
|
|
38
|
-
* replaced, because a CSS animation whose effect script replaces leaves the
|
|
39
|
-
* stylesheet's control; its state is copied onto the new effect instead.
|
|
40
|
-
*/
|
|
41
|
-
const ORDERED = new Set(['effect', 'timeline', 'rangeStart', 'rangeEnd', 'playbackRate', 'startTime', 'currentTime']);
|
|
42
|
-
/** Every accessor with a setter on `object`'s prototype chain. */
|
|
43
|
-
function writableAccessors(object) {
|
|
44
|
-
const names = new Set();
|
|
45
|
-
for (let proto = Object.getPrototypeOf(object); proto != null && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) {
|
|
46
|
-
for (const [name, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(proto))) {
|
|
47
|
-
if (descriptor.set != null) {
|
|
48
|
-
names.add(name);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return [...names];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* A textual form of a value that is compared by content rather than by
|
|
57
|
-
* identity: a CSS numeric value (as in a timeline range offset) through its
|
|
58
|
-
* serialization, a plain object (a range) through its members. Anything else
|
|
59
|
-
* is compared by identity (`null`).
|
|
60
|
-
*/
|
|
61
|
-
function contentOf(value) {
|
|
62
|
-
if (typeof CSSNumericValue !== 'undefined' && value instanceof CSSNumericValue) {
|
|
63
|
-
return value.toString();
|
|
64
|
-
}
|
|
65
|
-
if (value != null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {
|
|
66
|
-
return Object.entries(value).map(([key, inner]) => `${key}:${contentOf(inner) ?? String(inner)}`).join(';');
|
|
67
|
-
}
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
function differs(a, b) {
|
|
71
|
-
if (a === b) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
const textA = contentOf(a);
|
|
75
|
-
return textA == null || textA !== contentOf(b);
|
|
76
|
-
}
|
|
77
|
-
function save(animation) {
|
|
78
|
-
const effect = animation.effect;
|
|
79
|
-
const values = {};
|
|
80
|
-
for (const name of writableAccessors(animation)) {
|
|
81
|
-
values[name] = animation[name];
|
|
82
|
-
}
|
|
83
|
-
const effectValues = {};
|
|
84
|
-
if (effect != null) {
|
|
85
|
-
for (const name of writableAccessors(effect)) {
|
|
86
|
-
effectValues[name] = effect[name];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
animation,
|
|
91
|
-
name: animation.animationName ?? '',
|
|
92
|
-
target: effect?.target ?? null,
|
|
93
|
-
pseudoElement: effect?.pseudoElement ?? null,
|
|
94
|
-
values,
|
|
95
|
-
effectValues,
|
|
96
|
-
timing: effect?.getTiming() ?? null,
|
|
97
|
-
keyframes: effect?.getKeyframes() ?? null,
|
|
98
|
-
playState: animation.playState,
|
|
99
|
-
replaceState: animation.replaceState
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function write(object, name, value) {
|
|
103
|
-
object[name] = value;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Give `next` the effect state `saved` had: every writable member. */
|
|
107
|
-
function restoreEffect(next, saved) {
|
|
108
|
-
for (const name of writableAccessors(next)) {
|
|
109
|
-
if (name in saved.effectValues && differs(saved.effectValues[name], next[name])) {
|
|
110
|
-
write(next, name, saved.effectValues[name]);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (saved.timing != null) {
|
|
114
|
-
const timing = next.getTiming();
|
|
115
|
-
const changed = {};
|
|
116
|
-
for (const [field, value] of Object.entries(saved.timing)) {
|
|
117
|
-
if (differs(value, timing[field])) {
|
|
118
|
-
changed[field] = value;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (Object.keys(changed).length > 0) {
|
|
122
|
-
next.updateTiming(changed);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (saved.keyframes != null && JSON.stringify(saved.keyframes) !== JSON.stringify(next.getKeyframes())) {
|
|
126
|
-
next.setKeyframes(saved.keyframes);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** Give `next` the state `saved` had, member by member. */
|
|
131
|
-
function restore(next, saved) {
|
|
132
|
-
const effect = next.effect;
|
|
133
|
-
if (effect != null) {
|
|
134
|
-
restoreEffect(effect, saved);
|
|
135
|
-
}
|
|
136
|
-
const current = next;
|
|
137
|
-
for (const name of ['timeline', 'rangeStart', 'rangeEnd']) {
|
|
138
|
-
if (name in saved.values && differs(saved.values[name], current[name])) {
|
|
139
|
-
write(next, name, saved.values[name]);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
for (const name of writableAccessors(next)) {
|
|
143
|
-
if (!ORDERED.has(name) && name in saved.values && differs(saved.values[name], current[name])) {
|
|
144
|
-
write(next, name, saved.values[name]);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (saved.replaceState === 'persisted' && next.replaceState !== 'persisted') {
|
|
148
|
-
next.persist();
|
|
149
|
-
}
|
|
150
|
-
const rate = saved.values.playbackRate;
|
|
151
|
-
if (typeof rate === 'number' && rate !== next.playbackRate) {
|
|
152
|
-
next.playbackRate = rate;
|
|
153
|
-
}
|
|
154
|
-
if (saved.playState === 'paused' && next.playState !== 'paused') {
|
|
155
|
-
next.pause();
|
|
156
|
-
} else if (saved.playState !== 'paused' && next.playState === 'paused') {
|
|
157
|
-
next.play();
|
|
158
|
-
}
|
|
159
|
-
// A running animation is anchored to its timeline by its start time, which
|
|
160
|
-
// carries its current time on exactly. A paused one has none and keeps its
|
|
161
|
-
// current time. A finished one holds its end: finishing it again holds the
|
|
162
|
-
// same time, though its start time is then counted from now, since script
|
|
163
|
-
// cannot set a start time and a held time together.
|
|
164
|
-
const start = saved.values.startTime;
|
|
165
|
-
const time = saved.values.currentTime;
|
|
166
|
-
if (saved.playState === 'finished') {
|
|
167
|
-
next.finish();
|
|
168
|
-
} else if (start != null) {
|
|
169
|
-
next.startTime = start;
|
|
170
|
-
} else if (time != null) {
|
|
171
|
-
next.currentTime = time;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/** Resume a cancelled CSS transition with a script animation in its state. */
|
|
176
|
-
function resumeTransition(saved) {
|
|
177
|
-
if (saved.target == null || saved.keyframes == null) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const replacement = saved.target.animate(saved.keyframes, {
|
|
181
|
-
pseudoElement: saved.pseudoElement ?? undefined
|
|
182
|
-
});
|
|
183
|
-
restore(replacement, saved);
|
|
184
|
-
}
|
|
185
|
-
function isTransition(animation) {
|
|
186
|
-
return typeof CSSTransition !== 'undefined' && animation instanceof CSSTransition;
|
|
187
|
-
}
|
|
25
|
+
import { restoreAnimations, saveAnimation } from "../motion/carryAnimations.js";
|
|
188
26
|
|
|
189
27
|
/**
|
|
190
28
|
* Run `reset`, which takes `root` out of rendering and back, and put every
|
|
191
29
|
* CSS animation and transition of `root` and its subtree back in the state it
|
|
192
|
-
* was in before.
|
|
193
|
-
* element, pseudo-element and name, in order, and then by name alone (an
|
|
194
|
-
* effect script moved to another element or pseudo-element); a recreated
|
|
195
|
-
* animation with no predecessor (an entry animation that had already played
|
|
196
|
-
* and been dropped) is finished.
|
|
30
|
+
* was in before.
|
|
197
31
|
*/
|
|
198
32
|
export function preserveAnimations(root, reset) {
|
|
199
33
|
if (typeof root.getAnimations !== 'function') {
|
|
@@ -203,43 +37,7 @@ export function preserveAnimations(root, reset) {
|
|
|
203
37
|
const before = root.getAnimations({
|
|
204
38
|
subtree: true
|
|
205
39
|
});
|
|
206
|
-
const saved = before.map(
|
|
40
|
+
const saved = before.map(saveAnimation);
|
|
207
41
|
reset();
|
|
208
|
-
|
|
209
|
-
subtree: true
|
|
210
|
-
});
|
|
211
|
-
const current = new Set(after);
|
|
212
|
-
const survivors = new Set(before);
|
|
213
|
-
const cancelled = [];
|
|
214
|
-
for (const state of saved) {
|
|
215
|
-
if (current.has(state.animation)) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
if (isTransition(state.animation)) {
|
|
219
|
-
resumeTransition(state);
|
|
220
|
-
} else {
|
|
221
|
-
cancelled.push(state);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
const recreated = after.filter(animation => !survivors.has(animation));
|
|
225
|
-
const unmatched = [];
|
|
226
|
-
for (const animation of recreated) {
|
|
227
|
-
const effect = animation.effect;
|
|
228
|
-
const name = animation.animationName ?? '';
|
|
229
|
-
const index = cancelled.findIndex(state => state.name === name && state.target === (effect?.target ?? null) && state.pseudoElement === (effect?.pseudoElement ?? null));
|
|
230
|
-
if (index === -1) {
|
|
231
|
-
unmatched.push(animation);
|
|
232
|
-
} else {
|
|
233
|
-
restore(animation, cancelled.splice(index, 1)[0]);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
for (const animation of unmatched) {
|
|
237
|
-
const name = animation.animationName ?? '';
|
|
238
|
-
const index = cancelled.findIndex(state => state.name === name);
|
|
239
|
-
if (index === -1) {
|
|
240
|
-
animation.finish();
|
|
241
|
-
} else {
|
|
242
|
-
restore(animation, cancelled.splice(index, 1)[0]);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
42
|
+
restoreAnimations(root, saved, new Set(before));
|
|
245
43
|
}
|
package/dist/Layer/useLayer.d.ts
CHANGED
|
@@ -194,12 +194,14 @@ export interface FixedLayerOptions extends BaseLayerOptions {
|
|
|
194
194
|
export interface ContextLayerReturn {
|
|
195
195
|
/**
|
|
196
196
|
* Ref to attach to trigger element.
|
|
197
|
-
*
|
|
197
|
+
* While the layer is shown, and until its exit animation ends, the trigger
|
|
198
|
+
* carries the layer's CSS anchor name.
|
|
198
199
|
*/
|
|
199
200
|
ref: RefCallback<HTMLElement>;
|
|
200
201
|
/**
|
|
201
202
|
* The CSS anchor name to use for positioning.
|
|
202
203
|
* Use this when you need to set anchorName manually (e.g., display:contents wrapper).
|
|
204
|
+
* Set it only while the layer is shown or its exit animation runs.
|
|
203
205
|
*/
|
|
204
206
|
anchorId: string;
|
|
205
207
|
/**
|
|
@@ -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;AAuInD;;GAEG;AACH,UAAU,kBAAkB;IAC1B,aAAa,EAAE,KAAK,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACtD;;;OAGG;IACH,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;CACtD;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAClC;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACpD;;OAEG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;GAEG;AACH,UAAU,gBAAgB;IACxB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,IAAI,EAAE,SAAS,CAAC;IAChB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACzD,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC
|
|
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
|
@@ -256,6 +256,20 @@ function untransform(rect, layer, style) {
|
|
|
256
256
|
return new DOMRect(left, top, width, height);
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
+
/**
|
|
260
|
+
* The finite animations still running on `layer` and its content. A layer
|
|
261
|
+
* that fades out keeps running them after the browser hides it, and it stays
|
|
262
|
+
* placed against its anchor until they end.
|
|
263
|
+
*/
|
|
264
|
+
function exitAnimations(layer) {
|
|
265
|
+
if (layer == null || typeof layer.getAnimations !== 'function') {
|
|
266
|
+
return [];
|
|
267
|
+
}
|
|
268
|
+
return layer.getAnimations({
|
|
269
|
+
subtree: true
|
|
270
|
+
}).filter(animation => animation.playState === 'running' && animation.effect?.getComputedTiming().endTime !== Infinity);
|
|
271
|
+
}
|
|
272
|
+
|
|
259
273
|
/**
|
|
260
274
|
* The layer's box where its position option put it, without the transform an
|
|
261
275
|
* entry animation (or anything else) applies to it: a Tooltip enters from a
|
|
@@ -837,6 +851,34 @@ function useLayerImplementation(options) {
|
|
|
837
851
|
// stale-closure reads of the previous isOpen value.
|
|
838
852
|
const isOpenRef = useRef(false);
|
|
839
853
|
|
|
854
|
+
// The exit of the layer that closed last, while it still paints. Its
|
|
855
|
+
// trigger stays an anchor until it ends, also when the trigger attaches
|
|
856
|
+
// again during it. Null once it has ended.
|
|
857
|
+
const exitRef = useRef(null);
|
|
858
|
+
|
|
859
|
+
// A closed trigger is no anchor, once the layer stops painting. A show
|
|
860
|
+
// during the exit keeps the name, and so does a later exit.
|
|
861
|
+
const releaseAnchor = useCallback(layer => {
|
|
862
|
+
const exit = {};
|
|
863
|
+
exitRef.current = exit;
|
|
864
|
+
const release = () => {
|
|
865
|
+
if (exitRef.current !== exit) {
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
exitRef.current = null;
|
|
869
|
+
const trigger = triggerRef.current;
|
|
870
|
+
if (!isOpenRef.current && trigger != null) {
|
|
871
|
+
removeAnchorName(trigger, anchorId);
|
|
872
|
+
}
|
|
873
|
+
};
|
|
874
|
+
const running = exitAnimations(layer);
|
|
875
|
+
if (running.length === 0) {
|
|
876
|
+
release();
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
void Promise.all(running.map(async animation => animation.finished.catch(() => undefined))).then(release);
|
|
880
|
+
}, [anchorId]);
|
|
881
|
+
|
|
840
882
|
// The gesture during which the browser last closed this layer on its own.
|
|
841
883
|
// Read through wasJustDismissed by triggers deciding whether a click is
|
|
842
884
|
// theirs to act on.
|
|
@@ -1006,6 +1048,12 @@ function useLayerImplementation(options) {
|
|
|
1006
1048
|
popover.removeAttribute(LAYER_CLEARS_ANCHOR_ATTRIBUTE);
|
|
1007
1049
|
popover.removeAttribute(LAYER_SCROLLS_ATTRIBUTE);
|
|
1008
1050
|
applyDeferredWritingContext(popover);
|
|
1051
|
+
// The trigger takes the layer's anchor name in the task that shows the
|
|
1052
|
+
// layer, so the layer's first frame is placed against it.
|
|
1053
|
+
const anchor = triggerRef.current;
|
|
1054
|
+
if (anchor != null) {
|
|
1055
|
+
addAnchorName(anchor, anchorId);
|
|
1056
|
+
}
|
|
1009
1057
|
// A hide the browser runs itself (an Escape its close watcher answers)
|
|
1010
1058
|
// is counted too, from `beforetoggle` until the element's `toggle`, a
|
|
1011
1059
|
// task after the hide has returned. The show is asked of the browser
|
|
@@ -1013,6 +1061,11 @@ function useLayerImplementation(options) {
|
|
|
1013
1061
|
// light dismiss at pointerup, then this show at the click); only a show
|
|
1014
1062
|
// it refuses replays once the hide's count has ended.
|
|
1015
1063
|
if (!showPopoverElement(popover)) {
|
|
1064
|
+
// The replay anchors the trigger again; until then it is closed. An
|
|
1065
|
+
// exit still running keeps the name.
|
|
1066
|
+
if (anchor != null && exitRef.current == null) {
|
|
1067
|
+
removeAnchorName(anchor, anchorId);
|
|
1068
|
+
}
|
|
1016
1069
|
replayWhenSettled();
|
|
1017
1070
|
return;
|
|
1018
1071
|
}
|
|
@@ -1023,7 +1076,7 @@ function useLayerImplementation(options) {
|
|
|
1023
1076
|
setIsOpen(true);
|
|
1024
1077
|
onShow?.();
|
|
1025
1078
|
}
|
|
1026
|
-
}, [onShow, keepsAnchorClear, requestContextMount, applyDeferredWritingContext, showPopoverElement, isCurrentContextPopover, wasJustDismissed]);
|
|
1079
|
+
}, [anchorId, onShow, keepsAnchorClear, requestContextMount, applyDeferredWritingContext, showPopoverElement, isCurrentContextPopover, wasJustDismissed]);
|
|
1027
1080
|
const hide = useCallback(() => {
|
|
1028
1081
|
pendingShowRef.current = false;
|
|
1029
1082
|
if (isOpenRef.current) {
|
|
@@ -1051,8 +1104,9 @@ function useLayerImplementation(options) {
|
|
|
1051
1104
|
setIsOpen(false);
|
|
1052
1105
|
onHide?.();
|
|
1053
1106
|
}
|
|
1107
|
+
releaseAnchor(popoverRef.current);
|
|
1054
1108
|
clearContextMount();
|
|
1055
|
-
}, [onHide, clearContextMount]);
|
|
1109
|
+
}, [onHide, clearContextMount, releaseAnchor]);
|
|
1056
1110
|
|
|
1057
1111
|
// A deferred show() replays through a ref so the queued closure reaches the
|
|
1058
1112
|
// current callback rather than the one captured when it was queued.
|
|
@@ -1072,7 +1126,12 @@ function useLayerImplementation(options) {
|
|
|
1072
1126
|
if (triggerRef.current && triggerRef.current !== el) {
|
|
1073
1127
|
removeAnchorName(triggerRef.current, anchorId);
|
|
1074
1128
|
}
|
|
1075
|
-
|
|
1129
|
+
|
|
1130
|
+
// Only a shown layer's trigger is an anchor. WebKit's Linux ports run the
|
|
1131
|
+
// transform animation of an element that holds an anchor on the main
|
|
1132
|
+
// thread. A busy task would then freeze a surface that moves around a
|
|
1133
|
+
// closed trigger.
|
|
1134
|
+
if (el && (isOpenRef.current || exitRef.current != null)) {
|
|
1076
1135
|
addAnchorName(el, anchorId);
|
|
1077
1136
|
}
|
|
1078
1137
|
const previous = triggerRef.current;
|
|
@@ -1171,11 +1230,12 @@ function useLayerImplementation(options) {
|
|
|
1171
1230
|
openedPopoverRef.current = null;
|
|
1172
1231
|
isOpenRef.current = false;
|
|
1173
1232
|
rememberDismissal(e.currentTarget?.ownerDocument ?? document);
|
|
1233
|
+
releaseAnchor(e.currentTarget);
|
|
1174
1234
|
setIsOpen(false);
|
|
1175
1235
|
onHide?.();
|
|
1176
1236
|
clearContextMount();
|
|
1177
1237
|
}
|
|
1178
|
-
}, [onHide, clearContextMount, rememberDismissal]);
|
|
1238
|
+
}, [onHide, clearContextMount, rememberDismissal, releaseAnchor]);
|
|
1179
1239
|
|
|
1180
1240
|
// Ref callback for popover element — sets up the `toggle` listener.
|
|
1181
1241
|
// Tracks the element + handler currently bound so the listener is removed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file LayoutContent.tsx
|
|
3
|
-
* @input Uses React StyleX, LayoutSlotsContext
|
|
3
|
+
* @input Uses React StyleX, LayoutSlotsContext, useScrollRegionProps
|
|
4
4
|
* @output Exports LayoutContent component and LayoutContentProps
|
|
5
5
|
* @position Scrollable main content area for Layout. Wraps the primary body content
|
|
6
6
|
* with automatic scroll containment and context-aware padding.
|
|
@@ -35,6 +35,8 @@ export interface LayoutContentProps extends BaseProps<HTMLDivElement> {
|
|
|
35
35
|
/**
|
|
36
36
|
* Accessible label for the landmark.
|
|
37
37
|
* Required when role is set and multiple landmarks of the same type exist.
|
|
38
|
+
* While the content scrolls, it also names the scrolling region, which
|
|
39
|
+
* otherwise takes a translated "Content".
|
|
38
40
|
*/
|
|
39
41
|
label?: string;
|
|
40
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutContent.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutContent.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutContent.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutContent.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAqFhD,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAAmB,EACnB,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAoDpB;yBA/De,aAAa"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file LayoutContent.tsx
|
|
7
|
-
* @input Uses React StyleX, LayoutSlotsContext
|
|
7
|
+
* @input Uses React StyleX, LayoutSlotsContext, useScrollRegionProps
|
|
8
8
|
* @output Exports LayoutContent component and LayoutContentProps
|
|
9
9
|
* @position Scrollable main content area for Layout. Wraps the primary body content
|
|
10
10
|
* with automatic scroll containment and context-aware padding.
|
|
@@ -19,6 +19,8 @@ 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 { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
23
|
+
import { useScrollRegionProps } from "../hooks/useScrollRegionProps.js";
|
|
22
24
|
import { mergeProps } from "../utils/mergeProps.js";
|
|
23
25
|
import { themeProps } from "../utils/themeProps.js";
|
|
24
26
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
@@ -146,10 +148,16 @@ export function LayoutContent({
|
|
|
146
148
|
hasEnd
|
|
147
149
|
} = use(LayoutSlotsContext);
|
|
148
150
|
const isZeroPadding = padding === 0;
|
|
151
|
+
const region = useScrollRegionProps({
|
|
152
|
+
isScrollable,
|
|
153
|
+
role,
|
|
154
|
+
label
|
|
155
|
+
});
|
|
156
|
+
const mergedRef = useMergedRefs(ref, region.ref);
|
|
149
157
|
return /*#__PURE__*/_jsx("div", {
|
|
150
|
-
ref:
|
|
151
|
-
role: role,
|
|
152
|
-
"aria-label": label,
|
|
158
|
+
ref: mergedRef,
|
|
159
|
+
role: region.role,
|
|
160
|
+
"aria-label": region['aria-label'],
|
|
153
161
|
...mergeProps(themeProps('layout-content'), stylex.props(styles.content,
|
|
154
162
|
// Outer padding on container edges (unless content is full bleed)
|
|
155
163
|
!hasStart && !isZeroPadding && padding == null && styles.noStart, !hasEnd && !isZeroPadding && padding == null && styles.noEnd, !hasHeader && !isZeroPadding && padding == null && styles.noHeader, !hasFooter && !isZeroPadding && padding == null && styles.noFooter, isScrollable && styles.scrollable, isZeroPadding && styles.fullBleed, padding != null && paddingStyles[padding], padding != null && containerPaddingInlineVarStyles[padding], padding != null && containerPaddingBlockStartVarStyles[padding], padding != null && containerPaddingBlockEndVarStyles[padding], !hasStart && !hasEnd && !isZeroPadding && styles.constrainedNoPanelsStart, !hasStart && !hasEnd && !isZeroPadding && styles.constrainedNoPanelsEnd, hasStart && !hasEnd && !isZeroPadding && styles.constrainedSingleStartPanel, !hasStart && hasEnd && !isZeroPadding && styles.constrainedSingleEndPanel, xstyle), className, style),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file LayoutPanel.tsx
|
|
3
|
-
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext
|
|
3
|
+
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext,
|
|
4
|
+
* useScrollRegionProps
|
|
4
5
|
* @output Exports LayoutPanel component and LayoutPanelProps
|
|
5
6
|
* @position Sidebar panel for Layout start/end slots. Use for navigation panels,
|
|
6
7
|
* settings sidebars, detail panels, or any fixed-width side content.
|
|
@@ -47,6 +48,8 @@ export interface LayoutPanelProps extends BaseProps<HTMLDivElement> {
|
|
|
47
48
|
/**
|
|
48
49
|
* Accessible label for the landmark.
|
|
49
50
|
* Required when role is set and multiple landmarks of the same type exist.
|
|
51
|
+
* While the panel scrolls, it also names the scrolling region, which
|
|
52
|
+
* otherwise takes a translated "Content".
|
|
50
53
|
*/
|
|
51
54
|
label?: string;
|
|
52
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutPanel.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutPanel.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"LayoutPanel.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutPanel.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAmF9D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,UAAkB,EAClB,YAAmB,EACnB,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,SAAS,EACT,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAoElB;yBAlFe,WAAW"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file LayoutPanel.tsx
|
|
7
|
-
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext
|
|
7
|
+
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext,
|
|
8
|
+
* useScrollRegionProps
|
|
8
9
|
* @output Exports LayoutPanel component and LayoutPanelProps
|
|
9
10
|
* @position Sidebar panel for Layout start/end slots. Use for navigation panels,
|
|
10
11
|
* settings sidebars, detail panels, or any fixed-width side content.
|
|
@@ -20,6 +21,8 @@ import "../theme/tokens.stylex.js";
|
|
|
20
21
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
21
22
|
import { LayoutAreaContext } from "./LayoutAreaContext.js";
|
|
22
23
|
import { LayoutSlotsContext } from "./LayoutSlotsContext.js";
|
|
24
|
+
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
25
|
+
import { useScrollRegionProps } from "../hooks/useScrollRegionProps.js";
|
|
23
26
|
import { mergeProps } from "../utils/index.js";
|
|
24
27
|
import { themeProps } from "../utils/themeProps.js";
|
|
25
28
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
@@ -160,6 +163,12 @@ export function LayoutPanel({
|
|
|
160
163
|
|
|
161
164
|
// When no divider, collapse spacing for seamless visual flow
|
|
162
165
|
const shouldCollapseSpacing = !hasDivider && !isZeroPadding && padding == null;
|
|
166
|
+
const region = useScrollRegionProps({
|
|
167
|
+
isScrollable,
|
|
168
|
+
role,
|
|
169
|
+
label
|
|
170
|
+
});
|
|
171
|
+
const mergedRef = useMergedRefs(ref, region.ref);
|
|
163
172
|
|
|
164
173
|
// Select divider style based on position
|
|
165
174
|
const dividerStyle = isStartPanel ? styles.dividerEnd : isEndPanel ? styles.dividerStart : null;
|
|
@@ -167,9 +176,9 @@ export function LayoutPanel({
|
|
|
167
176
|
// Select collapse style based on position (collapse the side where divider would be)
|
|
168
177
|
const collapseStyle = isStartPanel ? styles.collapseEnd : isEndPanel ? styles.collapseStart : null;
|
|
169
178
|
return /*#__PURE__*/_jsx("div", {
|
|
170
|
-
ref:
|
|
171
|
-
role: role,
|
|
172
|
-
"aria-label": label,
|
|
179
|
+
ref: mergedRef,
|
|
180
|
+
role: region.role,
|
|
181
|
+
"aria-label": region['aria-label'],
|
|
173
182
|
...mergeProps(themeProps('layout-panel'), stylex.props(styles.panel, dynamicStyles.sizing(effectiveWidth ?? null),
|
|
174
183
|
// Outer padding on container edges (unless component is full bleed)
|
|
175
184
|
isStartPanel && !isZeroPadding && padding == null && styles.startPanel, isEndPanel && !isZeroPadding && padding == null && styles.endPanel, !hasHeader && !isZeroPadding && padding == null && styles.noHeader, !hasFooter && !isZeroPadding && padding == null && styles.noFooter, isScrollable && styles.scrollable, isZeroPadding && styles.fullBleed, padding != null && paddingStyles[padding], padding != null && containerPaddingInlineVarStyles[padding], padding != null && containerPaddingBlockStartVarStyles[padding], padding != null && containerPaddingBlockEndVarStyles[padding], hasDivider && dividerStyle, shouldCollapseSpacing && collapseStyle, xstyle), className, style),
|
|
@@ -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;
|
|
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;AAwB5C;;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,sCA2ef;yBA3fe,QAAQ"}
|
|
@@ -37,6 +37,7 @@ import { ModalAnnounceProvider } from "../hooks/ModalAnnounceProvider.js";
|
|
|
37
37
|
import { overlayPaddingReset } from "../Layout/overlayPaddingReset.stylex.js";
|
|
38
38
|
import { LayerDepthProvider } from "../Layer/LayerDepthContext.js";
|
|
39
39
|
import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
40
|
+
import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
|
|
40
41
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
41
42
|
import { isRtlElement } from "../hooks/isRtlElement.js";
|
|
42
43
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
@@ -218,6 +219,9 @@ export function Lightbox({
|
|
|
218
219
|
const t = useComponentTranslator();
|
|
219
220
|
const dialogRef = useRef(null);
|
|
220
221
|
const mergedDialogRef = useMergedRefs(ref, dialogRef);
|
|
222
|
+
// Native showModal() lets Tab leave for the browser's own UI, so the shared
|
|
223
|
+
// module wraps it.
|
|
224
|
+
useFocusRegionContainment(dialogRef, isOpen);
|
|
221
225
|
const containerRef = useRef(null);
|
|
222
226
|
const imageWrapperRef = useRef(null);
|
|
223
227
|
const triggerElementRef = useRef(null);
|
|
@@ -216,7 +216,7 @@ export function MetadataList({
|
|
|
216
216
|
"aria-expanded": isShowAll,
|
|
217
217
|
onClick: () => setIsShowAll(prev => !prev),
|
|
218
218
|
...{
|
|
219
|
-
className: "xjyslct xjbqb8w xc342km xng3xce x15nmkw0 x1ypdohk x16khyan
|
|
219
|
+
className: "xjyslct xjbqb8w xc342km xng3xce x15nmkw0 x1ypdohk x16khyan xjse4m1 xjm74w1 xw6l6zx x1e4wzip xjb2p0i x1yc453h xqcrz7y"
|
|
220
220
|
},
|
|
221
221
|
children: isShowAll ? t('@astryx.metadataList.showLess') : t('@astryx.metadataList.showMore')
|
|
222
222
|
})]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file MobileNav.tsx
|
|
3
|
-
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX
|
|
3
|
+
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX and
|
|
4
|
+
* the Layer module's entrance hold
|
|
4
5
|
* @output Exports MobileNav component and MobileNavProps
|
|
5
6
|
* @position Core implementation; consumed by index.ts
|
|
6
7
|
*
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
* - /packages/core/src/MobileNav/index.ts (exports if types change)
|
|
35
36
|
* - /packages/core/src/Layer/useLayerDismissal.ts (dismissal stack)
|
|
36
37
|
* - /packages/core/src/hooks/useScrollLock.ts (the page's scroll lock)
|
|
38
|
+
* - /packages/core/src/MobileNav/MobileNavTouchPresentation.test.tsx (touch)
|
|
37
39
|
* - /packages/cli/assets/templates/blocks/components/MobileNav/ (showcase blocks)
|
|
38
40
|
*/
|
|
39
41
|
import { type ReactNode } from 'react';
|
|
@@ -47,6 +49,14 @@ import type { BaseProps } from '../BaseProps.js';
|
|
|
47
49
|
* own scheduled `dialog.close()` has a chance to run (#5701).
|
|
48
50
|
*/
|
|
49
51
|
export declare const MAX_CLOSE_DELAY_MS = 250;
|
|
52
|
+
/**
|
|
53
|
+
* Longest the drawer slides in or out for, in ms. Both run for the theme's
|
|
54
|
+
* `--duration-medium`: 410 ms by default, and at most 545 ms on the default
|
|
55
|
+
* scale (`--duration-medium-max`). The slide-out keeps playing after the
|
|
56
|
+
* dialog closes, while the dialog's `display` transition keeps it rendered.
|
|
57
|
+
* The touch hold on the slide-in ends by this time.
|
|
58
|
+
*/
|
|
59
|
+
export declare const MAX_EXIT_MS = 550;
|
|
50
60
|
/**
|
|
51
61
|
* Shortest duration in a `transition-duration` list, in ms; null if unreadable.
|
|
52
62
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAuBf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0M5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAI/B;;;;;;;;;;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,+BAgShB;yBA/Se,SAAS"}
|