@astryxdesign/core 0.7.8 → 0.7.9-canary.0236bb8
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 +7 -2
- 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/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/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 +70 -9
- 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/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/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/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/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/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.map +1 -1
- package/dist/hooks/useOverflow.js +190 -21
- 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 +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 +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 +10 -2
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +16 -3
- 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 +7 -2
- 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/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/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/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 +98 -15
- 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/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/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/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/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/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 +297 -73
- 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 +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 +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 +17 -3
- 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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type InputStatus } from '../Field/index.js';
|
|
2
2
|
import { type DayOfWeek, type DayOfWeekName } from '../Calendar/index.js';
|
|
3
|
+
import type { CalendarSystem } from '../utils/calendarSystem.js';
|
|
3
4
|
import { type FieldInputBaseProps } from '../Field/fieldParts.js';
|
|
4
5
|
import type { SizeValue } from '../utils/types.js';
|
|
5
6
|
import { type PickerPresentation } from '../utils/inputPresentation.js';
|
|
@@ -150,10 +151,25 @@ export interface DateTimeInputProps extends Omit<FieldInputBaseProps<HTMLInputEl
|
|
|
150
151
|
*/
|
|
151
152
|
hasClear?: boolean;
|
|
152
153
|
/**
|
|
153
|
-
* Placeholder text shown in the date portion when no date is selected.
|
|
154
|
+
* Placeholder text shown in the date portion when no date is selected. A
|
|
155
|
+
* caller placeholder replaces the calendar format hint.
|
|
154
156
|
* @default "Select a date"
|
|
155
157
|
*/
|
|
156
158
|
placeholder?: string;
|
|
159
|
+
/**
|
|
160
|
+
* The calendar the date field reads and writes typed dates in, such as
|
|
161
|
+
* `'persian'`, `'hebrew'`, or `'buddhist'`. `value`, `onChange`, `min`, and
|
|
162
|
+
* `max` stay Gregorian ISO datetimes in every calendar. People type a date
|
|
163
|
+
* the way the locale writes it in this calendar, and the committed date
|
|
164
|
+
* text uses it. Years are years of this calendar, so set `min` and `max` to
|
|
165
|
+
* catch a year typed in the wrong calendar. Calendars other than `gregory`,
|
|
166
|
+
* `iso8601`, `buddhist`, `roc`, and `japanese` need `Temporal`, native or a
|
|
167
|
+
* polyfill the application loads; without it the field uses the Gregorian
|
|
168
|
+
* calendar.
|
|
169
|
+
*
|
|
170
|
+
* @default the InternationalizationProvider's calendar, else `'gregory'`
|
|
171
|
+
*/
|
|
172
|
+
calendar?: CalendarSystem;
|
|
157
173
|
/**
|
|
158
174
|
* Placeholder text shown in the time portion when no time is selected.
|
|
159
175
|
* On touch, this appears in the closed time segment before a time is chosen.
|
|
@@ -219,6 +235,10 @@ export interface DateTimeInputProps extends Omit<FieldInputBaseProps<HTMLInputEl
|
|
|
219
235
|
* JavaScript. `hourFormat` formats the closed value; the OS picker follows the
|
|
220
236
|
* user's locale.
|
|
221
237
|
*
|
|
238
|
+
* In a calendar other than `gregory` or `iso8601`, `'touch'` and `'always'`
|
|
239
|
+
* use Astryx's popovers on a fine pointer and the bottom sheet on a coarse
|
|
240
|
+
* pointer.
|
|
241
|
+
*
|
|
222
242
|
* @default 'touch'
|
|
223
243
|
* @deprecated Use `presentation` (`spec:AST-043` FR3):
|
|
224
244
|
* `'touch'` → `'adaptive-native'`, `'always'` → `'native'`,
|
|
@@ -234,13 +254,16 @@ export interface DateTimeInputProps extends Omit<FieldInputBaseProps<HTMLInputEl
|
|
|
234
254
|
* - `'popover'`: Astryx's typed fields + popovers on every pointer
|
|
235
255
|
* - `'bottom-sheet'`: Astryx's bottom-sheet date/time wheels on every pointer
|
|
236
256
|
* - `'native'`: browser/OS date and time pickers on every pointer, with no
|
|
237
|
-
* Astryx fallback (FR2)
|
|
257
|
+
* Astryx fallback (FR2), except in a calendar other than `gregory` or
|
|
258
|
+
* `iso8601`, where it is `'adaptive-bottom-sheet'` and warns in
|
|
259
|
+
* development
|
|
238
260
|
* - `'adaptive-bottom-sheet'`: popovers on a fine pointer, bottom sheet on
|
|
239
261
|
* a coarse pointer
|
|
240
262
|
* - `'adaptive-native'` (default): popovers on a fine pointer, browser/OS
|
|
241
263
|
* pickers on a coarse pointer, keeping the released per-segment Astryx
|
|
242
264
|
* fallbacks (seconds, non-default `timeIncrement`, `timeOptionInterval`)
|
|
243
|
-
* where a native control cannot express the value (FR2)
|
|
265
|
+
* where a native control cannot express the value (FR2), and the bottom
|
|
266
|
+
* sheet in a calendar other than `gregory` or `iso8601`
|
|
244
267
|
*
|
|
245
268
|
* @default 'adaptive-native'
|
|
246
269
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AA6CA,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DateTimeInput.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/DateTimeInput.tsx"],"names":[],"mappings":"AA6CA,OAAO,EAGL,KAAK,WAAW,EAKjB,MAAM,UAAU,CAAC;AAIlB,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAyBrB,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,yBAAyB,CAAC;AAI5D,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAmB9C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,4BAA4B,CAAC;AAUpC,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;CACvC,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,yBAAyB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAErE,uGAAuG;AACvG,MAAM,MAAM,yBAAyB,GAAG,kBAAkB,CAAC;AAE3D,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEnD,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,+BAA+B,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEpE,YAAY,EACV,WAAW,IAAI,mBAAmB,EAClC,eAAe,IAAI,uBAAuB,GAC3C,MAAM,UAAU,CAAC;AAqJlB,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAC9C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,UAAU,GAAG,cAAc,CAC5B;IACC,8CAA8C;IAC9C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAElC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,CAAC;IAEzD;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;IAExB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,uBAAuB,CAAC;IAErC;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,0BAA0B,CAAC;IAE3C;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,CAAC,EAAE,+BAA+B,CAAC;IAErD;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;IAEzB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAEvB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;CAC1C;AA46CD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAgDtD;yBAhDe,aAAa"}
|
|
@@ -31,15 +31,16 @@ import { Spinner } from "../Spinner/index.js";
|
|
|
31
31
|
import { Calendar } from "../Calendar/index.js";
|
|
32
32
|
import { useCalendarConstraints } from "../Calendar/hooks/index.js";
|
|
33
33
|
import { usePopover } from "../Popover/index.js";
|
|
34
|
-
import { isFocusInsideOwnedLayer, isPressInsideOwnedLayer, useOutsidePress } from "../Layer/outsidePress.js";
|
|
34
|
+
import { isFocusInsideOwnedLayer, isPressInsideOwnedLayer, noteOutsideDismissal, useOutsidePress } from "../Layer/outsidePress.js";
|
|
35
35
|
import { useTooltip } from "../Tooltip/index.js";
|
|
36
36
|
import { useInputContainer } from "../hooks/useInputContainer.js";
|
|
37
37
|
import { useBusyAnnouncement } from "../hooks/useBusyAnnouncement.js";
|
|
38
38
|
import { useInputStatusIcon } from "../hooks/useInputStatusIcon.js";
|
|
39
|
-
import {
|
|
39
|
+
import { parseISOTime, formatISOTime, isTimeInRange, adjustTime, isImeKeyEvent, mergeProps, isFocusDetached } from "../utils/index.js";
|
|
40
40
|
import { chainEventHandlers } from "../utils/chainEventHandlers.js";
|
|
41
41
|
import { joinAriaIDs } from "../utils/inputAria.js";
|
|
42
|
-
import {
|
|
42
|
+
import { isRenderable } from "../utils/isRenderable.js";
|
|
43
|
+
import { useTypedDateField } from "../DateInput/useTypedDate.js";
|
|
43
44
|
import { useFieldInputStyling } from "../Field/fieldParts.js";
|
|
44
45
|
import { useAnnounce } from "../hooks/useAnnounce.js";
|
|
45
46
|
import { useMediaQuery } from "../hooks/useMediaQuery.js";
|
|
@@ -54,7 +55,8 @@ import { useHighlightedOptionScroll } from "../hooks/useHighlightedOptionScroll.
|
|
|
54
55
|
import { NativeDateSegment } from "./NativeDateSegment.js";
|
|
55
56
|
import { NativeTimeSegment } from "./NativeTimeSegment.js";
|
|
56
57
|
import { TouchDateTimeField } from "./TouchDateTimeField.js";
|
|
57
|
-
import {
|
|
58
|
+
import { resolvePickerPresentation } from "../utils/inputPresentation.js";
|
|
59
|
+
import { useCalendarPresentation } from "../DateInput/useCalendarPresentation.js";
|
|
58
60
|
import { useDevWarning } from "../hooks/useDevWarning.js";
|
|
59
61
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
60
62
|
import english from "../i18n/generated-english/DateTimeInput/DateTimeInput.generated.js";
|
|
@@ -246,6 +248,7 @@ function PointerDateTimeField({
|
|
|
246
248
|
timeOptionInterval,
|
|
247
249
|
hasClear = false,
|
|
248
250
|
placeholder: placeholderFromProps,
|
|
251
|
+
calendar,
|
|
249
252
|
timePlaceholder: timePlaceholderFromProps,
|
|
250
253
|
timeLabel,
|
|
251
254
|
size: sizeProp,
|
|
@@ -278,6 +281,7 @@ function PointerDateTimeField({
|
|
|
278
281
|
'aria-labelledby': ariaLabelledByProp,
|
|
279
282
|
onBlur: onBlurProp,
|
|
280
283
|
onClick: onClickProp,
|
|
284
|
+
onFocus: onFocusProp,
|
|
281
285
|
onKeyDown: onKeyDownProp,
|
|
282
286
|
...controlProps
|
|
283
287
|
} = rest;
|
|
@@ -310,12 +314,12 @@ function PointerDateTimeField({
|
|
|
310
314
|
const timeInputId = useId();
|
|
311
315
|
const descriptionID = useId();
|
|
312
316
|
const statusMessageID = useId();
|
|
317
|
+
const calendarDescriptionID = useId();
|
|
313
318
|
const dateInputRef = useRef(null);
|
|
314
319
|
const mergedDateInputRef = useMergedRefs(ref, dateInputRef);
|
|
315
320
|
const timeInputRef = useRef(null);
|
|
316
321
|
const timeContainerRef = useRef(null);
|
|
317
322
|
const calendarRef = useRef(null);
|
|
318
|
-
const lastFiredDateRef = useRef(undefined);
|
|
319
323
|
const [, startTransition] = useTransition();
|
|
320
324
|
const [optimisticValue, setOptimisticValue] = useOptimistic(value);
|
|
321
325
|
const isPendingChange = optimisticValue !== value;
|
|
@@ -345,19 +349,6 @@ function PointerDateTimeField({
|
|
|
345
349
|
isEnabled: showsDisabledMessage
|
|
346
350
|
});
|
|
347
351
|
|
|
348
|
-
// DateTimeInput fixes its status presentation to the detached message box,
|
|
349
|
-
// so the shared helper suppresses the on-field icon (the message box carries
|
|
350
|
-
// its own leading glyph). Routed through the helper for consistency with the
|
|
351
|
-
// rest of the bordered input family.
|
|
352
|
-
const {
|
|
353
|
-
statusIcon,
|
|
354
|
-
describedBy: statusTooltipDescribedBy
|
|
355
|
-
} = useInputStatusIcon({
|
|
356
|
-
status,
|
|
357
|
-
statusVariant: 'detached'
|
|
358
|
-
});
|
|
359
|
-
const ariaDescribedBy = [description ? descriptionID : null, status?.message ? statusMessageID : null, statusTooltipDescribedBy, showsDisabledMessage ? disabledMessageTooltip.describedBy : null, ariaDescribedByProp].filter(Boolean).join(' ') || undefined;
|
|
360
|
-
|
|
361
352
|
// Split min/max and current value
|
|
362
353
|
const minParts = useMemo(() => splitDateTime(min), [min]);
|
|
363
354
|
const maxParts = useMemo(() => splitDateTime(max), [max]);
|
|
@@ -388,21 +379,6 @@ function PointerDateTimeField({
|
|
|
388
379
|
return valueParts.date === maxParts.date ? maxParts.time : undefined;
|
|
389
380
|
}, [maxParts.date, maxParts.time, valueParts.date]);
|
|
390
381
|
|
|
391
|
-
// --- Date input state ---
|
|
392
|
-
const [datePendingInput, setDatePendingInput] = useState(null);
|
|
393
|
-
const prevDateRef = useRef(valueParts.date);
|
|
394
|
-
if (valueParts.date !== prevDateRef.current) {
|
|
395
|
-
prevDateRef.current = valueParts.date;
|
|
396
|
-
if (valueParts.date !== lastFiredDateRef.current) {
|
|
397
|
-
lastFiredDateRef.current = undefined;
|
|
398
|
-
if (datePendingInput !== null) {
|
|
399
|
-
setDatePendingInput(null);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
const dateDisplayValue = datePendingInput !== null ? datePendingInput : valueParts.date && /^\d{4}-\d{2}-\d{2}$/.test(valueParts.date) ? plainDateFormat(plainDateFromISO(valueParts.date), DATE_FORMAT_LONG, locale) : '';
|
|
404
|
-
const isDateInputValid = datePendingInput === null || !datePendingInput.trim() ? true : parseDateInput(datePendingInput, locale) !== null;
|
|
405
|
-
|
|
406
382
|
// --- Time input state ---
|
|
407
383
|
const [timePendingInput, setTimePendingInput] = useState(null);
|
|
408
384
|
const [isTimeFocused, setIsTimeFocused] = useState(false);
|
|
@@ -544,10 +520,59 @@ function PointerDateTimeField({
|
|
|
544
520
|
fireChange(combined);
|
|
545
521
|
}
|
|
546
522
|
if (source === 'calendar') {
|
|
547
|
-
setDatePendingInput(null);
|
|
548
523
|
popover.hide();
|
|
549
524
|
}
|
|
550
525
|
}, [valueParts.time, nativeTimeDraft, hasSeconds, minParts, maxParts, fireChange, popover]);
|
|
526
|
+
const handleTypedDateChange = useCallback(date => handleDateChange(date, 'input'), [handleDateChange]);
|
|
527
|
+
const clearTypedDate = useCallback(() => {
|
|
528
|
+
if (value !== undefined) {
|
|
529
|
+
fireChange(undefined);
|
|
530
|
+
}
|
|
531
|
+
}, [value, fireChange]);
|
|
532
|
+
const navigateToTypedDate = useCallback(date => {
|
|
533
|
+
calendarRef.current?.navigateTo(date);
|
|
534
|
+
}, []);
|
|
535
|
+
const {
|
|
536
|
+
typedDate,
|
|
537
|
+
displayValue: dateDisplayValue,
|
|
538
|
+
formatHint: dateFormatHint,
|
|
539
|
+
isPending: isDatePending,
|
|
540
|
+
isInvalid: isDateInvalid,
|
|
541
|
+
fieldStatus,
|
|
542
|
+
alertMessage: dateAlertMessage,
|
|
543
|
+
handleChange: handleTypedDateInput,
|
|
544
|
+
commit: commitDatePendingInput,
|
|
545
|
+
handleFocus: handleDateFocus,
|
|
546
|
+
handleBlur: handleDateBlur,
|
|
547
|
+
reset: resetTypedDate
|
|
548
|
+
} = useTypedDateField({
|
|
549
|
+
source: 'DateTimeInput',
|
|
550
|
+
calendar,
|
|
551
|
+
format: 'date_long',
|
|
552
|
+
min: calendarMin,
|
|
553
|
+
max: calendarMax,
|
|
554
|
+
isDateDisabled,
|
|
555
|
+
value: splitDateTime(value).date,
|
|
556
|
+
shownValue: valueParts.date,
|
|
557
|
+
onChange: handleTypedDateChange,
|
|
558
|
+
onClear: clearTypedDate,
|
|
559
|
+
onTypedDate: navigateToTypedDate,
|
|
560
|
+
isDisabled: isEffectivelyDisabled,
|
|
561
|
+
status,
|
|
562
|
+
isStatusAnnounced: true,
|
|
563
|
+
hasPlaceholder: placeholderFromProps != null
|
|
564
|
+
});
|
|
565
|
+
|
|
566
|
+
// The detached message box carries its own glyph, so the helper shows no
|
|
567
|
+
// on-field icon.
|
|
568
|
+
const {
|
|
569
|
+
statusIcon,
|
|
570
|
+
describedBy: statusTooltipDescribedBy
|
|
571
|
+
} = useInputStatusIcon({
|
|
572
|
+
status: fieldStatus,
|
|
573
|
+
statusVariant: 'detached'
|
|
574
|
+
});
|
|
575
|
+
const ariaDescribedBy = [description ? descriptionID : null, !usesNativePicker && typedDate.calendarDescription != null ? calendarDescriptionID : null, fieldStatus?.message ? statusMessageID : null, statusTooltipDescribedBy, showsDisabledMessage ? disabledMessageTooltip.describedBy : null, ariaDescribedByProp].filter(Boolean).join(' ') || undefined;
|
|
551
576
|
const handleNativeDateChange = useCallback(newDate => {
|
|
552
577
|
if (newDate === undefined) {
|
|
553
578
|
fireChange(undefined);
|
|
@@ -576,44 +601,8 @@ function PointerDateTimeField({
|
|
|
576
601
|
setNativeTimeDraft(newTime);
|
|
577
602
|
}, [fireChange, optimisticValue, valueParts.date]);
|
|
578
603
|
const handleDateInputChange = useCallback(e => {
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
if (isEffectivelyDisabled) {
|
|
582
|
-
return;
|
|
583
|
-
}
|
|
584
|
-
const text = e.target.value;
|
|
585
|
-
setDatePendingInput(text);
|
|
586
|
-
const parsed = parseDateInput(text, locale);
|
|
587
|
-
if (parsed && plainDateToISO(parsed) !== valueParts.date && !isDateDisabled(parsed)) {
|
|
588
|
-
const parsedISO = plainDateToISO(parsed);
|
|
589
|
-
lastFiredDateRef.current = parsedISO;
|
|
590
|
-
handleDateChange(parsedISO, 'input');
|
|
591
|
-
calendarRef.current?.navigateTo(parsedISO);
|
|
592
|
-
}
|
|
593
|
-
}, [valueParts.date, isDateDisabled, handleDateChange, isEffectivelyDisabled, locale]);
|
|
594
|
-
const commitDatePendingInput = useCallback(() => {
|
|
595
|
-
if (datePendingInput === null) {
|
|
596
|
-
return;
|
|
597
|
-
}
|
|
598
|
-
if (!datePendingInput.trim()) {
|
|
599
|
-
if (value !== undefined) {
|
|
600
|
-
fireChange(undefined);
|
|
601
|
-
}
|
|
602
|
-
setDatePendingInput(null);
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
|
-
const parsed = parseDateInput(datePendingInput, locale);
|
|
606
|
-
if (parsed && !isDateDisabled(parsed)) {
|
|
607
|
-
const parsedISO = plainDateToISO(parsed);
|
|
608
|
-
if (parsedISO !== valueParts.date) {
|
|
609
|
-
handleDateChange(parsedISO, 'input');
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
setDatePendingInput(null);
|
|
613
|
-
}, [datePendingInput, value, valueParts.date, fireChange, isDateDisabled, handleDateChange, locale]);
|
|
614
|
-
const handleDateBlur = useCallback(() => {
|
|
615
|
-
commitDatePendingInput();
|
|
616
|
-
}, [commitDatePendingInput]);
|
|
604
|
+
handleTypedDateInput(e.target.value);
|
|
605
|
+
}, [handleTypedDateInput]);
|
|
617
606
|
const handleDateKeyDown = useCallback(e => {
|
|
618
607
|
// Guard the composing keydown (fires before compositionend): an IME uses
|
|
619
608
|
// Enter to commit the candidate and Escape to cancel it, so without this
|
|
@@ -634,14 +623,14 @@ function PointerDateTimeField({
|
|
|
634
623
|
skipAutoFocus: true
|
|
635
624
|
});
|
|
636
625
|
}
|
|
637
|
-
} else if (e.key === 'Enter' && (
|
|
626
|
+
} else if (e.key === 'Enter' && (isDatePending || isEffectivelyDisabled)) {
|
|
638
627
|
// Typed text holds Enter back, or a form would submit the value from
|
|
639
628
|
// before the commit. A disabled or busy field must not submit its
|
|
640
629
|
// form either. Otherwise Enter keeps its default, as in any text field.
|
|
641
630
|
e.preventDefault();
|
|
642
631
|
commitDatePendingInput();
|
|
643
632
|
}
|
|
644
|
-
}, [popover, commitDatePendingInput, isEffectivelyDisabled,
|
|
633
|
+
}, [popover, commitDatePendingInput, isEffectivelyDisabled, isDatePending]);
|
|
645
634
|
|
|
646
635
|
// --- Time-option popover (#2727) ---
|
|
647
636
|
const timeListboxId = useId();
|
|
@@ -875,6 +864,7 @@ function PointerDateTimeField({
|
|
|
875
864
|
// elsewhere, or a programmatic focus — would strand the listbox open. Focus landing inside the
|
|
876
865
|
// field or the popup itself is not a leave. Mirrors BaseTypeahead.
|
|
877
866
|
if (timePopover.isOpen && !isFocusInsideOwnedLayer(e.relatedTarget, timeContainerRef.current, timePopover.id)) {
|
|
867
|
+
noteOutsideDismissal(e.currentTarget.ownerDocument);
|
|
878
868
|
timePopover.hide();
|
|
879
869
|
}
|
|
880
870
|
if (timePendingInput === null) {
|
|
@@ -1035,10 +1025,10 @@ function PointerDateTimeField({
|
|
|
1035
1025
|
isOptional: isOptional,
|
|
1036
1026
|
isRequired: isRequired,
|
|
1037
1027
|
isDisabled: isDisabled,
|
|
1038
|
-
status:
|
|
1039
|
-
type:
|
|
1040
|
-
message:
|
|
1041
|
-
messageID:
|
|
1028
|
+
status: fieldStatus ? {
|
|
1029
|
+
type: fieldStatus.type,
|
|
1030
|
+
message: fieldStatus.message,
|
|
1031
|
+
messageID: fieldStatus.message ? statusMessageID : undefined
|
|
1042
1032
|
} : undefined,
|
|
1043
1033
|
labelTooltip: labelTooltip,
|
|
1044
1034
|
statusVariant: "detached",
|
|
@@ -1047,15 +1037,15 @@ function PointerDateTimeField({
|
|
|
1047
1037
|
ref: disabledMessageTooltip.ref,
|
|
1048
1038
|
...mergeProps(themeProps('date-time-input', {
|
|
1049
1039
|
size,
|
|
1050
|
-
status:
|
|
1040
|
+
status: fieldStatus?.type ?? null,
|
|
1051
1041
|
disabled: isDisabled ? 'disabled' : null
|
|
1052
1042
|
}), stylex.props(styles.row, usesNativePicker && styles.nativeRow, controlXstyle), controlClassName, controlStyle),
|
|
1053
1043
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
1054
1044
|
ref: usesNativePicker ? undefined : popover.triggerRef,
|
|
1055
1045
|
...mergeProps(themeProps('date-time-input-date-segment', {
|
|
1056
1046
|
size,
|
|
1057
|
-
status:
|
|
1058
|
-
}), stylex.props(inputWrapperStyles.base, sizeStyles[size], styles.dateWrapper, isEffectivelyDisabled && inputWrapperStyles.disabled, isEffectivelyDisabled && inputDisabledFocusStyles.withinRing,
|
|
1047
|
+
status: fieldStatus?.type ?? null
|
|
1048
|
+
}), stylex.props(inputWrapperStyles.base, sizeStyles[size], styles.dateWrapper, isEffectivelyDisabled && inputWrapperStyles.disabled, isEffectivelyDisabled && inputDisabledFocusStyles.withinRing, fieldStatus && inputStatusBorderStyles[fieldStatus.type], fieldStatus && !isEffectivelyDisabled && inputStatusHoverShadowStyles[fieldStatus.type], fieldStatus && inputStatusFocusWithinStyles[fieldStatus.type])),
|
|
1059
1049
|
children: [usesNativePicker ? /*#__PURE__*/_jsx(NativeDateSegment, {
|
|
1060
1050
|
id: dateInputId,
|
|
1061
1051
|
inputRef: mergedDateInputRef,
|
|
@@ -1075,6 +1065,7 @@ function PointerDateTimeField({
|
|
|
1075
1065
|
...controlProps,
|
|
1076
1066
|
'aria-labelledby': controlLabelledBy,
|
|
1077
1067
|
onBlur: onBlurProp,
|
|
1068
|
+
onFocus: onFocusProp,
|
|
1078
1069
|
onClick: isEffectivelyDisabled ? undefined : onClickProp,
|
|
1079
1070
|
onKeyDown: onKeyDownProp
|
|
1080
1071
|
}
|
|
@@ -1112,15 +1103,16 @@ function PointerDateTimeField({
|
|
|
1112
1103
|
value: dateDisplayValue,
|
|
1113
1104
|
onChange: handleDateInputChange,
|
|
1114
1105
|
onBlur: chainEventHandlers(handleDateBlur, onBlurProp),
|
|
1106
|
+
onFocus: chainEventHandlers(handleDateFocus, onFocusProp),
|
|
1115
1107
|
onClick: isEffectivelyDisabled ? undefined : chainEventHandlers(handleDateInputClick, onClickProp),
|
|
1116
1108
|
onKeyDown: chainEventHandlers(handleDateKeyDown, onKeyDownProp),
|
|
1117
1109
|
"aria-labelledby": controlLabelledBy,
|
|
1118
|
-
placeholder: placeholder,
|
|
1110
|
+
placeholder: dateFormatHint ?? placeholder,
|
|
1119
1111
|
"aria-disabled": isEffectivelyDisabled ? 'true' : undefined,
|
|
1120
1112
|
readOnly: isEffectivelyDisabled || undefined,
|
|
1121
1113
|
"aria-describedby": ariaDescribedBy,
|
|
1122
1114
|
"aria-required": isEffectivelyRequired ? 'true' : undefined,
|
|
1123
|
-
"aria-invalid":
|
|
1115
|
+
"aria-invalid": fieldStatus?.type === 'error' || isDateInvalid ? 'true' : undefined,
|
|
1124
1116
|
"aria-busy": isBusy || undefined,
|
|
1125
1117
|
"aria-expanded": popover.isOpen,
|
|
1126
1118
|
"aria-haspopup": "dialog",
|
|
@@ -1140,12 +1132,15 @@ function PointerDateTimeField({
|
|
|
1140
1132
|
3: {
|
|
1141
1133
|
className: "x1lliihq x98rzlu xeuugli xc342km xng3xce x1717udv x9ynric xjm74w1 xf9zqsd xw6l6zx xjbqb8w x1a2a7pz xeyghm5 xt0e3qv xv1l7n4"
|
|
1142
1134
|
}
|
|
1143
|
-
}[!!isEffectivelyDisabled << 1 |
|
|
1135
|
+
}[!!isEffectivelyDisabled << 1 | !!isDateInvalid << 0]
|
|
1144
1136
|
}), /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
1145
1137
|
as: "div",
|
|
1146
1138
|
role: "alert",
|
|
1147
1139
|
"aria-live": "assertive",
|
|
1148
|
-
children:
|
|
1140
|
+
children: dateAlertMessage
|
|
1141
|
+
}), isRenderable(typedDate.calendarDescription) && /*#__PURE__*/_jsx(VisuallyHidden, {
|
|
1142
|
+
id: calendarDescriptionID,
|
|
1143
|
+
children: typedDate.calendarDescription
|
|
1149
1144
|
})]
|
|
1150
1145
|
}), hasClear && value !== undefined && !isEffectivelyDisabled && /*#__PURE__*/_jsx(InputClearButton, {
|
|
1151
1146
|
label: t('@astryx.dateInput.clear', {
|
|
@@ -1259,9 +1254,13 @@ function PointerDateTimeField({
|
|
|
1259
1254
|
// opens on the current value.
|
|
1260
1255
|
!popover.isOpen ? null : /*#__PURE__*/_jsx(Calendar, {
|
|
1261
1256
|
handleRef: calendarRef,
|
|
1257
|
+
calendar: typedDate.calendar,
|
|
1262
1258
|
mode: "single",
|
|
1263
1259
|
value: valueParts.date ?? null,
|
|
1264
|
-
onChange: d =>
|
|
1260
|
+
onChange: d => {
|
|
1261
|
+
handleDateChange(d, 'calendar');
|
|
1262
|
+
resetTypedDate();
|
|
1263
|
+
},
|
|
1265
1264
|
min: calendarMin,
|
|
1266
1265
|
max: calendarMax,
|
|
1267
1266
|
dateConstraints: dateConstraints,
|
|
@@ -1322,7 +1321,10 @@ PointerDateTimeField.displayName = 'PointerDateTimeField';
|
|
|
1322
1321
|
export function DateTimeInput(props) {
|
|
1323
1322
|
const isTouch = useMediaQuery(TOUCH_POINTER_QUERY);
|
|
1324
1323
|
useDevWarning('DateTimeInput', '`nativePicker` is deprecated; use `presentation` instead (`touch` → `adaptive-native`, `always` → `native`, `never` → `adaptive-bottom-sheet`). `presentation` wins when both are set.', props.nativePicker !== undefined);
|
|
1325
|
-
const
|
|
1324
|
+
const {
|
|
1325
|
+
calendar,
|
|
1326
|
+
presentation: effective
|
|
1327
|
+
} = useCalendarPresentation('DateTimeInput', props.calendar, props.presentation, props.nativePicker);
|
|
1326
1328
|
const locale = useLocale();
|
|
1327
1329
|
const {
|
|
1328
1330
|
presentation: _presentation,
|
|
@@ -1333,6 +1335,7 @@ export function DateTimeInput(props) {
|
|
|
1333
1335
|
// field's resting text, preset times, and the sheet wheels agree.
|
|
1334
1336
|
const rest = {
|
|
1335
1337
|
...surfaceProps,
|
|
1338
|
+
calendar,
|
|
1336
1339
|
hourFormat: resolveHourFormat(locale, props.hourFormat)
|
|
1337
1340
|
};
|
|
1338
1341
|
if (effective === 'native') {
|
|
@@ -1349,9 +1352,10 @@ export function DateTimeInput(props) {
|
|
|
1349
1352
|
nativeMode: "adaptive"
|
|
1350
1353
|
});
|
|
1351
1354
|
case 'sheet':
|
|
1355
|
+
// Month indexes depend on the calendar. A new calendar remounts the sheet.
|
|
1352
1356
|
return /*#__PURE__*/_jsx(TouchDateTimeField, {
|
|
1353
1357
|
...rest
|
|
1354
|
-
});
|
|
1358
|
+
}, calendar);
|
|
1355
1359
|
case 'desktop':
|
|
1356
1360
|
return /*#__PURE__*/_jsx(PointerDateTimeField, {
|
|
1357
1361
|
...rest
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DateTimeInputProps } from './DateTimeInput.js';
|
|
2
|
-
export declare function TouchDateTimeField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement: _timeIncrement, timeOptionInterval: _timeOptionInterval, hasClear, placeholder: placeholderFromProps, timePlaceholder: timePlaceholderFromProps, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateTimeInputProps): import("react").JSX.Element;
|
|
2
|
+
export declare function TouchDateTimeField({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, value, onChange, changeAction, isLoading, min, max, dateConstraints, hasSeconds, hourFormat, timeIncrement: _timeIncrement, timeOptionInterval: _timeOptionInterval, hasClear, placeholder: placeholderFromProps, timePlaceholder: timePlaceholderFromProps, timeLabel, size: sizeProp, status, labelTooltip, numberOfMonths: _numberOfMonths, weekStartsOn: weekStartsOnProp, calendar: calendarProp, width, containerXstyle, containerClassName, containerStyle, controlXstyle, controlClassName, controlStyle, ref, ...restProps }: DateTimeInputProps): import("react").JSX.Element;
|
|
3
3
|
export declare namespace TouchDateTimeField {
|
|
4
4
|
var displayName: string;
|
|
5
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TouchDateTimeField.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/TouchDateTimeField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TouchDateTimeField.d.ts","sourceRoot":"","sources":["../../src/DateTimeInput/TouchDateTimeField.tsx"],"names":[],"mappings":"AAyHA,OAAO,KAAK,EAAC,kBAAkB,EAAoB,MAAM,iBAAiB,CAAC;AA6S3E,wBAAgB,kBAAkB,CAAC,EACjC,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,UAAkB,EAClB,UAAkB,EAElB,aAAa,EAAE,cAAc,EAC7B,kBAAkB,EAAE,mBAAmB,EACvC,QAAgB,EAChB,WAAW,EAAE,oBAAoB,EACjC,eAAe,EAAE,wBAAwB,EACzC,SAAS,EACT,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,YAAY,EAEZ,cAAc,EAAE,eAAe,EAC/B,YAAY,EAAE,gBAAoB,EAClC,QAAQ,EAAE,YAAY,EACtB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,GAAG,EACH,GAAG,SAAS,EACb,EAAE,kBAAkB,+BA88BpB;yBAt/Be,kBAAkB"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file TouchDateTimeField.tsx
|
|
7
|
-
* @input Uses React, Field, BottomSheet, SegmentedControl, DateInput month picker primitives, Wheel and the pickers' touch layer (TimeWheels), the touch presentation, StyleX intrinsic flex layout
|
|
7
|
+
* @input Uses React, Field, BottomSheet, SegmentedControl, DateInput month picker primitives, the resolved calendar, Wheel and the pickers' touch layer (TimeWheels), the touch presentation, StyleX intrinsic flex layout
|
|
8
8
|
* @output Exports TouchDateTimeField — the coarse-pointer surface behind DateTimeInput
|
|
9
9
|
* @position Internal component; consumed by DateTimeInput.tsx
|
|
10
10
|
*
|
|
@@ -49,8 +49,10 @@ import { getWeekdayHeaders } from "../Calendar/getWeekdayHeaderNames.js";
|
|
|
49
49
|
import { formatISOTime, isImeKeyEvent, isRenderable, clampTime, mergeProps, parseISOTime } from "../utils/index.js";
|
|
50
50
|
import { chainEventHandlers } from "../utils/chainEventHandlers.js";
|
|
51
51
|
import { joinAriaIDs } from "../utils/inputAria.js";
|
|
52
|
-
import {
|
|
53
|
-
import {
|
|
52
|
+
import { plainDateFromISO, plainDateToday } from "../utils/plainDate.js";
|
|
53
|
+
import { calendarDayOfMonth, formatCalendarMonthLabel } from "../utils/calendarSystem.js";
|
|
54
|
+
import { formatCalendarDateText } from "../utils/calendarDateParser.js";
|
|
55
|
+
import { useCalendarSystem } from "../i18n/useCalendarSystem.js";
|
|
54
56
|
import { MonthScroller } from "../DateInput/MonthScroller.js";
|
|
55
57
|
import { MonthYearWheels } from "../DateInput/MonthYearWheels.js";
|
|
56
58
|
import { Wheel } from "../DateInput/Wheel.js";
|
|
@@ -59,7 +61,7 @@ import { hour12From24, hour24From12, hourRowsInHalf, meridiemRows, minuteRows, s
|
|
|
59
61
|
import { useTouchPresentation } from "../utils/touchPresentation.js";
|
|
60
62
|
import "../DateInput/tokens.stylex.js";
|
|
61
63
|
import { dateInputTouchGeometry, dateInputTouchSizes } from "../DateInput/tokens.stylex.js";
|
|
62
|
-
import { DEFAULT_MONTH_REACH, clampIndex,
|
|
64
|
+
import { DEFAULT_MONTH_REACH, clampIndex, createMonthModel } from "../DateInput/monthGeometry.js";
|
|
63
65
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
64
66
|
import { InternationalizationContext } from "../i18n/InternationalizationContext.js";
|
|
65
67
|
import english from "../i18n/generated-english/DateTimeInput/TouchDateTimeField.generated.js";
|
|
@@ -234,6 +236,7 @@ export function TouchDateTimeField({
|
|
|
234
236
|
// Desktop-only: the touch Date panel shows one swipe-paged month at a time.
|
|
235
237
|
numberOfMonths: _numberOfMonths,
|
|
236
238
|
weekStartsOn: weekStartsOnProp = 0,
|
|
239
|
+
calendar: calendarProp,
|
|
237
240
|
width,
|
|
238
241
|
containerXstyle,
|
|
239
242
|
containerClassName,
|
|
@@ -342,6 +345,8 @@ export function TouchDateTimeField({
|
|
|
342
345
|
second: 0
|
|
343
346
|
}, [timeForWheels]);
|
|
344
347
|
const weekStartsOn = normalizeDayOfWeek(weekStartsOnProp);
|
|
348
|
+
const calendar = useCalendarSystem(calendarProp, 'DateTimeInput');
|
|
349
|
+
const monthModel = useMemo(() => createMonthModel(calendar), [calendar]);
|
|
345
350
|
|
|
346
351
|
// The draft follows the controlled time, and an external clear resets it.
|
|
347
352
|
// Adjusted during render when the value changes, so no commit paints the
|
|
@@ -362,9 +367,12 @@ export function TouchDateTimeField({
|
|
|
362
367
|
setDraftTime(undefined);
|
|
363
368
|
}
|
|
364
369
|
}
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
370
|
+
|
|
371
|
+
// Indexes belong to the calendar, so DateTimeInput remounts this surface
|
|
372
|
+
// when the calendar changes.
|
|
373
|
+
const [anchorMonthIndex] = useState(() => monthModel.indexOf(selectedDate ?? plainDateToday()));
|
|
374
|
+
const minMonthIndex = calendarMin != null ? monthModel.indexOf(plainDateFromISO(calendarMin)) : anchorMonthIndex - DEFAULT_MONTH_REACH;
|
|
375
|
+
const maxMonthIndex = calendarMax != null ? monthModel.indexOf(plainDateFromISO(calendarMax)) : anchorMonthIndex + DEFAULT_MONTH_REACH;
|
|
368
376
|
const [monthIndex, setMonthIndex] = useState(() => clampIndex(anchorMonthIndex, minMonthIndex, maxMonthIndex));
|
|
369
377
|
// min/max can narrow underneath the mounted sheet. Keep the visible month in
|
|
370
378
|
// range during render, so no commit shows an out-of-range month; the month
|
|
@@ -375,24 +383,19 @@ export function TouchDateTimeField({
|
|
|
375
383
|
if (!Object.is(clampedMonthIndex, monthIndex)) {
|
|
376
384
|
setMonthIndex(clampedMonthIndex);
|
|
377
385
|
}
|
|
378
|
-
const {
|
|
379
|
-
year,
|
|
380
|
-
month
|
|
381
|
-
} = fromMonthIndex(monthIndex);
|
|
382
386
|
const canStepBack = monthIndex > minMonthIndex;
|
|
383
387
|
const canStepForward = monthIndex < maxMonthIndex;
|
|
384
388
|
const weekdayHeaders = useMemo(() => getWeekdayHeaders(locale, weekStartsOn), [locale, weekStartsOn]);
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}, locale);
|
|
389
|
+
// The day the picker keeps: the selected date's day of its month. A month
|
|
390
|
+
// with an era change takes its heading era from this day.
|
|
391
|
+
const keptDay = selectedDate == null ? 1 : calendarDayOfMonth(calendar, selectedDate);
|
|
392
|
+
const monthYearLabel = formatCalendarMonthLabel(calendar, monthModel.monthAt(monthIndex), locale, keptDay);
|
|
390
393
|
const dateDisplayValue = useMemo(() => {
|
|
391
394
|
if (selectedDate == null) {
|
|
392
395
|
return '';
|
|
393
396
|
}
|
|
394
|
-
return
|
|
395
|
-
}, [selectedDate, locale]);
|
|
397
|
+
return formatCalendarDateText(selectedDate, 'date_long', locale, calendar);
|
|
398
|
+
}, [calendar, selectedDate, locale]);
|
|
396
399
|
const timeDisplayValue = useMemo(() => {
|
|
397
400
|
const displayTime = normalizedValueTime ?? draftTime;
|
|
398
401
|
return displayTime ? formatLocaleTime(displayTime, locale, hourFormat, hasSeconds) : '';
|
|
@@ -455,13 +458,13 @@ export function TouchDateTimeField({
|
|
|
455
458
|
const handleResetInSheet = useCallback(() => {
|
|
456
459
|
fireChange(undefined);
|
|
457
460
|
setDraftTime(undefined);
|
|
458
|
-
const currentMonth =
|
|
461
|
+
const currentMonth = monthModel.indexOf(today);
|
|
459
462
|
if (currentMonth < minMonthIndex || currentMonth > maxMonthIndex) {
|
|
460
463
|
return;
|
|
461
464
|
}
|
|
462
465
|
setMonthIndex(currentMonth);
|
|
463
466
|
scrollerHandleRef.current?.scrollToMonth(currentMonth, 'smooth');
|
|
464
|
-
}, [fireChange, today, minMonthIndex, maxMonthIndex]);
|
|
467
|
+
}, [fireChange, monthModel, today, minMonthIndex, maxMonthIndex]);
|
|
465
468
|
const handleDateSelect = useCallback(nextDate => {
|
|
466
469
|
const nextTime = clampTimeForDate(nextDate, timeForWheels);
|
|
467
470
|
setDraftTime(nextTime);
|
|
@@ -696,6 +699,7 @@ export function TouchDateTimeField({
|
|
|
696
699
|
}, dayOfWeek))
|
|
697
700
|
}), /*#__PURE__*/_jsx(MonthScroller, {
|
|
698
701
|
handleRef: scrollerHandleRef,
|
|
702
|
+
monthModel: monthModel,
|
|
699
703
|
minMonthIndex: minMonthIndex,
|
|
700
704
|
maxMonthIndex: maxMonthIndex,
|
|
701
705
|
initialMonthIndex: monthIndex,
|
|
@@ -748,7 +752,9 @@ export function TouchDateTimeField({
|
|
|
748
752
|
className: "x6k0iem"
|
|
749
753
|
}
|
|
750
754
|
}), /*#__PURE__*/_jsx(MonthYearWheels, {
|
|
755
|
+
monthModel: monthModel,
|
|
751
756
|
monthIndex: monthIndex,
|
|
757
|
+
keptDay: keptDay,
|
|
752
758
|
minMonthIndex: minMonthIndex,
|
|
753
759
|
maxMonthIndex: maxMonthIndex,
|
|
754
760
|
onChange: next => {
|
package/dist/Dialog/Dialog.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file Dialog.tsx
|
|
3
3
|
* @input Uses React, DialogHTMLAttributes, ReactNode, container (Layout), DialogContext, layerTextReset,
|
|
4
|
-
* layerStructureReset, modalOutlet, interactionModality, chainEventHandlers
|
|
4
|
+
* layerStructureReset, modalOutlet, interactionModality, chainEventHandlers, holdEntranceInput
|
|
5
5
|
* @output Exports Dialog component, DialogProps, DialogVariant, DialogPurpose types
|
|
6
6
|
* @position Core implementation; consumed by index.ts, tested by Dialog.test.tsx
|
|
7
7
|
*
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
* SYNC: When modified, update these files to stay in sync:
|
|
24
24
|
* - /packages/core/src/Dialog/Dialog.doc.mjs (props table, features, implementation notes)
|
|
25
25
|
* - /packages/core/src/Dialog/Dialog.test.tsx (tests for new/changed behavior)
|
|
26
|
+
* - /packages/core/src/Dialog/__tests__/DialogTouchEntrance.interaction.browser.spec.ts (the touch entrance hold)
|
|
26
27
|
* - /packages/core/src/Dialog/index.ts (exports if types change)
|
|
27
28
|
* - /apps/storybook/stories/Dialog.stories.tsx (storybook stories)
|
|
28
29
|
* - /packages/cli/assets/templates/blocks/components/Dialog/ (showcase blocks)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"Dialog.d.ts","sourceRoot":"","sources":["../../src/Dialog/Dialog.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA+B5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAMhD,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,SAAS,CAAC;AAmC9C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzD,4EAA4E;AAC5E,UAAU,mBAAmB;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAe,SAAQ,mBAAmB;IACzD,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAuBD,2FAA2F;AAC3F,eAAO,MAAM,uCAAuC;;;;;;;;;;;CAW1C,CAAC;AAwLX;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,cAAc;;;;;EAUpE;AAED,MAAM,WAAW,WAAY,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IAC/D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;OAOG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAExB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAE5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IAEpC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EAAE,UAAU,EAClB,QAAgB,EAChB,YAAY,EACZ,KAAW,EACX,SAAmB,EACnB,QAAQ,EACR,OAAoB,EACpB,OAAgB,EAChB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,sCAiab;yBAjbe,MAAM"}
|