motion 10.18.0 → 11.11.13
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/.turbo/turbo-build.log +32 -0
- package/{LICENSE → LICENSE.md} +2 -2
- package/README.md +99 -7
- package/dist/cjs/index.js +6117 -0
- package/dist/cjs/react-client.js +10003 -0
- package/dist/cjs/react-m.js +1852 -0
- package/dist/es/framer-motion/dist/es/animation/GroupPlaybackControls.mjs +78 -0
- package/dist/es/framer-motion/dist/es/animation/animate/index.mjs +34 -0
- package/dist/es/framer-motion/dist/es/animation/animate/resolve-subjects.mjs +19 -0
- package/dist/es/framer-motion/dist/es/animation/animate/sequence.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/animate/single-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/animation/animate/subject.mjs +52 -0
- package/dist/es/framer-motion/dist/es/animation/animators/AcceleratedAnimation.mjs +318 -0
- package/dist/es/framer-motion/dist/es/animation/animators/BaseAnimation.mjs +113 -0
- package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +384 -0
- package/dist/es/framer-motion/dist/es/animation/animators/drivers/driver-frameloop.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/animators/utils/accelerated-values.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/animators/utils/can-animate.mjs +42 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/NativeAnimation.mjs +169 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-elements.mjs +36 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/animate-style.mjs +12 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/easing.mjs +44 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/index.mjs +23 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/attach-timeline.mjs +6 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs +12 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/linear.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/memo-supports.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/style.mjs +8 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-flags.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-linear-easing.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-partial-keyframes.mjs +13 -0
- package/dist/es/framer-motion/dist/es/animation/animators/waapi/utils/supports-waapi.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/generators/inertia.mjs +87 -0
- package/dist/es/framer-motion/dist/es/animation/generators/keyframes.mjs +51 -0
- package/dist/es/framer-motion/dist/es/animation/generators/spring/find.mjs +89 -0
- package/dist/es/framer-motion/dist/es/animation/generators/spring/index.mjs +129 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/calc-duration.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/is-generator.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/generators/utils/velocity.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/animation-controls.mjs +80 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animate-style.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animate.mjs +17 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animated-state.mjs +64 -0
- package/dist/es/framer-motion/dist/es/animation/hooks/use-animation.mjs +41 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/motion-value.mjs +113 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +75 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs +66 -0
- package/dist/es/framer-motion/dist/es/animation/interfaces/visual-element.mjs +26 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/data-id.mjs +6 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/handoff.mjs +40 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/start.mjs +173 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/store-id.mjs +8 -0
- package/dist/es/framer-motion/dist/es/animation/optimized-appear/store.mjs +4 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/create.mjs +230 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/calc-time.mjs +21 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/edit.mjs +31 -0
- package/dist/es/framer-motion/dist/es/animation/sequence/utils/sort.mjs +14 -0
- package/dist/es/framer-motion/dist/es/animation/utils/create-visual-element.mjs +44 -0
- package/dist/es/framer-motion/dist/es/animation/utils/default-transitions.mjs +40 -0
- package/dist/es/framer-motion/dist/es/animation/utils/get-value-transition.mjs +9 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-animatable.mjs +30 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-animation-controls.mjs +7 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-dom-keyframes.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs +5 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-none.mjs +15 -0
- package/dist/es/framer-motion/dist/es/animation/utils/is-transition-defined.mjs +10 -0
- package/dist/es/framer-motion/dist/es/animation/utils/stagger.mjs +26 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs +77 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs +61 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/index.mjs +163 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs +66 -0
- package/dist/es/framer-motion/dist/es/components/AnimatePresence/utils.mjs +14 -0
- package/dist/es/framer-motion/dist/es/components/AnimateSharedLayout.mjs +15 -0
- package/dist/es/framer-motion/dist/es/components/LayoutGroup/index.mjs +32 -0
- package/dist/es/framer-motion/dist/es/components/LazyMotion/index.mjs +68 -0
- package/dist/es/framer-motion/dist/es/components/MotionConfig/index.mjs +48 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/Group.mjs +53 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/Item.mjs +34 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/namespace.mjs +2 -0
- package/dist/es/framer-motion/dist/es/components/Reorder/utils/check-reorder.mjs +24 -0
- package/dist/es/framer-motion/dist/es/context/DeprecatedLayoutGroupContext.mjs +10 -0
- package/dist/es/framer-motion/dist/es/context/LayoutGroupContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/LazyContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/MotionConfigContext.mjs +13 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/create.mjs +13 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/index.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/MotionContext/utils.mjs +17 -0
- package/dist/es/framer-motion/dist/es/context/PresenceContext.mjs +9 -0
- package/dist/es/framer-motion/dist/es/context/ReorderContext.mjs +6 -0
- package/dist/es/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs +9 -0
- package/dist/es/framer-motion/dist/es/easing/anticipate.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/back.mjs +9 -0
- package/dist/es/framer-motion/dist/es/easing/circ.mjs +8 -0
- package/dist/es/framer-motion/dist/es/easing/cubic-bezier.mjs +51 -0
- package/dist/es/framer-motion/dist/es/easing/ease.mjs +7 -0
- package/dist/es/framer-motion/dist/es/easing/modifiers/mirror.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/modifiers/reverse.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/steps.mjs +15 -0
- package/dist/es/framer-motion/dist/es/easing/utils/create-generator-easing.mjs +17 -0
- package/dist/es/framer-motion/dist/es/easing/utils/get-easing-for-segment.mjs +8 -0
- package/dist/es/framer-motion/dist/es/easing/utils/is-bezier-definition.mjs +3 -0
- package/dist/es/framer-motion/dist/es/easing/utils/is-easing-array.mjs +5 -0
- package/dist/es/framer-motion/dist/es/easing/utils/map.mjs +38 -0
- package/dist/es/framer-motion/dist/es/events/add-dom-event.mjs +6 -0
- package/dist/es/framer-motion/dist/es/events/add-pointer-event.mjs +8 -0
- package/dist/es/framer-motion/dist/es/events/event-info.mjs +15 -0
- package/dist/es/framer-motion/dist/es/events/use-dom-event.mjs +34 -0
- package/dist/es/framer-motion/dist/es/events/utils/is-primary-pointer.mjs +18 -0
- package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +74 -0
- package/dist/es/framer-motion/dist/es/frameloop/frame.mjs +6 -0
- package/dist/es/framer-motion/dist/es/frameloop/index-legacy.mjs +20 -0
- package/dist/es/framer-motion/dist/es/frameloop/microtask.mjs +5 -0
- package/dist/es/framer-motion/dist/es/frameloop/render-step.mjs +80 -0
- package/dist/es/framer-motion/dist/es/frameloop/sync-time.mjs +31 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs +487 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/index.mjs +27 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs +88 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/utils/constraints.mjs +129 -0
- package/dist/es/framer-motion/dist/es/gestures/drag/utils/lock.mjs +53 -0
- package/dist/es/framer-motion/dist/es/gestures/focus.mjs +41 -0
- package/dist/es/framer-motion/dist/es/gestures/hover.mjs +33 -0
- package/dist/es/framer-motion/dist/es/gestures/pan/PanSession.mjs +156 -0
- package/dist/es/framer-motion/dist/es/gestures/pan/index.mjs +50 -0
- package/dist/es/framer-motion/dist/es/gestures/press.mjs +130 -0
- package/dist/es/framer-motion/dist/es/gestures/utils/is-node-or-child.mjs +20 -0
- package/dist/es/framer-motion/dist/es/motion/features/Feature.mjs +9 -0
- package/dist/es/framer-motion/dist/es/motion/features/animation/exit.mjs +31 -0
- package/dist/es/framer-motion/dist/es/motion/features/animation/index.mjs +41 -0
- package/dist/es/framer-motion/dist/es/motion/features/animations.mjs +13 -0
- package/dist/es/framer-motion/dist/es/motion/features/definitions.mjs +28 -0
- package/dist/es/framer-motion/dist/es/motion/features/drag.mjs +17 -0
- package/dist/es/framer-motion/dist/es/motion/features/gestures.mjs +21 -0
- package/dist/es/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs +134 -0
- package/dist/es/framer-motion/dist/es/motion/features/layout.mjs +11 -0
- package/dist/es/framer-motion/dist/es/motion/features/load-features.mjs +12 -0
- package/dist/es/framer-motion/dist/es/motion/features/viewport/index.mjs +72 -0
- package/dist/es/framer-motion/dist/es/motion/features/viewport/observers.mjs +49 -0
- package/dist/es/framer-motion/dist/es/motion/index.mjs +98 -0
- package/dist/es/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/motion/utils/is-motion-component.mjs +12 -0
- package/dist/es/framer-motion/dist/es/motion/utils/symbol.mjs +3 -0
- package/dist/es/framer-motion/dist/es/motion/utils/unwrap-motion-component.mjs +17 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-motion-ref.mjs +36 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-visual-element.mjs +134 -0
- package/dist/es/framer-motion/dist/es/motion/utils/use-visual-state.mjs +82 -0
- package/dist/es/framer-motion/dist/es/motion/utils/valid-prop.mjs +57 -0
- package/dist/es/framer-motion/dist/es/projection/animation/mix-values.mjs +93 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/conversion.mjs +33 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/copy.mjs +31 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-apply.mjs +119 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-calc.mjs +52 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/delta-remove.mjs +54 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/models.mjs +17 -0
- package/dist/es/framer-motion/dist/es/projection/geometry/utils.mjs +31 -0
- package/dist/es/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs +13 -0
- package/dist/es/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs +27 -0
- package/dist/es/framer-motion/dist/es/projection/node/create-projection-node.mjs +1583 -0
- package/dist/es/framer-motion/dist/es/projection/node/group.mjs +24 -0
- package/dist/es/framer-motion/dist/es/projection/node/state.mjs +19 -0
- package/dist/es/framer-motion/dist/es/projection/shared/stack.mjs +112 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-border-radius.mjs +41 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs +35 -0
- package/dist/es/framer-motion/dist/es/projection/styles/scale-correction.mjs +6 -0
- package/dist/es/framer-motion/dist/es/projection/styles/transform.mjs +49 -0
- package/dist/es/framer-motion/dist/es/projection/use-instant-layout-transition.mjs +14 -0
- package/dist/es/framer-motion/dist/es/projection/use-reset-projection.mjs +14 -0
- package/dist/es/framer-motion/dist/es/projection/utils/each-axis.mjs +5 -0
- package/dist/es/framer-motion/dist/es/projection/utils/has-transform.mjs +26 -0
- package/dist/es/framer-motion/dist/es/projection/utils/measure.mjs +17 -0
- package/dist/es/framer-motion/dist/es/render/VisualElement.mjs +477 -0
- package/dist/es/framer-motion/dist/es/render/components/create-factory.mjs +23 -0
- package/dist/es/framer-motion/dist/es/render/components/create-proxy.mjs +38 -0
- package/dist/es/framer-motion/dist/es/render/components/m/create.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/components/m/elements.mjs +227 -0
- package/dist/es/framer-motion/dist/es/render/components/m/proxy.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/create.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/elements.mjs +194 -0
- package/dist/es/framer-motion/dist/es/render/components/motion/proxy.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +130 -0
- package/dist/es/framer-motion/dist/es/render/dom/DOMVisualElement.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/dom/create-visual-element.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-animation.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-max.mjs +14 -0
- package/dist/es/framer-motion/dist/es/render/dom/features-min.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/handle-element.mjs +64 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/handle-window.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/resize/index.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/index.mjs +80 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/info.mjs +56 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/observe.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/edge.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/index.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/inset.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/offset.mjs +35 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/offsets/presets.mjs +20 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/on-scroll-handler.mjs +48 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/supports.mjs +5 -0
- package/dist/es/framer-motion/dist/es/render/dom/scroll/track.mjs +84 -0
- package/dist/es/framer-motion/dist/es/render/dom/use-render.mjs +33 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/css-variables-conversion.mjs +42 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/filter-props.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-css-variable.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs +5 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/resolve-element.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/dom/utils/unit-conversion.mjs +65 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/animatable-none.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/defaults.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/dimensions.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/find.mjs +15 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/get-as-type.mjs +10 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/number-browser.mjs +41 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/number.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/test.mjs +6 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/transform.mjs +31 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/type-auto.mjs +9 -0
- package/dist/es/framer-motion/dist/es/render/dom/value-types/type-int.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/dom/viewport/index.mjs +43 -0
- package/dist/es/framer-motion/dist/es/render/html/HTMLVisualElement.mjs +57 -0
- package/dist/es/framer-motion/dist/es/render/html/config-motion.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/html/use-props.mjs +57 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/build-styles.mjs +65 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/build-transform.mjs +62 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/create-render-state.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/make-none-animatable.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/render.mjs +9 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs +20 -0
- package/dist/es/framer-motion/dist/es/render/html/utils/transform.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/object/ObjectVisualElement.mjs +41 -0
- package/dist/es/framer-motion/dist/es/render/store.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/svg/SVGVisualElement.mjs +45 -0
- package/dist/es/framer-motion/dist/es/render/svg/config-motion.mjs +40 -0
- package/dist/es/framer-motion/dist/es/render/svg/lowercase-elements.mjs +33 -0
- package/dist/es/framer-motion/dist/es/render/svg/use-props.mjs +24 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/build-attrs.mjs +52 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs +30 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/create-render-state.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/path.mjs +32 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/render.mjs +12 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs +19 -0
- package/dist/es/framer-motion/dist/es/render/svg/utils/transform-origin.mjs +18 -0
- package/dist/es/framer-motion/dist/es/render/utils/KeyframesResolver.mjs +164 -0
- package/dist/es/framer-motion/dist/es/render/utils/animation-state.mjs +332 -0
- package/dist/es/framer-motion/dist/es/render/utils/compare-by-depth.mjs +3 -0
- package/dist/es/framer-motion/dist/es/render/utils/flat-tree.mjs +24 -0
- package/dist/es/framer-motion/dist/es/render/utils/get-variant-context.mjs +28 -0
- package/dist/es/framer-motion/dist/es/render/utils/is-controlling-variants.mjs +13 -0
- package/dist/es/framer-motion/dist/es/render/utils/is-variant-label.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/utils/motion-values.mjs +59 -0
- package/dist/es/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs +8 -0
- package/dist/es/framer-motion/dist/es/render/utils/resolve-variants.mjs +36 -0
- package/dist/es/framer-motion/dist/es/render/utils/setters.mjs +27 -0
- package/dist/es/framer-motion/dist/es/render/utils/variant-props.mjs +12 -0
- package/dist/es/framer-motion/dist/es/utils/GlobalConfig.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/array.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/clamp.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/delay.mjs +24 -0
- package/dist/es/framer-motion/dist/es/utils/distance.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/errors.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/get-context-window.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/hsla-to-rgba.mjs +42 -0
- package/dist/es/framer-motion/dist/es/utils/interpolate.mjs +75 -0
- package/dist/es/framer-motion/dist/es/utils/is-browser.mjs +3 -0
- package/dist/es/framer-motion/dist/es/utils/is-numerical-string.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/is-ref-object.mjs +7 -0
- package/dist/es/framer-motion/dist/es/utils/is-zero-value-string.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/memo.mjs +10 -0
- package/dist/es/framer-motion/dist/es/utils/mix/color.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/mix/complex.mjs +94 -0
- package/dist/es/framer-motion/dist/es/utils/mix/immediate.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/mix/index.mjs +14 -0
- package/dist/es/framer-motion/dist/es/utils/mix/number.mjs +26 -0
- package/dist/es/framer-motion/dist/es/utils/mix/visibility.mjs +16 -0
- package/dist/es/framer-motion/dist/es/utils/noop.mjs +3 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/default.mjs +9 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/fill.mjs +12 -0
- package/dist/es/framer-motion/dist/es/utils/offsets/time.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/pipe.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/progress.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/index.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/state.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion-config.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/resolve-value.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/shallow-compare.mjs +14 -0
- package/dist/es/framer-motion/dist/es/utils/subscription-manager.mjs +40 -0
- package/dist/es/framer-motion/dist/es/utils/time-conversion.mjs +10 -0
- package/dist/es/framer-motion/dist/es/utils/transform.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/use-animation-frame.mjs +21 -0
- package/dist/es/framer-motion/dist/es/utils/use-constant.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/use-cycle.mjs +47 -0
- package/dist/es/framer-motion/dist/es/utils/use-force-update.mjs +19 -0
- package/dist/es/framer-motion/dist/es/utils/use-in-view.mjs +23 -0
- package/dist/es/framer-motion/dist/es/utils/use-instant-transition-state.mjs +5 -0
- package/dist/es/framer-motion/dist/es/utils/use-instant-transition.mjs +41 -0
- package/dist/es/framer-motion/dist/es/utils/use-is-mounted.mjs +15 -0
- package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -0
- package/dist/es/framer-motion/dist/es/utils/use-motion-value-event.mjs +13 -0
- package/dist/es/framer-motion/dist/es/utils/use-unmount-effect.mjs +7 -0
- package/dist/es/framer-motion/dist/es/utils/velocity-per-second.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/warn-once.mjs +11 -0
- package/dist/es/framer-motion/dist/es/utils/wrap.mjs +6 -0
- package/dist/es/framer-motion/dist/es/value/index.mjs +319 -0
- package/dist/es/framer-motion/dist/es/value/scroll/use-element-scroll.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/scroll/use-viewport-scroll.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/types/color/hex.mjs +40 -0
- package/dist/es/framer-motion/dist/es/value/types/color/hsla.mjs +22 -0
- package/dist/es/framer-motion/dist/es/value/types/color/index.mjs +27 -0
- package/dist/es/framer-motion/dist/es/value/types/color/rgba.mjs +25 -0
- package/dist/es/framer-motion/dist/es/value/types/color/utils.mjs +29 -0
- package/dist/es/framer-motion/dist/es/value/types/complex/filter.mjs +30 -0
- package/dist/es/framer-motion/dist/es/value/types/complex/index.mjs +92 -0
- package/dist/es/framer-motion/dist/es/value/types/numbers/index.mjs +17 -0
- package/dist/es/framer-motion/dist/es/value/types/numbers/units.mjs +17 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/color-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/float-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/is-nullish.mjs +5 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/sanitize.mjs +5 -0
- package/dist/es/framer-motion/dist/es/value/types/utils/single-color-regex.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/use-combine-values.mjs +37 -0
- package/dist/es/framer-motion/dist/es/value/use-computed.mjs +19 -0
- package/dist/es/framer-motion/dist/es/value/use-inverted-scale.mjs +52 -0
- package/dist/es/framer-motion/dist/es/value/use-motion-template.mjs +45 -0
- package/dist/es/framer-motion/dist/es/value/use-motion-value.mjs +38 -0
- package/dist/es/framer-motion/dist/es/value/use-scroll.mjs +39 -0
- package/dist/es/framer-motion/dist/es/value/use-spring.mjs +85 -0
- package/dist/es/framer-motion/dist/es/value/use-time.mjs +10 -0
- package/dist/es/framer-motion/dist/es/value/use-transform.mjs +29 -0
- package/dist/es/framer-motion/dist/es/value/use-velocity.mjs +35 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/WillChangeMotionValue.mjs +22 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/add-will-change.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/get-will-change-name.mjs +14 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/index.mjs +8 -0
- package/dist/es/framer-motion/dist/es/value/use-will-change/is.mjs +7 -0
- package/dist/es/framer-motion/dist/es/value/utils/is-motion-value.mjs +3 -0
- package/dist/es/framer-motion/dist/es/value/utils/resolve-motion-value.mjs +16 -0
- package/dist/es/motion/lib/index.mjs +30 -0
- package/dist/es/motion/lib/react-client.mjs +3 -0
- package/dist/es/motion/lib/react-m.mjs +3 -0
- package/dist/es/motion/lib/react.mjs +110 -0
- package/dist/index.d.ts +1 -0
- package/dist/motion.dev.js +6121 -0
- package/dist/motion.js +1 -0
- package/dist/react-client.d.ts +1 -0
- package/dist/react-m.d.ts +1 -0
- package/dist/react.d.ts +1 -0
- package/lib/index.js +1 -3
- package/lib/index.js.map +1 -1
- package/lib/react-client.js +3 -0
- package/lib/react-client.js.map +1 -0
- package/lib/react-m.js +3 -0
- package/lib/react-m.js.map +1 -0
- package/lib/react.js +3 -0
- package/lib/react.js.map +1 -0
- package/package.json +79 -29
- package/react/package.json +6 -0
- package/react-client/package.json +6 -0
- package/react-m/package.json +6 -0
- package/rollup.config.mjs +184 -0
- package/src/index.ts +1 -0
- package/src/react-client.ts +3 -0
- package/src/react-m.ts +3 -0
- package/src/react.ts +3 -0
- package/tsconfig.json +25 -0
- package/types/index.d.ts +1 -4
- package/types/react-client.d.ts +1 -0
- package/types/react-m.d.ts +1 -0
- package/types/react.d.ts +1 -0
- package/CHANGELOG.md +0 -378
- package/dist/animate.cjs.js +0 -22
- package/dist/animate.es.js +0 -19
- package/dist/main.cjs.js +0 -21
- package/dist/main.es.js +0 -3
- package/dist/motion.min.js +0 -1
- package/dist/motion.umd.js +0 -2364
- package/dist/size-index.js +0 -1
- package/lib/animate.js +0 -17
- package/lib/animate.js.map +0 -1
- package/types/animate.d.ts +0 -6
- package/types/animate.d.ts.map +0 -1
- package/types/index.d.ts.map +0 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { useContext, useRef, useInsertionEffect, useEffect } from 'react';
|
|
2
|
+
import { PresenceContext } from '../../context/PresenceContext.mjs';
|
|
3
|
+
import { MotionContext } from '../../context/MotionContext/index.mjs';
|
|
4
|
+
import { useIsomorphicLayoutEffect } from '../../utils/use-isomorphic-effect.mjs';
|
|
5
|
+
import { LazyContext } from '../../context/LazyContext.mjs';
|
|
6
|
+
import { MotionConfigContext } from '../../context/MotionConfigContext.mjs';
|
|
7
|
+
import { optimizedAppearDataAttribute } from '../../animation/optimized-appear/data-id.mjs';
|
|
8
|
+
import { microtask } from '../../frameloop/microtask.mjs';
|
|
9
|
+
import { isRefObject } from '../../utils/is-ref-object.mjs';
|
|
10
|
+
import { SwitchLayoutGroupContext } from '../../context/SwitchLayoutGroupContext.mjs';
|
|
11
|
+
|
|
12
|
+
function useVisualElement(Component, visualState, props, createVisualElement, ProjectionNodeConstructor) {
|
|
13
|
+
var _a, _b;
|
|
14
|
+
const { visualElement: parent } = useContext(MotionContext);
|
|
15
|
+
const lazyContext = useContext(LazyContext);
|
|
16
|
+
const presenceContext = useContext(PresenceContext);
|
|
17
|
+
const reducedMotionConfig = useContext(MotionConfigContext).reducedMotion;
|
|
18
|
+
const visualElementRef = useRef();
|
|
19
|
+
/**
|
|
20
|
+
* If we haven't preloaded a renderer, check to see if we have one lazy-loaded
|
|
21
|
+
*/
|
|
22
|
+
createVisualElement = createVisualElement || lazyContext.renderer;
|
|
23
|
+
if (!visualElementRef.current && createVisualElement) {
|
|
24
|
+
visualElementRef.current = createVisualElement(Component, {
|
|
25
|
+
visualState,
|
|
26
|
+
parent,
|
|
27
|
+
props,
|
|
28
|
+
presenceContext,
|
|
29
|
+
blockInitialAnimation: presenceContext
|
|
30
|
+
? presenceContext.initial === false
|
|
31
|
+
: false,
|
|
32
|
+
reducedMotionConfig,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const visualElement = visualElementRef.current;
|
|
36
|
+
/**
|
|
37
|
+
* Load Motion gesture and animation features. These are rendered as renderless
|
|
38
|
+
* components so each feature can optionally make use of React lifecycle methods.
|
|
39
|
+
*/
|
|
40
|
+
const initialLayoutGroupConfig = useContext(SwitchLayoutGroupContext);
|
|
41
|
+
if (visualElement &&
|
|
42
|
+
!visualElement.projection &&
|
|
43
|
+
ProjectionNodeConstructor &&
|
|
44
|
+
(visualElement.type === "html" || visualElement.type === "svg")) {
|
|
45
|
+
createProjectionNode(visualElementRef.current, props, ProjectionNodeConstructor, initialLayoutGroupConfig);
|
|
46
|
+
}
|
|
47
|
+
const isMounted = useRef(false);
|
|
48
|
+
useInsertionEffect(() => {
|
|
49
|
+
/**
|
|
50
|
+
* Check the component has already mounted before calling
|
|
51
|
+
* `update` unnecessarily. This ensures we skip the initial update.
|
|
52
|
+
*/
|
|
53
|
+
if (visualElement && isMounted.current) {
|
|
54
|
+
visualElement.update(props, presenceContext);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* Cache this value as we want to know whether HandoffAppearAnimations
|
|
59
|
+
* was present on initial render - it will be deleted after this.
|
|
60
|
+
*/
|
|
61
|
+
const optimisedAppearId = props[optimizedAppearDataAttribute];
|
|
62
|
+
const wantsHandoff = useRef(Boolean(optimisedAppearId) &&
|
|
63
|
+
!((_a = window.MotionHandoffIsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId)) &&
|
|
64
|
+
((_b = window.MotionHasOptimisedAnimation) === null || _b === void 0 ? void 0 : _b.call(window, optimisedAppearId)));
|
|
65
|
+
useIsomorphicLayoutEffect(() => {
|
|
66
|
+
if (!visualElement)
|
|
67
|
+
return;
|
|
68
|
+
isMounted.current = true;
|
|
69
|
+
window.MotionIsMounted = true;
|
|
70
|
+
visualElement.updateFeatures();
|
|
71
|
+
microtask.render(visualElement.render);
|
|
72
|
+
/**
|
|
73
|
+
* Ideally this function would always run in a useEffect.
|
|
74
|
+
*
|
|
75
|
+
* However, if we have optimised appear animations to handoff from,
|
|
76
|
+
* it needs to happen synchronously to ensure there's no flash of
|
|
77
|
+
* incorrect styles in the event of a hydration error.
|
|
78
|
+
*
|
|
79
|
+
* So if we detect a situtation where optimised appear animations
|
|
80
|
+
* are running, we use useLayoutEffect to trigger animations.
|
|
81
|
+
*/
|
|
82
|
+
if (wantsHandoff.current && visualElement.animationState) {
|
|
83
|
+
visualElement.animationState.animateChanges();
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (!visualElement)
|
|
88
|
+
return;
|
|
89
|
+
if (!wantsHandoff.current && visualElement.animationState) {
|
|
90
|
+
visualElement.animationState.animateChanges();
|
|
91
|
+
}
|
|
92
|
+
if (wantsHandoff.current) {
|
|
93
|
+
// This ensures all future calls to animateChanges() in this component will run in useEffect
|
|
94
|
+
queueMicrotask(() => {
|
|
95
|
+
var _a;
|
|
96
|
+
(_a = window.MotionHandoffMarkAsComplete) === null || _a === void 0 ? void 0 : _a.call(window, optimisedAppearId);
|
|
97
|
+
});
|
|
98
|
+
wantsHandoff.current = false;
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
return visualElement;
|
|
102
|
+
}
|
|
103
|
+
function createProjectionNode(visualElement, props, ProjectionNodeConstructor, initialPromotionConfig) {
|
|
104
|
+
const { layoutId, layout, drag, dragConstraints, layoutScroll, layoutRoot, } = props;
|
|
105
|
+
visualElement.projection = new ProjectionNodeConstructor(visualElement.latestValues, props["data-framer-portal-id"]
|
|
106
|
+
? undefined
|
|
107
|
+
: getClosestProjectingNode(visualElement.parent));
|
|
108
|
+
visualElement.projection.setOptions({
|
|
109
|
+
layoutId,
|
|
110
|
+
layout,
|
|
111
|
+
alwaysMeasureLayout: Boolean(drag) || (dragConstraints && isRefObject(dragConstraints)),
|
|
112
|
+
visualElement,
|
|
113
|
+
/**
|
|
114
|
+
* TODO: Update options in an effect. This could be tricky as it'll be too late
|
|
115
|
+
* to update by the time layout animations run.
|
|
116
|
+
* We also need to fix this safeToRemove by linking it up to the one returned by usePresence,
|
|
117
|
+
* ensuring it gets called if there's no potential layout animations.
|
|
118
|
+
*
|
|
119
|
+
*/
|
|
120
|
+
animationType: typeof layout === "string" ? layout : "both",
|
|
121
|
+
initialPromotionConfig,
|
|
122
|
+
layoutScroll,
|
|
123
|
+
layoutRoot,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function getClosestProjectingNode(visualElement) {
|
|
127
|
+
if (!visualElement)
|
|
128
|
+
return undefined;
|
|
129
|
+
return visualElement.options.allowProjection !== false
|
|
130
|
+
? visualElement.projection
|
|
131
|
+
: getClosestProjectingNode(visualElement.parent);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export { useVisualElement };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { isAnimationControls } from '../../animation/utils/is-animation-controls.mjs';
|
|
3
|
+
import { PresenceContext } from '../../context/PresenceContext.mjs';
|
|
4
|
+
import { resolveVariantFromProps } from '../../render/utils/resolve-variants.mjs';
|
|
5
|
+
import { useConstant } from '../../utils/use-constant.mjs';
|
|
6
|
+
import { resolveMotionValue } from '../../value/utils/resolve-motion-value.mjs';
|
|
7
|
+
import { MotionContext } from '../../context/MotionContext/index.mjs';
|
|
8
|
+
import { isControllingVariants, isVariantNode } from '../../render/utils/is-controlling-variants.mjs';
|
|
9
|
+
|
|
10
|
+
function makeState({ scrapeMotionValuesFromProps, createRenderState, onMount, }, props, context, presenceContext) {
|
|
11
|
+
const state = {
|
|
12
|
+
latestValues: makeLatestValues(props, context, presenceContext, scrapeMotionValuesFromProps),
|
|
13
|
+
renderState: createRenderState(),
|
|
14
|
+
};
|
|
15
|
+
if (onMount) {
|
|
16
|
+
state.mount = (instance) => onMount(props, instance, state);
|
|
17
|
+
}
|
|
18
|
+
return state;
|
|
19
|
+
}
|
|
20
|
+
const makeUseVisualState = (config) => (props, isStatic) => {
|
|
21
|
+
const context = useContext(MotionContext);
|
|
22
|
+
const presenceContext = useContext(PresenceContext);
|
|
23
|
+
const make = () => makeState(config, props, context, presenceContext);
|
|
24
|
+
return isStatic ? make() : useConstant(make);
|
|
25
|
+
};
|
|
26
|
+
function makeLatestValues(props, context, presenceContext, scrapeMotionValues) {
|
|
27
|
+
const values = {};
|
|
28
|
+
const motionValues = scrapeMotionValues(props, {});
|
|
29
|
+
for (const key in motionValues) {
|
|
30
|
+
values[key] = resolveMotionValue(motionValues[key]);
|
|
31
|
+
}
|
|
32
|
+
let { initial, animate } = props;
|
|
33
|
+
const isControllingVariants$1 = isControllingVariants(props);
|
|
34
|
+
const isVariantNode$1 = isVariantNode(props);
|
|
35
|
+
if (context &&
|
|
36
|
+
isVariantNode$1 &&
|
|
37
|
+
!isControllingVariants$1 &&
|
|
38
|
+
props.inherit !== false) {
|
|
39
|
+
if (initial === undefined)
|
|
40
|
+
initial = context.initial;
|
|
41
|
+
if (animate === undefined)
|
|
42
|
+
animate = context.animate;
|
|
43
|
+
}
|
|
44
|
+
let isInitialAnimationBlocked = presenceContext
|
|
45
|
+
? presenceContext.initial === false
|
|
46
|
+
: false;
|
|
47
|
+
isInitialAnimationBlocked = isInitialAnimationBlocked || initial === false;
|
|
48
|
+
const variantToSet = isInitialAnimationBlocked ? animate : initial;
|
|
49
|
+
if (variantToSet &&
|
|
50
|
+
typeof variantToSet !== "boolean" &&
|
|
51
|
+
!isAnimationControls(variantToSet)) {
|
|
52
|
+
const list = Array.isArray(variantToSet) ? variantToSet : [variantToSet];
|
|
53
|
+
for (let i = 0; i < list.length; i++) {
|
|
54
|
+
const resolved = resolveVariantFromProps(props, list[i]);
|
|
55
|
+
if (resolved) {
|
|
56
|
+
const { transitionEnd, transition, ...target } = resolved;
|
|
57
|
+
for (const key in target) {
|
|
58
|
+
let valueTarget = target[key];
|
|
59
|
+
if (Array.isArray(valueTarget)) {
|
|
60
|
+
/**
|
|
61
|
+
* Take final keyframe if the initial animation is blocked because
|
|
62
|
+
* we want to initialise at the end of that blocked animation.
|
|
63
|
+
*/
|
|
64
|
+
const index = isInitialAnimationBlocked
|
|
65
|
+
? valueTarget.length - 1
|
|
66
|
+
: 0;
|
|
67
|
+
valueTarget = valueTarget[index];
|
|
68
|
+
}
|
|
69
|
+
if (valueTarget !== null) {
|
|
70
|
+
values[key] = valueTarget;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
for (const key in transitionEnd) {
|
|
74
|
+
values[key] = transitionEnd[key];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return values;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { makeUseVisualState };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A list of all valid MotionProps.
|
|
3
|
+
*
|
|
4
|
+
* @privateRemarks
|
|
5
|
+
* This doesn't throw if a `MotionProp` name is missing - it should.
|
|
6
|
+
*/
|
|
7
|
+
const validMotionProps = new Set([
|
|
8
|
+
"animate",
|
|
9
|
+
"exit",
|
|
10
|
+
"variants",
|
|
11
|
+
"initial",
|
|
12
|
+
"style",
|
|
13
|
+
"values",
|
|
14
|
+
"variants",
|
|
15
|
+
"transition",
|
|
16
|
+
"transformTemplate",
|
|
17
|
+
"custom",
|
|
18
|
+
"inherit",
|
|
19
|
+
"onBeforeLayoutMeasure",
|
|
20
|
+
"onAnimationStart",
|
|
21
|
+
"onAnimationComplete",
|
|
22
|
+
"onUpdate",
|
|
23
|
+
"onDragStart",
|
|
24
|
+
"onDrag",
|
|
25
|
+
"onDragEnd",
|
|
26
|
+
"onMeasureDragConstraints",
|
|
27
|
+
"onDirectionLock",
|
|
28
|
+
"onDragTransitionEnd",
|
|
29
|
+
"_dragX",
|
|
30
|
+
"_dragY",
|
|
31
|
+
"onHoverStart",
|
|
32
|
+
"onHoverEnd",
|
|
33
|
+
"onViewportEnter",
|
|
34
|
+
"onViewportLeave",
|
|
35
|
+
"globalTapTarget",
|
|
36
|
+
"ignoreStrict",
|
|
37
|
+
"viewport",
|
|
38
|
+
]);
|
|
39
|
+
/**
|
|
40
|
+
* Check whether a prop name is a valid `MotionProp` key.
|
|
41
|
+
*
|
|
42
|
+
* @param key - Name of the property to check
|
|
43
|
+
* @returns `true` is key is a valid `MotionProp`.
|
|
44
|
+
*
|
|
45
|
+
* @public
|
|
46
|
+
*/
|
|
47
|
+
function isValidMotionProp(key) {
|
|
48
|
+
return (key.startsWith("while") ||
|
|
49
|
+
(key.startsWith("drag") && key !== "draggable") ||
|
|
50
|
+
key.startsWith("layout") ||
|
|
51
|
+
key.startsWith("onTap") ||
|
|
52
|
+
key.startsWith("onPan") ||
|
|
53
|
+
key.startsWith("onLayout") ||
|
|
54
|
+
validMotionProps.has(key));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { isValidMotionProp };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { circOut } from '../../easing/circ.mjs';
|
|
2
|
+
import { progress } from '../../utils/progress.mjs';
|
|
3
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
4
|
+
import { noop } from '../../utils/noop.mjs';
|
|
5
|
+
import { percent, px } from '../../value/types/numbers/units.mjs';
|
|
6
|
+
|
|
7
|
+
const borders = ["TopLeft", "TopRight", "BottomLeft", "BottomRight"];
|
|
8
|
+
const numBorders = borders.length;
|
|
9
|
+
const asNumber = (value) => typeof value === "string" ? parseFloat(value) : value;
|
|
10
|
+
const isPx = (value) => typeof value === "number" || px.test(value);
|
|
11
|
+
function mixValues(target, follow, lead, progress, shouldCrossfadeOpacity, isOnlyMember) {
|
|
12
|
+
if (shouldCrossfadeOpacity) {
|
|
13
|
+
target.opacity = mixNumber(0,
|
|
14
|
+
// TODO Reinstate this if only child
|
|
15
|
+
lead.opacity !== undefined ? lead.opacity : 1, easeCrossfadeIn(progress));
|
|
16
|
+
target.opacityExit = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, 0, easeCrossfadeOut(progress));
|
|
17
|
+
}
|
|
18
|
+
else if (isOnlyMember) {
|
|
19
|
+
target.opacity = mixNumber(follow.opacity !== undefined ? follow.opacity : 1, lead.opacity !== undefined ? lead.opacity : 1, progress);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Mix border radius
|
|
23
|
+
*/
|
|
24
|
+
for (let i = 0; i < numBorders; i++) {
|
|
25
|
+
const borderLabel = `border${borders[i]}Radius`;
|
|
26
|
+
let followRadius = getRadius(follow, borderLabel);
|
|
27
|
+
let leadRadius = getRadius(lead, borderLabel);
|
|
28
|
+
if (followRadius === undefined && leadRadius === undefined)
|
|
29
|
+
continue;
|
|
30
|
+
followRadius || (followRadius = 0);
|
|
31
|
+
leadRadius || (leadRadius = 0);
|
|
32
|
+
const canMix = followRadius === 0 ||
|
|
33
|
+
leadRadius === 0 ||
|
|
34
|
+
isPx(followRadius) === isPx(leadRadius);
|
|
35
|
+
if (canMix) {
|
|
36
|
+
target[borderLabel] = Math.max(mixNumber(asNumber(followRadius), asNumber(leadRadius), progress), 0);
|
|
37
|
+
if (percent.test(leadRadius) || percent.test(followRadius)) {
|
|
38
|
+
target[borderLabel] += "%";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
target[borderLabel] = leadRadius;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Mix rotation
|
|
47
|
+
*/
|
|
48
|
+
if (follow.rotate || lead.rotate) {
|
|
49
|
+
target.rotate = mixNumber(follow.rotate || 0, lead.rotate || 0, progress);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function getRadius(values, radiusName) {
|
|
53
|
+
return values[radiusName] !== undefined
|
|
54
|
+
? values[radiusName]
|
|
55
|
+
: values.borderRadius;
|
|
56
|
+
}
|
|
57
|
+
// /**
|
|
58
|
+
// * We only want to mix the background color if there's a follow element
|
|
59
|
+
// * that we're not crossfading opacity between. For instance with switch
|
|
60
|
+
// * AnimateSharedLayout animations, this helps the illusion of a continuous
|
|
61
|
+
// * element being animated but also cuts down on the number of paints triggered
|
|
62
|
+
// * for elements where opacity is doing that work for us.
|
|
63
|
+
// */
|
|
64
|
+
// if (
|
|
65
|
+
// !hasFollowElement &&
|
|
66
|
+
// latestLeadValues.backgroundColor &&
|
|
67
|
+
// latestFollowValues.backgroundColor
|
|
68
|
+
// ) {
|
|
69
|
+
// /**
|
|
70
|
+
// * This isn't ideal performance-wise as mixColor is creating a new function every frame.
|
|
71
|
+
// * We could probably create a mixer that runs at the start of the animation but
|
|
72
|
+
// * the idea behind the crossfader is that it runs dynamically between two potentially
|
|
73
|
+
// * changing targets (ie opacity or borderRadius may be animating independently via variants)
|
|
74
|
+
// */
|
|
75
|
+
// leadState.backgroundColor = followState.backgroundColor = mixColor(
|
|
76
|
+
// latestFollowValues.backgroundColor as string,
|
|
77
|
+
// latestLeadValues.backgroundColor as string
|
|
78
|
+
// )(p)
|
|
79
|
+
// }
|
|
80
|
+
const easeCrossfadeIn = /*@__PURE__*/ compress(0, 0.5, circOut);
|
|
81
|
+
const easeCrossfadeOut = /*@__PURE__*/ compress(0.5, 0.95, noop);
|
|
82
|
+
function compress(min, max, easing) {
|
|
83
|
+
return (p) => {
|
|
84
|
+
// Could replace ifs with clamp
|
|
85
|
+
if (p < min)
|
|
86
|
+
return 0;
|
|
87
|
+
if (p > max)
|
|
88
|
+
return 1;
|
|
89
|
+
return easing(progress(min, max, p));
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export { mixValues };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounding boxes tend to be defined as top, left, right, bottom. For various operations
|
|
3
|
+
* it's easier to consider each axis individually. This function returns a bounding box
|
|
4
|
+
* as a map of single-axis min/max values.
|
|
5
|
+
*/
|
|
6
|
+
function convertBoundingBoxToBox({ top, left, right, bottom, }) {
|
|
7
|
+
return {
|
|
8
|
+
x: { min: left, max: right },
|
|
9
|
+
y: { min: top, max: bottom },
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function convertBoxToBoundingBox({ x, y }) {
|
|
13
|
+
return { top: y.min, right: x.max, bottom: y.max, left: x.min };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Applies a TransformPoint function to a bounding box. TransformPoint is usually a function
|
|
17
|
+
* provided by Framer to allow measured points to be corrected for device scaling. This is used
|
|
18
|
+
* when measuring DOM elements and DOM event points.
|
|
19
|
+
*/
|
|
20
|
+
function transformBoxPoints(point, transformPoint) {
|
|
21
|
+
if (!transformPoint)
|
|
22
|
+
return point;
|
|
23
|
+
const topLeft = transformPoint({ x: point.left, y: point.top });
|
|
24
|
+
const bottomRight = transformPoint({ x: point.right, y: point.bottom });
|
|
25
|
+
return {
|
|
26
|
+
top: topLeft.y,
|
|
27
|
+
left: topLeft.x,
|
|
28
|
+
bottom: bottomRight.y,
|
|
29
|
+
right: bottomRight.x,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { convertBoundingBoxToBox, convertBoxToBoundingBox, transformBoxPoints };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reset an axis to the provided origin box.
|
|
3
|
+
*
|
|
4
|
+
* This is a mutative operation.
|
|
5
|
+
*/
|
|
6
|
+
function copyAxisInto(axis, originAxis) {
|
|
7
|
+
axis.min = originAxis.min;
|
|
8
|
+
axis.max = originAxis.max;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Reset a box to the provided origin box.
|
|
12
|
+
*
|
|
13
|
+
* This is a mutative operation.
|
|
14
|
+
*/
|
|
15
|
+
function copyBoxInto(box, originBox) {
|
|
16
|
+
copyAxisInto(box.x, originBox.x);
|
|
17
|
+
copyAxisInto(box.y, originBox.y);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Reset a delta to the provided origin box.
|
|
21
|
+
*
|
|
22
|
+
* This is a mutative operation.
|
|
23
|
+
*/
|
|
24
|
+
function copyAxisDeltaInto(delta, originDelta) {
|
|
25
|
+
delta.translate = originDelta.translate;
|
|
26
|
+
delta.scale = originDelta.scale;
|
|
27
|
+
delta.originPoint = originDelta.originPoint;
|
|
28
|
+
delta.origin = originDelta.origin;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { copyAxisDeltaInto, copyAxisInto, copyBoxInto };
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
import { hasTransform } from '../utils/has-transform.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Scales a point based on a factor and an originPoint
|
|
6
|
+
*/
|
|
7
|
+
function scalePoint(point, scale, originPoint) {
|
|
8
|
+
const distanceFromOrigin = point - originPoint;
|
|
9
|
+
const scaled = scale * distanceFromOrigin;
|
|
10
|
+
return originPoint + scaled;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Applies a translate/scale delta to a point
|
|
14
|
+
*/
|
|
15
|
+
function applyPointDelta(point, translate, scale, originPoint, boxScale) {
|
|
16
|
+
if (boxScale !== undefined) {
|
|
17
|
+
point = scalePoint(point, boxScale, originPoint);
|
|
18
|
+
}
|
|
19
|
+
return scalePoint(point, scale, originPoint) + translate;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Applies a translate/scale delta to an axis
|
|
23
|
+
*/
|
|
24
|
+
function applyAxisDelta(axis, translate = 0, scale = 1, originPoint, boxScale) {
|
|
25
|
+
axis.min = applyPointDelta(axis.min, translate, scale, originPoint, boxScale);
|
|
26
|
+
axis.max = applyPointDelta(axis.max, translate, scale, originPoint, boxScale);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Applies a translate/scale delta to a box
|
|
30
|
+
*/
|
|
31
|
+
function applyBoxDelta(box, { x, y }) {
|
|
32
|
+
applyAxisDelta(box.x, x.translate, x.scale, x.originPoint);
|
|
33
|
+
applyAxisDelta(box.y, y.translate, y.scale, y.originPoint);
|
|
34
|
+
}
|
|
35
|
+
const TREE_SCALE_SNAP_MIN = 0.999999999999;
|
|
36
|
+
const TREE_SCALE_SNAP_MAX = 1.0000000000001;
|
|
37
|
+
/**
|
|
38
|
+
* Apply a tree of deltas to a box. We do this to calculate the effect of all the transforms
|
|
39
|
+
* in a tree upon our box before then calculating how to project it into our desired viewport-relative box
|
|
40
|
+
*
|
|
41
|
+
* This is the final nested loop within updateLayoutDelta for future refactoring
|
|
42
|
+
*/
|
|
43
|
+
function applyTreeDeltas(box, treeScale, treePath, isSharedTransition = false) {
|
|
44
|
+
const treeLength = treePath.length;
|
|
45
|
+
if (!treeLength)
|
|
46
|
+
return;
|
|
47
|
+
// Reset the treeScale
|
|
48
|
+
treeScale.x = treeScale.y = 1;
|
|
49
|
+
let node;
|
|
50
|
+
let delta;
|
|
51
|
+
for (let i = 0; i < treeLength; i++) {
|
|
52
|
+
node = treePath[i];
|
|
53
|
+
delta = node.projectionDelta;
|
|
54
|
+
/**
|
|
55
|
+
* TODO: Prefer to remove this, but currently we have motion components with
|
|
56
|
+
* display: contents in Framer.
|
|
57
|
+
*/
|
|
58
|
+
const { visualElement } = node.options;
|
|
59
|
+
if (visualElement &&
|
|
60
|
+
visualElement.props.style &&
|
|
61
|
+
visualElement.props.style.display === "contents") {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (isSharedTransition &&
|
|
65
|
+
node.options.layoutScroll &&
|
|
66
|
+
node.scroll &&
|
|
67
|
+
node !== node.root) {
|
|
68
|
+
transformBox(box, {
|
|
69
|
+
x: -node.scroll.offset.x,
|
|
70
|
+
y: -node.scroll.offset.y,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (delta) {
|
|
74
|
+
// Incoporate each ancestor's scale into a culmulative treeScale for this component
|
|
75
|
+
treeScale.x *= delta.x.scale;
|
|
76
|
+
treeScale.y *= delta.y.scale;
|
|
77
|
+
// Apply each ancestor's calculated delta into this component's recorded layout box
|
|
78
|
+
applyBoxDelta(box, delta);
|
|
79
|
+
}
|
|
80
|
+
if (isSharedTransition && hasTransform(node.latestValues)) {
|
|
81
|
+
transformBox(box, node.latestValues);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Snap tree scale back to 1 if it's within a non-perceivable threshold.
|
|
86
|
+
* This will help reduce useless scales getting rendered.
|
|
87
|
+
*/
|
|
88
|
+
if (treeScale.x < TREE_SCALE_SNAP_MAX &&
|
|
89
|
+
treeScale.x > TREE_SCALE_SNAP_MIN) {
|
|
90
|
+
treeScale.x = 1.0;
|
|
91
|
+
}
|
|
92
|
+
if (treeScale.y < TREE_SCALE_SNAP_MAX &&
|
|
93
|
+
treeScale.y > TREE_SCALE_SNAP_MIN) {
|
|
94
|
+
treeScale.y = 1.0;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function translateAxis(axis, distance) {
|
|
98
|
+
axis.min = axis.min + distance;
|
|
99
|
+
axis.max = axis.max + distance;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Apply a transform to an axis from the latest resolved motion values.
|
|
103
|
+
* This function basically acts as a bridge between a flat motion value map
|
|
104
|
+
* and applyAxisDelta
|
|
105
|
+
*/
|
|
106
|
+
function transformAxis(axis, axisTranslate, axisScale, boxScale, axisOrigin = 0.5) {
|
|
107
|
+
const originPoint = mixNumber(axis.min, axis.max, axisOrigin);
|
|
108
|
+
// Apply the axis delta to the final axis
|
|
109
|
+
applyAxisDelta(axis, axisTranslate, axisScale, originPoint, boxScale);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Apply a transform to a box from the latest resolved motion values.
|
|
113
|
+
*/
|
|
114
|
+
function transformBox(box, transform) {
|
|
115
|
+
transformAxis(box.x, transform.x, transform.scaleX, transform.scale, transform.originX);
|
|
116
|
+
transformAxis(box.y, transform.y, transform.scaleY, transform.scale, transform.originY);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { applyAxisDelta, applyBoxDelta, applyPointDelta, applyTreeDeltas, scalePoint, transformAxis, transformBox, translateAxis };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
|
|
3
|
+
const SCALE_PRECISION = 0.0001;
|
|
4
|
+
const SCALE_MIN = 1 - SCALE_PRECISION;
|
|
5
|
+
const SCALE_MAX = 1 + SCALE_PRECISION;
|
|
6
|
+
const TRANSLATE_PRECISION = 0.01;
|
|
7
|
+
const TRANSLATE_MIN = 0 - TRANSLATE_PRECISION;
|
|
8
|
+
const TRANSLATE_MAX = 0 + TRANSLATE_PRECISION;
|
|
9
|
+
function calcLength(axis) {
|
|
10
|
+
return axis.max - axis.min;
|
|
11
|
+
}
|
|
12
|
+
function isNear(value, target, maxDistance) {
|
|
13
|
+
return Math.abs(value - target) <= maxDistance;
|
|
14
|
+
}
|
|
15
|
+
function calcAxisDelta(delta, source, target, origin = 0.5) {
|
|
16
|
+
delta.origin = origin;
|
|
17
|
+
delta.originPoint = mixNumber(source.min, source.max, delta.origin);
|
|
18
|
+
delta.scale = calcLength(target) / calcLength(source);
|
|
19
|
+
delta.translate =
|
|
20
|
+
mixNumber(target.min, target.max, delta.origin) - delta.originPoint;
|
|
21
|
+
if ((delta.scale >= SCALE_MIN && delta.scale <= SCALE_MAX) ||
|
|
22
|
+
isNaN(delta.scale)) {
|
|
23
|
+
delta.scale = 1.0;
|
|
24
|
+
}
|
|
25
|
+
if ((delta.translate >= TRANSLATE_MIN &&
|
|
26
|
+
delta.translate <= TRANSLATE_MAX) ||
|
|
27
|
+
isNaN(delta.translate)) {
|
|
28
|
+
delta.translate = 0.0;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function calcBoxDelta(delta, source, target, origin) {
|
|
32
|
+
calcAxisDelta(delta.x, source.x, target.x, origin ? origin.originX : undefined);
|
|
33
|
+
calcAxisDelta(delta.y, source.y, target.y, origin ? origin.originY : undefined);
|
|
34
|
+
}
|
|
35
|
+
function calcRelativeAxis(target, relative, parent) {
|
|
36
|
+
target.min = parent.min + relative.min;
|
|
37
|
+
target.max = target.min + calcLength(relative);
|
|
38
|
+
}
|
|
39
|
+
function calcRelativeBox(target, relative, parent) {
|
|
40
|
+
calcRelativeAxis(target.x, relative.x, parent.x);
|
|
41
|
+
calcRelativeAxis(target.y, relative.y, parent.y);
|
|
42
|
+
}
|
|
43
|
+
function calcRelativeAxisPosition(target, layout, parent) {
|
|
44
|
+
target.min = layout.min - parent.min;
|
|
45
|
+
target.max = target.min + calcLength(layout);
|
|
46
|
+
}
|
|
47
|
+
function calcRelativePosition(target, layout, parent) {
|
|
48
|
+
calcRelativeAxisPosition(target.x, layout.x, parent.x);
|
|
49
|
+
calcRelativeAxisPosition(target.y, layout.y, parent.y);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { calcAxisDelta, calcBoxDelta, calcLength, calcRelativeAxis, calcRelativeAxisPosition, calcRelativeBox, calcRelativePosition, isNear };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { mixNumber } from '../../utils/mix/number.mjs';
|
|
2
|
+
import { percent } from '../../value/types/numbers/units.mjs';
|
|
3
|
+
import { scalePoint } from './delta-apply.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Remove a delta from a point. This is essentially the steps of applyPointDelta in reverse
|
|
7
|
+
*/
|
|
8
|
+
function removePointDelta(point, translate, scale, originPoint, boxScale) {
|
|
9
|
+
point -= translate;
|
|
10
|
+
point = scalePoint(point, 1 / scale, originPoint);
|
|
11
|
+
if (boxScale !== undefined) {
|
|
12
|
+
point = scalePoint(point, 1 / boxScale, originPoint);
|
|
13
|
+
}
|
|
14
|
+
return point;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Remove a delta from an axis. This is essentially the steps of applyAxisDelta in reverse
|
|
18
|
+
*/
|
|
19
|
+
function removeAxisDelta(axis, translate = 0, scale = 1, origin = 0.5, boxScale, originAxis = axis, sourceAxis = axis) {
|
|
20
|
+
if (percent.test(translate)) {
|
|
21
|
+
translate = parseFloat(translate);
|
|
22
|
+
const relativeProgress = mixNumber(sourceAxis.min, sourceAxis.max, translate / 100);
|
|
23
|
+
translate = relativeProgress - sourceAxis.min;
|
|
24
|
+
}
|
|
25
|
+
if (typeof translate !== "number")
|
|
26
|
+
return;
|
|
27
|
+
let originPoint = mixNumber(originAxis.min, originAxis.max, origin);
|
|
28
|
+
if (axis === originAxis)
|
|
29
|
+
originPoint -= translate;
|
|
30
|
+
axis.min = removePointDelta(axis.min, translate, scale, originPoint, boxScale);
|
|
31
|
+
axis.max = removePointDelta(axis.max, translate, scale, originPoint, boxScale);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Remove a transforms from an axis. This is essentially the steps of applyAxisTransforms in reverse
|
|
35
|
+
* and acts as a bridge between motion values and removeAxisDelta
|
|
36
|
+
*/
|
|
37
|
+
function removeAxisTransforms(axis, transforms, [key, scaleKey, originKey], origin, sourceAxis) {
|
|
38
|
+
removeAxisDelta(axis, transforms[key], transforms[scaleKey], transforms[originKey], transforms.scale, origin, sourceAxis);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The names of the motion values we want to apply as translation, scale and origin.
|
|
42
|
+
*/
|
|
43
|
+
const xKeys = ["x", "scaleX", "originX"];
|
|
44
|
+
const yKeys = ["y", "scaleY", "originY"];
|
|
45
|
+
/**
|
|
46
|
+
* Remove a transforms from an box. This is essentially the steps of applyAxisBox in reverse
|
|
47
|
+
* and acts as a bridge between motion values and removeAxisDelta
|
|
48
|
+
*/
|
|
49
|
+
function removeBoxTransforms(box, transforms, originBox, sourceBox) {
|
|
50
|
+
removeAxisTransforms(box.x, transforms, xKeys, originBox ? originBox.x : undefined, sourceBox ? sourceBox.x : undefined);
|
|
51
|
+
removeAxisTransforms(box.y, transforms, yKeys, originBox ? originBox.y : undefined, sourceBox ? sourceBox.y : undefined);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { removeAxisDelta, removeAxisTransforms, removeBoxTransforms, removePointDelta };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const createAxisDelta = () => ({
|
|
2
|
+
translate: 0,
|
|
3
|
+
scale: 1,
|
|
4
|
+
origin: 0,
|
|
5
|
+
originPoint: 0,
|
|
6
|
+
});
|
|
7
|
+
const createDelta = () => ({
|
|
8
|
+
x: createAxisDelta(),
|
|
9
|
+
y: createAxisDelta(),
|
|
10
|
+
});
|
|
11
|
+
const createAxis = () => ({ min: 0, max: 0 });
|
|
12
|
+
const createBox = () => ({
|
|
13
|
+
x: createAxis(),
|
|
14
|
+
y: createAxis(),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
export { createAxis, createAxisDelta, createBox, createDelta };
|