@astryxdesign/core 0.7.5 → 0.7.6-canary.0d71e8d
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/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +5 -5
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +183 -5
- package/dist/AppShell/observeMainOverflow.d.ts +9 -0
- package/dist/AppShell/observeMainOverflow.d.ts.map +1 -0
- package/dist/AppShell/observeMainOverflow.js +125 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +12 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +7 -1
- package/dist/BottomSheet/BottomSheet.js +1 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +2 -1
- package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +30 -3
- package/dist/Button/Button.js +4 -4
- package/dist/Carousel/Carousel.d.ts +3 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +12 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -5
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +37 -4
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +41 -4
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -4
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +101 -15
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +8 -3
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +11 -7
- package/dist/DateInput/usePointerDragScroll.d.ts +10 -1
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -1
- package/dist/DateInput/usePointerDragScroll.js +25 -9
- package/dist/DateInput/useScrollSettle.d.ts +3 -1
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -1
- package/dist/DateInput/useScrollSettle.js +37 -8
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +23 -12
- package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
- package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +34 -9
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +5 -4
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +2 -1
- package/dist/Drawer/Drawer.d.ts +1 -0
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +7 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +35 -22
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -16
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +2 -1
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +4 -4
- package/dist/Field/InputClearButton.js +3 -3
- package/dist/Field/PanelSearchInput.js +2 -2
- package/dist/FieldStatus/FieldStatus.d.ts +3 -0
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +3 -2
- package/dist/FileInput/FileInput.d.ts +3 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +34 -13
- package/dist/Heading/Heading.js +1 -1
- package/dist/Icon/Icon.js +1 -1
- package/dist/Indicator/CheckIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckIndicator.js +2 -1
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +3 -1
- package/dist/Indicator/RadioIndicator.d.ts.map +1 -1
- package/dist/Indicator/RadioIndicator.js +3 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +21 -7
- package/dist/Item/ItemSwipeLayer.js +1 -1
- package/dist/Layer/popoverOperations.d.ts +27 -0
- package/dist/Layer/popoverOperations.d.ts.map +1 -0
- package/dist/Layer/popoverOperations.js +159 -0
- package/dist/Layer/useLayer.d.ts +1 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +120 -65
- package/dist/Layout/Layout.js +1 -1
- package/dist/Layout/LayoutContent.js +1 -1
- package/dist/Layout/LayoutFooter.js +1 -1
- package/dist/Layout/LayoutHeader.js +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +5 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +8 -3
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +7 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +26 -10
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
- package/dist/NumberInput/NumberInput.d.ts +3 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +26 -5
- package/dist/NumberInput/numberParser.d.ts +3 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -1
- package/dist/NumberInput/numberParser.js +7 -44
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +27 -0
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +32 -12
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +10 -3
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +37 -30
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +11 -3
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +28 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
- package/dist/Selector/useSelectorPresentation.d.ts +8 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +20 -4
- package/dist/SideNav/SideNavItem.d.ts +2 -2
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +18 -7
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +10 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +3 -3
- package/dist/Stack/Stack.js +1 -1
- package/dist/Stack/StackItem.js +1 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +26 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +10 -3
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +16 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -10
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +46 -58
- package/dist/Text/Text.js +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +23 -5
- package/dist/TextArea/TextArea.d.ts +1 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -3
- package/dist/TimeInput/TimeInput.d.ts +6 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -14
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +5 -4
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +2 -2
- package/dist/Timestamp/TimestampHoverCard.js +4 -4
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +60 -20
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +101 -54
- package/dist/ToggleButton/ToggleButtonGroup.d.ts +7 -1
- package/dist/ToggleButton/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButtonGroup.js +16 -2
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +52 -5
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +14 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +44 -7
- package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts +2 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.d.ts.map +1 -0
- package/dist/Tokenizer/TokenizerClearAllMessageContext.js +17 -0
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +2 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -0
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +1 -0
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -4
- package/dist/Typeahead/BaseTypeahead.d.ts +4 -4
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +43 -7
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +43 -9
- package/dist/astryx.css +25 -4
- package/dist/gestures/GestureArena.d.ts +32 -1
- package/dist/gestures/GestureArena.d.ts.map +1 -1
- package/dist/gestures/GestureArena.js +110 -9
- package/dist/gestures/GestureHost.d.ts +351 -0
- package/dist/gestures/GestureHost.d.ts.map +1 -0
- package/dist/gestures/GestureHost.js +1773 -0
- package/dist/gestures/GestureRecognizer.d.ts +13 -1
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/GestureRecognizer.js +19 -1
- package/dist/gestures/LongPressGestureRecognizer.d.ts +1 -0
- package/dist/gestures/LongPressGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/LongPressGestureRecognizer.js +3 -0
- package/dist/gestures/PanGestureRecognizer.d.ts +1 -0
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +3 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts +31 -0
- package/dist/gestures/PinchGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/PinchGestureRecognizer.js +128 -0
- package/dist/gestures/PressTracker.d.ts +112 -0
- package/dist/gestures/PressTracker.d.ts.map +1 -0
- package/dist/gestures/PressTracker.js +267 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +71 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/SwipeGestureRecognizer.js +148 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/TapGestureRecognizer.js +3 -0
- package/dist/gestures/VelocityTracker.d.ts +6 -2
- package/dist/gestures/VelocityTracker.d.ts.map +1 -1
- package/dist/gestures/VelocityTracker.js +7 -3
- package/dist/gestures/haptics.d.ts +65 -0
- package/dist/gestures/haptics.d.ts.map +1 -0
- package/dist/gestures/haptics.js +182 -0
- package/dist/gestures/index.d.ts +37 -0
- package/dist/gestures/index.d.ts.map +1 -0
- package/dist/gestures/index.js +25 -0
- package/dist/gestures/nativeScroll.d.ts +42 -0
- package/dist/gestures/nativeScroll.d.ts.map +1 -0
- package/dist/gestures/nativeScroll.js +228 -0
- package/dist/gestures/touchAction.d.ts +60 -0
- package/dist/gestures/touchAction.d.ts.map +1 -0
- package/dist/gestures/touchAction.js +157 -0
- package/dist/gestures/touchActionRule.d.ts +34 -0
- package/dist/gestures/touchActionRule.d.ts.map +1 -0
- package/dist/gestures/touchActionRule.js +140 -0
- package/dist/gestures/types.d.ts +18 -7
- package/dist/gestures/types.d.ts.map +1 -1
- package/dist/gestures/types.js +22 -2
- package/dist/gestures/useGestureRecognizer.d.ts +56 -0
- package/dist/gestures/useGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/useGestureRecognizer.js +226 -0
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.js +107 -61
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
- package/dist/hooks/scrollKeyboardDelegation.js +7 -3
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +4 -1
- package/dist/hooks/useAnnounce.d.ts +101 -42
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +161 -75
- package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +5 -3
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +6 -12
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +12 -1
- package/dist/hooks/useScrollOverflow.d.ts +2 -1
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +56 -10
- package/dist/i18n/generated-locales/af-ZA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/af-ZA.generated.js +0 -5
- package/dist/i18n/generated-locales/ar-SA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ar-SA.generated.js +0 -5
- package/dist/i18n/generated-locales/ca-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ca-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/cs-CZ.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/cs-CZ.generated.js +0 -5
- package/dist/i18n/generated-locales/da-DK.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/da-DK.generated.js +0 -5
- package/dist/i18n/generated-locales/de-DE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/de-DE.generated.js +0 -5
- package/dist/i18n/generated-locales/el-GR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/el-GR.generated.js +0 -5
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +8 -5
- package/dist/i18n/generated-locales/es-ES.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/es-ES.generated.js +0 -5
- package/dist/i18n/generated-locales/fi-FI.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fi-FI.generated.js +0 -5
- package/dist/i18n/generated-locales/fr-FR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/fr-FR.generated.js +0 -5
- package/dist/i18n/generated-locales/he-IL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/he-IL.generated.js +0 -5
- package/dist/i18n/generated-locales/hu-HU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/hu-HU.generated.js +0 -5
- package/dist/i18n/generated-locales/it-IT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/it-IT.generated.js +0 -5
- package/dist/i18n/generated-locales/ja-JP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ja-JP.generated.js +0 -5
- package/dist/i18n/generated-locales/ko-KR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ko-KR.generated.js +0 -5
- package/dist/i18n/generated-locales/nl-NL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/nl-NL.generated.js +0 -5
- package/dist/i18n/generated-locales/no-NO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/no-NO.generated.js +0 -5
- package/dist/i18n/generated-locales/pl-PL.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pl-PL.generated.js +0 -5
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +8 -5
- package/dist/i18n/generated-locales/pt-BR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-BR.generated.js +0 -5
- package/dist/i18n/generated-locales/pt-PT.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pt-PT.generated.js +0 -5
- package/dist/i18n/generated-locales/ro-RO.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ro-RO.generated.js +0 -5
- package/dist/i18n/generated-locales/ru-RU.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/ru-RU.generated.js +0 -5
- package/dist/i18n/generated-locales/sr-SP.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sr-SP.generated.js +0 -5
- package/dist/i18n/generated-locales/sv-SE.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/sv-SE.generated.js +0 -5
- package/dist/i18n/generated-locales/tr-TR.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/tr-TR.generated.js +0 -5
- package/dist/i18n/generated-locales/uk-UA.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/uk-UA.generated.js +0 -5
- package/dist/i18n/generated-locales/vi-VN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/vi-VN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-CN.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-CN.generated.js +0 -5
- package/dist/i18n/generated-locales/zh-TW.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/zh-TW.generated.js +0 -5
- package/dist/i18n/useListFormatter.d.ts +9 -0
- package/dist/i18n/useListFormatter.d.ts.map +1 -0
- package/dist/i18n/useListFormatter.js +41 -0
- package/dist/motion/animator.d.ts +83 -8
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +701 -119
- package/dist/motion/coast.d.ts +4 -1
- package/dist/motion/coast.d.ts.map +1 -1
- package/dist/motion/coast.js +4 -2
- package/dist/motion/reducedMotion.d.ts.map +1 -1
- package/dist/motion/reducedMotion.js +6 -2
- package/dist/motion/reducedMotionPlan.d.ts +7 -0
- package/dist/motion/reducedMotionPlan.d.ts.map +1 -1
- package/dist/motion/reducedMotionPlan.js +14 -1
- package/dist/motion/resolveMotion.d.ts +42 -0
- package/dist/motion/resolveMotion.d.ts.map +1 -0
- package/dist/motion/resolveMotion.js +43 -0
- package/dist/motion/roleValue.d.ts +2 -1
- package/dist/motion/roleValue.d.ts.map +1 -1
- package/dist/motion/roleValue.js +2 -1
- package/dist/motion/uikit/timing.d.ts +7 -1
- package/dist/motion/uikit/timing.d.ts.map +1 -1
- package/dist/motion/uikit/timing.js +19 -1
- package/dist/theme/defineTheme.d.ts +19 -5
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +64 -4
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
- package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
- package/dist/theme/domainTokens/index.d.ts +5 -4
- package/dist/theme/domainTokens/index.d.ts.map +1 -1
- package/dist/theme/domainTokens/index.js +5 -9
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/motionKnobs.d.ts +56 -0
- package/dist/theme/motionKnobs.d.ts.map +1 -0
- package/dist/theme/motionKnobs.js +48 -0
- package/dist/theme/resolveThemeValues.d.ts +11 -4
- package/dist/theme/resolveThemeValues.d.ts.map +1 -1
- package/dist/theme/resolveThemeValues.js +40 -4
- package/dist/theme/themeAdaptations.d.ts +7 -3
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +36 -7
- package/dist/theme/themeMotion.d.ts +96 -0
- package/dist/theme/themeMotion.d.ts.map +1 -0
- package/dist/theme/themeMotion.js +177 -0
- package/dist/theme/tokenReferences.d.ts +31 -0
- package/dist/theme/tokenReferences.d.ts.map +1 -0
- package/dist/theme/tokenReferences.js +132 -0
- package/dist/theme/tokens.d.ts +1 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +9 -129
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +12 -0
- package/dist/utils/focusOutline.stylex.d.ts +6 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +7 -0
- package/dist/utils/focusReturn.d.ts +17 -1
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +11 -4
- package/dist/utils/getNodeText.d.ts +8 -0
- package/dist/utils/getNodeText.d.ts.map +1 -0
- package/dist/utils/getNodeText.js +37 -0
- package/dist/utils/interactionModality.d.ts +11 -2
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +58 -5
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +17 -8
- package/dist/utils/plainDate.d.ts +2 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +46 -3
- package/dist/utils/presentation.d.ts +50 -0
- package/dist/utils/presentation.d.ts.map +1 -0
- package/dist/utils/presentation.js +125 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -1
- package/dist/utils/primaryClick.d.ts +11 -0
- package/dist/utils/primaryClick.d.ts.map +1 -0
- package/dist/utils/primaryClick.js +25 -0
- package/dist/utils/sharedMutationObserver.d.ts +19 -11
- package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
- package/dist/utils/sharedMutationObserver.js +66 -26
- package/dist/utils/timeFormat.d.ts +47 -0
- package/dist/utils/timeFormat.d.ts.map +1 -0
- package/dist/utils/timeFormat.js +240 -0
- package/dist/utils/touchPresentation.d.ts +2 -2
- package/dist/utils/touchPresentation.d.ts.map +1 -1
- package/dist/utils/touchPresentation.js +13 -8
- package/dist/utils/touchPresentation.stylex.d.ts +15 -0
- package/dist/utils/touchPresentation.stylex.d.ts.map +1 -0
- package/dist/utils/touchPresentation.stylex.js +33 -0
- package/dist/utils/touchQueries.d.ts +13 -0
- package/dist/utils/touchQueries.d.ts.map +1 -0
- package/dist/utils/touchQueries.js +15 -0
- package/dist/utils/unicodeDigits.d.ts +20 -0
- package/dist/utils/unicodeDigits.d.ts.map +1 -0
- package/dist/utils/unicodeDigits.js +70 -0
- package/dist/utils/useFocusAcrossSwap.d.ts +19 -0
- package/dist/utils/useFocusAcrossSwap.d.ts.map +1 -0
- package/dist/utils/useFocusAcrossSwap.js +41 -0
- package/locales/af-ZA.json +0 -21
- package/locales/ar-SA.json +0 -21
- package/locales/ca-ES.json +0 -21
- package/locales/cs-CZ.json +0 -21
- package/locales/da-DK.json +0 -21
- package/locales/de-DE.json +0 -21
- package/locales/el-GR.json +0 -21
- package/locales/en.json +35 -23
- package/locales/es-ES.json +0 -21
- package/locales/fi-FI.json +0 -21
- package/locales/fr-FR.json +0 -21
- package/locales/he-IL.json +0 -21
- package/locales/hu-HU.json +0 -21
- package/locales/it-IT.json +0 -21
- package/locales/ja-JP.json +0 -21
- package/locales/ko-KR.json +0 -21
- package/locales/nl-NL.json +0 -21
- package/locales/no-NO.json +0 -21
- package/locales/pl-PL.json +0 -21
- package/locales/pseudo.json +23 -14
- package/locales/pt-BR.json +0 -21
- package/locales/pt-PT.json +0 -21
- package/locales/ro-RO.json +0 -21
- package/locales/ru-RU.json +0 -21
- package/locales/sr-SP.json +0 -21
- package/locales/sv-SE.json +0 -21
- package/locales/tr-TR.json +0 -21
- package/locales/uk-UA.json +0 -21
- package/locales/vi-VN.json +0 -21
- package/locales/zh-CN.json +0 -21
- package/locales/zh-TW.json +0 -21
- package/package.json +5 -4
- package/src/AlertDialog/AlertDialog.tsx +6 -5
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
- package/src/AppShell/AppShell.doc.mjs +1 -1
- package/src/AppShell/AppShell.spec.md +9 -12
- package/src/AppShell/AppShell.test.tsx +164 -2
- package/src/AppShell/AppShell.tsx +225 -5
- package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +534 -0
- package/src/AppShell/observeMainOverflow.test.ts +173 -0
- package/src/AppShell/observeMainOverflow.ts +143 -0
- package/src/Avatar/Avatar.spec.md +22 -22
- package/src/Avatar/Avatar.tsx +18 -1
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
- package/src/Badge/Badge.doc.mjs +1 -1
- package/src/Badge/Badge.tsx +19 -2
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
- package/src/BottomSheet/BottomSheet.test.tsx +46 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
- package/src/BottomSheet/useSheetGestures.test.ts +52 -0
- package/src/BottomSheet/useSheetGestures.ts +37 -6
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
- package/src/Button/Button.tsx +4 -4
- package/src/Calendar/Calendar.spec.md +87 -48
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.spec.md +9 -9
- package/src/Carousel/Carousel.test.tsx +124 -3
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +1 -16
- package/src/Chat/ChatComposer.spec.md +75 -59
- package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
- package/src/Chat/ChatDictationButton.spec.md +126 -81
- package/src/Chat/ChatLayout.spec.md +41 -36
- package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
- package/src/Chat/ChatMessage.spec.md +64 -65
- package/src/Chat/ChatSendButton.spec.md +78 -67
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/Citation/Citation.spec.md +60 -47
- package/src/ClickableCard/ClickableCard.test.tsx +96 -0
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +38 -3
- package/src/Collapsible/Collapsible.spec.md +2 -0
- package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
- package/src/ComplexSelector/ComplexSelector.test.tsx +148 -0
- package/src/ComplexSelector/ComplexSelector.tsx +41 -4
- package/src/ContextMenu/ContextMenu.spec.md +84 -56
- package/src/ContextMenu/ContextMenu.test.tsx +35 -0
- package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
- package/src/DateInput/DateInput.spec.md +74 -57
- package/src/DateInput/DateInput.test.tsx +115 -3
- package/src/DateInput/DateInput.tsx +29 -14
- package/src/DateInput/DateInputTouch.test.tsx +120 -0
- package/src/DateInput/MonthScroller.tsx +106 -20
- package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
- package/src/DateInput/TouchDateField.tsx +14 -3
- package/src/DateInput/Wheel.tsx +9 -6
- package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
- package/src/DateInput/usePointerDragScroll.ts +34 -10
- package/src/DateInput/useScrollSettle.ts +38 -7
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
- package/src/DateRangeInput/DateRangeInput.tsx +16 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
- package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
- package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
- package/src/DateTimeInput/DateTimeInput.tsx +46 -24
- package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
- package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
- package/src/Dialog/Dialog.test.tsx +216 -2
- package/src/Dialog/Dialog.tsx +42 -9
- package/src/Dialog/DialogHeader.tsx +5 -4
- package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
- package/src/Divider/Divider.tsx +2 -1
- package/src/Drawer/Drawer.spec.md +111 -80
- package/src/Drawer/Drawer.test.tsx +35 -0
- package/src/Drawer/Drawer.tsx +13 -2
- package/src/Drawer/DrawerHeader.spec.md +181 -0
- package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
- package/src/DropdownMenu/DropdownMenu.test.tsx +158 -0
- package/src/DropdownMenu/DropdownMenu.tsx +43 -21
- package/src/DropdownMenu/DropdownMenuCheckboxItem.spec.md +192 -0
- package/src/DropdownMenu/DropdownMenuDivider.spec.md +25 -31
- package/src/DropdownMenu/DropdownMenuGroup.spec.md +145 -0
- package/src/DropdownMenu/DropdownMenuItem.spec.md +48 -42
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +34 -37
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +54 -53
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +47 -41
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
- package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
- package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
- package/src/EmptyState/EmptyState.spec.md +35 -29
- package/src/EmptyState/EmptyState.tsx +2 -1
- package/src/Field/FieldLabel.tsx +5 -4
- package/src/Field/InputClearButton.tsx +3 -3
- package/src/Field/PanelSearchInput.tsx +2 -2
- package/src/FieldStatus/FieldStatus.tsx +9 -2
- package/src/FieldStatus/__tests__/FieldStatusAudit.a11y.chromium.spec.ts +477 -0
- package/src/FileInput/FileInput.test.tsx +159 -0
- package/src/FileInput/FileInput.tsx +34 -6
- package/src/FileInput/__tests__/FileInputAudit.a11y.chromium.spec.ts +796 -0
- package/src/FormLayout/FormLayout.spec.md +11 -20
- package/src/Heading/Heading.tsx +1 -1
- package/src/Icon/Icon.tsx +1 -1
- package/src/Indicator/CheckIndicator.spec.md +47 -42
- package/src/Indicator/CheckIndicator.tsx +2 -1
- package/src/Indicator/CheckboxIndicator.spec.md +40 -37
- package/src/Indicator/CheckboxIndicator.tsx +3 -1
- package/src/Indicator/Indicator.spec.md +188 -0
- package/src/Indicator/RadioIndicator.tsx +3 -1
- package/src/Item/Item.test.tsx +60 -0
- package/src/Item/Item.tsx +16 -8
- package/src/Item/ItemSwipeLayer.tsx +1 -1
- package/src/Kbd/Kbd.spec.md +81 -38
- package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
- package/src/Layer/popoverOperations.test.ts +205 -0
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.test.tsx +426 -4
- package/src/Layer/useLayer.tsx +145 -77
- package/src/Layout/Layout.spec.md +127 -131
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.spec.md +205 -0
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.spec.md +190 -0
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.spec.md +193 -0
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Layout/LayoutPanel.spec.md +194 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
- package/src/Lightbox/Lightbox.test.tsx +18 -0
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
- package/src/Link/Link.spec.md +3 -2
- package/src/Link/Link.tsx +11 -0
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
- package/src/Link/__tests__/Link.truncation.a11y.chromium.spec.ts +58 -0
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.spec.md +205 -0
- package/src/List/ListItem.tsx +3 -3
- package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +1 -1
- package/src/MetadataList/MetadataList.spec.md +187 -0
- package/src/MetadataList/MetadataListItem.spec.md +165 -0
- package/src/MobileNav/MobileNav.test.tsx +15 -0
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
- package/src/MoreMenu/MoreMenu.test.tsx +11 -0
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
- package/src/MultiSelector/MultiSelector.spec.md +7 -4
- package/src/MultiSelector/MultiSelector.test.tsx +270 -1
- package/src/MultiSelector/MultiSelector.tsx +25 -10
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
- package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
- package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
- package/src/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.spec.md +59 -37
- package/src/NumberInput/NumberInput.test.tsx +68 -7
- package/src/NumberInput/NumberInput.tsx +44 -4
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/Outline/Outline.spec.md +165 -69
- package/src/Outline/Outline.test.tsx +67 -2
- package/src/Outline/Outline.tsx +23 -0
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +3 -4
- package/src/OverflowList/OverflowList.spec.md +102 -55
- package/src/Pagination/Pagination.spec.md +158 -84
- package/src/Popover/Popover.test.tsx +84 -0
- package/src/Popover/Popover.tsx +34 -14
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +70 -8
- package/src/Popover/usePopover.tsx +10 -3
- package/src/PowerSearch/PowerSearch.test.tsx +24 -0
- package/src/PowerSearch/PowerSearch.tsx +42 -31
- package/src/ProgressBar/ProgressBar.spec.md +143 -119
- package/src/ProgressBar/ProgressBar.test.tsx +108 -32
- package/src/ProgressBar/ProgressBar.tsx +58 -10
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
- package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
- package/src/RadioList/RadioList.spec.md +1 -1
- package/src/RadioList/RadioList.test.tsx +84 -0
- package/src/RadioList/RadioListItem.tsx +11 -2
- package/src/Resizable/Resizable.spec.md +144 -124
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
- package/src/Resizable/useResizable.test.ts +43 -0
- package/src/Resizable/useResizable.ts +32 -9
- package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
- package/src/Selector/Selector.test.tsx +90 -1
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
- package/src/Selector/useSelectorPresentation.ts +31 -3
- package/src/SideNav/SideNav.test.tsx +151 -4
- package/src/SideNav/SideNavItem.spec.md +14 -24
- package/src/SideNav/SideNavItem.tsx +27 -10
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
- package/src/Skeleton/Skeleton.tsx +3 -1
- package/src/Slider/Slider.test.tsx +31 -0
- package/src/Slider/Slider.tsx +8 -3
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
- package/src/Spinner/Spinner.tsx +5 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/Stepper/Step.spec.md +36 -42
- package/src/Stepper/Step.tsx +33 -6
- package/src/Stepper/Stepper.doc.mjs +1 -1
- package/src/Stepper/Stepper.test.tsx +69 -7
- package/src/Switch/Switch.spec.md +1 -1
- package/src/Switch/Switch.test.tsx +66 -1
- package/src/Switch/Switch.tsx +11 -3
- package/src/TabList/TabList.test.tsx +58 -4
- package/src/TabList/TabList.tsx +16 -1
- package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
- package/src/Table/Table.spec.md +1 -1
- package/src/Table/Table.test.tsx +32 -0
- package/src/Table/Table.tsx +43 -11
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
- package/src/Table/__tests__/Table.a11y.states.ts +1 -5
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +73 -144
- package/src/Table/plugins/sortable/useTableSortable.tsx +44 -73
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +9 -21
- package/src/Text/Text.tsx +1 -1
- package/src/Text/useTruncation.test.tsx +128 -1
- package/src/Text/useTruncation.ts +23 -5
- package/src/TextArea/TextArea.spec.md +10 -13
- package/src/TextArea/TextArea.test.tsx +60 -0
- package/src/TextArea/TextArea.tsx +15 -1
- package/src/TextInput/TextInput.test.tsx +21 -0
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
- package/src/TimeInput/Presentation.test.tsx +21 -0
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.spec.md +58 -61
- package/src/TimeInput/TimeInput.test.tsx +76 -0
- package/src/TimeInput/TimeInput.tsx +36 -18
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timestamp/Timestamp.spec.md +6 -12
- package/src/Timestamp/Timestamp.test.tsx +30 -5
- package/src/Timestamp/Timestamp.tsx +6 -2
- package/src/Timestamp/TimestampHoverCard.tsx +4 -4
- package/src/Toast/Toast.spec.md +15 -24
- package/src/Toast/Toast.tsx +104 -36
- package/src/Toast/ToastViewport.test.tsx +798 -1
- package/src/Toast/ToastViewport.tsx +121 -53
- package/src/ToggleButton/ToggleButton.test.tsx +27 -0
- package/src/ToggleButton/ToggleButtonGroup.tsx +20 -1
- package/src/Token/Token.doc.mjs +2 -2
- package/src/Token/Token.spec.md +52 -61
- package/src/Token/Token.test.tsx +104 -0
- package/src/Token/Token.tsx +75 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/Tokenizer/Tokenizer.spec.md +18 -4
- package/src/Tokenizer/Tokenizer.test.tsx +176 -0
- package/src/Tokenizer/Tokenizer.tsx +48 -12
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +23 -4
- package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
- package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
- package/src/Toolbar/Toolbar.spec.md +5 -6
- package/src/Toolbar/Toolbar.test.tsx +30 -0
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
- package/src/TopNav/TopNav.test.tsx +27 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
- package/src/TopNav/TopNavMegaMenu.tsx +4 -1
- package/src/TopNav/TopNavMenu.test.tsx +17 -0
- package/src/TopNav/TopNavMenu.tsx +1 -0
- package/src/TreeList/TreeList.test.tsx +26 -0
- package/src/TreeList/TreeListItem.tsx +26 -4
- package/src/Typeahead/BaseTypeahead.doc.mjs +3 -3
- package/src/Typeahead/BaseTypeahead.spec.md +45 -45
- package/src/Typeahead/BaseTypeahead.tsx +48 -9
- package/src/Typeahead/Typeahead.test.tsx +294 -11
- package/src/Typeahead/Typeahead.tsx +51 -9
- package/src/__tests__/internalModulesNotExperimental.test.ts +88 -0
- package/src/__tests__/pressState.ts +8 -4
- package/src/gestures/GestureArena.ts +111 -11
- package/src/gestures/GestureHost.ts +2064 -0
- package/src/gestures/GestureRecognizer.ts +21 -1
- package/src/gestures/LongPressGestureRecognizer.ts +4 -0
- package/src/gestures/PanGestureRecognizer.ts +4 -0
- package/src/gestures/PinchGestureRecognizer.ts +148 -0
- package/src/gestures/PressTracker.ts +386 -0
- package/src/gestures/README.md +420 -0
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
- package/src/gestures/SwipeGestureRecognizer.ts +197 -0
- package/src/gestures/TapGestureRecognizer.ts +4 -0
- package/src/gestures/VelocityTracker.ts +10 -3
- package/src/gestures/__tests__/GestureHost.test.ts +2136 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
- package/src/gestures/__tests__/PressTracker.test.ts +275 -0
- package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
- package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
- package/src/gestures/__tests__/arena.test.ts +40 -0
- package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
- package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
- package/src/gestures/__tests__/browser/fixture.ts +307 -0
- package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
- package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
- package/src/gestures/__tests__/haptics.test.ts +187 -0
- package/src/gestures/__tests__/harness.ts +52 -4
- package/src/gestures/__tests__/pressTrackerFactory.test.ts +59 -0
- package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
- package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
- package/src/gestures/__tests__/useGestureRecognizer.test.tsx +570 -0
- package/src/gestures/haptics.ts +203 -0
- package/src/gestures/index.ts +79 -0
- package/src/gestures/nativeScroll.ts +277 -0
- package/src/gestures/touchAction.ts +191 -0
- package/src/gestures/touchActionRule.ts +157 -0
- package/src/gestures/types.ts +30 -9
- package/src/gestures/useGestureRecognizer.ts +305 -0
- package/src/hooks/index.ts +5 -1
- package/src/hooks/modalAnnounce.ts +129 -72
- package/src/hooks/scrollKeyboardDelegation.test.ts +33 -0
- package/src/hooks/scrollKeyboardDelegation.ts +9 -3
- package/src/hooks/useAdaptivePresentation.ts +4 -1
- package/src/hooks/useAnnounce.doc.mjs +35 -3
- package/src/hooks/useAnnounce.replace.test.tsx +516 -0
- package/src/hooks/useAnnounce.ts +209 -102
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
- package/src/hooks/useAnnounceRenderedText.ts +17 -3
- package/src/hooks/useBusyAnnouncement.ts +7 -10
- package/src/hooks/useMenuHover.ts +15 -1
- package/src/hooks/useScrollOverflow.doc.mjs +1 -1
- package/src/hooks/useScrollOverflow.test.tsx +102 -1
- package/src/hooks/useScrollOverflow.ts +59 -10
- package/src/i18n/__tests__/useListFormatter.test.tsx +58 -0
- package/src/i18n/generated-locales/af-ZA.generated.ts +0 -7
- package/src/i18n/generated-locales/ar-SA.generated.ts +0 -6
- package/src/i18n/generated-locales/ca-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/cs-CZ.generated.ts +0 -6
- package/src/i18n/generated-locales/da-DK.generated.ts +0 -6
- package/src/i18n/generated-locales/de-DE.generated.ts +0 -6
- package/src/i18n/generated-locales/el-GR.generated.ts +0 -7
- package/src/i18n/generated-locales/en.generated.ts +9 -6
- package/src/i18n/generated-locales/es-ES.generated.ts +0 -7
- package/src/i18n/generated-locales/fi-FI.generated.ts +0 -6
- package/src/i18n/generated-locales/fr-FR.generated.ts +0 -7
- package/src/i18n/generated-locales/he-IL.generated.ts +0 -6
- package/src/i18n/generated-locales/hu-HU.generated.ts +0 -6
- package/src/i18n/generated-locales/it-IT.generated.ts +0 -7
- package/src/i18n/generated-locales/ja-JP.generated.ts +0 -6
- package/src/i18n/generated-locales/ko-KR.generated.ts +0 -6
- package/src/i18n/generated-locales/nl-NL.generated.ts +0 -6
- package/src/i18n/generated-locales/no-NO.generated.ts +0 -6
- package/src/i18n/generated-locales/pl-PL.generated.ts +0 -7
- package/src/i18n/generated-locales/pseudo.generated.ts +9 -6
- package/src/i18n/generated-locales/pt-BR.generated.ts +0 -7
- package/src/i18n/generated-locales/pt-PT.generated.ts +0 -7
- package/src/i18n/generated-locales/ro-RO.generated.ts +0 -6
- package/src/i18n/generated-locales/ru-RU.generated.ts +0 -7
- package/src/i18n/generated-locales/sr-SP.generated.ts +0 -6
- package/src/i18n/generated-locales/sv-SE.generated.ts +0 -6
- package/src/i18n/generated-locales/tr-TR.generated.ts +0 -7
- package/src/i18n/generated-locales/uk-UA.generated.ts +0 -7
- package/src/i18n/generated-locales/vi-VN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-CN.generated.ts +0 -6
- package/src/i18n/generated-locales/zh-TW.generated.ts +0 -6
- package/src/i18n/useListFormatter.ts +42 -0
- package/src/motion/MEASUREMENTS.md +2 -1
- package/src/motion/README.md +113 -33
- package/src/motion/__tests__/animator.interaction.browser.spec.ts +843 -0
- package/src/motion/__tests__/motionBundle.ts +14 -0
- package/src/motion/animator.test.ts +1125 -32
- package/src/motion/animator.ts +932 -130
- package/src/motion/coast.ts +10 -3
- package/src/motion/reducedMotion.ts +12 -2
- package/src/motion/reducedMotionPlan.test.ts +26 -0
- package/src/motion/reducedMotionPlan.ts +20 -1
- package/src/motion/resolveMotion.test.ts +123 -0
- package/src/motion/resolveMotion.ts +68 -0
- package/src/motion/roleValue.ts +2 -1
- package/src/motion/roles.test.ts +21 -4
- package/src/motion/uikit/tableImports.test.ts +293 -0
- package/src/motion/uikit/timing.ts +15 -1
- package/src/motion/uikit/values.test.ts +23 -12
- package/src/theme/Theme.doc.mjs +1 -1
- package/src/theme/defineTheme.ts +117 -8
- package/src/theme/derivedVarRegistry.test.ts +4 -0
- package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
- package/src/theme/domainTokens/index.ts +6 -10
- package/src/theme/expandMotionScale.test.ts +1 -1
- package/src/theme/index.ts +5 -0
- package/src/theme/motionKnobs.ts +82 -0
- package/src/theme/resolveThemeValues.ts +68 -6
- package/src/theme/themeAdaptations.ts +52 -12
- package/src/theme/themeMotion.test.ts +620 -0
- package/src/theme/themeMotion.ts +221 -0
- package/src/theme/tokenReferences.ts +149 -0
- package/src/theme/tokens.stylex.ts +10 -0
- package/src/theme/tokens.ts +15 -158
- package/src/utils/focusOutline.stylex.ts +28 -0
- package/src/utils/focusReturn.ts +17 -6
- package/src/utils/getNodeText.test.ts +24 -0
- package/src/utils/getNodeText.ts +37 -0
- package/src/utils/interactionModality.test.ts +45 -1
- package/src/utils/interactionModality.ts +64 -5
- package/src/utils/interactionOverlay.stylex.ts +12 -3
- package/src/utils/plainDate.test.ts +90 -0
- package/src/utils/plainDate.ts +58 -3
- package/src/utils/presentation.test.ts +380 -0
- package/src/utils/presentation.ts +180 -0
- package/src/utils/pressFeedback.test.ts +138 -0
- package/src/utils/pressFeedback.ts +34 -11
- package/src/utils/pressGesture.test.ts +9 -0
- package/src/utils/pressPaintPriority.test.ts +80 -0
- package/src/utils/primaryClick.test.ts +38 -0
- package/src/utils/primaryClick.ts +28 -0
- package/src/utils/sharedMutationObserver.test.ts +54 -1
- package/src/utils/sharedMutationObserver.ts +87 -29
- package/src/utils/timeFormat.test.ts +204 -0
- package/src/utils/timeFormat.ts +314 -0
- package/src/utils/touchPresentation.stylex.ts +43 -0
- package/src/utils/touchPresentation.test.ts +140 -1
- package/src/utils/touchPresentation.ts +13 -8
- package/src/utils/touchQueries.ts +15 -0
- package/src/utils/unicodeDigits.test.ts +44 -0
- package/src/utils/unicodeDigits.ts +71 -0
- package/src/utils/useFocusAcrossSwap.ts +55 -0
|
@@ -186,9 +186,7 @@ describe('useTableSortableState', () => {
|
|
|
186
186
|
render(<SortableStateTable />);
|
|
187
187
|
|
|
188
188
|
// Click Name header to sort ascending
|
|
189
|
-
await userEvent.click(
|
|
190
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
191
|
-
);
|
|
189
|
+
await userEvent.click(screen.getByRole('button', {name: 'Name'}));
|
|
192
190
|
expect(getNameColumnValues()).toEqual([
|
|
193
191
|
'Alice',
|
|
194
192
|
'Bob',
|
|
@@ -197,9 +195,7 @@ describe('useTableSortableState', () => {
|
|
|
197
195
|
]);
|
|
198
196
|
|
|
199
197
|
// Click again to sort descending
|
|
200
|
-
await userEvent.click(
|
|
201
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
202
|
-
);
|
|
198
|
+
await userEvent.click(screen.getByRole('button', {name: 'Name'}));
|
|
203
199
|
expect(getNameColumnValues()).toEqual([
|
|
204
200
|
'Diana',
|
|
205
201
|
'Charlie',
|
|
@@ -223,7 +219,7 @@ describe('useTableSortableState', () => {
|
|
|
223
219
|
]);
|
|
224
220
|
|
|
225
221
|
// Sort by age instead
|
|
226
|
-
await userEvent.click(screen.getByRole('button', {name:
|
|
222
|
+
await userEvent.click(screen.getByRole('button', {name: 'Age'}));
|
|
227
223
|
|
|
228
224
|
// Age ascending: Alice(28), Diana(31), Charlie(35), Bob(42)
|
|
229
225
|
expect(getNameColumnValues()).toEqual([
|
|
@@ -243,13 +239,9 @@ describe('useTableSortableState', () => {
|
|
|
243
239
|
);
|
|
244
240
|
|
|
245
241
|
// Click to descending
|
|
246
|
-
await userEvent.click(
|
|
247
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
248
|
-
);
|
|
242
|
+
await userEvent.click(screen.getByRole('button', {name: 'Name'}));
|
|
249
243
|
// Click to unsorted
|
|
250
|
-
await userEvent.click(
|
|
251
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
252
|
-
);
|
|
244
|
+
await userEvent.click(screen.getByRole('button', {name: 'Name'}));
|
|
253
245
|
|
|
254
246
|
// Back to original order
|
|
255
247
|
expect(getNameColumnValues()).toEqual([
|
|
@@ -265,7 +257,7 @@ describe('useTableSortableState', () => {
|
|
|
265
257
|
it('sorts numbers correctly without custom comparator', async () => {
|
|
266
258
|
render(<SortableStateTable />);
|
|
267
259
|
|
|
268
|
-
await userEvent.click(screen.getByRole('button', {name:
|
|
260
|
+
await userEvent.click(screen.getByRole('button', {name: 'Age'}));
|
|
269
261
|
|
|
270
262
|
// Age ascending: 28, 31, 35, 42
|
|
271
263
|
expect(getNameColumnValues()).toEqual([
|
|
@@ -397,9 +389,7 @@ describe('useTableSortableState', () => {
|
|
|
397
389
|
|
|
398
390
|
render(<ControlledWithSpy />);
|
|
399
391
|
|
|
400
|
-
await userEvent.click(
|
|
401
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
402
|
-
);
|
|
392
|
+
await userEvent.click(screen.getByRole('button', {name: 'Name'}));
|
|
403
393
|
|
|
404
394
|
expect(onSortChange).toHaveBeenCalledWith([
|
|
405
395
|
{sortKey: 'name', direction: 'ascending'},
|
|
@@ -442,7 +432,7 @@ describe('useTableSortableState', () => {
|
|
|
442
432
|
// Department ascending: Design(Bob, Diana), Engineering(Alice, Charlie)
|
|
443
433
|
// Now shift+click Name to add secondary sort
|
|
444
434
|
await user.keyboard('{Shift>}');
|
|
445
|
-
await user.click(screen.getByRole('button', {name:
|
|
435
|
+
await user.click(screen.getByRole('button', {name: 'Name'}));
|
|
446
436
|
await user.keyboard('{/Shift}');
|
|
447
437
|
|
|
448
438
|
// Design: Bob, Diana; Engineering: Alice, Charlie
|
|
@@ -541,9 +531,7 @@ describe('useTableSortableState', () => {
|
|
|
541
531
|
// Should render without throwing — table still mounts with empty data
|
|
542
532
|
expect(screen.getByRole('table')).toBeInTheDocument();
|
|
543
533
|
// Sort headers should still be interactive
|
|
544
|
-
expect(
|
|
545
|
-
screen.getByRole('button', {name: /sort by name/i}),
|
|
546
|
-
).toBeInTheDocument();
|
|
534
|
+
expect(screen.getByRole('button', {name: 'Name'})).toBeInTheDocument();
|
|
547
535
|
});
|
|
548
536
|
});
|
|
549
537
|
|
package/src/Text/Text.tsx
CHANGED
|
@@ -48,7 +48,7 @@ import {
|
|
|
48
48
|
} from './text.stylex';
|
|
49
49
|
import {useTruncation} from './useTruncation';
|
|
50
50
|
import type {LayerPlacement} from '../Layer';
|
|
51
|
-
import {mergeProps} from '../utils';
|
|
51
|
+
import {mergeProps} from '../utils/mergeProps';
|
|
52
52
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
53
53
|
import type {BaseProps} from '../BaseProps';
|
|
54
54
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* Tests for useTruncation
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {render, screen, waitFor} from '@testing-library/react';
|
|
8
|
+
import {act, render, screen, waitFor} from '@testing-library/react';
|
|
9
9
|
import {afterEach, describe, it, expect, vi} from 'vitest';
|
|
10
|
+
import {useCallback} from 'react';
|
|
10
11
|
import {useTruncation} from './useTruncation';
|
|
11
12
|
|
|
12
13
|
function Probe({text}: {text: string}) {
|
|
@@ -37,6 +38,132 @@ describe('useTruncation', () => {
|
|
|
37
38
|
);
|
|
38
39
|
});
|
|
39
40
|
|
|
41
|
+
describe('first measurement', () => {
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
vi.unstubAllGlobals();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Measuring inside React's commit forces a style and layout pass per text
|
|
47
|
+
// on a page that mounts many; after the commit, every text reads together.
|
|
48
|
+
it('measures after the commit, not inside it', async () => {
|
|
49
|
+
const observed: Element[] = [];
|
|
50
|
+
vi.stubGlobal(
|
|
51
|
+
'ResizeObserver',
|
|
52
|
+
class {
|
|
53
|
+
observe(target: Element) {
|
|
54
|
+
observed.push(target);
|
|
55
|
+
}
|
|
56
|
+
unobserve() {}
|
|
57
|
+
disconnect() {}
|
|
58
|
+
},
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const {unmount} = render(<Probe text="a status line" />);
|
|
62
|
+
|
|
63
|
+
// Observed, but not measured during the commit.
|
|
64
|
+
expect(observed).toHaveLength(1);
|
|
65
|
+
expect(screen.getByTestId('full-text')).toHaveTextContent('');
|
|
66
|
+
|
|
67
|
+
await act(async () => {});
|
|
68
|
+
|
|
69
|
+
expect(screen.getByTestId('full-text')).toHaveTextContent(
|
|
70
|
+
'a status line',
|
|
71
|
+
);
|
|
72
|
+
unmount();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// FR4/PR1: with measuring turned off before the first measurement runs,
|
|
76
|
+
// nothing is measured and the hook reports no truncation.
|
|
77
|
+
it('skips the first measurement when measuring turns off in the same task', async () => {
|
|
78
|
+
vi.stubGlobal(
|
|
79
|
+
'ResizeObserver',
|
|
80
|
+
class {
|
|
81
|
+
observe() {}
|
|
82
|
+
unobserve() {}
|
|
83
|
+
disconnect() {}
|
|
84
|
+
},
|
|
85
|
+
);
|
|
86
|
+
const proto = window.HTMLElement.prototype;
|
|
87
|
+
const scrollWidth = Object.getOwnPropertyDescriptor(proto, 'scrollWidth');
|
|
88
|
+
const offsetWidth = Object.getOwnPropertyDescriptor(proto, 'offsetWidth');
|
|
89
|
+
Object.defineProperty(proto, 'scrollWidth', {
|
|
90
|
+
configurable: true,
|
|
91
|
+
get: () => 400,
|
|
92
|
+
});
|
|
93
|
+
Object.defineProperty(proto, 'offsetWidth', {
|
|
94
|
+
configurable: true,
|
|
95
|
+
get: () => 100,
|
|
96
|
+
});
|
|
97
|
+
function Unclamping({maxLines}: {maxLines: number}) {
|
|
98
|
+
const truncation = useTruncation({maxLines});
|
|
99
|
+
return (
|
|
100
|
+
<>
|
|
101
|
+
<span ref={truncation.ref}>overflowing text</span>
|
|
102
|
+
<output data-testid="state">
|
|
103
|
+
{String(truncation.isTruncated)}|{truncation.fullText}
|
|
104
|
+
</output>
|
|
105
|
+
</>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
// Measuring turns off in the same task, before the first measurement.
|
|
110
|
+
const {rerender, unmount} = render(<Unclamping maxLines={1} />);
|
|
111
|
+
rerender(<Unclamping maxLines={0} />);
|
|
112
|
+
await act(async () => {});
|
|
113
|
+
expect(screen.getByTestId('state')).toHaveTextContent(/^false\|$/);
|
|
114
|
+
unmount();
|
|
115
|
+
} finally {
|
|
116
|
+
if (scrollWidth) {
|
|
117
|
+
Object.defineProperty(proto, 'scrollWidth', scrollWidth);
|
|
118
|
+
}
|
|
119
|
+
if (offsetWidth) {
|
|
120
|
+
Object.defineProperty(proto, 'offsetWidth', offsetWidth);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// The browser sends no second first-notification for an element the
|
|
126
|
+
// shared observer already watches, so the first measurement cannot wait
|
|
127
|
+
// for one.
|
|
128
|
+
it('measures an element another subscriber already observes', async () => {
|
|
129
|
+
vi.stubGlobal(
|
|
130
|
+
'ResizeObserver',
|
|
131
|
+
class {
|
|
132
|
+
observe() {}
|
|
133
|
+
unobserve() {}
|
|
134
|
+
disconnect() {}
|
|
135
|
+
},
|
|
136
|
+
);
|
|
137
|
+
const {observeResize} = await import('../utils/sharedResizeObserver');
|
|
138
|
+
const watched = document.createElement('span');
|
|
139
|
+
function Shared({text}: {text: string}) {
|
|
140
|
+
const truncation = useTruncation({maxLines: 1});
|
|
141
|
+
const {ref} = truncation;
|
|
142
|
+
const attach = useCallback(
|
|
143
|
+
(element: HTMLElement | null) => {
|
|
144
|
+
if (element && element !== watched) {
|
|
145
|
+
observeResize(element, () => {});
|
|
146
|
+
}
|
|
147
|
+
ref(element);
|
|
148
|
+
},
|
|
149
|
+
[ref],
|
|
150
|
+
);
|
|
151
|
+
return (
|
|
152
|
+
<>
|
|
153
|
+
<span ref={attach}>{text}</span>
|
|
154
|
+
<output data-testid="full-text">{truncation.fullText}</output>
|
|
155
|
+
</>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
const {unmount} = render(<Shared text="already watched" />);
|
|
159
|
+
await act(async () => {});
|
|
160
|
+
expect(screen.getByTestId('full-text')).toHaveTextContent(
|
|
161
|
+
'already watched',
|
|
162
|
+
);
|
|
163
|
+
unmount();
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
40
167
|
describe('content observation', () => {
|
|
41
168
|
afterEach(() => {
|
|
42
169
|
vi.unstubAllGlobals();
|
|
@@ -123,12 +123,30 @@ export function useTruncation(
|
|
|
123
123
|
elementRef.current = element;
|
|
124
124
|
|
|
125
125
|
if (element && maxLines > 0) {
|
|
126
|
-
// Observe via shared singleton (if available).
|
|
127
|
-
//
|
|
128
|
-
//
|
|
126
|
+
// Observe via shared singleton (if available). The first measurement
|
|
127
|
+
// runs after the commit, in a microtask, instead of in the call
|
|
128
|
+
// observeResize makes on registration: that call runs inside React's
|
|
129
|
+
// commit, after other components' DOM writes, and forced a style and
|
|
130
|
+
// layout pass per text on a page that mounts many. Every text
|
|
131
|
+
// registered in one commit then reads layout once, together, and a
|
|
132
|
+
// text whose element another subscriber already observes is measured
|
|
133
|
+
// too. The truncated state only decides whether to compose the
|
|
134
|
+
// tooltip, so nothing paints differently.
|
|
129
135
|
if (typeof ResizeObserver !== 'undefined') {
|
|
130
|
-
|
|
131
|
-
|
|
136
|
+
let registered = false;
|
|
137
|
+
const unobserve = observeResize(element, () => {
|
|
138
|
+
if (registered) {
|
|
139
|
+
checkTruncation(element);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
registered = true;
|
|
143
|
+
unobserveRef.current = unobserve;
|
|
144
|
+
// Skipped when this registration has ended by then (measuring
|
|
145
|
+
// turned off, or the element replaced, in the same task).
|
|
146
|
+
queueMicrotask(() => {
|
|
147
|
+
if (unobserveRef.current === unobserve) {
|
|
148
|
+
checkTruncation(element);
|
|
149
|
+
}
|
|
132
150
|
});
|
|
133
151
|
} else {
|
|
134
152
|
checkTruncation(element);
|
|
@@ -52,15 +52,15 @@ system_specs: [spec:AST-085, spec:AST-086]
|
|
|
52
52
|
|
|
53
53
|
## Contract at a glance
|
|
54
54
|
|
|
55
|
-
| Area | Contract
|
|
56
|
-
| ----------------------- |
|
|
57
|
-
| Public contract | None changes. TextArea is a controlled multi-line field with Field props, `rows`, size, status, start icon, `maxLength` counter, `onChange`, `changeAction`, `isLoading`, disabled and read-only states, and the input-family part props.
|
|
58
|
-
| Behavior | Typing calls `onChange`, then an optional `changeAction` with an optimistic value and one busy Spinner. `maxLength` adds a visual character counter that warns but never blocks typing.
|
|
59
|
-
| End-user impact | People write longer text with a live count that is announced only when they near or pass the limit. Keyboard and screen-reader users can reach a disabled field and its reason. An error without a message has no text.
|
|
60
|
-
| Builder impact | None.
|
|
61
|
-
| Compatibility/readiness | Records shipped behavior; no API, default, or DOM change. Attached status on a tall surface, dropped grouped container props, text under the counter,
|
|
62
|
-
| Review checks | Reject a counter that truncates input or counts code units, an announcement on every keystroke, text that runs under the icons or counter, a disabled field that leaves the tab order or submits, or root styling props.
|
|
63
|
-
| Governing rules | `family:input-fields` FR4–FR6, FR8–FR10, AV3; `spec:AST-085` FR1–FR3, FR6; `spec:AST-086` FR8; `architecture:component-theming-surface`.
|
|
55
|
+
| Area | Contract |
|
|
56
|
+
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
57
|
+
| Public contract | None changes. TextArea is a controlled multi-line field with Field props, `rows`, size, status, start icon, `maxLength` counter, `onChange`, `changeAction`, `isLoading`, disabled and read-only states, and the input-family part props. |
|
|
58
|
+
| Behavior | Typing calls `onChange`, then an optional `changeAction` with an optimistic value and one busy Spinner. `maxLength` adds a visual character counter that warns but never blocks typing. |
|
|
59
|
+
| End-user impact | People write longer text with a live count that is announced only when they near or pass the limit. Keyboard and screen-reader users can reach a disabled field and its reason. An error without a message has no text. |
|
|
60
|
+
| Builder impact | None. |
|
|
61
|
+
| Compatibility/readiness | Records shipped behavior; no API, default, or DOM change. Attached status on a tall surface, dropped grouped container props, text under the counter, an error without text, and a color-only `detached` status are listed under Current-state impact. |
|
|
62
|
+
| Review checks | Reject a counter that truncates input or counts code units, an announcement on every keystroke, text that runs under the icons or counter, a disabled field that leaves the tab order or submits, or root styling props. |
|
|
63
|
+
| Governing rules | `family:input-fields` FR4–FR6, FR8–FR10, AV3; `spec:AST-085` FR1–FR3, FR6; `spec:AST-086` FR8; `architecture:component-theming-surface`. |
|
|
64
64
|
|
|
65
65
|
This table is a review projection; the body below is authoritative.
|
|
66
66
|
|
|
@@ -128,7 +128,7 @@ Consumer migration instructions belong in consumer docs and release notes.
|
|
|
128
128
|
| FR2 | The input container carries `text-area` with `data-size`, `data-status`, `data-disabled`, and `data-readonly`; the textarea carries `text-area-control`; the counter carries `text-area-counter`. Placeholder text is part of the textarea; the over-limit glyph is part of the counter. | `architecture:component-theming-surface`; current source and tests |
|
|
129
129
|
| FR3 | The textarea shows `rows` lines (default 3), resizes only vertically, and uses body text, floored at 16 CSS px only on the iOS touch path. `lg` adds block padding; `sm` and `md` share the default inset. | `family:input-fields` FR9, AV3; current source and tests |
|
|
130
130
|
| FR4 | Editing calls `onChange(value, event)`; unless that call prevents default, `changeAction(value, event)` then runs in a transition and the field shows the proposed value while the Action is pending, and `value` once it settles. While `isLoading` or while the shown value differs from `value`, the textarea sets `aria-busy`, a decorative Spinner shows, and the busy start is announced once. | `family:input-fields` FR5, FR6; `spec:AST-086` FR8; current tests |
|
|
131
|
-
| FR5 | With `maxLength`, a counter showing the character count and the limit renders at the container's bottom end and describes the textarea. It counts user-perceived characters, so a multi-code-point emoji counts once. It never sets the native `maxLength` and never blocks typing. Over the limit it turns the error color, adds a decorative warning icon, and sets `aria-invalid`. The counter text MUST come from one catalog message (`architecture:internationalization` INV1a)
|
|
131
|
+
| FR5 | With `maxLength`, a counter showing the character count and the limit renders at the container's bottom end and describes the textarea. It counts user-perceived characters, so a multi-code-point emoji counts once. It never sets the native `maxLength` and never blocks typing. Over the limit it turns the error color, adds a decorative warning icon, and sets `aria-invalid`. The counter text MUST come from one catalog message (`architecture:internationalization` INV1a), with both numbers in the locale's number format. | Current tests; `architecture:internationalization` INV1a |
|
|
132
132
|
| FR6 | Counter announcements happen when an edit lands in a different zone than the previous edit: entering the last 20% of the limit announces the remaining characters politely; exceeding the limit announces the overage assertively; moving back under announces nothing. Zone tracking starts unset, so the first edit after mount announces the near or over zone it lands in, even when the mounted value was already there. | Current tests |
|
|
133
133
|
| FR7 | The start icon renders at the top start, and the Spinner and on-field status icon at the top end; the textarea reserves inline padding for each one that renders (more when both end items show) and bottom padding for the counter, so text never runs under them; the counter's bottom padding clears text only at the end of the scroll range. Implementation gap: with a value longer than `rows`, the last visible line paints under the counter unless the field is scrolled to the end. A detached status reserves no end space because it renders no on-field icon. | `family:input-fields` FR2; current source and tests |
|
|
134
134
|
| FR8 | A status paints the status border; `error` sets `aria-invalid`. The on-field status icon shows for `attached` and `tooltip` placement; a `detached` status shows its glyph only in the message box, which renders only with a message. The message renders through Field in the chosen placement. Every status MUST show a cue other than color (WCAG 2.2 1.4.1), and an error MUST be identified in text (WCAG 2.2 3.3.1). Implementation gap: TextArea offers `attached` placement, as its default and explicitly, although `family:input-fields` FR8 and AV6 allow `attached` only on a fixed-height control; an error status may have no message; and a `detached` status without a message shows only the colored border. | `family:input-fields` FR8; current tests |
|
|
@@ -276,9 +276,6 @@ above match the current Field, FieldStatus, Icon, Spinner, and Tooltip targets.
|
|
|
276
276
|
FR8 and AV6 allow `attached` only on a fixed-height control.
|
|
277
277
|
- **Grouped container props (FR12).** Inside InputGroup, TextArea still renders
|
|
278
278
|
its Field box but drops `container*` props, warning that no Field box renders.
|
|
279
|
-
- **Counter text (FR5).** The counter's count-and-limit text is assembled in
|
|
280
|
-
code rather than from one catalog message, against
|
|
281
|
-
`architecture:internationalization` INV1a.
|
|
282
279
|
- **Text under the counter (FR7).** With a value longer than `rows`, the last
|
|
283
280
|
visible line paints under the counter unless the field is scrolled to the
|
|
284
281
|
end.
|
|
@@ -17,6 +17,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
17
17
|
import {colorVars} from '../theme/tokens.stylex';
|
|
18
18
|
import {TestIcon} from '../__tests__/TestIcon';
|
|
19
19
|
import {TextArea} from './TextArea';
|
|
20
|
+
import {InternationalizationProvider} from '../i18n';
|
|
20
21
|
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
21
22
|
|
|
22
23
|
// jsdom cannot match `:focus-visible`: compare the ring's StyleX class hash.
|
|
@@ -521,6 +522,38 @@ describe('TextArea', () => {
|
|
|
521
522
|
expect(screen.getByText('5/20')).toBeInTheDocument();
|
|
522
523
|
});
|
|
523
524
|
|
|
525
|
+
it('formats the counter from the catalog with locale number formatting', () => {
|
|
526
|
+
render(
|
|
527
|
+
<InternationalizationProvider
|
|
528
|
+
locale="de-DE"
|
|
529
|
+
overrides={{
|
|
530
|
+
'de-DE': {
|
|
531
|
+
'@astryx.textArea.counter': '{count, number} von {limit, number}',
|
|
532
|
+
},
|
|
533
|
+
}}>
|
|
534
|
+
<TextArea
|
|
535
|
+
label="Bio"
|
|
536
|
+
value={'a'.repeat(62)}
|
|
537
|
+
onChange={() => {}}
|
|
538
|
+
maxLength={2000}
|
|
539
|
+
/>
|
|
540
|
+
</InternationalizationProvider>,
|
|
541
|
+
);
|
|
542
|
+
expect(screen.getByText('62 von 2.000')).toBeInTheDocument();
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
it('formats an English counter with grouped digits', () => {
|
|
546
|
+
render(
|
|
547
|
+
<TextArea
|
|
548
|
+
label="Bio"
|
|
549
|
+
value="hi"
|
|
550
|
+
onChange={() => {}}
|
|
551
|
+
maxLength={2000}
|
|
552
|
+
/>,
|
|
553
|
+
);
|
|
554
|
+
expect(screen.getByText('2/2,000')).toBeInTheDocument();
|
|
555
|
+
});
|
|
556
|
+
|
|
524
557
|
it('does not display counter when maxLength is not provided', () => {
|
|
525
558
|
render(
|
|
526
559
|
<TextArea label="Description" value="Hello" onChange={() => {}} />,
|
|
@@ -1255,3 +1288,30 @@ describe('TextArea theme target names', () => {
|
|
|
1255
1288
|
expect(root).not.toHaveClass('astryx-textarea');
|
|
1256
1289
|
});
|
|
1257
1290
|
});
|
|
1291
|
+
|
|
1292
|
+
describe('TextArea caller aria-labelledby', () => {
|
|
1293
|
+
it('names the textarea by its label and a caller aria-labelledby', () => {
|
|
1294
|
+
render(
|
|
1295
|
+
<>
|
|
1296
|
+
<span id="billing-heading">Billing</span>
|
|
1297
|
+
<TextArea
|
|
1298
|
+
label="Notes"
|
|
1299
|
+
value=""
|
|
1300
|
+
onChange={() => {}}
|
|
1301
|
+
aria-labelledby="billing-heading"
|
|
1302
|
+
/>
|
|
1303
|
+
</>,
|
|
1304
|
+
);
|
|
1305
|
+
const textarea = screen.getByRole('textbox', {name: 'Notes Billing'});
|
|
1306
|
+
expect(textarea.getAttribute('aria-labelledby')?.split(' ')).toContain(
|
|
1307
|
+
'billing-heading',
|
|
1308
|
+
);
|
|
1309
|
+
});
|
|
1310
|
+
|
|
1311
|
+
it('leaves a textarea named by its label element without a caller aria-labelledby', () => {
|
|
1312
|
+
render(<TextArea label="Notes" value="" onChange={() => {}} />);
|
|
1313
|
+
expect(screen.getByRole('textbox', {name: 'Notes'})).not.toHaveAttribute(
|
|
1314
|
+
'aria-labelledby',
|
|
1315
|
+
);
|
|
1316
|
+
});
|
|
1317
|
+
});
|
|
@@ -47,6 +47,7 @@ import {Icon, renderIconSlot, type IconType} from '../Icon';
|
|
|
47
47
|
import {Spinner} from '../Spinner';
|
|
48
48
|
import {useTooltip} from '../Tooltip';
|
|
49
49
|
import {mergeProps} from '../utils';
|
|
50
|
+
import {joinAriaIDs} from '../utils/inputAria';
|
|
50
51
|
import type {BaseProps} from '../BaseProps';
|
|
51
52
|
import {
|
|
52
53
|
type FieldInputBaseProps,
|
|
@@ -417,6 +418,7 @@ export function TextArea({
|
|
|
417
418
|
ref,
|
|
418
419
|
id: idProp,
|
|
419
420
|
'aria-describedby': ariaDescribedByProp,
|
|
421
|
+
'aria-labelledby': ariaLabelledByProp,
|
|
420
422
|
...restProps
|
|
421
423
|
}: TextAreaProps) {
|
|
422
424
|
const {rest, container} = useFieldInputStyling('TextArea', restProps, {
|
|
@@ -430,6 +432,7 @@ export function TextArea({
|
|
|
430
432
|
const announce = useAnnounce();
|
|
431
433
|
const generatedID = useId();
|
|
432
434
|
const id = idProp ?? generatedID;
|
|
435
|
+
const fieldLabelID = useId();
|
|
433
436
|
const descriptionID = useId();
|
|
434
437
|
const statusMessageID = useId();
|
|
435
438
|
const counterID = useId();
|
|
@@ -572,6 +575,7 @@ export function TextArea({
|
|
|
572
575
|
isLabelHidden={isLabelHidden}
|
|
573
576
|
description={description}
|
|
574
577
|
inputID={id}
|
|
578
|
+
labelID={ariaLabelledByProp != null ? fieldLabelID : undefined}
|
|
575
579
|
descriptionID={description ? descriptionID : undefined}
|
|
576
580
|
isOptional={isOptional}
|
|
577
581
|
isRequired={isRequired}
|
|
@@ -644,6 +648,13 @@ export function TextArea({
|
|
|
644
648
|
spellCheck={hasSpellCheck}
|
|
645
649
|
autoFocus={hasAutoFocus}
|
|
646
650
|
data-autofocus={hasAutoFocus || undefined}
|
|
651
|
+
// A caller aria-labelledby names the textarea together with the
|
|
652
|
+
// field's own label, which it would otherwise replace.
|
|
653
|
+
aria-labelledby={
|
|
654
|
+
ariaLabelledByProp != null
|
|
655
|
+
? joinAriaIDs(fieldLabelID, ariaLabelledByProp)
|
|
656
|
+
: undefined
|
|
657
|
+
}
|
|
647
658
|
aria-describedby={
|
|
648
659
|
[ariaDescribedByProp, ariaDescribedBy].filter(Boolean).join(' ') ||
|
|
649
660
|
undefined
|
|
@@ -696,7 +707,10 @@ export function TextArea({
|
|
|
696
707
|
// live-region announcement carry the meaning.
|
|
697
708
|
<Icon icon="warning" size="sm" />
|
|
698
709
|
)}
|
|
699
|
-
{
|
|
710
|
+
{t('@astryx.textArea.counter', {
|
|
711
|
+
count: valueLength,
|
|
712
|
+
limit: maxLength,
|
|
713
|
+
})}
|
|
700
714
|
</div>
|
|
701
715
|
)}
|
|
702
716
|
</div>
|
|
@@ -823,6 +823,27 @@ describe('TextInput', () => {
|
|
|
823
823
|
});
|
|
824
824
|
});
|
|
825
825
|
|
|
826
|
+
it('keeps the clear button where it is when the field turns busy', () => {
|
|
827
|
+
// What follows the button in the lane (a `<template>` is not rendered).
|
|
828
|
+
const after = (button: HTMLElement) =>
|
|
829
|
+
Array.from(button.parentElement?.children ?? [])
|
|
830
|
+
.slice(Array.from(button.parentElement?.children ?? []).indexOf(button))
|
|
831
|
+
.filter(el => el !== button && el.tagName !== 'TEMPLATE');
|
|
832
|
+
const props = {label: 'Name', value: 'hello', onChange: () => {}};
|
|
833
|
+
const {rerender} = render(<TextInput {...props} hasClear />);
|
|
834
|
+
const idle = screen.getByRole('button', {name: 'Clear Name'});
|
|
835
|
+
const idleAfter = after(idle).length;
|
|
836
|
+
|
|
837
|
+
rerender(<TextInput {...props} hasClear isLoading />);
|
|
838
|
+
const busy = screen.getByRole('button', {name: 'Clear Name'});
|
|
839
|
+
// The Spinner joins on the inward side, before the button, so nothing new
|
|
840
|
+
// follows it and its distance from the end does not change.
|
|
841
|
+
expect(after(busy)).toHaveLength(idleAfter);
|
|
842
|
+
expect(busy.previousElementSibling?.getAttribute('aria-hidden')).toBe(
|
|
843
|
+
'true',
|
|
844
|
+
);
|
|
845
|
+
});
|
|
846
|
+
|
|
826
847
|
describe('click-to-focus', () => {
|
|
827
848
|
it('focuses input when clicking the start icon', () => {
|
|
828
849
|
render(
|
|
@@ -537,13 +537,15 @@ export function TextInput({
|
|
|
537
537
|
aria-labelledby={inputLabelledBy}
|
|
538
538
|
{...stylex.props(styles.input, isDisabled && styles.inputDisabled)}
|
|
539
539
|
/>
|
|
540
|
+
{/* The Spinner comes first so it appears inward of the clear button
|
|
541
|
+
and the button keeps its place when the field turns busy. */}
|
|
542
|
+
{isBusy && <Spinner size="sm" aria-hidden="true" />}
|
|
540
543
|
{hasClear && value !== '' && !isDisabled && !isReadOnly && (
|
|
541
544
|
<InputClearButton
|
|
542
545
|
label={t('@astryx.textInput.clearLabel', {label})}
|
|
543
546
|
onClick={handleClear}
|
|
544
547
|
/>
|
|
545
548
|
)}
|
|
546
|
-
{isBusy && <Spinner size="sm" aria-hidden="true" />}
|
|
547
549
|
{statusIcon}
|
|
548
550
|
</div>
|
|
549
551
|
);
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import {afterEach, describe, expect, it, vi} from 'vitest';
|
|
11
11
|
import {act, fireEvent, render, screen} from '@testing-library/react';
|
|
12
12
|
import {TimeInput} from './TimeInput';
|
|
13
|
+
import {InternationalizationProvider} from '../i18n';
|
|
13
14
|
import {InputGroup, InputGroupText} from '../InputGroup';
|
|
14
15
|
import {resetDateSegmentProbe} from '../DateInput/nativeDateSegments';
|
|
15
16
|
import type {ISOTimeString} from '../utils';
|
|
@@ -48,6 +49,22 @@ afterEach(() => {
|
|
|
48
49
|
});
|
|
49
50
|
|
|
50
51
|
describe('TimeInput nativePicker', () => {
|
|
52
|
+
it("shows the resting value in the locale's hour cycle", () => {
|
|
53
|
+
stubPointer(true);
|
|
54
|
+
render(
|
|
55
|
+
<InternationalizationProvider locale="de-DE">
|
|
56
|
+
<TimeInput
|
|
57
|
+
label="Start time"
|
|
58
|
+
value={'14:30' as ISOTimeString}
|
|
59
|
+
onChange={() => {}}
|
|
60
|
+
/>
|
|
61
|
+
</InternationalizationProvider>,
|
|
62
|
+
);
|
|
63
|
+
expect(getNativeTimeInput()).toHaveValue('14:30');
|
|
64
|
+
expect(screen.getByText('14:30')).toBeInTheDocument();
|
|
65
|
+
expect(screen.queryByText('2:30 PM')).toBeNull();
|
|
66
|
+
});
|
|
67
|
+
|
|
51
68
|
it('uses the browser/OS picker on a coarse pointer by default', () => {
|
|
52
69
|
stubPointer(true);
|
|
53
70
|
render(
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
import {afterEach, beforeAll, describe, expect, it, vi} from 'vitest';
|
|
11
11
|
import {fireEvent, render, screen} from '@testing-library/react';
|
|
12
12
|
import {TimeInput} from './TimeInput';
|
|
13
|
+
import {InternationalizationProvider} from '../i18n';
|
|
14
|
+
import type {ISOTimeString} from '../utils';
|
|
13
15
|
import {resetDateSegmentProbe} from '../DateInput/nativeDateSegments';
|
|
14
16
|
|
|
15
17
|
const HOVER_CAPABLE = /\(\s*hover\s*:\s*hover\s*\)/;
|
|
@@ -80,6 +82,25 @@ describe('TimeInput presentation', () => {
|
|
|
80
82
|
}
|
|
81
83
|
});
|
|
82
84
|
|
|
85
|
+
it("bottom-sheet follows the locale's hour cycle in its text and wheels", () => {
|
|
86
|
+
stubPointer(false);
|
|
87
|
+
render(
|
|
88
|
+
<InternationalizationProvider locale="de-DE">
|
|
89
|
+
<TimeInput
|
|
90
|
+
label="Start"
|
|
91
|
+
presentation="bottom-sheet"
|
|
92
|
+
value={'14:30' as ISOTimeString}
|
|
93
|
+
onChange={() => {}}
|
|
94
|
+
/>
|
|
95
|
+
</InternationalizationProvider>,
|
|
96
|
+
);
|
|
97
|
+
const input = screen.getByRole('combobox', {name: 'Start'});
|
|
98
|
+
expect(input).toHaveValue('14:30');
|
|
99
|
+
fireEvent.click(input);
|
|
100
|
+
expect(screen.getByRole('listbox', {name: 'Hour'})).toBeInTheDocument();
|
|
101
|
+
expect(screen.queryByRole('listbox', {name: 'AM/PM'})).toBeNull();
|
|
102
|
+
});
|
|
103
|
+
|
|
83
104
|
it('bottom-sheet renders the sheet field even on a fine pointer', () => {
|
|
84
105
|
stubPointer(false);
|
|
85
106
|
render(
|
|
@@ -31,7 +31,7 @@ export const docs = {
|
|
|
31
31
|
{
|
|
32
32
|
guidance: true,
|
|
33
33
|
description:
|
|
34
|
-
"
|
|
34
|
+
"Leave hourFormat unset so the field follows the InternationalizationProvider locale's hour cycle (12-hour in en-US, 24-hour in en-GB or de-DE). Set it only when the field itself needs a fixed format, and carry a person's own 12/24-hour preference on the provider locale (e.g. 'en-US-u-hc-h23') rather than on each field.",
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
guidance: true,
|
|
@@ -206,8 +206,8 @@ export const docs = {
|
|
|
206
206
|
name: 'hourFormat',
|
|
207
207
|
type: "'12h' | '24h'",
|
|
208
208
|
description:
|
|
209
|
-
"Controls the display format. '12h' shows
|
|
210
|
-
default: "'
|
|
209
|
+
"Controls the display format. '12h' shows the locale's day period (e.g. '2:30 PM', '오후 2:30'); '24h' uses 24-hour notation (e.g. '14:30'). When unset, follows the InternationalizationProvider locale's hour cycle: en-US reads 12-hour, en-GB and de-DE read 24-hour. To honor a person's own preference, pass it on the locale tag (e.g. 'en-US-u-hc-h23') rather than per field.",
|
|
210
|
+
default: "the locale's hour cycle",
|
|
211
211
|
},
|
|
212
212
|
{
|
|
213
213
|
name: 'increment',
|
|
@@ -387,8 +387,8 @@ export const docsZh = {
|
|
|
387
387
|
name: 'hourFormat',
|
|
388
388
|
type: "'12h' | '24h'",
|
|
389
389
|
description:
|
|
390
|
-
"控制显示格式。'12h'
|
|
391
|
-
default:
|
|
390
|
+
"控制显示格式。'12h' 使用区域设置的上午/下午用语(例如 '2:30 PM'、'오후 2:30');'24h' 使用 24 小时制(例如 '14:30')。未设置时遵循 InternationalizationProvider 区域设置的小时制:en-US 为 12 小时制,en-GB 和 de-DE 为 24 小时制。要遵循用户自己的偏好,请在区域标签中传入(例如 'en-US-u-hc-h23'),而不是逐个字段设置。",
|
|
391
|
+
default: '区域设置的小时制',
|
|
392
392
|
},
|
|
393
393
|
{
|
|
394
394
|
name: 'increment',
|
|
@@ -476,7 +476,7 @@ export const docsZh = {
|
|
|
476
476
|
{
|
|
477
477
|
guidance: true,
|
|
478
478
|
description:
|
|
479
|
-
"
|
|
479
|
+
"Leave hourFormat unset so the field follows the InternationalizationProvider locale's hour cycle (12-hour in en-US, 24-hour in en-GB or de-DE). Set it only when the field itself needs a fixed format, and carry a person's own 12/24-hour preference on the provider locale (e.g. 'en-US-u-hc-h23') rather than on each field.",
|
|
480
480
|
},
|
|
481
481
|
{
|
|
482
482
|
guidance: true,
|
|
@@ -565,7 +565,7 @@ export const docsDense = {
|
|
|
565
565
|
{
|
|
566
566
|
guidance: true,
|
|
567
567
|
description:
|
|
568
|
-
'
|
|
568
|
+
"Leave hourFormat unset to follow the provider locale's hour cycle; put a person's 12/24h preference on the locale tag (en-US-u-hc-h23), not on each field.",
|
|
569
569
|
},
|
|
570
570
|
{
|
|
571
571
|
guidance: true,
|
|
@@ -624,7 +624,7 @@ export const docsDense = {
|
|
|
624
624
|
hasSeconds: 'Includes seconds in display+parsing.',
|
|
625
625
|
hasClear: 'Shows clear button when value set+not disabled.',
|
|
626
626
|
hourFormat:
|
|
627
|
-
"Display format. '12h' shows
|
|
627
|
+
"Display format. '12h' shows the locale's day period; '24h' uses 24-hour notation. Unset follows the provider locale's hour cycle (a -u-hc- tag carries a user preference).",
|
|
628
628
|
increment:
|
|
629
629
|
'Minutes to add/subtract on arrow up/down. Whole minutes only; a fractional value leaves the time unchanged.',
|
|
630
630
|
presentation:
|