@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
|
@@ -20,12 +20,12 @@ export const docs = {
|
|
|
20
20
|
name: 'pressableProps',
|
|
21
21
|
type: "{'data-astryx-pressable': ''}",
|
|
22
22
|
description:
|
|
23
|
-
"The marker attribute to spread on the element that paints the press. Compose one of `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same element — `backgroundColor` or `backgroundImage` for a surface whose hover and press are the system's overlays, `pressedBackgroundColor` for one whose hover is its own — and it paints the pressed token
|
|
23
|
+
"The marker attribute to spread on the element that paints the press. Compose one of `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same element — `backgroundColor` or `backgroundImage` for a surface whose hover and press are the system's overlays, `pressedBackgroundColor` for one whose hover is its own — and it paints the pressed token on the first frame of a press and fades it over the release, keeping `:active` for a mouse on a desktop. On a phone or tablet, where the stylesheet drops `:active`, the controller also paints a mouse, trackpad or Space-key press: at once, held while the button or key is down, faded at the release. A press is themed through `--color-overlay-pressed`.",
|
|
24
24
|
},
|
|
25
25
|
],
|
|
26
26
|
usage: {
|
|
27
27
|
description:
|
|
28
|
-
'The touch press model every Astryx pressable uses, for a local component that paints its own press. Under a finger, CSS `:active` paints on the touch itself and can outlive the start of a scroll; the press model instead
|
|
28
|
+
'The touch press model every Astryx pressable uses, for a local component that paints its own press. Under a finger, CSS `:active` paints on the touch itself and can outlive the start of a scroll; the press model instead tracks the touch the way UIKit tracks a control: it highlights as the finger lands (after the content-touch delay inside a scroller, where a flick paints nothing), a quick tap answers at the lift, and a scroll that takes the touch cancels it with no fade. One document-level controller does this for every marked element (installed by the first pressable to mount, removed by the last to unmount), so calling the hook adds no listener or state to your element. On a desktop a mouse press is still your `:active` rule: keep it, and drop it under `@media (pointer: coarse)` the way the built-in components do. That query reads the primary pointer, so on a phone or tablet it also drops `:active` for a connected mouse, trackpad or keyboard; the controller paints those presses there (at once, faded at the release), so nothing goes unanswered.',
|
|
29
29
|
bestPractices: [
|
|
30
30
|
{
|
|
31
31
|
guidance: true,
|
|
@@ -58,7 +58,7 @@ export const docs = {
|
|
|
58
58
|
/** @type {import('@astryxdesign/cli/authoring').HookTranslationDoc} */
|
|
59
59
|
export const docsDense = {
|
|
60
60
|
description:
|
|
61
|
-
'Marks an element as a pressable surface of the touch press model
|
|
61
|
+
'Marks an element as a pressable surface of the touch press model, tracked like a UIKit control (highlight as the finger lands, 150 ms inside a scroller, fade at the lift), and installs the shared document controller; on a coarse primary pointer it also paints mouse, trackpad and Space-key presses at once. Returns the data-astryx-pressable marker to spread; compose one of interactionOverlayStyles on the same element to paint.',
|
|
62
62
|
paramDescriptions: {},
|
|
63
63
|
returnDescriptions: {
|
|
64
64
|
pressableProps:
|
|
@@ -26,11 +26,11 @@ import {installPressFeedback, pressableProps} from '../utils/pressFeedback';
|
|
|
26
26
|
* `interactionOverlayStyles` (from `@astryxdesign/core/utils`) on the same
|
|
27
27
|
* element: `backgroundColor` or `backgroundImage` for a surface whose hover
|
|
28
28
|
* and press are the system's overlays, `pressedBackgroundColor` for one
|
|
29
|
-
* whose hover is its own.
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* the release, keeping `:active` for a mouse on a desktop. On a phone or
|
|
29
|
+
* whose hover is its own. Under a finger the controller tracks the press the
|
|
30
|
+
* way UIKit tracks a control and writes its
|
|
31
|
+
* attribute on the element while the press is held and for the release; the
|
|
32
|
+
* composed style paints the pressed token on the first frame and fades it
|
|
33
|
+
* over the release, keeping `:active` for a mouse on a desktop. On a phone or
|
|
34
34
|
* tablet the stylesheet drops `:active` for every press, so the controller
|
|
35
35
|
* also paints a mouse, trackpad or Space-key press there, at once. A press is
|
|
36
36
|
* themed through `--color-overlay-pressed`, which the hold, the flash and the
|
|
@@ -46,7 +46,7 @@ import {installPressFeedback, pressableProps} from '../utils/pressFeedback';
|
|
|
46
46
|
* @example
|
|
47
47
|
* ```
|
|
48
48
|
* const pressable = usePressFeedback();
|
|
49
|
-
* return <
|
|
49
|
+
* return <button {...pressable} {...stylex.props(styles.button)} />;
|
|
50
50
|
* ```
|
|
51
51
|
*/
|
|
52
52
|
export function usePressFeedback(): typeof pressableProps {
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useScrollRegionProps.ts
|
|
7
|
+
* @input Whether a region may scroll, and the caller's role and label
|
|
8
|
+
* @output useScrollRegionProps: a ref for the region, and the role and
|
|
9
|
+
* accessible name that the region carries while its content overflows
|
|
10
|
+
* @position Internal hook for LayoutContent, LayoutPanel and StackItem.
|
|
11
|
+
*
|
|
12
|
+
* SYNC: When modified, update:
|
|
13
|
+
* - /packages/core/src/hooks/useScrollRegionProps.test.tsx
|
|
14
|
+
* - /packages/core/src/AppShell/observeMainOverflow.ts
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {useCallback, useState, type AriaRole, type RefCallback} from 'react';
|
|
18
|
+
import {
|
|
19
|
+
registerEnglishFallback,
|
|
20
|
+
useComponentTranslator,
|
|
21
|
+
} from '../i18n/useComponentTranslator';
|
|
22
|
+
import english from '../i18n/generated-english/hooks/useScrollRegionProps.generated';
|
|
23
|
+
import {observeMainOverflow} from '../AppShell/observeMainOverflow';
|
|
24
|
+
|
|
25
|
+
registerEnglishFallback(english);
|
|
26
|
+
|
|
27
|
+
export interface ScrollRegionOptions {
|
|
28
|
+
/** Whether the region may scroll at all (`overflow: auto`). */
|
|
29
|
+
isScrollable: boolean;
|
|
30
|
+
/** The caller's role. It always wins, and takes no default name. */
|
|
31
|
+
role?: AriaRole;
|
|
32
|
+
/** The caller's accessible name. It always wins. */
|
|
33
|
+
label?: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ScrollRegionProps {
|
|
37
|
+
ref: RefCallback<HTMLElement>;
|
|
38
|
+
role: AriaRole | undefined;
|
|
39
|
+
'aria-label': string | undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The region's ref, role and accessible name. While the region may scroll
|
|
44
|
+
* and its content overflows, it is a group named by the caller's `label`, or
|
|
45
|
+
* by the translated "Content". A caller's `role` is kept with only the
|
|
46
|
+
* caller's `label`: a single main landmark relies on its role alone. When
|
|
47
|
+
* the region does not scroll, the caller's own `role` and `label` pass
|
|
48
|
+
* through unchanged.
|
|
49
|
+
*/
|
|
50
|
+
export function useScrollRegionProps({
|
|
51
|
+
isScrollable,
|
|
52
|
+
role,
|
|
53
|
+
label,
|
|
54
|
+
}: ScrollRegionOptions): ScrollRegionProps {
|
|
55
|
+
const t = useComponentTranslator();
|
|
56
|
+
const [overflows, setOverflows] = useState(false);
|
|
57
|
+
// A caller's role takes no default name, so its region is not observed.
|
|
58
|
+
const hasRole = role != null;
|
|
59
|
+
const ref = useCallback(
|
|
60
|
+
(element: HTMLElement | null) => {
|
|
61
|
+
if (element == null || !isScrollable || hasRole) {
|
|
62
|
+
setOverflows(false);
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
return observeMainOverflow(element, setOverflows);
|
|
66
|
+
},
|
|
67
|
+
[hasRole, isScrollable],
|
|
68
|
+
);
|
|
69
|
+
const isGroup = !hasRole && isScrollable && overflows;
|
|
70
|
+
return {
|
|
71
|
+
ref,
|
|
72
|
+
role: role ?? (isGroup ? 'group' : undefined),
|
|
73
|
+
'aria-label':
|
|
74
|
+
label ?? (isGroup ? t('@astryx.scrollRegion.label') : undefined),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
@@ -25,10 +25,16 @@
|
|
|
25
25
|
import {createContext} from 'react';
|
|
26
26
|
import {getResolve} from './resolve';
|
|
27
27
|
import type {Locale, MessagesByLocale, Overrides} from './types';
|
|
28
|
+
import type {CalendarSystem} from '../utils/calendarSystem';
|
|
28
29
|
|
|
29
30
|
export interface InternationalizationContextValue {
|
|
30
31
|
locale: Locale;
|
|
31
32
|
direction: 'ltr' | 'rtl';
|
|
33
|
+
/**
|
|
34
|
+
* The provider's requested calendar system. A context without it means
|
|
35
|
+
* Gregorian dates.
|
|
36
|
+
*/
|
|
37
|
+
calendar?: CalendarSystem;
|
|
32
38
|
messages: MessagesByLocale;
|
|
33
39
|
overrides?: Overrides;
|
|
34
40
|
translate: ReturnType<typeof getResolve>;
|
|
@@ -26,7 +26,7 @@ export const docs = {
|
|
|
26
26
|
name: 'Provider boundary',
|
|
27
27
|
required: true,
|
|
28
28
|
description:
|
|
29
|
-
'A nonvisual context boundary that supplies locale, message catalogs, overrides, and direction to descendant Astryx components
|
|
29
|
+
'A nonvisual context boundary that supplies locale, message catalogs, overrides, and direction to descendant Astryx components, and a calendar system to `Calendar`. It renders no DOM element.',
|
|
30
30
|
},
|
|
31
31
|
],
|
|
32
32
|
bestPractices: [
|
|
@@ -50,6 +50,11 @@ export const docs = {
|
|
|
50
50
|
description:
|
|
51
51
|
"Set the `dir` attribute on `<html>` (or a wrapping element) yourself; the provider does not set it. Astryx components mirror layout and directional icons from the DOM `dir`, so an RTL locale won't visually mirror without it. Use `getLocaleDirection(locale)` to derive the value for both the provider and the DOM.",
|
|
52
52
|
},
|
|
53
|
+
{
|
|
54
|
+
guidance: true,
|
|
55
|
+
description:
|
|
56
|
+
'Set `calendar` to show `Calendar` in another calendar system and write Timestamp and PowerSearch dates in it; `DateInput`, `DateRangeInput`, and `DateTimeInput` show Gregorian dates. A locale never selects the calendar: `fa-IR` shows Gregorian dates until you set `calendar="persian"`, and a `-u-ca-` keyword in `locale`, as in `th-TH-u-ca-buddhist`, keeps Gregorian dates too. Date values stay Gregorian ISO strings.',
|
|
57
|
+
},
|
|
53
58
|
{
|
|
54
59
|
guidance: false,
|
|
55
60
|
description:
|
|
@@ -86,6 +91,13 @@ export const docs = {
|
|
|
86
91
|
description:
|
|
87
92
|
'Explicit text-direction override for the context. When omitted, direction is derived from `locale` via `Intl.Locale.getTextInfo()`. This sets the direction Astryx reads, but it does NOT set the DOM `dir` attribute; you must set `dir` on `<html>` (or a wrapping element) yourself, since Astryx components mirror layout and directional icons from the DOM `dir`, not from this prop. Set both to the same value and keep them in sync.',
|
|
88
93
|
},
|
|
94
|
+
{
|
|
95
|
+
name: 'calendar',
|
|
96
|
+
type: "'gregory' | 'iso8601' | 'buddhist' | 'roc' | 'japanese' | 'persian' | 'indian' | 'hebrew' | 'chinese' | 'dangi' | 'coptic' | 'ethiopic' | 'ethioaa' | 'islamic-civil' | 'islamic-tbla' | 'islamic-umalqura'",
|
|
97
|
+
required: false,
|
|
98
|
+
description:
|
|
99
|
+
"Calendar system of the subtree, such as 'persian', 'hebrew', or 'buddhist'. `Calendar` shows it, and Timestamp and PowerSearch write their dates in it. `DateInput`, `DateRangeInput`, and `DateTimeInput` show Gregorian dates. When omitted, the calendar is Gregorian: a locale never selects it, neither by its default calendar nor by a `-u-ca-` keyword. A component's own `calendar` prop takes precedence. Values stay Gregorian ISO dates. Calendars other than gregory, iso8601, buddhist, roc, and japanese need `Temporal`; the context keeps the requested calendar, and where the runtime lacks `Temporal`, these components show Gregorian dates and warn in development. Load a polyfill such as `temporal-polyfill/full/global` on the server and in the browser.",
|
|
100
|
+
},
|
|
89
101
|
{
|
|
90
102
|
name: 'children',
|
|
91
103
|
type: 'ReactNode',
|
|
@@ -124,6 +136,20 @@ export function AppI18n({children}: {children: ReactNode}) {
|
|
|
124
136
|
{children}
|
|
125
137
|
</InternationalizationProvider>
|
|
126
138
|
);
|
|
139
|
+
}`,
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
label: 'Show Calendar in the Persian calendar',
|
|
143
|
+
code: `import type {ReactNode} from 'react';
|
|
144
|
+
import {InternationalizationProvider} from '@astryxdesign/core/i18n';
|
|
145
|
+
|
|
146
|
+
// Values stay Gregorian ISO dates, for example '2026-10-30'.
|
|
147
|
+
export function AppI18n({children}: {children: ReactNode}) {
|
|
148
|
+
return (
|
|
149
|
+
<InternationalizationProvider locale="fa-IR" calendar="persian">
|
|
150
|
+
{children}
|
|
151
|
+
</InternationalizationProvider>
|
|
152
|
+
);
|
|
127
153
|
}`,
|
|
128
154
|
},
|
|
129
155
|
{
|
|
@@ -190,5 +216,7 @@ export const docsDense = {
|
|
|
190
216
|
'map of BCP 47 tag to a rich Catalog or generated RuntimeCatalog; "en" is always available',
|
|
191
217
|
overrides:
|
|
192
218
|
'sparse per-locale key overrides applied on top of shipped defaults',
|
|
219
|
+
calendar:
|
|
220
|
+
'calendar system for Calendar, Timestamp, and PowerSearch dates; date inputs stay Gregorian (default: gregory; a -u-ca- keyword in locale does not select it); values stay Gregorian ISO; non-Gregorian-aligned calendars need Temporal',
|
|
193
221
|
},
|
|
194
222
|
};
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file InternationalizationProvider.tsx
|
|
7
|
-
* @input React, InternationalizationContext, i18n types
|
|
7
|
+
* @input React, InternationalizationContext, i18n types, calendar resolution
|
|
8
8
|
* @output Exports InternationalizationProvider component and props type
|
|
9
|
-
* @position Provider component for astryx i18n locale
|
|
9
|
+
* @position Provider component for astryx i18n locale, messages, and calendar
|
|
10
10
|
*
|
|
11
11
|
* Wraps a subtree with a locale and (optional) additional message catalogs +
|
|
12
12
|
* overrides. Astryx components inside the subtree resolve their strings via
|
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
import {useMemo, type ReactNode} from 'react';
|
|
23
23
|
import {InternationalizationContext} from './InternationalizationContext';
|
|
24
24
|
import {getLocaleDirection} from './getLocaleDirection';
|
|
25
|
+
import {resolveCalendarSystem} from './useCalendarSystem';
|
|
26
|
+
import type {CalendarSystem} from '../utils/calendarSystem';
|
|
25
27
|
import type {
|
|
26
28
|
Locale,
|
|
27
29
|
MessagesByLocale,
|
|
@@ -30,6 +32,8 @@ import type {
|
|
|
30
32
|
} from './types';
|
|
31
33
|
import {getResolve} from './resolve';
|
|
32
34
|
|
|
35
|
+
const PROVIDER_NAME = 'InternationalizationProvider';
|
|
36
|
+
|
|
33
37
|
function normalizeMessages(
|
|
34
38
|
messages: ProviderMessagesByLocale,
|
|
35
39
|
): MessagesByLocale {
|
|
@@ -100,6 +104,23 @@ export interface InternationalizationProviderProps {
|
|
|
100
104
|
* in sync (e.g. `dir={getLocaleDirection(locale)}` on both).
|
|
101
105
|
*/
|
|
102
106
|
dir?: 'ltr' | 'rtl';
|
|
107
|
+
/**
|
|
108
|
+
* The calendar system of this subtree, such as `'persian'` or `'hebrew'`.
|
|
109
|
+
* `Calendar` shows it, and Timestamp and PowerSearch write their dates in it.
|
|
110
|
+
* The date inputs show Gregorian dates. Values stay Gregorian ISO dates. When
|
|
111
|
+
* omitted, the calendar is Gregorian: a locale never selects it, neither by
|
|
112
|
+
* its default calendar nor by a `-u-ca-` keyword. A component's own
|
|
113
|
+
* `calendar` prop takes precedence. Calendars other than `gregory`,
|
|
114
|
+
* `iso8601`, `buddhist`, `roc`, and `japanese` need `Temporal`. The context
|
|
115
|
+
* keeps the requested calendar; where `Temporal` is missing, these components
|
|
116
|
+
* show Gregorian dates and warn once in development.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```
|
|
120
|
+
* <InternationalizationProvider locale="fa-IR" calendar="persian">
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
calendar?: CalendarSystem;
|
|
103
124
|
children: ReactNode;
|
|
104
125
|
}
|
|
105
126
|
|
|
@@ -112,19 +133,28 @@ export function InternationalizationProvider({
|
|
|
112
133
|
messages,
|
|
113
134
|
overrides,
|
|
114
135
|
dir,
|
|
136
|
+
calendar: calendarProp,
|
|
115
137
|
children,
|
|
116
138
|
}: InternationalizationProviderProps) {
|
|
117
139
|
const direction = dir ?? getLocaleDirection(locale);
|
|
140
|
+
const calendar = useMemo(
|
|
141
|
+
() =>
|
|
142
|
+
calendarProp != null
|
|
143
|
+
? resolveCalendarSystem(calendarProp, PROVIDER_NAME)
|
|
144
|
+
: 'gregory',
|
|
145
|
+
[calendarProp],
|
|
146
|
+
);
|
|
118
147
|
const value = useMemo(() => {
|
|
119
148
|
const providedMessages = messages ?? {};
|
|
120
149
|
return {
|
|
121
150
|
locale,
|
|
122
151
|
direction,
|
|
152
|
+
calendar,
|
|
123
153
|
messages: normalizeMessages(providedMessages),
|
|
124
154
|
overrides,
|
|
125
155
|
translate: getResolve(locale, providedMessages, overrides),
|
|
126
156
|
};
|
|
127
|
-
}, [locale, direction, messages, overrides]);
|
|
157
|
+
}, [locale, direction, calendar, messages, overrides]);
|
|
128
158
|
return (
|
|
129
159
|
<InternationalizationContext value={value}>
|
|
130
160
|
{children}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @generated by scripts/generate-i18n-runtime.mjs from packages/core/locales/en.json,
|
|
5
|
+
* holding the English for the catalog keys named in packages/core/src/hooks/useScrollRegionProps.ts.
|
|
6
|
+
* Do not edit by hand. Run `pnpm generate:i18n-runtime` instead.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
const english: Readonly<Record<string, string>> = {
|
|
10
|
+
"@astryx.scrollRegion.label": "Content"
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default english;
|
|
@@ -375,6 +375,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
|
|
|
375
375
|
'@astryx.banner.expand': 'Expand',
|
|
376
376
|
'@astryx.button.loading': 'Loading',
|
|
377
377
|
'@astryx.spinner.loading': 'Loading',
|
|
378
|
+
'@astryx.scrollRegion.label': 'Content',
|
|
378
379
|
'@astryx.chatComposerDrawer.expand': 'Expand {label}',
|
|
379
380
|
'@astryx.chatComposerDrawer.collapse': 'Collapse {label}',
|
|
380
381
|
'@astryx.chatDictationButton.startDictation': 'Start dictation',
|
|
@@ -383,6 +383,7 @@ const runtimeCatalog: Readonly<Record<string, string>> = {
|
|
|
383
383
|
'@astryx.banner.expand': '⟦Éẋþàñð⟧',
|
|
384
384
|
'@astryx.button.loading': '⟦Łóàðíñĝ⟧',
|
|
385
385
|
'@astryx.spinner.loading': '⟦Łóàðíñĝ⟧',
|
|
386
|
+
'@astryx.scrollRegion.label': '⟦Çóñţéñţ⟧',
|
|
386
387
|
'@astryx.chatComposerDrawer.expand': '⟦Éẋþàñð {label}⟧',
|
|
387
388
|
'@astryx.chatComposerDrawer.collapse': '⟦Çółłàþšé {label}⟧',
|
|
388
389
|
'@astryx.chatDictationButton.startDictation': '⟦Šţàřţ ðíçţàţíóñ⟧',
|
package/src/i18n/index.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* - useDirection — hook returning the ambient text direction
|
|
16
16
|
* - getLocaleDirection — server-safe locale → direction helper
|
|
17
17
|
* - Translator — interface for consumer-injected runtimes
|
|
18
|
+
* - CalendarSystem — the calendars date components can show
|
|
18
19
|
*
|
|
19
20
|
* `useTranslator` and `InternationalizationContext` are the public paths
|
|
20
21
|
* that resolve any Astryx key, so they register the whole English catalog.
|
|
@@ -39,6 +40,7 @@ export {useLocale} from './useLocale';
|
|
|
39
40
|
export {useCollator} from './useCollator';
|
|
40
41
|
export {useDirection} from './useDirection';
|
|
41
42
|
export {getLocaleDirection} from './getLocaleDirection';
|
|
43
|
+
export type {CalendarSystem} from '../utils/calendarSystem';
|
|
42
44
|
export type {Translator} from './translator';
|
|
43
45
|
export type {
|
|
44
46
|
Locale,
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useCalendarSystem.ts
|
|
7
|
+
* @input InternationalizationContext, an optional component `calendar`
|
|
8
|
+
* @output The calendar system a date component shows, and the helpers that
|
|
9
|
+
* normalize a calendar identifier
|
|
10
|
+
* @position Internal i18n hook; read by InternationalizationProvider, date
|
|
11
|
+
* components, and the public calendar hooks. Not re-exported from the i18n
|
|
12
|
+
* barrel.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import {use} from 'react';
|
|
16
|
+
import {InternationalizationContext} from './InternationalizationContext';
|
|
17
|
+
import {
|
|
18
|
+
type CalendarSystem,
|
|
19
|
+
isCalendarSystem,
|
|
20
|
+
isCalendarSystemAvailable,
|
|
21
|
+
} from '../utils/calendarSystem';
|
|
22
|
+
import {warnOnce} from '../utils/devWarning';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Normalizes a calendar identifier. An identifier outside `CalendarSystem`
|
|
26
|
+
* resolves to `gregory` and warns once in development.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveCalendarSystem(
|
|
29
|
+
id: string,
|
|
30
|
+
source: string,
|
|
31
|
+
): CalendarSystem {
|
|
32
|
+
if (isCalendarSystem(id)) {
|
|
33
|
+
return id;
|
|
34
|
+
}
|
|
35
|
+
warnOnce(
|
|
36
|
+
`calendar-unsupported:${id}`,
|
|
37
|
+
source,
|
|
38
|
+
`The calendar "${id}" is not supported; showing Gregorian dates.`,
|
|
39
|
+
);
|
|
40
|
+
return 'gregory';
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* A calendar this runtime can show, else `gregory`. Calendars outside the
|
|
45
|
+
* Gregorian-aligned set need a `Temporal` that supports them. The fallback
|
|
46
|
+
* warns once for each calendar, on the server and in the browser.
|
|
47
|
+
*/
|
|
48
|
+
function availableCalendarOrGregorian(
|
|
49
|
+
calendar: CalendarSystem,
|
|
50
|
+
source: string,
|
|
51
|
+
): CalendarSystem {
|
|
52
|
+
if (isCalendarSystemAvailable(calendar)) {
|
|
53
|
+
return calendar;
|
|
54
|
+
}
|
|
55
|
+
warnOnce(
|
|
56
|
+
`calendar-unavailable:${calendar}`,
|
|
57
|
+
source,
|
|
58
|
+
`The "${calendar}" calendar needs a Temporal that supports it, and this ` +
|
|
59
|
+
'runtime has none; showing Gregorian dates. Load a Temporal polyfill ' +
|
|
60
|
+
"with every calendar, such as 'temporal-polyfill/full/global', on the " +
|
|
61
|
+
'server and in the browser.',
|
|
62
|
+
);
|
|
63
|
+
return 'gregory';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* The calendar that a caller names, without the provider: an unknown
|
|
68
|
+
* identifier, or one this runtime cannot show, becomes `gregory` and warns
|
|
69
|
+
* once in development.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveShownCalendar(
|
|
72
|
+
calendar: string,
|
|
73
|
+
source: string,
|
|
74
|
+
): CalendarSystem {
|
|
75
|
+
return availableCalendarOrGregorian(
|
|
76
|
+
resolveCalendarSystem(calendar, source),
|
|
77
|
+
source,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The calendar a date component shows: its own `calendar`, else the
|
|
83
|
+
* provider's resolved calendar, else `gregory`. It resolves during render, so
|
|
84
|
+
* the server and the browser agree when both have `Temporal` or both lack it.
|
|
85
|
+
*/
|
|
86
|
+
export function useCalendarSystem(
|
|
87
|
+
calendar: CalendarSystem | undefined,
|
|
88
|
+
source: string,
|
|
89
|
+
): CalendarSystem {
|
|
90
|
+
const context = use(InternationalizationContext);
|
|
91
|
+
return resolveShownCalendar(
|
|
92
|
+
calendar ?? context.calendar ?? 'gregory',
|
|
93
|
+
source,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
/**
|
|
3
|
+
* @file spinner-rotor.ts
|
|
4
|
+
* @input Spinner's shared rotor
|
|
5
|
+
* @output `@astryxdesign/core/internal/spinner-rotor`: SPINNER_ARC_FRACTION,
|
|
6
|
+
* spinnerRotorStyles and syncRotationPhase, re-exported by name for Lab's
|
|
7
|
+
* indeterminate CircularProgress
|
|
8
|
+
* @position An internal entry reserved for Astryx's own packages. It is
|
|
9
|
+
* undocumented, outside the public API and its compatibility promise, and
|
|
10
|
+
* versioned in lockstep with Core. The `@astryx/no-core-internal-import`
|
|
11
|
+
* lint rule allows it only in Core and Lab. Core components import the
|
|
12
|
+
* same modules by relative path. Named re-exports only.
|
|
13
|
+
*
|
|
14
|
+
* SYNC: When modified, update scripts/sync-exports.js.
|
|
15
|
+
*/
|
|
16
|
+
export {
|
|
17
|
+
SPINNER_ARC_FRACTION,
|
|
18
|
+
spinnerRotorStyles,
|
|
19
|
+
syncRotationPhase,
|
|
20
|
+
} from '../Spinner/spinnerRotor';
|
package/src/internal/touch.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file touch.ts
|
|
5
|
-
* @input The gesture core: the arena, the recognizers, and their geometry
|
|
5
|
+
* @input The gesture core: the arena, the recognizers, and their geometry;
|
|
6
|
+
* the pan, the motion animator and the motion math that Lab's
|
|
7
|
+
* useRefreshControl reads
|
|
6
8
|
* @output `@astryxdesign/core/internal/touch`: the gesture core's primitives
|
|
7
9
|
* for Lab components, re-exported by name
|
|
8
10
|
* @position An internal entry reserved for Astryx's own packages:
|
|
@@ -39,3 +41,34 @@ export {
|
|
|
39
41
|
export {LongPressGestureRecognizer} from '../gestures/LongPressGestureRecognizer';
|
|
40
42
|
export {TapGestureRecognizer} from '../gestures/TapGestureRecognizer';
|
|
41
43
|
export {DEFAULT_ENVIRONMENT} from '../gestures/types';
|
|
44
|
+
|
|
45
|
+
// Lab's useRefreshControl reads these: its pull's pan and the hook that
|
|
46
|
+
// starts it. It also reads the motion animator and math, and the scroll
|
|
47
|
+
// view's bounce spring, for its pull, settle and end. Its indicator fades
|
|
48
|
+
// along the settle's curve, and the motion-role parsers read the theme's
|
|
49
|
+
// tokens for its end.
|
|
50
|
+
export {PanGestureRecognizer} from '../gestures/PanGestureRecognizer';
|
|
51
|
+
export type {PanGestureRecognizerOptions} from '../gestures/PanGestureRecognizer';
|
|
52
|
+
export type {
|
|
53
|
+
GestureEventContext,
|
|
54
|
+
GestureTouch,
|
|
55
|
+
PointerKind,
|
|
56
|
+
} from '../gestures/types';
|
|
57
|
+
export {useGestureRecognizer} from '../gestures/useGestureRecognizer';
|
|
58
|
+
// The animator's internal factory. The public one, `createAnimator`, plays
|
|
59
|
+
// only the theme's state-change motion.
|
|
60
|
+
export {createMotionAnimator} from '../motion/animator';
|
|
61
|
+
export type {
|
|
62
|
+
Animator as MotionAnimator,
|
|
63
|
+
AnimatorOptions as MotionAnimatorOptions,
|
|
64
|
+
MotionCurve,
|
|
65
|
+
} from '../motion/animator';
|
|
66
|
+
export {cubicBezier} from '../motion/bezier';
|
|
67
|
+
export {mapProgress} from '../motion/progress';
|
|
68
|
+
export {parseCssEasing, parseMotionRoleValue} from '../motion/roles';
|
|
69
|
+
export {
|
|
70
|
+
rubberBand,
|
|
71
|
+
rubberBandInverse,
|
|
72
|
+
rubberBandSlope,
|
|
73
|
+
} from '../motion/rubberBand';
|
|
74
|
+
export {scroll} from '../motion/uikit/scroll';
|
|
@@ -314,3 +314,14 @@ scroll view coasts with 0.25 × the pan's velocity plus 0.75 × its value one
|
|
|
314
314
|
event earlier (four HID releases; `velocity.scrollReleaseWeight`, which a
|
|
315
315
|
pan's `scrollVelocity()` reads). On UIKit, Reduce Motion with Prefer Cross-Fade changes
|
|
316
316
|
nothing on a picker; the Wheel follows design:reduced-motion instead.
|
|
317
|
+
|
|
318
|
+
## Menus (UIMenu)
|
|
319
|
+
|
|
320
|
+
Probe: the UIKit lab host app with a UIButton whose `UIMenu` is its primary
|
|
321
|
+
action (`showsMenuAsPrimaryAction`), three to twelve items, on a plain view
|
|
322
|
+
and inside a UIScrollView; the gesture-state, presentation-modifier,
|
|
323
|
+
display-link and feedback hooks; real HID touches.
|
|
324
|
+
|
|
325
|
+
| ID | Scene | Gesture | Extract | Method |
|
|
326
|
+
| ----- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ------ |
|
|
327
|
+
| M-MN2 | button on a plain view | hold until the menu is open, then lift still; move 8 pt down, 8 pt right, 12 pt down, (7, 7), (8, 8) and lift; move 6 pt before the open and 6 pt after | row picked or not; handoff and list-selection recognizer states; highlighted row per frame: threshold, metric, where it is counted from | C |
|