@astryxdesign/core 0.7.8 → 0.7.9-canary.0200dfe
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 +37 -3
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +40 -8
- package/dist/BottomSheet/bottomSheetStack.d.ts.map +1 -1
- package/dist/BottomSheet/bottomSheetStack.js +4 -3
- 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 +2 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +74 -18
- package/dist/CheckboxInput/CheckboxRowPressContext.d.ts +2 -0
- package/dist/CheckboxInput/CheckboxRowPressContext.d.ts.map +1 -0
- package/dist/CheckboxInput/CheckboxRowPressContext.js +20 -0
- package/dist/CheckboxList/CheckboxListItem.d.ts +2 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +40 -14
- 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/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +2 -0
- package/dist/DateInput/DateInput.d.ts +37 -6
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +97 -124
- package/dist/DateInput/MonthScroller.d.ts +5 -2
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +26 -29
- package/dist/DateInput/MonthYearWheels.d.ts +10 -1
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
- package/dist/DateInput/MonthYearWheels.js +54 -42
- package/dist/DateInput/PickerWheel.d.ts.map +1 -1
- package/dist/DateInput/PickerWheel.js +7 -1
- package/dist/DateInput/TouchDateField.d.ts +1 -1
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +26 -21
- package/dist/DateInput/monthGeometry.d.ts +42 -8
- package/dist/DateInput/monthGeometry.d.ts.map +1 -1
- package/dist/DateInput/monthGeometry.js +81 -7
- package/dist/DateInput/useCalendarPresentation.d.ts +10 -0
- package/dist/DateInput/useCalendarPresentation.d.ts.map +1 -0
- package/dist/DateInput/useCalendarPresentation.js +32 -0
- package/dist/DateInput/useTypedDate.d.ts +92 -0
- package/dist/DateInput/useTypedDate.d.ts.map +1 -0
- package/dist/DateInput/useTypedDate.js +269 -0
- package/dist/DateInput/wheelStrip.js +2 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts +17 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +15 -8
- package/dist/DateTimeInput/DateTimeInput.d.ts +26 -3
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +92 -88
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +26 -20
- package/dist/Dialog/Dialog.d.ts +2 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +14 -3
- 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 +11 -8
- 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 +6 -18
- 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/InputGroupText.d.ts +2 -1
- package/dist/InputGroup/InputGroupText.d.ts.map +1 -1
- package/dist/InputGroup/InputGroupText.js +2 -1
- 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 +20 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +97 -29
- package/dist/Item/ItemListRowContext.d.ts +2 -0
- package/dist/Item/ItemListRowContext.d.ts.map +1 -0
- package/dist/Item/ItemListRowContext.js +16 -0
- 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/outsidePress.d.ts +4 -0
- package/dist/Layer/outsidePress.d.ts.map +1 -1
- package/dist/Layer/outsidePress.js +18 -1
- 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/useBackdropPress.d.ts +8 -0
- package/dist/Layer/useBackdropPress.d.ts.map +1 -1
- package/dist/Layer/useBackdropPress.js +31 -2
- 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/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +4 -0
- 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 +13 -10
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.js +81 -11
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -0
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +1 -0
- package/dist/List/ListItem.d.ts +5 -4
- package/dist/List/ListItem.d.ts.map +1 -1
- package/dist/List/ListItem.js +45 -9
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +56 -39
- 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/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +6 -9
- 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/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +7 -2
- 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 +16 -3
- package/dist/Resizable/ResizeHandle.d.ts +5 -5
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +44 -5
- package/dist/Resizable/resizablePane.d.ts +58 -0
- package/dist/Resizable/resizablePane.d.ts.map +1 -0
- package/dist/Resizable/resizablePane.js +137 -0
- package/dist/Resizable/useResizable.d.ts +7 -0
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +13 -0
- package/dist/SegmentedControl/useSegmentedSelectionMotion.js +3 -3
- 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/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +51 -10
- package/dist/SideNav/SideNav.d.ts +9 -3
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +45 -10
- package/dist/Slider/sliderTouchController.js +2 -2
- 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/Switch/useSwitchTouch.js +4 -4
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +5 -1
- 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 +164 -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/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +2 -1
- package/dist/animator/createAnimator.js +2 -2
- package/dist/astryx.css +362 -325
- 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/computeOverflow.d.ts +2 -0
- package/dist/hooks/computeOverflow.d.ts.map +1 -1
- package/dist/hooks/computeOverflow.js +1 -1
- 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 +36 -7
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +63 -14
- 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/useKeyboardHighlight.d.ts +17 -0
- package/dist/hooks/useKeyboardHighlight.d.ts.map +1 -0
- package/dist/hooks/useKeyboardHighlight.js +38 -0
- package/dist/hooks/useMediaQuery.d.ts +2 -1
- package/dist/hooks/useMediaQuery.d.ts.map +1 -1
- package/dist/hooks/useMediaQuery.js +37 -12
- 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/useOverflow.d.ts +10 -0
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +214 -23
- 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 +23 -3
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +8 -3
- package/dist/i18n/generated-english/DateInput/DateInput.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/DateInput/DateInput.generated.js +0 -1
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts +8 -0
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/DateInput/useTypedDate.generated.js +16 -0
- package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.d.ts.map +1 -1
- package/dist/i18n/generated-english/DateTimeInput/DateTimeInput.generated.js +0 -1
- 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 +5 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +5 -0
- package/dist/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/calendar-system.d.ts +18 -0
- package/dist/internal/calendar-system.d.ts.map +1 -0
- package/dist/internal/calendar-system.js +19 -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 +20 -2
- package/dist/internal/touch.d.ts.map +1 -1
- package/dist/internal/touch.js +29 -3
- package/dist/motion/animator.d.ts +5 -5
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +7 -6
- 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 +142 -0
- package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/press.stylex.js +101 -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/calendarDateParser.d.ts +110 -0
- package/dist/utils/calendarDateParser.d.ts.map +1 -0
- package/dist/utils/calendarDateParser.js +1225 -0
- package/dist/utils/calendarSystem.d.ts +176 -0
- package/dist/utils/calendarSystem.d.ts.map +1 -0
- package/dist/utils/calendarSystem.js +569 -0
- package/dist/utils/coarsePointer.d.ts +5 -0
- package/dist/utils/coarsePointer.d.ts.map +1 -1
- package/dist/utils/coarsePointer.js +22 -13
- 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/focusReturn.d.ts +34 -13
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +64 -17
- package/dist/utils/hitArea.d.ts +8 -1
- package/dist/utils/hitArea.d.ts.map +1 -1
- package/dist/utils/hitArea.js +99 -9
- package/dist/utils/inputPresentation.d.ts +9 -1
- package/dist/utils/inputPresentation.d.ts.map +1 -1
- package/dist/utils/inputPresentation.js +15 -1
- 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 +38 -7
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +92 -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.d.ts +30 -0
- package/dist/utils/touchHitArea.d.ts.map +1 -0
- package/dist/utils/touchHitArea.js +167 -0
- package/dist/utils/touchHitArea.stylex.d.ts +38 -0
- package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
- package/dist/utils/touchHitArea.stylex.js +48 -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 +21 -1
- package/locales/pseudo.json +15 -0
- package/package.json +15 -4
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/BottomSheet/BottomSheet.tsx +45 -3
- package/src/BottomSheet/BottomSheetPanel.tsx +64 -7
- package/src/BottomSheet/bottomSheetStack.ts +4 -3
- 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 +5 -4
- package/src/CheckboxInput/CheckboxInput.tsx +105 -20
- package/src/CheckboxInput/CheckboxRowPressContext.ts +22 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +9 -0
- package/src/CheckboxList/CheckboxListItem.doc.mjs +3 -3
- package/src/CheckboxList/CheckboxListItem.tsx +35 -14
- package/src/ClickableCard/ClickableCard.tsx +8 -1
- package/src/ContextMenu/ContextMenu.tsx +2 -0
- package/src/DateInput/DateInput.doc.mjs +45 -12
- package/src/DateInput/DateInput.tsx +165 -179
- package/src/DateInput/MonthScroller.tsx +39 -37
- package/src/DateInput/MonthYearWheels.tsx +68 -47
- package/src/DateInput/PickerWheel.tsx +7 -2
- package/src/DateInput/TouchDateField.tsx +45 -17
- package/src/DateInput/monthGeometry.ts +110 -8
- package/src/DateInput/useCalendarPresentation.ts +64 -0
- package/src/DateInput/useTypedDate.ts +469 -0
- package/src/DateInput/wheelStrip.ts +2 -2
- package/src/DateRangeInput/DateRangeInput.doc.mjs +9 -0
- package/src/DateRangeInput/DateRangeInput.tsx +43 -9
- package/src/DateTimeInput/DateTimeInput.doc.mjs +42 -9
- package/src/DateTimeInput/DateTimeInput.tsx +138 -148
- package/src/DateTimeInput/TouchDateTimeField.tsx +31 -16
- package/src/Dialog/Dialog.doc.mjs +1 -1
- package/src/Dialog/Dialog.tsx +14 -2
- 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 +31 -7
- 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/Icon/useIcon.doc.mjs +94 -0
- package/src/InfoTip/InfoTip.doc.mjs +26 -2
- package/src/InfoTip/InfoTip.tsx +6 -27
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/InputGroupText.doc.mjs +45 -3
- package/src/InputGroup/InputGroupText.tsx +2 -1
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Item/Item.tsx +139 -35
- package/src/Item/ItemListRowContext.tsx +18 -0
- package/src/Layer/holdEntranceInput.ts +84 -0
- package/src/Layer/inputHold.ts +734 -0
- package/src/Layer/outsidePress.ts +18 -1
- package/src/Layer/preserveAnimations.ts +12 -275
- package/src/Layer/useBackdropPress.ts +41 -1
- package/src/Layer/useLayer.tsx +77 -4
- package/src/Layer/useTouchTrigger.ts +4 -0
- package/src/Layout/LayoutContent.doc.mjs +6 -3
- package/src/Layout/LayoutContent.tsx +10 -4
- package/src/Layout/LayoutPanel.doc.mjs +14 -11
- package/src/Layout/LayoutPanel.tsx +113 -16
- package/src/Lightbox/Lightbox.tsx +4 -0
- package/src/List/List.doc.mjs +10 -1
- package/src/List/List.tsx +5 -0
- package/src/List/ListItem.tsx +63 -8
- package/src/Markdown/parser.ts +65 -42
- 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/MultiSelector/MultiSelector.tsx +7 -17
- package/src/NumberInput/NumberInput.doc.mjs +1 -1
- package/src/NumberInput/NumberInput.tsx +259 -11
- package/src/OverflowList/OverflowList.tsx +15 -9
- 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 +16 -6
- package/src/Resizable/Resizable.doc.mjs +40 -12
- package/src/Resizable/ResizeHandle.tsx +68 -6
- package/src/Resizable/resizablePane.ts +179 -0
- package/src/Resizable/useResizable.ts +15 -0
- package/src/SegmentedControl/useSegmentedSelectionMotion.ts +3 -3
- package/src/SelectableCard/SelectableCard.tsx +8 -1
- package/src/Selector/Selector.tsx +83 -8
- package/src/SideNav/SideNav.doc.mjs +2 -2
- package/src/SideNav/SideNav.tsx +87 -12
- package/src/Slider/sliderTouchController.ts +2 -2
- 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/Switch/useSwitchTouch.ts +4 -4
- package/src/TabList/Tab.tsx +5 -1
- 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 +180 -80
- package/src/TreeList/TreeListItem.tsx +36 -2
- package/src/Typeahead/BaseTypeahead.tsx +2 -0
- package/src/animator/createAnimator.ts +3 -3
- 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/computeOverflow.ts +1 -1
- 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 +93 -15
- package/src/hooks/useFocusTrap.ts +268 -151
- package/src/hooks/useKeyboardHighlight.ts +71 -0
- package/src/hooks/useMediaQuery.ts +41 -12
- package/src/hooks/useMenuPress.ts +118 -11
- package/src/hooks/useOverflow.ts +321 -75
- 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 +35 -3
- package/src/i18n/generated-english/DateInput/DateInput.generated.ts +0 -1
- package/src/i18n/generated-english/DateInput/useTypedDate.generated.ts +17 -0
- package/src/i18n/generated-english/DateTimeInput/DateTimeInput.generated.ts +0 -1
- package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
- package/src/i18n/generated-locales/en.generated.ts +7 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +7 -0
- package/src/i18n/index.ts +2 -0
- package/src/i18n/useCalendarSystem.ts +95 -0
- package/src/internal/calendar-system.ts +26 -0
- package/src/internal/spinner-rotor.ts +20 -0
- package/src/internal/touch.ts +43 -2
- package/src/motion/MEASUREMENTS.md +11 -0
- package/src/motion/README.md +3 -3
- package/src/motion/animator.ts +7 -7
- 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 +261 -0
- package/src/theme/themeMotion.ts +3 -2
- package/src/theme/tokens.stylex.ts +1 -1
- package/src/utils/calendarDateParser.ts +1385 -0
- package/src/utils/calendarSystem.ts +832 -0
- package/src/utils/coarsePointer.ts +27 -14
- package/src/utils/flatTree.ts +15 -3
- package/src/utils/focusReturn.ts +78 -18
- package/src/utils/hitArea.ts +138 -9
- package/src/utils/inputPresentation.ts +21 -1
- package/src/utils/inputStream.ts +47 -10
- package/src/utils/interactionOverlay.stylex.ts +19 -22
- package/src/utils/plainDate.ts +130 -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 +56 -0
- package/src/utils/touchHitArea.ts +177 -0
- package/src/utils/triggerFocus.ts +17 -4
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MonthScroller.tsx
|
|
7
|
-
* @input
|
|
7
|
+
* @input A calendar's month model, month bounds, selected value, constraints,
|
|
8
|
+
* week start
|
|
8
9
|
* @output Exports MonthScroller and MonthScrollerHandle
|
|
9
10
|
* @position Internal component; consumed by TouchDateField.tsx
|
|
10
11
|
*
|
|
@@ -29,22 +30,23 @@
|
|
|
29
30
|
* - /packages/core/src/DateInput/DateInput.doc.mjs
|
|
30
31
|
* - /packages/core/src/DateInput/DateInputTouch.test.tsx
|
|
31
32
|
*/
|
|
32
|
-
import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';
|
|
33
|
+
import { useCallback, useEffect, useImperativeHandle, useLayoutEffect, useRef, useMemo, useState } from 'react';
|
|
33
34
|
import { flushSync } from 'react-dom';
|
|
34
35
|
import * as stylex from '@stylexjs/stylex';
|
|
35
|
-
import { useCalendarDays } from "../Calendar/
|
|
36
|
-
import { useDirection
|
|
36
|
+
import { useCalendarDays } from "../Calendar/hooks/useCalendarDays.js";
|
|
37
|
+
import { useDirection } from "../i18n/useDirection.js";
|
|
38
|
+
import { useLocale } from "../i18n/useLocale.js";
|
|
37
39
|
import "../theme/tokens.stylex.js";
|
|
38
40
|
import { colorVars, radiusVars, fontWeightVars, typeScaleVars, durationVars, borderVars } from "../theme/tokens.stylex.js";
|
|
39
|
-
import { focusOutlineStyles } from "../utils/
|
|
40
|
-
import { plainDateFormatDayNumber,
|
|
41
|
-
import { plainDateAddDays, plainDateDayOfWeek, plainDateFormat, plainDateIsEqual, plainDateToISO, DATE_FORMAT_WITH_WEEKDAY } from "../utils/index.js";
|
|
41
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
42
|
+
import { plainDateAddDays, plainDateDayOfWeek, plainDateFormatDayNumber, plainDateIsEqual, plainDateToISO, DATE_FORMAT_WITH_WEEKDAY } from "../utils/plainDate.js";
|
|
42
43
|
import { playReducedMotionDip, reducedMotionFade } from "../motion/reducedMotion.js";
|
|
44
|
+
import { calendarYearMonthOf, formatCalendarDate, formatCalendarMonthLabel, isInCalendarMonth } from "../utils/calendarSystem.js";
|
|
43
45
|
import "./tokens.stylex.js";
|
|
44
46
|
import { dateInputTouchSizes, dateInputTouchGeometry } from "./tokens.stylex.js";
|
|
45
47
|
import { useOwnScrollGesture } from "./useOwnScrollGesture.js";
|
|
46
48
|
import { useScrollSettle } from "./useScrollSettle.js";
|
|
47
|
-
import {
|
|
49
|
+
import { paneWindow, rowAtScrollOffset, rowsIn, scrollOffsetForRow } from "./monthGeometry.js";
|
|
48
50
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
49
51
|
const DAY_SIZE = dateInputTouchSizes.daySize;
|
|
50
52
|
|
|
@@ -131,6 +133,7 @@ const dynamic = {
|
|
|
131
133
|
*/
|
|
132
134
|
export function MonthScroller({
|
|
133
135
|
handleRef,
|
|
136
|
+
monthModel,
|
|
134
137
|
minMonthIndex,
|
|
135
138
|
maxMonthIndex,
|
|
136
139
|
initialMonthIndex,
|
|
@@ -570,16 +573,16 @@ export function MonthScroller({
|
|
|
570
573
|
// by month is PageUp/PageDown; everything else is the APG grid vocabulary.
|
|
571
574
|
const moveFocus = useCallback((from, deltaDays) => {
|
|
572
575
|
const next = plainDateAddDays(from, deltaDays);
|
|
573
|
-
const nextIndex =
|
|
576
|
+
const nextIndex = monthModel.indexOf(next);
|
|
574
577
|
if (nextIndex < minMonthIndex || nextIndex > maxMonthIndex) {
|
|
575
578
|
return;
|
|
576
579
|
}
|
|
577
580
|
shouldRestoreFocusRef.current = true;
|
|
578
581
|
setFocusedDate(next);
|
|
579
|
-
if (nextIndex !==
|
|
582
|
+
if (nextIndex !== monthModel.indexOf(from)) {
|
|
580
583
|
scrollToMonth(nextIndex, 'smooth');
|
|
581
584
|
}
|
|
582
|
-
}, [minMonthIndex, maxMonthIndex, scrollToMonth]);
|
|
585
|
+
}, [monthModel, minMonthIndex, maxMonthIndex, scrollToMonth]);
|
|
583
586
|
const handleKeyDown = useCallback((event, date) => {
|
|
584
587
|
// Column within the displayed week, which is what Home/End move to —
|
|
585
588
|
// not the day of the month.
|
|
@@ -656,6 +659,7 @@ export function MonthScroller({
|
|
|
656
659
|
children: /*#__PURE__*/_jsx("div", {
|
|
657
660
|
...stylex.props(styles.spacer, dynamic.spacer(rowCount * paneSize)),
|
|
658
661
|
children: paneSize > 0 && rowsIn(visibleRows).map(row => /*#__PURE__*/_jsx(MonthPane, {
|
|
662
|
+
monthModel: monthModel,
|
|
659
663
|
monthIndex: minMonthIndex + row,
|
|
660
664
|
insetInlineStart: row * paneSize,
|
|
661
665
|
inlineSize: paneSize,
|
|
@@ -680,6 +684,7 @@ MonthScroller.displayName = 'MonthScroller';
|
|
|
680
684
|
* so each day instead carries its weekday in its accessible name.
|
|
681
685
|
*/
|
|
682
686
|
function MonthPane({
|
|
687
|
+
monthModel,
|
|
683
688
|
monthIndex,
|
|
684
689
|
insetInlineStart,
|
|
685
690
|
inlineSize,
|
|
@@ -694,40 +699,32 @@ function MonthPane({
|
|
|
694
699
|
}) {
|
|
695
700
|
const locale = useLocale();
|
|
696
701
|
const {
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
702
|
+
calendar
|
|
703
|
+
} = monthModel;
|
|
704
|
+
const month = useMemo(() => monthModel.monthAt(monthIndex), [monthModel, monthIndex]);
|
|
700
705
|
const {
|
|
701
706
|
weeks
|
|
702
707
|
} = useCalendarDays({
|
|
703
|
-
|
|
704
|
-
|
|
708
|
+
...calendarYearMonthOf(calendar, month),
|
|
709
|
+
calendar,
|
|
705
710
|
weekStartsOn,
|
|
706
711
|
// Always six rows: a variable grid would make pane heights differ, and
|
|
707
712
|
// with them every snap offset below this month.
|
|
708
713
|
hasVariableRowCount: false
|
|
709
714
|
});
|
|
710
|
-
const monthLabel =
|
|
711
|
-
year,
|
|
712
|
-
month,
|
|
713
|
-
day: 1
|
|
714
|
-
}, locale);
|
|
715
|
+
const monthLabel = formatCalendarMonthLabel(calendar, month, locale);
|
|
715
716
|
|
|
716
717
|
// Exactly one day per pane is tab-reachable, so Tab moves through the
|
|
717
718
|
// picker rather than through 42 buttons: the focused day if the keyboard
|
|
718
719
|
// owns one, else the selection, else the first of the month.
|
|
719
720
|
const tabbableISO = (() => {
|
|
720
|
-
if (focusedDate != null && focusedDate
|
|
721
|
+
if (focusedDate != null && isInCalendarMonth(focusedDate, month)) {
|
|
721
722
|
return plainDateToISO(focusedDate);
|
|
722
723
|
}
|
|
723
|
-
if (selectedDate != null && selectedDate
|
|
724
|
+
if (selectedDate != null && isInCalendarMonth(selectedDate, month)) {
|
|
724
725
|
return plainDateToISO(selectedDate);
|
|
725
726
|
}
|
|
726
|
-
return plainDateToISO(
|
|
727
|
-
year,
|
|
728
|
-
month,
|
|
729
|
-
day: 1
|
|
730
|
-
});
|
|
727
|
+
return plainDateToISO(month.start);
|
|
731
728
|
})();
|
|
732
729
|
return /*#__PURE__*/_jsx("div", {
|
|
733
730
|
role: "grid",
|
|
@@ -759,7 +756,7 @@ function MonthPane({
|
|
|
759
756
|
"data-date": day.iso,
|
|
760
757
|
"data-outside": day.isOutside ? '' : undefined,
|
|
761
758
|
tabIndex: day.iso === tabbableISO ? 0 : -1,
|
|
762
|
-
"aria-label":
|
|
759
|
+
"aria-label": formatCalendarDate(calendar, day.date, DATE_FORMAT_WITH_WEEKDAY, locale),
|
|
763
760
|
"aria-disabled": isDisabled || undefined,
|
|
764
761
|
"aria-current": isToday ? 'date' : undefined,
|
|
765
762
|
onClick: () => {
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
import { type MonthModel } from './monthGeometry.js';
|
|
1
2
|
export interface MonthYearWheelsProps {
|
|
3
|
+
/** The calendar's months, by index. */
|
|
4
|
+
monthModel: MonthModel;
|
|
2
5
|
/** The month the wheels currently show. */
|
|
3
6
|
monthIndex: number;
|
|
4
7
|
/** First reachable month. */
|
|
@@ -13,11 +16,17 @@ export interface MonthYearWheelsProps {
|
|
|
13
16
|
yearLabel: string;
|
|
14
17
|
/** False while the panel is hidden. */
|
|
15
18
|
isActive?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* The day of the month the picker keeps, such as the selected date's. A year
|
|
21
|
+
* that spans an era change is labeled with the era of this day in the
|
|
22
|
+
* selected month. The first day of the month applies when it is absent.
|
|
23
|
+
*/
|
|
24
|
+
keptDay?: number;
|
|
16
25
|
}
|
|
17
26
|
/**
|
|
18
27
|
* Month and year wheels, bounded by the same range as the scroller.
|
|
19
28
|
*/
|
|
20
|
-
export declare function MonthYearWheels({ monthIndex, minMonthIndex, maxMonthIndex, onChange, monthLabel, yearLabel, isActive, }: MonthYearWheelsProps): import("react").JSX.Element;
|
|
29
|
+
export declare function MonthYearWheels({ monthModel, monthIndex, minMonthIndex, maxMonthIndex, onChange, monthLabel, yearLabel, isActive, keptDay, }: MonthYearWheelsProps): import("react").JSX.Element;
|
|
21
30
|
export declare namespace MonthYearWheels {
|
|
22
31
|
var displayName: string;
|
|
23
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonthYearWheels.d.ts","sourceRoot":"","sources":["../../src/DateInput/MonthYearWheels.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MonthYearWheels.d.ts","sourceRoot":"","sources":["../../src/DateInput/MonthYearWheels.tsx"],"names":[],"mappings":"AAqCA,OAAO,EAAa,KAAK,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAU5D,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,UAAU,EAAE,UAAU,CAAC;IACvB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,4BAA4B;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAe,EACf,OAAW,GACZ,EAAE,oBAAoB,+BAmFtB;yBA7Fe,eAAe"}
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MonthYearWheels.tsx
|
|
7
|
-
* @input A month index, the reachable month bounds,
|
|
8
|
-
*
|
|
7
|
+
* @input A calendar's month model, a month index, the reachable month bounds,
|
|
8
|
+
* a change callback
|
|
9
|
+
* @output Exports MonthYearWheels — the month wheel of a calendar year and the
|
|
10
|
+
* year wheel with era labels
|
|
9
11
|
* @position Internal component; consumed by TouchDateField.tsx
|
|
10
12
|
*
|
|
11
13
|
* The shortcut out of continuous scrolling. Scrolling is the right gesture for
|
|
@@ -23,72 +25,81 @@
|
|
|
23
25
|
*/
|
|
24
26
|
import { useMemo } from 'react';
|
|
25
27
|
import * as stylex from '@stylexjs/stylex';
|
|
26
|
-
import { useLocale } from "../i18n/
|
|
27
|
-
import {
|
|
28
|
+
import { useLocale } from "../i18n/useLocale.js";
|
|
29
|
+
import { calendarYearSpansEras, formatCalendarMonthName, formatCalendarYearLabel } from "../utils/calendarSystem.js";
|
|
28
30
|
import "../theme/tokens.stylex.js";
|
|
29
31
|
import { spacingVars } from "../theme/tokens.stylex.js";
|
|
30
32
|
import "./tokens.stylex.js";
|
|
31
33
|
import { dateInputTouchGeometry } from "./tokens.stylex.js";
|
|
32
34
|
import { Wheel } from "./Wheel.js";
|
|
33
|
-
import {
|
|
35
|
+
import { clampIndex } from "./monthGeometry.js";
|
|
34
36
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
35
37
|
/**
|
|
36
38
|
* Month and year wheels, bounded by the same range as the scroller.
|
|
37
39
|
*/
|
|
38
40
|
export function MonthYearWheels({
|
|
41
|
+
monthModel,
|
|
39
42
|
monthIndex,
|
|
40
43
|
minMonthIndex,
|
|
41
44
|
maxMonthIndex,
|
|
42
45
|
onChange,
|
|
43
46
|
monthLabel,
|
|
44
47
|
yearLabel,
|
|
45
|
-
isActive = true
|
|
48
|
+
isActive = true,
|
|
49
|
+
keptDay = 1
|
|
46
50
|
}) {
|
|
47
51
|
const locale = useLocale();
|
|
52
|
+
const {
|
|
53
|
+
calendar
|
|
54
|
+
} = monthModel;
|
|
48
55
|
const {
|
|
49
56
|
year,
|
|
50
57
|
month
|
|
51
|
-
} =
|
|
52
|
-
|
|
53
|
-
// Day 15 of a fixed year: no timezone can push it into an adjacent month
|
|
54
|
-
// the way day 1 or day 31 can.
|
|
55
|
-
//
|
|
56
|
-
// `plainDateFormat` rather than a raw `Intl.DateTimeFormat`, which the
|
|
57
|
-
// shared lint rule forbids and which would duplicate the format vocabulary
|
|
58
|
-
// besides. Recompute when the provider locale changes so the wheel labels
|
|
59
|
-
// stay in sync with the field and calendar.
|
|
60
|
-
const monthNames = useMemo(() => Array.from({
|
|
61
|
-
length: 12
|
|
62
|
-
}, (_, index) => plainDateFormat({
|
|
63
|
-
year: 2021,
|
|
64
|
-
month: index + 1,
|
|
65
|
-
day: 15
|
|
66
|
-
}, DATE_FORMAT_MONTH_ONLY, locale)), [locale]);
|
|
58
|
+
} = monthModel.yearMonthAt(monthIndex);
|
|
67
59
|
|
|
68
60
|
// Months outside the range stay on the wheel rather than vanishing: a list
|
|
69
|
-
// whose length
|
|
70
|
-
|
|
71
|
-
|
|
61
|
+
// whose length changed with the range would jump under the finger. Only the
|
|
62
|
+
// calendar changes its length, for a year with a leap month.
|
|
63
|
+
const monthOptions = useMemo(() => Array.from({
|
|
64
|
+
length: monthModel.monthsInYear(year)
|
|
65
|
+
}, (_, index) => {
|
|
66
|
+
const candidate = monthModel.indexOfYearMonth(year, index + 1);
|
|
72
67
|
return {
|
|
73
68
|
value: index + 1,
|
|
74
|
-
label:
|
|
69
|
+
label: formatCalendarMonthName(calendar, monthModel.monthAt(candidate), locale),
|
|
75
70
|
isDisabled: candidate < minMonthIndex || candidate > maxMonthIndex
|
|
76
71
|
};
|
|
77
|
-
}), [
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
72
|
+
}), [monthModel, calendar, year, locale, minMonthIndex, maxMonthIndex]);
|
|
73
|
+
|
|
74
|
+
// Every listed year holds a reachable month: the list runs from the year of
|
|
75
|
+
// the first reachable month to the year of the last.
|
|
76
|
+
const years = useMemo(() => {
|
|
77
|
+
const first = monthModel.yearMonthAt(minMonthIndex).year;
|
|
78
|
+
const last = monthModel.yearMonthAt(maxMonthIndex).year;
|
|
79
|
+
const result = [];
|
|
82
80
|
for (let candidate = first; candidate <= last; candidate++) {
|
|
83
|
-
|
|
81
|
+
result.push({
|
|
84
82
|
value: candidate,
|
|
85
|
-
label:
|
|
86
|
-
|
|
87
|
-
isDisabled: toMonthIndex(candidate, 12) < minMonthIndex || toMonthIndex(candidate, 1) > maxMonthIndex
|
|
83
|
+
label: formatCalendarYearLabel(calendar, candidate, locale),
|
|
84
|
+
spansEras: calendarYearSpansEras(calendar, candidate, locale)
|
|
88
85
|
});
|
|
89
86
|
}
|
|
90
|
-
return
|
|
91
|
-
}, [minMonthIndex, maxMonthIndex]);
|
|
87
|
+
return result;
|
|
88
|
+
}, [monthModel, calendar, locale, minMonthIndex, maxMonthIndex]);
|
|
89
|
+
|
|
90
|
+
// A year with an era change takes the era of the shown date, as iOS does.
|
|
91
|
+
// Its row text changes as the month turns. Each row keeps one fixed size.
|
|
92
|
+
const yearOptions = useMemo(() => years.map(({
|
|
93
|
+
value,
|
|
94
|
+
label,
|
|
95
|
+
spansEras
|
|
96
|
+
}) => ({
|
|
97
|
+
value,
|
|
98
|
+
label: spansEras ? formatCalendarYearLabel(calendar, value, locale, {
|
|
99
|
+
month,
|
|
100
|
+
day: keptDay
|
|
101
|
+
}) : label
|
|
102
|
+
})), [years, calendar, locale, month, keptDay]);
|
|
92
103
|
return /*#__PURE__*/_jsxs("div", {
|
|
93
104
|
...{
|
|
94
105
|
className: "x78zum5 xm8gem x1txdalj"
|
|
@@ -98,17 +109,18 @@ export function MonthYearWheels({
|
|
|
98
109
|
options: monthOptions,
|
|
99
110
|
value: month,
|
|
100
111
|
isActive: isActive,
|
|
101
|
-
onChange: nextMonth => onChange(
|
|
112
|
+
onChange: nextMonth => onChange(monthModel.indexOfYearMonth(year, nextMonth))
|
|
102
113
|
}), /*#__PURE__*/_jsx(Wheel, {
|
|
103
114
|
label: yearLabel,
|
|
104
115
|
options: yearOptions,
|
|
105
116
|
value: year,
|
|
106
117
|
isActive: isActive,
|
|
107
118
|
onChange: nextYear => {
|
|
108
|
-
//
|
|
109
|
-
// year
|
|
110
|
-
|
|
111
|
-
|
|
119
|
+
// The same month of the new year, or its common counterpart when
|
|
120
|
+
// the new year lacks a leap month (Adar I becomes Adar). A year
|
|
121
|
+
// change can still land outside the range; clamp to it.
|
|
122
|
+
const candidate = monthModel.shiftYears(monthIndex, nextYear - year);
|
|
123
|
+
onChange(clampIndex(candidate, minMonthIndex, maxMonthIndex));
|
|
112
124
|
}
|
|
113
125
|
})]
|
|
114
126
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PickerWheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/PickerWheel.tsx"],"names":[],"mappings":"AA2DA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"PickerWheel.d.ts","sourceRoot":"","sources":["../../src/DateInput/PickerWheel.tsx"],"names":[],"mappings":"AA2DA,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AAgIxB;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAe,EACf,GAAG,GACJ,EAAE,UAAU,+BAuiBZ;yBA9iBe,WAAW"}
|
|
@@ -46,6 +46,12 @@ const ROW_HEIGHT = WHEEL_ROW_HEIGHT;
|
|
|
46
46
|
const UIKIT_SCALE = ROW_HEIGHT / picker.geometry.rowHeight;
|
|
47
47
|
/** UIKit's rubber band dimension for the picker's table, at that pitch. */
|
|
48
48
|
const RUBBER_BAND_DIMENSION = picker.geometry.rubberBandDimension * UIKIT_SCALE;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The rows' opacity at the column's edges. At 0.7 the row four from the band
|
|
52
|
+
* keeps 5:1 or more in every shipped theme, a margin over WCAG AA's 4.5:1.
|
|
53
|
+
*/
|
|
54
|
+
const FADE_FLOOR = 0.7;
|
|
49
55
|
const _temp = {
|
|
50
56
|
k87sOh: "x5mnzd7",
|
|
51
57
|
"$$css": true
|
|
@@ -587,7 +593,7 @@ export function PickerWheel({
|
|
|
587
593
|
children: /*#__PURE__*/_jsxs("div", {
|
|
588
594
|
"data-wheel-fade": "",
|
|
589
595
|
...{
|
|
590
|
-
className: "x10l6tqk x10a8y8t x47corl
|
|
596
|
+
className: "x10l6tqk x10a8y8t x47corl xsshixw"
|
|
591
597
|
},
|
|
592
598
|
children: [/*#__PURE__*/_jsx("div", {
|
|
593
599
|
"aria-hidden": "true",
|
|
@@ -3,7 +3,7 @@ import type { DateInputProps } from './DateInput.js';
|
|
|
3
3
|
* The touch surface. Takes `DateInput`'s props verbatim; see
|
|
4
4
|
* {@link DateInput} for when it is chosen over the desktop control.
|
|
5
5
|
*/
|
|
6
|
-
export declare function TouchDateField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder: placeholderFromProps, size: sizeProp, status, statusVariant, labelTooltip, hasClear, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, format, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateInputProps): import("react").JSX.Element;
|
|
6
|
+
export declare function TouchDateField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, placeholder: placeholderFromProps, size: sizeProp, status, statusVariant, labelTooltip, hasClear, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, format, calendar: calendarProp, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateInputProps): import("react").JSX.Element;
|
|
7
7
|
export declare namespace TouchDateField {
|
|
8
8
|
var displayName: string;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"TouchDateField.d.ts","sourceRoot":"","sources":["../../src/DateInput/TouchDateField.tsx"],"names":[],"mappings":"AAiEA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AA0ehD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,SAAiB,EACjB,GAAG,EACH,GAAG,EACH,eAAe,EACf,WAAW,EAAE,oBAAoB,EACjC,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,aAA0B,EAC1B,YAAY,EACZ,QAAgB,EAIhB,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,MAAoB,EACpB,QAAQ,EAAE,YAAY,EACtB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,cAAc,+BA+wBhB;yBApzBe,cAAc"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file TouchDateField.tsx
|
|
7
|
-
* @input Uses React, Field, BottomSheet, Button, Icon, Calendar hooks, MonthScroller, MonthYearWheels
|
|
7
|
+
* @input Uses React, Field, BottomSheet, Button, Icon, Calendar hooks, the resolved calendar, MonthScroller, MonthYearWheels
|
|
8
8
|
* @output Exports TouchDateField — the touch surface behind DateInput
|
|
9
9
|
* @position Internal component; consumed by DateInput.tsx
|
|
10
10
|
*
|
|
@@ -70,8 +70,10 @@ import "../theme/tokens.stylex.js";
|
|
|
70
70
|
import { colorVars, spacingVars, radiusVars, sizeVars, borderVars, fontWeightVars, typeScaleVars, typographyVars, durationVars, easeVars } from "../theme/tokens.stylex.js";
|
|
71
71
|
import { useTooltip } from "../Tooltip/index.js";
|
|
72
72
|
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
73
|
-
import { focusOutlineStyles, getInputARIA, isImeKeyEvent, mergeProps, rtlStyles, themeProps,
|
|
74
|
-
import {
|
|
73
|
+
import { focusOutlineStyles, getInputARIA, isImeKeyEvent, mergeProps, rtlStyles, themeProps, plainDateFromISO, plainDateToday } from "../utils/index.js";
|
|
74
|
+
import { useCalendarSystem } from "../i18n/useCalendarSystem.js";
|
|
75
|
+
import { calendarDayOfMonth, formatCalendarMonthLabel } from "../utils/calendarSystem.js";
|
|
76
|
+
import { formatCalendarDateText } from "../utils/calendarDateParser.js";
|
|
75
77
|
import { chainEventHandlers } from "../utils/chainEventHandlers.js";
|
|
76
78
|
import { interactionOverlayStyles } from "../utils/interactionOverlay.stylex.js";
|
|
77
79
|
import { usePressFeedback } from "../hooks/usePressFeedback.js";
|
|
@@ -79,7 +81,7 @@ import { normalizeDayOfWeek } from "../utils/dateTypes.js";
|
|
|
79
81
|
import { getWeekdayHeaders } from "../Calendar/getWeekdayHeaderNames.js";
|
|
80
82
|
import { MonthScroller } from "./MonthScroller.js";
|
|
81
83
|
import { MonthYearWheels } from "./MonthYearWheels.js";
|
|
82
|
-
import { DEFAULT_MONTH_REACH, clampIndex,
|
|
84
|
+
import { DEFAULT_MONTH_REACH, clampIndex, createMonthModel } from "./monthGeometry.js";
|
|
83
85
|
import "./tokens.stylex.js";
|
|
84
86
|
import { dateInputTouchSizes, dateInputTouchGeometry } from "./tokens.stylex.js";
|
|
85
87
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
@@ -233,6 +235,7 @@ export function TouchDateField({
|
|
|
233
235
|
numberOfMonths: _numberOfMonths,
|
|
234
236
|
weekStartsOn: weekStartsOnProp = 0,
|
|
235
237
|
format = 'date_long',
|
|
238
|
+
calendar: calendarProp,
|
|
236
239
|
width,
|
|
237
240
|
containerXstyle,
|
|
238
241
|
containerClassName,
|
|
@@ -269,6 +272,8 @@ export function TouchDateField({
|
|
|
269
272
|
const placeholder = placeholderFromProps ?? t('@astryx.dateInput.placeholder');
|
|
270
273
|
const size = useSize(sizeProp, 'md');
|
|
271
274
|
const weekStartsOn = normalizeDayOfWeek(weekStartsOnProp);
|
|
275
|
+
const calendar = useCalendarSystem(calendarProp, 'DateInput');
|
|
276
|
+
const monthModel = useMemo(() => createMonthModel(calendar), [calendar]);
|
|
272
277
|
const generatedID = useId();
|
|
273
278
|
const id = idProp ?? generatedID;
|
|
274
279
|
const fieldLabelID = useId();
|
|
@@ -336,25 +341,22 @@ export function TouchDateField({
|
|
|
336
341
|
// century in each direction from wherever it opened. Anchored once, in a
|
|
337
342
|
// state initializer: recomputing it as the selection moves would shift every
|
|
338
343
|
// pane's scroll offset under the user mid-gesture.
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
const
|
|
344
|
+
// Indexes belong to the calendar, so DateInput remounts this surface when
|
|
345
|
+
// the calendar changes.
|
|
346
|
+
const [anchorMonthIndex] = useState(() => monthModel.indexOf(value != null && /^\d{4}-\d{2}-\d{2}$/.test(value) ? plainDateFromISO(value) : plainDateToday()));
|
|
347
|
+
const minMonthIndex = min != null ? monthModel.indexOf(plainDateFromISO(min)) : anchorMonthIndex - DEFAULT_MONTH_REACH;
|
|
348
|
+
const maxMonthIndex = max != null ? monthModel.indexOf(plainDateFromISO(max)) : anchorMonthIndex + DEFAULT_MONTH_REACH;
|
|
342
349
|
const [monthIndex, setMonthIndex] = useState(() => clampIndex(anchorMonthIndex, minMonthIndex, maxMonthIndex));
|
|
343
|
-
const {
|
|
344
|
-
year,
|
|
345
|
-
month
|
|
346
|
-
} = fromMonthIndex(monthIndex);
|
|
347
350
|
const weekdayHeaders = useMemo(() => getWeekdayHeaders(locale, weekStartsOn), [locale, weekStartsOn]);
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}, locale);
|
|
351
|
+
// The day the picker keeps: the selected date's day of its month. A month
|
|
352
|
+
// with an era change takes its heading era from this day.
|
|
353
|
+
const keptDay = selectedDate == null ? 1 : calendarDayOfMonth(calendar, selectedDate);
|
|
354
|
+
const monthYearLabel = formatCalendarMonthLabel(calendar, monthModel.monthAt(monthIndex), locale, keptDay);
|
|
353
355
|
|
|
354
356
|
// Formats the committed value only. A function format is called with the ISO
|
|
355
|
-
// value; a named one
|
|
356
|
-
//
|
|
357
|
-
const displayValue = optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue) ? typeof format === 'function' ? format(optimisticValue) :
|
|
357
|
+
// value; a named one writes the date in the calendar exactly as the desktop
|
|
358
|
+
// control commits it.
|
|
359
|
+
const displayValue = optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue) ? typeof format === 'function' ? format(optimisticValue) : formatCalendarDateText(plainDateFromISO(optimisticValue), format, locale, calendar) : '';
|
|
358
360
|
const fireChange = useCallback(newValue => {
|
|
359
361
|
if (isEffectivelyDisabled) {
|
|
360
362
|
return;
|
|
@@ -429,7 +431,7 @@ export function TouchDateField({
|
|
|
429
431
|
return;
|
|
430
432
|
}
|
|
431
433
|
fireChange(undefined);
|
|
432
|
-
const currentMonth =
|
|
434
|
+
const currentMonth = monthModel.indexOf(today);
|
|
433
435
|
if (currentMonth < minMonthIndex || currentMonth > maxMonthIndex) {
|
|
434
436
|
return;
|
|
435
437
|
}
|
|
@@ -438,7 +440,7 @@ export function TouchDateField({
|
|
|
438
440
|
}
|
|
439
441
|
setMonthIndex(currentMonth);
|
|
440
442
|
scrollerHandleRef.current?.scrollToMonth(currentMonth, 'smooth');
|
|
441
|
-
}, [isDisabled, fireChange, today, monthIndex, minMonthIndex, maxMonthIndex]);
|
|
443
|
+
}, [isDisabled, fireChange, monthModel, today, monthIndex, minMonthIndex, maxMonthIndex]);
|
|
442
444
|
|
|
443
445
|
// Selection commits on the tap and leaves the sheet up, so a mistake can be
|
|
444
446
|
// corrected in place and a nearby date reconsidered without reopening.
|
|
@@ -696,6 +698,7 @@ export function TouchDateField({
|
|
|
696
698
|
}[!!isWheelOpen << 0],
|
|
697
699
|
children: /*#__PURE__*/_jsx(MonthScroller, {
|
|
698
700
|
handleRef: scrollerHandleRef,
|
|
701
|
+
monthModel: monthModel,
|
|
699
702
|
minMonthIndex: minMonthIndex,
|
|
700
703
|
maxMonthIndex: maxMonthIndex,
|
|
701
704
|
initialMonthIndex: monthIndex,
|
|
@@ -718,7 +721,9 @@ export function TouchDateField({
|
|
|
718
721
|
}
|
|
719
722
|
}[!!!isWheelOpen << 0],
|
|
720
723
|
children: /*#__PURE__*/_jsx(MonthYearWheels, {
|
|
724
|
+
monthModel: monthModel,
|
|
721
725
|
monthIndex: monthIndex,
|
|
726
|
+
keptDay: keptDay,
|
|
722
727
|
minMonthIndex: minMonthIndex,
|
|
723
728
|
maxMonthIndex: maxMonthIndex,
|
|
724
729
|
onChange: handleWheelChange,
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file monthGeometry.ts
|
|
3
|
-
* @input PlainDate values, scroll offsets, pane heights
|
|
4
|
-
* @output
|
|
5
|
-
* @position Internal helper; consumed by
|
|
3
|
+
* @input PlainDate values, a calendar system, scroll offsets, pane heights
|
|
4
|
+
* @output Month-index arithmetic for a calendar and the virtualized pane window
|
|
5
|
+
* @position Internal helper; consumed by the touch date surfaces
|
|
6
6
|
*
|
|
7
|
-
* A "month index" is a single integer that totally orders calendar months
|
|
8
|
-
* `year * 12 + (month - 1)
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* A "month index" is a single integer that totally orders calendar months. In
|
|
8
|
+
* the Gregorian-aligned calendars it is `year * 12 + (month - 1)`; in the
|
|
9
|
+
* others it counts calendar months from a fixed month, because their years
|
|
10
|
+
* have 12 or 13 months. The scroller is a list of equal-width panes, so one
|
|
11
|
+
* integer converts freely between a month, a row in that list, and a scroll
|
|
12
|
+
* offset — which is the whole trick behind continuous scrolling.
|
|
11
13
|
*
|
|
12
14
|
* These are pure functions on purpose: the scroll math is the part most likely
|
|
13
15
|
* to be wrong, and it is testable without a layout engine.
|
|
14
16
|
*
|
|
15
17
|
* SYNC: When modified, update DateInputTouch.test.tsx.
|
|
16
18
|
*/
|
|
17
|
-
import type { PlainDate } from '../utils/
|
|
19
|
+
import type { PlainDate } from '../utils/dateTypes.js';
|
|
20
|
+
import { type CalendarMonth, type CalendarSystem } from '../utils/calendarSystem.js';
|
|
18
21
|
/** How many months are reachable in either direction when unbounded. */
|
|
19
22
|
export declare const DEFAULT_MONTH_REACH = 600;
|
|
20
23
|
/** `year * 12 + (month - 1)`, for a 1-based month. */
|
|
@@ -62,4 +65,35 @@ export interface PaneWindow {
|
|
|
62
65
|
export declare function paneWindow(centerRow: number, rowCount: number, overscan: number): PaneWindow;
|
|
63
66
|
/** `[start, end]` inclusive, as an array of rows. */
|
|
64
67
|
export declare function rowsIn({ start, end }: PaneWindow): number[];
|
|
68
|
+
/**
|
|
69
|
+
* Month indexes for one calendar. Years and month positions are the ones
|
|
70
|
+
* `calendarMonthOfYear` counts.
|
|
71
|
+
*/
|
|
72
|
+
export interface MonthModel {
|
|
73
|
+
readonly calendar: CalendarSystem;
|
|
74
|
+
/** The index of the calendar month that contains a date. */
|
|
75
|
+
indexOf: (date: PlainDate) => number;
|
|
76
|
+
/** The calendar month at an index. */
|
|
77
|
+
monthAt: (index: number) => CalendarMonth;
|
|
78
|
+
/** The calendar year of an index and the month's position in it. */
|
|
79
|
+
yearMonthAt: (index: number) => {
|
|
80
|
+
year: number;
|
|
81
|
+
month: number;
|
|
82
|
+
};
|
|
83
|
+
/** The index of a month position in a calendar year. */
|
|
84
|
+
indexOfYearMonth: (year: number, month: number) => number;
|
|
85
|
+
/** The number of months in a calendar year. */
|
|
86
|
+
monthsInYear: (year: number) => number;
|
|
87
|
+
/**
|
|
88
|
+
* The index `years` calendar years from `index`, in the same month. A leap
|
|
89
|
+
* month that the target year does not have becomes its common counterpart.
|
|
90
|
+
*/
|
|
91
|
+
shiftYears: (index: number, years: number) => number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The month model of a calendar. A calendar that needs Temporal must be
|
|
95
|
+
* available in this runtime; `useCalendarSystem` resolves one that is not to
|
|
96
|
+
* `gregory`.
|
|
97
|
+
*/
|
|
98
|
+
export declare function createMonthModel(calendar: CalendarSystem): MonthModel;
|
|
65
99
|
//# sourceMappingURL=monthGeometry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monthGeometry.d.ts","sourceRoot":"","sources":["../../src/DateInput/monthGeometry.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"monthGeometry.d.ts","sourceRoot":"","sources":["../../src/DateInput/monthGeometry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,cAAc,EASpB,MAAM,yBAAyB,CAAC;AAEjC,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhE;AAED,sCAAsC;AACtC,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAEpD;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAK3E;AAED,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAMR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,OAAe,GACrB,MAAM,CAGR;AAED,MAAM,WAAW,UAAU;IACzB,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,UAAU,CAKZ;AAED,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAMzD;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,4DAA4D;IAC5D,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC;IACrC,sCAAsC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;IAC1C,oEAAoE;IACpE,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC;IAC9D,wDAAwD;IACxD,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,+CAA+C;IAC/C,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC;;;OAGG;IACH,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACtD;AAwDD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,UAAU,CAIrE"}
|