@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
|
@@ -53,7 +53,8 @@ export const docs = {
|
|
|
53
53
|
{
|
|
54
54
|
name: 'label',
|
|
55
55
|
type: 'string',
|
|
56
|
-
description:
|
|
56
|
+
description:
|
|
57
|
+
'Accessible label for the landmark element. While the region scrolls, it also names the scrolling region, which otherwise takes a translated "Content".',
|
|
57
58
|
},
|
|
58
59
|
{
|
|
59
60
|
name: 'role',
|
|
@@ -64,13 +65,13 @@ export const docs = {
|
|
|
64
65
|
name: 'width',
|
|
65
66
|
type: 'number | string',
|
|
66
67
|
description:
|
|
67
|
-
|
|
68
|
+
"Width of the panel. Numbers are treated as pixels, strings are used as-is. Ignored when resizable is provided; the hook controls width. Beside a ResizeHandle given a useResizable region's props, a panel at width={region.size} is inert while the region is collapsed, and focus inside it moves to the handle as it collapses.",
|
|
68
69
|
},
|
|
69
70
|
{
|
|
70
71
|
name: 'resizable',
|
|
71
|
-
type: 'ResizableProps',
|
|
72
|
+
type: 'ResizableRegion | ResizableProps',
|
|
72
73
|
description:
|
|
73
|
-
"
|
|
74
|
+
"The output of useResizable(), or its props. When provided, the hook drives the panel width and a ResizeHandle should be placed adjacent to the panel. Carries the region's axis ('horizontal' | 'vertical'), which must match the adjacent ResizeHandle's direction. Focus inside the panel moves to its ResizeHandle as it collapses, and the panel is inert while collapsed.",
|
|
74
75
|
},
|
|
75
76
|
],
|
|
76
77
|
};
|
|
@@ -106,7 +107,8 @@ export const docsZh = {
|
|
|
106
107
|
{
|
|
107
108
|
name: 'label',
|
|
108
109
|
type: 'string',
|
|
109
|
-
description:
|
|
110
|
+
description:
|
|
111
|
+
'地标元素的无障碍标签。区域滚动时,它也为滚动区域命名;未提供时使用已翻译的“Content”(内容)。',
|
|
110
112
|
},
|
|
111
113
|
{
|
|
112
114
|
name: 'role',
|
|
@@ -117,13 +119,13 @@ export const docsZh = {
|
|
|
117
119
|
name: 'width',
|
|
118
120
|
type: 'number | string',
|
|
119
121
|
description:
|
|
120
|
-
'面板宽度。数字按像素处理,字符串按原样使用。提供 resizable 时忽略,宽度由 hook
|
|
122
|
+
'面板宽度。数字按像素处理,字符串按原样使用。提供 resizable 时忽略,宽度由 hook 控制。放在接收 useResizable 区域 props 的 ResizeHandle 旁边、以 width={region.size} 渲染时,区域折叠期间面板为 inert,折叠时面板内的焦点移到手柄上。',
|
|
121
123
|
},
|
|
122
124
|
{
|
|
123
125
|
name: 'resizable',
|
|
124
|
-
type: 'ResizableProps',
|
|
126
|
+
type: 'ResizableRegion | ResizableProps',
|
|
125
127
|
description:
|
|
126
|
-
"
|
|
128
|
+
"useResizable() 的返回值或其 props。提供时面板宽度由 hook 驱动,应在面板旁放置 ResizeHandle。其中携带区域的轴向('horizontal' | 'vertical'),必须与相邻 ResizeHandle 的 direction 一致。折叠时面板内的焦点会移到其 ResizeHandle 上,折叠期间面板为 inert。",
|
|
127
129
|
},
|
|
128
130
|
],
|
|
129
131
|
};
|
|
@@ -139,11 +141,12 @@ export const docsDense = {
|
|
|
139
141
|
padding:
|
|
140
142
|
'Internal padding on spacing scale. Overrides layout container default.',
|
|
141
143
|
isScrollable: 'Enable scrollable overflow.',
|
|
142
|
-
label:
|
|
144
|
+
label:
|
|
145
|
+
'Accessible label for landmark element; also names the region while it scrolls (default "Content").',
|
|
143
146
|
role: 'ARIA landmark role.',
|
|
144
147
|
width:
|
|
145
|
-
'Panel width. Numbers = pixels, strings as-is. Ignored when resizable provided; hook controls width.',
|
|
148
|
+
'Panel width. Numbers = pixels, strings as-is. Ignored when resizable provided; hook controls width. width={region.size} beside a ResizeHandle given the region props: inert while collapsed; focus inside moves to the handle on collapse.',
|
|
146
149
|
resizable:
|
|
147
|
-
'
|
|
150
|
+
'useResizable() output or its props. Hook drives panel width; place ResizeHandle adjacent. Focus inside moves to the handle on collapse; inert while collapsed.',
|
|
148
151
|
},
|
|
149
152
|
};
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file LayoutPanel.tsx
|
|
7
|
-
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext
|
|
7
|
+
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext,
|
|
8
|
+
* useScrollRegionProps, resizablePane.ts
|
|
8
9
|
* @output Exports LayoutPanel component and LayoutPanelProps
|
|
9
10
|
* @position Sidebar panel for Layout start/end slots. Use for navigation panels,
|
|
10
11
|
* settings sidebars, detail panels, or any fixed-width side content.
|
|
@@ -17,14 +18,28 @@
|
|
|
17
18
|
|
|
18
19
|
import type {AriaRole, ReactNode} from 'react';
|
|
19
20
|
import type {BaseProps} from '../BaseProps';
|
|
20
|
-
import {use} from 'react';
|
|
21
|
+
import {use, useCallback, useRef, useState, useSyncExternalStore} from 'react';
|
|
21
22
|
import * as stylex from '@stylexjs/stylex';
|
|
22
23
|
import {colorVars, spacingVars} from '../theme/tokens.stylex';
|
|
23
24
|
import {LayoutAreaContext} from './LayoutAreaContext';
|
|
24
25
|
import {LayoutSlotsContext} from './LayoutSlotsContext';
|
|
26
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
27
|
+
import {useScrollRegionProps} from '../hooks/useScrollRegionProps';
|
|
25
28
|
import {mergeProps} from '../utils';
|
|
26
29
|
import type {SizeValue, SpacingStep} from '../utils/types';
|
|
27
|
-
import
|
|
30
|
+
import {
|
|
31
|
+
resizablePropsOf,
|
|
32
|
+
type ResizableProps,
|
|
33
|
+
type ResizableRegion,
|
|
34
|
+
} from '../Resizable/useResizable';
|
|
35
|
+
import {
|
|
36
|
+
createResizablePaneLink,
|
|
37
|
+
resizeHandleBeside,
|
|
38
|
+
} from '../Resizable/resizablePane';
|
|
39
|
+
import {LayoutChangeSnapshot} from '../motion/LayoutChangeSnapshot';
|
|
40
|
+
import {useIsomorphicLayoutEffect} from '../hooks/useIsomorphicLayoutEffect';
|
|
41
|
+
import {moveFocusLeftBehind, noteFocusWithin} from '../utils/focusReturn';
|
|
42
|
+
import {useFocusLeavingChange} from '../utils/useFocusLeavingChange';
|
|
28
43
|
import {themeProps} from '../utils/themeProps';
|
|
29
44
|
import {
|
|
30
45
|
paddingStyles,
|
|
@@ -100,6 +115,8 @@ const styles = stylex.create({
|
|
|
100
115
|
},
|
|
101
116
|
});
|
|
102
117
|
|
|
118
|
+
const returnFalse = () => false;
|
|
119
|
+
|
|
103
120
|
// Dynamic styles for sizing props
|
|
104
121
|
const dynamicStyles = stylex.create({
|
|
105
122
|
sizing: (width: SizeValue | null) => ({
|
|
@@ -144,6 +161,8 @@ export interface LayoutPanelProps extends BaseProps<HTMLDivElement> {
|
|
|
144
161
|
/**
|
|
145
162
|
* Accessible label for the landmark.
|
|
146
163
|
* Required when role is set and multiple landmarks of the same type exist.
|
|
164
|
+
* While the panel scrolls, it also names the scrolling region, which
|
|
165
|
+
* otherwise takes a translated "Content".
|
|
147
166
|
*/
|
|
148
167
|
label?: string;
|
|
149
168
|
|
|
@@ -161,20 +180,20 @@ export interface LayoutPanelProps extends BaseProps<HTMLDivElement> {
|
|
|
161
180
|
width?: SizeValue;
|
|
162
181
|
|
|
163
182
|
/**
|
|
164
|
-
*
|
|
165
|
-
* is driven by the hook and a resize handle should be placed
|
|
166
|
-
* to this panel.
|
|
183
|
+
* The output of `useResizable()`, or its `props`. When provided, the panel
|
|
184
|
+
* width is driven by the hook and a resize handle should be placed
|
|
185
|
+
* adjacent to this panel.
|
|
167
186
|
*
|
|
168
187
|
* @example
|
|
169
188
|
* ```
|
|
170
|
-
* const
|
|
171
|
-
* <LayoutPanel resizable={
|
|
189
|
+
* const resizable = useResizable({ defaultSize: 250, minSize: 200 });
|
|
190
|
+
* <LayoutPanel resizable={resizable}>
|
|
172
191
|
* <Navigation />
|
|
173
192
|
* </LayoutPanel>
|
|
174
|
-
* <ResizeHandle resizable={
|
|
193
|
+
* <ResizeHandle resizable={resizable} />
|
|
175
194
|
* ```
|
|
176
195
|
*/
|
|
177
|
-
resizable?: ResizableProps;
|
|
196
|
+
resizable?: ResizableRegion | ResizableProps;
|
|
178
197
|
}
|
|
179
198
|
|
|
180
199
|
/**
|
|
@@ -213,19 +232,76 @@ export function LayoutPanel({
|
|
|
213
232
|
padding,
|
|
214
233
|
role,
|
|
215
234
|
width,
|
|
216
|
-
resizable,
|
|
235
|
+
resizable: resizableValue,
|
|
217
236
|
xstyle,
|
|
218
237
|
className,
|
|
219
238
|
style,
|
|
220
239
|
ref,
|
|
221
240
|
...props
|
|
222
241
|
}: LayoutPanelProps) {
|
|
242
|
+
const resizable =
|
|
243
|
+
resizableValue == null ? undefined : resizablePropsOf(resizableValue);
|
|
223
244
|
const area = use(LayoutAreaContext);
|
|
224
245
|
const {hasHeader, hasFooter} = use(LayoutSlotsContext);
|
|
225
246
|
|
|
226
247
|
// When resizable props are provided, use the hook-driven size
|
|
227
248
|
const effectiveWidth = resizable ? resizable._size : width;
|
|
228
249
|
|
|
250
|
+
// With no `resizable`, a ResizeHandle beside the panel that has a region's
|
|
251
|
+
// props finds the panel and holds it collapsed with the region. The panel
|
|
252
|
+
// lends its element in its callback ref for that.
|
|
253
|
+
const [paneLink] = useState(createResizablePaneLink);
|
|
254
|
+
const isHeldCollapsed = useSyncExternalStore(
|
|
255
|
+
paneLink.subscribe,
|
|
256
|
+
paneLink.isCollapsed,
|
|
257
|
+
returnFalse,
|
|
258
|
+
);
|
|
259
|
+
const isLentBeside = resizable == null;
|
|
260
|
+
const lendRef = useCallback(
|
|
261
|
+
(element: HTMLDivElement | null) => {
|
|
262
|
+
paneLink.attach(isLentBeside ? element : null);
|
|
263
|
+
},
|
|
264
|
+
[paneLink, isLentBeside],
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
// A collapsing panel moves focus inside it to its ResizeHandle, through the
|
|
268
|
+
// focus-leaving sequence that disclosures share. It goes inert and hidden
|
|
269
|
+
// from assistive technology a commit later, so inert never drops that focus
|
|
270
|
+
// to the page. Opening drops both at once. The ResizeHandle beside it holds
|
|
271
|
+
// the region's collapse state, or else the `resizable` props hold it.
|
|
272
|
+
const elementRef = useRef<HTMLDivElement>(null);
|
|
273
|
+
const isRegionCollapsed =
|
|
274
|
+
resizable == null ? isHeldCollapsed : resizable._isCollapsed;
|
|
275
|
+
const noteFocusBeforeCollapse = useFocusLeavingChange(
|
|
276
|
+
isRegionCollapsed,
|
|
277
|
+
(wasCollapsed: boolean) =>
|
|
278
|
+
wasCollapsed ? null : noteFocusWithin(elementRef.current),
|
|
279
|
+
(noted, isCollapsed) => {
|
|
280
|
+
const panel = elementRef.current;
|
|
281
|
+
if (isCollapsed && panel != null) {
|
|
282
|
+
moveFocusLeftBehind(
|
|
283
|
+
noted,
|
|
284
|
+
paneLink.focusTarget() ?? resizeHandleBeside(panel, area),
|
|
285
|
+
panel,
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
);
|
|
290
|
+
const [isSettledCollapsed, setIsSettledCollapsed] =
|
|
291
|
+
useState(isRegionCollapsed);
|
|
292
|
+
if (!isRegionCollapsed && isSettledCollapsed) {
|
|
293
|
+
setIsSettledCollapsed(false);
|
|
294
|
+
}
|
|
295
|
+
// Syncs `inert` with the browser's focus: the panel goes inert only after
|
|
296
|
+
// this commit's focus move.
|
|
297
|
+
useIsomorphicLayoutEffect(() => {
|
|
298
|
+
if (isRegionCollapsed && !isSettledCollapsed) {
|
|
299
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect -- the panel goes inert only after the focus-leaving move above ran in this commit; inert in the collapsing commit would drop that focus to the page first
|
|
300
|
+
setIsSettledCollapsed(true);
|
|
301
|
+
}
|
|
302
|
+
}, [isRegionCollapsed, isSettledCollapsed]);
|
|
303
|
+
const isConcealed = isRegionCollapsed && isSettledCollapsed;
|
|
304
|
+
|
|
229
305
|
// Determine panel position
|
|
230
306
|
const isStartPanel = area === 'start';
|
|
231
307
|
const isEndPanel = area === 'end';
|
|
@@ -235,6 +311,8 @@ export function LayoutPanel({
|
|
|
235
311
|
// When no divider, collapse spacing for seamless visual flow
|
|
236
312
|
const shouldCollapseSpacing =
|
|
237
313
|
!hasDivider && !isZeroPadding && padding == null;
|
|
314
|
+
const region = useScrollRegionProps({isScrollable, role, label});
|
|
315
|
+
const mergedRef = useMergedRefs(ref, region.ref, elementRef, lendRef);
|
|
238
316
|
|
|
239
317
|
// Select divider style based on position
|
|
240
318
|
const dividerStyle = isStartPanel
|
|
@@ -252,9 +330,9 @@ export function LayoutPanel({
|
|
|
252
330
|
|
|
253
331
|
return (
|
|
254
332
|
<div
|
|
255
|
-
ref={
|
|
256
|
-
role={role}
|
|
257
|
-
aria-label={label}
|
|
333
|
+
ref={mergedRef}
|
|
334
|
+
role={region.role}
|
|
335
|
+
aria-label={region['aria-label']}
|
|
258
336
|
{...mergeProps(
|
|
259
337
|
themeProps('layout-panel'),
|
|
260
338
|
stylex.props(
|
|
@@ -281,7 +359,12 @@ export function LayoutPanel({
|
|
|
281
359
|
className,
|
|
282
360
|
style,
|
|
283
361
|
)}
|
|
284
|
-
{...props}
|
|
362
|
+
{...props}
|
|
363
|
+
{...(isConcealed ? {inert: true, 'aria-hidden': true} : {})}>
|
|
364
|
+
<LayoutChangeSnapshot
|
|
365
|
+
value={isRegionCollapsed}
|
|
366
|
+
onBeforeChange={noteFocusBeforeCollapse}
|
|
367
|
+
/>
|
|
285
368
|
{children}
|
|
286
369
|
</div>
|
|
287
370
|
);
|
|
@@ -46,6 +46,7 @@ import {ModalAnnounceProvider} from '../hooks/ModalAnnounceProvider';
|
|
|
46
46
|
import {overlayPaddingReset} from '../Layout/overlayPaddingReset.stylex';
|
|
47
47
|
import {LayerDepthProvider} from '../Layer/LayerDepthContext';
|
|
48
48
|
import {useLayerDismissal} from '../Layer/useLayerDismissal';
|
|
49
|
+
import {useFocusRegionContainment} from '../hooks/useFocusTrap';
|
|
49
50
|
|
|
50
51
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
51
52
|
import {isRtlElement} from '../hooks/isRtlElement';
|
|
@@ -341,6 +342,9 @@ export function Lightbox({
|
|
|
341
342
|
const t = useComponentTranslator();
|
|
342
343
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
343
344
|
const mergedDialogRef = useMergedRefs(ref, dialogRef);
|
|
345
|
+
// Native showModal() lets Tab leave for the browser's own UI, so the shared
|
|
346
|
+
// module wraps it.
|
|
347
|
+
useFocusRegionContainment(dialogRef, isOpen);
|
|
344
348
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
345
349
|
const imageWrapperRef = useRef<HTMLDivElement>(null);
|
|
346
350
|
const triggerElementRef = useRef<Element | null>(null);
|
package/src/List/List.doc.mjs
CHANGED
|
@@ -13,6 +13,15 @@ export const docs = {
|
|
|
13
13
|
{className: 'astryx-list', visualProps: ['density', 'listStyle']},
|
|
14
14
|
{className: 'astryx-list-item'},
|
|
15
15
|
],
|
|
16
|
+
vars: [
|
|
17
|
+
{
|
|
18
|
+
name: '--_hit-border-bottom',
|
|
19
|
+
description:
|
|
20
|
+
"Width of the divider below a divided row, 0 on the last row. The row's touch hit layer adds it to its offset, so its band starts past the divider. ListItem sets it on the row's own ::after from --border-width under hasDividers, so content inside the row never inherits it, and a theme changes the divider through that token.",
|
|
21
|
+
default: '0px',
|
|
22
|
+
private: true,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
16
25
|
},
|
|
17
26
|
description: 'List container with density, dividers, and header support.',
|
|
18
27
|
props: [
|
|
@@ -32,7 +41,7 @@ export const docs = {
|
|
|
32
41
|
{
|
|
33
42
|
name: 'density',
|
|
34
43
|
type: "'compact' | 'balanced' | 'spacious'",
|
|
35
|
-
description:
|
|
44
|
+
description: "Spacing density for items. Under a finger, an interactive row's hit target reaches 44px where its neighbors leave room, with no change to how rows look or lay out.",
|
|
36
45
|
default: "'balanced'",
|
|
37
46
|
},
|
|
38
47
|
{
|
package/src/List/List.tsx
CHANGED
|
@@ -148,6 +148,11 @@ const styles = stylex.create({
|
|
|
148
148
|
// `hidden`: hidden makes a scroll container, which fights the list's
|
|
149
149
|
// vertical scroller. (StyleX emits the physical longhand of this axis.)
|
|
150
150
|
overflowInline: 'clip',
|
|
151
|
+
// Under a finger, the isolation boundary for what rises inside the list.
|
|
152
|
+
// A row's touch band and a swipeable row order above the rows after them.
|
|
153
|
+
// They stay below a page-level sticky header at the same z-index. With a
|
|
154
|
+
// mouse nothing rises, so the list keeps its stacking.
|
|
155
|
+
isolation: {default: null, '@media (pointer: coarse)': 'isolate'},
|
|
151
156
|
},
|
|
152
157
|
// Subgridded numbered rows contribute their marker's intrinsic width to
|
|
153
158
|
// one column, so text and nested lists never move with an individual number.
|
package/src/List/ListItem.tsx
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file ListItem.tsx
|
|
7
|
-
* @input Uses React, ReactNode, StyleXStyles, theme tokens
|
|
8
|
-
* treatment
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* @input Uses React, ReactNode, StyleXStyles, theme tokens and the List row
|
|
8
|
+
* edge treatment. It also uses the touch hit area (utils/touchHitArea.ts and
|
|
9
|
+
* its layer) and CheckboxInput. It reads the marker or task checkbox a
|
|
10
|
+
* ListMarkerScope sets, for Markdown's nested lists and the task items of mixed
|
|
11
|
+
* lists. It also reads Item's private exact-marker formatting scope for numbered
|
|
11
12
|
* rows. Number markers stay on one line in the List's shared column,
|
|
12
13
|
* keeping every sibling's text and nested list on the same start line;
|
|
13
14
|
* they end on one line too, right-aligned with tabular figures, and hang
|
|
@@ -41,10 +42,14 @@ import type {BaseProps} from '../BaseProps';
|
|
|
41
42
|
import {ListContext, type ListMarker} from './ListContext';
|
|
42
43
|
import {CheckboxInput} from '../CheckboxInput/CheckboxInput';
|
|
43
44
|
import {mergeProps} from '../utils/mergeProps';
|
|
44
|
-
import {Item} from '../Item/Item';
|
|
45
|
+
import {Item, servesSwipeActions} from '../Item/Item';
|
|
46
|
+
import {ItemListRowContext} from '../Item/ItemListRowContext';
|
|
45
47
|
import {ItemMarkerColumnsContext} from '../Item/ItemMarkerColumnsContext';
|
|
46
48
|
import type {ItemAlign, ItemSwipeActions, ItemSwipeBehavior} from '../Item';
|
|
47
49
|
import {themeProps} from '../utils/themeProps';
|
|
50
|
+
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
51
|
+
import {useTouchHitArea} from '../utils/touchHitArea';
|
|
52
|
+
import {touchHitAreaStyles} from '../utils/touchHitArea.stylex';
|
|
48
53
|
|
|
49
54
|
// =============================================================================
|
|
50
55
|
// Types
|
|
@@ -198,6 +203,21 @@ const styles = stylex.create({
|
|
|
198
203
|
'max(var(--container-padding-inline-end, 0px), var(--_item-inset-inline))',
|
|
199
204
|
borderRadius: 0,
|
|
200
205
|
},
|
|
206
|
+
// Under a finger, the row's touch band rises above the rows after it. A
|
|
207
|
+
// later row is positioned with no z-index, so it would paint and hit-test
|
|
208
|
+
// over the band. Only inside a List (isInList).
|
|
209
|
+
bandRaised: {
|
|
210
|
+
'::after': {
|
|
211
|
+
zIndex: {default: null, '@media (pointer: coarse)': 1},
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
// A swipeable row is a stacking context at rest, since Item translates its
|
|
215
|
+
// swipe root. So its band's own z-index orders only inside it. Under a
|
|
216
|
+
// finger the row itself rises above the rows after it, whose boxes its band
|
|
217
|
+
// reaches into. The list isolates, so the row stays below a sticky header.
|
|
218
|
+
swipeRaised: {
|
|
219
|
+
zIndex: {default: null, '@media (pointer: coarse)': 1},
|
|
220
|
+
},
|
|
201
221
|
withDivider: {
|
|
202
222
|
borderBlockEndWidth: borderVars['--border-width'],
|
|
203
223
|
borderBlockEndStyle: 'solid',
|
|
@@ -209,6 +229,15 @@ const styles = stylex.create({
|
|
|
209
229
|
':last-child': {
|
|
210
230
|
borderBlockEndWidth: 0,
|
|
211
231
|
},
|
|
232
|
+
// The touch hit layer's band starts past the divider, the edge of the box
|
|
233
|
+
// its insets are measured from (utils/touchHitArea.stylex.ts). The width
|
|
234
|
+
// sits on the layer itself, so content inside the row never inherits it.
|
|
235
|
+
'::after': {
|
|
236
|
+
'--_hit-border-bottom': {
|
|
237
|
+
default: borderVars['--border-width'],
|
|
238
|
+
':last-child': '0px',
|
|
239
|
+
},
|
|
240
|
+
},
|
|
212
241
|
},
|
|
213
242
|
});
|
|
214
243
|
|
|
@@ -378,6 +407,28 @@ export function ListItem({
|
|
|
378
407
|
...restProps
|
|
379
408
|
}: ListItemProps) {
|
|
380
409
|
const ctx = use(ListContext);
|
|
410
|
+
// A List isolates its rows, so what a row raises stays below a page-level
|
|
411
|
+
// sticky header. Outside a List nothing bounds a raise, so a row raises
|
|
412
|
+
// nothing there.
|
|
413
|
+
const isInList = ctx != null;
|
|
414
|
+
// Under a finger, the row's hit target grows where its neighbors leave room.
|
|
415
|
+
const isTouchTarget =
|
|
416
|
+
(onClick != null || href != null || interactiveRef != null) && !isDisabled;
|
|
417
|
+
const hitAreaRef = useTouchHitArea(isTouchTarget);
|
|
418
|
+
const mergedRef = useMergedRefs(ref, hitAreaRef);
|
|
419
|
+
// A row that Item serves swipe actions on is a stacking context at rest. So
|
|
420
|
+
// its band's own z-index orders only inside it, and under a finger the row
|
|
421
|
+
// raises itself. Its root is its `<li>`, never a link.
|
|
422
|
+
const isRaisedSwipeRow =
|
|
423
|
+
isInList &&
|
|
424
|
+
isTouchTarget &&
|
|
425
|
+
servesSwipeActions({
|
|
426
|
+
swipeActions: restProps.swipeActions,
|
|
427
|
+
isDisabled,
|
|
428
|
+
isDelegate: interactiveRef != null,
|
|
429
|
+
isLinkRoot: false,
|
|
430
|
+
role: restProps.role,
|
|
431
|
+
});
|
|
381
432
|
const density = ctx?.density ?? 'balanced';
|
|
382
433
|
const hasDividers = ctx?.hasDividers ?? false;
|
|
383
434
|
const edge = ctx?.edge ?? 'padded';
|
|
@@ -432,7 +483,7 @@ export function ListItem({
|
|
|
432
483
|
const item = (
|
|
433
484
|
<Item
|
|
434
485
|
as="li"
|
|
435
|
-
ref={
|
|
486
|
+
ref={mergedRef}
|
|
436
487
|
marker={marker}
|
|
437
488
|
startContent={startContent}
|
|
438
489
|
label={label}
|
|
@@ -453,6 +504,9 @@ export function ListItem({
|
|
|
453
504
|
hasMarkers && styles.withCounter,
|
|
454
505
|
hasDividers && styles.withDivider,
|
|
455
506
|
hasDividers && embeddedStyles.noRadius,
|
|
507
|
+
isTouchTarget && touchHitAreaStyles.layer,
|
|
508
|
+
isTouchTarget && isInList && styles.bandRaised,
|
|
509
|
+
isRaisedSwipeRow && styles.swipeRaised,
|
|
456
510
|
edge === 'flush' && styles.edgeFlush,
|
|
457
511
|
edge === 'outset' && styles.edgeOutset,
|
|
458
512
|
edge === 'bleed' && styles.edgeBleed,
|
|
@@ -463,12 +517,13 @@ export function ListItem({
|
|
|
463
517
|
{...restProps}
|
|
464
518
|
/>
|
|
465
519
|
);
|
|
520
|
+
const row = <ItemListRowContext value>{item}</ItemListRowContext>;
|
|
466
521
|
// Only numbered rows contribute two cells to List's shared counter grid.
|
|
467
522
|
// Passing the marker identity keeps this request off unrelated Items in slots.
|
|
468
523
|
return listStyle === 'decimal' ? (
|
|
469
|
-
<ItemMarkerColumnsContext value={marker}>{
|
|
524
|
+
<ItemMarkerColumnsContext value={marker}>{row}</ItemMarkerColumnsContext>
|
|
470
525
|
) : (
|
|
471
|
-
|
|
526
|
+
row
|
|
472
527
|
);
|
|
473
528
|
}
|
|
474
529
|
|
package/src/Markdown/parser.ts
CHANGED
|
@@ -2748,11 +2748,12 @@ const URL_LITERAL_RE = new RegExp(
|
|
|
2748
2748
|
/** Bare www. URL. Resulting href gets `http://` prepended. */
|
|
2749
2749
|
const WWW_LITERAL_RE = new RegExp(`www\\.${ANY_NON_WHITESPACE_OR_ANGLE}`, 'g');
|
|
2750
2750
|
|
|
2751
|
-
/**
|
|
2752
|
-
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
2751
|
+
/**
|
|
2752
|
+
* The domain of a bare email, with at least one dot. The scan matches it after
|
|
2753
|
+
* each `@`. A pattern that starts at every character rereads a long run each
|
|
2754
|
+
* time, so its cost grows with the square of the run.
|
|
2755
|
+
*/
|
|
2756
|
+
const EMAIL_DOMAIN_RE = new RegExp(DOMAIN_WITH_DOT, 'y');
|
|
2756
2757
|
|
|
2757
2758
|
/** Angle-bracket autolink: `<scheme:url>` (CommonMark §6.5). */
|
|
2758
2759
|
const ANGLE_URL_RE = new RegExp(`<(${ANGLE_SCHEME}:${ANGLE_URL_BODY})>`, 'g');
|
|
@@ -2771,6 +2772,11 @@ const EMAIL_LOCAL_CHARS = new Set(
|
|
|
2771
2772
|
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._%+-@',
|
|
2772
2773
|
);
|
|
2773
2774
|
|
|
2775
|
+
/** The characters `EMAIL_LOCAL_PART` allows. */
|
|
2776
|
+
const EMAIL_LOCAL_PART_CHARS = new Set(
|
|
2777
|
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._%+-',
|
|
2778
|
+
);
|
|
2779
|
+
|
|
2774
2780
|
interface AutolinkMatch {
|
|
2775
2781
|
start: number;
|
|
2776
2782
|
end: number;
|
|
@@ -2786,35 +2792,30 @@ interface AutolinkMatch {
|
|
|
2786
2792
|
* `https://example.com/Foo_(bar)` keeps the inner pair).
|
|
2787
2793
|
*/
|
|
2788
2794
|
function peelTrailingPunctAndParens(url: string): string {
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
|
|
2795
|
-
|
|
2796
|
-
|
|
2797
|
-
|
|
2798
|
-
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
|
|
2810
|
-
if (close > open) {
|
|
2811
|
-
s = s.slice(0, -1);
|
|
2812
|
-
continue;
|
|
2813
|
-
}
|
|
2795
|
+
// Each peeled `)` lowers the close count instead of a recount, so a long
|
|
2796
|
+
// run of `)` costs one pass.
|
|
2797
|
+
let open = 0;
|
|
2798
|
+
let close = 0;
|
|
2799
|
+
for (let idx = 0; idx < url.length; idx++) {
|
|
2800
|
+
if (url[idx] === '(') {
|
|
2801
|
+
open++;
|
|
2802
|
+
} else if (url[idx] === ')') {
|
|
2803
|
+
close++;
|
|
2804
|
+
}
|
|
2805
|
+
}
|
|
2806
|
+
let end = url.length;
|
|
2807
|
+
while (end > 0) {
|
|
2808
|
+
const ch = url[end - 1];
|
|
2809
|
+
if (TRAILING_PUNCT_CHARS.has(ch)) {
|
|
2810
|
+
end--;
|
|
2811
|
+
} else if (ch === ')' && close > open) {
|
|
2812
|
+
close--;
|
|
2813
|
+
end--;
|
|
2814
|
+
} else {
|
|
2815
|
+
break;
|
|
2814
2816
|
}
|
|
2815
|
-
break;
|
|
2816
2817
|
}
|
|
2817
|
-
return
|
|
2818
|
+
return url.slice(0, end);
|
|
2818
2819
|
}
|
|
2819
2820
|
|
|
2820
2821
|
/** Characters that, when preceding a URL, indicate it's part of a larger token. */
|
|
@@ -2922,26 +2923,48 @@ function scanAutolinksInText(text: string): AutolinkMatch[] {
|
|
|
2922
2923
|
}
|
|
2923
2924
|
}
|
|
2924
2925
|
|
|
2925
|
-
// bare email
|
|
2926
|
+
// bare email: local-part@domain, found from each `@`
|
|
2926
2927
|
{
|
|
2927
|
-
|
|
2928
|
-
let
|
|
2929
|
-
|
|
2930
|
-
|
|
2928
|
+
// A match, accepted or not, ends where the next one may start.
|
|
2929
|
+
let consumedTo = 0;
|
|
2930
|
+
for (
|
|
2931
|
+
let at = text.indexOf('@');
|
|
2932
|
+
at !== -1;
|
|
2933
|
+
at = text.indexOf('@', at + 1)
|
|
2934
|
+
) {
|
|
2935
|
+
let start = at;
|
|
2936
|
+
while (
|
|
2937
|
+
start > consumedTo &&
|
|
2938
|
+
EMAIL_LOCAL_PART_CHARS.has(text[start - 1])
|
|
2939
|
+
) {
|
|
2940
|
+
start--;
|
|
2941
|
+
}
|
|
2942
|
+
if (start === at) {
|
|
2943
|
+
continue;
|
|
2944
|
+
}
|
|
2945
|
+
EMAIL_DOMAIN_RE.lastIndex = at + 1;
|
|
2946
|
+
const domain = EMAIL_DOMAIN_RE.exec(text);
|
|
2947
|
+
if (domain === null) {
|
|
2948
|
+
continue;
|
|
2949
|
+
}
|
|
2950
|
+
const end = at + 1 + domain[0].length;
|
|
2951
|
+
consumedTo = end;
|
|
2952
|
+
const prev = text[start - 1];
|
|
2931
2953
|
// Reject if previous char could be part of the local part or sits in
|
|
2932
2954
|
// a position that would make this match continuation of something
|
|
2933
2955
|
// bigger (`name@x.y@host`, `foo+bar@x`, `mailto:user@host`).
|
|
2934
2956
|
if (prev != null && EMAIL_LOCAL_CHARS.has(prev)) {
|
|
2935
2957
|
continue;
|
|
2936
2958
|
}
|
|
2937
|
-
if (text.slice(Math.max(0,
|
|
2959
|
+
if (text.slice(Math.max(0, start - 7), start) === 'mailto:') {
|
|
2938
2960
|
continue;
|
|
2939
2961
|
}
|
|
2962
|
+
const email = text.slice(start, end);
|
|
2940
2963
|
matches.push({
|
|
2941
|
-
start
|
|
2942
|
-
end
|
|
2943
|
-
href: `mailto:${
|
|
2944
|
-
display:
|
|
2964
|
+
start,
|
|
2965
|
+
end,
|
|
2966
|
+
href: `mailto:${email}`,
|
|
2967
|
+
display: email,
|
|
2945
2968
|
});
|
|
2946
2969
|
}
|
|
2947
2970
|
}
|
|
@@ -158,7 +158,7 @@ const styles = stylex.create({
|
|
|
158
158
|
default: 'pointer',
|
|
159
159
|
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
160
160
|
},
|
|
161
|
-
color: colorVars['--color-accent'],
|
|
161
|
+
color: colorVars['--color-text-accent'],
|
|
162
162
|
fontSize: typeScaleVars['--text-body-size'],
|
|
163
163
|
lineHeight: typeScaleVars['--text-body-leading'],
|
|
164
164
|
fontWeight: fontWeightVars['--font-weight-medium'],
|
|
@@ -98,7 +98,7 @@ export const docs = {
|
|
|
98
98
|
name: 'onOpenChange',
|
|
99
99
|
type: '(isOpen: boolean) => void',
|
|
100
100
|
description:
|
|
101
|
-
'Called when the drawer visibility changes (backdrop click, Escape key, or close button). Inside AppShell, this is managed automatically via context.',
|
|
101
|
+
'Called when the drawer visibility changes (backdrop click, Escape key, or close button). Inside AppShell, this is managed automatically via context. On a phone or tablet (a coarse primary pointer), the drawer takes no tap or drag while it slides in; keys and assistive technology still act. After a close, focus returns to the element that opened it once its dialog closes.',
|
|
102
102
|
},
|
|
103
103
|
{
|
|
104
104
|
name: 'children',
|
|
@@ -203,7 +203,7 @@ export const docsZh = {
|
|
|
203
203
|
name: 'onOpenChange',
|
|
204
204
|
type: '(isOpen: boolean) => void',
|
|
205
205
|
description:
|
|
206
|
-
'当抽屉可见性变化时调用(点击背景遮罩、按 Escape
|
|
206
|
+
'当抽屉可见性变化时调用(点击背景遮罩、按 Escape 键或点击关闭按钮)。在手机或平板上(主指针为粗指针时),抽屉滑入期间不接受点按或拖动;键盘和辅助技术仍可操作。关闭后,焦点会在对话框关闭时回到打开它的元素。',
|
|
207
207
|
required: true,
|
|
208
208
|
},
|
|
209
209
|
{
|
|
@@ -311,7 +311,7 @@ export const docsDense = {
|
|
|
311
311
|
propDescriptions: {
|
|
312
312
|
isOpen: 'whether drawer is open',
|
|
313
313
|
onOpenChange:
|
|
314
|
-
'called when drawer visibility changes (backdrop click, Escape, close button)',
|
|
314
|
+
'called when drawer visibility changes (backdrop click, Escape, close button); under a coarse primary pointer the drawer takes no tap or drag while it slides in (keys still act)',
|
|
315
315
|
children:
|
|
316
316
|
'drawer content; typically SideNavSection/SideNavItem or any ReactNode',
|
|
317
317
|
header:
|