@astryxdesign/core 0.7.5 → 0.7.6-canary.00146a7
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 +177 -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/BottomSheetSwitcher.d.ts +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +1 -1
- package/dist/BottomSheet/useMobileKeyboard.d.ts.map +1 -1
- package/dist/BottomSheet/useMobileKeyboard.js +44 -8
- 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/Center/Center.d.ts +1 -1
- package/dist/Center/Center.js +1 -1
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +10 -5
- package/dist/Chat/ChatComposerDrawer.d.ts +1 -1
- package/dist/Chat/ChatComposerDrawer.js +1 -1
- package/dist/Chat/ChatComposerInput.d.ts +1 -1
- package/dist/Chat/ChatComposerInput.js +1 -1
- 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/Code/Code.d.ts +1 -1
- package/dist/Code/Code.js +1 -1
- 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/ContextMenu/ContextMenu.d.ts +6 -0
- package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
- package/dist/ContextMenu/ContextMenu.js +31 -7
- 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 +2 -1
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +8 -3
- package/dist/DropdownMenu/DropdownMenu.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +56 -30
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +3 -2
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +4 -3
- package/dist/DropdownMenu/DropdownMenuGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuGroup.js +2 -1
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +4 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +4 -3
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +4 -3
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +10 -6
- 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 +10 -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 +9 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +126 -69
- 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/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +4 -2
- 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/resizableModel.d.ts +64 -0
- package/dist/Resizable/resizableModel.d.ts.map +1 -0
- package/dist/Resizable/resizableModel.js +287 -0
- package/dist/Resizable/useResizable.d.ts +2 -2
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +74 -288
- 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 +3 -3
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +14 -8
- 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/SideNav/railMotion.d.ts +5 -5
- package/dist/SideNav/railMotion.d.ts.map +1 -1
- package/dist/SideNav/railMotion.js +69 -177
- 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 +7 -6
- 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/Timer/Timer.js +1 -1
- 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 +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.d.ts.map +1 -1
- package/dist/Tokenizer/TokenizerBottomSheet.js +12 -18
- 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 +27 -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 +27 -0
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +35 -4
- 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/hooks/useTreeFocus.d.ts.map +1 -1
- package/dist/hooks/useTreeFocus.js +13 -5
- package/dist/hooks/useTypeahead.d.ts +3 -1
- package/dist/hooks/useTypeahead.d.ts.map +1 -1
- package/dist/hooks/useTypeahead.js +21 -15
- 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 +14 -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 +14 -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/animatedLayout.d.ts +130 -5
- package/dist/motion/animatedLayout.d.ts.map +1 -1
- package/dist/motion/animatedLayout.js +771 -44
- 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/typeaheadMatch.d.ts +24 -0
- package/dist/utils/typeaheadMatch.d.ts.map +1 -0
- package/dist/utils/typeaheadMatch.js +112 -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 +60 -24
- 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 +41 -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.tsx +216 -5
- package/src/AppShell/observeMainOverflow.ts +143 -0
- 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/BottomSheetSwitcher.tsx +1 -1
- package/src/BottomSheet/useMobileKeyboard.ts +51 -10
- package/src/BottomSheet/useSheetGestures.ts +129 -21
- package/src/Breadcrumbs/BreadcrumbItem.tsx +2 -1
- package/src/Button/Button.tsx +4 -4
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Center/Center.tsx +1 -1
- package/src/Chat/ChatComposer.tsx +7 -10
- package/src/Chat/ChatComposerDrawer.tsx +1 -1
- package/src/Chat/ChatComposerInput.tsx +1 -1
- package/src/Chat/ChatLayout.tsx +1 -6
- package/src/Chat/ChatMessageList.tsx +1 -0
- package/src/Chat/ChatPastedTextToken.tsx +14 -4
- 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/ClickableCard/ClickableCard.tsx +48 -4
- package/src/Code/Code.tsx +1 -1
- package/src/CommandPalette/CommandPaletteInput.tsx +5 -8
- package/src/ComplexSelector/ComplexSelector.tsx +63 -8
- package/src/ContextMenu/ContextMenu.tsx +30 -6
- 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.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.tsx +14 -3
- package/src/DropdownMenu/DropdownMenu.doc.mjs +2 -2
- package/src/DropdownMenu/DropdownMenu.tsx +67 -30
- package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +2 -2
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +15 -5
- package/src/DropdownMenu/DropdownMenuGroup.tsx +2 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +7 -1
- package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +2 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +16 -6
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +11 -4
- 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.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.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.doc.mjs +3 -3
- package/src/FileInput/FileInput.tsx +107 -37
- package/src/Heading/Heading.tsx +1 -1
- package/src/HoverCard/HoverCard.doc.mjs +3 -3
- package/src/HoverCard/useHoverCard.doc.mjs +1 -1
- package/src/Icon/Icon.tsx +1 -1
- package/src/Indicator/CheckIndicator.tsx +2 -1
- package/src/Indicator/CheckboxIndicator.tsx +3 -1
- package/src/Indicator/RadioIndicator.tsx +3 -1
- package/src/Item/Item.tsx +21 -13
- package/src/Item/ItemSwipeLayer.tsx +9 -2
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.tsx +168 -81
- package/src/Layer/useTouchTrigger.ts +107 -18
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Link/Link.tsx +20 -2
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.tsx +3 -3
- package/src/Markdown/Markdown.tsx +1 -0
- package/src/MetadataList/MetadataList.tsx +4 -2
- package/src/MetadataList/MetadataListItem.tsx +2 -1
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MultiSelector/MultiSelector.tsx +82 -46
- package/src/MultiSelector/hooks.ts +7 -5
- package/src/NavMenu/NavHeadingMenuItem.tsx +5 -39
- package/src/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.tsx +39 -6
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/Outline/Outline.tsx +23 -0
- package/src/OverflowList/OverflowList.tsx +2 -1
- 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.tsx +58 -10
- package/src/RadioList/RadioList.tsx +13 -2
- package/src/RadioList/RadioListItem.tsx +20 -3
- package/src/RadioList/RadioListReasonContext.ts +25 -0
- package/src/Resizable/resizableModel.ts +364 -0
- package/src/Resizable/useResizable.ts +88 -353
- package/src/SegmentedControl/SegmentedControl.tsx +43 -8
- package/src/SegmentedControl/SegmentedControlContext.ts +6 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +23 -6
- package/src/Selector/Selector.tsx +23 -9
- package/src/Selector/hooks.ts +2 -2
- package/src/Selector/useSelectorPresentation.ts +39 -4
- package/src/SideNav/SideNavItem.tsx +27 -10
- package/src/SideNav/railMotion.ts +73 -179
- package/src/Skeleton/Skeleton.tsx +3 -1
- 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/Stepper/Step.tsx +33 -6
- package/src/Stepper/Stepper.doc.mjs +1 -1
- package/src/Switch/Switch.tsx +11 -3
- package/src/TabList/TabList.tsx +16 -1
- package/src/Table/BaseTable.tsx +10 -6
- 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.tsx +18 -3
- package/src/TextInput/TextInput.tsx +5 -3
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.tsx +38 -20
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timer/Timer.tsx +1 -1
- package/src/Timestamp/Timestamp.tsx +6 -2
- package/src/Timestamp/TimestampHoverCard.tsx +4 -4
- 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.tsx +75 -5
- package/src/Token/TokenLink.tsx +21 -7
- package/src/Tokenizer/Tokenizer.doc.mjs +12 -8
- package/src/Tokenizer/Tokenizer.tsx +119 -65
- package/src/Tokenizer/TokenizerBottomSheet.tsx +12 -18
- package/src/Tokenizer/TokenizerClearAllMessageContext.ts +21 -0
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Tooltip/Tooltip.doc.mjs +3 -3
- 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.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 +54 -3
- 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/hooks/useTreeFocus.doc.mjs +2 -2
- package/src/hooks/useTreeFocus.ts +16 -10
- package/src/hooks/useTypeahead.doc.mjs +2 -2
- package/src/hooks/useTypeahead.ts +21 -20
- 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 +17 -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 +17 -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/animatedLayout.ts +977 -45
- 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/typeaheadMatch.ts +141 -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.spec.md +0 -259
- 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.spec.md +0 -334
- package/src/AppShell/AppShell.test.tsx +0 -1148
- package/src/AspectRatio/AspectRatio.spec.md +0 -179
- package/src/AspectRatio/AspectRatio.test.tsx +0 -398
- package/src/AspectRatio/__tests__/AspectRatioFitLayers.a11y.browser.spec.ts +0 -158
- package/src/Avatar/Avatar.spec.md +0 -253
- package/src/Avatar/Avatar.test.tsx +0 -867
- package/src/Avatar/AvatarStatusDot.spec.md +0 -208
- package/src/Avatar/AvatarStatusDot.test.tsx +0 -306
- package/src/AvatarGroup/AvatarGroup.spec.md +0 -205
- package/src/AvatarGroup/AvatarGroup.test.tsx +0 -313
- package/src/AvatarGroup/AvatarGroupOverflow.spec.md +0 -210
- package/src/AvatarGroup/AvatarGroupOverflow.test.tsx +0 -263
- package/src/Badge/Badge.spec.md +0 -207
- package/src/Badge/Badge.test.tsx +0 -125
- package/src/Banner/Banner.spec.md +0 -282
- package/src/Banner/Banner.test.tsx +0 -879
- package/src/Blockquote/Blockquote.spec.md +0 -171
- package/src/Blockquote/Blockquote.test.tsx +0 -121
- package/src/BottomSheet/BottomSheet.spec.md +0 -457
- 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.spec.md +0 -367
- 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/BreadcrumbItem.spec.md +0 -269
- package/src/Breadcrumbs/Breadcrumbs.spec.md +0 -165
- 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.spec.md +0 -322
- 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.spec.md +0 -220
- package/src/ButtonGroup/ButtonGroup.test.tsx +0 -1025
- package/src/Calendar/Calendar.spec.md +0 -209
- 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.spec.md +0 -205
- package/src/Card/Card.test.tsx +0 -202
- package/src/Carousel/Carousel.spec.md +0 -146
- 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.spec.md +0 -205
- package/src/Center/Center.test.tsx +0 -406
- package/src/Chat/ChatComposer.spec.md +0 -230
- package/src/Chat/ChatComposer.test.tsx +0 -364
- package/src/Chat/ChatComposerDrawer.spec.md +0 -267
- package/src/Chat/ChatComposerDrawer.test.tsx +0 -130
- package/src/Chat/ChatComposerInput.spec.md +0 -224
- package/src/Chat/ChatComposerInput.test.tsx +0 -2136
- package/src/Chat/ChatComposerTokenElement.spec.md +0 -152
- package/src/Chat/ChatComposerTokenElement.test.tsx +0 -85
- package/src/Chat/ChatDictationButton.spec.md +0 -160
- package/src/Chat/ChatDictationButton.test.tsx +0 -108
- package/src/Chat/ChatLayout.spec.md +0 -271
- package/src/Chat/ChatLayout.test.tsx +0 -311
- package/src/Chat/ChatLayoutScrollButton.spec.md +0 -338
- package/src/Chat/ChatLayoutScrollButton.test.tsx +0 -99
- package/src/Chat/ChatMessage.spec.md +0 -265
- package/src/Chat/ChatMessage.test.tsx +0 -344
- package/src/Chat/ChatMessageBubble.spec.md +0 -263
- package/src/Chat/ChatMessageBubble.test.tsx +0 -294
- package/src/Chat/ChatMessageList.spec.md +0 -222
- package/src/Chat/ChatMessageList.test.tsx +0 -198
- package/src/Chat/ChatMessageMetadata.spec.md +0 -220
- package/src/Chat/ChatMessageMetadata.test.tsx +0 -66
- package/src/Chat/ChatPastedTextToken.test.tsx +0 -71
- package/src/Chat/ChatSendButton.spec.md +0 -227
- package/src/Chat/ChatSendButton.test.tsx +0 -309
- package/src/Chat/ChatSystemMessage.spec.md +0 -224
- package/src/Chat/ChatSystemMessage.test.tsx +0 -189
- package/src/Chat/ChatTokenizedText.spec.md +0 -190
- package/src/Chat/ChatTokenizedText.test.tsx +0 -163
- package/src/Chat/ChatToolCalls.spec.md +0 -194
- 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.spec.md +0 -218
- 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.spec.md +0 -332
- package/src/CheckboxList/CheckboxList.test.tsx +0 -1159
- package/src/CheckboxList/CheckboxListItem.spec.md +0 -302
- package/src/CheckboxList/__tests__/CheckboxList.a11y.chromium.spec.ts +0 -1998
- package/src/Citation/Citation.spec.md +0 -179
- package/src/Citation/Citation.test.tsx +0 -361
- package/src/ClickableCard/ClickableCard.spec.md +0 -241
- package/src/ClickableCard/ClickableCard.test.tsx +0 -286
- package/src/Code/Code.spec.md +0 -170
- package/src/Code/Code.test.tsx +0 -75
- package/src/CodeBlock/CodeBlock.highlightStyles.test.tsx +0 -87
- package/src/CodeBlock/CodeBlock.spec.md +0 -243
- 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.spec.md +0 -245
- package/src/Collapsible/Collapsible.test.tsx +0 -620
- package/src/Collapsible/CollapsibleGroup.spec.md +0 -201
- 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.spec.md +0 -278
- package/src/CommandPalette/CommandPalette.test.tsx +0 -750
- package/src/CommandPalette/CommandPaletteEmpty.spec.md +0 -190
- 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.spec.md +0 -215
- package/src/CommandPalette/CommandPaletteInput.test.tsx +0 -539
- package/src/CommandPalette/CommandPaletteItem.spec.md +0 -223
- package/src/CommandPalette/CommandPaletteItem.test.tsx +0 -417
- package/src/CommandPalette/CommandPaletteList.spec.md +0 -194
- 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.spec.md +0 -266
- package/src/ComplexSelector/ComplexSelector.test.tsx +0 -1023
- package/src/ComplexSelector/__tests__/ComplexSelector.a11y.chromium.spec.ts +0 -965
- package/src/ContextMenu/ContextMenu.spec.md +0 -251
- 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.spec.md +0 -319
- 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.spec.md +0 -203
- package/src/DateRangeInput/DateRangeInput.test.tsx +0 -1108
- package/src/DateTimeInput/DateTimeInput.fr10.test.tsx +0 -319
- package/src/DateTimeInput/DateTimeInput.spec.md +0 -246
- 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.spec.md +0 -189
- 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/modules/DialogHeader.spec.md +0 -211
- package/src/Dialog/useImperativeDialog.test.tsx +0 -78
- package/src/Divider/Divider.spec.md +0 -252
- package/src/Divider/Divider.test.tsx +0 -155
- package/src/Drawer/Drawer.spec.md +0 -357
- 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.spec.md +0 -582
- 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/DropdownMenuDivider.spec.md +0 -192
- package/src/DropdownMenu/DropdownMenuItem.spec.md +0 -209
- package/src/DropdownMenu/DropdownMenuLazySheet.test.tsx +0 -126
- package/src/DropdownMenu/DropdownMenuRadioGroup.spec.md +0 -190
- package/src/DropdownMenu/DropdownMenuRadioItem.spec.md +0 -226
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +0 -635
- package/src/DropdownMenu/DropdownMenuSheetFirstOpen.test.tsx +0 -72
- package/src/DropdownMenu/DropdownMenuSubMenu.spec.md +0 -225
- 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/DropdownMenu/modules/useMenuHover.spec.md +0 -283
- package/src/DropdownMenu/modules/useMenuPress.spec.md +0 -348
- package/src/EmptyState/EmptyState.announce.test.tsx +0 -227
- package/src/EmptyState/EmptyState.spec.md +0 -197
- package/src/EmptyState/EmptyState.test.tsx +0 -284
- package/src/Field/Field.spec.md +0 -226
- package/src/Field/Field.test.tsx +0 -800
- package/src/Field/FieldLabel.spec.md +0 -183
- 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.spec.md +0 -224
- 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.spec.md +0 -199
- package/src/FileInput/FileInput.test.tsx +0 -1270
- package/src/FormLayout/FormLayout.spec.md +0 -210
- package/src/FormLayout/FormLayout.test.tsx +0 -444
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +0 -46
- package/src/Grid/Grid.spec.md +0 -193
- package/src/Grid/Grid.test.tsx +0 -509
- package/src/Grid/GridSpan.spec.md +0 -158
- package/src/HStack/HStack.test.tsx +0 -129
- package/src/Heading/Heading.spec.md +0 -198
- package/src/Heading/Heading.test.tsx +0 -328
- package/src/HoverCard/HoverCard.spec.md +0 -244
- package/src/HoverCard/HoverCard.test.tsx +0 -1339
- package/src/Icon/Icon.spec.md +0 -244
- package/src/Icon/Icon.test.tsx +0 -990
- package/src/Icon/globalIconRegistry.test.tsx +0 -613
- package/src/IconButton/IconButton.spec.md +0 -197
- package/src/IconButton/IconButton.test.tsx +0 -156
- package/src/Indicator/CheckIndicator.spec.md +0 -159
- package/src/Indicator/CheckboxIndicator.spec.md +0 -161
- package/src/Indicator/Indicator.test.tsx +0 -389
- package/src/Indicator/indicatorRegistry.test.tsx +0 -106
- package/src/InputGroup/InputGroup.spec.md +0 -199
- package/src/InputGroup/InputGroup.test.tsx +0 -502
- package/src/InputGroup/InputGroupText.spec.md +0 -139
- package/src/InteractiveRoleContext/InteractiveRoleContext.test.tsx +0 -185
- package/src/Item/Item.source-build.test.mjs +0 -88
- package/src/Item/Item.spec.md +0 -226
- 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.spec.md +0 -142
- package/src/Kbd/Kbd.test.tsx +0 -299
- package/src/Layer/LayerProvider.spec.md +0 -149
- 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.spec.md +0 -247
- 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.spec.md +0 -199
- 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.spec.md +0 -229
- package/src/Link/Link.test.tsx +0 -457
- package/src/Link/LinkProvider.spec.md +0 -167
- 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.spec.md +0 -336
- 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.spec.md +0 -595
- 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/modules/headingLinks.spec.md +0 -262
- package/src/Markdown/modules/remark.spec.md +0 -269
- package/src/Markdown/modules/softBreaks.spec.md +0 -137
- package/src/Markdown/modules/sourceLines.spec.md +0 -162
- 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.spec.md +0 -306
- 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.spec.md +0 -268
- 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.spec.md +0 -354
- 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.spec.md +0 -158
- package/src/NavIcon/NavIcon.test.tsx +0 -41
- package/src/NavMenu/NavHeadingMenu.spec.md +0 -268
- 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.spec.md +0 -248
- 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.spec.md +0 -162
- package/src/Outline/Outline.test.tsx +0 -1069
- package/src/Outline/OutlineFocus.a11y.chromium.spec.ts +0 -551
- package/src/Outline/modules/parseOutlineFromMarkdown.spec.md +0 -151
- package/src/Outline/parseOutlineFromMarkdown.test.ts +0 -104
- package/src/OverflowList/OverflowList.spec.md +0 -157
- package/src/OverflowList/OverflowList.test.tsx +0 -1073
- package/src/Overlay/Overlay.spec.md +0 -304
- package/src/Overlay/Overlay.test.tsx +0 -424
- package/src/Pagination/Pagination.spec.md +0 -226
- package/src/Pagination/Pagination.test.tsx +0 -1754
- package/src/Popover/Popover.spec.md +0 -525
- 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.spec.md +0 -661
- 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.spec.md +0 -261
- 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.spec.md +0 -227
- package/src/RadioList/RadioList.test.tsx +0 -967
- package/src/RadioList/RadioListItem.press.source-build.test.mjs +0 -80
- package/src/RadioList/RadioListItem.spec.md +0 -223
- 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/Resizable.spec.md +0 -278
- 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.spec.md +0 -190
- package/src/ScrollableArea/ScrollableArea.test.tsx +0 -304
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +0 -149
- package/src/Section/Section.spec.md +0 -197
- package/src/Section/Section.test.tsx +0 -376
- package/src/SegmentedControl/SegmentedControl.spec.md +0 -261
- package/src/SegmentedControl/SegmentedControl.test.tsx +0 -897
- package/src/SegmentedControl/SegmentedControlItem.spec.md +0 -206
- package/src/SelectableCard/SelectableCard.spec.md +0 -230
- 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.spec.md +0 -379
- 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.spec.md +0 -247
- package/src/SideNav/SideNav.test.tsx +0 -4128
- package/src/SideNav/SideNavCollapseButton.spec.md +0 -161
- package/src/SideNav/SideNavHeading.spec.md +0 -226
- package/src/SideNav/SideNavItem.spec.md +0 -246
- package/src/SideNav/SideNavRailMotion.test.tsx +0 -620
- package/src/SideNav/SideNavSection.spec.md +0 -153
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +0 -417
- package/src/SizeContext/SizeContext.test.tsx +0 -226
- package/src/Skeleton/Skeleton.spec.md +0 -184
- package/src/Skeleton/Skeleton.test.tsx +0 -148
- package/src/Slider/Slider.fr10.test.tsx +0 -93
- package/src/Slider/Slider.spec.md +0 -285
- 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.spec.md +0 -231
- package/src/Spinner/Spinner.test.tsx +0 -484
- package/src/Stack/Stack.spec.md +0 -203
- package/src/Stack/Stack.test.tsx +0 -473
- package/src/Stack/StackItem.test.tsx +0 -105
- package/src/StatusDot/StatusDot.spec.md +0 -224
- package/src/StatusDot/StatusDot.test.tsx +0 -213
- package/src/Stepper/Step.spec.md +0 -206
- package/src/Stepper/Stepper.public.test.ts +0 -91
- package/src/Stepper/Stepper.spec.md +0 -327
- package/src/Stepper/Stepper.test.tsx +0 -2068
- package/src/Switch/Switch.focusRing.source-build.test.mjs +0 -81
- package/src/Switch/Switch.spec.md +0 -277
- 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/Tab.spec.md +0 -201
- package/src/TabList/TabList.spec.md +0 -217
- package/src/TabList/TabList.test.tsx +0 -1701
- package/src/TabList/TabMenu.spec.md +0 -198
- 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.spec.md +0 -395
- 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/activation/useTableActivation.spec.md +0 -254
- package/src/Table/plugins/columnResize/useTableColumnResize.spec.md +0 -373
- 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/infiniteScroll/useTableInfiniteScroll.spec.md +0 -244
- 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.spec.md +0 -355
- 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/plugins/virtualization/useTableVirtualization.spec.md +0 -266
- package/src/Table/tableContextMenu.test.tsx +0 -208
- package/src/Text/Text.spec.md +0 -193
- 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.spec.md +0 -303
- package/src/TextArea/TextArea.test.tsx +0 -1257
- package/src/TextInput/TextInput.fr10.test.tsx +0 -21
- package/src/TextInput/TextInput.spec.md +0 -260
- 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.spec.md +0 -244
- 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.spec.md +0 -273
- package/src/TimeInput/TimeInput.test.tsx +0 -831
- package/src/Timer/Timer.spec.md +0 -215
- package/src/Timer/Timer.test.tsx +0 -302
- package/src/Timestamp/Timestamp.spec.md +0 -252
- package/src/Timestamp/Timestamp.test.tsx +0 -1636
- package/src/Timestamp/tooltipEntries.test.ts +0 -566
- package/src/Toast/Toast.spec.md +0 -300
- 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.spec.md +0 -256
- package/src/ToggleButton/ToggleButton.test.tsx +0 -973
- package/src/ToggleButton/ToggleButtonGroup.spec.md +0 -195
- 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.spec.md +0 -271
- 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.spec.md +0 -601
- 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.spec.md +0 -228
- 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.spec.md +0 -267
- 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.spec.md +0 -190
- package/src/TopNav/TopNav.test.tsx +0 -836
- package/src/TopNav/TopNavHeading.spec.md +0 -211
- package/src/TopNav/TopNavItem.spec.md +0 -189
- package/src/TopNav/TopNavMegaMenu.reduced-motion.source-build.test.mjs +0 -83
- package/src/TopNav/TopNavMegaMenu.spec.md +0 -190
- package/src/TopNav/TopNavMegaMenu.test.tsx +0 -1132
- package/src/TopNav/TopNavMegaMenuFeaturedCard.spec.md +0 -150
- package/src/TopNav/TopNavMegaMenuItem.spec.md +0 -155
- package/src/TopNav/TopNavMenu.spec.md +0 -202
- package/src/TopNav/TopNavMenu.test.tsx +0 -485
- package/src/TopNav/__tests__/TopNavMobileLongHeading.a11y.chromium.spec.ts +0 -75
- package/src/TreeList/TreeList.spec.md +0 -328
- 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.spec.md +0 -270
- package/src/Typeahead/BaseTypeahead.test.tsx +0 -553
- package/src/Typeahead/Typeahead.fr10.test.tsx +0 -28
- package/src/Typeahead/Typeahead.spec.md +0 -257
- 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.spec.md +0 -170
- 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/InternationalizationProvider.spec.md +0 -252
- 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/src/motion/animator.ts
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,41 @@
|
|
|
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';
|
|
138
183
|
import {solveSpring, toSpring, type SpringDescription} from './spring';
|
|
139
|
-
import {
|
|
184
|
+
import {resolveMotion} from './resolveMotion';
|
|
185
|
+
import {
|
|
186
|
+
reducedMotionCrossFade,
|
|
187
|
+
registerReducedMotionCrossFade,
|
|
188
|
+
} from './uikit/timing';
|
|
140
189
|
import {planReducedMotion, type ReducedMotionView} from './reducedMotionPlan';
|
|
141
190
|
|
|
142
191
|
/**
|
|
@@ -192,6 +241,36 @@ export interface AnimateOptions {
|
|
|
192
241
|
* changes nothing.
|
|
193
242
|
*/
|
|
194
243
|
crossfadeAs?: 'entrance' | 'exit';
|
|
244
|
+
/**
|
|
245
|
+
* When the call's animations start. By default a call from rest starts
|
|
246
|
+
* when the browser commits it, and a call that continues motion on screen
|
|
247
|
+
* (a retarget) starts now, from the value on screen. Ignored with `at`.
|
|
248
|
+
* - `'commit'`: a call that continues motion also starts when the browser
|
|
249
|
+
* commits it, dated by the browser rather than by the main thread, as a
|
|
250
|
+
* call from rest is.
|
|
251
|
+
* - `'presented'`: a call from rest leaves its element at rest and creates
|
|
252
|
+
* its animations two frames later, once the frame that carries the
|
|
253
|
+
* element at rest has been presented; they then start at their commit. A
|
|
254
|
+
* busy UI process delays the motion instead of skipping into it, for two
|
|
255
|
+
* frames more before an idle start. Any other change to the animator
|
|
256
|
+
* before then creates the animations first, in call order. A call that
|
|
257
|
+
* continues motion on screen (a retarget) starts now, as by default.
|
|
258
|
+
*/
|
|
259
|
+
start?: 'commit' | 'presented';
|
|
260
|
+
/**
|
|
261
|
+
* A call that retargets a curve on screen adds to it instead of replacing
|
|
262
|
+
* it, as UIKit's animations do: the old curve keeps going (past its end, at
|
|
263
|
+
* its target) and a spring of the difference between the two targets runs
|
|
264
|
+
* from 0 on top, in the same animation. Its value and velocity at the call
|
|
265
|
+
* are the old curve's, so whichever frame first shows it (WebKit can apply
|
|
266
|
+
* a new curve tens of ms late), nothing steps back. Ignored for a property
|
|
267
|
+
* at rest or still waiting for the browser's start, for a property given a
|
|
268
|
+
* velocity, and under Reduced Motion. Use it for a played curve that starts
|
|
269
|
+
* at rest (an eased reversal) while the property moves; a spring retarget
|
|
270
|
+
* on the same spring moves the same either way, and a curve that already
|
|
271
|
+
* continues the velocity on screen must not add to it.
|
|
272
|
+
*/
|
|
273
|
+
additive?: boolean;
|
|
195
274
|
}
|
|
196
275
|
|
|
197
276
|
/**
|
|
@@ -219,7 +298,28 @@ export interface MotionCurve {
|
|
|
219
298
|
/**
|
|
220
299
|
* Options of `createAnimator`.
|
|
221
300
|
*/
|
|
301
|
+
/** How `set` puts values in place. */
|
|
302
|
+
export interface SetOptions {
|
|
303
|
+
/**
|
|
304
|
+
* Whether the write promotes its channels to a compositing layer, as a
|
|
305
|
+
* drag's per-frame writes need so each is a composite only (default
|
|
306
|
+
* true). `false` writes the values and nothing else: a one-off switch that
|
|
307
|
+
* must not give its element a layer, such as a veil under a sticky header
|
|
308
|
+
* switched during a programmatic scroll (on iOS 26.2, a layer there blanks
|
|
309
|
+
* the header's painted items for about two frames). A channel another
|
|
310
|
+
* motion keeps promoted stays promoted, and a channel with other motion
|
|
311
|
+
* still running gets its animation's layer as usual.
|
|
312
|
+
*/
|
|
313
|
+
promote?: boolean;
|
|
314
|
+
}
|
|
315
|
+
|
|
222
316
|
export interface AnimatorOptions {
|
|
317
|
+
/**
|
|
318
|
+
* Animates a pseudo-element of the element instead (`'::backdrop'` of a
|
|
319
|
+
* native dialog). A pseudo-element has no inline style, so a static filling
|
|
320
|
+
* animation holds its value after a curve ends and after `set`.
|
|
321
|
+
*/
|
|
322
|
+
pseudoElement?: string;
|
|
223
323
|
/** Starting values; identity by default. Never read from the DOM. */
|
|
224
324
|
initial?: MotionValues;
|
|
225
325
|
/** Clock in ms on the document timeline's time base. */
|
|
@@ -252,6 +352,14 @@ export interface MotionHandle {
|
|
|
252
352
|
value(property: MotionProperty, time?: number): number;
|
|
253
353
|
/** Presentation velocity of a property at `time`, units/s. */
|
|
254
354
|
velocity(property: MotionProperty, time?: number): number;
|
|
355
|
+
/**
|
|
356
|
+
* The curve this call started on `property` (`scale` reads `scaleX`),
|
|
357
|
+
* in seconds from the call's start: what the keyframes play. Null for a
|
|
358
|
+
* property the call does not move, or moves without travel (Reduced
|
|
359
|
+
* Motion). Map it onto a companion property with `mapProgress`, and play
|
|
360
|
+
* that on the same clock.
|
|
361
|
+
*/
|
|
362
|
+
curve(property: MotionProperty | 'scale'): MotionCurve | null;
|
|
255
363
|
/** New targets for this call's properties, keeping their velocity. */
|
|
256
364
|
retarget(
|
|
257
365
|
to: MotionValues,
|
|
@@ -292,7 +400,7 @@ export interface Animator {
|
|
|
292
400
|
* of a drag (one style write per channel, no animation when nothing else
|
|
293
401
|
* on the channel is moving).
|
|
294
402
|
*/
|
|
295
|
-
set(values: MotionValues): void;
|
|
403
|
+
set(values: MotionValues, options?: SetOptions): void;
|
|
296
404
|
/** Springs to `to` from the presentation values. */
|
|
297
405
|
animate(
|
|
298
406
|
to: MotionValues,
|
|
@@ -386,10 +494,28 @@ interface Segment {
|
|
|
386
494
|
*/
|
|
387
495
|
interface StartGroup {
|
|
388
496
|
readonly provisional: number;
|
|
497
|
+
/**
|
|
498
|
+
* Its animations were created in the running task: the browser cannot have
|
|
499
|
+
* started them yet, so nothing reads their start time until it ends.
|
|
500
|
+
*/
|
|
501
|
+
fresh: boolean;
|
|
389
502
|
readonly segments: Segment[];
|
|
390
503
|
readonly animations: Animation[];
|
|
391
504
|
readonly channels: Set<Channel>;
|
|
392
505
|
resolved: boolean;
|
|
506
|
+
/**
|
|
507
|
+
* The first frame after the call has run: a start read later is the
|
|
508
|
+
* browser's, whatever it says (startAfterBlock).
|
|
509
|
+
*/
|
|
510
|
+
framed?: boolean;
|
|
511
|
+
/**
|
|
512
|
+
* Made in an animation-frame callback of an animator's own (a presented
|
|
513
|
+
* call's second frame): the browser commits its animations in that frame,
|
|
514
|
+
* so the frame after it is not the one that starts them.
|
|
515
|
+
*/
|
|
516
|
+
madeInFrame?: boolean;
|
|
517
|
+
/** The task it was made in, with every call made in that task. */
|
|
518
|
+
task?: TaskMark;
|
|
393
519
|
/** A later call in the same task that took over its curves. */
|
|
394
520
|
adoptedBy?: StartGroup;
|
|
395
521
|
readonly resolve: (start: number) => void;
|
|
@@ -414,7 +540,12 @@ interface HandleState {
|
|
|
414
540
|
* dip, the fade back in.
|
|
415
541
|
*/
|
|
416
542
|
interface Landing {
|
|
417
|
-
|
|
543
|
+
/**
|
|
544
|
+
* The call that settles when the landing (and its fade back in) ends; a
|
|
545
|
+
* call that joins the dip takes it over, and the call it replaces is
|
|
546
|
+
* carried.
|
|
547
|
+
*/
|
|
548
|
+
owner: HandleState;
|
|
418
549
|
/** ms after the call's start. */
|
|
419
550
|
readonly at: number;
|
|
420
551
|
readonly values: Map<MotionProperty, number>;
|
|
@@ -454,6 +585,8 @@ interface ReducedPlan {
|
|
|
454
585
|
> | null;
|
|
455
586
|
/** The stylesheet opacity a dip borrowed (no call owns opacity). */
|
|
456
587
|
readonly borrowed?: number | null;
|
|
588
|
+
/** The call joins the waiting dip (see the planner's `joins`). */
|
|
589
|
+
readonly joins?: boolean;
|
|
457
590
|
}
|
|
458
591
|
|
|
459
592
|
const PROPERTIES: ReadonlyArray<MotionProperty> = [
|
|
@@ -491,32 +624,109 @@ export const SETTLE_THRESHOLD: Record<MotionProperty, number> = {
|
|
|
491
624
|
opacity: 0.001,
|
|
492
625
|
};
|
|
493
626
|
|
|
494
|
-
/**
|
|
627
|
+
/**
|
|
628
|
+
* Keyframes are added until linear interpolation is within this: a quarter of
|
|
629
|
+
* a device pixel (this quarter of a CSS pixel, divided by the device pixel
|
|
630
|
+
* ratio where it is above 1), a twentieth of a degree, a 2000th of the size,
|
|
631
|
+
* about one step of an 8-bit alpha. Every one is below what a moving element
|
|
632
|
+
* can show.
|
|
633
|
+
*/
|
|
495
634
|
const SAMPLE_TOLERANCE: Record<MotionProperty, number> = {
|
|
496
|
-
x: 0.
|
|
497
|
-
y: 0.
|
|
498
|
-
rotate: 0.
|
|
499
|
-
scaleX: 0.
|
|
500
|
-
scaleY: 0.
|
|
501
|
-
opacity: 0.
|
|
635
|
+
x: 0.25,
|
|
636
|
+
y: 0.25,
|
|
637
|
+
rotate: 0.05,
|
|
638
|
+
scaleX: 0.0005,
|
|
639
|
+
scaleY: 0.0005,
|
|
640
|
+
opacity: 0.004,
|
|
502
641
|
};
|
|
503
642
|
|
|
643
|
+
/** Keyframes start on this grid (ms) and are split where the curve needs it. */
|
|
644
|
+
const SAMPLE_GRID_MS = 1000 / 30;
|
|
645
|
+
|
|
504
646
|
/** A curve that has not settled by then (an undamped spring) snaps. */
|
|
505
647
|
const MAX_DURATION_MS = 30_000;
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* How long a task must run on past its first call from rest before that
|
|
651
|
+
* counts as a block (WebKit; startAfterBlock): two frames at 60 Hz.
|
|
652
|
+
*/
|
|
653
|
+
// 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.
|
|
654
|
+
const LATE_START_MS = 34;
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* The task calls from rest are made in, shared by every call made in it
|
|
658
|
+
* (every animator's), so one motion's parts that are separate calls start
|
|
659
|
+
* together (startAfterBlock).
|
|
660
|
+
*/
|
|
661
|
+
interface TaskMark {
|
|
662
|
+
/**
|
|
663
|
+
* When its first call from rest created animations: the call itself, or a
|
|
664
|
+
* presented call's second frame.
|
|
665
|
+
*/
|
|
666
|
+
readonly first: number;
|
|
667
|
+
/** When the task ended, at its first microtask. */
|
|
668
|
+
ended?: number;
|
|
669
|
+
/** The start every call of a blocked task moves to, set by its first read. */
|
|
670
|
+
at?: number;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
/** The task the current calls from rest are made in, until it ends. */
|
|
674
|
+
let openTask: TaskMark | null = null;
|
|
675
|
+
|
|
676
|
+
/** How many of the animators' animation-frame callbacks are running now. */
|
|
677
|
+
let frameDepth = 0;
|
|
678
|
+
|
|
679
|
+
/** The mark of the running task, opened by its first call from rest. */
|
|
680
|
+
function markTask(time: number, clock: () => number): TaskMark {
|
|
681
|
+
if (openTask == null) {
|
|
682
|
+
const task: TaskMark = {first: time};
|
|
683
|
+
openTask = task;
|
|
684
|
+
queueMicrotask(() => {
|
|
685
|
+
task.ended = clock();
|
|
686
|
+
openTask = null;
|
|
687
|
+
});
|
|
688
|
+
}
|
|
689
|
+
return openTask;
|
|
690
|
+
}
|
|
691
|
+
|
|
506
692
|
/** Above this many keyframes the tolerance is relaxed. */
|
|
507
693
|
const MAX_KEYFRAMES = 1200;
|
|
508
694
|
/**
|
|
509
695
|
* The keyframes hold the end state this long after a curve ends. An engine
|
|
510
696
|
* whose compositor ends an animation while the main thread is blocked falls
|
|
511
|
-
* back to the value its main thread last committed,
|
|
512
|
-
* hold keeps the end state on screen through such
|
|
513
|
-
*
|
|
697
|
+
* back to the value its main thread last committed, the curve's start
|
|
698
|
+
* (WebKit on Linux); the hold keeps the end state on screen through any such
|
|
699
|
+
* block. It only stretches the last keyframe. The main thread retires the
|
|
700
|
+
* animation as soon as it runs after the curve's end.
|
|
701
|
+
*
|
|
702
|
+
* Why a tail inside the curve's own animation, with a bound (measured Oct 24
|
|
703
|
+
* 2026; do not replace it without these proofs):
|
|
704
|
+
* - WebKit on Linux (WebKitGTK and WPE) ignores `fill` on its compositor:
|
|
705
|
+
* a 400 ms move that ends during a 1 s main-thread block snaps back to the
|
|
706
|
+
* block-start position 13 ms after its end, with `fill: forwards` or with
|
|
707
|
+
* no fill, and holds with this tail. iOS 26.2 Mobile Safari holds the end
|
|
708
|
+
* in all three forms, so there the tail is unneeded but harmless (measured
|
|
709
|
+
* Oct 25 2026). The browser proof "a spring that ends inside the block
|
|
710
|
+
* keeps showing its end state" catches it.
|
|
711
|
+
* - A separate static animation of the end state under the curve would hold
|
|
712
|
+
* it without a bound, but two animations on one property push Chromium to
|
|
713
|
+
* run the curve on the main thread: the 1 s block proof moved in 0 of 57
|
|
714
|
+
* frames, the start-before-a-block proof failed, and seeking the curve
|
|
715
|
+
* broke.
|
|
514
716
|
*/
|
|
515
|
-
export const END_HOLD_MS =
|
|
717
|
+
export const END_HOLD_MS = 60_000;
|
|
516
718
|
|
|
517
719
|
/** How often a paused animation is looked at again for retiring, ms. */
|
|
518
720
|
const RETIRE_RECHECK_MS = 100;
|
|
519
721
|
|
|
722
|
+
/**
|
|
723
|
+
* The soonest a running animation's end is looked for again, ms: a frame at
|
|
724
|
+
* 60 Hz. WebKit moves an animation's currentTime once per frame, so a look
|
|
725
|
+
* within a frame reads the frame's time, a fraction of a ms short of the end,
|
|
726
|
+
* and a timer for that fraction would fire again before anything moved.
|
|
727
|
+
*/
|
|
728
|
+
const END_RECHECK_MS = 1000 / 60;
|
|
729
|
+
|
|
520
730
|
/** How long an element stays promoted after its last motion, ms. */
|
|
521
731
|
export const PROMOTION_LINGER_MS = 500;
|
|
522
732
|
|
|
@@ -558,10 +768,10 @@ function format(
|
|
|
558
768
|
}
|
|
559
769
|
}
|
|
560
770
|
|
|
561
|
-
const shared = new WeakMap<HTMLElement, Animator
|
|
771
|
+
const shared = new WeakMap<HTMLElement, Map<string, Animator>>();
|
|
562
772
|
|
|
563
773
|
/**
|
|
564
|
-
* The one animator for `element
|
|
774
|
+
* The one animator for `element` (and `options.pseudoElement`), created on
|
|
565
775
|
* first use. Code that animates one element from several places (a swipe on
|
|
566
776
|
* x, a removal on y) shares it, so their curves compose in one `translate`
|
|
567
777
|
* track and retargeting one axis leaves the other on its curve; two
|
|
@@ -573,10 +783,16 @@ export function animatorFor(
|
|
|
573
783
|
element: HTMLElement,
|
|
574
784
|
options: AnimatorOptions = {},
|
|
575
785
|
): Animator {
|
|
576
|
-
let
|
|
786
|
+
let byPseudo = shared.get(element);
|
|
787
|
+
if (byPseudo == null) {
|
|
788
|
+
byPseudo = new Map();
|
|
789
|
+
shared.set(element, byPseudo);
|
|
790
|
+
}
|
|
791
|
+
const key = options.pseudoElement ?? '';
|
|
792
|
+
let animator = byPseudo.get(key);
|
|
577
793
|
if (animator == null) {
|
|
578
794
|
animator = createAnimator(element, options);
|
|
579
|
-
|
|
795
|
+
byPseudo.set(key, animator);
|
|
580
796
|
}
|
|
581
797
|
return animator;
|
|
582
798
|
}
|
|
@@ -693,8 +909,9 @@ const REDUCED_TRANSITION: SpringTransition = {
|
|
|
693
909
|
* @example
|
|
694
910
|
* ```
|
|
695
911
|
* const animator = createAnimator(sheet);
|
|
696
|
-
* // finger lifts at 1200 px/s heading for the detent at 0
|
|
697
|
-
*
|
|
912
|
+
* // finger lifts at 1200 px/s heading for the detent at 0 (a component
|
|
913
|
+
* // passes the spring of its motion role):
|
|
914
|
+
* animator.animate({y: 0}, {spring: {response: 0.45, dampingRatio: 0.9}, velocity: {y: 1200}});
|
|
698
915
|
* // the finger lands again: where is it right now?
|
|
699
916
|
* const y = animator.get('y', event.timeStamp);
|
|
700
917
|
* animator.stop(['y']);
|
|
@@ -705,13 +922,29 @@ export function createAnimator(
|
|
|
705
922
|
options: AnimatorOptions = {},
|
|
706
923
|
): Animator {
|
|
707
924
|
const now = options.now ?? defaultNow;
|
|
708
|
-
const
|
|
925
|
+
const frameSource =
|
|
709
926
|
options.requestFrame ??
|
|
710
927
|
(typeof requestAnimationFrame === 'function'
|
|
711
928
|
? (callback: () => void) => {
|
|
712
929
|
requestAnimationFrame(() => callback());
|
|
713
930
|
}
|
|
714
931
|
: null);
|
|
932
|
+
// Every frame callback of an animator's counts itself, so a call made in
|
|
933
|
+
// one knows its animations commit in that frame.
|
|
934
|
+
const requestFrame =
|
|
935
|
+
frameSource == null
|
|
936
|
+
? null
|
|
937
|
+
: (callback: () => void) => {
|
|
938
|
+
frameSource(() => {
|
|
939
|
+
frameDepth += 1;
|
|
940
|
+
try {
|
|
941
|
+
callback();
|
|
942
|
+
} finally {
|
|
943
|
+
frameDepth -= 1;
|
|
944
|
+
}
|
|
945
|
+
});
|
|
946
|
+
};
|
|
947
|
+
const pseudoElement = options.pseudoElement;
|
|
715
948
|
// Reduced Motion reads the person's settings and nothing else: no option
|
|
716
949
|
// overrides them (design:reduced-motion DR4).
|
|
717
950
|
const prefersReducedMotion = defaultPrefersReducedMotion;
|
|
@@ -761,7 +994,21 @@ export function createAnimator(
|
|
|
761
994
|
let ownWillChange: string | null = null;
|
|
762
995
|
/** The stylesheet's will-change when there is no inline value. */
|
|
763
996
|
let sheetWillChange = '';
|
|
997
|
+
/**
|
|
998
|
+
* Whether sheetWillChange holds a read of the element's current style: it
|
|
999
|
+
* is read in the task after the element is attached, and again after each
|
|
1000
|
+
* demotion, so a promotion (a drag's first move) reads no style in its
|
|
1001
|
+
* own task.
|
|
1002
|
+
*/
|
|
1003
|
+
let sheetWillChangeRead = false;
|
|
1004
|
+
/** The pending read of sheetWillChange, cancelled with its element. */
|
|
1005
|
+
let sheetReadTimer: ReturnType<typeof setTimeout> | null = null;
|
|
764
1006
|
let demoteTimer: ReturnType<typeof setTimeout> | null = null;
|
|
1007
|
+
/** A pseudo-element is promoted through a custom property on its host. */
|
|
1008
|
+
const promotionProperty =
|
|
1009
|
+
pseudoElement == null
|
|
1010
|
+
? null
|
|
1011
|
+
: `--astryx-motion-will-change-${pseudoElement.replace(/^:+/, '')}`;
|
|
765
1012
|
/** Channels whose identity the last node held inline (see `attach`). */
|
|
766
1013
|
let heldIdentity = new Set<Channel>();
|
|
767
1014
|
|
|
@@ -842,18 +1089,22 @@ export function createAnimator(
|
|
|
842
1089
|
const writeInline = (
|
|
843
1090
|
channel: Channel,
|
|
844
1091
|
value: (property: MotionProperty) => number,
|
|
1092
|
+
release = true,
|
|
845
1093
|
) => {
|
|
846
|
-
if (target == null) {
|
|
1094
|
+
if (target == null || pseudoElement != null) {
|
|
847
1095
|
return;
|
|
848
1096
|
}
|
|
849
1097
|
touched.add(channel);
|
|
850
1098
|
const text = inlineText(channel, value);
|
|
851
|
-
|
|
852
|
-
|
|
1099
|
+
// An unchanged value is not written: a style write invalidates the
|
|
1100
|
+
// element, and WebKit can repaint sticky content stale when that lands in
|
|
1101
|
+
// the frame a scroll commits.
|
|
1102
|
+
if (target.style.getPropertyValue(channel) !== text) {
|
|
853
1103
|
target.style.setProperty(channel, text);
|
|
1104
|
+
}
|
|
1105
|
+
if (release && text === IDENTITY_TEXT[channel]) {
|
|
1106
|
+
// Identity leaves the element when nothing else would move it.
|
|
854
1107
|
releaseIdentity(channel);
|
|
855
|
-
} else {
|
|
856
|
-
target.style.setProperty(channel, text);
|
|
857
1108
|
}
|
|
858
1109
|
};
|
|
859
1110
|
|
|
@@ -881,9 +1132,9 @@ export function createAnimator(
|
|
|
881
1132
|
for (let e = 0; e + 1 < edges.length; e++) {
|
|
882
1133
|
const a = edges[e];
|
|
883
1134
|
const b = edges[e + 1];
|
|
884
|
-
// A
|
|
1135
|
+
// A 30 Hz grid, each interval split until the chord is within the
|
|
885
1136
|
// tolerance at its quarter points.
|
|
886
|
-
const steps = Math.max(1, Math.ceil((b - a) /
|
|
1137
|
+
const steps = Math.max(1, Math.ceil((b - a) / SAMPLE_GRID_MS));
|
|
887
1138
|
const split = (t0: number, t1: number, depth: number) => {
|
|
888
1139
|
const v0 = value(t0);
|
|
889
1140
|
const v1 =
|
|
@@ -908,14 +1159,33 @@ export function createAnimator(
|
|
|
908
1159
|
return times;
|
|
909
1160
|
};
|
|
910
1161
|
|
|
1162
|
+
/** A pseudo-element's resting value, held by a static filling animation. */
|
|
1163
|
+
const hold = (channel: Channel, time: number) => {
|
|
1164
|
+
if (target == null) {
|
|
1165
|
+
return;
|
|
1166
|
+
}
|
|
1167
|
+
const value = format(channel, finalValue);
|
|
1168
|
+
const animation = target.animate([{[channel]: value}, {[channel]: value}], {
|
|
1169
|
+
duration: 1,
|
|
1170
|
+
fill: 'both',
|
|
1171
|
+
pseudoElement,
|
|
1172
|
+
});
|
|
1173
|
+
animation.startTime = time;
|
|
1174
|
+
running.set(channel, animation);
|
|
1175
|
+
};
|
|
1176
|
+
|
|
911
1177
|
const rebuild = (channel: Channel, time: number) => {
|
|
912
1178
|
const previous = running.get(channel);
|
|
913
1179
|
running.delete(channel);
|
|
914
1180
|
clearTimeout(retireTimers.get(channel));
|
|
915
1181
|
retireTimers.delete(channel);
|
|
916
|
-
//
|
|
917
|
-
// can go first.
|
|
918
|
-
|
|
1182
|
+
// An element's inline style takes the value on screen below, so its old
|
|
1183
|
+
// animation can go first. A pseudo-element has none: its old animation
|
|
1184
|
+
// keeps holding the value until the new one exists (same task, no frame in
|
|
1185
|
+
// between).
|
|
1186
|
+
if (pseudoElement == null) {
|
|
1187
|
+
previous?.cancel();
|
|
1188
|
+
}
|
|
919
1189
|
const properties = CHANNELS[channel];
|
|
920
1190
|
// Settled curves become resting values.
|
|
921
1191
|
for (const property of properties) {
|
|
@@ -925,13 +1195,27 @@ export function createAnimator(
|
|
|
925
1195
|
segments.delete(property);
|
|
926
1196
|
}
|
|
927
1197
|
}
|
|
928
|
-
writeInline(channel, finalValue);
|
|
929
1198
|
const moving = properties.filter(p => segments.has(p));
|
|
1199
|
+
if (
|
|
1200
|
+
moving.length === 0 ||
|
|
1201
|
+
target == null ||
|
|
1202
|
+
typeof target.animate !== 'function'
|
|
1203
|
+
) {
|
|
1204
|
+
writeInline(channel, finalValue);
|
|
1205
|
+
} else {
|
|
1206
|
+
// The value on screen as the curve starts: what a frame painted before
|
|
1207
|
+
// the compositor has the curve shows. The end is written at retire.
|
|
1208
|
+
writeInline(channel, p => valueAt(p, time));
|
|
1209
|
+
}
|
|
930
1210
|
if (target == null || typeof target.animate !== 'function') {
|
|
931
1211
|
previous?.cancel();
|
|
932
1212
|
return;
|
|
933
1213
|
}
|
|
934
1214
|
if (moving.length === 0) {
|
|
1215
|
+
if (pseudoElement != null) {
|
|
1216
|
+
hold(channel, time);
|
|
1217
|
+
}
|
|
1218
|
+
previous?.cancel();
|
|
935
1219
|
return;
|
|
936
1220
|
}
|
|
937
1221
|
// A channel rebuilt by an explicit call (set, rebase, a retarget of
|
|
@@ -958,6 +1242,10 @@ export function createAnimator(
|
|
|
958
1242
|
),
|
|
959
1243
|
);
|
|
960
1244
|
if (end <= from) {
|
|
1245
|
+
if (pseudoElement != null) {
|
|
1246
|
+
hold(channel, time);
|
|
1247
|
+
}
|
|
1248
|
+
previous?.cancel();
|
|
961
1249
|
return;
|
|
962
1250
|
}
|
|
963
1251
|
if (callGroup != null) {
|
|
@@ -980,15 +1268,17 @@ export function createAnimator(
|
|
|
980
1268
|
}
|
|
981
1269
|
}
|
|
982
1270
|
}
|
|
1271
|
+
// Read where the keyframes are baked: a page moved to another screen
|
|
1272
|
+
// bakes its next motion for that screen.
|
|
1273
|
+
const devicePixel = 1 / Math.max(1, globalThis.devicePixelRatio || 1);
|
|
983
1274
|
const collect = (scale: number) => {
|
|
984
1275
|
const times = new Set<number>([from, end]);
|
|
985
1276
|
for (const property of moving) {
|
|
986
|
-
|
|
987
|
-
property
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
)) {
|
|
1277
|
+
const tolerance =
|
|
1278
|
+
SAMPLE_TOLERANCE[property] *
|
|
1279
|
+
scale *
|
|
1280
|
+
(property === 'x' || property === 'y' ? devicePixel : 1);
|
|
1281
|
+
for (const t of sampleTimes(property, from, end, tolerance)) {
|
|
992
1282
|
times.add(t);
|
|
993
1283
|
}
|
|
994
1284
|
}
|
|
@@ -1037,10 +1327,11 @@ export function createAnimator(
|
|
|
1037
1327
|
duration: span,
|
|
1038
1328
|
// The last keyframes hold the end state (END_HOLD_MS); filling both
|
|
1039
1329
|
// ways also keeps it where an engine honors the fill on its compositor.
|
|
1040
|
-
// The main thread
|
|
1041
|
-
//
|
|
1330
|
+
// The main thread retires the animation once it runs after the end,
|
|
1331
|
+
// writing the end inline in that task, so that changes no pixel.
|
|
1042
1332
|
fill: 'both',
|
|
1043
1333
|
easing: 'linear',
|
|
1334
|
+
...(pseudoElement != null ? {pseudoElement} : {}),
|
|
1044
1335
|
});
|
|
1045
1336
|
if (waiting != null) {
|
|
1046
1337
|
// From rest: no start time, so the browser starts the animation when
|
|
@@ -1061,7 +1352,16 @@ export function createAnimator(
|
|
|
1061
1352
|
|
|
1062
1353
|
/**
|
|
1063
1354
|
* Once the main thread runs after the curve's end, the animation leaves the
|
|
1064
|
-
* running state:
|
|
1355
|
+
* running state: an element's end values are written inline in the task
|
|
1356
|
+
* that cancels it; a pseudo-element's end value moves to a static holding
|
|
1357
|
+
* animation, created before the long one goes.
|
|
1358
|
+
*
|
|
1359
|
+
* Why a timer at the curve's end: no browser event reports that an
|
|
1360
|
+
* animation's time has reached a point inside its effect, and its
|
|
1361
|
+
* `finished` comes only after the END_HOLD_MS tail, which would keep the
|
|
1362
|
+
* element promoted and the animation alive for a minute. The timer is set
|
|
1363
|
+
* on the curve's own clock and re-armed while a sampler pauses or seeks the
|
|
1364
|
+
* animation, so it never retires a held one.
|
|
1065
1365
|
*/
|
|
1066
1366
|
const scheduleRetire = (
|
|
1067
1367
|
channel: Channel,
|
|
@@ -1082,13 +1382,43 @@ export function createAnimator(
|
|
|
1082
1382
|
channel,
|
|
1083
1383
|
setTimeout(
|
|
1084
1384
|
retire,
|
|
1085
|
-
animation.playState === 'paused'
|
|
1385
|
+
animation.playState === 'paused'
|
|
1386
|
+
? RETIRE_RECHECK_MS
|
|
1387
|
+
: Math.max(remaining, END_RECHECK_MS),
|
|
1086
1388
|
),
|
|
1087
1389
|
);
|
|
1088
1390
|
return;
|
|
1089
1391
|
}
|
|
1090
1392
|
running.delete(channel);
|
|
1393
|
+
// A pseudo-element holds its resting value, unless the stylesheet
|
|
1394
|
+
// takes it back now (a borrowed dip that has ended).
|
|
1395
|
+
const handsBack =
|
|
1396
|
+
channel === 'opacity' &&
|
|
1397
|
+
borrowedOpacity != null &&
|
|
1398
|
+
![...landings].some(landing => landing.fadeIn?.isBorrowed === true);
|
|
1399
|
+
if (pseudoElement != null && !handsBack) {
|
|
1400
|
+
hold(channel, now());
|
|
1401
|
+
} else {
|
|
1402
|
+
// The end goes inline in the task that cancels the animation. Whether
|
|
1403
|
+
// an identity end may leave the element is judged after the cancel:
|
|
1404
|
+
// until then the end-state tail still holds the end, so the computed
|
|
1405
|
+
// style would hide a stylesheet value (an opacity 0) under it.
|
|
1406
|
+
writeInline(channel, finalValue, false);
|
|
1407
|
+
}
|
|
1408
|
+
// A call from rest the browser never started (finished from outside
|
|
1409
|
+
// before its first frame, a sampler's finish()): read its start from the
|
|
1410
|
+
// animation before the cancel takes it, and with nothing left to wait
|
|
1411
|
+
// on the call keeps its own clock, so its landing is still armed.
|
|
1412
|
+
const waiting = [...pendingGroups].filter(group =>
|
|
1413
|
+
group.animations.includes(animation),
|
|
1414
|
+
);
|
|
1415
|
+
for (const group of waiting) {
|
|
1416
|
+
syncGroup(group);
|
|
1417
|
+
}
|
|
1091
1418
|
animation.cancel();
|
|
1419
|
+
for (const group of waiting) {
|
|
1420
|
+
resolveGroup(group, group.provisional);
|
|
1421
|
+
}
|
|
1092
1422
|
releaseIdentity(channel);
|
|
1093
1423
|
flushReleases();
|
|
1094
1424
|
};
|
|
@@ -1102,22 +1432,36 @@ export function createAnimator(
|
|
|
1102
1432
|
target == null
|
|
1103
1433
|
? NaN
|
|
1104
1434
|
: Number.parseFloat(
|
|
1105
|
-
view
|
|
1435
|
+
view
|
|
1436
|
+
?.getComputedStyle(target, pseudoElement ?? null)
|
|
1437
|
+
.getPropertyValue('opacity') ?? '',
|
|
1106
1438
|
);
|
|
1107
1439
|
return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 1;
|
|
1108
1440
|
};
|
|
1109
1441
|
|
|
1110
1442
|
/**
|
|
1111
1443
|
* Whether the animator holds an opacity of its own on the element: an inline
|
|
1112
|
-
* value it wrote (a `set` over a
|
|
1113
|
-
* returns to that value.
|
|
1444
|
+
* value it wrote, or a pseudo-element's holding animation (a `set` over a
|
|
1445
|
+
* stylesheet that hides or dims it). A dip returns to that value.
|
|
1114
1446
|
*/
|
|
1115
1447
|
const writesOwnOpacity = (): boolean =>
|
|
1116
|
-
|
|
1448
|
+
pseudoElement == null
|
|
1449
|
+
? (target?.style.getPropertyValue('opacity') ?? '') !== ''
|
|
1450
|
+
: running.has('opacity');
|
|
1117
1451
|
|
|
1118
|
-
/**
|
|
1452
|
+
/**
|
|
1453
|
+
* Gives the element's opacity back to its stylesheet: an element's inline
|
|
1454
|
+
* value goes; a pseudo-element, which has no inline style, loses the
|
|
1455
|
+
* animation holding its value.
|
|
1456
|
+
*/
|
|
1119
1457
|
const releaseOwnOpacity = () => {
|
|
1120
|
-
|
|
1458
|
+
if (pseudoElement == null) {
|
|
1459
|
+
target?.style.removeProperty('opacity');
|
|
1460
|
+
return;
|
|
1461
|
+
}
|
|
1462
|
+
const held = running.get('opacity');
|
|
1463
|
+
running.delete('opacity');
|
|
1464
|
+
held?.cancel();
|
|
1121
1465
|
};
|
|
1122
1466
|
|
|
1123
1467
|
/**
|
|
@@ -1202,6 +1546,9 @@ export function createAnimator(
|
|
|
1202
1546
|
releaseOwnOpacity();
|
|
1203
1547
|
return;
|
|
1204
1548
|
}
|
|
1549
|
+
if (pseudoElement != null) {
|
|
1550
|
+
return;
|
|
1551
|
+
}
|
|
1205
1552
|
if (target.style.getPropertyValue(channel) !== IDENTITY_TEXT[channel]) {
|
|
1206
1553
|
return;
|
|
1207
1554
|
}
|
|
@@ -1265,9 +1612,17 @@ export function createAnimator(
|
|
|
1265
1612
|
|
|
1266
1613
|
// -- promotion -------------------------------------------------------------
|
|
1267
1614
|
|
|
1268
|
-
/** Writes the promoted channels as will-change. */
|
|
1615
|
+
/** Writes the promoted channels as will-change (or the pseudo's property). */
|
|
1269
1616
|
const writePromotion = (element: HTMLElement) => {
|
|
1270
1617
|
const list = [...promoted].join(', ');
|
|
1618
|
+
if (promotionProperty != null) {
|
|
1619
|
+
if (list === '') {
|
|
1620
|
+
element.style.removeProperty(promotionProperty);
|
|
1621
|
+
} else {
|
|
1622
|
+
element.style.setProperty(promotionProperty, list);
|
|
1623
|
+
}
|
|
1624
|
+
return;
|
|
1625
|
+
}
|
|
1271
1626
|
if (list === '') {
|
|
1272
1627
|
element.style.willChange = ownWillChange ?? '';
|
|
1273
1628
|
ownWillChange = null;
|
|
@@ -1276,13 +1631,12 @@ export function createAnimator(
|
|
|
1276
1631
|
if (ownWillChange == null) {
|
|
1277
1632
|
ownWillChange = element.style.willChange;
|
|
1278
1633
|
// Without an inline value, the stylesheet's reasons stay alongside the
|
|
1279
|
-
// promotion's
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
: '';
|
|
1634
|
+
// promotion's. They were read in the task after the element was
|
|
1635
|
+
// attached; a promotion that comes first (an element attached in this
|
|
1636
|
+
// task that moves at once) reads them now.
|
|
1637
|
+
if (ownWillChange === '' && !sheetWillChangeRead) {
|
|
1638
|
+
readSheetWillChange(element);
|
|
1639
|
+
}
|
|
1286
1640
|
}
|
|
1287
1641
|
const base = ownWillChange !== '' ? ownWillChange : sheetWillChange;
|
|
1288
1642
|
const own = base === 'auto' ? '' : base;
|
|
@@ -1293,8 +1647,50 @@ export function createAnimator(
|
|
|
1293
1647
|
element.style.willChange = [...reasons, ...promoted].join(', ');
|
|
1294
1648
|
};
|
|
1295
1649
|
|
|
1650
|
+
/** Reads the element's own will-change while no promotion of ours is written. */
|
|
1651
|
+
const readSheetWillChange = (element: HTMLElement) => {
|
|
1652
|
+
sheetWillChange =
|
|
1653
|
+
element.ownerDocument.defaultView
|
|
1654
|
+
?.getComputedStyle(element)
|
|
1655
|
+
.getPropertyValue('will-change') ?? '';
|
|
1656
|
+
sheetWillChangeRead = true;
|
|
1657
|
+
};
|
|
1658
|
+
|
|
1659
|
+
/**
|
|
1660
|
+
* Reads sheetWillChange in a task of its own, so a later promotion reads no
|
|
1661
|
+
* style in its own task. Skipped while a promotion of ours is written,
|
|
1662
|
+
* which the read would see (demote asks again), and for a node out of the
|
|
1663
|
+
* document. A pseudo-element's promotion is its own property, with
|
|
1664
|
+
* nothing to read.
|
|
1665
|
+
*/
|
|
1666
|
+
const readSheetWillChangeLater = () => {
|
|
1667
|
+
cancelSheetWillChangeRead();
|
|
1668
|
+
sheetWillChangeRead = false;
|
|
1669
|
+
if (target == null || promotionProperty != null) {
|
|
1670
|
+
return;
|
|
1671
|
+
}
|
|
1672
|
+
const element = target;
|
|
1673
|
+
sheetReadTimer = setTimeout(() => {
|
|
1674
|
+
sheetReadTimer = null;
|
|
1675
|
+
// A node out of the document has no style to read, and reading one
|
|
1676
|
+
// still costs a style pass: a shared animator (animatorFor) is never
|
|
1677
|
+
// detached, so its node can leave with this read waiting. Skipped, the
|
|
1678
|
+
// read waits for a promotion that needs it.
|
|
1679
|
+
if (target === element && promoted.size === 0 && element.isConnected) {
|
|
1680
|
+
readSheetWillChange(element);
|
|
1681
|
+
}
|
|
1682
|
+
}, 0);
|
|
1683
|
+
};
|
|
1684
|
+
|
|
1685
|
+
const cancelSheetWillChangeRead = () => {
|
|
1686
|
+
if (sheetReadTimer != null) {
|
|
1687
|
+
clearTimeout(sheetReadTimer);
|
|
1688
|
+
sheetReadTimer = null;
|
|
1689
|
+
}
|
|
1690
|
+
};
|
|
1691
|
+
|
|
1296
1692
|
/**
|
|
1297
|
-
* Gives the element a compositing layer for
|
|
1693
|
+
* Gives the element (or its pseudo-element) a compositing layer for
|
|
1298
1694
|
* `channel` from the task that starts the motion: Mobile Safari runs an
|
|
1299
1695
|
* animation whose start time is set from script on its compositor at its
|
|
1300
1696
|
* first commit only if the element already has a layer.
|
|
@@ -1347,6 +1743,8 @@ export function createAnimator(
|
|
|
1347
1743
|
promoted.clear();
|
|
1348
1744
|
if (target != null) {
|
|
1349
1745
|
writePromotion(target);
|
|
1746
|
+
// Its stylesheet may have changed its will-change since.
|
|
1747
|
+
readSheetWillChangeLater();
|
|
1350
1748
|
}
|
|
1351
1749
|
};
|
|
1352
1750
|
|
|
@@ -1362,6 +1760,7 @@ export function createAnimator(
|
|
|
1362
1760
|
time: number,
|
|
1363
1761
|
properties: Iterable<MotionProperty>,
|
|
1364
1762
|
at: number | undefined,
|
|
1763
|
+
start?: AnimateOptions['start'],
|
|
1365
1764
|
): StartGroup | null => {
|
|
1366
1765
|
if (target == null || typeof target.animate !== 'function') {
|
|
1367
1766
|
return null;
|
|
@@ -1389,7 +1788,11 @@ export function createAnimator(
|
|
|
1389
1788
|
}
|
|
1390
1789
|
return null;
|
|
1391
1790
|
}
|
|
1392
|
-
|
|
1791
|
+
// A call that continues motion starts now unless it asks for the
|
|
1792
|
+
// browser's start (`commit`). `presented` asks only for a call from rest:
|
|
1793
|
+
// an element still moving is not at rest, so a retarget starts now, from
|
|
1794
|
+
// the value and velocity on screen (spec:AST-094 FR6).
|
|
1795
|
+
for (const channel of start === 'commit' ? [] : channels) {
|
|
1393
1796
|
for (const property of CHANNELS[channel]) {
|
|
1394
1797
|
const segment = segments.get(property);
|
|
1395
1798
|
if (
|
|
@@ -1407,6 +1810,7 @@ export function createAnimator(
|
|
|
1407
1810
|
});
|
|
1408
1811
|
return {
|
|
1409
1812
|
provisional: time,
|
|
1813
|
+
fresh: false,
|
|
1410
1814
|
segments: [],
|
|
1411
1815
|
animations: [],
|
|
1412
1816
|
channels: new Set(),
|
|
@@ -1422,6 +1826,7 @@ export function createAnimator(
|
|
|
1422
1826
|
owner: HandleState,
|
|
1423
1827
|
changed: MotionProperty[],
|
|
1424
1828
|
time: number,
|
|
1829
|
+
presented = false,
|
|
1425
1830
|
) => {
|
|
1426
1831
|
if (group != null) {
|
|
1427
1832
|
for (const property of changed) {
|
|
@@ -1432,6 +1837,99 @@ export function createAnimator(
|
|
|
1432
1837
|
}
|
|
1433
1838
|
}
|
|
1434
1839
|
}
|
|
1840
|
+
if (presented && group != null && requestFrame != null) {
|
|
1841
|
+
// At rest until then: the animations, and the layer they promote, come
|
|
1842
|
+
// two frames later. Promoting now, a layer at rest for two frames, left
|
|
1843
|
+
// a stale paint of the element's rest in WebKit on iOS 26.2 (a title in
|
|
1844
|
+
// a scroller inside a clipped card) after the motion ended.
|
|
1845
|
+
// Each call waits its own two frames: one queued after another change
|
|
1846
|
+
// flushed the queue, or after an earlier call's first frame, still
|
|
1847
|
+
// waits its two.
|
|
1848
|
+
const call = {group, changed};
|
|
1849
|
+
deferredCalls.push(call);
|
|
1850
|
+
requestFrame(() => requestFrame(() => flushDeferredThrough(call)));
|
|
1851
|
+
return;
|
|
1852
|
+
}
|
|
1853
|
+
startCall(group, changed, time);
|
|
1854
|
+
};
|
|
1855
|
+
|
|
1856
|
+
/** Calls with `start: 'presented'` waiting for their second frame. */
|
|
1857
|
+
const deferredCalls: {group: StartGroup; changed: MotionProperty[]}[] = [];
|
|
1858
|
+
|
|
1859
|
+
/** Creates the animations of the given waiting calls, in call order. */
|
|
1860
|
+
const startDeferred = (
|
|
1861
|
+
calls: {group: StartGroup; changed: MotionProperty[]}[],
|
|
1862
|
+
) => {
|
|
1863
|
+
for (const {group, changed} of calls) {
|
|
1864
|
+
// Not a channel that holds the curve of a later call still waiting: a
|
|
1865
|
+
// later presented call that took a property over starts that channel
|
|
1866
|
+
// with its own two frames. Every other property starts here, whatever
|
|
1867
|
+
// its segment's group: a value Reduce Motion writes at once, or lands
|
|
1868
|
+
// under a dip, has no curve of this call's.
|
|
1869
|
+
const own: MotionProperty[] = [];
|
|
1870
|
+
let handedTo: StartGroup | null = null;
|
|
1871
|
+
for (const property of changed) {
|
|
1872
|
+
const holder = CHANNELS[CHANNEL_OF[property]]
|
|
1873
|
+
.map(other => segments.get(other)?.group)
|
|
1874
|
+
.find(
|
|
1875
|
+
waiting =>
|
|
1876
|
+
waiting != null &&
|
|
1877
|
+
waiting !== group &&
|
|
1878
|
+
deferredCalls.some(call => call.group === waiting),
|
|
1879
|
+
);
|
|
1880
|
+
if (holder == null) {
|
|
1881
|
+
own.push(property);
|
|
1882
|
+
continue;
|
|
1883
|
+
}
|
|
1884
|
+
// A curve of this call's in that channel never ran: the element held
|
|
1885
|
+
// it at its start. It starts with the later call, which creates the
|
|
1886
|
+
// channel, dated from that call's start, so the model reads what the
|
|
1887
|
+
// screen shows.
|
|
1888
|
+
const segment = segments.get(property);
|
|
1889
|
+
if (segment != null && segment.group === group) {
|
|
1890
|
+
segment.start += holder.provisional - group.provisional;
|
|
1891
|
+
segment.group = holder;
|
|
1892
|
+
holder.segments.push(segment);
|
|
1893
|
+
group.segments.splice(group.segments.indexOf(segment), 1);
|
|
1894
|
+
handedTo = holder;
|
|
1895
|
+
}
|
|
1896
|
+
}
|
|
1897
|
+
if (own.length === 0 && handedTo != null) {
|
|
1898
|
+
// Everything this call still plays starts with the later call.
|
|
1899
|
+
const adopter = handedTo;
|
|
1900
|
+
group.adoptedBy = adopter;
|
|
1901
|
+
void adopter.started.then(start => resolveGroup(group, start));
|
|
1902
|
+
continue;
|
|
1903
|
+
}
|
|
1904
|
+
// From the call's own time: the curve starts at the browser's commit.
|
|
1905
|
+
startCall(group, own, group.provisional);
|
|
1906
|
+
}
|
|
1907
|
+
};
|
|
1908
|
+
|
|
1909
|
+
/** Creates the animations of every waiting call, in call order. */
|
|
1910
|
+
const flushDeferred = () => {
|
|
1911
|
+
startDeferred(deferredCalls.splice(0));
|
|
1912
|
+
};
|
|
1913
|
+
|
|
1914
|
+
/**
|
|
1915
|
+
* A call's second frame: it starts, with every call queued before it (in
|
|
1916
|
+
* call order), unless another change created it already.
|
|
1917
|
+
*/
|
|
1918
|
+
const flushDeferredThrough = (call: {
|
|
1919
|
+
group: StartGroup;
|
|
1920
|
+
changed: MotionProperty[];
|
|
1921
|
+
}) => {
|
|
1922
|
+
const index = deferredCalls.indexOf(call);
|
|
1923
|
+
if (index >= 0) {
|
|
1924
|
+
startDeferred(deferredCalls.splice(0, index + 1));
|
|
1925
|
+
}
|
|
1926
|
+
};
|
|
1927
|
+
|
|
1928
|
+
const startCall = (
|
|
1929
|
+
group: StartGroup | null,
|
|
1930
|
+
changed: MotionProperty[],
|
|
1931
|
+
time: number,
|
|
1932
|
+
) => {
|
|
1435
1933
|
callGroup = group;
|
|
1436
1934
|
try {
|
|
1437
1935
|
commit(changed, time);
|
|
@@ -1446,6 +1944,15 @@ export function createAnimator(
|
|
|
1446
1944
|
return;
|
|
1447
1945
|
}
|
|
1448
1946
|
pendingGroups.add(group);
|
|
1947
|
+
group.fresh = true;
|
|
1948
|
+
// The task that creates the animations, not the call's: a presented
|
|
1949
|
+
// call's is its second frame's callback, wherever in its frame the call
|
|
1950
|
+
// was made.
|
|
1951
|
+
group.task = markTask(now(), now);
|
|
1952
|
+
group.madeInFrame = frameDepth > 0;
|
|
1953
|
+
queueMicrotask(() => {
|
|
1954
|
+
group.fresh = false;
|
|
1955
|
+
});
|
|
1449
1956
|
for (const animation of group.animations) {
|
|
1450
1957
|
// A cancel before the first frame rejects each one's ready promise.
|
|
1451
1958
|
(animation as Partial<Animation>).ready?.catch(() => {});
|
|
@@ -1459,7 +1966,34 @@ export function createAnimator(
|
|
|
1459
1966
|
// or when its compositor starts them (Chromium). Read it in that first
|
|
1460
1967
|
// frame, ahead of anything that might pause or seek the animations, and
|
|
1461
1968
|
// when `ready` settles.
|
|
1462
|
-
requestFrame?.(() =>
|
|
1969
|
+
requestFrame?.(() => {
|
|
1970
|
+
syncGroup(group);
|
|
1971
|
+
group.framed = true;
|
|
1972
|
+
// Chromium's compositor starts a composited animation when the frame
|
|
1973
|
+
// that commits it reaches it, and tells the page that start a frame or
|
|
1974
|
+
// more later (longer under load). Until then the call would read as
|
|
1975
|
+
// not started while the screen moves it, and a retarget or a rebase
|
|
1976
|
+
// would replay its curve from the start. A call made in a task, still
|
|
1977
|
+
// waiting in the first frame after it, starts now, which the compositor
|
|
1978
|
+
// then takes as its start: the time this frame runs, not its timestamp,
|
|
1979
|
+
// which after a block is the frame time from before the block. Only
|
|
1980
|
+
// when this frame is the one that commits it: not for a call made in a
|
|
1981
|
+
// frame callback, whose frame committed it already, nor when a block
|
|
1982
|
+
// ran between the call and this frame (more than LATE_START_MS), after
|
|
1983
|
+
// which this frame cannot tell a call made in a task from one a page's
|
|
1984
|
+
// own frame callback made; those keep the browser's start.
|
|
1985
|
+
if (
|
|
1986
|
+
!group.resolved &&
|
|
1987
|
+
group.madeInFrame !== true &&
|
|
1988
|
+
now() - (group.task?.first ?? group.provisional) <= LATE_START_MS &&
|
|
1989
|
+
group.animations.some(
|
|
1990
|
+
animation =>
|
|
1991
|
+
animation.startTime == null && animation.playState === 'running',
|
|
1992
|
+
)
|
|
1993
|
+
) {
|
|
1994
|
+
resolveGroup(group, now());
|
|
1995
|
+
}
|
|
1996
|
+
});
|
|
1463
1997
|
ready.then(
|
|
1464
1998
|
() => syncGroup(group),
|
|
1465
1999
|
() => settleCancelled(group),
|
|
@@ -1516,7 +2050,10 @@ export function createAnimator(
|
|
|
1516
2050
|
}
|
|
1517
2051
|
for (const animation of group.animations) {
|
|
1518
2052
|
if (animation.startTime != null) {
|
|
1519
|
-
resolveGroup(
|
|
2053
|
+
resolveGroup(
|
|
2054
|
+
group,
|
|
2055
|
+
startAfterBlock(group, Number(animation.startTime)),
|
|
2056
|
+
);
|
|
1520
2057
|
return;
|
|
1521
2058
|
}
|
|
1522
2059
|
}
|
|
@@ -1549,10 +2086,16 @@ export function createAnimator(
|
|
|
1549
2086
|
}
|
|
1550
2087
|
};
|
|
1551
2088
|
|
|
1552
|
-
/**
|
|
2089
|
+
/**
|
|
2090
|
+
* Reads the start of every call whose first frame may have been committed:
|
|
2091
|
+
* not those created in the running task, whose start the browser cannot
|
|
2092
|
+
* have set (reading it there can cost a style update per call).
|
|
2093
|
+
*/
|
|
1553
2094
|
const syncPending = () => {
|
|
1554
2095
|
for (const group of pendingGroups) {
|
|
1555
|
-
|
|
2096
|
+
if (!group.fresh) {
|
|
2097
|
+
syncGroup(group);
|
|
2098
|
+
}
|
|
1556
2099
|
}
|
|
1557
2100
|
syncFinished();
|
|
1558
2101
|
};
|
|
@@ -1580,6 +2123,55 @@ export function createAnimator(
|
|
|
1580
2123
|
}
|
|
1581
2124
|
};
|
|
1582
2125
|
|
|
2126
|
+
/**
|
|
2127
|
+
* The start of a call from rest, on the frame that commits it. Chromium,
|
|
2128
|
+
* like Core Animation, starts a pending animation when it commits it, so a
|
|
2129
|
+
* main-thread block later in the call's task delays the motion; WebKit
|
|
2130
|
+
* dates it at its last frame time before that task, so the first frame
|
|
2131
|
+
* after the block would show it skipped into its curve. When the task ran
|
|
2132
|
+
* on more than LATE_START_MS past its first call, a start the browser put
|
|
2133
|
+
* by the task's first animations (a presented call's second frame, not the
|
|
2134
|
+
* call) and more than LATE_START_MS before the call's first read (its
|
|
2135
|
+
* `ready`, once the task has ended, or the first frame after it) moves to
|
|
2136
|
+
* that read, with every animation of the call, and every call of the task
|
|
2137
|
+
* moves to the same read. A shorter task, or a read other tasks delay,
|
|
2138
|
+
* keeps the browser's start.
|
|
2139
|
+
*/
|
|
2140
|
+
const startAfterBlock = (group: StartGroup, start: number): number => {
|
|
2141
|
+
const timeline =
|
|
2142
|
+
typeof document === 'undefined'
|
|
2143
|
+
? null
|
|
2144
|
+
: (document.timeline?.currentTime as number | null | undefined);
|
|
2145
|
+
// A start well after the animations were created is the browser's
|
|
2146
|
+
// commit of them.
|
|
2147
|
+
if (
|
|
2148
|
+
timeline == null ||
|
|
2149
|
+
group.framed === true ||
|
|
2150
|
+
start > (group.task?.first ?? group.provisional) + LATE_START_MS
|
|
2151
|
+
) {
|
|
2152
|
+
return start;
|
|
2153
|
+
}
|
|
2154
|
+
const {task} = group;
|
|
2155
|
+
// A read in the task's first microtasks comes after its end too.
|
|
2156
|
+
const ended = task?.ended ?? now();
|
|
2157
|
+
if (task == null || ended - task.first <= LATE_START_MS) {
|
|
2158
|
+
return start;
|
|
2159
|
+
}
|
|
2160
|
+
// Read once the task has ended (its `ready`) or in the first frame after
|
|
2161
|
+
// it, both after the block; the task's other calls take the same read.
|
|
2162
|
+
const at = task.at ?? Math.max(now(), timeline);
|
|
2163
|
+
if (at - start <= LATE_START_MS) {
|
|
2164
|
+
return start;
|
|
2165
|
+
}
|
|
2166
|
+
task.at = at;
|
|
2167
|
+
for (const animation of group.animations) {
|
|
2168
|
+
if (animation.playState !== 'idle') {
|
|
2169
|
+
animation.startTime = at;
|
|
2170
|
+
}
|
|
2171
|
+
}
|
|
2172
|
+
return at;
|
|
2173
|
+
};
|
|
2174
|
+
|
|
1583
2175
|
/** Moves a call from rest onto the time the browser started it. */
|
|
1584
2176
|
const resolveGroup = (group: StartGroup, start: number) => {
|
|
1585
2177
|
if (group.resolved) {
|
|
@@ -1621,10 +2213,7 @@ export function createAnimator(
|
|
|
1621
2213
|
.filter(segment => segment.owner === owner)
|
|
1622
2214
|
.map(segment => segment.start + segment.duration);
|
|
1623
2215
|
owner.timer = setTimeout(
|
|
1624
|
-
() =>
|
|
1625
|
-
owner.timer = null;
|
|
1626
|
-
settle(owner, true);
|
|
1627
|
-
},
|
|
2216
|
+
() => settleAtEnd(owner),
|
|
1628
2217
|
Math.max(0, Math.max(start, ...ends) - now()),
|
|
1629
2218
|
);
|
|
1630
2219
|
}
|
|
@@ -1662,12 +2251,48 @@ export function createAnimator(
|
|
|
1662
2251
|
owner.resolve(finished);
|
|
1663
2252
|
};
|
|
1664
2253
|
|
|
2254
|
+
/**
|
|
2255
|
+
* A handle whose curves have reached their end on the wall clock finishes,
|
|
2256
|
+
* unless a sampler holds one of its animations (paused, or sought back):
|
|
2257
|
+
* then it waits on that animation's own time, as retiring does
|
|
2258
|
+
* (scheduleRetire), so `finished` never resolves under motion still on
|
|
2259
|
+
* screen.
|
|
2260
|
+
*/
|
|
2261
|
+
const settleAtEnd = (owner: HandleState) => {
|
|
2262
|
+
owner.timer = null;
|
|
2263
|
+
let wait = 0;
|
|
2264
|
+
for (const [channel, animation] of running) {
|
|
2265
|
+
if (
|
|
2266
|
+
!CHANNELS[channel].some(
|
|
2267
|
+
property => segments.get(property)?.owner === owner,
|
|
2268
|
+
)
|
|
2269
|
+
) {
|
|
2270
|
+
continue;
|
|
2271
|
+
}
|
|
2272
|
+
const remaining = remainingCurve(animation);
|
|
2273
|
+
if (remaining != null && remaining > 0) {
|
|
2274
|
+
wait = Math.max(
|
|
2275
|
+
wait,
|
|
2276
|
+
animation.playState === 'paused'
|
|
2277
|
+
? RETIRE_RECHECK_MS
|
|
2278
|
+
: Math.max(remaining, END_RECHECK_MS),
|
|
2279
|
+
);
|
|
2280
|
+
}
|
|
2281
|
+
}
|
|
2282
|
+
if (wait > 0) {
|
|
2283
|
+
owner.timer = setTimeout(() => settleAtEnd(owner), wait);
|
|
2284
|
+
return;
|
|
2285
|
+
}
|
|
2286
|
+
settle(owner, true);
|
|
2287
|
+
};
|
|
2288
|
+
|
|
1665
2289
|
const makeHandle = (
|
|
1666
2290
|
owner: HandleState,
|
|
1667
2291
|
properties: MotionProperty[],
|
|
1668
2292
|
finished: Promise<boolean>,
|
|
1669
2293
|
time: number,
|
|
1670
2294
|
group: StartGroup | null = null,
|
|
2295
|
+
settlesWithLanding = false,
|
|
1671
2296
|
): MotionHandle => {
|
|
1672
2297
|
const ends = properties.map(p => {
|
|
1673
2298
|
const segment = segments.get(p);
|
|
@@ -1676,23 +2301,45 @@ export function createAnimator(
|
|
|
1676
2301
|
: time;
|
|
1677
2302
|
});
|
|
1678
2303
|
const end = Math.max(time, ...ends);
|
|
1679
|
-
if (
|
|
2304
|
+
if (settlesWithLanding) {
|
|
2305
|
+
// The landing it joined settles it.
|
|
2306
|
+
} else if (properties.length === 0 || end <= time) {
|
|
1680
2307
|
settle(owner, true);
|
|
1681
2308
|
} else {
|
|
1682
2309
|
// Interruptions settle false as they happen (interrupt); reaching the
|
|
1683
2310
|
// end untouched is completion.
|
|
1684
2311
|
owner.timer = setTimeout(
|
|
1685
|
-
() =>
|
|
1686
|
-
owner.timer = null;
|
|
1687
|
-
settle(owner, true);
|
|
1688
|
-
},
|
|
2312
|
+
() => settleAtEnd(owner),
|
|
1689
2313
|
Math.max(0, end - now()),
|
|
1690
2314
|
);
|
|
1691
2315
|
}
|
|
2316
|
+
// The call's own curves, as it started them.
|
|
2317
|
+
const curves = new Map<MotionProperty, Segment>();
|
|
2318
|
+
for (const property of properties) {
|
|
2319
|
+
const segment = segments.get(property);
|
|
2320
|
+
if (segment != null && segment.owner === owner) {
|
|
2321
|
+
curves.set(property, segment);
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
1692
2324
|
const handle: MotionHandle = {
|
|
1693
2325
|
properties,
|
|
1694
2326
|
finished,
|
|
1695
2327
|
started: group?.started ?? Promise.resolve(time),
|
|
2328
|
+
curve: property => {
|
|
2329
|
+
const segment = curves.get(property === 'scale' ? 'scaleX' : property);
|
|
2330
|
+
if (segment == null) {
|
|
2331
|
+
return null;
|
|
2332
|
+
}
|
|
2333
|
+
return {
|
|
2334
|
+
duration: segment.duration / 1000,
|
|
2335
|
+
at: t =>
|
|
2336
|
+
t * 1000 >= segment.duration
|
|
2337
|
+
? segment.target
|
|
2338
|
+
: segment.at(Math.max(0, t * 1000)),
|
|
2339
|
+
velocity: t =>
|
|
2340
|
+
t * 1000 >= segment.duration ? 0 : segment.speed(t * 1000),
|
|
2341
|
+
};
|
|
2342
|
+
},
|
|
1696
2343
|
value: (property, at = now()) => {
|
|
1697
2344
|
syncPending();
|
|
1698
2345
|
return valueAt(property, at);
|
|
@@ -1751,7 +2398,9 @@ export function createAnimator(
|
|
|
1751
2398
|
if (from === to && velocity === 0) {
|
|
1752
2399
|
return null;
|
|
1753
2400
|
}
|
|
1754
|
-
|
|
2401
|
+
// The motion role it plays: its table value (DEC-15).
|
|
2402
|
+
const resolved = resolveMotion(target, spring);
|
|
2403
|
+
const curve = solveSpring(toSpring(resolved), {from, to, velocity});
|
|
1755
2404
|
const duration = Math.min(
|
|
1756
2405
|
MAX_DURATION_MS,
|
|
1757
2406
|
curve.settleTime(SETTLE_THRESHOLD[property]) * 1000,
|
|
@@ -1764,7 +2413,81 @@ export function createAnimator(
|
|
|
1764
2413
|
speed: t => curve.velocity(t / 1000),
|
|
1765
2414
|
jumps: [],
|
|
1766
2415
|
owner,
|
|
1767
|
-
spring,
|
|
2416
|
+
spring: resolved,
|
|
2417
|
+
};
|
|
2418
|
+
};
|
|
2419
|
+
|
|
2420
|
+
/** The retarget of `additive`: the old curve plus a spring of the difference. */
|
|
2421
|
+
const additiveSegment = (
|
|
2422
|
+
owner: HandleState,
|
|
2423
|
+
property: MotionProperty,
|
|
2424
|
+
start: number,
|
|
2425
|
+
to: number,
|
|
2426
|
+
spring: SpringDescription,
|
|
2427
|
+
old: Segment,
|
|
2428
|
+
): Segment => {
|
|
2429
|
+
const oldEnd = old.start + old.duration;
|
|
2430
|
+
const resolved = resolveMotion(target, spring);
|
|
2431
|
+
const delta = solveSpring(toSpring(resolved), {
|
|
2432
|
+
from: 0,
|
|
2433
|
+
to: to - old.target,
|
|
2434
|
+
velocity: 0,
|
|
2435
|
+
});
|
|
2436
|
+
const deltaMs = Math.min(
|
|
2437
|
+
MAX_DURATION_MS,
|
|
2438
|
+
delta.settleTime(SETTLE_THRESHOLD[property]) * 1000,
|
|
2439
|
+
);
|
|
2440
|
+
const ownAt = (t: number) =>
|
|
2441
|
+
t >= deltaMs ? to - old.target : delta.value(t / 1000);
|
|
2442
|
+
const oldAt = (time: number) =>
|
|
2443
|
+
time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
|
|
2444
|
+
return {
|
|
2445
|
+
start,
|
|
2446
|
+
duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, deltaMs)),
|
|
2447
|
+
target: to,
|
|
2448
|
+
at: t => oldAt(start + t) + ownAt(t),
|
|
2449
|
+
speed: t =>
|
|
2450
|
+
(start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) +
|
|
2451
|
+
(t >= deltaMs ? 0 : delta.velocity(t / 1000)),
|
|
2452
|
+
jumps: old.jumps
|
|
2453
|
+
.map(jump => old.start + jump - start)
|
|
2454
|
+
.filter(jump => jump > 0),
|
|
2455
|
+
owner,
|
|
2456
|
+
spring: resolved,
|
|
2457
|
+
};
|
|
2458
|
+
};
|
|
2459
|
+
|
|
2460
|
+
/**
|
|
2461
|
+
* `additive` for a played curve: the old curve plus the new curve's shape,
|
|
2462
|
+
* scaled to the difference between the two targets.
|
|
2463
|
+
*/
|
|
2464
|
+
const additiveCurveSegment = (
|
|
2465
|
+
owner: HandleState,
|
|
2466
|
+
start: number,
|
|
2467
|
+
curve: MotionCurve,
|
|
2468
|
+
old: Segment,
|
|
2469
|
+
): Segment => {
|
|
2470
|
+
const from = curve.at(0);
|
|
2471
|
+
const to = curve.at(curve.duration);
|
|
2472
|
+
const scale = (to - old.target) / (to - from);
|
|
2473
|
+
const ms = Math.min(MAX_DURATION_MS, curve.duration * 1000);
|
|
2474
|
+
const oldEnd = old.start + old.duration;
|
|
2475
|
+
const oldAt = (time: number) =>
|
|
2476
|
+
time >= oldEnd ? old.target : old.at(Math.max(0, time - old.start));
|
|
2477
|
+
return {
|
|
2478
|
+
start,
|
|
2479
|
+
duration: Math.min(MAX_DURATION_MS, Math.max(oldEnd - start, ms)),
|
|
2480
|
+
target: to,
|
|
2481
|
+
at: t =>
|
|
2482
|
+
oldAt(start + t) +
|
|
2483
|
+
(t >= ms ? to - old.target : (curve.at(t / 1000) - from) * scale),
|
|
2484
|
+
speed: t =>
|
|
2485
|
+
(start + t >= oldEnd ? 0 : old.speed(start + t - old.start)) +
|
|
2486
|
+
(t >= ms ? 0 : curve.velocity(t / 1000) * scale),
|
|
2487
|
+
jumps: old.jumps
|
|
2488
|
+
.map(jump => old.start + jump - start)
|
|
2489
|
+
.filter(jump => jump > 0),
|
|
2490
|
+
owner,
|
|
1768
2491
|
};
|
|
1769
2492
|
};
|
|
1770
2493
|
|
|
@@ -1774,7 +2497,10 @@ export function createAnimator(
|
|
|
1774
2497
|
stops: ReadonlyArray<{at: number; value: number}>,
|
|
1775
2498
|
jumps: ReadonlyArray<number> = [],
|
|
1776
2499
|
): Segment => {
|
|
1777
|
-
|
|
2500
|
+
registerReducedMotionCrossFade();
|
|
2501
|
+
const ease = cubicBezier(
|
|
2502
|
+
resolveMotion(target, reducedMotionCrossFade.curve),
|
|
2503
|
+
);
|
|
1778
2504
|
const duration = stops[stops.length - 1].at;
|
|
1779
2505
|
const at = (t: number) => {
|
|
1780
2506
|
for (let i = 0; i + 1 < stops.length; i++) {
|
|
@@ -1897,6 +2623,27 @@ export function createAnimator(
|
|
|
1897
2623
|
return {carried, owners};
|
|
1898
2624
|
};
|
|
1899
2625
|
|
|
2626
|
+
/**
|
|
2627
|
+
* A call joins the newest waiting dip: it takes the landing over and
|
|
2628
|
+
* settles when the dip ends, and the call it replaces lands with it. Each
|
|
2629
|
+
* value keeps the call whose move it is.
|
|
2630
|
+
*/
|
|
2631
|
+
const joinWaitingDip = (owner: HandleState) => {
|
|
2632
|
+
const dip = [...landings].reverse().find(landing => landing.fadeIn != null);
|
|
2633
|
+
if (dip == null) {
|
|
2634
|
+
settle(owner, true);
|
|
2635
|
+
return;
|
|
2636
|
+
}
|
|
2637
|
+
for (const property of dip.values.keys()) {
|
|
2638
|
+
if (!dip.owners.has(property)) {
|
|
2639
|
+
dip.owners.set(property, dip.owner);
|
|
2640
|
+
}
|
|
2641
|
+
}
|
|
2642
|
+
dip.carried.push(dip.owner);
|
|
2643
|
+
carriedOwners.add(dip.owner);
|
|
2644
|
+
dip.owner = owner;
|
|
2645
|
+
};
|
|
2646
|
+
|
|
1900
2647
|
/** Where opacity is heading: past a waiting landing's fade back in. */
|
|
1901
2648
|
const opacityHeading = (): number => {
|
|
1902
2649
|
let to = finalValue('opacity');
|
|
@@ -1959,8 +2706,9 @@ export function createAnimator(
|
|
|
1959
2706
|
* never an animation (DR2: opacity only), so it is never shown in the wrong
|
|
1960
2707
|
* place. In a dip the fade back in starts from here and takes what is left
|
|
1961
2708
|
* of the cross-fade, so the dip ends when it was due even when a busy main
|
|
1962
|
-
* thread runs this timer late; past the whole fade back in (
|
|
1963
|
-
*
|
|
2709
|
+
* thread runs this timer late; past the whole fade back in (100 ms late or
|
|
2710
|
+
* more) the element appears at once where it landed, with no animation,
|
|
2711
|
+
* and the call settles then.
|
|
1964
2712
|
*/
|
|
1965
2713
|
const land = (landing: Landing) => {
|
|
1966
2714
|
landings.delete(landing);
|
|
@@ -1973,13 +2721,16 @@ export function createAnimator(
|
|
|
1973
2721
|
changed.push(property);
|
|
1974
2722
|
}
|
|
1975
2723
|
let end = time;
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
2724
|
+
// The fade back in takes what is left of the cross-fade: a timer that a
|
|
2725
|
+
// busy main thread runs late shortens it, so the dip still ends when it
|
|
2726
|
+
// was due (design:reduced-motion DR2, 200 ms or less), and the element is
|
|
2727
|
+
// never shown before it lands. Past the whole fade back in nothing is
|
|
2728
|
+
// left: the element appears at once, a plain write with no fade for the
|
|
2729
|
+
// browser to start a frame later, so the call settles showing it.
|
|
2730
|
+
const late = landing.due == null ? 0 : Math.max(0, time - landing.due);
|
|
2731
|
+
const appears = landing.fadeIn != null && late >= landing.fadeIn.ms;
|
|
2732
|
+
if (landing.fadeIn != null && !appears) {
|
|
2733
|
+
const ms = landing.fadeIn.ms - late;
|
|
1983
2734
|
segments.set(
|
|
1984
2735
|
'opacity',
|
|
1985
2736
|
fadeSegment(landing.owner, time, [
|
|
@@ -1989,6 +2740,13 @@ export function createAnimator(
|
|
|
1989
2740
|
);
|
|
1990
2741
|
changed.push('opacity');
|
|
1991
2742
|
end = time + ms;
|
|
2743
|
+
} else if (landing.fadeIn != null) {
|
|
2744
|
+
segments.delete('opacity');
|
|
2745
|
+
resting.opacity =
|
|
2746
|
+
landing.fadeIn.isBorrowed === true
|
|
2747
|
+
? IDENTITY.opacity
|
|
2748
|
+
: landing.fadeIn.to;
|
|
2749
|
+
changed.push('opacity');
|
|
1992
2750
|
} else if (landing.restore != null) {
|
|
1993
2751
|
segments.delete('opacity');
|
|
1994
2752
|
resting.opacity =
|
|
@@ -1996,11 +2754,13 @@ export function createAnimator(
|
|
|
1996
2754
|
changed.push('opacity');
|
|
1997
2755
|
}
|
|
1998
2756
|
commit(changed, time);
|
|
1999
|
-
if (
|
|
2757
|
+
if (
|
|
2758
|
+
landing.restoreIsBorrowed === true ||
|
|
2759
|
+
(appears && landing.fadeIn?.isBorrowed === true)
|
|
2760
|
+
) {
|
|
2000
2761
|
// The stylesheet owns its opacity again.
|
|
2001
2762
|
releaseOwnOpacity();
|
|
2002
|
-
}
|
|
2003
|
-
if (landing.fadeIn?.isBorrowed === true) {
|
|
2763
|
+
} else if (landing.fadeIn?.isBorrowed === true) {
|
|
2004
2764
|
// The fade back in returns to the stylesheet's opacity: it owns it
|
|
2005
2765
|
// again once the fade ends (releaseIdentity).
|
|
2006
2766
|
borrowedOpacity = landing.fadeIn.to;
|
|
@@ -2020,10 +2780,7 @@ export function createAnimator(
|
|
|
2020
2780
|
settle(owner, true);
|
|
2021
2781
|
} else {
|
|
2022
2782
|
owner.timer = setTimeout(
|
|
2023
|
-
() =>
|
|
2024
|
-
owner.timer = null;
|
|
2025
|
-
settle(owner, true);
|
|
2026
|
-
},
|
|
2783
|
+
() => settleAtEnd(owner),
|
|
2027
2784
|
Math.max(0, end - now()),
|
|
2028
2785
|
);
|
|
2029
2786
|
}
|
|
@@ -2113,6 +2870,9 @@ export function createAnimator(
|
|
|
2113
2870
|
get hasPendingLanding() {
|
|
2114
2871
|
return landings.size > 0;
|
|
2115
2872
|
},
|
|
2873
|
+
get hasWaitingDip() {
|
|
2874
|
+
return [...landings].some(landing => landing.fadeIn != null);
|
|
2875
|
+
},
|
|
2116
2876
|
};
|
|
2117
2877
|
|
|
2118
2878
|
/**
|
|
@@ -2152,6 +2912,7 @@ export function createAnimator(
|
|
|
2152
2912
|
holds: plan.holds,
|
|
2153
2913
|
landing: plan.landing,
|
|
2154
2914
|
borrowed: plan.borrowed,
|
|
2915
|
+
joins: plan.joins,
|
|
2155
2916
|
};
|
|
2156
2917
|
};
|
|
2157
2918
|
|
|
@@ -2173,6 +2934,7 @@ export function createAnimator(
|
|
|
2173
2934
|
if (next === target) {
|
|
2174
2935
|
return;
|
|
2175
2936
|
}
|
|
2937
|
+
flushDeferred();
|
|
2176
2938
|
if (next == null) {
|
|
2177
2939
|
// Unmount, unless a node replaces this one in the same task (React's
|
|
2178
2940
|
// replacement order: attach(null), then the new node): nothing is
|
|
@@ -2208,6 +2970,9 @@ export function createAnimator(
|
|
|
2208
2970
|
}
|
|
2209
2971
|
retireTimers.clear();
|
|
2210
2972
|
demote();
|
|
2973
|
+
// demote() asks for a fresh will-change read of the node it
|
|
2974
|
+
// demotes; a detached node gets none.
|
|
2975
|
+
cancelSheetWillChangeRead();
|
|
2211
2976
|
});
|
|
2212
2977
|
lastDetached = null;
|
|
2213
2978
|
const time = now();
|
|
@@ -2226,9 +2991,25 @@ export function createAnimator(
|
|
|
2226
2991
|
}
|
|
2227
2992
|
// After the landing's commit, which can promote the element again.
|
|
2228
2993
|
demote();
|
|
2994
|
+
// A pseudo-element holds an identity with a static animation, which the
|
|
2995
|
+
// cancel below drops: note the channels to hold again on the next node
|
|
2996
|
+
// (never a borrowed opacity, which is the stylesheet's).
|
|
2229
2997
|
const isOpacityBorrowed =
|
|
2230
2998
|
borrowedOpacity != null ||
|
|
2231
2999
|
[...landings].some(landing => landing.restoreIsBorrowed === true);
|
|
3000
|
+
const pseudoHeld =
|
|
3001
|
+
pseudoElement == null || target == null
|
|
3002
|
+
? null
|
|
3003
|
+
: new Set(
|
|
3004
|
+
(Object.keys(CHANNELS) as Channel[]).filter(
|
|
3005
|
+
channel =>
|
|
3006
|
+
running.has(channel) &&
|
|
3007
|
+
!(channel === 'opacity' && isOpacityBorrowed) &&
|
|
3008
|
+
CHANNELS[channel].every(
|
|
3009
|
+
p => !segments.has(p) && resting[p] === IDENTITY[p],
|
|
3010
|
+
),
|
|
3011
|
+
),
|
|
3012
|
+
);
|
|
2232
3013
|
for (const animation of running.values()) {
|
|
2233
3014
|
animation.cancel();
|
|
2234
3015
|
}
|
|
@@ -2248,16 +3029,21 @@ export function createAnimator(
|
|
|
2248
3029
|
// differs, kept through a detach for the node that comes next.
|
|
2249
3030
|
if (target != null) {
|
|
2250
3031
|
const outgoing = target;
|
|
2251
|
-
heldIdentity =
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
3032
|
+
heldIdentity =
|
|
3033
|
+
pseudoHeld ??
|
|
3034
|
+
new Set(
|
|
3035
|
+
(Object.keys(CHANNELS) as Channel[]).filter(
|
|
3036
|
+
channel =>
|
|
3037
|
+
outgoing.style.getPropertyValue(channel) ===
|
|
3038
|
+
IDENTITY_TEXT[channel],
|
|
3039
|
+
),
|
|
3040
|
+
);
|
|
2258
3041
|
}
|
|
2259
3042
|
const held = heldIdentity;
|
|
2260
3043
|
target = next;
|
|
3044
|
+
// A new node: its own will-change is read again.
|
|
3045
|
+
cancelSheetWillChangeRead();
|
|
3046
|
+
sheetWillChangeRead = false;
|
|
2261
3047
|
if (target == null) {
|
|
2262
3048
|
return;
|
|
2263
3049
|
}
|
|
@@ -2284,11 +3070,17 @@ export function createAnimator(
|
|
|
2284
3070
|
} else if (held.has(channel)) {
|
|
2285
3071
|
// An identity the animator held inline over a stylesheet that
|
|
2286
3072
|
// differs goes onto the new node too (writeInline keeps it only
|
|
2287
|
-
// where the new node's stylesheet still differs)
|
|
2288
|
-
|
|
3073
|
+
// where the new node's stylesheet still differs); a pseudo-element's
|
|
3074
|
+
// is held again.
|
|
3075
|
+
if (pseudoElement != null) {
|
|
3076
|
+
hold(channel, time);
|
|
3077
|
+
} else {
|
|
3078
|
+
writeInline(channel, property => resting[property]);
|
|
3079
|
+
}
|
|
2289
3080
|
}
|
|
2290
3081
|
}
|
|
2291
3082
|
flushReleases();
|
|
3083
|
+
readSheetWillChangeLater();
|
|
2292
3084
|
},
|
|
2293
3085
|
|
|
2294
3086
|
get(property, time = now()) {
|
|
@@ -2301,8 +3093,9 @@ export function createAnimator(
|
|
|
2301
3093
|
return velocityAt(property === 'scale' ? 'scaleX' : property, time);
|
|
2302
3094
|
},
|
|
2303
3095
|
|
|
2304
|
-
set(values) {
|
|
3096
|
+
set(values, setOptions = {}) {
|
|
2305
3097
|
syncPending();
|
|
3098
|
+
flushDeferred();
|
|
2306
3099
|
const time = now();
|
|
2307
3100
|
const next = expand(values);
|
|
2308
3101
|
for (const [property, value] of Object.entries(next) as [
|
|
@@ -2314,14 +3107,19 @@ export function createAnimator(
|
|
|
2314
3107
|
resting[property] = value;
|
|
2315
3108
|
}
|
|
2316
3109
|
// Direct manipulation: the layer makes each write a composite only.
|
|
2317
|
-
|
|
2318
|
-
|
|
3110
|
+
if (setOptions.promote !== false) {
|
|
3111
|
+
for (const property of Object.keys(next) as MotionProperty[]) {
|
|
3112
|
+
promote(CHANNEL_OF[property]);
|
|
3113
|
+
}
|
|
2319
3114
|
}
|
|
2320
3115
|
commit(Object.keys(next) as MotionProperty[], time);
|
|
2321
3116
|
},
|
|
2322
3117
|
|
|
2323
3118
|
animate(to, transition, animateOptions = {}) {
|
|
2324
3119
|
syncPending();
|
|
3120
|
+
if (animateOptions.start !== 'presented') {
|
|
3121
|
+
flushDeferred();
|
|
3122
|
+
}
|
|
2325
3123
|
const time = animateOptions.at ?? now();
|
|
2326
3124
|
const targets = expand(to);
|
|
2327
3125
|
const velocities = expand(transition.velocity ?? {});
|
|
@@ -2343,6 +3141,21 @@ export function createAnimator(
|
|
|
2343
3141
|
Object.assign(next, plan.next);
|
|
2344
3142
|
} else {
|
|
2345
3143
|
for (const property of properties) {
|
|
3144
|
+
const running =
|
|
3145
|
+
animateOptions.additive === true && velocities[property] == null
|
|
3146
|
+
? segmentAt(property, time)
|
|
3147
|
+
: null;
|
|
3148
|
+
if (running != null && !isHeld(running)) {
|
|
3149
|
+
next[property] = additiveSegment(
|
|
3150
|
+
owner,
|
|
3151
|
+
property,
|
|
3152
|
+
time,
|
|
3153
|
+
targets[property] as number,
|
|
3154
|
+
transition.spring,
|
|
3155
|
+
running,
|
|
3156
|
+
);
|
|
3157
|
+
continue;
|
|
3158
|
+
}
|
|
2346
3159
|
const velocity = velocities[property] ?? velocityAt(property, time);
|
|
2347
3160
|
next[property] = springSegment(
|
|
2348
3161
|
owner,
|
|
@@ -2359,6 +3172,7 @@ export function createAnimator(
|
|
|
2359
3172
|
time,
|
|
2360
3173
|
Object.keys(next) as MotionProperty[],
|
|
2361
3174
|
animateOptions.at,
|
|
3175
|
+
animateOptions.start,
|
|
2362
3176
|
);
|
|
2363
3177
|
const adopted =
|
|
2364
3178
|
plan?.landing != null
|
|
@@ -2383,12 +3197,24 @@ export function createAnimator(
|
|
|
2383
3197
|
segments.set(property, segment);
|
|
2384
3198
|
}
|
|
2385
3199
|
}
|
|
2386
|
-
commitCall(
|
|
3200
|
+
commitCall(
|
|
3201
|
+
group,
|
|
3202
|
+
owner,
|
|
3203
|
+
changed,
|
|
3204
|
+
time,
|
|
3205
|
+
animateOptions.start === 'presented' && animateOptions.at == null,
|
|
3206
|
+
);
|
|
2387
3207
|
if (plan?.borrowed != null) {
|
|
2388
3208
|
// The dip's own commit cleared it; the borrow lasts the dip.
|
|
2389
3209
|
borrowedOpacity = plan.borrowed;
|
|
2390
3210
|
}
|
|
2391
|
-
|
|
3211
|
+
if (plan?.joins === true) {
|
|
3212
|
+
joinWaitingDip(owner);
|
|
3213
|
+
}
|
|
3214
|
+
const handle =
|
|
3215
|
+
plan?.joins === true
|
|
3216
|
+
? makeHandle(owner, ['opacity'], finished, time, group, true)
|
|
3217
|
+
: makeHandle(owner, changed, finished, time, group);
|
|
2392
3218
|
if (plan?.landing != null) {
|
|
2393
3219
|
scheduleLanding(owner, handle.started, plan.landing, adopted);
|
|
2394
3220
|
}
|
|
@@ -2397,6 +3223,9 @@ export function createAnimator(
|
|
|
2397
3223
|
|
|
2398
3224
|
play(curves, playOptions = {}) {
|
|
2399
3225
|
syncPending();
|
|
3226
|
+
if (playOptions.start !== 'presented') {
|
|
3227
|
+
flushDeferred();
|
|
3228
|
+
}
|
|
2400
3229
|
const time = playOptions.at ?? now();
|
|
2401
3230
|
const {owner, finished} = newOwner();
|
|
2402
3231
|
const byProperty: Partial<Record<MotionProperty, MotionCurve>> = {};
|
|
@@ -2444,6 +3273,17 @@ export function createAnimator(
|
|
|
2444
3273
|
continue;
|
|
2445
3274
|
}
|
|
2446
3275
|
const curve = byProperty[property] as MotionCurve;
|
|
3276
|
+
const running =
|
|
3277
|
+
playOptions.additive === true ? segmentAt(property, time) : null;
|
|
3278
|
+
if (
|
|
3279
|
+
running != null &&
|
|
3280
|
+
!isHeld(running) &&
|
|
3281
|
+
curve.duration > 0 &&
|
|
3282
|
+
Math.abs(curve.at(curve.duration) - curve.at(0)) > 1e-9
|
|
3283
|
+
) {
|
|
3284
|
+
next[property] = additiveCurveSegment(owner, time, curve, running);
|
|
3285
|
+
continue;
|
|
3286
|
+
}
|
|
2447
3287
|
next[property] =
|
|
2448
3288
|
curve.duration === 0
|
|
2449
3289
|
? null
|
|
@@ -2461,6 +3301,7 @@ export function createAnimator(
|
|
|
2461
3301
|
time,
|
|
2462
3302
|
Object.keys(next) as MotionProperty[],
|
|
2463
3303
|
playOptions.at,
|
|
3304
|
+
playOptions.start,
|
|
2464
3305
|
);
|
|
2465
3306
|
const adopted =
|
|
2466
3307
|
plan?.landing != null
|
|
@@ -2485,12 +3326,24 @@ export function createAnimator(
|
|
|
2485
3326
|
segments.set(property, segment);
|
|
2486
3327
|
}
|
|
2487
3328
|
}
|
|
2488
|
-
commitCall(
|
|
3329
|
+
commitCall(
|
|
3330
|
+
group,
|
|
3331
|
+
owner,
|
|
3332
|
+
changed,
|
|
3333
|
+
time,
|
|
3334
|
+
playOptions.start === 'presented' && playOptions.at == null,
|
|
3335
|
+
);
|
|
2489
3336
|
if (plan?.borrowed != null) {
|
|
2490
3337
|
// The dip's own commit cleared it; the borrow lasts the dip.
|
|
2491
3338
|
borrowedOpacity = plan.borrowed;
|
|
2492
3339
|
}
|
|
2493
|
-
|
|
3340
|
+
if (plan?.joins === true) {
|
|
3341
|
+
joinWaitingDip(owner);
|
|
3342
|
+
}
|
|
3343
|
+
const handle =
|
|
3344
|
+
plan?.joins === true
|
|
3345
|
+
? makeHandle(owner, ['opacity'], finished, time, group, true)
|
|
3346
|
+
: makeHandle(owner, changed, finished, time, group);
|
|
2494
3347
|
if (plan?.landing != null) {
|
|
2495
3348
|
scheduleLanding(owner, handle.started, plan.landing, adopted);
|
|
2496
3349
|
}
|
|
@@ -2499,6 +3352,7 @@ export function createAnimator(
|
|
|
2499
3352
|
|
|
2500
3353
|
decay(curves, decayOptions = {}) {
|
|
2501
3354
|
syncPending();
|
|
3355
|
+
flushDeferred();
|
|
2502
3356
|
const time = decayOptions.at ?? now();
|
|
2503
3357
|
// Under Reduce Motion only momentum keeps moving (DR2, DEC-2): a curve
|
|
2504
3358
|
// that is a transition plays as `animate` does, a cross-fade or at once.
|
|
@@ -2580,6 +3434,7 @@ export function createAnimator(
|
|
|
2580
3434
|
|
|
2581
3435
|
stop(properties) {
|
|
2582
3436
|
syncPending();
|
|
3437
|
+
flushDeferred();
|
|
2583
3438
|
const time = now();
|
|
2584
3439
|
const list = properties == null ? PROPERTIES : expandList(properties);
|
|
2585
3440
|
const changed: MotionProperty[] = [];
|
|
@@ -2615,6 +3470,7 @@ export function createAnimator(
|
|
|
2615
3470
|
|
|
2616
3471
|
rebase(deltas, rebaseOptions = {}) {
|
|
2617
3472
|
syncPending();
|
|
3473
|
+
flushDeferred();
|
|
2618
3474
|
const time = rebaseOptions.at ?? now();
|
|
2619
3475
|
const changed: MotionProperty[] = [];
|
|
2620
3476
|
const owners = new Set<HandleState>();
|
|
@@ -2694,10 +3550,7 @@ export function createAnimator(
|
|
|
2694
3550
|
}
|
|
2695
3551
|
}
|
|
2696
3552
|
owner.timer = setTimeout(
|
|
2697
|
-
() =>
|
|
2698
|
-
owner.timer = null;
|
|
2699
|
-
settle(owner, true);
|
|
2700
|
-
},
|
|
3553
|
+
() => settleAtEnd(owner),
|
|
2701
3554
|
Math.max(0, end - now()),
|
|
2702
3555
|
);
|
|
2703
3556
|
}
|
|
@@ -2742,6 +3595,7 @@ export function createAnimator(
|
|
|
2742
3595
|
},
|
|
2743
3596
|
|
|
2744
3597
|
dispose() {
|
|
3598
|
+
flushDeferred();
|
|
2745
3599
|
// A Reduce Motion move still waiting to land is written at its end
|
|
2746
3600
|
// state, so the element is left visible where it was going (the node
|
|
2747
3601
|
// just detached, when an unmount is pending); its call and the calls
|
|
@@ -2770,6 +3624,7 @@ export function createAnimator(
|
|
|
2770
3624
|
retireTimers.clear();
|
|
2771
3625
|
handBackBorrow();
|
|
2772
3626
|
demote();
|
|
3627
|
+
cancelSheetWillChangeRead();
|
|
2773
3628
|
target = null;
|
|
2774
3629
|
},
|
|
2775
3630
|
};
|