@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
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MobileNav.tsx
|
|
7
|
-
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX
|
|
7
|
+
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX and
|
|
8
|
+
* the Layer module's entrance hold
|
|
8
9
|
* @output Exports MobileNav component and MobileNavProps
|
|
9
10
|
* @position Core implementation; consumed by index.ts
|
|
10
11
|
*
|
|
@@ -38,6 +39,7 @@
|
|
|
38
39
|
* - /packages/core/src/MobileNav/index.ts (exports if types change)
|
|
39
40
|
* - /packages/core/src/Layer/useLayerDismissal.ts (dismissal stack)
|
|
40
41
|
* - /packages/core/src/hooks/useScrollLock.ts (the page's scroll lock)
|
|
42
|
+
* - /packages/core/src/MobileNav/MobileNavTouchPresentation.test.tsx (touch)
|
|
41
43
|
* - /packages/cli/assets/templates/blocks/components/MobileNav/ (showcase blocks)
|
|
42
44
|
*/
|
|
43
45
|
import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
@@ -48,6 +50,7 @@ import { Button } from "../Button/index.js";
|
|
|
48
50
|
import { Icon } from "../Icon/index.js";
|
|
49
51
|
import { Heading } from "../Heading/Heading.js";
|
|
50
52
|
import { useAppShellMobile } from "../AppShell/AppShellMobileContext.js";
|
|
53
|
+
import { holdEntranceInput } from "../Layer/holdEntranceInput.js";
|
|
51
54
|
import { mergeProps, composeEventHandlers } from "../utils/index.js";
|
|
52
55
|
import { layerTextReset } from "../Layer/layerTextReset.stylex.js";
|
|
53
56
|
import { layerStructureReset } from "../Layer/layerStructureReset.stylex.js";
|
|
@@ -60,6 +63,7 @@ import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
|
60
63
|
import { themeProps } from "../utils/themeProps.js";
|
|
61
64
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
62
65
|
import { useScrollLock } from "../hooks/useScrollLock.js";
|
|
66
|
+
import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
|
|
63
67
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
64
68
|
import english from "../i18n/generated-english/MobileNav/MobileNav.generated.js";
|
|
65
69
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -177,6 +181,14 @@ const dynamicStyles = {
|
|
|
177
181
|
* own scheduled `dialog.close()` has a chance to run (#5701).
|
|
178
182
|
*/
|
|
179
183
|
export const MAX_CLOSE_DELAY_MS = 250;
|
|
184
|
+
/**
|
|
185
|
+
* Longest the drawer slides in or out for, in ms. Both run for the theme's
|
|
186
|
+
* `--duration-medium`: 410 ms by default, and at most 545 ms on the default
|
|
187
|
+
* scale (`--duration-medium-max`). The slide-out keeps playing after the
|
|
188
|
+
* dialog closes, while the dialog's `display` transition keeps it rendered.
|
|
189
|
+
* The touch hold on the slide-in ends by this time.
|
|
190
|
+
*/
|
|
191
|
+
export const MAX_EXIT_MS = 550;
|
|
180
192
|
/** Fraction of the hold to close at, so the close never lands on its boundary. */
|
|
181
193
|
const CLOSE_WITHIN_HOLD = 0.6;
|
|
182
194
|
|
|
@@ -317,7 +329,15 @@ export function MobileNav({
|
|
|
317
329
|
}
|
|
318
330
|
}), [onOpenChangeProp, appShellMobile]);
|
|
319
331
|
const dialogRef = useRef(null);
|
|
332
|
+
// Native showModal() lets Tab leave for the browser's own UI, so the shared
|
|
333
|
+
// module wraps it. A closing drawer stops containing as soon as it starts to
|
|
334
|
+
// slide out.
|
|
335
|
+
useFocusRegionContainment(dialogRef, isOpen);
|
|
336
|
+
const drawerRef = useRef(null);
|
|
320
337
|
const closeTimeoutRef = useRef(null);
|
|
338
|
+
// The input hold on the drawer's layer while it slides in under a coarse
|
|
339
|
+
// primary pointer. It is null under a fine one and once the slide-in ends.
|
|
340
|
+
const releaseHoldRef = useRef(null);
|
|
321
341
|
// Element that was focused when the drawer opened; focus goes back to it
|
|
322
342
|
// once the native dialog has closed (see closeAndRestoreFocus).
|
|
323
343
|
const triggerElementRef = useRef(null);
|
|
@@ -376,6 +396,8 @@ export function MobileNav({
|
|
|
376
396
|
return;
|
|
377
397
|
}
|
|
378
398
|
if (isOpen) {
|
|
399
|
+
releaseHoldRef.current?.();
|
|
400
|
+
releaseHoldRef.current = null;
|
|
379
401
|
if (!dialog.open) {
|
|
380
402
|
// Capture the opener before showModal() pulls focus into the top
|
|
381
403
|
// layer. Only on the transition into open: a reopen while the delayed
|
|
@@ -384,7 +406,16 @@ export function MobileNav({
|
|
|
384
406
|
triggerElementRef.current = document.activeElement;
|
|
385
407
|
dialog.showModal();
|
|
386
408
|
}
|
|
409
|
+
// Under a coarse primary pointer, nothing takes a touch until the
|
|
410
|
+
// slide-in ends, at most MAX_EXIT_MS in. A close holds nothing, because
|
|
411
|
+
// only an entrance is held. Under a fine one, nothing is held.
|
|
412
|
+
releaseHoldRef.current = holdEntranceInput(dialog, {
|
|
413
|
+
entrance: drawerRef.current,
|
|
414
|
+
capMs: MAX_EXIT_MS
|
|
415
|
+
});
|
|
387
416
|
} else if (dialog.open) {
|
|
417
|
+
releaseHoldRef.current?.();
|
|
418
|
+
releaseHoldRef.current = null;
|
|
388
419
|
closeTimeoutRef.current = setTimeout(() => {
|
|
389
420
|
closeAndRestoreFocus(dialog, triggerElementRef);
|
|
390
421
|
setIsCloseHeld(false);
|
|
@@ -399,6 +430,10 @@ export function MobileNav({
|
|
|
399
430
|
clearTimeout(closeTimeoutRef.current);
|
|
400
431
|
closeTimeoutRef.current = null;
|
|
401
432
|
}
|
|
433
|
+
// The hold this run took ends with it: a reopen, a close or an
|
|
434
|
+
// unmount mid-slide never leaves input blocked.
|
|
435
|
+
releaseHoldRef.current?.();
|
|
436
|
+
releaseHoldRef.current = null;
|
|
402
437
|
};
|
|
403
438
|
}, [isOpen]);
|
|
404
439
|
|
|
@@ -418,6 +453,8 @@ export function MobileNav({
|
|
|
418
453
|
useEffect(() => {
|
|
419
454
|
const dialog = dialogRef.current;
|
|
420
455
|
return () => {
|
|
456
|
+
releaseHoldRef.current?.();
|
|
457
|
+
releaseHoldRef.current = null;
|
|
421
458
|
if (dialog?.open) {
|
|
422
459
|
closeAndRestoreFocus(dialog, triggerElementRef);
|
|
423
460
|
}
|
|
@@ -486,6 +523,7 @@ export function MobileNav({
|
|
|
486
523
|
children: /*#__PURE__*/_jsx(LayerDepthProvider, {
|
|
487
524
|
children: /*#__PURE__*/_jsx(LayerContentBoundary, {
|
|
488
525
|
children: /*#__PURE__*/_jsxs("div", {
|
|
526
|
+
ref: drawerRef,
|
|
489
527
|
tabIndex: -1,
|
|
490
528
|
...stylex.props(styles.drawer, dynamicStyles.width(width), isStart && styles.drawerStart, isStart && isOpen && styles.drawerStartOpen, !isStart && styles.drawerEnd, !isStart && isOpen && styles.drawerEndOpen),
|
|
491
529
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
@@ -65,9 +65,11 @@ export interface MoreMenuProps extends Pick<BaseProps, 'xstyle' | 'className' |
|
|
|
65
65
|
*/
|
|
66
66
|
alignment?: LayerAlignment;
|
|
67
67
|
/**
|
|
68
|
-
* Menu presentation policy. `adaptive` uses a
|
|
69
|
-
* coarse-pointer viewports and an anchored popover
|
|
70
|
-
*
|
|
68
|
+
* Menu presentation policy, forwarded to DropdownMenu. `adaptive` uses a
|
|
69
|
+
* BottomSheet on compact coarse-pointer viewports and an anchored popover
|
|
70
|
+
* elsewhere. Omitted, the menu is the anchored popover, and the finger that
|
|
71
|
+
* opened it follows UIMenu's handoff on every device. `'popover'` pins the
|
|
72
|
+
* pointer behavior on every device.
|
|
71
73
|
*/
|
|
72
74
|
presentation?: DropdownMenuPresentation;
|
|
73
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoreMenu.d.ts","sourceRoot":"","sources":["../../src/MoreMenu/MoreMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,SAAS,EACT,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;;OAGG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B
|
|
1
|
+
{"version":3,"file":"MoreMenu.d.ts","sourceRoot":"","sources":["../../src/MoreMenu/MoreMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,SAAS,EACT,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;;OAGG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;IAExC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EAAE,cAAc,EACrB,OAAiB,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EACJ,UAAkB,EAClB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,MAAM,EACN,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,aAAa,+BAmCf;yBApDe,QAAQ"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file NumberInput.tsx
|
|
3
|
-
* @input Uses React, useId, useState, useMemo, useCallback, Field, Icon, InputGroupContext
|
|
4
|
-
* @output Exports NumberInput component, NumberInputProps; optional steppers are hidden on coarse pointers
|
|
3
|
+
* @input Uses React, useId, useState, useMemo, useCallback, useEffect, Field, Icon, InputGroupContext
|
|
4
|
+
* @output Exports NumberInput component, NumberInputProps; optional steppers are hidden on coarse pointers, and a held one repeats into the draft
|
|
5
5
|
* @position Core implementation; consumed by index.ts, tested by NumberInput.test.tsx
|
|
6
6
|
*
|
|
7
7
|
* SYNC: When modified, update these files to stay in sync:
|
|
@@ -188,6 +188,8 @@ interface NumberInputPropsBase extends Omit<FieldInputBaseProps, 'onChange' | 'd
|
|
|
188
188
|
/**
|
|
189
189
|
* Whether to show increment and decrement buttons at the end of the input.
|
|
190
190
|
* The buttons are hidden on coarse pointers (such as touch screens).
|
|
191
|
+
* Holding a button with a mouse or a pen repeats the step and commits once,
|
|
192
|
+
* when the hold ends.
|
|
191
193
|
* Direct text entry and keyboard stepping remain available.
|
|
192
194
|
* @default false
|
|
193
195
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file NumberInput.tsx
|
|
7
|
-
* @input Uses React, useId, useState, useMemo, useCallback, Field, Icon, InputGroupContext
|
|
8
|
-
* @output Exports NumberInput component, NumberInputProps; optional steppers are hidden on coarse pointers
|
|
7
|
+
* @input Uses React, useId, useState, useMemo, useCallback, useEffect, Field, Icon, InputGroupContext
|
|
8
|
+
* @output Exports NumberInput component, NumberInputProps; optional steppers are hidden on coarse pointers, and a held one repeats into the draft
|
|
9
9
|
* @position Core implementation; consumed by index.ts, tested by NumberInput.test.tsx
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* - /apps/storybook/stories/NumberInput.stories.tsx (storybook stories)
|
|
18
18
|
* - /packages/cli/assets/templates/blocks/components/NumberInput/ (showcase blocks)
|
|
19
19
|
*/
|
|
20
|
-
import { use, useId, useState, useMemo, useCallback, useRef } from 'react';
|
|
20
|
+
import { use, useId, useState, useMemo, useCallback, useEffect, useRef } from 'react';
|
|
21
21
|
import { flushSync } from 'react-dom';
|
|
22
22
|
import * as stylex from '@stylexjs/stylex';
|
|
23
23
|
import "../theme/tokens.stylex.js";
|
|
@@ -31,6 +31,7 @@ import { joinAriaIDs } from "../utils/inputAria.js";
|
|
|
31
31
|
import { withholdCallerHandlers } from "../utils/disabledInteraction.js";
|
|
32
32
|
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
33
33
|
import { usePressFeedback } from "../hooks/usePressFeedback.js";
|
|
34
|
+
import { lockSelection, locksSelectionFor } from "../utils/selectionLock.js";
|
|
34
35
|
import { inputDisabledFocusStyles } from "../Field/inputDisabledFocus.js";
|
|
35
36
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
36
37
|
import { useInputContainer } from "../hooks/useInputContainer.js";
|
|
@@ -143,6 +144,24 @@ registerEnglishFallback(english);
|
|
|
143
144
|
* With `hasClear`, onChange also receives `null` when the user clears the input.
|
|
144
145
|
*/
|
|
145
146
|
|
|
147
|
+
/**
|
|
148
|
+
* A held stepper's timing: the first repeat comes `delayMs` after the press.
|
|
149
|
+
* Each later interval is `acceleration` times the one before, from
|
|
150
|
+
* `firstIntervalMs` down to `minIntervalMs`.
|
|
151
|
+
*/
|
|
152
|
+
const STEPPER_HOLD = {
|
|
153
|
+
delayMs: 500,
|
|
154
|
+
firstIntervalMs: 250,
|
|
155
|
+
acceleration: 0.9,
|
|
156
|
+
minIntervalMs: 50
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* A held stepper press: its pointer, its next repeat, the value its repeats
|
|
161
|
+
* reached, whether the field stopped taking them, and the release of its
|
|
162
|
+
* selection lock.
|
|
163
|
+
*/
|
|
164
|
+
|
|
146
165
|
function getDecimalPlaces(value) {
|
|
147
166
|
const [coefficient, exponentText] = String(value).toLowerCase().split('e');
|
|
148
167
|
const fractionLength = coefficient.split('.')[1]?.length ?? 0;
|
|
@@ -286,6 +305,13 @@ export function NumberInput({
|
|
|
286
305
|
|
|
287
306
|
// Pending input while user is typing (null = show formatted value)
|
|
288
307
|
const [pendingInput, setPendingInput] = useState(null);
|
|
308
|
+
// The value a held stepper's repeats reached, shown until the hold ends.
|
|
309
|
+
const [holdDraft, setHoldDraft] = useState(null);
|
|
310
|
+
// A field that turns disabled or read-only drops the held value during
|
|
311
|
+
// render, so no commit shows a value that the release does not commit.
|
|
312
|
+
if (holdDraft !== null && (isDisabled || isReadOnly)) {
|
|
313
|
+
setHoldDraft(null);
|
|
314
|
+
}
|
|
289
315
|
const [isFocused, setIsFocused] = useState(false);
|
|
290
316
|
|
|
291
317
|
// Disabled-reason tooltip. The tooltip listeners attach to the input container (which already exists) and
|
|
@@ -340,6 +366,9 @@ export function NumberInput({
|
|
|
340
366
|
// Preserve pending text while editing. Otherwise show the formatted value
|
|
341
367
|
// at rest and the raw numeric value while focused so it remains editable.
|
|
342
368
|
const displayValue = useMemo(() => {
|
|
369
|
+
if (holdDraft !== null) {
|
|
370
|
+
return formatEditableNumber(holdDraft, locale);
|
|
371
|
+
}
|
|
343
372
|
if (pendingInput !== null) {
|
|
344
373
|
return pendingInput;
|
|
345
374
|
}
|
|
@@ -347,15 +376,19 @@ export function NumberInput({
|
|
|
347
376
|
return '';
|
|
348
377
|
}
|
|
349
378
|
return isFocused ? formatEditableNumber(value, locale) : formattedValue;
|
|
350
|
-
}, [formattedValue, isFocused, locale, pendingInput, value]);
|
|
379
|
+
}, [formattedValue, holdDraft, isFocused, locale, pendingInput, value]);
|
|
351
380
|
|
|
352
381
|
// Check if current pending input is valid (for styling purposes)
|
|
353
382
|
const isInputValid = useMemo(() => {
|
|
383
|
+
// A held value is a step on the grid, so it is always valid.
|
|
384
|
+
if (holdDraft !== null) {
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
354
387
|
if (pendingInput === null || !pendingInput.trim()) {
|
|
355
388
|
return true;
|
|
356
389
|
}
|
|
357
390
|
return parseInput(pendingInput) !== null;
|
|
358
|
-
}, [pendingInput, parseInput]);
|
|
391
|
+
}, [holdDraft, pendingInput, parseInput]);
|
|
359
392
|
|
|
360
393
|
// Keep the whole text edit as a draft until an explicit commit boundary.
|
|
361
394
|
const handleInputChange = useCallback(e => {
|
|
@@ -457,6 +490,152 @@ export function NumberInput({
|
|
|
457
490
|
}
|
|
458
491
|
}, [getNextValue, isDisabled, isReadOnly, onChange, value]);
|
|
459
492
|
|
|
493
|
+
// A held stepper repeats into its own draft and commits once, when the hold
|
|
494
|
+
// ends.
|
|
495
|
+
const stepperHoldRef = useRef(null);
|
|
496
|
+
const isClickAfterHoldRef = useRef(false);
|
|
497
|
+
// The pointer of a repeated hold that another press cancelled. Its own
|
|
498
|
+
// release still swallows the click that follows.
|
|
499
|
+
const cancelledHoldPointerRef = useRef(null);
|
|
500
|
+
|
|
501
|
+
// Ends a hold with no commit, and drops the draft its repeats wrote.
|
|
502
|
+
const cancelStepperHold = useCallback(() => {
|
|
503
|
+
const hold = stepperHoldRef.current;
|
|
504
|
+
if (hold == null) {
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
stepperHoldRef.current = null;
|
|
508
|
+
cancelledHoldPointerRef.current = hold.held != null ? hold.pointerId : null;
|
|
509
|
+
if (hold.timer != null) {
|
|
510
|
+
clearTimeout(hold.timer);
|
|
511
|
+
}
|
|
512
|
+
hold.unlockSelection?.();
|
|
513
|
+
setHoldDraft(null);
|
|
514
|
+
}, []);
|
|
515
|
+
|
|
516
|
+
// Syncs the held stepper's repeat timer with the field's editability: a
|
|
517
|
+
// field that turns disabled or read-only stops the repeats, and the release
|
|
518
|
+
// commits nothing.
|
|
519
|
+
useEffect(() => {
|
|
520
|
+
const hold = stepperHoldRef.current;
|
|
521
|
+
if (hold == null || !(isDisabled || isReadOnly)) {
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
hold.isFrozen = true;
|
|
525
|
+
if (hold.timer != null) {
|
|
526
|
+
clearTimeout(hold.timer);
|
|
527
|
+
hold.timer = null;
|
|
528
|
+
}
|
|
529
|
+
}, [isDisabled, isReadOnly]);
|
|
530
|
+
|
|
531
|
+
// The stepper column's removal or unmount ends the hold with no commit, as
|
|
532
|
+
// its buttons can no longer hear the release.
|
|
533
|
+
const stepperColumnRef = useCallback(() => () => {
|
|
534
|
+
cancelStepperHold();
|
|
535
|
+
}, [cancelStepperHold]);
|
|
536
|
+
const startStepperHold = (direction, canStep, event) => {
|
|
537
|
+
isClickAfterHoldRef.current = false;
|
|
538
|
+
if (cancelledHoldPointerRef.current === event.pointerId) {
|
|
539
|
+
cancelledHoldPointerRef.current = null;
|
|
540
|
+
}
|
|
541
|
+
// Any new press ends a running hold, whichever pointer made it.
|
|
542
|
+
cancelStepperHold();
|
|
543
|
+
// Steppers render only under a non-coarse primary pointer, so a hold is a
|
|
544
|
+
// mouse or pen press. A finger keeps the single step of its click.
|
|
545
|
+
if (event.button !== 0 || event.pointerType === 'touch' || !canStep || isDisabled || isReadOnly) {
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
const first = getNextValue(direction);
|
|
549
|
+
if (first == null) {
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
// The release ends the hold wherever the pointer is by then.
|
|
553
|
+
event.currentTarget.setPointerCapture?.(event.pointerId);
|
|
554
|
+
const grid = {
|
|
555
|
+
direction,
|
|
556
|
+
min,
|
|
557
|
+
max,
|
|
558
|
+
step,
|
|
559
|
+
isIntegerOnly
|
|
560
|
+
};
|
|
561
|
+
const hold = {
|
|
562
|
+
pointerId: event.pointerId,
|
|
563
|
+
timer: null,
|
|
564
|
+
held: null,
|
|
565
|
+
intervalMs: STEPPER_HOLD.firstIntervalMs,
|
|
566
|
+
isFrozen: false,
|
|
567
|
+
// A pen's hold starts no text selection or callout.
|
|
568
|
+
unlockSelection: locksSelectionFor(event.pointerType) ? lockSelection([event.currentTarget], event.target) : null
|
|
569
|
+
};
|
|
570
|
+
const repeat = () => {
|
|
571
|
+
const next = hold.held == null ? first : getSteppedValue({
|
|
572
|
+
currentValue: hold.held,
|
|
573
|
+
...grid
|
|
574
|
+
});
|
|
575
|
+
// At a bound the repeats stop, and the release still commits.
|
|
576
|
+
if (next == null || next === hold.held) {
|
|
577
|
+
hold.timer = null;
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
hold.held = next;
|
|
581
|
+
setHoldDraft(next);
|
|
582
|
+
hold.timer = setTimeout(repeat, hold.intervalMs);
|
|
583
|
+
hold.intervalMs = Math.max(STEPPER_HOLD.minIntervalMs, hold.intervalMs * STEPPER_HOLD.acceleration);
|
|
584
|
+
};
|
|
585
|
+
hold.timer = setTimeout(repeat, STEPPER_HOLD.delayMs);
|
|
586
|
+
stepperHoldRef.current = hold;
|
|
587
|
+
};
|
|
588
|
+
const handleStepperContextMenu = event => {
|
|
589
|
+
const hold = stepperHoldRef.current;
|
|
590
|
+
if (hold == null) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
// A pen's hold opens no callout menu. A mouse's context request, such as
|
|
594
|
+
// a Control-click, ends its hold with no commit and opens the menu.
|
|
595
|
+
if (hold.unlockSelection != null) {
|
|
596
|
+
event.preventDefault();
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
cancelStepperHold();
|
|
600
|
+
// A click that follows the menu steps nothing, as after any ended hold.
|
|
601
|
+
cancelledHoldPointerRef.current = hold.pointerId;
|
|
602
|
+
isClickAfterHoldRef.current = true;
|
|
603
|
+
};
|
|
604
|
+
const endStepperHold = (end, pointerId) => {
|
|
605
|
+
const hold = stepperHoldRef.current;
|
|
606
|
+
// Only the pointer that holds can end the hold.
|
|
607
|
+
if (hold == null || hold.pointerId !== pointerId) {
|
|
608
|
+
if (cancelledHoldPointerRef.current === pointerId) {
|
|
609
|
+
cancelledHoldPointerRef.current = null;
|
|
610
|
+
// Only arm the swallow here: a lost capture must not clear it.
|
|
611
|
+
if (end === 'release') {
|
|
612
|
+
isClickAfterHoldRef.current = true;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
stepperHoldRef.current = null;
|
|
618
|
+
if (hold.timer != null) {
|
|
619
|
+
clearTimeout(hold.timer);
|
|
620
|
+
}
|
|
621
|
+
hold.unlockSelection?.();
|
|
622
|
+
// A press released before its first repeat is a click, and its click
|
|
623
|
+
// steps.
|
|
624
|
+
if (hold.held == null) {
|
|
625
|
+
return;
|
|
626
|
+
}
|
|
627
|
+
isClickAfterHoldRef.current = end === 'release';
|
|
628
|
+
setHoldDraft(null);
|
|
629
|
+
// A frozen hold commits nothing, so a typed draft under it stays.
|
|
630
|
+
if (hold.isFrozen || isDisabled || isReadOnly) {
|
|
631
|
+
return;
|
|
632
|
+
}
|
|
633
|
+
setPendingInput(null);
|
|
634
|
+
if (hold.held !== value) {
|
|
635
|
+
onChange(hold.held);
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
|
|
460
639
|
// Handle keyboard events
|
|
461
640
|
const handleKeyDown = useCallback(e => {
|
|
462
641
|
if (isDisabled) {
|
|
@@ -514,8 +693,31 @@ export function NumberInput({
|
|
|
514
693
|
return () => input.removeEventListener('wheel', handleWheel);
|
|
515
694
|
}, [isDisabled, isReadOnly, isWheelEnabled, stepValue]);
|
|
516
695
|
const mergedInputRef = useMemo(() => mergeRefs(ref, inputRef, wheelListenerRef), [ref, wheelListenerRef]);
|
|
517
|
-
|
|
518
|
-
|
|
696
|
+
|
|
697
|
+
// While a hold runs, the steppers follow the value that it shows.
|
|
698
|
+
const {
|
|
699
|
+
canIncrement,
|
|
700
|
+
canDecrement
|
|
701
|
+
} = useMemo(() => {
|
|
702
|
+
const base = holdDraft ?? valueForStepping;
|
|
703
|
+
const grid = {
|
|
704
|
+
currentValue: base,
|
|
705
|
+
min,
|
|
706
|
+
max,
|
|
707
|
+
step,
|
|
708
|
+
isIntegerOnly
|
|
709
|
+
};
|
|
710
|
+
return {
|
|
711
|
+
canIncrement: getSteppedValue({
|
|
712
|
+
...grid,
|
|
713
|
+
direction: 1
|
|
714
|
+
}) !== base,
|
|
715
|
+
canDecrement: getSteppedValue({
|
|
716
|
+
...grid,
|
|
717
|
+
direction: -1
|
|
718
|
+
}) !== base
|
|
719
|
+
};
|
|
720
|
+
}, [holdDraft, isIntegerOnly, max, min, step, valueForStepping]);
|
|
519
721
|
|
|
520
722
|
// Handle clear button click
|
|
521
723
|
const handleClear = useCallback(e => {
|
|
@@ -638,6 +840,7 @@ export function NumberInput({
|
|
|
638
840
|
}),
|
|
639
841
|
onClick: handleClear
|
|
640
842
|
}), statusIcon, hasNumberSteppers && /*#__PURE__*/_jsxs("div", {
|
|
843
|
+
ref: stepperColumnRef,
|
|
641
844
|
...{
|
|
642
845
|
className: "xkh2ocl x78zum5 xhj50sb xdt5ytf x2lah0s x12xnipv x5j3pgv x13i4uq0 xgbv0en x1t7ytsu x14ydlgx xb3r6kr x1g2gkjz xoao14b"
|
|
643
846
|
},
|
|
@@ -649,8 +852,23 @@ export function NumberInput({
|
|
|
649
852
|
"aria-label": t('@astryx.numberInput.incrementLabel', {
|
|
650
853
|
label
|
|
651
854
|
}),
|
|
652
|
-
onPointerDown: event =>
|
|
653
|
-
|
|
855
|
+
onPointerDown: event => {
|
|
856
|
+
event.preventDefault();
|
|
857
|
+
startStepperHold(1, canIncrement, event);
|
|
858
|
+
},
|
|
859
|
+
onContextMenu: handleStepperContextMenu,
|
|
860
|
+
onPointerUp: event => endStepperHold('release', event.pointerId),
|
|
861
|
+
onPointerCancel: event => endStepperHold('cancel', event.pointerId),
|
|
862
|
+
onLostPointerCapture: event => endStepperHold('cancel', event.pointerId),
|
|
863
|
+
onClick: event => {
|
|
864
|
+
const isAfterHold = isClickAfterHoldRef.current;
|
|
865
|
+
isClickAfterHoldRef.current = false;
|
|
866
|
+
// A pointer's click after a held press's release steps nothing.
|
|
867
|
+
// A click with no pointer, such as a screen reader's, steps.
|
|
868
|
+
if (isAfterHold && event.detail > 0) {
|
|
869
|
+
inputRef.current?.focus();
|
|
870
|
+
return;
|
|
871
|
+
}
|
|
654
872
|
// An aria-disabled stepper does nothing, as a natively disabled
|
|
655
873
|
// one did (spec:AST-085 FR2).
|
|
656
874
|
if (isDisabled || isReadOnly || !canIncrement) {
|
|
@@ -674,8 +892,23 @@ export function NumberInput({
|
|
|
674
892
|
"aria-label": t('@astryx.numberInput.decrementLabel', {
|
|
675
893
|
label
|
|
676
894
|
}),
|
|
677
|
-
onPointerDown: event =>
|
|
678
|
-
|
|
895
|
+
onPointerDown: event => {
|
|
896
|
+
event.preventDefault();
|
|
897
|
+
startStepperHold(-1, canDecrement, event);
|
|
898
|
+
},
|
|
899
|
+
onContextMenu: handleStepperContextMenu,
|
|
900
|
+
onPointerUp: event => endStepperHold('release', event.pointerId),
|
|
901
|
+
onPointerCancel: event => endStepperHold('cancel', event.pointerId),
|
|
902
|
+
onLostPointerCapture: event => endStepperHold('cancel', event.pointerId),
|
|
903
|
+
onClick: event => {
|
|
904
|
+
const isAfterHold = isClickAfterHoldRef.current;
|
|
905
|
+
isClickAfterHoldRef.current = false;
|
|
906
|
+
// A pointer's click after a held press's release steps nothing.
|
|
907
|
+
// A click with no pointer, such as a screen reader's, steps.
|
|
908
|
+
if (isAfterHold && event.detail > 0) {
|
|
909
|
+
inputRef.current?.focus();
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
679
912
|
// An aria-disabled stepper does nothing, as a natively disabled
|
|
680
913
|
// one did (spec:AST-085 FR2).
|
|
681
914
|
if (isDisabled || isReadOnly || !canDecrement) {
|
|
@@ -173,6 +173,7 @@ export interface UsePopoverReturn {
|
|
|
173
173
|
/**
|
|
174
174
|
* The CSS anchor name to use for positioning.
|
|
175
175
|
* Use when you need to set anchorName manually (e.g., display:contents wrapper).
|
|
176
|
+
* Set it only while the layer is shown or its exit animation runs.
|
|
176
177
|
*/
|
|
177
178
|
anchorId: string;
|
|
178
179
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePopover.d.ts","sourceRoot":"","sources":["../../src/Popover/usePopover.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAW,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAgBnD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAUhD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AA4E9E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAE7C;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAEnD
|
|
1
|
+
{"version":3,"file":"usePopover.d.ts","sourceRoot":"","sources":["../../src/Popover/usePopover.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAW,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAgBnD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAUhD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AA4E9E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;;;;;;;;;OAaG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAE7C;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAEnD;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IAEpD;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAEvE;;OAEG;IACH,YAAY,EAAE;QACZ,eAAe,EAAE,QAAQ,GAAG,MAAM,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AA4TD,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAE5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PowerSearch.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearch.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,EAUZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,cAAc,CAAC;AAStB,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAY1C,OAAO,EACL,KAAK,oBAAoB,EAE1B,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"PowerSearch.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -50,6 +50,7 @@ import { buildRelativeDateOptions, PowerSearchValueEditor } from "./PowerSearchV
|
|
|
50
50
|
import { resolveOperatorLabel } from "./resolveOperatorLabel.js";
|
|
51
51
|
import { themeProps } from "../utils/themeProps.js";
|
|
52
52
|
import { useLocale } from "../i18n/useLocale.js";
|
|
53
|
+
import { useCalendarSystem } from "../i18n/useCalendarSystem.js";
|
|
53
54
|
import { formatTokenValueText } from "./formatTokenValue.js";
|
|
54
55
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
55
56
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
@@ -306,6 +307,7 @@ export function PowerSearch({
|
|
|
306
307
|
const searchSource = usePowerSearchSource(config, maxSearchResults);
|
|
307
308
|
const t = useComponentTranslator();
|
|
308
309
|
const locale = useLocale();
|
|
310
|
+
const calendar = useCalendarSystem(undefined, 'PowerSearch');
|
|
309
311
|
const label = labelFromProps ?? t('@astryx.powersearch.label');
|
|
310
312
|
const placeholder = placeholderFromProps ?? t('@astryx.powersearch.placeholder');
|
|
311
313
|
const popoverSaveButtonLabel = popoverSaveButtonLabelFromProps ?? t('@astryx.powersearch.editor.apply');
|
|
@@ -398,13 +400,13 @@ export function PowerSearch({
|
|
|
398
400
|
const fieldLabel = field?.label ?? '';
|
|
399
401
|
const operatorLabel = operator ? resolveOperatorLabel(operator, t) : '';
|
|
400
402
|
const label = `${fieldLabel}: ${operatorLabel}`.trim();
|
|
401
|
-
const value = operator ? formatTokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale, undefined, undefined, timezoneID) : null;
|
|
403
|
+
const value = operator ? formatTokenValueText(operator.value, filter.value, Math.max(maxTokenLength - fieldLabel.length - operatorLabel.length, 10), locale, calendar, undefined, undefined, timezoneID) : null;
|
|
402
404
|
return {
|
|
403
405
|
label,
|
|
404
406
|
value,
|
|
405
407
|
full: value != null ? `${label} ${value}` : label
|
|
406
408
|
};
|
|
407
|
-
}, [config, maxTokenLength, t, locale, timezoneID]);
|
|
409
|
+
}, [config, maxTokenLength, t, locale, timezoneID, calendar]);
|
|
408
410
|
// The built-in token being edited. A token from a `components` override
|
|
409
411
|
// names itself, so its editor keeps the plain popover.
|
|
410
412
|
const editedFilter = popoverState.type === 'editing' ? filters[popoverState.filterIndex] : undefined;
|
|
@@ -526,7 +528,7 @@ export function PowerSearch({
|
|
|
526
528
|
const operator = config.getOperator(filter.field, filter.operator);
|
|
527
529
|
const resolvedOp = operator ? resolveOperatorLabel(operator, t) : '';
|
|
528
530
|
const operatorLabel = resolvedOp ? `: ${resolvedOp}` : '';
|
|
529
|
-
const valueStr = operator ? formatFilterValue(config, operator.value, filter.value, maxTokenLength, t, locale, timezoneID) : '';
|
|
531
|
+
const valueStr = operator ? formatFilterValue(config, operator.value, filter.value, maxTokenLength, t, locale, timezoneID, calendar) : '';
|
|
530
532
|
const displayLabel = valueStr ? `${field?.label ?? filter.field}${operatorLabel} ${valueStr}` : `${field?.label ?? filter.field}${operatorLabel}`;
|
|
531
533
|
return {
|
|
532
534
|
id: `filter-${index}-${filter.field}-${filter.operator}`,
|
|
@@ -539,7 +541,7 @@ export function PowerSearch({
|
|
|
539
541
|
}
|
|
540
542
|
};
|
|
541
543
|
});
|
|
542
|
-
}, [filters, config, maxTokenLength, timezoneID, t, locale]);
|
|
544
|
+
}, [filters, config, maxTokenLength, timezoneID, t, locale, calendar]);
|
|
543
545
|
|
|
544
546
|
// Handle tokenizer onChange (field selected from typeahead)
|
|
545
547
|
const handleTokenizerChange = useCallback((_items, change) => {
|
|
@@ -1032,7 +1034,12 @@ export function PowerSearch({
|
|
|
1032
1034
|
className: "xjyslct xfoc8du xkh2ocl x78zum5 x6s0dn4 xt970qd x7a5moj x1ghz6dp xc342km xng3xce xjbqb8w xv1l7n4 x9ynric xjm74w1 xw6l6zx x1yc453h xuxw1ft x1ypdohk xvivl9a x1a2a7pz x10l6tqk x10a8y8t xeuugli x1717udv"
|
|
1033
1035
|
}
|
|
1034
1036
|
}[!!(filters.length > 0) << 0],
|
|
1035
|
-
children: filters.length === 0 ?
|
|
1037
|
+
children: filters.length === 0 ? /*#__PURE__*/_jsx("span", {
|
|
1038
|
+
...{
|
|
1039
|
+
className: "xeuugli xb3r6kr xlyipyv xuxw1ft"
|
|
1040
|
+
},
|
|
1041
|
+
children: placeholder
|
|
1042
|
+
}) : null
|
|
1036
1043
|
})]
|
|
1037
1044
|
}), (endContent || isRenderable(resultCountText)) && /*#__PURE__*/_jsxs("div", {
|
|
1038
1045
|
ref: endLaneRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PowerSearchBottomSheet.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearchBottomSheet.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,EASZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAoBf,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"PowerSearchBottomSheet.d.ts","sourceRoot":"","sources":["../../src/PowerSearch/PowerSearchBottomSheet.tsx"],"names":[],"mappings":"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"}
|