@astryxdesign/core 0.7.5 → 0.7.6-canary.0135af4
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 +8 -1
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +7 -3
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +38 -10
- package/dist/BottomSheet/useSheetGestures.d.ts +48 -6
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +97 -13
- package/dist/Breadcrumbs/BreadcrumbItem.js +4 -2
- 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/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +10 -5
- package/dist/Chat/ChatLayout.d.ts.map +1 -1
- package/dist/Chat/ChatLayout.js +1 -1
- package/dist/Chat/ChatMessageList.d.ts.map +1 -1
- package/dist/Chat/ChatMessageList.js +3 -1
- package/dist/Chat/ChatPastedTextToken.d.ts.map +1 -1
- package/dist/Chat/ChatPastedTextToken.js +15 -4
- package/dist/Chat/ChatSystemMessage.d.ts.map +1 -1
- package/dist/Chat/ChatSystemMessage.js +2 -1
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -5
- package/dist/CheckboxList/CheckboxList.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxList.js +5 -2
- package/dist/CheckboxList/CheckboxListContext.d.ts +8 -0
- package/dist/CheckboxList/CheckboxListContext.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.d.ts.map +1 -1
- package/dist/CheckboxList/CheckboxListItem.js +5 -2
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +37 -4
- package/dist/CommandPalette/CommandPaletteInput.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteInput.js +8 -5
- package/dist/ComplexSelector/ComplexSelector.d.ts +2 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +48 -6
- package/dist/DateInput/DateInput.d.ts +3 -2
- 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 +108 -23
- 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 +3 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +9 -5
- 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 +30 -10
- 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 +51 -27
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +2 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +15 -8
- 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/Field.d.ts +2 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +23 -6
- package/dist/Field/InputClearButton.js +3 -3
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +12 -7
- package/dist/Field/fieldStatusPlacement.d.ts +15 -0
- package/dist/Field/fieldStatusPlacement.d.ts.map +1 -0
- package/dist/Field/fieldStatusPlacement.js +1 -0
- package/dist/FieldStatus/FieldStatus.d.ts +16 -28
- package/dist/FieldStatus/FieldStatus.d.ts.map +1 -1
- package/dist/FieldStatus/FieldStatus.js +27 -5
- package/dist/FieldStatus/index.d.ts +7 -0
- package/dist/FieldStatus/index.d.ts.map +1 -1
- package/dist/FileInput/FileInput.d.ts +6 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +93 -36
- 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 +26 -12
- package/dist/Item/ItemSwipeLayer.d.ts.map +1 -1
- package/dist/Item/ItemSwipeLayer.js +9 -3
- 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/Layer/useTouchTrigger.d.ts +35 -3
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -1
- package/dist/Layer/useTouchTrigger.js +80 -11
- 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/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +18 -4
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +1 -0
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +2 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +2 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +7 -2
- package/dist/MultiSelector/MultiSelector.d.ts +3 -3
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +61 -35
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +5 -29
- package/dist/NumberInput/NumberInput.d.ts +6 -3
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +21 -4
- 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/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +2 -1
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +34 -14
- package/dist/Popover/usePopover.d.ts +7 -1
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +18 -5
- package/dist/PowerSearch/PowerSearch.d.ts +3 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +41 -32
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- package/dist/RadioList/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +7 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +19 -5
- package/dist/RadioList/RadioListReasonContext.d.ts +2 -0
- package/dist/RadioList/RadioListReasonContext.d.ts.map +1 -0
- package/dist/RadioList/RadioListReasonContext.js +22 -0
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +81 -12
- package/dist/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControl.js +22 -5
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +6 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +20 -4
- package/dist/Selector/Selector.d.ts +2 -2
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +13 -7
- package/dist/Selector/hooks.js +2 -2
- package/dist/Selector/useSelectorPresentation.d.ts +14 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +22 -5
- 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 +110 -19
- 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/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +2 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +36 -10
- package/dist/Table/glidingDivider.d.ts +8 -1
- package/dist/Table/glidingDivider.d.ts.map +1 -1
- package/dist/Table/glidingDivider.js +8 -3
- 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/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +1 -2
- 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 +3 -3
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -2
- package/dist/TextInput/TextInput.d.ts +3 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -3
- package/dist/TimeInput/TimeInput.d.ts +9 -4
- 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/Toast/useToast.d.ts.map +1 -1
- package/dist/Toast/useToast.js +8 -2
- package/dist/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton/ToggleButton.js +11 -3
- 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 +3 -2
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +101 -56
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +11 -17
- 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 +7 -3
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +1 -0
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +6 -3
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +31 -7
- package/dist/Typeahead/BaseTypeahead.d.ts +8 -5
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +303 -48
- package/dist/Typeahead/Typeahead.d.ts +4 -3
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +43 -9
- package/dist/Typeahead/index.d.ts +1 -1
- package/dist/Typeahead/index.d.ts.map +1 -1
- package/dist/Typeahead/types.d.ts +26 -3
- package/dist/Typeahead/types.d.ts.map +1 -1
- package/dist/astryx.css +26 -6
- 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 +178 -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/menuPressMarker.d.ts +13 -0
- package/dist/hooks/menuPressMarker.d.ts.map +1 -0
- package/dist/hooks/menuPressMarker.js +15 -0
- 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/useClickableContainer.d.ts +24 -4
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +41 -14
- package/dist/hooks/useFocusReturnVisibility.d.ts +8 -1
- package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -1
- package/dist/hooks/useFocusReturnVisibility.js +14 -8
- package/dist/hooks/useInputStatusIcon.d.ts +2 -2
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +1 -2
- package/dist/hooks/useListFocus.d.ts +19 -0
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +26 -1
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +12 -1
- package/dist/hooks/useMenuPress.d.ts +2 -2
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +5 -6
- 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 +739 -121
- 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/privateAttributes/segmentDisabled.stylex.d.ts +5 -0
- package/dist/privateAttributes/segmentDisabled.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/segmentDisabled.stylex.js +28 -0
- package/dist/theme/Theme.d.ts +10 -0
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +8 -4
- 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/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +7 -1
- 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 +19 -1
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +13 -4
- package/dist/utils/getNodeText.d.ts +8 -0
- package/dist/utils/getNodeText.d.ts.map +1 -0
- package/dist/utils/getNodeText.js +38 -0
- package/dist/utils/interactionModality.d.ts +84 -4
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +152 -16
- 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/pressDisabled.d.ts +21 -0
- package/dist/utils/pressDisabled.d.ts.map +1 -0
- package/dist/utils/pressDisabled.js +32 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +25 -4
- 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 +20 -5
- package/src/AlertDialog/AlertDialog.tsx +6 -5
- package/src/AppShell/AppShell.doc.mjs +1 -1
- package/src/AppShell/AppShell.spec.md +9 -12
- package/src/AppShell/AppShell.tsx +225 -5
- package/src/AppShell/observeMainOverflow.ts +143 -0
- package/src/Avatar/Avatar.spec.md +22 -22
- package/src/Avatar/Avatar.tsx +18 -1
- package/src/Badge/Badge.doc.mjs +1 -1
- package/src/Badge/Badge.tsx +20 -2
- package/src/BottomSheet/BottomSheet.tsx +5 -3
- package/src/BottomSheet/BottomSheetPanel.tsx +41 -9
- package/src/BottomSheet/useSheetGestures.ts +129 -21
- package/src/Breadcrumbs/BreadcrumbItem.tsx +2 -1
- package/src/Button/Button.tsx +4 -4
- package/src/Calendar/Calendar.spec.md +87 -48
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.spec.md +9 -9
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Chat/ChatComposer.spec.md +75 -59
- package/src/Chat/ChatComposer.tsx +7 -10
- 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/ChatLayout.tsx +1 -6
- package/src/Chat/ChatLayoutScrollButton.spec.md +87 -103
- package/src/Chat/ChatMessage.spec.md +64 -65
- package/src/Chat/ChatMessageList.tsx +1 -0
- package/src/Chat/ChatPastedTextToken.tsx +14 -4
- package/src/Chat/ChatSendButton.spec.md +78 -67
- package/src/Chat/ChatSystemMessage.tsx +4 -1
- package/src/Chat/ChatToolCalls.tsx +5 -0
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/CheckboxList/CheckboxList.tsx +7 -1
- package/src/CheckboxList/CheckboxListContext.tsx +8 -0
- package/src/CheckboxList/CheckboxListItem.tsx +8 -2
- package/src/Citation/Citation.spec.md +60 -47
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- package/src/Collapsible/Collapsible.spec.md +2 -0
- package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
- package/src/CommandPalette/CommandPaletteInput.tsx +5 -8
- package/src/ComplexSelector/ComplexSelector.tsx +63 -8
- package/src/ContextMenu/ContextMenu.spec.md +84 -56
- package/src/ContextMenu/ContextMenuItem.spec.md +132 -0
- package/src/DateInput/DateInput.spec.md +74 -57
- package/src/DateInput/DateInput.tsx +31 -16
- package/src/DateInput/MonthScroller.tsx +108 -24
- package/src/DateInput/TouchDateField.tsx +14 -3
- package/src/DateInput/Wheel.tsx +9 -6
- package/src/DateInput/usePointerDragScroll.ts +34 -10
- package/src/DateInput/useScrollSettle.ts +38 -7
- package/src/DateRangeInput/DateRangeInput.tsx +36 -17
- package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
- package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
- 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.tsx +28 -11
- package/src/Dialog/DialogHeader.tsx +5 -4
- package/src/Divider/Divider.tsx +2 -1
- package/src/Drawer/Drawer.spec.md +111 -80
- package/src/Drawer/Drawer.tsx +13 -2
- package/src/Drawer/DrawerHeader.spec.md +181 -0
- package/src/DropdownMenu/DropdownMenu.spec.md +198 -218
- package/src/DropdownMenu/DropdownMenu.tsx +63 -26
- 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/DropdownMenuGroup.tsx +2 -1
- 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.tsx +3 -1
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +12 -8
- 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/Field.doc.mjs +2 -1
- package/src/Field/Field.tsx +2 -2
- package/src/Field/FieldLabel.doc.mjs +4 -2
- package/src/Field/FieldLabel.spec.md +72 -55
- package/src/Field/FieldLabel.tsx +23 -6
- package/src/Field/InputClearButton.tsx +3 -3
- package/src/Field/PanelSearchInput.tsx +9 -10
- package/src/Field/fieldStatusPlacement.ts +18 -0
- package/src/FieldStatus/FieldStatus.tsx +35 -5
- package/src/FieldStatus/index.ts +7 -0
- package/src/FileInput/FileInput.tsx +105 -37
- package/src/FormLayout/FormLayout.spec.md +11 -20
- package/src/Heading/Heading.tsx +1 -1
- package/src/HoverCard/HoverCard.doc.mjs +3 -3
- package/src/HoverCard/HoverCard.spec.md +98 -39
- package/src/HoverCard/useHoverCard.doc.mjs +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/InfoTip/InfoTip.spec.md +193 -0
- package/src/Item/Item.tsx +21 -13
- package/src/Item/ItemSwipeLayer.tsx +9 -2
- package/src/Kbd/Kbd.spec.md +81 -38
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.tsx +145 -77
- package/src/Layer/useTouchTrigger.ts +107 -18
- 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 +216 -0
- package/src/Lightbox/Lightbox.spec.md +249 -61
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Link/Link.spec.md +3 -2
- package/src/Link/Link.tsx +20 -2
- 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/Markdown.tsx +1 -0
- package/src/MetadataList/MetadataList.spec.md +187 -0
- package/src/MetadataList/MetadataList.tsx +4 -2
- package/src/MetadataList/MetadataListItem.spec.md +165 -0
- package/src/MetadataList/MetadataListItem.tsx +2 -1
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MultiSelector/MultiSelector.spec.md +124 -114
- package/src/MultiSelector/MultiSelector.tsx +82 -46
- 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.tsx +39 -6
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/Outline/Outline.spec.md +165 -69
- 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/OverflowList/OverflowList.tsx +2 -1
- package/src/Pagination/Pagination.spec.md +158 -84
- package/src/Pagination/Pagination.tsx +1 -0
- package/src/Popover/Popover.tsx +36 -16
- package/src/Popover/usePopover.tsx +17 -5
- package/src/PowerSearch/PowerSearch.tsx +46 -33
- package/src/ProgressBar/ProgressBar.spec.md +143 -119
- package/src/ProgressBar/ProgressBar.tsx +58 -10
- package/src/RadioList/RadioList.spec.md +1 -1
- package/src/RadioList/RadioList.tsx +13 -2
- package/src/RadioList/RadioListItem.tsx +20 -3
- package/src/RadioList/RadioListReasonContext.ts +25 -0
- package/src/Resizable/Resizable.spec.md +152 -124
- package/src/Resizable/useResizable.ts +82 -16
- package/src/SegmentedControl/SegmentedControl.spec.md +36 -39
- package/src/SegmentedControl/SegmentedControl.tsx +43 -8
- package/src/SegmentedControl/SegmentedControlContext.ts +6 -0
- package/src/SegmentedControl/SegmentedControlItem.spec.md +1 -1
- package/src/SegmentedControl/SegmentedControlItem.tsx +23 -6
- package/src/Selector/Selector.tsx +22 -8
- package/src/Selector/hooks.ts +2 -2
- package/src/Selector/useSelectorPresentation.ts +39 -4
- package/src/SideNav/SideNav.spec.md +8 -8
- package/src/SideNav/SideNavItem.spec.md +14 -24
- package/src/SideNav/SideNavItem.tsx +27 -10
- package/src/Skeleton/Skeleton.tsx +3 -1
- package/src/Slider/Slider.spec.md +18 -16
- package/src/Slider/Slider.tsx +124 -22
- package/src/Spinner/Spinner.tsx +5 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/StatusDot/StatusDot.spec.md +77 -54
- 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/Switch/Switch.spec.md +1 -1
- package/src/Switch/Switch.tsx +11 -3
- package/src/TabList/TabList.tsx +16 -1
- package/src/Table/BaseTable.tsx +2 -1
- package/src/Table/Table.spec.md +1 -1
- package/src/Table/Table.tsx +43 -11
- package/src/Table/glidingDivider.ts +8 -3
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- package/src/Table/plugins/sortable/useTableSortable.tsx +46 -73
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Text/Text.tsx +1 -1
- package/src/Text/useTruncation.ts +23 -5
- package/src/TextArea/TextArea.spec.md +10 -13
- package/src/TextArea/TextArea.tsx +18 -3
- package/src/TextInput/TextInput.tsx +5 -3
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.spec.md +58 -61
- package/src/TimeInput/TimeInput.tsx +38 -20
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timestamp/Timestamp.spec.md +6 -12
- 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.tsx +121 -53
- package/src/Toast/useToast.tsx +8 -3
- package/src/ToggleButton/ToggleButton.tsx +10 -3
- 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.tsx +75 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/Tokenizer/Tokenizer.doc.mjs +12 -8
- package/src/Tokenizer/Tokenizer.spec.md +18 -4
- package/src/Tokenizer/Tokenizer.tsx +119 -65
- package/src/Tokenizer/TokenizerBottomSheet.tsx +11 -17
- package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
- package/src/Toolbar/Toolbar.spec.md +5 -6
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Tooltip/Tooltip.doc.mjs +3 -3
- package/src/Tooltip/Tooltip.spec.md +139 -41
- package/src/Tooltip/useTooltip.doc.mjs +1 -1
- package/src/TopNav/TopNavMegaMenu.tsx +8 -4
- package/src/TopNav/TopNavMenu.tsx +1 -0
- package/src/TreeList/TreeList.tsx +6 -3
- package/src/TreeList/TreeListItem.tsx +31 -7
- package/src/Typeahead/BaseTypeahead.doc.mjs +10 -7
- package/src/Typeahead/BaseTypeahead.spec.md +45 -45
- package/src/Typeahead/BaseTypeahead.tsx +361 -48
- package/src/Typeahead/Typeahead.doc.mjs +21 -4
- package/src/Typeahead/Typeahead.tsx +53 -11
- package/src/Typeahead/TypeaheadItem.doc.mjs +6 -3
- package/src/Typeahead/index.ts +1 -1
- package/src/Typeahead/types.ts +27 -3
- 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/haptics.ts +196 -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/menuPressMarker.ts +15 -0
- package/src/hooks/modalAnnounce.ts +129 -72
- 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.ts +209 -102
- package/src/hooks/useAnnounceRenderedText.ts +17 -3
- package/src/hooks/useBusyAnnouncement.ts +7 -10
- package/src/hooks/useClickableContainer.ts +48 -17
- package/src/hooks/useFocusReturnVisibility.ts +15 -12
- package/src/hooks/useInputStatusIcon.tsx +2 -2
- package/src/hooks/useListFocus.ts +38 -1
- package/src/hooks/useMenuHover.ts +15 -1
- package/src/hooks/useMenuPress.ts +5 -5
- package/src/hooks/useScrollOverflow.doc.mjs +1 -1
- package/src/hooks/useScrollOverflow.ts +59 -10
- 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/animator.ts +987 -132
- package/src/motion/coast.ts +10 -3
- package/src/motion/reducedMotion.ts +12 -2
- package/src/motion/reducedMotionPlan.ts +20 -1
- package/src/motion/resolveMotion.ts +68 -0
- package/src/motion/roleValue.ts +2 -1
- package/src/motion/uikit/timing.ts +15 -1
- package/src/privateAttributes/segmentDisabled.stylex.ts +28 -0
- package/src/theme/Theme.doc.mjs +1 -1
- package/src/theme/Theme.tsx +8 -4
- package/src/theme/defineTheme.ts +117 -8
- package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
- package/src/theme/domainTokens/index.ts +6 -10
- 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.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/theme/useTheme.ts +6 -1
- package/src/utils/focusOutline.stylex.ts +28 -0
- package/src/utils/focusReturn.ts +19 -6
- package/src/utils/getNodeText.ts +38 -0
- package/src/utils/interactionModality.ts +197 -17
- package/src/utils/interactionOverlay.stylex.ts +12 -3
- package/src/utils/plainDate.ts +58 -3
- package/src/utils/presentation.ts +180 -0
- package/src/utils/pressDisabled.ts +32 -0
- package/src/utils/pressFeedback.ts +39 -14
- package/src/utils/primaryClick.ts +28 -0
- package/src/utils/sharedMutationObserver.ts +87 -29
- package/src/utils/timeFormat.ts +314 -0
- package/src/utils/touchPresentation.stylex.ts +43 -0
- package/src/utils/touchPresentation.ts +13 -8
- package/src/utils/touchQueries.ts +15 -0
- package/src/utils/unicodeDigits.ts +71 -0
- package/src/utils/useFocusAcrossSwap.ts +55 -0
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.d.ts +0 -2
- package/dist/Item/ItemMarkerColumns.a11y.chromium.spec.js +0 -132
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.d.ts +0 -2
- package/dist/Lightbox/LightboxKeyboard.a11y.browser.spec.js +0 -78
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.d.ts +0 -2
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +0 -65
- package/dist/List/ListMarkers.a11y.chromium.spec.d.ts +0 -2
- package/dist/List/ListMarkers.a11y.chromium.spec.js +0 -677
- package/dist/Markdown/Markdown.fr23.bench.d.ts +0 -2
- package/dist/Markdown/Markdown.fr23.bench.d.ts.map +0 -1
- package/dist/Markdown/Markdown.fr23.bench.js +0 -152
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.d.ts +0 -2
- package/dist/Markdown/MarkdownTable.a11y.chromium.spec.js +0 -590
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.d.ts +0 -2
- package/dist/Markdown/plugins/headingLinks.a11y.chromium.spec.js +0 -657
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.d.ts +0 -2
- package/dist/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.js +0 -153
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +0 -116
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.js +0 -49
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.d.ts +0 -2
- package/dist/MultiSelector/OptionActions.a11y.chromium.spec.js +0 -273
- package/dist/Outline/OutlineFocus.a11y.chromium.spec.d.ts +0 -2
- package/dist/Outline/OutlineFocus.a11y.chromium.spec.js +0 -421
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.d.ts +0 -2
- package/dist/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.js +0 -118
- package/dist/reset.a11y.chromium.spec.d.ts +0 -2
- package/dist/reset.a11y.chromium.spec.js +0 -231
- package/dist/reset.until-found.a11y.browser.spec.d.ts +0 -2
- package/dist/reset.until-found.a11y.browser.spec.js +0 -72
- package/src/AlertDialog/AlertDialog.test.tsx +0 -519
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +0 -116
- package/src/AlertDialog/__tests__/AlertDialog.a11y.renders.tsx +0 -52
- package/src/AlertDialog/__tests__/AlertDialog.a11y.states.ts +0 -68
- package/src/AlertDialog/__tests__/AlertDialog.a11y.test.tsx +0 -144
- package/src/AlertDialog/useImperativeAlertDialog.test.tsx +0 -163
- package/src/AppShell/AppShell.test.tsx +0 -1148
- package/src/AspectRatio/AspectRatio.test.tsx +0 -398
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +0 -158
- package/src/Avatar/Avatar.test.tsx +0 -867
- package/src/Avatar/AvatarStatusDot.test.tsx +0 -306
- package/src/AvatarGroup/AvatarGroup.test.tsx +0 -313
- package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +0 -263
- package/src/Badge/Badge.test.tsx +0 -125
- package/src/Banner/Banner.test.tsx +0 -879
- package/src/Blockquote/Blockquote.test.tsx +0 -121
- package/src/BottomSheet/BottomSheet.test.tsx +0 -3108
- package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +0 -248
- package/src/BottomSheet/BottomSheetKeyboard.test.tsx +0 -195
- package/src/BottomSheet/BottomSheetPanel.test.tsx +0 -549
- package/src/BottomSheet/BottomSheetReplace.test.tsx +0 -1638
- package/src/BottomSheet/BottomSheetStacking.announce.test.tsx +0 -246
- package/src/BottomSheet/BottomSheetStacking.test.tsx +0 -3184
- package/src/BottomSheet/BottomSheetSwitcher.test.tsx +0 -2010
- package/src/BottomSheet/__tests__/BottomSheetDrag.a11y.chromium.spec.ts +0 -129
- package/src/BottomSheet/__tests__/BottomSheetFocusReturn.a11y.browser.spec.ts +0 -97
- package/src/BottomSheet/__tests__/BottomSheetKeyboard.a11y.browser.spec.ts +0 -415
- package/src/BottomSheet/__tests__/BottomSheetNativeModal.a11y.browser.spec.ts +0 -462
- package/src/BottomSheet/__tests__/BottomSheetPinchZoom.a11y.chromium.spec.ts +0 -247
- package/src/BottomSheet/__tests__/BottomSheetToastOutlet.a11y.chromium.spec.ts +0 -83
- package/src/BottomSheet/snapOffsets.test.ts +0 -254
- package/src/BottomSheet/useSheetGestures.test.ts +0 -1638
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +0 -921
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +0 -120
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.renders.tsx +0 -45
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.states.ts +0 -81
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.test.tsx +0 -125
- package/src/Button/Button.test.tsx +0 -864
- package/src/Button/__tests__/Button.a11y.chromium.spec.ts +0 -355
- package/src/Button/__tests__/Button.a11y.harnesses.tsx +0 -47
- package/src/Button/__tests__/Button.a11y.known-failures.ts +0 -25
- package/src/Button/__tests__/Button.a11y.renders.tsx +0 -139
- package/src/Button/__tests__/Button.a11y.states.ts +0 -317
- package/src/Button/__tests__/Button.a11y.test.tsx +0 -187
- package/src/ButtonGroup/ButtonGroup.test.tsx +0 -1025
- package/src/Calendar/Calendar.test.tsx +0 -2186
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +0 -127
- package/src/Calendar/__tests__/Calendar.a11y.known-failures.ts +0 -12
- package/src/Calendar/__tests__/Calendar.a11y.renders.tsx +0 -57
- package/src/Calendar/__tests__/Calendar.a11y.states.ts +0 -139
- package/src/Calendar/__tests__/Calendar.a11y.test.tsx +0 -137
- package/src/Calendar/dayCellUtils.test.ts +0 -520
- package/src/Calendar/getInitialFocusDate.test.ts +0 -94
- package/src/Calendar/getStandaloneShortWeekdayNames.test.ts +0 -54
- package/src/Calendar/hooks/useCalendarConstraints.test.ts +0 -153
- package/src/Calendar/hooks/useCalendarDays.test.ts +0 -265
- package/src/Calendar/hooks/useCalendarNavigation.test.ts +0 -252
- package/src/Card/Card.test.tsx +0 -202
- package/src/Carousel/Carousel.test.tsx +0 -915
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +0 -193
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +0 -27
- package/src/Carousel/__tests__/Carousel.a11y.renders.tsx +0 -39
- package/src/Carousel/__tests__/Carousel.a11y.states.ts +0 -139
- package/src/Carousel/__tests__/Carousel.a11y.test.tsx +0 -127
- package/src/Center/Center.test.tsx +0 -406
- package/src/Chat/ChatComposer.test.tsx +0 -364
- package/src/Chat/ChatComposerDrawer.test.tsx +0 -130
- package/src/Chat/ChatComposerInput.test.tsx +0 -2136
- package/src/Chat/ChatComposerTokenElement.test.tsx +0 -85
- package/src/Chat/ChatDictationButton.test.tsx +0 -108
- package/src/Chat/ChatLayout.test.tsx +0 -311
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -99
- package/src/Chat/ChatMessage.test.tsx +0 -344
- package/src/Chat/ChatMessageBubble.test.tsx +0 -294
- package/src/Chat/ChatMessageList.test.tsx +0 -198
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -66
- package/src/Chat/ChatPastedTextToken.test.tsx +0 -71
- package/src/Chat/ChatSendButton.test.tsx +0 -309
- package/src/Chat/ChatSystemMessage.test.tsx +0 -189
- package/src/Chat/ChatTokenizedText.test.tsx +0 -163
- package/src/Chat/ChatToolCalls.test.tsx +0 -413
- package/src/Chat/__tests__/ChatLayoutScrollButton.a11y.chromium.spec.ts +0 -577
- package/src/Chat/__tests__/ChatLayoutScrollButtonSurface.a11y.chromium.spec.ts +0 -740
- package/src/Chat/__tests__/ChatMessageBubble.a11y.chromium.spec.ts +0 -457
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.test.ts +0 -91
- package/src/Chat/__tests__/ChatMessageBubble.auditProvenance.ts +0 -91
- package/src/Chat/__tests__/ChatMessageList.a11y.chromium.spec.ts +0 -465
- package/src/Chat/__tests__/ChatMessageMetadata.a11y.chromium.spec.ts +0 -416
- package/src/Chat/__tests__/ChatSendButton.a11y.chromium.spec.ts +0 -1523
- package/src/Chat/__tests__/ChatSystemMessage.a11y.chromium.spec.ts +0 -1004
- package/src/Chat/__tests__/ChatTokenizedText.a11y.chromium.spec.ts +0 -574
- package/src/Chat/__tests__/useChatStreamScroll.a11y.chromium.spec.ts +0 -263
- package/src/Chat/__tests__/useChatStreamScroll.fixture.tsx +0 -61
- package/src/Chat/useChatDictation.test.tsx +0 -369
- package/src/Chat/useChatNewMessages.test.tsx +0 -209
- package/src/Chat/useChatPasteAsToken.test.ts +0 -191
- package/src/Chat/useChatStreamScroll.test.tsx +0 -381
- package/src/Chat/useTriggerMenu.test.tsx +0 -994
- package/src/CheckboxInput/CheckboxInput.test.tsx +0 -926
- package/src/CheckboxInput/__tests__/Checkbox.a11y.chromium.spec.ts +0 -354
- package/src/CheckboxInput/__tests__/Checkbox.a11y.known-failures.ts +0 -54
- package/src/CheckboxInput/__tests__/Checkbox.a11y.renders.tsx +0 -310
- package/src/CheckboxInput/__tests__/Checkbox.a11y.states.ts +0 -404
- package/src/CheckboxInput/__tests__/Checkbox.a11y.test.tsx +0 -128
- package/src/CheckboxList/CheckboxList.fr10.test.tsx +0 -51
- package/src/CheckboxList/CheckboxList.test.tsx +0 -1159
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +0 -1998
- package/src/Citation/Citation.test.tsx +0 -361
- package/src/ClickableCard/ClickableCard.test.tsx +0 -286
- package/src/Code/Code.test.tsx +0 -75
- package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +0 -87
- package/src/CodeBlock/CodeBlock.test.tsx +0 -752
- package/src/CodeBlock/CodeLanguage.test.tsx +0 -173
- package/src/CodeBlock/__tests__/CodeBlockCopyClearance.a11y.chromium.spec.ts +0 -290
- package/src/CodeBlock/__tests__/CodeBlockLanguages.a11y.chromium.spec.ts +0 -64
- package/src/CodeBlock/__tests__/CodeBlockOverflowStop.a11y.chromium.spec.ts +0 -126
- package/src/CodeBlock/__tests__/DiffRowPaint.a11y.chromium.spec.ts +0 -94
- package/src/CodeBlock/highlightRanges.test.ts +0 -253
- package/src/CodeBlock/languages.test.ts +0 -402
- package/src/CodeBlock/tokenizer.test.ts +0 -280
- package/src/CodeBlock/tokenizerBudget.test.ts +0 -112
- package/src/Collapsible/Collapsible.test.tsx +0 -620
- package/src/Collapsible/CollapsibleGroup.test.tsx +0 -656
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +0 -183
- package/src/Collapsible/__tests__/Collapsible.a11y.states.ts +0 -117
- package/src/Collapsible/__tests__/Collapsible.a11y.test.tsx +0 -140
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.chromium.spec.ts +0 -559
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.renders.tsx +0 -45
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.states.ts +0 -139
- package/src/Collapsible/__tests__/CollapsibleGroup.a11y.test.tsx +0 -135
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +0 -129
- package/src/Collapsible/useCollapsible.test.tsx +0 -236
- package/src/CommandPalette/CommandPalette.perf.test.ts +0 -100
- package/src/CommandPalette/CommandPalette.test.tsx +0 -750
- package/src/CommandPalette/CommandPaletteEmpty.test.tsx +0 -101
- package/src/CommandPalette/CommandPaletteFooter.test.tsx +0 -122
- package/src/CommandPalette/CommandPaletteGroup.test.tsx +0 -129
- package/src/CommandPalette/CommandPaletteInput.test.tsx +0 -539
- package/src/CommandPalette/CommandPaletteItem.test.tsx +0 -417
- package/src/CommandPalette/CommandPaletteList.test.tsx +0 -184
- package/src/CommandPalette/__tests__/CommandPalette.a11y.chromium.spec.ts +0 -600
- package/src/CommandPalette/__tests__/CommandPaletteEmptyAudit.a11y.chromium.spec.ts +0 -715
- package/src/CommandPalette/__tests__/CommandPaletteFooter.a11y.chromium.spec.ts +0 -582
- package/src/CommandPalette/__tests__/CommandPaletteInputAudit.a11y.chromium.spec.ts +0 -336
- package/src/CommandPalette/__tests__/CommandPaletteItemAudit.a11y.chromium.spec.ts +0 -523
- package/src/ComplexSelector/ComplexSelector.focusableDisabled.test.tsx +0 -76
- package/src/ComplexSelector/ComplexSelector.fr10.test.tsx +0 -262
- package/src/ComplexSelector/ComplexSelector.test.tsx +0 -1023
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +0 -965
- package/src/ContextMenu/ContextMenu.test.tsx +0 -1582
- package/src/ContextMenu/ContextMenu.triggerProps.test.tsx +0 -54
- package/src/ContextMenu/__tests__/ContextMenuAudit.a11y.chromium.spec.ts +0 -439
- package/src/ContextMenu/__tests__/ContextMenuCursorAnchor.a11y.browser.spec.ts +0 -154
- package/src/ContextMenu/__tests__/ContextMenuLongPress.a11y.chromium.spec.ts +0 -117
- package/src/DateInput/DateInput.fr10.test.tsx +0 -283
- package/src/DateInput/DateInput.test.tsx +0 -1459
- package/src/DateInput/DateInputTouch.test.tsx +0 -2828
- package/src/DateInput/NativeDateField.test.tsx +0 -741
- package/src/DateInput/Presentation.test.tsx +0 -121
- package/src/DateInput/__tests__/DateInputAudit.a11y.chromium.spec.ts +0 -577
- package/src/DateInput/__tests__/WheelPinchZoom.a11y.chromium.spec.ts +0 -171
- package/src/DateRangeInput/DateRangeInput.fr10.test.tsx +0 -165
- package/src/DateRangeInput/DateRangeInput.test.tsx +0 -1108
- package/src/DateTimeInput/DateTimeInput.fr10.test.tsx +0 -319
- package/src/DateTimeInput/DateTimeInput.test.tsx +0 -2575
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +0 -1071
- package/src/DateTimeInput/NativePickerSegments.test.tsx +0 -657
- package/src/DateTimeInput/Presentation.test.tsx +0 -89
- package/src/Dialog/Dialog.source-build.test.mjs +0 -43
- package/src/Dialog/Dialog.test.tsx +0 -1385
- package/src/Dialog/DialogHeader.test.tsx +0 -477
- package/src/Dialog/__tests__/Dialog.a11y.browser.spec.ts +0 -111
- package/src/Dialog/__tests__/Dialog.a11y.chromium.spec.ts +0 -218
- package/src/Dialog/__tests__/Dialog.a11y.known-failures.ts +0 -28
- package/src/Dialog/__tests__/Dialog.a11y.renders.tsx +0 -107
- package/src/Dialog/__tests__/Dialog.a11y.states.ts +0 -104
- package/src/Dialog/__tests__/Dialog.a11y.test.tsx +0 -102
- package/src/Dialog/__tests__/Dialog.reduced-motion.a11y.browser.spec.ts +0 -252
- package/src/Dialog/useImperativeDialog.test.tsx +0 -78
- package/src/Divider/Divider.test.tsx +0 -155
- package/src/Drawer/Drawer.test.tsx +0 -1300
- package/src/Drawer/DrawerDirection.test.tsx +0 -127
- package/src/Drawer/DrawerHeader.test.tsx +0 -102
- package/src/Drawer/__tests__/DrawerAudit.a11y.chromium.spec.ts +0 -402
- package/src/Drawer/__tests__/DrawerHeaderAudit.a11y.chromium.spec.ts +0 -298
- package/src/DropdownMenu/DropdownMenu.ssr.test.tsx +0 -93
- package/src/DropdownMenu/DropdownMenu.test.tsx +0 -4340
- package/src/DropdownMenu/DropdownMenuContext.public.test.ts +0 -22
- package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +0 -126
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +0 -635
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +0 -72
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +0 -2408
- package/src/DropdownMenu/__tests__/DropdownMenuDividerAudit.a11y.chromium.spec.ts +0 -281
- package/src/DropdownMenu/__tests__/DropdownMenuDrillIn.a11y.chromium.spec.ts +0 -175
- package/src/DropdownMenu/__tests__/DropdownMenuFocusReturn.a11y.browser.spec.ts +0 -74
- package/src/DropdownMenu/__tests__/DropdownMenuGroupAudit.a11y.chromium.spec.ts +0 -335
- package/src/DropdownMenu/__tests__/DropdownMenuItemAudit.a11y.chromium.spec.ts +0 -367
- package/src/DropdownMenu/__tests__/DropdownMenuRadioGroupAudit.a11y.chromium.spec.ts +0 -328
- package/src/DropdownMenu/__tests__/DropdownMenuRadioItemAudit.a11y.chromium.spec.ts +0 -540
- package/src/DropdownMenu/__tests__/DropdownMenuSubMenuAudit.a11y.chromium.spec.ts +0 -671
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +0 -146
- package/src/DropdownMenu/__tests__/Menu.a11y.known-failures.ts +0 -26
- package/src/DropdownMenu/__tests__/Menu.a11y.renders.tsx +0 -65
- package/src/DropdownMenu/__tests__/Menu.a11y.states.ts +0 -138
- package/src/DropdownMenu/__tests__/Menu.a11y.test.tsx +0 -136
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +0 -137
- package/src/DropdownMenu/__tests__/MenuButton.a11y.known-failures.ts +0 -12
- package/src/DropdownMenu/__tests__/MenuButton.a11y.renders.tsx +0 -67
- package/src/DropdownMenu/__tests__/MenuButton.a11y.states.ts +0 -141
- package/src/DropdownMenu/__tests__/MenuButton.a11y.test.tsx +0 -138
- package/src/DropdownMenu/__tests__/MenuHeaderFooter.a11y.chromium.spec.ts +0 -231
- package/src/DropdownMenu/__tests__/MenuHoverFocus.a11y.chromium.spec.ts +0 -238
- package/src/DropdownMenu/__tests__/MenuPinchZoom.a11y.chromium.spec.ts +0 -173
- package/src/DropdownMenu/__tests__/MenuPress.a11y.chromium.spec.ts +0 -503
- package/src/DropdownMenu/__tests__/SubMenuHeaderFooter.a11y.chromium.spec.ts +0 -268
- package/src/DropdownMenu/__tests__/warmMenuBottomSheet.tsx +0 -43
- package/src/EmptyState/EmptyState.announce.test.tsx +0 -227
- package/src/EmptyState/EmptyState.test.tsx +0 -284
- package/src/Field/Field.test.tsx +0 -800
- package/src/Field/FieldLabel.test.tsx +0 -244
- package/src/Field/InputClearButton.test.tsx +0 -395
- package/src/Field/__tests__/FieldLabelAudit.a11y.chromium.spec.ts +0 -297
- package/src/Field/fieldInputFamily.test.tsx +0 -160
- package/src/FieldStatus/FieldStatus.test.tsx +0 -482
- package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +0 -206
- package/src/FieldStatus/__tests__/StatusMessage.a11y.known-failures.ts +0 -13
- package/src/FieldStatus/__tests__/StatusMessage.a11y.renders.tsx +0 -287
- package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +0 -302
- package/src/FieldStatus/__tests__/StatusMessage.a11y.test.tsx +0 -154
- package/src/FileInput/FileInput.fr10.test.tsx +0 -21
- package/src/FileInput/FileInput.test.tsx +0 -1270
- package/src/FormLayout/FormLayout.test.tsx +0 -444
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -46
- package/src/Grid/Grid.test.tsx +0 -509
- package/src/HStack/HStack.test.tsx +0 -129
- package/src/Heading/Heading.test.tsx +0 -328
- package/src/HoverCard/HoverCard.test.tsx +0 -1339
- package/src/Icon/Icon.test.tsx +0 -990
- package/src/Icon/globalIconRegistry.test.tsx +0 -613
- package/src/IconButton/IconButton.test.tsx +0 -156
- package/src/Indicator/Indicator.test.tsx +0 -389
- package/src/Indicator/indicatorRegistry.test.tsx +0 -106
- package/src/InputGroup/InputGroup.test.tsx +0 -502
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Item/Item.source-build.test.mjs +0 -88
- package/src/Item/Item.swipeLayer.test.tsx +0 -74
- package/src/Item/Item.test.tsx +0 -1455
- package/src/Item/ItemMarkerColumns.a11y.chromium.spec.ts +0 -211
- package/src/Item/__tests__/ItemSwipeActions.a11y.chromium.spec.ts +0 -337
- package/src/Item/__tests__/ItemSwipePinchZoom.a11y.chromium.spec.ts +0 -186
- package/src/Kbd/Kbd.test.tsx +0 -299
- package/src/Layer/LayerProvider.test.tsx +0 -143
- package/src/Layer/__tests__/LayerReducedMotion.a11y.chromium.spec.ts +0 -176
- package/src/Layer/__tests__/TouchTrigger.a11y.chromium.spec.ts +0 -200
- package/src/Layer/anchorName.test.ts +0 -146
- package/src/Layer/layerDismissalFamilies.test.tsx +0 -487
- package/src/Layer/layerDismissalInvariants.test.tsx +0 -501
- package/src/Layer/layerHost.test.ts +0 -117
- package/src/Layer/layerScopedContext.test.tsx +0 -499
- package/src/Layer/layerViewportInset.source-build.test.mjs +0 -90
- package/src/Layer/layerViewportInset.test.ts +0 -120
- package/src/Layer/useLayer.test.tsx +0 -2423
- package/src/Layer/useLayerDismissal.test.tsx +0 -580
- package/src/Layer/useTouchTrigger.test.ts +0 -70
- package/src/Layout/Layout.test.tsx +0 -375
- package/src/Layout/LayoutSlots.test.tsx +0 -376
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +0 -122
- package/src/Layout/__tests__/Layout.a11y.renders.tsx +0 -110
- package/src/Layout/__tests__/Layout.a11y.states.ts +0 -93
- package/src/Layout/__tests__/Layout.a11y.test.tsx +0 -142
- package/src/Layout/__tests__/childrenAsContent.test.tsx +0 -59
- package/src/Layout/__tests__/contentWidth.test.tsx +0 -303
- package/src/Layout/__tests__/edgeCompensation.test.tsx +0 -191
- package/src/Layout/__tests__/nestedPadding.test.tsx +0 -264
- package/src/Layout/overlayPaddingReset.test.tsx +0 -224
- package/src/Lightbox/Lightbox.test.tsx +0 -819
- package/src/Lightbox/LightboxKeyboard.a11y.browser.spec.ts +0 -78
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +0 -70
- package/src/Lightbox/useLightbox.test.tsx +0 -263
- package/src/Link/Link.test.tsx +0 -457
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +0 -143
- package/src/Link/__tests__/Link.a11y.renders.tsx +0 -97
- package/src/Link/__tests__/Link.a11y.states.ts +0 -104
- package/src/Link/__tests__/Link.a11y.test.tsx +0 -127
- package/src/Link/__tests__/Link.navigation.a11y.chromium.spec.ts +0 -262
- package/src/Link/useLinkComponent.test.tsx +0 -572
- package/src/Link/useLinkify.test.tsx +0 -146
- package/src/List/List.test.tsx +0 -1052
- package/src/List/ListItem.source-build.test.mjs +0 -41
- package/src/List/ListMarkers.a11y.chromium.spec.ts +0 -904
- package/src/Markdown/Markdown.codeLanguages.test.tsx +0 -137
- package/src/Markdown/Markdown.fr23.bench.ts +0 -176
- package/src/Markdown/Markdown.fr23.perf.test.ts +0 -484
- package/src/Markdown/Markdown.helpers.perf.test.ts +0 -495
- package/src/Markdown/Markdown.public.test.ts +0 -309
- package/src/Markdown/Markdown.renderBoundary.test.tsx +0 -72
- package/src/Markdown/Markdown.rerender.test.tsx +0 -143
- package/src/Markdown/Markdown.test.tsx +0 -1383
- package/src/Markdown/MarkdownTable.a11y.chromium.spec.ts +0 -727
- package/src/Markdown/__tests__/MarkdownNesting.a11y.chromium.spec.ts +0 -102
- package/src/Markdown/angleDestinations.test.tsx +0 -104
- package/src/Markdown/ast.test.ts +0 -374
- package/src/Markdown/atxHeadingIndentation.test.tsx +0 -53
- package/src/Markdown/blockNesting.test.tsx +0 -124
- package/src/Markdown/blockquoteMarkers.test.tsx +0 -69
- package/src/Markdown/characterReferences.test.ts +0 -47
- package/src/Markdown/codeSpans.test.tsx +0 -65
- package/src/Markdown/emphasis.test.tsx +0 -214
- package/src/Markdown/fenceInfo.test.tsx +0 -47
- package/src/Markdown/imageAlt.test.tsx +0 -84
- package/src/Markdown/incremental.test.ts +0 -1198
- package/src/Markdown/incrementalIndentation.test.tsx +0 -36
- package/src/Markdown/indentedFences.test.tsx +0 -374
- package/src/Markdown/indentedTables.test.tsx +0 -53
- package/src/Markdown/linkBrackets.test.tsx +0 -116
- package/src/Markdown/linkDestinationLinear.test.tsx +0 -54
- package/src/Markdown/linkDestinations.test.tsx +0 -127
- package/src/Markdown/linkTextCode.test.tsx +0 -65
- package/src/Markdown/listBullets.test.tsx +0 -55
- package/src/Markdown/listContinuation.test.tsx +0 -94
- package/src/Markdown/listThematicBreak.test.tsx +0 -49
- package/src/Markdown/longLinkLabels.test.tsx +0 -49
- package/src/Markdown/openFenceFinalNewline.test.tsx +0 -85
- package/src/Markdown/parser.perf.test.ts +0 -398
- package/src/Markdown/parser.public.test.ts +0 -144
- package/src/Markdown/parser.test.ts +0 -1925
- package/src/Markdown/plugin-renderer/MarkdownPluginNodeRenderer.test.tsx +0 -300
- package/src/Markdown/plugins/frontmatter.test.tsx +0 -150
- package/src/Markdown/plugins/headingLinks.a11y.chromium.spec.ts +0 -856
- package/src/Markdown/plugins/headingLinks.ssr.test.tsx +0 -143
- package/src/Markdown/plugins/headingLinks.test.tsx +0 -637
- package/src/Markdown/plugins/protocol.test.tsx +0 -1083
- package/src/Markdown/plugins/semanticFence.test.tsx +0 -655
- package/src/Markdown/plugins/softBreaks.test.tsx +0 -172
- package/src/Markdown/plugins/sourceDecoration.test.tsx +0 -799
- package/src/Markdown/plugins/sourceLines.test.tsx +0 -715
- package/src/Markdown/plugins/textTransform.test.ts +0 -467
- package/src/Markdown/remark.test.tsx +0 -1877
- package/src/Markdown/streaming.test.ts +0 -148
- package/src/Markdown/streamingListShapes.test.tsx +0 -93
- package/src/Markdown/trailingSpaces.test.tsx +0 -45
- package/src/MetadataList/MetadataList.test.tsx +0 -383
- package/src/MobileNav/MobileNav.test.tsx +0 -281
- package/src/MobileNav/MobileNavCloseEdgeCases.test.tsx +0 -584
- package/src/MobileNav/MobileNavCloseTiming.test.ts +0 -58
- package/src/MobileNav/MobileNavCloseVisibility.test.tsx +0 -172
- package/src/MobileNav/MobileNavEntryAnimation.test.tsx +0 -212
- package/src/MobileNav/MobileNavFocus.test.tsx +0 -553
- package/src/MobileNav/MobileNavPinchZoom.a11y.chromium.spec.ts +0 -147
- package/src/MobileNav/MobileNavReopen.test.tsx +0 -118
- package/src/MobileNav/MobileNavScrollbarGutter.test.tsx +0 -109
- package/src/MobileNav/MobileNavToggle.test.tsx +0 -179
- package/src/MobileNav/__tests__/MobileNavWidth.a11y.chromium.spec.ts +0 -103
- package/src/MoreMenu/MoreMenu.test.tsx +0 -356
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +0 -149
- package/src/MultiSelector/MultiSelector.disabledFocus.a11y.chromium.spec.ts +0 -72
- package/src/MultiSelector/MultiSelector.focusableDisabled.test.tsx +0 -121
- package/src/MultiSelector/MultiSelector.fr10.test.tsx +0 -221
- package/src/MultiSelector/MultiSelector.test.tsx +0 -4702
- package/src/MultiSelector/OptionActions.a11y.chromium.spec.ts +0 -310
- package/src/MultiSelector/__tests__/MultiSelector.a11y.chromium.spec.ts +0 -46
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +0 -128
- package/src/NavIcon/NavIcon.test.tsx +0 -41
- package/src/NavMenu/NavHeadingMenu.test.tsx +0 -714
- package/src/NavMenu/__tests__/NavMenusSlideSelection.a11y.chromium.spec.ts +0 -137
- package/src/NumberInput/NumberInput.fr10.test.tsx +0 -21
- package/src/NumberInput/NumberInput.test.tsx +0 -2636
- package/src/NumberInput/__tests__/NumberInput.a11y.chromium.spec.ts +0 -124
- package/src/NumberInput/__tests__/NumberInput.a11y.known-failures.ts +0 -26
- package/src/NumberInput/__tests__/NumberInput.a11y.renders.tsx +0 -77
- package/src/NumberInput/__tests__/NumberInput.a11y.states.ts +0 -116
- package/src/NumberInput/__tests__/NumberInput.a11y.test.tsx +0 -154
- package/src/NumberInput/numberInputCommit.test.ts +0 -72
- package/src/NumberInput/numberParser.docblock.test.ts +0 -234
- package/src/NumberInput/numberParser.test.ts +0 -222
- package/src/Outline/Outline.test.tsx +0 -1069
- package/src/Outline/OutlineFocus.a11y.chromium.spec.ts +0 -551
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -104
- package/src/OverflowList/OverflowList.test.tsx +0 -1073
- package/src/Overlay/Overlay.test.tsx +0 -424
- package/src/Pagination/Pagination.test.tsx +0 -1754
- package/src/Popover/Popover.test.tsx +0 -1424
- package/src/Popover/PopoverPresentation.test.tsx +0 -952
- package/src/Popover/__tests__/PopoverSecondDocument.a11y.chromium.spec.ts +0 -205
- package/src/PowerSearch/PowerSearch.test.tsx +0 -1003
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +0 -1190
- package/src/PowerSearch/PowerSearchFilterEditor.test.tsx +0 -377
- package/src/PowerSearch/PowerSearchToken.test.tsx +0 -230
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +0 -754
- package/src/PowerSearch/formatFilterValue.test.ts +0 -339
- package/src/PowerSearch/resolveDateTimeRangePart.test.ts +0 -40
- package/src/PowerSearch/usePowerSearchConfig.test.ts +0 -832
- package/src/PowerSearch/usePowerSearchSource.test.ts +0 -621
- package/src/ProgressBar/ProgressBar.test.tsx +0 -852
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +0 -115
- package/src/ProgressBar/__tests__/ProgressBar.a11y.known-failures.ts +0 -12
- package/src/ProgressBar/__tests__/ProgressBar.a11y.renders.tsx +0 -38
- package/src/ProgressBar/__tests__/ProgressBar.a11y.states.ts +0 -123
- package/src/ProgressBar/__tests__/ProgressBar.a11y.test.tsx +0 -107
- package/src/RadioList/RadioList.fr10.test.tsx +0 -67
- package/src/RadioList/RadioList.test.tsx +0 -967
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +0 -80
- package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +0 -274
- package/src/RadioList/__tests__/RadioGroup.a11y.known-failures.ts +0 -12
- package/src/RadioList/__tests__/RadioGroup.a11y.renders.tsx +0 -232
- package/src/RadioList/__tests__/RadioGroup.a11y.states.ts +0 -503
- package/src/RadioList/__tests__/RadioGroup.a11y.test.tsx +0 -217
- package/src/Resizable/ResizeHandle.test.tsx +0 -1067
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +0 -120
- package/src/Resizable/__tests__/ResizeHandle.a11y.known-failures.ts +0 -39
- package/src/Resizable/__tests__/ResizeHandle.a11y.renders.tsx +0 -80
- package/src/Resizable/__tests__/ResizeHandle.a11y.states.ts +0 -197
- package/src/Resizable/__tests__/ResizeHandle.a11y.test.tsx +0 -123
- package/src/Resizable/shippedDirections.test.ts +0 -462
- package/src/Resizable/useResizable.test.ts +0 -1682
- package/src/Resizable/utils.test.ts +0 -74
- package/src/ScrollableArea/ScrollableArea.test.tsx +0 -304
- package/src/Section/Section.test.tsx +0 -376
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -897
- package/src/SelectableCard/SelectableCard.test.tsx +0 -216
- package/src/Selector/Selector.focusableDisabled.test.tsx +0 -127
- package/src/Selector/Selector.fr10.test.tsx +0 -149
- package/src/Selector/Selector.sheetActiveDescendant.test.tsx +0 -95
- package/src/Selector/Selector.source-build.test.mjs +0 -79
- package/src/Selector/Selector.test.tsx +0 -5028
- package/src/Selector/__tests__/Combobox.a11y.known-failures.ts +0 -27
- package/src/Selector/__tests__/Combobox.a11y.states.ts +0 -145
- package/src/Selector/__tests__/ComboboxField.a11y.chromium.spec.ts +0 -458
- package/src/Selector/__tests__/EmptyStateAnnouncement.a11y.chromium.spec.ts +0 -91
- package/src/Selector/__tests__/Listbox.a11y.chromium.spec.ts +0 -131
- package/src/Selector/__tests__/Listbox.a11y.dom.ts +0 -38
- package/src/Selector/__tests__/Listbox.a11y.inventory.test.ts +0 -63
- package/src/Selector/__tests__/Listbox.a11y.known-failures.ts +0 -12
- package/src/Selector/__tests__/Listbox.a11y.states.ts +0 -232
- package/src/Selector/__tests__/Selector.a11y.chromium.spec.ts +0 -46
- package/src/Selector/__tests__/Selector.combobox.a11y.chromium.spec.ts +0 -109
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +0 -126
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +0 -121
- package/src/Selector/useCombobox.public.test.tsx +0 -89
- package/src/Selector/useCombobox.test.tsx +0 -444
- package/src/SideNav/SideNav.test.tsx +0 -4128
- package/src/SideNav/SideNavRailMotion.test.tsx +0 -620
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +0 -417
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/Skeleton/Skeleton.test.tsx +0 -148
- package/src/Slider/Slider.fr10.test.tsx +0 -93
- package/src/Slider/Slider.test.tsx +0 -1630
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +0 -113
- package/src/Slider/__tests__/Slider.a11y.known-failures.ts +0 -12
- package/src/Slider/__tests__/Slider.a11y.renders.tsx +0 -42
- package/src/Slider/__tests__/Slider.a11y.states.ts +0 -106
- package/src/Slider/__tests__/Slider.a11y.test.tsx +0 -105
- package/src/Spinner/Spinner.test.tsx +0 -484
- package/src/Stack/Stack.test.tsx +0 -473
- package/src/Stack/StackItem.test.tsx +0 -105
- package/src/StatusDot/StatusDot.test.tsx +0 -213
- package/src/Stepper/Stepper.public.test.ts +0 -91
- package/src/Stepper/Stepper.test.tsx +0 -2068
- package/src/Switch/Switch.focusRing.source-build.test.mjs +0 -81
- package/src/Switch/Switch.test.tsx +0 -1071
- package/src/Switch/__tests__/Switch.a11y.chromium.spec.ts +0 -211
- package/src/Switch/__tests__/Switch.a11y.known-failures.ts +0 -28
- package/src/Switch/__tests__/Switch.a11y.states.ts +0 -275
- package/src/Switch/__tests__/Switch.a11y.test.tsx +0 -144
- package/src/TabList/TabList.test.tsx +0 -1701
- package/src/TabList/__tests__/TabListOverflow.interaction.browser.spec.ts +0 -99
- package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +0 -199
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +0 -12
- package/src/TabList/__tests__/Tabs.a11y.renders.tsx +0 -92
- package/src/TabList/__tests__/Tabs.a11y.states.ts +0 -247
- package/src/TabList/__tests__/Tabs.a11y.test.tsx +0 -153
- package/src/Table/Table.perf.test.tsx +0 -569
- package/src/Table/Table.test.tsx +0 -1851
- package/src/Table/TableHeaderCell.test.tsx +0 -291
- package/src/Table/TableSelectionToolbar.test.tsx +0 -109
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +0 -129
- package/src/Table/__tests__/Table.a11y.contracts.ts +0 -35
- package/src/Table/__tests__/Table.a11y.renders.tsx +0 -112
- package/src/Table/__tests__/Table.a11y.states.ts +0 -140
- package/src/Table/__tests__/Table.a11y.test.tsx +0 -198
- package/src/Table/__tests__/TableMinWidth.a11y.chromium.spec.ts +0 -75
- package/src/Table/__tests__/TableRowGlide.a11y.browser.spec.ts +0 -382
- package/src/Table/__tests__/TableScroll.a11y.chromium.spec.ts +0 -138
- package/src/Table/__tests__/TableStickyDividers.a11y.browser.spec.ts +0 -560
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +0 -919
- package/src/Table/plugins/columnSettings/useTableColumnSettings.test.tsx +0 -175
- package/src/Table/plugins/columnSettings/useTableColumnSettingsState.test.tsx +0 -296
- package/src/Table/plugins/filtering/useTableFilterState.test.tsx +0 -143
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +0 -357
- package/src/Table/plugins/groupedRows/useTableGroupedRows-perf.test.tsx +0 -112
- package/src/Table/plugins/groupedRows/useTableGroupedRows.test.tsx +0 -409
- package/src/Table/plugins/pagination/useTablePagination-perf.test.tsx +0 -232
- package/src/Table/plugins/pagination/useTablePagination.test.tsx +0 -666
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.glide.test.tsx +0 -280
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +0 -681
- package/src/Table/plugins/rowIndex/useTableRowIndex.test.tsx +0 -132
- package/src/Table/plugins/rowStatus/useTableRowStatus.public.test.ts +0 -92
- package/src/Table/plugins/rowStatus/useTableRowStatus.test.tsx +0 -519
- package/src/Table/plugins/selection/useTableSelection-perf.test.tsx +0 -258
- package/src/Table/plugins/selection/useTableSelection.test.tsx +0 -424
- package/src/Table/plugins/selection/useTableSelectionState.test.tsx +0 -451
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.test.tsx +0 -174
- package/src/Table/plugins/sortable/__tests__/useTableSortable.a11y.ts +0 -86
- package/src/Table/plugins/sortable/useTableSortable.test.tsx +0 -857
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +0 -592
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.test.tsx +0 -334
- package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +0 -163
- package/src/Table/plugins/tree/useTableTreeData.test.tsx +0 -992
- package/src/Table/plugins/tree/useTableTreeState.test.tsx +0 -740
- package/src/Table/tableContextMenu.test.tsx +0 -208
- package/src/Text/Text.test.tsx +0 -405
- package/src/Text/useTruncation.test.tsx +0 -69
- package/src/TextArea/TextArea.fr10.test.tsx +0 -21
- package/src/TextArea/TextArea.test.tsx +0 -1257
- package/src/TextInput/TextInput.fr10.test.tsx +0 -21
- package/src/TextInput/TextInput.test.tsx +0 -1259
- package/src/TextInput/__tests__/TextInput.a11y.chromium.spec.ts +0 -214
- package/src/TextInput/__tests__/TextInput.a11y.known-failures.ts +0 -40
- package/src/TextInput/__tests__/TextInput.a11y.renders.tsx +0 -202
- package/src/TextInput/__tests__/TextInput.a11y.states.ts +0 -384
- package/src/TextInput/__tests__/TextInput.a11y.test.tsx +0 -130
- package/src/Thumbnail/Thumbnail.test.tsx +0 -384
- package/src/TimeInput/NativeTimeInput.test.tsx +0 -326
- package/src/TimeInput/Presentation.test.tsx +0 -171
- package/src/TimeInput/TimeInput.fr10.test.tsx +0 -312
- package/src/TimeInput/TimeInput.test.tsx +0 -831
- package/src/Timer/Timer.test.tsx +0 -302
- package/src/Timestamp/Timestamp.test.tsx +0 -1636
- package/src/Timestamp/tooltipEntries.test.ts +0 -566
- package/src/Toast/ToastViewport.modalHost.test.tsx +0 -891
- package/src/Toast/ToastViewport.test.tsx +0 -2333
- package/src/Toast/useToast.test.tsx +0 -258
- package/src/ToggleButton/ToggleButton.test.tsx +0 -973
- package/src/ToggleButton/__tests__/ToggleButton.a11y.chromium.spec.ts +0 -177
- package/src/ToggleButton/__tests__/ToggleButton.a11y.renders.tsx +0 -133
- package/src/ToggleButton/__tests__/ToggleButton.a11y.states.ts +0 -167
- package/src/ToggleButton/__tests__/ToggleButton.a11y.test.tsx +0 -103
- package/src/Token/Token.test.tsx +0 -640
- package/src/Token/__tests__/TokenRemoveTarget.a11y.chromium.spec.ts +0 -87
- package/src/Tokenizer/Tokenizer.fr10.test.tsx +0 -28
- package/src/Tokenizer/Tokenizer.props-type.test.tsx +0 -126
- package/src/Tokenizer/Tokenizer.ssr.test.tsx +0 -196
- package/src/Tokenizer/Tokenizer.test.tsx +0 -2121
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +0 -2719
- package/src/Tokenizer/__tests__/TokenizerEndLane.a11y.chromium.spec.ts +0 -505
- package/src/Toolbar/Toolbar.test.tsx +0 -570
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +0 -164
- package/src/Toolbar/__tests__/Toolbar.a11y.renders.tsx +0 -63
- package/src/Toolbar/__tests__/Toolbar.a11y.states.ts +0 -142
- package/src/Toolbar/__tests__/Toolbar.a11y.test.tsx +0 -126
- package/src/Tooltip/Tooltip.test.tsx +0 -819
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +0 -130
- package/src/Tooltip/__tests__/Tooltip.a11y.renders.tsx +0 -86
- package/src/Tooltip/__tests__/Tooltip.a11y.states.ts +0 -132
- package/src/Tooltip/__tests__/Tooltip.a11y.test.tsx +0 -126
- package/src/Tooltip/__tests__/TooltipFocusReturn.a11y.chromium.spec.ts +0 -130
- package/src/Tooltip/__tests__/TooltipHoverBridge.a11y.chromium.spec.ts +0 -75
- package/src/Tooltip/__tests__/TooltipTallContent.a11y.browser.spec.ts +0 -673
- package/src/Tooltip/__tests__/TooltipTallContentTracking.a11y.browser.spec.ts +0 -1162
- package/src/Tooltip/useTooltip.test.tsx +0 -483
- package/src/TopNav/TopNav.test.tsx +0 -836
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +0 -83
- package/src/TopNav/TopNavMegaMenu.test.tsx +0 -1132
- package/src/TopNav/TopNavMenu.test.tsx +0 -485
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +0 -75
- package/src/TreeList/TreeList.test.tsx +0 -1711
- package/src/TreeList/__tests__/TreeList.a11y.chromium.spec.ts +0 -138
- package/src/TreeList/__tests__/TreeList.a11y.renders.tsx +0 -44
- package/src/TreeList/__tests__/TreeList.a11y.states.ts +0 -164
- package/src/TreeList/__tests__/TreeList.a11y.test.tsx +0 -138
- package/src/TreeList/__tests__/TreeListGuideAlignment.interaction.browser.spec.ts +0 -127
- package/src/TreeList/__tests__/TreeListRowNames.a11y.chromium.spec.ts +0 -83
- package/src/Typeahead/BaseTypeahead.emptyState.a11y.chromium.spec.ts +0 -138
- package/src/Typeahead/BaseTypeahead.test.tsx +0 -553
- package/src/Typeahead/Typeahead.fr10.test.tsx +0 -28
- package/src/Typeahead/Typeahead.test.tsx +0 -2824
- package/src/Typeahead/TypeaheadItem.test.tsx +0 -134
- package/src/VStack/VStack.test.tsx +0 -128
- package/src/VisuallyHidden/VisuallyHidden.test.tsx +0 -115
- package/src/__tests__/BusyOwnerAnnouncement.test.tsx +0 -853
- package/src/__tests__/CardPress.a11y.chromium.spec.ts +0 -353
- package/src/__tests__/DisabledTriggerFocus.a11y.chromium.spec.ts +0 -87
- package/src/__tests__/PressModality.a11y.chromium.spec.ts +0 -392
- package/src/__tests__/PressedState.a11y.chromium.spec.ts +0 -814
- package/src/__tests__/TestIcon.tsx +0 -26
- package/src/__tests__/babelPluginAddExtensions.test.ts +0 -190
- package/src/__tests__/fastRoleQueries.ts +0 -66
- package/src/__tests__/forcedColors.ts +0 -60
- package/src/__tests__/pressState.ts +0 -212
- package/src/__tests__/stubMatchMedia.test.ts +0 -79
- package/src/__tests__/stubMatchMedia.ts +0 -95
- package/src/__tests__/stylexDeclarations.ts +0 -51
- package/src/__tests__/unthemedLength.ts +0 -34
- package/src/docPropLiterals.test.ts +0 -964
- package/src/docPropReferences.test.ts +0 -178
- package/src/docs-script.test.mjs +0 -55
- package/src/gestures/__tests__/LongPressGestureRecognizer.test.ts +0 -141
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +0 -327
- package/src/gestures/__tests__/TapGestureRecognizer.test.ts +0 -154
- package/src/gestures/__tests__/VelocityTracker.streams.test.ts +0 -243
- package/src/gestures/__tests__/VelocityTracker.test.ts +0 -261
- package/src/gestures/__tests__/arena.test.ts +0 -824
- package/src/gestures/__tests__/arenaContinuous.test.ts +0 -207
- package/src/gestures/__tests__/arenaTapLongPress.test.ts +0 -211
- package/src/gestures/__tests__/fixtures/pointer-streams/README.md +0 -82
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-fling.json +0 -130
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-slow.json +0 -860
- package/src/gestures/__tests__/fixtures/pointer-streams/android-chromium-stop-release.json +0 -357
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-fling.json +0 -66
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/android-firefox-stop-release.json +0 -128
- package/src/gestures/__tests__/fixtures/pointer-streams/capture.html +0 -123
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-fling.json +0 -64
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-mouse-stop-release.json +0 -124
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-fling.json +0 -64
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-slow.json +0 -268
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-pen-stop-release.json +0 -124
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-fling.json +0 -84
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-slow.json +0 -381
- package/src/gestures/__tests__/fixtures/pointer-streams/desktop-chromium-touch-stop-release.json +0 -171
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-fling.json +0 -45
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-slow.json +0 -101
- package/src/gestures/__tests__/fixtures/pointer-streams/ios-safari-stop-release.json +0 -130
- package/src/gestures/__tests__/harness.ts +0 -204
- package/src/hooks/__tests__/MenuPressShadowRoot.a11y.chromium.spec.ts +0 -144
- package/src/hooks/__tests__/menuLinkClicks.ts +0 -71
- package/src/hooks/actionGroupTracker.exports.test.ts +0 -28
- package/src/hooks/actionGroupTracker.test.ts +0 -510
- package/src/hooks/computeOverflow.test.ts +0 -422
- package/src/hooks/deprecatedApis.public.test.ts +0 -33
- package/src/hooks/menuPressGesture.test.ts +0 -253
- package/src/hooks/scrollKeyboardDelegation.test.ts +0 -155
- package/src/hooks/scrollbarGutter.test.ts +0 -167
- package/src/hooks/useAnnounce.modal.test.tsx +0 -1291
- package/src/hooks/useAnnounce.test.tsx +0 -293
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +0 -226
- package/src/hooks/useAutoMediaMode.test.ts +0 -109
- package/src/hooks/useBusyAnnouncement.adopters.test.tsx +0 -69
- package/src/hooks/useBusyAnnouncement.test.tsx +0 -112
- package/src/hooks/useClickableContainer.test.tsx +0 -236
- package/src/hooks/useClipboard.test.tsx +0 -151
- package/src/hooks/useContainerReveal.test.tsx +0 -163
- package/src/hooks/useDevWarning.test.tsx +0 -45
- package/src/hooks/useEntryAnimation.ssr.test.tsx +0 -143
- package/src/hooks/useFocusTrap.test.tsx +0 -635
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +0 -166
- package/src/hooks/useGridFocus.test.tsx +0 -165
- package/src/hooks/useHotkeys.test.ts +0 -265
- package/src/hooks/useImageMode.test.ts +0 -133
- package/src/hooks/useInputContainer.test.tsx +0 -180
- package/src/hooks/useInputStatusIcon.test.tsx +0 -240
- package/src/hooks/useIsHydrating.test.tsx +0 -70
- package/src/hooks/useKeyboardHint.test.tsx +0 -92
- package/src/hooks/useListFocus.test.tsx +0 -664
- package/src/hooks/useLongPress.test.tsx +0 -152
- package/src/hooks/useMediaQuery.test.ts +0 -165
- package/src/hooks/useMenuHover.test.tsx +0 -536
- package/src/hooks/useMenuPress.test.tsx +0 -565
- package/src/hooks/useMergedRefs.test.tsx +0 -62
- package/src/hooks/useOverflow.test.ts +0 -504
- package/src/hooks/useRenamedProp.test.tsx +0 -95
- package/src/hooks/useScrollLock.test.ts +0 -248
- package/src/hooks/useScrollOverflow.test.tsx +0 -222
- package/src/hooks/useScrollableArea.test.tsx +0 -836
- package/src/hooks/useStreamingText.test.ts +0 -237
- package/src/hooks/useTreeFocus.test.tsx +0 -351
- package/src/hooks/useTypeahead.test.tsx +0 -351
- package/src/i18n/__tests__/InternationalizationProvider.test.tsx +0 -128
- package/src/i18n/__tests__/e2e-pagination.test.tsx +0 -172
- package/src/i18n/__tests__/e2e-powersearch.test.tsx +0 -166
- package/src/i18n/__tests__/getLocaleDirection.test.ts +0 -40
- package/src/i18n/__tests__/resolve.test.ts +0 -325
- package/src/i18n/__tests__/useCollator.test.tsx +0 -115
- package/src/i18n/__tests__/useDirection.test.tsx +0 -66
- package/src/i18n/__tests__/useLocale.test.tsx +0 -52
- package/src/i18n/useTranslator.test.tsx +0 -267
- package/src/inputFontFloor.test.ts +0 -106
- package/src/internal/tokenizer-presentation.test.ts +0 -29
- package/src/internal/touch.test.ts +0 -44
- package/src/motion/__tests__/animatedLayout.interaction.browser.spec.ts +0 -1613
- package/src/motion/__tests__/animatedLayoutAdopters.interaction.browser.spec.ts +0 -217
- package/src/motion/__tests__/animatedLayoutBundle.ts +0 -17
- package/src/motion/animatedLayout.boundary.test.ts +0 -155
- package/src/motion/animatedLayout.swap.test.ts +0 -827
- package/src/motion/animatedLayout.test.ts +0 -1154
- package/src/motion/animatedLayoutAdopters.test.tsx +0 -500
- package/src/motion/animator.test.ts +0 -2653
- package/src/motion/bezier.test.ts +0 -52
- package/src/motion/coast.test.ts +0 -99
- package/src/motion/decay.test.ts +0 -120
- package/src/motion/projection.test.ts +0 -107
- package/src/motion/reducedMotion.test.ts +0 -129
- package/src/motion/reducedMotionPlan.test.ts +0 -182
- package/src/motion/resolveSnapPoint.test.ts +0 -189
- package/src/motion/roles.test.ts +0 -256
- package/src/motion/rubberBand.test.ts +0 -88
- package/src/motion/selectPage.test.ts +0 -31
- package/src/motion/spring.test.ts +0 -650
- package/src/motion/uikit/gestures.test.ts +0 -89
- package/src/motion/uikit/springRows.test.ts +0 -71
- package/src/motion/uikit/uikit.test.ts +0 -364
- package/src/motion/uikit/values.test.ts +0 -110
- package/src/naming.test.ts +0 -44
- package/src/postinstall.test.mjs +0 -216
- package/src/reset.a11y.chromium.spec.ts +0 -238
- package/src/reset.test.ts +0 -205
- package/src/reset.until-found.a11y.browser.spec.ts +0 -76
- package/src/reset.until-found.test.ts +0 -32
- package/src/serverSafeComponents.test.ts +0 -675
- package/src/stylexValidation.source-build.test.mjs +0 -42
- package/src/tailwind-theme.test.ts +0 -153
- package/src/theme/MediaTheme.dom.test.tsx +0 -97
- package/src/theme/Theme.test.tsx +0 -337
- package/src/theme/__tests__/SpacingRootFontSize.a11y.chromium.spec.ts +0 -199
- package/src/theme/contrast.test.ts +0 -94
- package/src/theme/declarationBoundary.test.ts +0 -126
- package/src/theme/defineTheme.test.ts +0 -2028
- package/src/theme/derivedVarRegistry.test.ts +0 -588
- package/src/theme/expandColorScale.test.ts +0 -651
- package/src/theme/expandMotionScale.test.ts +0 -145
- package/src/theme/expandRadiusScale.test.ts +0 -59
- package/src/theme/expandTypeScale.test.ts +0 -351
- package/src/theme/extensibleAxes.test.ts +0 -432
- package/src/theme/generateThemeRules.test.ts +0 -1870
- package/src/theme/hct.test.ts +0 -93
- package/src/theme/onMediaTokens.test.ts +0 -431
- package/src/theme/publicThemeHelperContract.test.ts +0 -67
- package/src/theme/syntax/defineSyntaxTheme.diff.test.ts +0 -91
- package/src/theme/syntax/serverSafeSyntax.test.ts +0 -68
- package/src/theme/syntax/useSyntaxTheme.diff.test.tsx +0 -40
- package/src/theme/themeAdaptations.test.ts +0 -1795
- package/src/theme/themeRegistry.test.ts +0 -59
- package/src/theme/themingTargets.test.ts +0 -589
- package/src/theme/tokenValueCompat.test.ts +0 -204
- package/src/theme/tokens.test.ts +0 -441
- package/src/theme/useTheme.test.tsx +0 -322
- package/src/unicodePropertyEscapes.source-build.test.mjs +0 -69
- package/src/utils/chainEventHandlers.test.ts +0 -39
- package/src/utils/characters.test.ts +0 -141
- package/src/utils/color.test.ts +0 -233
- package/src/utils/composeEventHandlers.test.ts +0 -71
- package/src/utils/customPropertyArmLayering.test.ts +0 -131
- package/src/utils/dateParser.test.ts +0 -402
- package/src/utils/dateTypes.test.ts +0 -40
- package/src/utils/devWarning.test.ts +0 -56
- package/src/utils/edgeAutoscroll.test.ts +0 -192
- package/src/utils/focusReturn.test.ts +0 -119
- package/src/utils/getKey.test.ts +0 -25
- package/src/utils/hitArea.test.ts +0 -628
- package/src/utils/ime.test.ts +0 -32
- package/src/utils/inputAria.test.ts +0 -39
- package/src/utils/interactionModality.test.ts +0 -100
- package/src/utils/isApplePlatform.test.ts +0 -61
- package/src/utils/mergeProps.test.ts +0 -166
- package/src/utils/mergeRefs.test.ts +0 -48
- package/src/utils/parseStyleKey.test.ts +0 -56
- package/src/utils/plainDate.test.ts +0 -848
- package/src/utils/pressFeedback.test.ts +0 -874
- package/src/utils/pressGesture.test.ts +0 -323
- package/src/utils/pressPaintSource.test.ts +0 -65
- package/src/utils/pressableCoverage.test.ts +0 -192
- package/src/utils/safeUrl.test.ts +0 -101
- package/src/utils/sharedMutationObserver.test.ts +0 -53
- package/src/utils/sharedResizeObserver.test.ts +0 -283
- package/src/utils/themeProps.test.ts +0 -62
- package/src/utils/timeParser.test.ts +0 -295
- package/src/utils/touchPresentation.test.ts +0 -323
package/dist/motion/animator.js
CHANGED
|
@@ -42,14 +42,16 @@
|
|
|
42
42
|
* current value with the current velocity (`spec:AST-094` FR6). A gesture's release velocity
|
|
43
43
|
* can be handed in explicitly instead.
|
|
44
44
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
45
|
+
* No frame shows a value the element is not at. While a curve runs, the
|
|
46
|
+
* element's inline style holds the value the curve starts from (the value on
|
|
47
|
+
* screen when it was built), so a frame painted before the compositor has the
|
|
48
|
+
* curve (WebKit can receive a new curve a few updates late) shows the element
|
|
49
|
+
* where it is, never where it is going. The keyframes hold the end state for a
|
|
50
|
+
* while after the curve ends (END_HOLD_MS); the main thread retires a finished
|
|
51
|
+
* animation as soon as it runs after the curve's end, writing the end values
|
|
52
|
+
* inline in the same task that cancels it, so nothing moves. The hold matters
|
|
53
|
+
* when the curve ends during a main-thread block: WebKit's compositor ends an
|
|
54
|
+
* animation by falling back to the value its main thread last committed.
|
|
53
55
|
*
|
|
54
56
|
* Start time: a call that starts from rest (nothing on its channels moving,
|
|
55
57
|
* no `options.at`) gets no start time, so the browser starts it when it
|
|
@@ -57,25 +59,49 @@
|
|
|
57
59
|
* commit: a main-thread block before that frame delays the motion instead of
|
|
58
60
|
* skipping into it. Everything the call starts, and every
|
|
59
61
|
* call from rest in the same task, starts at that one time, which
|
|
60
|
-
* `handle.started` reports.
|
|
62
|
+
* `handle.started` reports. Where the compositor starts it and the page
|
|
63
|
+
* learns that start only a frame or more later (Chromium), the call starts
|
|
64
|
+
* at the frame that commits it, the start the compositor takes, so a
|
|
65
|
+
* retarget or a rebase before then continues from the frame on screen. A
|
|
66
|
+
* call that continues motion on
|
|
61
67
|
* screen (a retarget, a catch) keeps an explicit start at the call time, or
|
|
62
68
|
* `options.at` to line several animators up, so the new curve continues
|
|
63
69
|
* from the frame on screen. Keyframes are sampled from the call's start, so
|
|
64
70
|
* a value that keeps moving through a rebuild stays on its curve to the
|
|
65
|
-
* frame.
|
|
71
|
+
* frame. `options.start` changes that per call: `'commit'` dates a retarget
|
|
72
|
+
* by the browser's commit as well, and `'presented'` creates the animations
|
|
73
|
+
* of a call from rest two frames later, once its element at rest has been
|
|
74
|
+
* presented (a UI process that applies commits late); a retarget still starts
|
|
75
|
+
* now, from the value and velocity on screen.
|
|
76
|
+
* `handle.curve(property)` hands out the curve a call plays, so a
|
|
77
|
+
* companion can follow it on the same clock.
|
|
78
|
+
* `options.additive` retargets as UIKit does: the old curve keeps going and a
|
|
79
|
+
* curve of the change between the targets is added on top, baked into one
|
|
80
|
+
* animation (two animations on one property leave the compositor in both
|
|
81
|
+
* engines), so the retarget keeps the velocity on screen.
|
|
66
82
|
*
|
|
67
|
-
* WebKit
|
|
68
|
-
* time before the block,
|
|
69
|
-
*
|
|
83
|
+
* WebKit dates an animation created just before a block at its last frame
|
|
84
|
+
* time before the block, where the first frame after it would show the
|
|
85
|
+
* motion skipped into its curve; when the call's own task ran on more than
|
|
86
|
+
* two frames, the call's first read of that start moves it to that read, so
|
|
87
|
+
* WebKit delays the motion as Chromium's commit does (startAfterBlock). Every
|
|
88
|
+
* call of that task moves together, and a shorter task or a read that other
|
|
89
|
+
* tasks delay keeps the browser's start, so a sequence chained on a call's
|
|
90
|
+
* end (a Reduce Motion cross-fade's second half) keeps its clock.
|
|
70
91
|
*
|
|
71
92
|
* Promotion: Mobile Safari runs an animation whose start time is set from
|
|
72
|
-
* script on its compositor at its first commit only if the element
|
|
73
|
-
* has a compositing layer; without one, a block
|
|
74
|
-
* freezes it (iOS 26.2 simulator: 2 of 7 runs kept
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
93
|
+
* script on its compositor at its first commit only if the element (or the
|
|
94
|
+
* pseudo-element) already has a compositing layer; without one, a block
|
|
95
|
+
* right after that commit freezes it (iOS 26.2 simulator: 2 of 7 runs kept
|
|
96
|
+
* moving, 0 of 5 on a ::before). Every animation the animator creates, and
|
|
97
|
+
* every `set` (unless it passes `{promote: false}`), therefore promotes its
|
|
98
|
+
* channels in the same task: inline
|
|
99
|
+
* `will-change` on the element, merged with the element's own, or the custom
|
|
100
|
+
* property `--astryx-motion-will-change-<pseudo>` on the host for a
|
|
101
|
+
* pseudo-element, whose style opts in with
|
|
102
|
+
* `will-change: var(--astryx-motion-will-change-before, auto)`. That is
|
|
103
|
+
* enough (5 of 5, and 4 of 4 through the animator); promotion ends
|
|
104
|
+
* PROMOTION_LINGER_MS after the last motion.
|
|
79
105
|
*
|
|
80
106
|
* Known limits, iOS Safari (measured on the iOS 26.2 simulator):
|
|
81
107
|
* - a block in the task that starts a motion delays it: it starts when the
|
|
@@ -112,8 +138,8 @@
|
|
|
112
138
|
* call that lands too carries a landing still waiting (two calls in one
|
|
113
139
|
* frame land together), and a later opacity change lands it at once;
|
|
114
140
|
* - on any other primary pointer (DR3) it completes at once.
|
|
115
|
-
* No call option and no
|
|
116
|
-
* the fade's length is not a
|
|
141
|
+
* No call option and no role value lengthens the fade or keeps travel (DR4):
|
|
142
|
+
* the fade's length is not a role.
|
|
117
143
|
*
|
|
118
144
|
* Momentum under Reduce Motion (`design:reduced-motion` DR2, DEC-2): a
|
|
119
145
|
* decay's momentum continues the velocity a finger handed it on release
|
|
@@ -125,18 +151,38 @@
|
|
|
125
151
|
* Motion policy above, a cross-fade on a coarse pointer or after a touch
|
|
126
152
|
* release (`touchRelease`) and at once elsewhere (DR2, DR3).
|
|
127
153
|
*
|
|
154
|
+
* Roles: every spring and curve the animator plays passes through
|
|
155
|
+
* resolveMotion.ts, which names the motion role it plays (`springs.settle`
|
|
156
|
+
* once `registerSpringsTable()` has run, the Reduce Motion fade's curve,
|
|
157
|
+
* which the animator registers alone). The per-role tables stay internal
|
|
158
|
+
* (`spec:AST-094` DEC-15), so a role plays its table value: nothing reads a
|
|
159
|
+
* CSS variable or the element's style for it. A spring written inline at the call
|
|
160
|
+
* site, and a table never registered, play as given; the fade's length is not
|
|
161
|
+
* a role.
|
|
162
|
+
*
|
|
163
|
+
* A pseudo-element (`options.pseudoElement`, a dialog's `::backdrop`) has no
|
|
164
|
+
* inline style: its end value is held by a static filling animation (after a
|
|
165
|
+
* curve ends, and after `set`) until the next animation replaces it, and for
|
|
166
|
+
* as long as the pseudo-element exists. The browser makes a `::backdrop`
|
|
167
|
+
* again each time its dialog opens, without the hold, so a presentation
|
|
168
|
+
* calls `set` with its starting value right after `showModal()`, in the same
|
|
169
|
+
* task: a `set` before it lands on the backdrop the open replaces.
|
|
170
|
+
*
|
|
128
171
|
* SSR-safe: nothing touches `window` or `document` at module scope, and an
|
|
129
172
|
* animator created without an element only keeps state until one is attached.
|
|
130
173
|
*
|
|
131
174
|
* SYNC: When modified, update:
|
|
132
175
|
* - /packages/core/src/motion/animator.test.ts
|
|
133
176
|
* - /packages/core/src/motion/reducedMotionPlan.ts (the Reduce Motion plan)
|
|
177
|
+
* - /packages/core/src/motion/__tests__/animator.interaction.browser.spec.ts
|
|
178
|
+
* - /packages/core/src/motion/resolveMotion.ts (the roles it resolves)
|
|
134
179
|
* - /packages/core/src/motion/README.md
|
|
135
180
|
*/
|
|
136
181
|
|
|
137
182
|
import { cubicBezier } from "./bezier.js";
|
|
138
183
|
import { solveSpring, toSpring } from "./spring.js";
|
|
139
|
-
import {
|
|
184
|
+
import { resolveMotion } from "./resolveMotion.js";
|
|
185
|
+
import { reducedMotionCrossFade, registerReducedMotionCrossFade } from "./uikit/timing.js";
|
|
140
186
|
import { planReducedMotion } from "./reducedMotionPlan.js";
|
|
141
187
|
|
|
142
188
|
/**
|
|
@@ -167,6 +213,7 @@ import { planReducedMotion } from "./reducedMotionPlan.js";
|
|
|
167
213
|
/**
|
|
168
214
|
* Options of `createAnimator`.
|
|
169
215
|
*/
|
|
216
|
+
/** How `set` puts values in place. */
|
|
170
217
|
|
|
171
218
|
/**
|
|
172
219
|
* One `animate` / `decay` call's animations.
|
|
@@ -225,32 +272,100 @@ export const SETTLE_THRESHOLD = {
|
|
|
225
272
|
opacity: 0.001
|
|
226
273
|
};
|
|
227
274
|
|
|
228
|
-
/**
|
|
275
|
+
/**
|
|
276
|
+
* Keyframes are added until linear interpolation is within this: a quarter of
|
|
277
|
+
* a device pixel (this quarter of a CSS pixel, divided by the device pixel
|
|
278
|
+
* ratio where it is above 1), a twentieth of a degree, a 2000th of the size,
|
|
279
|
+
* about one step of an 8-bit alpha. Every one is below what a moving element
|
|
280
|
+
* can show.
|
|
281
|
+
*/
|
|
229
282
|
const SAMPLE_TOLERANCE = {
|
|
230
|
-
x: 0.
|
|
231
|
-
y: 0.
|
|
232
|
-
rotate: 0.
|
|
233
|
-
scaleX: 0.
|
|
234
|
-
scaleY: 0.
|
|
235
|
-
opacity: 0.
|
|
283
|
+
x: 0.25,
|
|
284
|
+
y: 0.25,
|
|
285
|
+
rotate: 0.05,
|
|
286
|
+
scaleX: 0.0005,
|
|
287
|
+
scaleY: 0.0005,
|
|
288
|
+
opacity: 0.004
|
|
236
289
|
};
|
|
237
290
|
|
|
291
|
+
/** Keyframes start on this grid (ms) and are split where the curve needs it. */
|
|
292
|
+
const SAMPLE_GRID_MS = 1000 / 30;
|
|
293
|
+
|
|
238
294
|
/** A curve that has not settled by then (an undamped spring) snaps. */
|
|
239
295
|
const MAX_DURATION_MS = 30_000;
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* How long a task must run on past its first call from rest before that
|
|
299
|
+
* counts as a block (WebKit; startAfterBlock): two frames at 60 Hz.
|
|
300
|
+
*/
|
|
301
|
+
// Browser start times are frame times and a task's end a live clock, so only a block longer than a frame plus the task's own length can be told apart from that quantization.
|
|
302
|
+
const LATE_START_MS = 34;
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* The task calls from rest are made in, shared by every call made in it
|
|
306
|
+
* (every animator's), so one motion's parts that are separate calls start
|
|
307
|
+
* together (startAfterBlock).
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
/** The task the current calls from rest are made in, until it ends. */
|
|
311
|
+
let openTask = null;
|
|
312
|
+
|
|
313
|
+
/** How many of the animators' animation-frame callbacks are running now. */
|
|
314
|
+
let frameDepth = 0;
|
|
315
|
+
|
|
316
|
+
/** The mark of the running task, opened by its first call from rest. */
|
|
317
|
+
function markTask(time, clock) {
|
|
318
|
+
if (openTask == null) {
|
|
319
|
+
const task = {
|
|
320
|
+
first: time
|
|
321
|
+
};
|
|
322
|
+
openTask = task;
|
|
323
|
+
queueMicrotask(() => {
|
|
324
|
+
task.ended = clock();
|
|
325
|
+
openTask = null;
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return openTask;
|
|
329
|
+
}
|
|
330
|
+
|
|
240
331
|
/** Above this many keyframes the tolerance is relaxed. */
|
|
241
332
|
const MAX_KEYFRAMES = 1200;
|
|
242
333
|
/**
|
|
243
334
|
* The keyframes hold the end state this long after a curve ends. An engine
|
|
244
335
|
* whose compositor ends an animation while the main thread is blocked falls
|
|
245
|
-
* back to the value its main thread last committed,
|
|
246
|
-
* hold keeps the end state on screen through such
|
|
247
|
-
*
|
|
336
|
+
* back to the value its main thread last committed, the curve's start
|
|
337
|
+
* (WebKit on Linux); the hold keeps the end state on screen through any such
|
|
338
|
+
* block. It only stretches the last keyframe. The main thread retires the
|
|
339
|
+
* animation as soon as it runs after the curve's end.
|
|
340
|
+
*
|
|
341
|
+
* Why a tail inside the curve's own animation, with a bound (measured Oct 24
|
|
342
|
+
* 2026; do not replace it without these proofs):
|
|
343
|
+
* - WebKit on Linux (WebKitGTK and WPE) ignores `fill` on its compositor:
|
|
344
|
+
* a 400 ms move that ends during a 1 s main-thread block snaps back to the
|
|
345
|
+
* block-start position 13 ms after its end, with `fill: forwards` or with
|
|
346
|
+
* no fill, and holds with this tail. iOS 26.2 Mobile Safari holds the end
|
|
347
|
+
* in all three forms, so there the tail is unneeded but harmless (measured
|
|
348
|
+
* Oct 25 2026). The browser proof "a spring that ends inside the block
|
|
349
|
+
* keeps showing its end state" catches it.
|
|
350
|
+
* - A separate static animation of the end state under the curve would hold
|
|
351
|
+
* it without a bound, but two animations on one property push Chromium to
|
|
352
|
+
* run the curve on the main thread: the 1 s block proof moved in 0 of 57
|
|
353
|
+
* frames, the start-before-a-block proof failed, and seeking the curve
|
|
354
|
+
* broke.
|
|
248
355
|
*/
|
|
249
|
-
export const END_HOLD_MS =
|
|
356
|
+
export const END_HOLD_MS = 60_000;
|
|
250
357
|
|
|
251
358
|
/** How often a paused animation is looked at again for retiring, ms. */
|
|
252
359
|
const RETIRE_RECHECK_MS = 100;
|
|
253
360
|
|
|
361
|
+
/**
|
|
362
|
+
* The soonest a running animation's end is looked for again, ms: a frame at
|
|
363
|
+
* 60 Hz. WebKit moves an animation's currentTime once per frame, so a look
|
|
364
|
+
* within a frame reads the frame's time, a fraction of a ms short of the end,
|
|
365
|
+
* and a timer for that fraction would fire again before anything moved.
|
|
366
|
+
*/
|
|
367
|
+
const END_RECHECK_MS = 1000 / 60;
|
|
368
|
+
|
|
254
369
|
/** How long an element stays promoted after its last motion, ms. */
|
|
255
370
|
export const PROMOTION_LINGER_MS = 500;
|
|
256
371
|
const CHANNELS = {
|
|
@@ -285,7 +400,7 @@ function format(channel, value) {
|
|
|
285
400
|
const shared = new WeakMap();
|
|
286
401
|
|
|
287
402
|
/**
|
|
288
|
-
* The one animator for `element
|
|
403
|
+
* The one animator for `element` (and `options.pseudoElement`), created on
|
|
289
404
|
* first use. Code that animates one element from several places (a swipe on
|
|
290
405
|
* x, a removal on y) shares it, so their curves compose in one `translate`
|
|
291
406
|
* track and retargeting one axis leaves the other on its curve; two
|
|
@@ -294,10 +409,16 @@ const shared = new WeakMap();
|
|
|
294
409
|
* elsewhere or `dispose` it: it lives as long as the element.
|
|
295
410
|
*/
|
|
296
411
|
export function animatorFor(element, options = {}) {
|
|
297
|
-
let
|
|
412
|
+
let byPseudo = shared.get(element);
|
|
413
|
+
if (byPseudo == null) {
|
|
414
|
+
byPseudo = new Map();
|
|
415
|
+
shared.set(element, byPseudo);
|
|
416
|
+
}
|
|
417
|
+
const key = options.pseudoElement ?? '';
|
|
418
|
+
let animator = byPseudo.get(key);
|
|
298
419
|
if (animator == null) {
|
|
299
420
|
animator = createAnimator(element, options);
|
|
300
|
-
|
|
421
|
+
byPseudo.set(key, animator);
|
|
301
422
|
}
|
|
302
423
|
return animator;
|
|
303
424
|
}
|
|
@@ -401,8 +522,9 @@ const REDUCED_TRANSITION = {
|
|
|
401
522
|
* @example
|
|
402
523
|
* ```
|
|
403
524
|
* const animator = createAnimator(sheet);
|
|
404
|
-
* // finger lifts at 1200 px/s heading for the detent at 0
|
|
405
|
-
*
|
|
525
|
+
* // finger lifts at 1200 px/s heading for the detent at 0 (a component
|
|
526
|
+
* // passes the spring of its motion role):
|
|
527
|
+
* animator.animate({y: 0}, {spring: {response: 0.45, dampingRatio: 0.9}, velocity: {y: 1200}});
|
|
406
528
|
* // the finger lands again: where is it right now?
|
|
407
529
|
* const y = animator.get('y', event.timeStamp);
|
|
408
530
|
* animator.stop(['y']);
|
|
@@ -410,9 +532,22 @@ const REDUCED_TRANSITION = {
|
|
|
410
532
|
*/
|
|
411
533
|
export function createAnimator(element, options = {}) {
|
|
412
534
|
const now = options.now ?? defaultNow;
|
|
413
|
-
const
|
|
535
|
+
const frameSource = options.requestFrame ?? (typeof requestAnimationFrame === 'function' ? callback => {
|
|
414
536
|
requestAnimationFrame(() => callback());
|
|
415
537
|
} : null);
|
|
538
|
+
// Every frame callback of an animator's counts itself, so a call made in
|
|
539
|
+
// one knows its animations commit in that frame.
|
|
540
|
+
const requestFrame = frameSource == null ? null : callback => {
|
|
541
|
+
frameSource(() => {
|
|
542
|
+
frameDepth += 1;
|
|
543
|
+
try {
|
|
544
|
+
callback();
|
|
545
|
+
} finally {
|
|
546
|
+
frameDepth -= 1;
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
};
|
|
550
|
+
const pseudoElement = options.pseudoElement;
|
|
416
551
|
// Reduced Motion reads the person's settings and nothing else: no option
|
|
417
552
|
// overrides them (design:reduced-motion DR4).
|
|
418
553
|
const prefersReducedMotion = defaultPrefersReducedMotion;
|
|
@@ -462,7 +597,18 @@ export function createAnimator(element, options = {}) {
|
|
|
462
597
|
let ownWillChange = null;
|
|
463
598
|
/** The stylesheet's will-change when there is no inline value. */
|
|
464
599
|
let sheetWillChange = '';
|
|
600
|
+
/**
|
|
601
|
+
* Whether sheetWillChange holds a read of the element's current style: it
|
|
602
|
+
* is read in the task after the element is attached, and again after each
|
|
603
|
+
* demotion, so a promotion (a drag's first move) reads no style in its
|
|
604
|
+
* own task.
|
|
605
|
+
*/
|
|
606
|
+
let sheetWillChangeRead = false;
|
|
607
|
+
/** The pending read of sheetWillChange, cancelled with its element. */
|
|
608
|
+
let sheetReadTimer = null;
|
|
465
609
|
let demoteTimer = null;
|
|
610
|
+
/** A pseudo-element is promoted through a custom property on its host. */
|
|
611
|
+
const promotionProperty = pseudoElement == null ? null : `--astryx-motion-will-change-${pseudoElement.replace(/^:+/, '')}`;
|
|
466
612
|
/** Channels whose identity the last node held inline (see `attach`). */
|
|
467
613
|
let heldIdentity = new Set();
|
|
468
614
|
|
|
@@ -532,18 +678,21 @@ export function createAnimator(element, options = {}) {
|
|
|
532
678
|
// -- writing --------------------------------------------------------------
|
|
533
679
|
|
|
534
680
|
const finalValue = property => segments.get(property)?.target ?? resting[property];
|
|
535
|
-
const writeInline = (channel, value) => {
|
|
536
|
-
if (target == null) {
|
|
681
|
+
const writeInline = (channel, value, release = true) => {
|
|
682
|
+
if (target == null || pseudoElement != null) {
|
|
537
683
|
return;
|
|
538
684
|
}
|
|
539
685
|
touched.add(channel);
|
|
540
686
|
const text = inlineText(channel, value);
|
|
541
|
-
|
|
542
|
-
|
|
687
|
+
// An unchanged value is not written: a style write invalidates the
|
|
688
|
+
// element, and WebKit can repaint sticky content stale when that lands in
|
|
689
|
+
// the frame a scroll commits.
|
|
690
|
+
if (target.style.getPropertyValue(channel) !== text) {
|
|
543
691
|
target.style.setProperty(channel, text);
|
|
692
|
+
}
|
|
693
|
+
if (release && text === IDENTITY_TEXT[channel]) {
|
|
694
|
+
// Identity leaves the element when nothing else would move it.
|
|
544
695
|
releaseIdentity(channel);
|
|
545
|
-
} else {
|
|
546
|
-
target.style.setProperty(channel, text);
|
|
547
696
|
}
|
|
548
697
|
};
|
|
549
698
|
const sampleTimes = (property, from, to, tolerance) => {
|
|
@@ -563,9 +712,9 @@ export function createAnimator(element, options = {}) {
|
|
|
563
712
|
for (let e = 0; e + 1 < edges.length; e++) {
|
|
564
713
|
const a = edges[e];
|
|
565
714
|
const b = edges[e + 1];
|
|
566
|
-
// A
|
|
715
|
+
// A 30 Hz grid, each interval split until the chord is within the
|
|
567
716
|
// tolerance at its quarter points.
|
|
568
|
-
const steps = Math.max(1, Math.ceil((b - a) /
|
|
717
|
+
const steps = Math.max(1, Math.ceil((b - a) / SAMPLE_GRID_MS));
|
|
569
718
|
const split = (t0, t1, depth) => {
|
|
570
719
|
const v0 = value(t0);
|
|
571
720
|
const v1 = t1 === b && breaks.includes(b) ? valueBefore(property, b) : value(t1);
|
|
@@ -588,14 +737,37 @@ export function createAnimator(element, options = {}) {
|
|
|
588
737
|
}
|
|
589
738
|
return times;
|
|
590
739
|
};
|
|
740
|
+
|
|
741
|
+
/** A pseudo-element's resting value, held by a static filling animation. */
|
|
742
|
+
const hold = (channel, time) => {
|
|
743
|
+
if (target == null) {
|
|
744
|
+
return;
|
|
745
|
+
}
|
|
746
|
+
const value = format(channel, finalValue);
|
|
747
|
+
const animation = target.animate([{
|
|
748
|
+
[channel]: value
|
|
749
|
+
}, {
|
|
750
|
+
[channel]: value
|
|
751
|
+
}], {
|
|
752
|
+
duration: 1,
|
|
753
|
+
fill: 'both',
|
|
754
|
+
pseudoElement
|
|
755
|
+
});
|
|
756
|
+
animation.startTime = time;
|
|
757
|
+
running.set(channel, animation);
|
|
758
|
+
};
|
|
591
759
|
const rebuild = (channel, time) => {
|
|
592
760
|
const previous = running.get(channel);
|
|
593
761
|
running.delete(channel);
|
|
594
762
|
clearTimeout(retireTimers.get(channel));
|
|
595
763
|
retireTimers.delete(channel);
|
|
596
|
-
//
|
|
597
|
-
// can go first.
|
|
598
|
-
|
|
764
|
+
// An element's inline style takes the value on screen below, so its old
|
|
765
|
+
// animation can go first. A pseudo-element has none: its old animation
|
|
766
|
+
// keeps holding the value until the new one exists (same task, no frame in
|
|
767
|
+
// between).
|
|
768
|
+
if (pseudoElement == null) {
|
|
769
|
+
previous?.cancel();
|
|
770
|
+
}
|
|
599
771
|
const properties = CHANNELS[channel];
|
|
600
772
|
// Settled curves become resting values.
|
|
601
773
|
for (const property of properties) {
|
|
@@ -605,13 +777,23 @@ export function createAnimator(element, options = {}) {
|
|
|
605
777
|
segments.delete(property);
|
|
606
778
|
}
|
|
607
779
|
}
|
|
608
|
-
writeInline(channel, finalValue);
|
|
609
780
|
const moving = properties.filter(p => segments.has(p));
|
|
781
|
+
if (moving.length === 0 || target == null || typeof target.animate !== 'function') {
|
|
782
|
+
writeInline(channel, finalValue);
|
|
783
|
+
} else {
|
|
784
|
+
// The value on screen as the curve starts: what a frame painted before
|
|
785
|
+
// the compositor has the curve shows. The end is written at retire.
|
|
786
|
+
writeInline(channel, p => valueAt(p, time));
|
|
787
|
+
}
|
|
610
788
|
if (target == null || typeof target.animate !== 'function') {
|
|
611
789
|
previous?.cancel();
|
|
612
790
|
return;
|
|
613
791
|
}
|
|
614
792
|
if (moving.length === 0) {
|
|
793
|
+
if (pseudoElement != null) {
|
|
794
|
+
hold(channel, time);
|
|
795
|
+
}
|
|
796
|
+
previous?.cancel();
|
|
615
797
|
return;
|
|
616
798
|
}
|
|
617
799
|
// A channel rebuilt by an explicit call (set, rebase, a retarget of
|
|
@@ -624,6 +806,10 @@ export function createAnimator(element, options = {}) {
|
|
|
624
806
|
const from = waiting?.provisional ?? time;
|
|
625
807
|
const end = Math.min(from + MAX_DURATION_MS, Math.max(...moving.map(p => segments.get(p).start + segments.get(p).duration)));
|
|
626
808
|
if (end <= from) {
|
|
809
|
+
if (pseudoElement != null) {
|
|
810
|
+
hold(channel, time);
|
|
811
|
+
}
|
|
812
|
+
previous?.cancel();
|
|
627
813
|
return;
|
|
628
814
|
}
|
|
629
815
|
if (callGroup != null) {
|
|
@@ -646,10 +832,14 @@ export function createAnimator(element, options = {}) {
|
|
|
646
832
|
}
|
|
647
833
|
}
|
|
648
834
|
}
|
|
835
|
+
// Read where the keyframes are baked: a page moved to another screen
|
|
836
|
+
// bakes its next motion for that screen.
|
|
837
|
+
const devicePixel = 1 / Math.max(1, globalThis.devicePixelRatio || 1);
|
|
649
838
|
const collect = scale => {
|
|
650
839
|
const times = new Set([from, end]);
|
|
651
840
|
for (const property of moving) {
|
|
652
|
-
|
|
841
|
+
const tolerance = SAMPLE_TOLERANCE[property] * scale * (property === 'x' || property === 'y' ? devicePixel : 1);
|
|
842
|
+
for (const t of sampleTimes(property, from, end, tolerance)) {
|
|
653
843
|
times.add(t);
|
|
654
844
|
}
|
|
655
845
|
}
|
|
@@ -699,10 +889,13 @@ export function createAnimator(element, options = {}) {
|
|
|
699
889
|
duration: span,
|
|
700
890
|
// The last keyframes hold the end state (END_HOLD_MS); filling both
|
|
701
891
|
// ways also keeps it where an engine honors the fill on its compositor.
|
|
702
|
-
// The main thread
|
|
703
|
-
//
|
|
892
|
+
// The main thread retires the animation once it runs after the end,
|
|
893
|
+
// writing the end inline in that task, so that changes no pixel.
|
|
704
894
|
fill: 'both',
|
|
705
|
-
easing: 'linear'
|
|
895
|
+
easing: 'linear',
|
|
896
|
+
...(pseudoElement != null ? {
|
|
897
|
+
pseudoElement
|
|
898
|
+
} : {})
|
|
706
899
|
});
|
|
707
900
|
if (waiting != null) {
|
|
708
901
|
// From rest: no start time, so the browser starts the animation when
|
|
@@ -723,7 +916,16 @@ export function createAnimator(element, options = {}) {
|
|
|
723
916
|
|
|
724
917
|
/**
|
|
725
918
|
* Once the main thread runs after the curve's end, the animation leaves the
|
|
726
|
-
* running state:
|
|
919
|
+
* running state: an element's end values are written inline in the task
|
|
920
|
+
* that cancels it; a pseudo-element's end value moves to a static holding
|
|
921
|
+
* animation, created before the long one goes.
|
|
922
|
+
*
|
|
923
|
+
* Why a timer at the curve's end: no browser event reports that an
|
|
924
|
+
* animation's time has reached a point inside its effect, and its
|
|
925
|
+
* `finished` comes only after the END_HOLD_MS tail, which would keep the
|
|
926
|
+
* element promoted and the animation alive for a minute. The timer is set
|
|
927
|
+
* on the curve's own clock and re-armed while a sampler pauses or seeks the
|
|
928
|
+
* animation, so it never retires a held one.
|
|
727
929
|
*/
|
|
728
930
|
const scheduleRetire = (channel, animation, end) => {
|
|
729
931
|
clearTimeout(retireTimers.get(channel));
|
|
@@ -736,11 +938,34 @@ export function createAnimator(element, options = {}) {
|
|
|
736
938
|
// reaches the curve's end, never from the wall clock.
|
|
737
939
|
const remaining = remainingCurve(animation);
|
|
738
940
|
if (remaining != null && remaining > 0) {
|
|
739
|
-
retireTimers.set(channel, setTimeout(retire, animation.playState === 'paused' ? RETIRE_RECHECK_MS : remaining));
|
|
941
|
+
retireTimers.set(channel, setTimeout(retire, animation.playState === 'paused' ? RETIRE_RECHECK_MS : Math.max(remaining, END_RECHECK_MS)));
|
|
740
942
|
return;
|
|
741
943
|
}
|
|
742
944
|
running.delete(channel);
|
|
945
|
+
// A pseudo-element holds its resting value, unless the stylesheet
|
|
946
|
+
// takes it back now (a borrowed dip that has ended).
|
|
947
|
+
const handsBack = channel === 'opacity' && borrowedOpacity != null && ![...landings].some(landing => landing.fadeIn?.isBorrowed === true);
|
|
948
|
+
if (pseudoElement != null && !handsBack) {
|
|
949
|
+
hold(channel, now());
|
|
950
|
+
} else {
|
|
951
|
+
// The end goes inline in the task that cancels the animation. Whether
|
|
952
|
+
// an identity end may leave the element is judged after the cancel:
|
|
953
|
+
// until then the end-state tail still holds the end, so the computed
|
|
954
|
+
// style would hide a stylesheet value (an opacity 0) under it.
|
|
955
|
+
writeInline(channel, finalValue, false);
|
|
956
|
+
}
|
|
957
|
+
// A call from rest the browser never started (finished from outside
|
|
958
|
+
// before its first frame, a sampler's finish()): read its start from the
|
|
959
|
+
// animation before the cancel takes it, and with nothing left to wait
|
|
960
|
+
// on the call keeps its own clock, so its landing is still armed.
|
|
961
|
+
const waiting = [...pendingGroups].filter(group => group.animations.includes(animation));
|
|
962
|
+
for (const group of waiting) {
|
|
963
|
+
syncGroup(group);
|
|
964
|
+
}
|
|
743
965
|
animation.cancel();
|
|
966
|
+
for (const group of waiting) {
|
|
967
|
+
resolveGroup(group, group.provisional);
|
|
968
|
+
}
|
|
744
969
|
releaseIdentity(channel);
|
|
745
970
|
flushReleases();
|
|
746
971
|
};
|
|
@@ -750,20 +975,30 @@ export function createAnimator(element, options = {}) {
|
|
|
750
975
|
/** The element's own (stylesheet) opacity, read once when a dip starts. */
|
|
751
976
|
const ownOpacity = () => {
|
|
752
977
|
const view = target?.ownerDocument.defaultView;
|
|
753
|
-
const value = target == null ? NaN : Number.parseFloat(view?.getComputedStyle(target).getPropertyValue('opacity') ?? '');
|
|
978
|
+
const value = target == null ? NaN : Number.parseFloat(view?.getComputedStyle(target, pseudoElement ?? null).getPropertyValue('opacity') ?? '');
|
|
754
979
|
return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 1;
|
|
755
980
|
};
|
|
756
981
|
|
|
757
982
|
/**
|
|
758
983
|
* Whether the animator holds an opacity of its own on the element: an inline
|
|
759
|
-
* value it wrote (a `set` over a
|
|
760
|
-
* returns to that value.
|
|
984
|
+
* value it wrote, or a pseudo-element's holding animation (a `set` over a
|
|
985
|
+
* stylesheet that hides or dims it). A dip returns to that value.
|
|
761
986
|
*/
|
|
762
|
-
const writesOwnOpacity = () => (target?.style.getPropertyValue('opacity') ?? '') !== '';
|
|
987
|
+
const writesOwnOpacity = () => pseudoElement == null ? (target?.style.getPropertyValue('opacity') ?? '') !== '' : running.has('opacity');
|
|
763
988
|
|
|
764
|
-
/**
|
|
989
|
+
/**
|
|
990
|
+
* Gives the element's opacity back to its stylesheet: an element's inline
|
|
991
|
+
* value goes; a pseudo-element, which has no inline style, loses the
|
|
992
|
+
* animation holding its value.
|
|
993
|
+
*/
|
|
765
994
|
const releaseOwnOpacity = () => {
|
|
766
|
-
|
|
995
|
+
if (pseudoElement == null) {
|
|
996
|
+
target?.style.removeProperty('opacity');
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
999
|
+
const held = running.get('opacity');
|
|
1000
|
+
running.delete('opacity');
|
|
1001
|
+
held?.cancel();
|
|
767
1002
|
};
|
|
768
1003
|
|
|
769
1004
|
/**
|
|
@@ -844,6 +1079,9 @@ export function createAnimator(element, options = {}) {
|
|
|
844
1079
|
releaseOwnOpacity();
|
|
845
1080
|
return;
|
|
846
1081
|
}
|
|
1082
|
+
if (pseudoElement != null) {
|
|
1083
|
+
return;
|
|
1084
|
+
}
|
|
847
1085
|
if (target.style.getPropertyValue(channel) !== IDENTITY_TEXT[channel]) {
|
|
848
1086
|
return;
|
|
849
1087
|
}
|
|
@@ -903,9 +1141,17 @@ export function createAnimator(element, options = {}) {
|
|
|
903
1141
|
|
|
904
1142
|
// -- promotion -------------------------------------------------------------
|
|
905
1143
|
|
|
906
|
-
/** Writes the promoted channels as will-change. */
|
|
1144
|
+
/** Writes the promoted channels as will-change (or the pseudo's property). */
|
|
907
1145
|
const writePromotion = element => {
|
|
908
1146
|
const list = [...promoted].join(', ');
|
|
1147
|
+
if (promotionProperty != null) {
|
|
1148
|
+
if (list === '') {
|
|
1149
|
+
element.style.removeProperty(promotionProperty);
|
|
1150
|
+
} else {
|
|
1151
|
+
element.style.setProperty(promotionProperty, list);
|
|
1152
|
+
}
|
|
1153
|
+
return;
|
|
1154
|
+
}
|
|
909
1155
|
if (list === '') {
|
|
910
1156
|
element.style.willChange = ownWillChange ?? '';
|
|
911
1157
|
ownWillChange = null;
|
|
@@ -914,8 +1160,12 @@ export function createAnimator(element, options = {}) {
|
|
|
914
1160
|
if (ownWillChange == null) {
|
|
915
1161
|
ownWillChange = element.style.willChange;
|
|
916
1162
|
// Without an inline value, the stylesheet's reasons stay alongside the
|
|
917
|
-
// promotion's
|
|
918
|
-
|
|
1163
|
+
// promotion's. They were read in the task after the element was
|
|
1164
|
+
// attached; a promotion that comes first (an element attached in this
|
|
1165
|
+
// task that moves at once) reads them now.
|
|
1166
|
+
if (ownWillChange === '' && !sheetWillChangeRead) {
|
|
1167
|
+
readSheetWillChange(element);
|
|
1168
|
+
}
|
|
919
1169
|
}
|
|
920
1170
|
const base = ownWillChange !== '' ? ownWillChange : sheetWillChange;
|
|
921
1171
|
const own = base === 'auto' ? '' : base;
|
|
@@ -923,8 +1173,46 @@ export function createAnimator(element, options = {}) {
|
|
|
923
1173
|
element.style.willChange = [...reasons, ...promoted].join(', ');
|
|
924
1174
|
};
|
|
925
1175
|
|
|
1176
|
+
/** Reads the element's own will-change while no promotion of ours is written. */
|
|
1177
|
+
const readSheetWillChange = element => {
|
|
1178
|
+
sheetWillChange = element.ownerDocument.defaultView?.getComputedStyle(element).getPropertyValue('will-change') ?? '';
|
|
1179
|
+
sheetWillChangeRead = true;
|
|
1180
|
+
};
|
|
1181
|
+
|
|
926
1182
|
/**
|
|
927
|
-
*
|
|
1183
|
+
* Reads sheetWillChange in a task of its own, so a later promotion reads no
|
|
1184
|
+
* style in its own task. Skipped while a promotion of ours is written,
|
|
1185
|
+
* which the read would see (demote asks again), and for a node out of the
|
|
1186
|
+
* document. A pseudo-element's promotion is its own property, with
|
|
1187
|
+
* nothing to read.
|
|
1188
|
+
*/
|
|
1189
|
+
const readSheetWillChangeLater = () => {
|
|
1190
|
+
cancelSheetWillChangeRead();
|
|
1191
|
+
sheetWillChangeRead = false;
|
|
1192
|
+
if (target == null || promotionProperty != null) {
|
|
1193
|
+
return;
|
|
1194
|
+
}
|
|
1195
|
+
const element = target;
|
|
1196
|
+
sheetReadTimer = setTimeout(() => {
|
|
1197
|
+
sheetReadTimer = null;
|
|
1198
|
+
// A node out of the document has no style to read, and reading one
|
|
1199
|
+
// still costs a style pass: a shared animator (animatorFor) is never
|
|
1200
|
+
// detached, so its node can leave with this read waiting. Skipped, the
|
|
1201
|
+
// read waits for a promotion that needs it.
|
|
1202
|
+
if (target === element && promoted.size === 0 && element.isConnected) {
|
|
1203
|
+
readSheetWillChange(element);
|
|
1204
|
+
}
|
|
1205
|
+
}, 0);
|
|
1206
|
+
};
|
|
1207
|
+
const cancelSheetWillChangeRead = () => {
|
|
1208
|
+
if (sheetReadTimer != null) {
|
|
1209
|
+
clearTimeout(sheetReadTimer);
|
|
1210
|
+
sheetReadTimer = null;
|
|
1211
|
+
}
|
|
1212
|
+
};
|
|
1213
|
+
|
|
1214
|
+
/**
|
|
1215
|
+
* Gives the element (or its pseudo-element) a compositing layer for
|
|
928
1216
|
* `channel` from the task that starts the motion: Mobile Safari runs an
|
|
929
1217
|
* animation whose start time is set from script on its compositor at its
|
|
930
1218
|
* first commit only if the element already has a layer.
|
|
@@ -971,6 +1259,8 @@ export function createAnimator(element, options = {}) {
|
|
|
971
1259
|
promoted.clear();
|
|
972
1260
|
if (target != null) {
|
|
973
1261
|
writePromotion(target);
|
|
1262
|
+
// Its stylesheet may have changed its will-change since.
|
|
1263
|
+
readSheetWillChangeLater();
|
|
974
1264
|
}
|
|
975
1265
|
};
|
|
976
1266
|
|
|
@@ -982,7 +1272,7 @@ export function createAnimator(element, options = {}) {
|
|
|
982
1272
|
* pins its clock (`at`). Returns its start group, or null for an explicit
|
|
983
1273
|
* start.
|
|
984
1274
|
*/
|
|
985
|
-
const beginGroup = (time, properties, at) => {
|
|
1275
|
+
const beginGroup = (time, properties, at, start) => {
|
|
986
1276
|
if (target == null || typeof target.animate !== 'function') {
|
|
987
1277
|
return null;
|
|
988
1278
|
}
|
|
@@ -1009,7 +1299,11 @@ export function createAnimator(element, options = {}) {
|
|
|
1009
1299
|
}
|
|
1010
1300
|
return null;
|
|
1011
1301
|
}
|
|
1012
|
-
|
|
1302
|
+
// A call that continues motion starts now unless it asks for the
|
|
1303
|
+
// browser's start (`commit`). `presented` asks only for a call from rest:
|
|
1304
|
+
// an element still moving is not at rest, so a retarget starts now, from
|
|
1305
|
+
// the value and velocity on screen (spec:AST-094 FR6).
|
|
1306
|
+
for (const channel of start === 'commit' ? [] : channels) {
|
|
1013
1307
|
for (const property of CHANNELS[channel]) {
|
|
1014
1308
|
const segment = segments.get(property);
|
|
1015
1309
|
if (segment != null && time < segment.start + segment.duration && (segment.group == null || segment.group.resolved)) {
|
|
@@ -1023,6 +1317,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1023
1317
|
});
|
|
1024
1318
|
return {
|
|
1025
1319
|
provisional: time,
|
|
1320
|
+
fresh: false,
|
|
1026
1321
|
segments: [],
|
|
1027
1322
|
animations: [],
|
|
1028
1323
|
channels: new Set(),
|
|
@@ -1033,7 +1328,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1033
1328
|
};
|
|
1034
1329
|
|
|
1035
1330
|
/** Commits a call's changes, from rest when it has a start group. */
|
|
1036
|
-
const commitCall = (group, owner, changed, time) => {
|
|
1331
|
+
const commitCall = (group, owner, changed, time, presented = false) => {
|
|
1037
1332
|
if (group != null) {
|
|
1038
1333
|
for (const property of changed) {
|
|
1039
1334
|
const segment = segments.get(property);
|
|
@@ -1043,6 +1338,88 @@ export function createAnimator(element, options = {}) {
|
|
|
1043
1338
|
}
|
|
1044
1339
|
}
|
|
1045
1340
|
}
|
|
1341
|
+
if (presented && group != null && requestFrame != null) {
|
|
1342
|
+
// At rest until then: the animations, and the layer they promote, come
|
|
1343
|
+
// two frames later. Promoting now, a layer at rest for two frames, left
|
|
1344
|
+
// a stale paint of the element's rest in WebKit on iOS 26.2 (a title in
|
|
1345
|
+
// a scroller inside a clipped card) after the motion ended.
|
|
1346
|
+
// Each call waits its own two frames: one queued after another change
|
|
1347
|
+
// flushed the queue, or after an earlier call's first frame, still
|
|
1348
|
+
// waits its two.
|
|
1349
|
+
const call = {
|
|
1350
|
+
group,
|
|
1351
|
+
changed
|
|
1352
|
+
};
|
|
1353
|
+
deferredCalls.push(call);
|
|
1354
|
+
requestFrame(() => requestFrame(() => flushDeferredThrough(call)));
|
|
1355
|
+
return;
|
|
1356
|
+
}
|
|
1357
|
+
startCall(group, changed, time);
|
|
1358
|
+
};
|
|
1359
|
+
|
|
1360
|
+
/** Calls with `start: 'presented'` waiting for their second frame. */
|
|
1361
|
+
const deferredCalls = [];
|
|
1362
|
+
|
|
1363
|
+
/** Creates the animations of the given waiting calls, in call order. */
|
|
1364
|
+
const startDeferred = calls => {
|
|
1365
|
+
for (const {
|
|
1366
|
+
group,
|
|
1367
|
+
changed
|
|
1368
|
+
} of calls) {
|
|
1369
|
+
// Not a channel that holds the curve of a later call still waiting: a
|
|
1370
|
+
// later presented call that took a property over starts that channel
|
|
1371
|
+
// with its own two frames. Every other property starts here, whatever
|
|
1372
|
+
// its segment's group: a value Reduce Motion writes at once, or lands
|
|
1373
|
+
// under a dip, has no curve of this call's.
|
|
1374
|
+
const own = [];
|
|
1375
|
+
let handedTo = null;
|
|
1376
|
+
for (const property of changed) {
|
|
1377
|
+
const holder = CHANNELS[CHANNEL_OF[property]].map(other => segments.get(other)?.group).find(waiting => waiting != null && waiting !== group && deferredCalls.some(call => call.group === waiting));
|
|
1378
|
+
if (holder == null) {
|
|
1379
|
+
own.push(property);
|
|
1380
|
+
continue;
|
|
1381
|
+
}
|
|
1382
|
+
// A curve of this call's in that channel never ran: the element held
|
|
1383
|
+
// it at its start. It starts with the later call, which creates the
|
|
1384
|
+
// channel, dated from that call's start, so the model reads what the
|
|
1385
|
+
// screen shows.
|
|
1386
|
+
const segment = segments.get(property);
|
|
1387
|
+
if (segment != null && segment.group === group) {
|
|
1388
|
+
segment.start += holder.provisional - group.provisional;
|
|
1389
|
+
segment.group = holder;
|
|
1390
|
+
holder.segments.push(segment);
|
|
1391
|
+
group.segments.splice(group.segments.indexOf(segment), 1);
|
|
1392
|
+
handedTo = holder;
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
if (own.length === 0 && handedTo != null) {
|
|
1396
|
+
// Everything this call still plays starts with the later call.
|
|
1397
|
+
const adopter = handedTo;
|
|
1398
|
+
group.adoptedBy = adopter;
|
|
1399
|
+
void adopter.started.then(start => resolveGroup(group, start));
|
|
1400
|
+
continue;
|
|
1401
|
+
}
|
|
1402
|
+
// From the call's own time: the curve starts at the browser's commit.
|
|
1403
|
+
startCall(group, own, group.provisional);
|
|
1404
|
+
}
|
|
1405
|
+
};
|
|
1406
|
+
|
|
1407
|
+
/** Creates the animations of every waiting call, in call order. */
|
|
1408
|
+
const flushDeferred = () => {
|
|
1409
|
+
startDeferred(deferredCalls.splice(0));
|
|
1410
|
+
};
|
|
1411
|
+
|
|
1412
|
+
/**
|
|
1413
|
+
* A call's second frame: it starts, with every call queued before it (in
|
|
1414
|
+
* call order), unless another change created it already.
|
|
1415
|
+
*/
|
|
1416
|
+
const flushDeferredThrough = call => {
|
|
1417
|
+
const index = deferredCalls.indexOf(call);
|
|
1418
|
+
if (index >= 0) {
|
|
1419
|
+
startDeferred(deferredCalls.splice(0, index + 1));
|
|
1420
|
+
}
|
|
1421
|
+
};
|
|
1422
|
+
const startCall = (group, changed, time) => {
|
|
1046
1423
|
callGroup = group;
|
|
1047
1424
|
try {
|
|
1048
1425
|
commit(changed, time);
|
|
@@ -1057,6 +1434,15 @@ export function createAnimator(element, options = {}) {
|
|
|
1057
1434
|
return;
|
|
1058
1435
|
}
|
|
1059
1436
|
pendingGroups.add(group);
|
|
1437
|
+
group.fresh = true;
|
|
1438
|
+
// The task that creates the animations, not the call's: a presented
|
|
1439
|
+
// call's is its second frame's callback, wherever in its frame the call
|
|
1440
|
+
// was made.
|
|
1441
|
+
group.task = markTask(now(), now);
|
|
1442
|
+
group.madeInFrame = frameDepth > 0;
|
|
1443
|
+
queueMicrotask(() => {
|
|
1444
|
+
group.fresh = false;
|
|
1445
|
+
});
|
|
1060
1446
|
for (const animation of group.animations) {
|
|
1061
1447
|
// A cancel before the first frame rejects each one's ready promise.
|
|
1062
1448
|
animation.ready?.catch(() => {});
|
|
@@ -1070,7 +1456,26 @@ export function createAnimator(element, options = {}) {
|
|
|
1070
1456
|
// or when its compositor starts them (Chromium). Read it in that first
|
|
1071
1457
|
// frame, ahead of anything that might pause or seek the animations, and
|
|
1072
1458
|
// when `ready` settles.
|
|
1073
|
-
requestFrame?.(() =>
|
|
1459
|
+
requestFrame?.(() => {
|
|
1460
|
+
syncGroup(group);
|
|
1461
|
+
group.framed = true;
|
|
1462
|
+
// Chromium's compositor starts a composited animation when the frame
|
|
1463
|
+
// that commits it reaches it, and tells the page that start a frame or
|
|
1464
|
+
// more later (longer under load). Until then the call would read as
|
|
1465
|
+
// not started while the screen moves it, and a retarget or a rebase
|
|
1466
|
+
// would replay its curve from the start. A call made in a task, still
|
|
1467
|
+
// waiting in the first frame after it, starts now, which the compositor
|
|
1468
|
+
// then takes as its start: the time this frame runs, not its timestamp,
|
|
1469
|
+
// which after a block is the frame time from before the block. Only
|
|
1470
|
+
// when this frame is the one that commits it: not for a call made in a
|
|
1471
|
+
// frame callback, whose frame committed it already, nor when a block
|
|
1472
|
+
// ran between the call and this frame (more than LATE_START_MS), after
|
|
1473
|
+
// which this frame cannot tell a call made in a task from one a page's
|
|
1474
|
+
// own frame callback made; those keep the browser's start.
|
|
1475
|
+
if (!group.resolved && group.madeInFrame !== true && now() - (group.task?.first ?? group.provisional) <= LATE_START_MS && group.animations.some(animation => animation.startTime == null && animation.playState === 'running')) {
|
|
1476
|
+
resolveGroup(group, now());
|
|
1477
|
+
}
|
|
1478
|
+
});
|
|
1074
1479
|
ready.then(() => syncGroup(group), () => settleCancelled(group));
|
|
1075
1480
|
};
|
|
1076
1481
|
|
|
@@ -1118,7 +1523,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1118
1523
|
}
|
|
1119
1524
|
for (const animation of group.animations) {
|
|
1120
1525
|
if (animation.startTime != null) {
|
|
1121
|
-
resolveGroup(group, Number(animation.startTime));
|
|
1526
|
+
resolveGroup(group, startAfterBlock(group, Number(animation.startTime)));
|
|
1122
1527
|
return;
|
|
1123
1528
|
}
|
|
1124
1529
|
}
|
|
@@ -1139,10 +1544,16 @@ export function createAnimator(element, options = {}) {
|
|
|
1139
1544
|
}
|
|
1140
1545
|
};
|
|
1141
1546
|
|
|
1142
|
-
/**
|
|
1547
|
+
/**
|
|
1548
|
+
* Reads the start of every call whose first frame may have been committed:
|
|
1549
|
+
* not those created in the running task, whose start the browser cannot
|
|
1550
|
+
* have set (reading it there can cost a style update per call).
|
|
1551
|
+
*/
|
|
1143
1552
|
const syncPending = () => {
|
|
1144
1553
|
for (const group of pendingGroups) {
|
|
1145
|
-
|
|
1554
|
+
if (!group.fresh) {
|
|
1555
|
+
syncGroup(group);
|
|
1556
|
+
}
|
|
1146
1557
|
}
|
|
1147
1558
|
syncFinished();
|
|
1148
1559
|
};
|
|
@@ -1170,6 +1581,50 @@ export function createAnimator(element, options = {}) {
|
|
|
1170
1581
|
}
|
|
1171
1582
|
};
|
|
1172
1583
|
|
|
1584
|
+
/**
|
|
1585
|
+
* The start of a call from rest, on the frame that commits it. Chromium,
|
|
1586
|
+
* like Core Animation, starts a pending animation when it commits it, so a
|
|
1587
|
+
* main-thread block later in the call's task delays the motion; WebKit
|
|
1588
|
+
* dates it at its last frame time before that task, so the first frame
|
|
1589
|
+
* after the block would show it skipped into its curve. When the task ran
|
|
1590
|
+
* on more than LATE_START_MS past its first call, a start the browser put
|
|
1591
|
+
* by the task's first animations (a presented call's second frame, not the
|
|
1592
|
+
* call) and more than LATE_START_MS before the call's first read (its
|
|
1593
|
+
* `ready`, once the task has ended, or the first frame after it) moves to
|
|
1594
|
+
* that read, with every animation of the call, and every call of the task
|
|
1595
|
+
* moves to the same read. A shorter task, or a read other tasks delay,
|
|
1596
|
+
* keeps the browser's start.
|
|
1597
|
+
*/
|
|
1598
|
+
const startAfterBlock = (group, start) => {
|
|
1599
|
+
const timeline = typeof document === 'undefined' ? null : document.timeline?.currentTime;
|
|
1600
|
+
// A start well after the animations were created is the browser's
|
|
1601
|
+
// commit of them.
|
|
1602
|
+
if (timeline == null || group.framed === true || start > (group.task?.first ?? group.provisional) + LATE_START_MS) {
|
|
1603
|
+
return start;
|
|
1604
|
+
}
|
|
1605
|
+
const {
|
|
1606
|
+
task
|
|
1607
|
+
} = group;
|
|
1608
|
+
// A read in the task's first microtasks comes after its end too.
|
|
1609
|
+
const ended = task?.ended ?? now();
|
|
1610
|
+
if (task == null || ended - task.first <= LATE_START_MS) {
|
|
1611
|
+
return start;
|
|
1612
|
+
}
|
|
1613
|
+
// Read once the task has ended (its `ready`) or in the first frame after
|
|
1614
|
+
// it, both after the block; the task's other calls take the same read.
|
|
1615
|
+
const at = task.at ?? Math.max(now(), timeline);
|
|
1616
|
+
if (at - start <= LATE_START_MS) {
|
|
1617
|
+
return start;
|
|
1618
|
+
}
|
|
1619
|
+
task.at = at;
|
|
1620
|
+
for (const animation of group.animations) {
|
|
1621
|
+
if (animation.playState !== 'idle') {
|
|
1622
|
+
animation.startTime = at;
|
|
1623
|
+
}
|
|
1624
|
+
}
|
|
1625
|
+
return at;
|
|
1626
|
+
};
|
|
1627
|
+
|
|
1173
1628
|
/** Moves a call from rest onto the time the browser started it. */
|
|
1174
1629
|
const resolveGroup = (group, start) => {
|
|
1175
1630
|
if (group.resolved) {
|
|
@@ -1208,10 +1663,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1208
1663
|
}
|
|
1209
1664
|
clearTimeout(owner.timer);
|
|
1210
1665
|
const ends = group.segments.filter(segment => segment.owner === owner).map(segment => segment.start + segment.duration);
|
|
1211
|
-
owner.timer = setTimeout(() =>
|
|
1212
|
-
owner.timer = null;
|
|
1213
|
-
settle(owner, true);
|
|
1214
|
-
}, Math.max(0, Math.max(start, ...ends) - now()));
|
|
1666
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), Math.max(0, Math.max(start, ...ends) - now()));
|
|
1215
1667
|
}
|
|
1216
1668
|
}
|
|
1217
1669
|
group.resolve(start);
|
|
@@ -1241,26 +1693,70 @@ export function createAnimator(element, options = {}) {
|
|
|
1241
1693
|
}
|
|
1242
1694
|
owner.resolve(finished);
|
|
1243
1695
|
};
|
|
1244
|
-
|
|
1696
|
+
|
|
1697
|
+
/**
|
|
1698
|
+
* A handle whose curves have reached their end on the wall clock finishes,
|
|
1699
|
+
* unless a sampler holds one of its animations (paused, or sought back):
|
|
1700
|
+
* then it waits on that animation's own time, as retiring does
|
|
1701
|
+
* (scheduleRetire), so `finished` never resolves under motion still on
|
|
1702
|
+
* screen.
|
|
1703
|
+
*/
|
|
1704
|
+
const settleAtEnd = owner => {
|
|
1705
|
+
owner.timer = null;
|
|
1706
|
+
let wait = 0;
|
|
1707
|
+
for (const [channel, animation] of running) {
|
|
1708
|
+
if (!CHANNELS[channel].some(property => segments.get(property)?.owner === owner)) {
|
|
1709
|
+
continue;
|
|
1710
|
+
}
|
|
1711
|
+
const remaining = remainingCurve(animation);
|
|
1712
|
+
if (remaining != null && remaining > 0) {
|
|
1713
|
+
wait = Math.max(wait, animation.playState === 'paused' ? RETIRE_RECHECK_MS : Math.max(remaining, END_RECHECK_MS));
|
|
1714
|
+
}
|
|
1715
|
+
}
|
|
1716
|
+
if (wait > 0) {
|
|
1717
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), wait);
|
|
1718
|
+
return;
|
|
1719
|
+
}
|
|
1720
|
+
settle(owner, true);
|
|
1721
|
+
};
|
|
1722
|
+
const makeHandle = (owner, properties, finished, time, group = null, settlesWithLanding = false) => {
|
|
1245
1723
|
const ends = properties.map(p => {
|
|
1246
1724
|
const segment = segments.get(p);
|
|
1247
1725
|
return segment != null && segment.owner === owner ? segment.start + segment.duration : time;
|
|
1248
1726
|
});
|
|
1249
1727
|
const end = Math.max(time, ...ends);
|
|
1250
|
-
if (
|
|
1728
|
+
if (settlesWithLanding) {
|
|
1729
|
+
// The landing it joined settles it.
|
|
1730
|
+
} else if (properties.length === 0 || end <= time) {
|
|
1251
1731
|
settle(owner, true);
|
|
1252
1732
|
} else {
|
|
1253
1733
|
// Interruptions settle false as they happen (interrupt); reaching the
|
|
1254
1734
|
// end untouched is completion.
|
|
1255
|
-
owner.timer = setTimeout(() =>
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1735
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), Math.max(0, end - now()));
|
|
1736
|
+
}
|
|
1737
|
+
// The call's own curves, as it started them.
|
|
1738
|
+
const curves = new Map();
|
|
1739
|
+
for (const property of properties) {
|
|
1740
|
+
const segment = segments.get(property);
|
|
1741
|
+
if (segment != null && segment.owner === owner) {
|
|
1742
|
+
curves.set(property, segment);
|
|
1743
|
+
}
|
|
1259
1744
|
}
|
|
1260
1745
|
const handle = {
|
|
1261
1746
|
properties,
|
|
1262
1747
|
finished,
|
|
1263
1748
|
started: group?.started ?? Promise.resolve(time),
|
|
1749
|
+
curve: property => {
|
|
1750
|
+
const segment = curves.get(property === 'scale' ? 'scaleX' : property);
|
|
1751
|
+
if (segment == null) {
|
|
1752
|
+
return null;
|
|
1753
|
+
}
|
|
1754
|
+
return {
|
|
1755
|
+
duration: segment.duration / 1000,
|
|
1756
|
+
at: t => t * 1000 >= segment.duration ? segment.target : segment.at(Math.max(0, t * 1000)),
|
|
1757
|
+
velocity: t => t * 1000 >= segment.duration ? 0 : segment.speed(t * 1000)
|
|
1758
|
+
};
|
|
1759
|
+
},
|
|
1264
1760
|
value: (property, at = now()) => {
|
|
1265
1761
|
syncPending();
|
|
1266
1762
|
return valueAt(property, at);
|
|
@@ -1309,7 +1805,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1309
1805
|
if (from === to && velocity === 0) {
|
|
1310
1806
|
return null;
|
|
1311
1807
|
}
|
|
1312
|
-
|
|
1808
|
+
// The motion role it plays: its table value (DEC-15).
|
|
1809
|
+
const resolved = resolveMotion(target, spring);
|
|
1810
|
+
const curve = solveSpring(toSpring(resolved), {
|
|
1313
1811
|
from,
|
|
1314
1812
|
to,
|
|
1315
1813
|
velocity
|
|
@@ -1323,11 +1821,58 @@ export function createAnimator(element, options = {}) {
|
|
|
1323
1821
|
speed: t => curve.velocity(t / 1000),
|
|
1324
1822
|
jumps: [],
|
|
1325
1823
|
owner,
|
|
1326
|
-
spring
|
|
1824
|
+
spring: resolved
|
|
1825
|
+
};
|
|
1826
|
+
};
|
|
1827
|
+
|
|
1828
|
+
/** The retarget of `additive`: the old curve plus a spring of the difference. */
|
|
1829
|
+
const additiveSegment = (owner, property, start, to, spring, old) => {
|
|
1830
|
+
const oldEnd = old.start + old.duration;
|
|
1831
|
+
const resolved = resolveMotion(target, spring);
|
|
1832
|
+
const delta = solveSpring(toSpring(resolved), {
|
|
1833
|
+
from: 0,
|
|
1834
|
+
to: to - old.target,
|
|
1835
|
+
velocity: 0
|
|
1836
|
+
});
|
|
1837
|
+
const deltaMs = Math.min(MAX_DURATION_MS, delta.settleTime(SETTLE_THRESHOLD[property]) * 1000);
|
|
1838
|
+
const ownAt = t => t >= deltaMs ? to - old.target : delta.value(t / 1000);
|
|
1839
|
+
const oldAt = time => time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
|
|
1840
|
+
return {
|
|
1841
|
+
start,
|
|
1842
|
+
duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, deltaMs)),
|
|
1843
|
+
target: to,
|
|
1844
|
+
at: t => oldAt(start + t) + ownAt(t),
|
|
1845
|
+
speed: t => (start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) + (t >= deltaMs ? 0 : delta.velocity(t / 1000)),
|
|
1846
|
+
jumps: old.jumps.map(jump => old.start + jump - start).filter(jump => jump > 0),
|
|
1847
|
+
owner,
|
|
1848
|
+
spring: resolved
|
|
1849
|
+
};
|
|
1850
|
+
};
|
|
1851
|
+
|
|
1852
|
+
/**
|
|
1853
|
+
* `additive` for a played curve: the old curve plus the new curve's shape,
|
|
1854
|
+
* scaled to the difference between the two targets.
|
|
1855
|
+
*/
|
|
1856
|
+
const additiveCurveSegment = (owner, start, curve, old) => {
|
|
1857
|
+
const from = curve.at(0);
|
|
1858
|
+
const to = curve.at(curve.duration);
|
|
1859
|
+
const scale = (to - old.target) / (to - from);
|
|
1860
|
+
const ms = Math.min(MAX_DURATION_MS, curve.duration * 1000);
|
|
1861
|
+
const oldEnd = old.start + old.duration;
|
|
1862
|
+
const oldAt = time => time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
|
|
1863
|
+
return {
|
|
1864
|
+
start,
|
|
1865
|
+
duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, ms)),
|
|
1866
|
+
target: to,
|
|
1867
|
+
at: t => oldAt(start + t) + (t >= ms ? to - old.target : (curve.at(t / 1000) - from) * scale),
|
|
1868
|
+
speed: t => (start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) + (t >= ms ? 0 : curve.velocity(t / 1000) * scale),
|
|
1869
|
+
jumps: old.jumps.map(jump => old.start + jump - start).filter(jump => jump > 0),
|
|
1870
|
+
owner
|
|
1327
1871
|
};
|
|
1328
1872
|
};
|
|
1329
1873
|
const fadeSegment = (owner, start, stops, jumps = []) => {
|
|
1330
|
-
|
|
1874
|
+
registerReducedMotionCrossFade();
|
|
1875
|
+
const ease = cubicBezier(resolveMotion(target, reducedMotionCrossFade.curve));
|
|
1331
1876
|
const duration = stops[stops.length - 1].at;
|
|
1332
1877
|
const at = t => {
|
|
1333
1878
|
for (let i = 0; i + 1 < stops.length; i++) {
|
|
@@ -1447,6 +1992,27 @@ export function createAnimator(element, options = {}) {
|
|
|
1447
1992
|
};
|
|
1448
1993
|
};
|
|
1449
1994
|
|
|
1995
|
+
/**
|
|
1996
|
+
* A call joins the newest waiting dip: it takes the landing over and
|
|
1997
|
+
* settles when the dip ends, and the call it replaces lands with it. Each
|
|
1998
|
+
* value keeps the call whose move it is.
|
|
1999
|
+
*/
|
|
2000
|
+
const joinWaitingDip = owner => {
|
|
2001
|
+
const dip = [...landings].reverse().find(landing => landing.fadeIn != null);
|
|
2002
|
+
if (dip == null) {
|
|
2003
|
+
settle(owner, true);
|
|
2004
|
+
return;
|
|
2005
|
+
}
|
|
2006
|
+
for (const property of dip.values.keys()) {
|
|
2007
|
+
if (!dip.owners.has(property)) {
|
|
2008
|
+
dip.owners.set(property, dip.owner);
|
|
2009
|
+
}
|
|
2010
|
+
}
|
|
2011
|
+
dip.carried.push(dip.owner);
|
|
2012
|
+
carriedOwners.add(dip.owner);
|
|
2013
|
+
dip.owner = owner;
|
|
2014
|
+
};
|
|
2015
|
+
|
|
1450
2016
|
/** Where opacity is heading: past a waiting landing's fade back in. */
|
|
1451
2017
|
const opacityHeading = () => {
|
|
1452
2018
|
let to = finalValue('opacity');
|
|
@@ -1500,8 +2066,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1500
2066
|
* never an animation (DR2: opacity only), so it is never shown in the wrong
|
|
1501
2067
|
* place. In a dip the fade back in starts from here and takes what is left
|
|
1502
2068
|
* of the cross-fade, so the dip ends when it was due even when a busy main
|
|
1503
|
-
* thread runs this timer late; past the whole fade back in (
|
|
1504
|
-
*
|
|
2069
|
+
* thread runs this timer late; past the whole fade back in (100 ms late or
|
|
2070
|
+
* more) the element appears at once where it landed, with no animation,
|
|
2071
|
+
* and the call settles then.
|
|
1505
2072
|
*/
|
|
1506
2073
|
const land = landing => {
|
|
1507
2074
|
landings.delete(landing);
|
|
@@ -1514,13 +2081,16 @@ export function createAnimator(element, options = {}) {
|
|
|
1514
2081
|
changed.push(property);
|
|
1515
2082
|
}
|
|
1516
2083
|
let end = time;
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
2084
|
+
// The fade back in takes what is left of the cross-fade: a timer that a
|
|
2085
|
+
// busy main thread runs late shortens it, so the dip still ends when it
|
|
2086
|
+
// was due (design:reduced-motion DR2, 200 ms or less), and the element is
|
|
2087
|
+
// never shown before it lands. Past the whole fade back in nothing is
|
|
2088
|
+
// left: the element appears at once, a plain write with no fade for the
|
|
2089
|
+
// browser to start a frame later, so the call settles showing it.
|
|
2090
|
+
const late = landing.due == null ? 0 : Math.max(0, time - landing.due);
|
|
2091
|
+
const appears = landing.fadeIn != null && late >= landing.fadeIn.ms;
|
|
2092
|
+
if (landing.fadeIn != null && !appears) {
|
|
2093
|
+
const ms = landing.fadeIn.ms - late;
|
|
1524
2094
|
segments.set('opacity', fadeSegment(landing.owner, time, [{
|
|
1525
2095
|
at: 0,
|
|
1526
2096
|
value: valueAt('opacity', time)
|
|
@@ -1530,17 +2100,20 @@ export function createAnimator(element, options = {}) {
|
|
|
1530
2100
|
}]));
|
|
1531
2101
|
changed.push('opacity');
|
|
1532
2102
|
end = time + ms;
|
|
2103
|
+
} else if (landing.fadeIn != null) {
|
|
2104
|
+
segments.delete('opacity');
|
|
2105
|
+
resting.opacity = landing.fadeIn.isBorrowed === true ? IDENTITY.opacity : landing.fadeIn.to;
|
|
2106
|
+
changed.push('opacity');
|
|
1533
2107
|
} else if (landing.restore != null) {
|
|
1534
2108
|
segments.delete('opacity');
|
|
1535
2109
|
resting.opacity = landing.restoreIsBorrowed === true ? IDENTITY.opacity : landing.restore;
|
|
1536
2110
|
changed.push('opacity');
|
|
1537
2111
|
}
|
|
1538
2112
|
commit(changed, time);
|
|
1539
|
-
if (landing.restoreIsBorrowed === true) {
|
|
2113
|
+
if (landing.restoreIsBorrowed === true || appears && landing.fadeIn?.isBorrowed === true) {
|
|
1540
2114
|
// The stylesheet owns its opacity again.
|
|
1541
2115
|
releaseOwnOpacity();
|
|
1542
|
-
}
|
|
1543
|
-
if (landing.fadeIn?.isBorrowed === true) {
|
|
2116
|
+
} else if (landing.fadeIn?.isBorrowed === true) {
|
|
1544
2117
|
// The fade back in returns to the stylesheet's opacity: it owns it
|
|
1545
2118
|
// again once the fade ends (releaseIdentity).
|
|
1546
2119
|
borrowedOpacity = landing.fadeIn.to;
|
|
@@ -1561,10 +2134,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1561
2134
|
if (end <= time) {
|
|
1562
2135
|
settle(owner, true);
|
|
1563
2136
|
} else {
|
|
1564
|
-
owner.timer = setTimeout(() =>
|
|
1565
|
-
owner.timer = null;
|
|
1566
|
-
settle(owner, true);
|
|
1567
|
-
}, Math.max(0, end - now()));
|
|
2137
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), Math.max(0, end - now()));
|
|
1568
2138
|
}
|
|
1569
2139
|
};
|
|
1570
2140
|
|
|
@@ -1645,6 +2215,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1645
2215
|
},
|
|
1646
2216
|
get hasPendingLanding() {
|
|
1647
2217
|
return landings.size > 0;
|
|
2218
|
+
},
|
|
2219
|
+
get hasWaitingDip() {
|
|
2220
|
+
return [...landings].some(landing => landing.fadeIn != null);
|
|
1648
2221
|
}
|
|
1649
2222
|
};
|
|
1650
2223
|
|
|
@@ -1677,7 +2250,8 @@ export function createAnimator(element, options = {}) {
|
|
|
1677
2250
|
next,
|
|
1678
2251
|
holds: plan.holds,
|
|
1679
2252
|
landing: plan.landing,
|
|
1680
|
-
borrowed: plan.borrowed
|
|
2253
|
+
borrowed: plan.borrowed,
|
|
2254
|
+
joins: plan.joins
|
|
1681
2255
|
};
|
|
1682
2256
|
};
|
|
1683
2257
|
const animator = {
|
|
@@ -1694,6 +2268,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1694
2268
|
if (next === target) {
|
|
1695
2269
|
return;
|
|
1696
2270
|
}
|
|
2271
|
+
flushDeferred();
|
|
1697
2272
|
if (next == null) {
|
|
1698
2273
|
// Unmount, unless a node replaces this one in the same task (React's
|
|
1699
2274
|
// replacement order: attach(null), then the new node): nothing is
|
|
@@ -1729,6 +2304,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1729
2304
|
}
|
|
1730
2305
|
retireTimers.clear();
|
|
1731
2306
|
demote();
|
|
2307
|
+
// demote() asks for a fresh will-change read of the node it
|
|
2308
|
+
// demotes; a detached node gets none.
|
|
2309
|
+
cancelSheetWillChangeRead();
|
|
1732
2310
|
});
|
|
1733
2311
|
lastDetached = null;
|
|
1734
2312
|
const time = now();
|
|
@@ -1747,7 +2325,11 @@ export function createAnimator(element, options = {}) {
|
|
|
1747
2325
|
}
|
|
1748
2326
|
// After the landing's commit, which can promote the element again.
|
|
1749
2327
|
demote();
|
|
2328
|
+
// A pseudo-element holds an identity with a static animation, which the
|
|
2329
|
+
// cancel below drops: note the channels to hold again on the next node
|
|
2330
|
+
// (never a borrowed opacity, which is the stylesheet's).
|
|
1750
2331
|
const isOpacityBorrowed = borrowedOpacity != null || [...landings].some(landing => landing.restoreIsBorrowed === true);
|
|
2332
|
+
const pseudoHeld = pseudoElement == null || target == null ? null : new Set(Object.keys(CHANNELS).filter(channel => running.has(channel) && !(channel === 'opacity' && isOpacityBorrowed) && CHANNELS[channel].every(p => !segments.has(p) && resting[p] === IDENTITY[p])));
|
|
1751
2333
|
for (const animation of running.values()) {
|
|
1752
2334
|
animation.cancel();
|
|
1753
2335
|
}
|
|
@@ -1767,10 +2349,13 @@ export function createAnimator(element, options = {}) {
|
|
|
1767
2349
|
// differs, kept through a detach for the node that comes next.
|
|
1768
2350
|
if (target != null) {
|
|
1769
2351
|
const outgoing = target;
|
|
1770
|
-
heldIdentity = new Set(Object.keys(CHANNELS).filter(channel => outgoing.style.getPropertyValue(channel) === IDENTITY_TEXT[channel]));
|
|
2352
|
+
heldIdentity = pseudoHeld ?? new Set(Object.keys(CHANNELS).filter(channel => outgoing.style.getPropertyValue(channel) === IDENTITY_TEXT[channel]));
|
|
1771
2353
|
}
|
|
1772
2354
|
const held = heldIdentity;
|
|
1773
2355
|
target = next;
|
|
2356
|
+
// A new node: its own will-change is read again.
|
|
2357
|
+
cancelSheetWillChangeRead();
|
|
2358
|
+
sheetWillChangeRead = false;
|
|
1774
2359
|
if (target == null) {
|
|
1775
2360
|
return;
|
|
1776
2361
|
}
|
|
@@ -1792,11 +2377,17 @@ export function createAnimator(element, options = {}) {
|
|
|
1792
2377
|
} else if (held.has(channel)) {
|
|
1793
2378
|
// An identity the animator held inline over a stylesheet that
|
|
1794
2379
|
// differs goes onto the new node too (writeInline keeps it only
|
|
1795
|
-
// where the new node's stylesheet still differs)
|
|
1796
|
-
|
|
2380
|
+
// where the new node's stylesheet still differs); a pseudo-element's
|
|
2381
|
+
// is held again.
|
|
2382
|
+
if (pseudoElement != null) {
|
|
2383
|
+
hold(channel, time);
|
|
2384
|
+
} else {
|
|
2385
|
+
writeInline(channel, property => resting[property]);
|
|
2386
|
+
}
|
|
1797
2387
|
}
|
|
1798
2388
|
}
|
|
1799
2389
|
flushReleases();
|
|
2390
|
+
readSheetWillChangeLater();
|
|
1800
2391
|
},
|
|
1801
2392
|
get(property, time = now()) {
|
|
1802
2393
|
syncPending();
|
|
@@ -1806,8 +2397,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1806
2397
|
syncPending();
|
|
1807
2398
|
return velocityAt(property === 'scale' ? 'scaleX' : property, time);
|
|
1808
2399
|
},
|
|
1809
|
-
set(values) {
|
|
2400
|
+
set(values, setOptions = {}) {
|
|
1810
2401
|
syncPending();
|
|
2402
|
+
flushDeferred();
|
|
1811
2403
|
const time = now();
|
|
1812
2404
|
const next = expand(values);
|
|
1813
2405
|
for (const [property, value] of Object.entries(next)) {
|
|
@@ -1816,13 +2408,18 @@ export function createAnimator(element, options = {}) {
|
|
|
1816
2408
|
resting[property] = value;
|
|
1817
2409
|
}
|
|
1818
2410
|
// Direct manipulation: the layer makes each write a composite only.
|
|
1819
|
-
|
|
1820
|
-
|
|
2411
|
+
if (setOptions.promote !== false) {
|
|
2412
|
+
for (const property of Object.keys(next)) {
|
|
2413
|
+
promote(CHANNEL_OF[property]);
|
|
2414
|
+
}
|
|
1821
2415
|
}
|
|
1822
2416
|
commit(Object.keys(next), time);
|
|
1823
2417
|
},
|
|
1824
2418
|
animate(to, transition, animateOptions = {}) {
|
|
1825
2419
|
syncPending();
|
|
2420
|
+
if (animateOptions.start !== 'presented') {
|
|
2421
|
+
flushDeferred();
|
|
2422
|
+
}
|
|
1826
2423
|
const time = animateOptions.at ?? now();
|
|
1827
2424
|
const targets = expand(to);
|
|
1828
2425
|
const velocities = expand(transition.velocity ?? {});
|
|
@@ -1839,11 +2436,16 @@ export function createAnimator(element, options = {}) {
|
|
|
1839
2436
|
Object.assign(next, plan.next);
|
|
1840
2437
|
} else {
|
|
1841
2438
|
for (const property of properties) {
|
|
2439
|
+
const running = animateOptions.additive === true && velocities[property] == null ? segmentAt(property, time) : null;
|
|
2440
|
+
if (running != null && !isHeld(running)) {
|
|
2441
|
+
next[property] = additiveSegment(owner, property, time, targets[property], transition.spring, running);
|
|
2442
|
+
continue;
|
|
2443
|
+
}
|
|
1842
2444
|
const velocity = velocities[property] ?? velocityAt(property, time);
|
|
1843
2445
|
next[property] = springSegment(owner, property, time, targets[property], transition.spring, velocity);
|
|
1844
2446
|
}
|
|
1845
2447
|
}
|
|
1846
|
-
const group = beginGroup(time, Object.keys(next), animateOptions.at);
|
|
2448
|
+
const group = beginGroup(time, Object.keys(next), animateOptions.at, animateOptions.start);
|
|
1847
2449
|
const adopted = plan?.landing != null ? adoptLandings(plan.landing, Object.keys(next)) : null;
|
|
1848
2450
|
const changed = [];
|
|
1849
2451
|
for (const [property, segment] of Object.entries(next)) {
|
|
@@ -1858,12 +2460,15 @@ export function createAnimator(element, options = {}) {
|
|
|
1858
2460
|
segments.set(property, segment);
|
|
1859
2461
|
}
|
|
1860
2462
|
}
|
|
1861
|
-
commitCall(group, owner, changed, time);
|
|
2463
|
+
commitCall(group, owner, changed, time, animateOptions.start === 'presented' && animateOptions.at == null);
|
|
1862
2464
|
if (plan?.borrowed != null) {
|
|
1863
2465
|
// The dip's own commit cleared it; the borrow lasts the dip.
|
|
1864
2466
|
borrowedOpacity = plan.borrowed;
|
|
1865
2467
|
}
|
|
1866
|
-
|
|
2468
|
+
if (plan?.joins === true) {
|
|
2469
|
+
joinWaitingDip(owner);
|
|
2470
|
+
}
|
|
2471
|
+
const handle = plan?.joins === true ? makeHandle(owner, ['opacity'], finished, time, group, true) : makeHandle(owner, changed, finished, time, group);
|
|
1867
2472
|
if (plan?.landing != null) {
|
|
1868
2473
|
scheduleLanding(owner, handle.started, plan.landing, adopted);
|
|
1869
2474
|
}
|
|
@@ -1871,6 +2476,9 @@ export function createAnimator(element, options = {}) {
|
|
|
1871
2476
|
},
|
|
1872
2477
|
play(curves, playOptions = {}) {
|
|
1873
2478
|
syncPending();
|
|
2479
|
+
if (playOptions.start !== 'presented') {
|
|
2480
|
+
flushDeferred();
|
|
2481
|
+
}
|
|
1874
2482
|
const time = playOptions.at ?? now();
|
|
1875
2483
|
const {
|
|
1876
2484
|
owner,
|
|
@@ -1905,6 +2513,11 @@ export function createAnimator(element, options = {}) {
|
|
|
1905
2513
|
continue;
|
|
1906
2514
|
}
|
|
1907
2515
|
const curve = byProperty[property];
|
|
2516
|
+
const running = playOptions.additive === true ? segmentAt(property, time) : null;
|
|
2517
|
+
if (running != null && !isHeld(running) && curve.duration > 0 && Math.abs(curve.at(curve.duration) - curve.at(0)) > 1e-9) {
|
|
2518
|
+
next[property] = additiveCurveSegment(owner, time, curve, running);
|
|
2519
|
+
continue;
|
|
2520
|
+
}
|
|
1908
2521
|
next[property] = curve.duration === 0 ? null : {
|
|
1909
2522
|
start: time,
|
|
1910
2523
|
duration: Math.min(MAX_DURATION_MS, curve.duration * 1000),
|
|
@@ -1915,7 +2528,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1915
2528
|
owner
|
|
1916
2529
|
};
|
|
1917
2530
|
}
|
|
1918
|
-
const group = beginGroup(time, Object.keys(next), playOptions.at);
|
|
2531
|
+
const group = beginGroup(time, Object.keys(next), playOptions.at, playOptions.start);
|
|
1919
2532
|
const adopted = plan?.landing != null ? adoptLandings(plan.landing, Object.keys(next)) : null;
|
|
1920
2533
|
const changed = [];
|
|
1921
2534
|
for (const [property, segment] of Object.entries(next)) {
|
|
@@ -1930,12 +2543,15 @@ export function createAnimator(element, options = {}) {
|
|
|
1930
2543
|
segments.set(property, segment);
|
|
1931
2544
|
}
|
|
1932
2545
|
}
|
|
1933
|
-
commitCall(group, owner, changed, time);
|
|
2546
|
+
commitCall(group, owner, changed, time, playOptions.start === 'presented' && playOptions.at == null);
|
|
1934
2547
|
if (plan?.borrowed != null) {
|
|
1935
2548
|
// The dip's own commit cleared it; the borrow lasts the dip.
|
|
1936
2549
|
borrowedOpacity = plan.borrowed;
|
|
1937
2550
|
}
|
|
1938
|
-
|
|
2551
|
+
if (plan?.joins === true) {
|
|
2552
|
+
joinWaitingDip(owner);
|
|
2553
|
+
}
|
|
2554
|
+
const handle = plan?.joins === true ? makeHandle(owner, ['opacity'], finished, time, group, true) : makeHandle(owner, changed, finished, time, group);
|
|
1939
2555
|
if (plan?.landing != null) {
|
|
1940
2556
|
scheduleLanding(owner, handle.started, plan.landing, adopted);
|
|
1941
2557
|
}
|
|
@@ -1943,6 +2559,7 @@ export function createAnimator(element, options = {}) {
|
|
|
1943
2559
|
},
|
|
1944
2560
|
decay(curves, decayOptions = {}) {
|
|
1945
2561
|
syncPending();
|
|
2562
|
+
flushDeferred();
|
|
1946
2563
|
const time = decayOptions.at ?? now();
|
|
1947
2564
|
// Under Reduce Motion only momentum keeps moving (DR2, DEC-2): a curve
|
|
1948
2565
|
// that is a transition plays as `animate` does, a cross-fade or at once.
|
|
@@ -2009,6 +2626,7 @@ export function createAnimator(element, options = {}) {
|
|
|
2009
2626
|
},
|
|
2010
2627
|
stop(properties) {
|
|
2011
2628
|
syncPending();
|
|
2629
|
+
flushDeferred();
|
|
2012
2630
|
const time = now();
|
|
2013
2631
|
const list = properties == null ? PROPERTIES : expandList(properties);
|
|
2014
2632
|
const changed = [];
|
|
@@ -2037,6 +2655,7 @@ export function createAnimator(element, options = {}) {
|
|
|
2037
2655
|
},
|
|
2038
2656
|
rebase(deltas, rebaseOptions = {}) {
|
|
2039
2657
|
syncPending();
|
|
2658
|
+
flushDeferred();
|
|
2040
2659
|
const time = rebaseOptions.at ?? now();
|
|
2041
2660
|
const changed = [];
|
|
2042
2661
|
const owners = new Set();
|
|
@@ -2108,10 +2727,7 @@ export function createAnimator(element, options = {}) {
|
|
|
2108
2727
|
end = Math.max(end, segment.start + segment.duration);
|
|
2109
2728
|
}
|
|
2110
2729
|
}
|
|
2111
|
-
owner.timer = setTimeout(() =>
|
|
2112
|
-
owner.timer = null;
|
|
2113
|
-
settle(owner, true);
|
|
2114
|
-
}, Math.max(0, end - now()));
|
|
2730
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), Math.max(0, end - now()));
|
|
2115
2731
|
}
|
|
2116
2732
|
},
|
|
2117
2733
|
async atRest(properties) {
|
|
@@ -2155,6 +2771,7 @@ export function createAnimator(element, options = {}) {
|
|
|
2155
2771
|
});
|
|
2156
2772
|
},
|
|
2157
2773
|
dispose() {
|
|
2774
|
+
flushDeferred();
|
|
2158
2775
|
// A Reduce Motion move still waiting to land is written at its end
|
|
2159
2776
|
// state, so the element is left visible where it was going (the node
|
|
2160
2777
|
// just detached, when an unmount is pending); its call and the calls
|
|
@@ -2183,6 +2800,7 @@ export function createAnimator(element, options = {}) {
|
|
|
2183
2800
|
retireTimers.clear();
|
|
2184
2801
|
handBackBorrow();
|
|
2185
2802
|
demote();
|
|
2803
|
+
cancelSheetWillChangeRead();
|
|
2186
2804
|
target = null;
|
|
2187
2805
|
}
|
|
2188
2806
|
};
|