@astryxdesign/core 0.7.5 → 0.7.6-canary.00507ba
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +5 -5
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/AppShell/AppShell.js +183 -5
- package/dist/AppShell/observeMainOverflow.d.ts +9 -0
- package/dist/AppShell/observeMainOverflow.d.ts.map +1 -0
- package/dist/AppShell/observeMainOverflow.js +125 -0
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +12 -3
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +7 -1
- package/dist/BottomSheet/BottomSheet.js +1 -1
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +2 -1
- package/dist/BottomSheet/useSheetGestures.d.ts +12 -0
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +30 -3
- package/dist/Button/Button.js +4 -4
- package/dist/Carousel/Carousel.d.ts +3 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +12 -3
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +6 -5
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +37 -4
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -4
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +101 -15
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +8 -3
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/DateTimeInput/DateTimeInput.d.ts +5 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +23 -12
- package/dist/DateTimeInput/NativeTimeSegment.d.ts.map +1 -1
- package/dist/DateTimeInput/NativeTimeSegment.js +5 -4
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -1
- package/dist/DateTimeInput/TouchDateTimeField.js +4 -3
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +34 -9
- package/dist/Dialog/DialogHeader.d.ts.map +1 -1
- package/dist/Dialog/DialogHeader.js +5 -4
- package/dist/Divider/Divider.d.ts.map +1 -1
- package/dist/Divider/Divider.js +2 -1
- package/dist/Drawer/Drawer.d.ts +1 -0
- package/dist/Drawer/Drawer.d.ts.map +1 -1
- package/dist/Drawer/Drawer.js +7 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +7 -3
- package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -1
- package/dist/DropdownMenu/MenuBottomSheetActionList.js +6 -5
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts +20 -2
- package/dist/DropdownMenu/lazyMenuBottomSheet.d.ts.map +1 -1
- package/dist/DropdownMenu/lazyMenuBottomSheet.js +31 -3
- package/dist/DropdownMenu/renderDropdownItems.d.ts.map +1 -1
- package/dist/DropdownMenu/renderDropdownItems.js +21 -16
- package/dist/EmptyState/EmptyState.d.ts.map +1 -1
- package/dist/EmptyState/EmptyState.js +2 -1
- package/dist/Field/FieldLabel.d.ts +1 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +4 -4
- package/dist/Field/InputClearButton.js +3 -3
- package/dist/Field/PanelSearchInput.js +2 -2
- package/dist/FieldStatus/FieldStatus.js +2 -2
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +7 -1
- 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 +2 -1
- package/dist/Item/ItemSwipeLayer.js +1 -1
- package/dist/Layer/popoverOperations.d.ts +27 -0
- package/dist/Layer/popoverOperations.d.ts.map +1 -0
- package/dist/Layer/popoverOperations.js +159 -0
- package/dist/Layer/useLayer.d.ts +1 -1
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +93 -59
- package/dist/Layout/Layout.js +1 -1
- package/dist/Layout/LayoutContent.js +1 -1
- package/dist/Layout/LayoutFooter.js +1 -1
- package/dist/Layout/LayoutHeader.js +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +5 -0
- package/dist/Lightbox/LightboxViewport.a11y.browser.spec.js +5 -4
- package/dist/List/List.js +1 -1
- package/dist/List/ListItem.js +3 -3
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +7 -2
- package/dist/MultiSelector/CreateRow.a11y.chromium.spec.js +7 -6
- package/dist/MultiSelector/MultiSelector.d.ts +1 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +26 -10
- package/dist/NumberInput/NumberInput.d.ts +3 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +3 -3
- 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/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +16 -12
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +28 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +4 -1
- package/dist/Selector/useSelectorPresentation.d.ts +8 -1
- package/dist/Selector/useSelectorPresentation.d.ts.map +1 -1
- package/dist/Selector/useSelectorPresentation.js +20 -4
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +10 -2
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +3 -3
- package/dist/Stack/Stack.js +1 -1
- package/dist/Stack/StackItem.js +1 -1
- package/dist/TabList/TabList.d.ts.map +1 -1
- package/dist/TabList/TabList.js +16 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +9 -1
- package/dist/Text/Text.js +1 -1
- package/dist/Text/useTruncation.d.ts.map +1 -1
- package/dist/Text/useTruncation.js +23 -5
- package/dist/TextArea/TextArea.d.ts +1 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +3 -3
- package/dist/TimeInput/TimeInput.d.ts +6 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +21 -14
- package/dist/TimeInput/TouchTimeField.d.ts.map +1 -1
- package/dist/TimeInput/TouchTimeField.js +5 -4
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +2 -2
- package/dist/Timestamp/TimestampHoverCard.js +4 -4
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +60 -20
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +82 -51
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +13 -2
- package/dist/Tokenizer/TokenizerBottomSheet.js +3 -3
- package/dist/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar/Toolbar.js +2 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +3 -0
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +1 -0
- package/dist/Typeahead/Typeahead.d.ts +1 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +9 -1
- package/dist/astryx.css +21 -4
- package/dist/gestures/GestureArena.d.ts +6 -0
- package/dist/gestures/GestureArena.d.ts.map +1 -1
- package/dist/gestures/GestureArena.js +39 -0
- package/dist/gestures/GestureHost.d.ts +352 -0
- package/dist/gestures/GestureHost.d.ts.map +1 -0
- package/dist/gestures/GestureHost.js +1773 -0
- package/dist/gestures/GestureRecognizer.d.ts +10 -0
- package/dist/gestures/GestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/GestureRecognizer.js +16 -0
- 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/ScreenEdgePanGestureRecognizer.d.ts +71 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/ScreenEdgePanGestureRecognizer.js +223 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts +37 -0
- package/dist/gestures/SwipeGestureRecognizer.d.ts.map +1 -0
- package/dist/gestures/SwipeGestureRecognizer.js +148 -0
- package/dist/gestures/TapGestureRecognizer.d.ts +1 -0
- package/dist/gestures/TapGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/TapGestureRecognizer.js +3 -0
- package/dist/gestures/VelocityTracker.d.ts +6 -2
- package/dist/gestures/VelocityTracker.d.ts.map +1 -1
- package/dist/gestures/VelocityTracker.js +7 -3
- package/dist/gestures/haptics.d.ts +65 -0
- package/dist/gestures/haptics.d.ts.map +1 -0
- package/dist/gestures/haptics.js +182 -0
- package/dist/gestures/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/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.d.ts.map +1 -1
- package/dist/hooks/modalAnnounce.js +107 -61
- package/dist/hooks/scrollKeyboardDelegation.d.ts.map +1 -1
- package/dist/hooks/scrollKeyboardDelegation.js +7 -3
- package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -1
- package/dist/hooks/useAdaptivePresentation.js +4 -1
- package/dist/hooks/useAnnounce.d.ts +101 -42
- package/dist/hooks/useAnnounce.d.ts.map +1 -1
- package/dist/hooks/useAnnounce.js +161 -75
- package/dist/hooks/useAnnounceRenderedText.d.ts +11 -3
- package/dist/hooks/useAnnounceRenderedText.d.ts.map +1 -1
- package/dist/hooks/useAnnounceRenderedText.js +5 -3
- package/dist/hooks/useBusyAnnouncement.d.ts.map +1 -1
- package/dist/hooks/useBusyAnnouncement.js +6 -12
- package/dist/hooks/useMenuHover.d.ts.map +1 -1
- package/dist/hooks/useMenuHover.js +12 -1
- package/dist/hooks/useScrollOverflow.d.ts +2 -1
- package/dist/hooks/useScrollOverflow.d.ts.map +1 -1
- package/dist/hooks/useScrollOverflow.js +56 -10
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +6 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +6 -0
- package/dist/motion/animator.d.ts +7 -1
- package/dist/motion/animator.d.ts.map +1 -1
- package/dist/motion/animator.js +119 -27
- package/dist/theme/defineTheme.d.ts +19 -5
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +64 -4
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts +3 -0
- package/dist/theme/domainTokens/domainTokenDefaults.d.ts.map +1 -0
- package/dist/theme/domainTokens/domainTokenDefaults.js +19 -0
- package/dist/theme/domainTokens/index.d.ts +5 -4
- package/dist/theme/domainTokens/index.d.ts.map +1 -1
- package/dist/theme/domainTokens/index.js +5 -9
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/motionKnobs.d.ts +56 -0
- package/dist/theme/motionKnobs.d.ts.map +1 -0
- package/dist/theme/motionKnobs.js +48 -0
- package/dist/theme/resolveThemeValues.d.ts +11 -4
- package/dist/theme/resolveThemeValues.d.ts.map +1 -1
- package/dist/theme/resolveThemeValues.js +40 -4
- package/dist/theme/themeAdaptations.d.ts +7 -3
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +36 -7
- package/dist/theme/themeMotion.d.ts +96 -0
- package/dist/theme/themeMotion.d.ts.map +1 -0
- package/dist/theme/themeMotion.js +177 -0
- package/dist/theme/tokenReferences.d.ts +31 -0
- package/dist/theme/tokenReferences.d.ts.map +1 -0
- package/dist/theme/tokenReferences.js +132 -0
- package/dist/theme/tokens.d.ts +1 -0
- package/dist/theme/tokens.d.ts.map +1 -1
- package/dist/theme/tokens.js +9 -129
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +12 -0
- package/dist/utils/focusReturn.d.ts +17 -1
- package/dist/utils/focusReturn.d.ts.map +1 -1
- package/dist/utils/focusReturn.js +11 -4
- package/dist/utils/getNodeText.d.ts +8 -0
- package/dist/utils/getNodeText.d.ts.map +1 -0
- package/dist/utils/getNodeText.js +37 -0
- package/dist/utils/interactionModality.d.ts +11 -2
- package/dist/utils/interactionModality.d.ts.map +1 -1
- package/dist/utils/interactionModality.js +58 -5
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +17 -8
- package/dist/utils/plainDate.d.ts +2 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +46 -3
- package/dist/utils/presentation.d.ts +50 -0
- package/dist/utils/presentation.d.ts.map +1 -0
- package/dist/utils/presentation.js +125 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +20 -1
- package/dist/utils/primaryClick.d.ts +11 -0
- package/dist/utils/primaryClick.d.ts.map +1 -0
- package/dist/utils/primaryClick.js +25 -0
- package/dist/utils/sharedMutationObserver.d.ts +19 -11
- package/dist/utils/sharedMutationObserver.d.ts.map +1 -1
- package/dist/utils/sharedMutationObserver.js +66 -26
- package/dist/utils/timeFormat.d.ts +47 -0
- package/dist/utils/timeFormat.d.ts.map +1 -0
- package/dist/utils/timeFormat.js +240 -0
- package/dist/utils/touchPresentation.d.ts.map +1 -1
- package/dist/utils/touchPresentation.js +5 -3
- 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/unicodeDigits.d.ts +20 -0
- package/dist/utils/unicodeDigits.d.ts.map +1 -0
- package/dist/utils/unicodeDigits.js +70 -0
- package/locales/en.json +27 -3
- package/locales/pseudo.json +18 -0
- package/package.json +5 -4
- package/src/AlertDialog/AlertDialog.tsx +6 -5
- package/src/AlertDialog/__tests__/AlertDialog.a11y.chromium.spec.ts +18 -6
- package/src/AppShell/AppShell.doc.mjs +1 -1
- package/src/AppShell/AppShell.spec.md +9 -12
- package/src/AppShell/AppShell.test.tsx +164 -2
- package/src/AppShell/AppShell.tsx +225 -5
- package/src/AppShell/__tests__/AppShellMainKeyboard.a11y.browser.spec.ts +534 -0
- package/src/AppShell/observeMainOverflow.test.ts +173 -0
- package/src/AppShell/observeMainOverflow.ts +143 -0
- package/src/Avatar/Avatar.spec.md +22 -22
- package/src/Avatar/Avatar.tsx +18 -1
- package/src/Avatar/__tests__/AvatarForcedColors.a11y.chromium.spec.ts +126 -0
- package/src/Badge/Badge.doc.mjs +1 -1
- package/src/Badge/Badge.tsx +19 -2
- package/src/Badge/__tests__/BadgeLargerText.a11y.chromium.spec.ts +260 -0
- package/src/BottomSheet/BottomSheet.test.tsx +46 -0
- package/src/BottomSheet/BottomSheet.tsx +1 -1
- package/src/BottomSheet/BottomSheetPanel.tsx +2 -1
- package/src/BottomSheet/useSheetGestures.test.ts +52 -0
- package/src/BottomSheet/useSheetGestures.ts +37 -6
- package/src/Breadcrumbs/__tests__/Breadcrumbs.a11y.chromium.spec.ts +18 -6
- package/src/Button/Button.tsx +4 -4
- package/src/Calendar/Calendar.spec.md +87 -48
- package/src/Calendar/__tests__/Calendar.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/Carousel.doc.mjs +1 -1
- package/src/Carousel/Carousel.spec.md +9 -9
- package/src/Carousel/Carousel.test.tsx +124 -3
- package/src/Carousel/Carousel.tsx +10 -2
- package/src/Carousel/__tests__/Carousel.a11y.chromium.spec.ts +21 -7
- package/src/Carousel/__tests__/Carousel.a11y.known-failures.ts +1 -16
- package/src/Chat/ChatComposerTokenElement.spec.md +45 -33
- package/src/CheckboxInput/CheckboxInput.tsx +6 -5
- package/src/ClickableCard/ClickableCard.test.tsx +96 -0
- package/src/ClickableCard/ClickableCard.tsx +48 -4
- package/src/Collapsible/Collapsible.spec.md +2 -0
- package/src/Collapsible/CollapsibleGroup.spec.md +57 -29
- package/src/Collapsible/__tests__/Collapsible.a11y.chromium.spec.ts +18 -7
- package/src/Collapsible/__tests__/CollapsibleGroupAccordion.a11y.chromium.spec.ts +18 -6
- package/src/ComplexSelector/ComplexSelector.test.tsx +37 -0
- package/src/ContextMenu/ContextMenu.test.tsx +35 -0
- package/src/DateInput/DateInput.test.tsx +115 -3
- package/src/DateInput/DateInput.tsx +29 -14
- package/src/DateInput/DateInputTouch.test.tsx +76 -0
- package/src/DateInput/MonthScroller.tsx +106 -20
- package/src/DateInput/MonthScrollerSettle.test.tsx +165 -0
- package/src/DateInput/TouchDateField.tsx +14 -3
- package/src/DateInput/__tests__/MonthScrollerSteps.interaction.browser.spec.ts +312 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -3
- package/src/DateRangeInput/DateRangeInput.tsx +16 -12
- package/src/DateTimeInput/DateTimeInput.doc.mjs +10 -8
- package/src/DateTimeInput/DateTimeInput.spec.md +75 -51
- package/src/DateTimeInput/DateTimeInput.test.tsx +81 -0
- package/src/DateTimeInput/DateTimeInput.tsx +46 -24
- package/src/DateTimeInput/NativeTimeSegment.tsx +4 -6
- package/src/DateTimeInput/TouchDateTimeField.tsx +3 -7
- package/src/Dialog/Dialog.test.tsx +216 -2
- package/src/Dialog/Dialog.tsx +42 -9
- package/src/Dialog/DialogHeader.tsx +5 -4
- package/src/Dialog/__tests__/DialogSecondDocument.a11y.browser.spec.ts +202 -0
- package/src/Divider/Divider.tsx +2 -1
- package/src/Drawer/Drawer.spec.md +111 -80
- package/src/Drawer/Drawer.test.tsx +35 -0
- package/src/Drawer/Drawer.tsx +13 -2
- package/src/Drawer/DrawerHeader.spec.md +181 -0
- package/src/Drawer/__tests__/DrawerNonModalPageScroll.a11y.chromium.spec.ts +267 -0
- package/src/DropdownMenu/DropdownMenu.test.tsx +41 -0
- package/src/DropdownMenu/DropdownMenu.tsx +10 -3
- package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +34 -0
- package/src/DropdownMenu/MenuBottomSheetActionList.tsx +6 -5
- package/src/DropdownMenu/__tests__/Menu.a11y.chromium.spec.ts +19 -7
- package/src/DropdownMenu/__tests__/MenuButton.a11y.chromium.spec.ts +21 -9
- package/src/DropdownMenu/lazyMenuBottomSheet.test.ts +60 -0
- package/src/DropdownMenu/lazyMenuBottomSheet.ts +36 -7
- package/src/DropdownMenu/renderDropdownItems.tsx +24 -19
- package/src/EmptyState/EmptyState.tsx +2 -1
- package/src/Field/FieldLabel.tsx +5 -4
- package/src/Field/InputClearButton.tsx +3 -3
- package/src/Field/PanelSearchInput.tsx +2 -2
- package/src/FieldStatus/FieldStatus.tsx +2 -2
- package/src/FileInput/FileInput.test.tsx +21 -0
- package/src/FileInput/FileInput.tsx +4 -1
- package/src/FormLayout/FormLayout.spec.md +7 -8
- package/src/Heading/Heading.tsx +1 -1
- package/src/Icon/Icon.tsx +1 -1
- package/src/Indicator/CheckIndicator.spec.md +47 -42
- package/src/Indicator/CheckIndicator.tsx +2 -1
- package/src/Indicator/CheckboxIndicator.spec.md +40 -37
- package/src/Indicator/CheckboxIndicator.tsx +3 -1
- package/src/Indicator/Indicator.spec.md +188 -0
- package/src/Indicator/RadioIndicator.tsx +3 -1
- package/src/Item/Item.tsx +2 -1
- package/src/Item/ItemSwipeLayer.tsx +1 -1
- package/src/Kbd/Kbd.spec.md +81 -38
- package/src/Layer/__tests__/LayerBrowserHide.a11y.chromium.spec.ts +126 -0
- package/src/Layer/popoverOperations.test.ts +205 -0
- package/src/Layer/popoverOperations.ts +172 -0
- package/src/Layer/useLayer.test.tsx +348 -1
- package/src/Layer/useLayer.tsx +118 -71
- package/src/Layout/Layout.spec.md +127 -131
- package/src/Layout/Layout.tsx +1 -1
- package/src/Layout/LayoutContent.spec.md +205 -0
- package/src/Layout/LayoutContent.tsx +1 -1
- package/src/Layout/LayoutFooter.spec.md +190 -0
- package/src/Layout/LayoutFooter.tsx +1 -1
- package/src/Layout/LayoutHeader.spec.md +193 -0
- package/src/Layout/LayoutHeader.tsx +1 -1
- package/src/Layout/LayoutPanel.spec.md +194 -0
- package/src/Layout/__tests__/Layout.a11y.chromium.spec.ts +18 -6
- package/src/Lightbox/Lightbox.test.tsx +18 -0
- package/src/Lightbox/Lightbox.tsx +5 -0
- package/src/Lightbox/LightboxViewport.a11y.browser.spec.ts +8 -4
- package/src/Link/__tests__/Link.a11y.chromium.spec.ts +18 -8
- package/src/List/List.tsx +1 -1
- package/src/List/ListItem.spec.md +205 -0
- package/src/List/ListItem.tsx +3 -3
- package/src/MetadataList/MetadataList.spec.md +187 -0
- package/src/MetadataList/MetadataListItem.spec.md +165 -0
- package/src/MobileNav/MobileNav.test.tsx +15 -0
- package/src/MobileNav/MobileNav.tsx +9 -1
- package/src/MobileNav/__tests__/MobileNavHeader.a11y.chromium.spec.ts +89 -0
- package/src/MoreMenu/MoreMenu.test.tsx +11 -0
- package/src/MultiSelector/CreateRow.a11y.chromium.spec.ts +7 -8
- package/src/MultiSelector/MultiSelector.spec.md +7 -4
- package/src/MultiSelector/MultiSelector.test.tsx +270 -1
- package/src/MultiSelector/MultiSelector.tsx +25 -10
- package/src/MultiSelector/__tests__/MultiSelector.listbox.a11y.test.tsx +8 -1
- package/src/NavMenu/NavHeadingMenu.spec.md +1 -5
- package/src/NumberInput/NumberInput.doc.mjs +13 -7
- package/src/NumberInput/NumberInput.spec.md +59 -37
- package/src/NumberInput/NumberInput.tsx +13 -3
- package/src/NumberInput/__tests__/NumberInput.coarse-pointer.a11y.chromium.spec.ts +102 -0
- package/src/NumberInput/numberParser.ts +7 -45
- package/src/ProgressBar/ProgressBar.test.tsx +108 -32
- package/src/ProgressBar/ProgressBar.tsx +58 -10
- package/src/ProgressBar/__tests__/ProgressBar.a11y.chromium.spec.ts +21 -9
- package/src/ProgressBar/__tests__/ProgressBarMotion.a11y.chromium.spec.ts +831 -0
- package/src/Resizable/__tests__/ResizeHandle.a11y.chromium.spec.ts +21 -14
- package/src/Resizable/useResizable.test.ts +43 -0
- package/src/Resizable/useResizable.ts +32 -9
- package/src/SegmentedControl/SegmentedControl.test.tsx +84 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +11 -5
- package/src/Selector/Selector.test.tsx +90 -1
- package/src/Selector/__tests__/Selector.combobox.a11y.test.tsx +8 -1
- package/src/Selector/__tests__/Selector.listbox.a11y.test.tsx +8 -1
- package/src/Selector/useSelectorPresentation.ts +31 -3
- package/src/SideNav/SideNav.test.tsx +27 -0
- package/src/SideNav/__tests__/SideNavRailMotion.interaction.browser.spec.ts +176 -51
- package/src/Skeleton/Skeleton.tsx +3 -1
- package/src/Slider/Slider.test.tsx +31 -0
- package/src/Slider/Slider.tsx +8 -3
- package/src/Slider/__tests__/Slider.a11y.chromium.spec.ts +19 -7
- package/src/Spinner/Spinner.tsx +5 -3
- package/src/Stack/Stack.tsx +1 -1
- package/src/Stack/StackItem.tsx +1 -1
- package/src/TabList/TabList.test.tsx +58 -4
- package/src/TabList/TabList.tsx +16 -1
- package/src/TabList/__tests__/TabPressPointer.interaction.browser.spec.ts +163 -0
- package/src/Table/__tests__/Table.a11y.chromium.spec.ts +18 -6
- package/src/Table/plugins/columnResize/useTableColumnResize.test.tsx +22 -0
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +8 -4
- package/src/Text/Text.tsx +1 -1
- package/src/Text/useTruncation.test.tsx +128 -1
- package/src/Text/useTruncation.ts +23 -5
- package/src/TextArea/TextArea.spec.md +10 -13
- package/src/TextArea/TextArea.test.tsx +60 -0
- package/src/TextArea/TextArea.tsx +15 -1
- package/src/TextInput/TextInput.test.tsx +21 -0
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/TimeInput/NativeTimeInput.test.tsx +17 -0
- package/src/TimeInput/Presentation.test.tsx +21 -0
- package/src/TimeInput/TimeInput.doc.mjs +8 -8
- package/src/TimeInput/TimeInput.spec.md +45 -48
- package/src/TimeInput/TimeInput.test.tsx +76 -0
- package/src/TimeInput/TimeInput.tsx +36 -18
- package/src/TimeInput/TouchTimeField.tsx +4 -6
- package/src/Timestamp/Timestamp.spec.md +6 -12
- package/src/Timestamp/Timestamp.test.tsx +30 -5
- package/src/Timestamp/Timestamp.tsx +6 -2
- package/src/Timestamp/TimestampHoverCard.tsx +4 -4
- package/src/Toast/Toast.spec.md +14 -20
- package/src/Toast/Toast.tsx +104 -36
- package/src/Toast/ToastViewport.test.tsx +719 -1
- package/src/Toast/ToastViewport.tsx +100 -50
- package/src/Tokenizer/Tokenizer.spec.md +5 -3
- package/src/Tokenizer/Tokenizer.test.tsx +68 -0
- package/src/Tokenizer/Tokenizer.tsx +14 -2
- package/src/Tokenizer/TokenizerBottomSheet.test.tsx +15 -4
- package/src/Tokenizer/TokenizerBottomSheet.tsx +3 -3
- package/src/Toolbar/Toolbar.spec.md +5 -6
- package/src/Toolbar/Toolbar.test.tsx +30 -0
- package/src/Toolbar/Toolbar.tsx +2 -1
- package/src/Toolbar/__tests__/Toolbar.a11y.chromium.spec.ts +18 -6
- package/src/Tooltip/__tests__/Tooltip.a11y.chromium.spec.ts +18 -7
- package/src/TopNav/TopNav.test.tsx +27 -0
- package/src/TopNav/TopNavMegaMenu.test.tsx +21 -0
- package/src/TopNav/TopNavMegaMenu.tsx +4 -1
- package/src/TopNav/TopNavMenu.test.tsx +17 -0
- package/src/TopNav/TopNavMenu.tsx +1 -0
- package/src/Typeahead/Typeahead.test.tsx +40 -0
- package/src/Typeahead/Typeahead.tsx +12 -1
- package/src/__tests__/pressState.ts +8 -4
- package/src/gestures/GestureArena.ts +35 -0
- package/src/gestures/GestureHost.ts +2065 -0
- package/src/gestures/GestureRecognizer.ts +18 -0
- package/src/gestures/LongPressGestureRecognizer.ts +4 -0
- package/src/gestures/PanGestureRecognizer.ts +4 -0
- package/src/gestures/PinchGestureRecognizer.ts +148 -0
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +256 -0
- package/src/gestures/SwipeGestureRecognizer.ts +197 -0
- package/src/gestures/TapGestureRecognizer.ts +4 -0
- package/src/gestures/VelocityTracker.ts +10 -3
- package/src/gestures/__tests__/GestureHost.test.ts +2087 -0
- package/src/gestures/__tests__/PanGestureRecognizer.test.ts +4 -4
- package/src/gestures/__tests__/PinchGestureRecognizer.test.ts +74 -0
- package/src/gestures/__tests__/ScreenEdgePanGestureRecognizer.test.ts +498 -0
- package/src/gestures/__tests__/SwipeGestureRecognizer.test.ts +108 -0
- package/src/gestures/__tests__/arena.test.ts +5 -0
- package/src/gestures/__tests__/arenaPinchSwipeEdge.test.ts +193 -0
- package/src/gestures/__tests__/browser/build-fixture.mjs +46 -0
- package/src/gestures/__tests__/browser/fixture.ts +307 -0
- package/src/gestures/__tests__/browser/gestures.interaction.browser.spec.ts +1137 -0
- package/src/gestures/__tests__/browserNegotiation.test.ts +293 -0
- package/src/gestures/__tests__/haptics.test.ts +187 -0
- package/src/gestures/__tests__/harness.ts +21 -2
- package/src/gestures/__tests__/recognizerKind.test.ts +78 -0
- package/src/gestures/__tests__/touchActionRule.test.ts +54 -0
- package/src/gestures/haptics.ts +203 -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/hooks/index.ts +5 -1
- package/src/hooks/modalAnnounce.ts +129 -72
- package/src/hooks/scrollKeyboardDelegation.test.ts +33 -0
- package/src/hooks/scrollKeyboardDelegation.ts +9 -3
- package/src/hooks/useAdaptivePresentation.ts +4 -1
- package/src/hooks/useAnnounce.doc.mjs +35 -3
- package/src/hooks/useAnnounce.replace.test.tsx +516 -0
- package/src/hooks/useAnnounce.ts +209 -102
- package/src/hooks/useAnnounceRenderedText.adopters.test.tsx +10 -1
- package/src/hooks/useAnnounceRenderedText.ts +17 -3
- package/src/hooks/useBusyAnnouncement.ts +7 -10
- package/src/hooks/useMenuHover.ts +15 -1
- package/src/hooks/useScrollOverflow.doc.mjs +1 -1
- package/src/hooks/useScrollOverflow.test.tsx +102 -1
- package/src/hooks/useScrollOverflow.ts +59 -10
- package/src/i18n/generated-locales/en.generated.ts +7 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +7 -0
- package/src/motion/README.md +11 -1
- package/src/motion/animator.test.ts +151 -3
- package/src/motion/animator.ts +149 -33
- package/src/theme/Theme.doc.mjs +1 -1
- package/src/theme/defineTheme.ts +117 -8
- package/src/theme/derivedVarRegistry.test.ts +4 -0
- package/src/theme/domainTokens/domainTokenDefaults.ts +19 -0
- package/src/theme/domainTokens/index.ts +6 -10
- package/src/theme/expandMotionScale.test.ts +1 -1
- package/src/theme/index.ts +5 -0
- package/src/theme/motionKnobs.ts +82 -0
- package/src/theme/resolveThemeValues.ts +68 -6
- package/src/theme/themeAdaptations.ts +52 -12
- package/src/theme/themeMotion.test.ts +620 -0
- package/src/theme/themeMotion.ts +221 -0
- package/src/theme/tokenReferences.ts +149 -0
- package/src/theme/tokens.stylex.ts +10 -0
- package/src/theme/tokens.ts +15 -158
- package/src/utils/focusReturn.ts +17 -6
- package/src/utils/getNodeText.test.ts +24 -0
- package/src/utils/getNodeText.ts +37 -0
- package/src/utils/interactionModality.test.ts +45 -1
- package/src/utils/interactionModality.ts +64 -5
- package/src/utils/interactionOverlay.stylex.ts +12 -3
- package/src/utils/plainDate.test.ts +90 -0
- package/src/utils/plainDate.ts +58 -3
- package/src/utils/presentation.test.ts +380 -0
- package/src/utils/presentation.ts +180 -0
- package/src/utils/pressFeedback.test.ts +138 -0
- package/src/utils/pressFeedback.ts +34 -11
- package/src/utils/pressPaintPriority.test.ts +80 -0
- package/src/utils/primaryClick.test.ts +38 -0
- package/src/utils/primaryClick.ts +28 -0
- package/src/utils/sharedMutationObserver.test.ts +54 -1
- package/src/utils/sharedMutationObserver.ts +87 -29
- package/src/utils/timeFormat.test.ts +204 -0
- package/src/utils/timeFormat.ts +314 -0
- package/src/utils/touchPresentation.stylex.ts +43 -0
- package/src/utils/touchPresentation.test.ts +140 -1
- package/src/utils/touchPresentation.ts +5 -3
- package/src/utils/unicodeDigits.test.ts +44 -0
- package/src/utils/unicodeDigits.ts +71 -0
package/src/motion/animator.ts
CHANGED
|
@@ -69,13 +69,17 @@
|
|
|
69
69
|
* Chromium starts it after the block.
|
|
70
70
|
*
|
|
71
71
|
* 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
|
-
*
|
|
72
|
+
* script on its compositor at its first commit only if the element (or the
|
|
73
|
+
* pseudo-element) already has a compositing layer; without one, a block
|
|
74
|
+
* right after that commit freezes it (iOS 26.2 simulator: 2 of 7 runs kept
|
|
75
|
+
* moving, 0 of 5 on a ::before). Every animation the animator creates, and
|
|
76
|
+
* every `set`, therefore promotes its channels in the same task: inline
|
|
77
|
+
* `will-change` on the element, merged with the element's own, or the custom
|
|
78
|
+
* property `--astryx-motion-will-change-<pseudo>` on the host for a
|
|
79
|
+
* pseudo-element, whose style opts in with
|
|
80
|
+
* `will-change: var(--astryx-motion-will-change-before, auto)`. That is
|
|
81
|
+
* enough (5 of 5, and 4 of 4 through the animator); promotion ends
|
|
82
|
+
* PROMOTION_LINGER_MS after the last motion.
|
|
79
83
|
*
|
|
80
84
|
* Known limits, iOS Safari (measured on the iOS 26.2 simulator):
|
|
81
85
|
* - a block in the task that starts a motion delays it: it starts when the
|
|
@@ -125,6 +129,14 @@
|
|
|
125
129
|
* Motion policy above, a cross-fade on a coarse pointer or after a touch
|
|
126
130
|
* release (`touchRelease`) and at once elsewhere (DR2, DR3).
|
|
127
131
|
*
|
|
132
|
+
* A pseudo-element (`options.pseudoElement`, a dialog's `::backdrop`) has no
|
|
133
|
+
* inline style: its end value is held by a static filling animation (after a
|
|
134
|
+
* curve ends, and after `set`) until the next animation replaces it, and for
|
|
135
|
+
* as long as the pseudo-element exists. The browser makes a `::backdrop`
|
|
136
|
+
* again each time its dialog opens, without the hold, so a presentation
|
|
137
|
+
* calls `set` with its starting value right after `showModal()`, in the same
|
|
138
|
+
* task: a `set` before it lands on the backdrop the open replaces.
|
|
139
|
+
*
|
|
128
140
|
* SSR-safe: nothing touches `window` or `document` at module scope, and an
|
|
129
141
|
* animator created without an element only keeps state until one is attached.
|
|
130
142
|
*
|
|
@@ -220,6 +232,12 @@ export interface MotionCurve {
|
|
|
220
232
|
* Options of `createAnimator`.
|
|
221
233
|
*/
|
|
222
234
|
export interface AnimatorOptions {
|
|
235
|
+
/**
|
|
236
|
+
* Animates a pseudo-element of the element instead (`'::backdrop'` of a
|
|
237
|
+
* native dialog). A pseudo-element has no inline style, so a static filling
|
|
238
|
+
* animation holds its value after a curve ends and after `set`.
|
|
239
|
+
*/
|
|
240
|
+
pseudoElement?: string;
|
|
223
241
|
/** Starting values; identity by default. Never read from the DOM. */
|
|
224
242
|
initial?: MotionValues;
|
|
225
243
|
/** Clock in ms on the document timeline's time base. */
|
|
@@ -558,10 +576,10 @@ function format(
|
|
|
558
576
|
}
|
|
559
577
|
}
|
|
560
578
|
|
|
561
|
-
const shared = new WeakMap<HTMLElement, Animator
|
|
579
|
+
const shared = new WeakMap<HTMLElement, Map<string, Animator>>();
|
|
562
580
|
|
|
563
581
|
/**
|
|
564
|
-
* The one animator for `element
|
|
582
|
+
* The one animator for `element` (and `options.pseudoElement`), created on
|
|
565
583
|
* first use. Code that animates one element from several places (a swipe on
|
|
566
584
|
* x, a removal on y) shares it, so their curves compose in one `translate`
|
|
567
585
|
* track and retargeting one axis leaves the other on its curve; two
|
|
@@ -573,10 +591,16 @@ export function animatorFor(
|
|
|
573
591
|
element: HTMLElement,
|
|
574
592
|
options: AnimatorOptions = {},
|
|
575
593
|
): Animator {
|
|
576
|
-
let
|
|
594
|
+
let byPseudo = shared.get(element);
|
|
595
|
+
if (byPseudo == null) {
|
|
596
|
+
byPseudo = new Map();
|
|
597
|
+
shared.set(element, byPseudo);
|
|
598
|
+
}
|
|
599
|
+
const key = options.pseudoElement ?? '';
|
|
600
|
+
let animator = byPseudo.get(key);
|
|
577
601
|
if (animator == null) {
|
|
578
602
|
animator = createAnimator(element, options);
|
|
579
|
-
|
|
603
|
+
byPseudo.set(key, animator);
|
|
580
604
|
}
|
|
581
605
|
return animator;
|
|
582
606
|
}
|
|
@@ -712,6 +736,7 @@ export function createAnimator(
|
|
|
712
736
|
requestAnimationFrame(() => callback());
|
|
713
737
|
}
|
|
714
738
|
: null);
|
|
739
|
+
const pseudoElement = options.pseudoElement;
|
|
715
740
|
// Reduced Motion reads the person's settings and nothing else: no option
|
|
716
741
|
// overrides them (design:reduced-motion DR4).
|
|
717
742
|
const prefersReducedMotion = defaultPrefersReducedMotion;
|
|
@@ -762,6 +787,11 @@ export function createAnimator(
|
|
|
762
787
|
/** The stylesheet's will-change when there is no inline value. */
|
|
763
788
|
let sheetWillChange = '';
|
|
764
789
|
let demoteTimer: ReturnType<typeof setTimeout> | null = null;
|
|
790
|
+
/** A pseudo-element is promoted through a custom property on its host. */
|
|
791
|
+
const promotionProperty =
|
|
792
|
+
pseudoElement == null
|
|
793
|
+
? null
|
|
794
|
+
: `--astryx-motion-will-change-${pseudoElement.replace(/^:+/, '')}`;
|
|
765
795
|
/** Channels whose identity the last node held inline (see `attach`). */
|
|
766
796
|
let heldIdentity = new Set<Channel>();
|
|
767
797
|
|
|
@@ -843,7 +873,7 @@ export function createAnimator(
|
|
|
843
873
|
channel: Channel,
|
|
844
874
|
value: (property: MotionProperty) => number,
|
|
845
875
|
) => {
|
|
846
|
-
if (target == null) {
|
|
876
|
+
if (target == null || pseudoElement != null) {
|
|
847
877
|
return;
|
|
848
878
|
}
|
|
849
879
|
touched.add(channel);
|
|
@@ -908,14 +938,32 @@ export function createAnimator(
|
|
|
908
938
|
return times;
|
|
909
939
|
};
|
|
910
940
|
|
|
941
|
+
/** A pseudo-element's resting value, held by a static filling animation. */
|
|
942
|
+
const hold = (channel: Channel, time: number) => {
|
|
943
|
+
if (target == null) {
|
|
944
|
+
return;
|
|
945
|
+
}
|
|
946
|
+
const value = format(channel, finalValue);
|
|
947
|
+
const animation = target.animate([{[channel]: value}, {[channel]: value}], {
|
|
948
|
+
duration: 1,
|
|
949
|
+
fill: 'both',
|
|
950
|
+
pseudoElement,
|
|
951
|
+
});
|
|
952
|
+
animation.startTime = time;
|
|
953
|
+
running.set(channel, animation);
|
|
954
|
+
};
|
|
955
|
+
|
|
911
956
|
const rebuild = (channel: Channel, time: number) => {
|
|
912
957
|
const previous = running.get(channel);
|
|
913
958
|
running.delete(channel);
|
|
914
959
|
clearTimeout(retireTimers.get(channel));
|
|
915
960
|
retireTimers.delete(channel);
|
|
916
|
-
//
|
|
917
|
-
//
|
|
918
|
-
|
|
961
|
+
// An element's inline style holds the end state, so its old animation can
|
|
962
|
+
// go first. A pseudo-element has none: its old animation keeps holding the
|
|
963
|
+
// value until the new one exists (same task, no frame in between).
|
|
964
|
+
if (pseudoElement == null) {
|
|
965
|
+
previous?.cancel();
|
|
966
|
+
}
|
|
919
967
|
const properties = CHANNELS[channel];
|
|
920
968
|
// Settled curves become resting values.
|
|
921
969
|
for (const property of properties) {
|
|
@@ -932,6 +980,10 @@ export function createAnimator(
|
|
|
932
980
|
return;
|
|
933
981
|
}
|
|
934
982
|
if (moving.length === 0) {
|
|
983
|
+
if (pseudoElement != null) {
|
|
984
|
+
hold(channel, time);
|
|
985
|
+
}
|
|
986
|
+
previous?.cancel();
|
|
935
987
|
return;
|
|
936
988
|
}
|
|
937
989
|
// A channel rebuilt by an explicit call (set, rebase, a retarget of
|
|
@@ -958,6 +1010,10 @@ export function createAnimator(
|
|
|
958
1010
|
),
|
|
959
1011
|
);
|
|
960
1012
|
if (end <= from) {
|
|
1013
|
+
if (pseudoElement != null) {
|
|
1014
|
+
hold(channel, time);
|
|
1015
|
+
}
|
|
1016
|
+
previous?.cancel();
|
|
961
1017
|
return;
|
|
962
1018
|
}
|
|
963
1019
|
if (callGroup != null) {
|
|
@@ -1041,6 +1097,7 @@ export function createAnimator(
|
|
|
1041
1097
|
// inline style already holds the same values, so that changes no pixel.
|
|
1042
1098
|
fill: 'both',
|
|
1043
1099
|
easing: 'linear',
|
|
1100
|
+
...(pseudoElement != null ? {pseudoElement} : {}),
|
|
1044
1101
|
});
|
|
1045
1102
|
if (waiting != null) {
|
|
1046
1103
|
// From rest: no start time, so the browser starts the animation when
|
|
@@ -1061,7 +1118,9 @@ export function createAnimator(
|
|
|
1061
1118
|
|
|
1062
1119
|
/**
|
|
1063
1120
|
* Once the main thread runs after the curve's end, the animation leaves the
|
|
1064
|
-
* running state:
|
|
1121
|
+
* running state: an element's inline style already shows the end values; a
|
|
1122
|
+
* pseudo-element's end value moves to a static holding animation, created
|
|
1123
|
+
* before the long one goes.
|
|
1065
1124
|
*/
|
|
1066
1125
|
const scheduleRetire = (
|
|
1067
1126
|
channel: Channel,
|
|
@@ -1088,6 +1147,15 @@ export function createAnimator(
|
|
|
1088
1147
|
return;
|
|
1089
1148
|
}
|
|
1090
1149
|
running.delete(channel);
|
|
1150
|
+
// A pseudo-element holds its resting value, unless the stylesheet
|
|
1151
|
+
// takes it back now (a borrowed dip that has ended).
|
|
1152
|
+
const handsBack =
|
|
1153
|
+
channel === 'opacity' &&
|
|
1154
|
+
borrowedOpacity != null &&
|
|
1155
|
+
![...landings].some(landing => landing.fadeIn?.isBorrowed === true);
|
|
1156
|
+
if (pseudoElement != null && !handsBack) {
|
|
1157
|
+
hold(channel, now());
|
|
1158
|
+
}
|
|
1091
1159
|
animation.cancel();
|
|
1092
1160
|
releaseIdentity(channel);
|
|
1093
1161
|
flushReleases();
|
|
@@ -1102,22 +1170,36 @@ export function createAnimator(
|
|
|
1102
1170
|
target == null
|
|
1103
1171
|
? NaN
|
|
1104
1172
|
: Number.parseFloat(
|
|
1105
|
-
view
|
|
1173
|
+
view
|
|
1174
|
+
?.getComputedStyle(target, pseudoElement ?? null)
|
|
1175
|
+
.getPropertyValue('opacity') ?? '',
|
|
1106
1176
|
);
|
|
1107
1177
|
return Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 1;
|
|
1108
1178
|
};
|
|
1109
1179
|
|
|
1110
1180
|
/**
|
|
1111
1181
|
* 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.
|
|
1182
|
+
* value it wrote, or a pseudo-element's holding animation (a `set` over a
|
|
1183
|
+
* stylesheet that hides or dims it). A dip returns to that value.
|
|
1114
1184
|
*/
|
|
1115
1185
|
const writesOwnOpacity = (): boolean =>
|
|
1116
|
-
|
|
1186
|
+
pseudoElement == null
|
|
1187
|
+
? (target?.style.getPropertyValue('opacity') ?? '') !== ''
|
|
1188
|
+
: running.has('opacity');
|
|
1117
1189
|
|
|
1118
|
-
/**
|
|
1190
|
+
/**
|
|
1191
|
+
* Gives the element's opacity back to its stylesheet: an element's inline
|
|
1192
|
+
* value goes; a pseudo-element, which has no inline style, loses the
|
|
1193
|
+
* animation holding its value.
|
|
1194
|
+
*/
|
|
1119
1195
|
const releaseOwnOpacity = () => {
|
|
1120
|
-
|
|
1196
|
+
if (pseudoElement == null) {
|
|
1197
|
+
target?.style.removeProperty('opacity');
|
|
1198
|
+
return;
|
|
1199
|
+
}
|
|
1200
|
+
const held = running.get('opacity');
|
|
1201
|
+
running.delete('opacity');
|
|
1202
|
+
held?.cancel();
|
|
1121
1203
|
};
|
|
1122
1204
|
|
|
1123
1205
|
/**
|
|
@@ -1202,6 +1284,9 @@ export function createAnimator(
|
|
|
1202
1284
|
releaseOwnOpacity();
|
|
1203
1285
|
return;
|
|
1204
1286
|
}
|
|
1287
|
+
if (pseudoElement != null) {
|
|
1288
|
+
return;
|
|
1289
|
+
}
|
|
1205
1290
|
if (target.style.getPropertyValue(channel) !== IDENTITY_TEXT[channel]) {
|
|
1206
1291
|
return;
|
|
1207
1292
|
}
|
|
@@ -1265,9 +1350,17 @@ export function createAnimator(
|
|
|
1265
1350
|
|
|
1266
1351
|
// -- promotion -------------------------------------------------------------
|
|
1267
1352
|
|
|
1268
|
-
/** Writes the promoted channels as will-change. */
|
|
1353
|
+
/** Writes the promoted channels as will-change (or the pseudo's property). */
|
|
1269
1354
|
const writePromotion = (element: HTMLElement) => {
|
|
1270
1355
|
const list = [...promoted].join(', ');
|
|
1356
|
+
if (promotionProperty != null) {
|
|
1357
|
+
if (list === '') {
|
|
1358
|
+
element.style.removeProperty(promotionProperty);
|
|
1359
|
+
} else {
|
|
1360
|
+
element.style.setProperty(promotionProperty, list);
|
|
1361
|
+
}
|
|
1362
|
+
return;
|
|
1363
|
+
}
|
|
1271
1364
|
if (list === '') {
|
|
1272
1365
|
element.style.willChange = ownWillChange ?? '';
|
|
1273
1366
|
ownWillChange = null;
|
|
@@ -1294,7 +1387,7 @@ export function createAnimator(
|
|
|
1294
1387
|
};
|
|
1295
1388
|
|
|
1296
1389
|
/**
|
|
1297
|
-
* Gives the element a compositing layer for
|
|
1390
|
+
* Gives the element (or its pseudo-element) a compositing layer for
|
|
1298
1391
|
* `channel` from the task that starts the motion: Mobile Safari runs an
|
|
1299
1392
|
* animation whose start time is set from script on its compositor at its
|
|
1300
1393
|
* first commit only if the element already has a layer.
|
|
@@ -2226,9 +2319,25 @@ export function createAnimator(
|
|
|
2226
2319
|
}
|
|
2227
2320
|
// After the landing's commit, which can promote the element again.
|
|
2228
2321
|
demote();
|
|
2322
|
+
// A pseudo-element holds an identity with a static animation, which the
|
|
2323
|
+
// cancel below drops: note the channels to hold again on the next node
|
|
2324
|
+
// (never a borrowed opacity, which is the stylesheet's).
|
|
2229
2325
|
const isOpacityBorrowed =
|
|
2230
2326
|
borrowedOpacity != null ||
|
|
2231
2327
|
[...landings].some(landing => landing.restoreIsBorrowed === true);
|
|
2328
|
+
const pseudoHeld =
|
|
2329
|
+
pseudoElement == null || target == null
|
|
2330
|
+
? null
|
|
2331
|
+
: new Set(
|
|
2332
|
+
(Object.keys(CHANNELS) as Channel[]).filter(
|
|
2333
|
+
channel =>
|
|
2334
|
+
running.has(channel) &&
|
|
2335
|
+
!(channel === 'opacity' && isOpacityBorrowed) &&
|
|
2336
|
+
CHANNELS[channel].every(
|
|
2337
|
+
p => !segments.has(p) && resting[p] === IDENTITY[p],
|
|
2338
|
+
),
|
|
2339
|
+
),
|
|
2340
|
+
);
|
|
2232
2341
|
for (const animation of running.values()) {
|
|
2233
2342
|
animation.cancel();
|
|
2234
2343
|
}
|
|
@@ -2248,13 +2357,15 @@ export function createAnimator(
|
|
|
2248
2357
|
// differs, kept through a detach for the node that comes next.
|
|
2249
2358
|
if (target != null) {
|
|
2250
2359
|
const outgoing = target;
|
|
2251
|
-
heldIdentity =
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2360
|
+
heldIdentity =
|
|
2361
|
+
pseudoHeld ??
|
|
2362
|
+
new Set(
|
|
2363
|
+
(Object.keys(CHANNELS) as Channel[]).filter(
|
|
2364
|
+
channel =>
|
|
2365
|
+
outgoing.style.getPropertyValue(channel) ===
|
|
2366
|
+
IDENTITY_TEXT[channel],
|
|
2367
|
+
),
|
|
2368
|
+
);
|
|
2258
2369
|
}
|
|
2259
2370
|
const held = heldIdentity;
|
|
2260
2371
|
target = next;
|
|
@@ -2284,8 +2395,13 @@ export function createAnimator(
|
|
|
2284
2395
|
} else if (held.has(channel)) {
|
|
2285
2396
|
// An identity the animator held inline over a stylesheet that
|
|
2286
2397
|
// differs goes onto the new node too (writeInline keeps it only
|
|
2287
|
-
// where the new node's stylesheet still differs)
|
|
2288
|
-
|
|
2398
|
+
// where the new node's stylesheet still differs); a pseudo-element's
|
|
2399
|
+
// is held again.
|
|
2400
|
+
if (pseudoElement != null) {
|
|
2401
|
+
hold(channel, time);
|
|
2402
|
+
} else {
|
|
2403
|
+
writeInline(channel, property => resting[property]);
|
|
2404
|
+
}
|
|
2289
2405
|
}
|
|
2290
2406
|
}
|
|
2291
2407
|
flushReleases();
|
package/src/theme/Theme.doc.mjs
CHANGED
|
@@ -69,7 +69,7 @@ export const docs = {
|
|
|
69
69
|
type: 'DefinedTheme',
|
|
70
70
|
required: true,
|
|
71
71
|
description:
|
|
72
|
-
|
|
72
|
+
"Theme object to apply. Prefer built theme objects for static production themes; use runtime `defineTheme()` for dynamic themes. Its `motion` can set `tempo` (0.75–1.5) and `character` (`'crisp' | 'standard' | 'expressive'`).",
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
name: 'mode',
|
package/src/theme/defineTheme.ts
CHANGED
|
@@ -118,6 +118,7 @@ import {
|
|
|
118
118
|
typeScaleDefaults,
|
|
119
119
|
} from './tokens.stylex';
|
|
120
120
|
import type {MotionScaleConfig} from './expandMotionScale';
|
|
121
|
+
import type {ThemeMotionConfig} from './themeMotion';
|
|
121
122
|
import type {RadiusScaleConfig} from './expandRadiusScale';
|
|
122
123
|
import type {ColorScaleConfig} from './expandColorScale';
|
|
123
124
|
import {resolveThemeValues, type ThemeValuesInput} from './resolveThemeValues';
|
|
@@ -132,7 +133,7 @@ import {
|
|
|
132
133
|
} from './themeAdaptations';
|
|
133
134
|
|
|
134
135
|
import type {DomainTokenName} from './domainTokens';
|
|
135
|
-
import {domainTokenDefaults} from './domainTokens';
|
|
136
|
+
import {domainTokenDefaults} from './domainTokens/domainTokenDefaults';
|
|
136
137
|
import type {SyntaxThemeDefinition} from './syntax';
|
|
137
138
|
import {registerTheme} from './themeRegistry';
|
|
138
139
|
import {resolveLocalTokenContract} from './localTokens';
|
|
@@ -290,13 +291,27 @@ export interface DefineThemeInput<
|
|
|
290
291
|
*/
|
|
291
292
|
typography?: TypographyConfig;
|
|
292
293
|
/**
|
|
293
|
-
* Motion configuration
|
|
294
|
-
* base values and a scaling ratio: min = base × ratio, max = base / ratio.
|
|
294
|
+
* Motion configuration: two knobs (spec:AST-108), a motion scale, or both.
|
|
295
295
|
*
|
|
296
|
-
*
|
|
296
|
+
* - `tempo` (default 1, clamped to 0.75–1.5) scales every motion duration
|
|
297
|
+
* token; touch motion's springs don't read it yet.
|
|
298
|
+
* - `character` (`'crisp'`, `'standard'` or `'expressive'`) sets the
|
|
299
|
+
* entrance and move curves; exits and fades never overshoot.
|
|
300
|
+
*
|
|
301
|
+
* Every theme follows each person's Reduce Motion setting; nothing loosens it.
|
|
302
|
+
*
|
|
303
|
+
* A motion scale computes duration min/max variants from base values and a
|
|
304
|
+
* ratio (min = base × ratio, max = base / ratio); its durations win over
|
|
305
|
+
* `tempo`, and explicit `tokens` overrides win over both. Finger tracking,
|
|
306
|
+
* momentum, the keyboard, hover, the press's onset delay and tap flash, and
|
|
307
|
+
* busy loops never follow the knobs; the press release fade follows
|
|
308
|
+
* `tempo`.
|
|
297
309
|
*
|
|
298
310
|
* @example
|
|
299
311
|
* ```
|
|
312
|
+
* motion: { tempo: 1.2, character: 'crisp' }
|
|
313
|
+
*
|
|
314
|
+
* // A motion scale, as before:
|
|
300
315
|
* motion: { fast: 175, medium: 410, slow: 975, ratio: 0.75 }
|
|
301
316
|
*
|
|
302
317
|
* // Suggested starting points:
|
|
@@ -305,7 +320,7 @@ export interface DefineThemeInput<
|
|
|
305
320
|
* // Cinematic: { fast: 200, medium: 500, slow: 1200, ratio: 0.7 }
|
|
306
321
|
* ```
|
|
307
322
|
*/
|
|
308
|
-
motion?:
|
|
323
|
+
motion?: ThemeMotionConfig;
|
|
309
324
|
/**
|
|
310
325
|
* Radius configuration. Generates radius token overrides
|
|
311
326
|
* from a base unit and multiplier.
|
|
@@ -648,6 +663,73 @@ function describeBadBase(value: unknown): string {
|
|
|
648
663
|
return `an object with keys [${keys.slice(0, 4).join(', ')}${keys.length > 4 ? ', …' : ''}]`;
|
|
649
664
|
}
|
|
650
665
|
|
|
666
|
+
/** The slow band's duration tokens. */
|
|
667
|
+
const SLOW_BAND = [
|
|
668
|
+
'--duration-slow-min',
|
|
669
|
+
'--duration-slow',
|
|
670
|
+
'--duration-slow-max',
|
|
671
|
+
] as const;
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* The base's tokens for the duration-scale fields a child leaves unset
|
|
675
|
+
* (spec:AST-108 FR5, field by field): a child that sets no `slow` of its own
|
|
676
|
+
* regenerates only the fast and medium bands, so an inherited slow band stays
|
|
677
|
+
* as the base's tokens hold it, at the ratio it was made with; and a child
|
|
678
|
+
* that sets no `easing` keeps the base's `--ease-standard`, an explicit one
|
|
679
|
+
* included, however many themes down either is inherited.
|
|
680
|
+
*/
|
|
681
|
+
function inheritedScaleTokens(
|
|
682
|
+
base: DefinedTheme,
|
|
683
|
+
baseMotion: ThemeMotionConfig,
|
|
684
|
+
own: ThemeMotionConfig,
|
|
685
|
+
): Partial<Record<string, TokenValue>> | undefined {
|
|
686
|
+
const names = [
|
|
687
|
+
...('slow' in baseMotion && !('slow' in own) ? SLOW_BAND : []),
|
|
688
|
+
...('easing' in baseMotion && !('easing' in own)
|
|
689
|
+
? (['--ease-standard'] as const)
|
|
690
|
+
: []),
|
|
691
|
+
];
|
|
692
|
+
if (names.length === 0) {
|
|
693
|
+
return undefined;
|
|
694
|
+
}
|
|
695
|
+
const tokens = base.tokens as Record<string, string | undefined>;
|
|
696
|
+
return Object.fromEntries(
|
|
697
|
+
names.flatMap(name =>
|
|
698
|
+
tokens[name] !== undefined ? [[name, tokens[name]]] : [],
|
|
699
|
+
),
|
|
700
|
+
);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/**
|
|
704
|
+
* Refuses a duration scale that is missing `fast`, `medium` or `ratio` after
|
|
705
|
+
* inheritance. The scale applies only when all three are present, so a partial
|
|
706
|
+
* one beside a knob (`{fast: 100, tempo: 1.2}`) would otherwise be dropped
|
|
707
|
+
* silently, though its fields win over `tempo` (spec:AST-108 FR5). Adaptation
|
|
708
|
+
* rules refuse the same in `completeMotion`.
|
|
709
|
+
*/
|
|
710
|
+
function assertCompleteMotionScale(
|
|
711
|
+
motion: ThemeMotionConfig,
|
|
712
|
+
themeName: string,
|
|
713
|
+
): void {
|
|
714
|
+
const scale = motion as Partial<MotionScaleConfig>;
|
|
715
|
+
const writesScale =
|
|
716
|
+
scale.fast !== undefined ||
|
|
717
|
+
scale.medium !== undefined ||
|
|
718
|
+
scale.ratio !== undefined ||
|
|
719
|
+
scale.slow !== undefined ||
|
|
720
|
+
scale.easing !== undefined;
|
|
721
|
+
if (
|
|
722
|
+
writesScale &&
|
|
723
|
+
(scale.fast === undefined ||
|
|
724
|
+
scale.medium === undefined ||
|
|
725
|
+
scale.ratio === undefined)
|
|
726
|
+
) {
|
|
727
|
+
throw new Error(
|
|
728
|
+
`defineTheme("${themeName}"): \`motion\` sets a duration scale field, so it must supply \`fast\`, \`medium\`, and \`ratio\` unless each missing field is inherited from \`extends\`.`,
|
|
729
|
+
);
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
|
|
651
733
|
/**
|
|
652
734
|
* Create an Astryx theme.
|
|
653
735
|
*
|
|
@@ -682,13 +764,36 @@ export function defineTheme<
|
|
|
682
764
|
// The theme's own value axes and the resolved base an `extends` supplies.
|
|
683
765
|
// The same axis metadata is retained so adaptation rules can complete partial
|
|
684
766
|
// configs without approximating values from unrelated built-in defaults.
|
|
767
|
+
//
|
|
768
|
+
// Motion inherits field by field (spec:AST-108 FR5): a duration-scale field
|
|
769
|
+
// or knob the child leaves unset keeps its base's value, so the child's
|
|
770
|
+
// motion tokens come from the merged configuration. They resolve base first,
|
|
771
|
+
// then generated (`architecture:theme-authoring-contract`): what the child
|
|
772
|
+
// generates replaces the base's tokens, its explicit ones included. A
|
|
773
|
+
// child's motion regenerates only what it sets: an inherited slow band and
|
|
774
|
+
// an inherited easing keep the base's tokens.
|
|
775
|
+
const baseMotion = base?.__axes?.motion;
|
|
776
|
+
const motion: ThemeMotionConfig | undefined =
|
|
777
|
+
input.motion != null && baseMotion != null
|
|
778
|
+
? {...baseMotion, ...input.motion}
|
|
779
|
+
: input.motion;
|
|
780
|
+
if (motion != null) {
|
|
781
|
+
assertCompleteMotionScale(motion, input.name);
|
|
782
|
+
}
|
|
783
|
+
const inheritedScale =
|
|
784
|
+
input.motion != null && base != null && baseMotion != null
|
|
785
|
+
? inheritedScaleTokens(base, baseMotion, input.motion)
|
|
786
|
+
: undefined;
|
|
685
787
|
const ownValues: ThemeValuesInput = {
|
|
686
788
|
typography: input.typography,
|
|
687
789
|
color: input.color,
|
|
688
790
|
radius: input.radius,
|
|
689
|
-
motion
|
|
791
|
+
motion,
|
|
690
792
|
syntax: input.syntax,
|
|
691
|
-
tokens:
|
|
793
|
+
tokens:
|
|
794
|
+
inheritedScale != null && Object.keys(inheritedScale).length > 0
|
|
795
|
+
? {...inheritedScale, ...input.tokens}
|
|
796
|
+
: input.tokens,
|
|
692
797
|
components: input.components,
|
|
693
798
|
};
|
|
694
799
|
const ownAxes: ThemeGenerativeAxes = {
|
|
@@ -701,7 +806,11 @@ export function defineTheme<
|
|
|
701
806
|
? {tokens: base.tokens, components: base.components}
|
|
702
807
|
: undefined;
|
|
703
808
|
|
|
704
|
-
|
|
809
|
+
// An explicit --ease-standard follows the character the theme inherits
|
|
810
|
+
// when it sets no motion of its own (FR2).
|
|
811
|
+
const {tokens, components} = resolveThemeValues(ownValues, seed, {
|
|
812
|
+
inheritedCharacter: baseMotion?.character,
|
|
813
|
+
});
|
|
705
814
|
|
|
706
815
|
// On-media token overrides (base's resolved surface, then defaults, then
|
|
707
816
|
// this theme's own overrides). They compile after adaptations so the
|
|
@@ -106,6 +106,10 @@ const STRUCTURAL_VARS = new Set([
|
|
|
106
106
|
// authored by a theme.
|
|
107
107
|
'--_layout-flush-block-start',
|
|
108
108
|
'--_layout-flush-block-end',
|
|
109
|
+
// ProgressBar's filled share of the track, written inline from `value` on
|
|
110
|
+
// every render and read by the fill's transform. Runtime state, never
|
|
111
|
+
// authored by a theme.
|
|
112
|
+
'--_progress-bar-fill',
|
|
109
113
|
]);
|
|
110
114
|
|
|
111
115
|
/**
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file domainTokens/domainTokenDefaults.ts
|
|
5
|
+
* @input syntaxTokenDefaults, dataTokenDefaults
|
|
6
|
+
* @output domainTokenDefaults
|
|
7
|
+
* @position Merges the domain token defaults for defineTheme. Kept out of the
|
|
8
|
+
* domainTokens barrel because defineTheme sits in a lazily imported module
|
|
9
|
+
* graph, which imports no barrel (pinned by scripts/core-single-bundle.test.mjs).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {syntaxTokenDefaults} from '../syntax/tokens';
|
|
13
|
+
import {dataTokenDefaults} from './dataTokens';
|
|
14
|
+
|
|
15
|
+
/** All domain token defaults merged — used by defineTheme for validation */
|
|
16
|
+
export const domainTokenDefaults: Record<string, string> = {
|
|
17
|
+
...syntaxTokenDefaults,
|
|
18
|
+
...dataTokenDefaults,
|
|
19
|
+
};
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
* @output domainTokenDefaults, DomainTokenName
|
|
7
7
|
* @position Token aggregator; consumed by defineTheme for validation + autocomplete
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Re-exports only. The merged map lives in domainTokenDefaults.ts so that
|
|
10
|
+
* defineTheme, inside a lazily imported module graph, imports it without a
|
|
11
|
+
* barrel. Actual token definitions live in their own directories (syntax/,
|
|
12
|
+
* dataviz/).
|
|
11
13
|
*/
|
|
12
14
|
|
|
13
15
|
export {syntaxTokenDefaults} from '../syntax/tokens';
|
|
@@ -16,16 +18,10 @@ export type {SyntaxTokenName} from '../syntax/tokens';
|
|
|
16
18
|
export {dataTokenDefaults} from './dataTokens';
|
|
17
19
|
export type {DataTokenName} from './dataTokens';
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
export {domainTokenDefaults} from './domainTokenDefaults';
|
|
22
|
+
|
|
21
23
|
import type {SyntaxTokenName} from '../syntax/tokens';
|
|
22
24
|
import type {DataTokenName} from './dataTokens';
|
|
23
25
|
|
|
24
|
-
/** All domain token defaults merged — used by defineTheme for validation */
|
|
25
|
-
export const domainTokenDefaults: Record<string, string> = {
|
|
26
|
-
...syntaxTokenDefaults,
|
|
27
|
-
...dataTokenDefaults,
|
|
28
|
-
};
|
|
29
|
-
|
|
30
26
|
/** Union of all domain token names */
|
|
31
27
|
export type DomainTokenName = SyntaxTokenName | DataTokenName;
|
|
@@ -139,7 +139,7 @@ describe('touch motion stays internal', () => {
|
|
|
139
139
|
fs.readFileSync(path.resolve(__dirname, file), 'utf8');
|
|
140
140
|
expect(read('../index.ts')).not.toMatch(/from '\.\/motion/);
|
|
141
141
|
expect(read('./index.ts')).not.toMatch(
|
|
142
|
-
/expandMotionRoles|motionScaleOf|
|
|
142
|
+
/expandMotionRoles|motionScaleOf|\bMotionConfig\b|MotionRoleValues|MotionCurvePoints|registerMotionTable|motion\/role/,
|
|
143
143
|
);
|
|
144
144
|
});
|
|
145
145
|
});
|
package/src/theme/index.ts
CHANGED
|
@@ -104,6 +104,11 @@ export type {ColorScaleConfig, ColorScaleTokens} from './expandColorScale';
|
|
|
104
104
|
|
|
105
105
|
export {expandMotionScale} from './expandMotionScale';
|
|
106
106
|
export type {MotionScaleConfig, MotionScaleTokens} from './expandMotionScale';
|
|
107
|
+
export type {
|
|
108
|
+
MotionCharacter,
|
|
109
|
+
ThemeMotionConfig,
|
|
110
|
+
ThemeMotionKnobs,
|
|
111
|
+
} from './themeMotion';
|
|
107
112
|
|
|
108
113
|
// Export token defaults and vars for use in custom components and themes
|
|
109
114
|
export {
|