motion 10.17.1 → 11.11.12
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 +29 -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 +112 -0
- package/dist/es/framer-motion/dist/es/animation/animators/MainThreadAnimation.mjs +380 -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/interfaces/motion-value.mjs +105 -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/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/use-presence.mjs +40 -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/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/utils/is-primary-pointer.mjs +18 -0
- package/dist/es/framer-motion/dist/es/frameloop/batcher.mjs +71 -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/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/symbol.mjs +3 -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/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/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/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/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/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/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 +11 -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/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-constant.mjs +18 -0
- package/dist/es/framer-motion/dist/es/utils/use-isomorphic-effect.mjs +6 -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 +313 -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-will-change/add-will-change.mjs +14 -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/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/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 +174 -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 -372
- 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 -2359
- 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,42 @@
|
|
|
1
|
+
import { invariant } from '../../../utils/errors.mjs';
|
|
2
|
+
import { isNumericalString } from '../../../utils/is-numerical-string.mjs';
|
|
3
|
+
import { isCSSVariableToken } from './is-css-variable.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parse Framer's special CSS variable format into a CSS token and a fallback.
|
|
7
|
+
*
|
|
8
|
+
* ```
|
|
9
|
+
* `var(--foo, #fff)` => [`--foo`, '#fff']
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @param current
|
|
13
|
+
*/
|
|
14
|
+
const splitCSSVariableRegex =
|
|
15
|
+
// eslint-disable-next-line redos-detector/no-unsafe-regex -- false positive, as it can match a lot of words
|
|
16
|
+
/^var\(--(?:([\w-]+)|([\w-]+), ?([a-zA-Z\d ()%#.,-]+))\)/u;
|
|
17
|
+
function parseCSSVariable(current) {
|
|
18
|
+
const match = splitCSSVariableRegex.exec(current);
|
|
19
|
+
if (!match)
|
|
20
|
+
return [,];
|
|
21
|
+
const [, token1, token2, fallback] = match;
|
|
22
|
+
return [`--${token1 !== null && token1 !== void 0 ? token1 : token2}`, fallback];
|
|
23
|
+
}
|
|
24
|
+
const maxDepth = 4;
|
|
25
|
+
function getVariableValue(current, element, depth = 1) {
|
|
26
|
+
invariant(depth <= maxDepth, `Max CSS variable fallback depth detected in property "${current}". This may indicate a circular fallback dependency.`);
|
|
27
|
+
const [token, fallback] = parseCSSVariable(current);
|
|
28
|
+
// No CSS variable detected
|
|
29
|
+
if (!token)
|
|
30
|
+
return;
|
|
31
|
+
// Attempt to read this CSS variable off the element
|
|
32
|
+
const resolved = window.getComputedStyle(element).getPropertyValue(token);
|
|
33
|
+
if (resolved) {
|
|
34
|
+
const trimmed = resolved.trim();
|
|
35
|
+
return isNumericalString(trimmed) ? parseFloat(trimmed) : trimmed;
|
|
36
|
+
}
|
|
37
|
+
return isCSSVariableToken(fallback)
|
|
38
|
+
? getVariableValue(fallback, element, depth + 1)
|
|
39
|
+
: fallback;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { getVariableValue, parseCSSVariable };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { isValidMotionProp } from '../../../motion/utils/valid-prop.mjs';
|
|
2
|
+
|
|
3
|
+
let shouldForward = (key) => !isValidMotionProp(key);
|
|
4
|
+
function loadExternalIsValidProp(isValidProp) {
|
|
5
|
+
if (!isValidProp)
|
|
6
|
+
return;
|
|
7
|
+
// Explicitly filter our events
|
|
8
|
+
shouldForward = (key) => key.startsWith("on") ? !isValidMotionProp(key) : isValidProp(key);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Emotion and Styled Components both allow users to pass through arbitrary props to their components
|
|
12
|
+
* to dynamically generate CSS. They both use the `@emotion/is-prop-valid` package to determine which
|
|
13
|
+
* of these should be passed to the underlying DOM node.
|
|
14
|
+
*
|
|
15
|
+
* However, when styling a Motion component `styled(motion.div)`, both packages pass through *all* props
|
|
16
|
+
* as it's seen as an arbitrary component rather than a DOM node. Motion only allows arbitrary props
|
|
17
|
+
* passed through the `custom` prop so it doesn't *need* the payload or computational overhead of
|
|
18
|
+
* `@emotion/is-prop-valid`, however to fix this problem we need to use it.
|
|
19
|
+
*
|
|
20
|
+
* By making it an optionalDependency we can offer this functionality only in the situations where it's
|
|
21
|
+
* actually required.
|
|
22
|
+
*/
|
|
23
|
+
try {
|
|
24
|
+
/**
|
|
25
|
+
* We attempt to import this package but require won't be defined in esm environments, in that case
|
|
26
|
+
* isPropValid will have to be provided via `MotionContext`. In a 6.0.0 this should probably be removed
|
|
27
|
+
* in favour of explicit injection.
|
|
28
|
+
*/
|
|
29
|
+
loadExternalIsValidProp(require("@emotion/is-prop-valid").default);
|
|
30
|
+
}
|
|
31
|
+
catch (_a) {
|
|
32
|
+
// We don't need to actually do anything here - the fallback is the existing `isPropValid`.
|
|
33
|
+
}
|
|
34
|
+
function filterProps(props, isDom, forwardMotionProps) {
|
|
35
|
+
const filteredProps = {};
|
|
36
|
+
for (const key in props) {
|
|
37
|
+
/**
|
|
38
|
+
* values is considered a valid prop by Emotion, so if it's present
|
|
39
|
+
* this will be rendered out to the DOM unless explicitly filtered.
|
|
40
|
+
*
|
|
41
|
+
* We check the type as it could be used with the `feColorMatrix`
|
|
42
|
+
* element, which we support.
|
|
43
|
+
*/
|
|
44
|
+
if (key === "values" && typeof props.values === "object")
|
|
45
|
+
continue;
|
|
46
|
+
if (shouldForward(key) ||
|
|
47
|
+
(forwardMotionProps === true && isValidMotionProp(key)) ||
|
|
48
|
+
(!isDom && !isValidMotionProp(key)) ||
|
|
49
|
+
// If trying to use native HTML drag events, forward drag listeners
|
|
50
|
+
(props["draggable"] &&
|
|
51
|
+
key.startsWith("onDrag"))) {
|
|
52
|
+
filteredProps[key] =
|
|
53
|
+
props[key];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return filteredProps;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { filterProps, loadExternalIsValidProp };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const checkStringStartsWith = (token) => (key) => typeof key === "string" && key.startsWith(token);
|
|
2
|
+
const isCSSVariableName =
|
|
3
|
+
/*@__PURE__*/ checkStringStartsWith("--");
|
|
4
|
+
const startsAsVariableToken =
|
|
5
|
+
/*@__PURE__*/ checkStringStartsWith("var(--");
|
|
6
|
+
const isCSSVariableToken = (value) => {
|
|
7
|
+
const startsWithToken = startsAsVariableToken(value);
|
|
8
|
+
if (!startsWithToken)
|
|
9
|
+
return false;
|
|
10
|
+
// Ensure any comments are stripped from the value as this can harm performance of the regex.
|
|
11
|
+
return singleCssVariableRegex.test(value.split("/*")[0].trim());
|
|
12
|
+
};
|
|
13
|
+
const singleCssVariableRegex = /var\(--(?:[\w-]+\s*|[\w-]+\s*,(?:\s*[^)(\s]|\s*\((?:[^)(]|\([^)(]*\))*\))+\s*)\)$/iu;
|
|
14
|
+
|
|
15
|
+
export { isCSSVariableName, isCSSVariableToken };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { lowercaseSVGElements } from '../../svg/lowercase-elements.mjs';
|
|
2
|
+
|
|
3
|
+
function isSVGComponent(Component) {
|
|
4
|
+
if (
|
|
5
|
+
/**
|
|
6
|
+
* If it's not a string, it's a custom React component. Currently we only support
|
|
7
|
+
* HTML custom React components.
|
|
8
|
+
*/
|
|
9
|
+
typeof Component !== "string" ||
|
|
10
|
+
/**
|
|
11
|
+
* If it contains a dash, the element is a custom HTML webcomponent.
|
|
12
|
+
*/
|
|
13
|
+
Component.includes("-")) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
else if (
|
|
17
|
+
/**
|
|
18
|
+
* If it's in our list of lowercase SVG tags, it's an SVG component
|
|
19
|
+
*/
|
|
20
|
+
lowercaseSVGElements.indexOf(Component) > -1 ||
|
|
21
|
+
/**
|
|
22
|
+
* If it contains a capital letter, it's an SVG component
|
|
23
|
+
*/
|
|
24
|
+
/[A-Z]/u.test(Component)) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export { isSVGComponent };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { invariant } from '../../../utils/errors.mjs';
|
|
2
|
+
|
|
3
|
+
function resolveElements(elements, scope, selectorCache) {
|
|
4
|
+
var _a;
|
|
5
|
+
if (typeof elements === "string") {
|
|
6
|
+
let root = document;
|
|
7
|
+
if (scope) {
|
|
8
|
+
invariant(Boolean(scope.current), "Scope provided, but no element detected.");
|
|
9
|
+
root = scope.current;
|
|
10
|
+
}
|
|
11
|
+
if (selectorCache) {
|
|
12
|
+
(_a = selectorCache[elements]) !== null && _a !== void 0 ? _a : (selectorCache[elements] = root.querySelectorAll(elements));
|
|
13
|
+
elements = selectorCache[elements];
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
elements = root.querySelectorAll(elements);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else if (elements instanceof Element) {
|
|
20
|
+
elements = [elements];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Return an empty array
|
|
24
|
+
*/
|
|
25
|
+
return Array.from(elements || []);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { resolveElements };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { transformPropOrder } from '../../html/utils/transform.mjs';
|
|
2
|
+
import { number } from '../../../value/types/numbers/index.mjs';
|
|
3
|
+
import { px } from '../../../value/types/numbers/units.mjs';
|
|
4
|
+
|
|
5
|
+
const positionalKeys = new Set([
|
|
6
|
+
"width",
|
|
7
|
+
"height",
|
|
8
|
+
"top",
|
|
9
|
+
"left",
|
|
10
|
+
"right",
|
|
11
|
+
"bottom",
|
|
12
|
+
"x",
|
|
13
|
+
"y",
|
|
14
|
+
"translateX",
|
|
15
|
+
"translateY",
|
|
16
|
+
]);
|
|
17
|
+
const isNumOrPxType = (v) => v === number || v === px;
|
|
18
|
+
const getPosFromMatrix = (matrix, pos) => parseFloat(matrix.split(", ")[pos]);
|
|
19
|
+
const getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {
|
|
20
|
+
if (transform === "none" || !transform)
|
|
21
|
+
return 0;
|
|
22
|
+
const matrix3d = transform.match(/^matrix3d\((.+)\)$/u);
|
|
23
|
+
if (matrix3d) {
|
|
24
|
+
return getPosFromMatrix(matrix3d[1], pos3);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const matrix = transform.match(/^matrix\((.+)\)$/u);
|
|
28
|
+
if (matrix) {
|
|
29
|
+
return getPosFromMatrix(matrix[1], pos2);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const transformKeys = new Set(["x", "y", "z"]);
|
|
37
|
+
const nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));
|
|
38
|
+
function removeNonTranslationalTransform(visualElement) {
|
|
39
|
+
const removedTransforms = [];
|
|
40
|
+
nonTranslationalTransformKeys.forEach((key) => {
|
|
41
|
+
const value = visualElement.getValue(key);
|
|
42
|
+
if (value !== undefined) {
|
|
43
|
+
removedTransforms.push([key, value.get()]);
|
|
44
|
+
value.set(key.startsWith("scale") ? 1 : 0);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
return removedTransforms;
|
|
48
|
+
}
|
|
49
|
+
const positionalValues = {
|
|
50
|
+
// Dimensions
|
|
51
|
+
width: ({ x }, { paddingLeft = "0", paddingRight = "0" }) => x.max - x.min - parseFloat(paddingLeft) - parseFloat(paddingRight),
|
|
52
|
+
height: ({ y }, { paddingTop = "0", paddingBottom = "0" }) => y.max - y.min - parseFloat(paddingTop) - parseFloat(paddingBottom),
|
|
53
|
+
top: (_bbox, { top }) => parseFloat(top),
|
|
54
|
+
left: (_bbox, { left }) => parseFloat(left),
|
|
55
|
+
bottom: ({ y }, { top }) => parseFloat(top) + (y.max - y.min),
|
|
56
|
+
right: ({ x }, { left }) => parseFloat(left) + (x.max - x.min),
|
|
57
|
+
// Transform
|
|
58
|
+
x: getTranslateFromMatrix(4, 13),
|
|
59
|
+
y: getTranslateFromMatrix(5, 14),
|
|
60
|
+
};
|
|
61
|
+
// Alias translate longform names
|
|
62
|
+
positionalValues.translateX = positionalValues.x;
|
|
63
|
+
positionalValues.translateY = positionalValues.y;
|
|
64
|
+
|
|
65
|
+
export { isNumOrPxType, positionalKeys, positionalValues, removeNonTranslationalTransform };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { complex } from '../../../value/types/complex/index.mjs';
|
|
2
|
+
import { filter } from '../../../value/types/complex/filter.mjs';
|
|
3
|
+
import { getDefaultValueType } from './defaults.mjs';
|
|
4
|
+
|
|
5
|
+
function getAnimatableNone(key, value) {
|
|
6
|
+
let defaultValueType = getDefaultValueType(key);
|
|
7
|
+
if (defaultValueType !== filter)
|
|
8
|
+
defaultValueType = complex;
|
|
9
|
+
// If value is not recognised as animatable, ie "none", create an animatable version origin based on the target
|
|
10
|
+
return defaultValueType.getAnimatableNone
|
|
11
|
+
? defaultValueType.getAnimatableNone(value)
|
|
12
|
+
: undefined;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { getAnimatableNone };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { color } from '../../../value/types/color/index.mjs';
|
|
2
|
+
import { filter } from '../../../value/types/complex/filter.mjs';
|
|
3
|
+
import { numberValueTypes } from './number.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* A map of default value types for common values
|
|
7
|
+
*/
|
|
8
|
+
const defaultValueTypes = {
|
|
9
|
+
...numberValueTypes,
|
|
10
|
+
// Color props
|
|
11
|
+
color,
|
|
12
|
+
backgroundColor: color,
|
|
13
|
+
outlineColor: color,
|
|
14
|
+
fill: color,
|
|
15
|
+
stroke: color,
|
|
16
|
+
// Border props
|
|
17
|
+
borderColor: color,
|
|
18
|
+
borderTopColor: color,
|
|
19
|
+
borderRightColor: color,
|
|
20
|
+
borderBottomColor: color,
|
|
21
|
+
borderLeftColor: color,
|
|
22
|
+
filter,
|
|
23
|
+
WebkitFilter: filter,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Gets the default ValueType for the provided value key
|
|
27
|
+
*/
|
|
28
|
+
const getDefaultValueType = (key) => defaultValueTypes[key];
|
|
29
|
+
|
|
30
|
+
export { defaultValueTypes, getDefaultValueType };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { number } from '../../../value/types/numbers/index.mjs';
|
|
2
|
+
import { px, percent, degrees, vw, vh } from '../../../value/types/numbers/units.mjs';
|
|
3
|
+
import { testValueType } from './test.mjs';
|
|
4
|
+
import { auto } from './type-auto.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A list of value types commonly used for dimensions
|
|
8
|
+
*/
|
|
9
|
+
const dimensionValueTypes = [number, px, percent, degrees, vw, vh, auto];
|
|
10
|
+
/**
|
|
11
|
+
* Tests a dimensional value against the list of dimension ValueTypes
|
|
12
|
+
*/
|
|
13
|
+
const findDimensionValueType = (v) => dimensionValueTypes.find(testValueType(v));
|
|
14
|
+
|
|
15
|
+
export { dimensionValueTypes, findDimensionValueType };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { color } from '../../../value/types/color/index.mjs';
|
|
2
|
+
import { complex } from '../../../value/types/complex/index.mjs';
|
|
3
|
+
import { dimensionValueTypes } from './dimensions.mjs';
|
|
4
|
+
import { testValueType } from './test.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A list of all ValueTypes
|
|
8
|
+
*/
|
|
9
|
+
const valueTypes = [...dimensionValueTypes, color, complex];
|
|
10
|
+
/**
|
|
11
|
+
* Tests a value against the list of ValueTypes
|
|
12
|
+
*/
|
|
13
|
+
const findValueType = (v) => valueTypes.find(testValueType(v));
|
|
14
|
+
|
|
15
|
+
export { findValueType };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { px } from '../../../value/types/numbers/units.mjs';
|
|
2
|
+
|
|
3
|
+
const browserNumberValueTypes = {
|
|
4
|
+
// Border props
|
|
5
|
+
borderWidth: px,
|
|
6
|
+
borderTopWidth: px,
|
|
7
|
+
borderRightWidth: px,
|
|
8
|
+
borderBottomWidth: px,
|
|
9
|
+
borderLeftWidth: px,
|
|
10
|
+
borderRadius: px,
|
|
11
|
+
radius: px,
|
|
12
|
+
borderTopLeftRadius: px,
|
|
13
|
+
borderTopRightRadius: px,
|
|
14
|
+
borderBottomRightRadius: px,
|
|
15
|
+
borderBottomLeftRadius: px,
|
|
16
|
+
// Positioning props
|
|
17
|
+
width: px,
|
|
18
|
+
maxWidth: px,
|
|
19
|
+
height: px,
|
|
20
|
+
maxHeight: px,
|
|
21
|
+
top: px,
|
|
22
|
+
right: px,
|
|
23
|
+
bottom: px,
|
|
24
|
+
left: px,
|
|
25
|
+
// Spacing props
|
|
26
|
+
padding: px,
|
|
27
|
+
paddingTop: px,
|
|
28
|
+
paddingRight: px,
|
|
29
|
+
paddingBottom: px,
|
|
30
|
+
paddingLeft: px,
|
|
31
|
+
margin: px,
|
|
32
|
+
marginTop: px,
|
|
33
|
+
marginRight: px,
|
|
34
|
+
marginBottom: px,
|
|
35
|
+
marginLeft: px,
|
|
36
|
+
// Misc
|
|
37
|
+
backgroundPositionX: px,
|
|
38
|
+
backgroundPositionY: px,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export { browserNumberValueTypes };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { alpha } from '../../../value/types/numbers/index.mjs';
|
|
2
|
+
import { px } from '../../../value/types/numbers/units.mjs';
|
|
3
|
+
import { browserNumberValueTypes } from './number-browser.mjs';
|
|
4
|
+
import { transformValueTypes } from './transform.mjs';
|
|
5
|
+
import { int } from './type-int.mjs';
|
|
6
|
+
|
|
7
|
+
const numberValueTypes = {
|
|
8
|
+
...browserNumberValueTypes,
|
|
9
|
+
...transformValueTypes,
|
|
10
|
+
zIndex: int,
|
|
11
|
+
size: px,
|
|
12
|
+
// SVG
|
|
13
|
+
fillOpacity: alpha,
|
|
14
|
+
strokeOpacity: alpha,
|
|
15
|
+
numOctaves: int,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { numberValueTypes };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { scale, alpha } from '../../../value/types/numbers/index.mjs';
|
|
2
|
+
import { degrees, px, progressPercentage } from '../../../value/types/numbers/units.mjs';
|
|
3
|
+
|
|
4
|
+
const transformValueTypes = {
|
|
5
|
+
rotate: degrees,
|
|
6
|
+
rotateX: degrees,
|
|
7
|
+
rotateY: degrees,
|
|
8
|
+
rotateZ: degrees,
|
|
9
|
+
scale,
|
|
10
|
+
scaleX: scale,
|
|
11
|
+
scaleY: scale,
|
|
12
|
+
scaleZ: scale,
|
|
13
|
+
skew: degrees,
|
|
14
|
+
skewX: degrees,
|
|
15
|
+
skewY: degrees,
|
|
16
|
+
distance: px,
|
|
17
|
+
translateX: px,
|
|
18
|
+
translateY: px,
|
|
19
|
+
translateZ: px,
|
|
20
|
+
x: px,
|
|
21
|
+
y: px,
|
|
22
|
+
z: px,
|
|
23
|
+
perspective: px,
|
|
24
|
+
transformPerspective: px,
|
|
25
|
+
opacity: alpha,
|
|
26
|
+
originX: progressPercentage,
|
|
27
|
+
originY: progressPercentage,
|
|
28
|
+
originZ: px,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { transformValueTypes };
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { resolveElements } from '../utils/resolve-element.mjs';
|
|
2
|
+
|
|
3
|
+
const thresholds = {
|
|
4
|
+
some: 0,
|
|
5
|
+
all: 1,
|
|
6
|
+
};
|
|
7
|
+
function inView(elementOrSelector, onStart, { root, margin: rootMargin, amount = "some" } = {}) {
|
|
8
|
+
const elements = resolveElements(elementOrSelector);
|
|
9
|
+
const activeIntersections = new WeakMap();
|
|
10
|
+
const onIntersectionChange = (entries) => {
|
|
11
|
+
entries.forEach((entry) => {
|
|
12
|
+
const onEnd = activeIntersections.get(entry.target);
|
|
13
|
+
/**
|
|
14
|
+
* If there's no change to the intersection, we don't need to
|
|
15
|
+
* do anything here.
|
|
16
|
+
*/
|
|
17
|
+
if (entry.isIntersecting === Boolean(onEnd))
|
|
18
|
+
return;
|
|
19
|
+
if (entry.isIntersecting) {
|
|
20
|
+
const newOnEnd = onStart(entry);
|
|
21
|
+
if (typeof newOnEnd === "function") {
|
|
22
|
+
activeIntersections.set(entry.target, newOnEnd);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
observer.unobserve(entry.target);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else if (onEnd) {
|
|
29
|
+
onEnd(entry);
|
|
30
|
+
activeIntersections.delete(entry.target);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
const observer = new IntersectionObserver(onIntersectionChange, {
|
|
35
|
+
root,
|
|
36
|
+
rootMargin,
|
|
37
|
+
threshold: typeof amount === "number" ? amount : thresholds[amount],
|
|
38
|
+
});
|
|
39
|
+
elements.forEach((element) => observer.observe(element));
|
|
40
|
+
return () => observer.disconnect();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { inView };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { buildHTMLStyles } from './utils/build-styles.mjs';
|
|
2
|
+
import { isCSSVariableName } from '../dom/utils/is-css-variable.mjs';
|
|
3
|
+
import { transformProps } from './utils/transform.mjs';
|
|
4
|
+
import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';
|
|
5
|
+
import { renderHTML } from './utils/render.mjs';
|
|
6
|
+
import { getDefaultValueType } from '../dom/value-types/defaults.mjs';
|
|
7
|
+
import { measureViewportBox } from '../../projection/utils/measure.mjs';
|
|
8
|
+
import { DOMVisualElement } from '../dom/DOMVisualElement.mjs';
|
|
9
|
+
import { isMotionValue } from '../../value/utils/is-motion-value.mjs';
|
|
10
|
+
|
|
11
|
+
function getComputedStyle(element) {
|
|
12
|
+
return window.getComputedStyle(element);
|
|
13
|
+
}
|
|
14
|
+
class HTMLVisualElement extends DOMVisualElement {
|
|
15
|
+
constructor() {
|
|
16
|
+
super(...arguments);
|
|
17
|
+
this.type = "html";
|
|
18
|
+
this.renderInstance = renderHTML;
|
|
19
|
+
}
|
|
20
|
+
readValueFromInstance(instance, key) {
|
|
21
|
+
if (transformProps.has(key)) {
|
|
22
|
+
const defaultType = getDefaultValueType(key);
|
|
23
|
+
return defaultType ? defaultType.default || 0 : 0;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const computedStyle = getComputedStyle(instance);
|
|
27
|
+
const value = (isCSSVariableName(key)
|
|
28
|
+
? computedStyle.getPropertyValue(key)
|
|
29
|
+
: computedStyle[key]) || 0;
|
|
30
|
+
return typeof value === "string" ? value.trim() : value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
measureInstanceViewportBox(instance, { transformPagePoint }) {
|
|
34
|
+
return measureViewportBox(instance, transformPagePoint);
|
|
35
|
+
}
|
|
36
|
+
build(renderState, latestValues, props) {
|
|
37
|
+
buildHTMLStyles(renderState, latestValues, props.transformTemplate);
|
|
38
|
+
}
|
|
39
|
+
scrapeMotionValuesFromProps(props, prevProps, visualElement) {
|
|
40
|
+
return scrapeMotionValuesFromProps(props, prevProps, visualElement);
|
|
41
|
+
}
|
|
42
|
+
handleChildMotionValue() {
|
|
43
|
+
if (this.childSubscription) {
|
|
44
|
+
this.childSubscription();
|
|
45
|
+
delete this.childSubscription;
|
|
46
|
+
}
|
|
47
|
+
const { children } = this.props;
|
|
48
|
+
if (isMotionValue(children)) {
|
|
49
|
+
this.childSubscription = children.on("change", (latest) => {
|
|
50
|
+
if (this.current)
|
|
51
|
+
this.current.textContent = `${latest}`;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { HTMLVisualElement, getComputedStyle };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { makeUseVisualState } from '../../motion/utils/use-visual-state.mjs';
|
|
2
|
+
import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';
|
|
3
|
+
import { createHtmlRenderState } from './utils/create-render-state.mjs';
|
|
4
|
+
|
|
5
|
+
const htmlMotionConfig = {
|
|
6
|
+
useVisualState: makeUseVisualState({
|
|
7
|
+
scrapeMotionValuesFromProps,
|
|
8
|
+
createRenderState: createHtmlRenderState,
|
|
9
|
+
}),
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export { htmlMotionConfig };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { isForcedMotionValue } from '../../motion/utils/is-forced-motion-value.mjs';
|
|
3
|
+
import { isMotionValue } from '../../value/utils/is-motion-value.mjs';
|
|
4
|
+
import { buildHTMLStyles } from './utils/build-styles.mjs';
|
|
5
|
+
import { createHtmlRenderState } from './utils/create-render-state.mjs';
|
|
6
|
+
|
|
7
|
+
function copyRawValuesOnly(target, source, props) {
|
|
8
|
+
for (const key in source) {
|
|
9
|
+
if (!isMotionValue(source[key]) && !isForcedMotionValue(key, props)) {
|
|
10
|
+
target[key] = source[key];
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function useInitialMotionValues({ transformTemplate }, visualState) {
|
|
15
|
+
return useMemo(() => {
|
|
16
|
+
const state = createHtmlRenderState();
|
|
17
|
+
buildHTMLStyles(state, visualState, transformTemplate);
|
|
18
|
+
return Object.assign({}, state.vars, state.style);
|
|
19
|
+
}, [visualState]);
|
|
20
|
+
}
|
|
21
|
+
function useStyle(props, visualState) {
|
|
22
|
+
const styleProp = props.style || {};
|
|
23
|
+
const style = {};
|
|
24
|
+
/**
|
|
25
|
+
* Copy non-Motion Values straight into style
|
|
26
|
+
*/
|
|
27
|
+
copyRawValuesOnly(style, styleProp, props);
|
|
28
|
+
Object.assign(style, useInitialMotionValues(props, visualState));
|
|
29
|
+
return style;
|
|
30
|
+
}
|
|
31
|
+
function useHTMLProps(props, visualState) {
|
|
32
|
+
// The `any` isn't ideal but it is the type of createElement props argument
|
|
33
|
+
const htmlProps = {};
|
|
34
|
+
const style = useStyle(props, visualState);
|
|
35
|
+
if (props.drag && props.dragListener !== false) {
|
|
36
|
+
// Disable the ghost element when a user drags
|
|
37
|
+
htmlProps.draggable = false;
|
|
38
|
+
// Disable text selection
|
|
39
|
+
style.userSelect =
|
|
40
|
+
style.WebkitUserSelect =
|
|
41
|
+
style.WebkitTouchCallout =
|
|
42
|
+
"none";
|
|
43
|
+
// Disable scrolling on the draggable direction
|
|
44
|
+
style.touchAction =
|
|
45
|
+
props.drag === true
|
|
46
|
+
? "none"
|
|
47
|
+
: `pan-${props.drag === "x" ? "y" : "x"}`;
|
|
48
|
+
}
|
|
49
|
+
if (props.tabIndex === undefined &&
|
|
50
|
+
(props.onTap || props.onTapStart || props.whileTap)) {
|
|
51
|
+
htmlProps.tabIndex = 0;
|
|
52
|
+
}
|
|
53
|
+
htmlProps.style = style;
|
|
54
|
+
return htmlProps;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { copyRawValuesOnly, useHTMLProps };
|