framer-motion 7.2.0 → 7.3.1

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.
Files changed (96) hide show
  1. package/dist/cjs/index.js +762 -627
  2. package/dist/es/animation/use-animated-state.mjs +3 -5
  3. package/dist/es/animation/utils/default-transitions.mjs +1 -1
  4. package/dist/es/animation/utils/transitions.mjs +28 -26
  5. package/dist/es/components/AnimatePresence/PopChild.mjs +3 -2
  6. package/dist/es/components/AnimatePresence/PresenceChild.mjs +5 -2
  7. package/dist/es/components/AnimatePresence/use-presence.mjs +1 -1
  8. package/dist/es/components/LayoutGroup/index.mjs +4 -5
  9. package/dist/es/components/LazyMotion/index.mjs +3 -5
  10. package/dist/es/components/MotionConfig/index.mjs +2 -4
  11. package/dist/es/components/Reorder/Group.mjs +2 -4
  12. package/dist/es/components/Reorder/Item.mjs +6 -8
  13. package/dist/es/context/MotionContext/utils.mjs +3 -2
  14. package/dist/es/gestures/PanSession.mjs +2 -2
  15. package/dist/es/gestures/drag/VisualElementDragControls.mjs +16 -4
  16. package/dist/es/gestures/use-focus-gesture.mjs +3 -4
  17. package/dist/es/gestures/use-hover-gesture.mjs +4 -3
  18. package/dist/es/gestures/use-tap-gesture.mjs +9 -10
  19. package/dist/es/index.mjs +2 -1
  20. package/dist/es/motion/features/animations.mjs +8 -3
  21. package/dist/es/motion/features/definitions.mjs +1 -13
  22. package/dist/es/motion/features/layout/MeasureLayout.mjs +12 -6
  23. package/dist/es/motion/features/load-features.mjs +14 -0
  24. package/dist/es/motion/features/viewport/observers.mjs +4 -7
  25. package/dist/es/motion/features/viewport/use-viewport.mjs +8 -6
  26. package/dist/es/motion/index.mjs +23 -23
  27. package/dist/es/motion/utils/VisualElementHandler.mjs +2 -5
  28. package/dist/es/motion/utils/is-forced-motion-value.mjs +3 -3
  29. package/dist/es/motion/utils/use-motion-ref.mjs +1 -2
  30. package/dist/es/motion/utils/use-visual-element.mjs +14 -12
  31. package/dist/es/motion/utils/use-visual-state.mjs +19 -16
  32. package/dist/es/motion/utils/valid-prop.mjs +22 -17
  33. package/dist/es/projection/geometry/utils.mjs +10 -1
  34. package/dist/es/projection/node/HTMLProjectionNode.mjs +1 -1
  35. package/dist/es/projection/node/create-projection-node.mjs +62 -20
  36. package/dist/es/projection/use-instant-layout-transition.mjs +2 -2
  37. package/dist/es/render/dom/features-animation.mjs +5 -1
  38. package/dist/es/render/dom/features-max.mjs +6 -1
  39. package/dist/es/render/dom/motion.mjs +6 -1
  40. package/dist/es/render/dom/use-render.mjs +5 -1
  41. package/dist/es/render/dom/utils/camel-to-dash.mjs +1 -3
  42. package/dist/es/render/dom/utils/create-config.mjs +7 -2
  43. package/dist/es/render/dom/utils/css-variables-conversion.mjs +5 -7
  44. package/dist/es/render/dom/utils/unit-conversion.mjs +4 -4
  45. package/dist/es/render/dom/value-types/defaults.mjs +15 -3
  46. package/dist/es/render/dom/value-types/type-int.mjs +4 -1
  47. package/dist/es/render/html/config-motion.mjs +1 -1
  48. package/dist/es/render/html/use-props.mjs +5 -9
  49. package/dist/es/render/html/utils/build-styles.mjs +17 -15
  50. package/dist/es/render/html/utils/build-transform.mjs +8 -18
  51. package/dist/es/render/html/utils/transform.mjs +21 -30
  52. package/dist/es/render/html/visual-element.mjs +8 -9
  53. package/dist/es/render/index.mjs +118 -40
  54. package/dist/es/render/svg/use-props.mjs +5 -2
  55. package/dist/es/render/svg/utils/build-attrs.mjs +3 -5
  56. package/dist/es/render/svg/utils/create-render-state.mjs +4 -1
  57. package/dist/es/render/svg/visual-element.mjs +8 -4
  58. package/dist/es/render/utils/animation-state.mjs +12 -9
  59. package/dist/es/render/utils/animation.mjs +14 -8
  60. package/dist/es/render/utils/is-controlling-variants.mjs +22 -0
  61. package/dist/es/render/utils/is-variant-label.mjs +8 -0
  62. package/dist/es/render/utils/motion-values.mjs +3 -3
  63. package/dist/es/render/utils/resolve-dynamic-variants.mjs +24 -0
  64. package/dist/es/render/utils/resolve-variants.mjs +26 -0
  65. package/dist/es/render/utils/setters.mjs +12 -9
  66. package/dist/es/utils/reduced-motion/index.mjs +19 -0
  67. package/dist/es/utils/reduced-motion/state.mjs +5 -0
  68. package/dist/es/utils/reduced-motion/use-reduced-motion-config.mjs +19 -0
  69. package/dist/es/utils/reduced-motion/use-reduced-motion.mjs +43 -0
  70. package/dist/es/utils/transform.mjs +4 -1
  71. package/dist/es/utils/use-in-view.mjs +1 -2
  72. package/dist/es/value/index.mjs +1 -1
  73. package/dist/es/value/use-scroll.mjs +6 -4
  74. package/dist/es/value/use-spring.mjs +7 -1
  75. package/dist/es/value/use-will-change/index.mjs +4 -4
  76. package/dist/es/value/utils/is-motion-value.mjs +1 -3
  77. package/dist/framer-motion.dev.js +806 -670
  78. package/dist/framer-motion.js +1 -1
  79. package/dist/index.d.ts +60 -54
  80. package/dist/projection.dev.js +402 -213
  81. package/dist/size-rollup-dom-animation-assets.js +1 -0
  82. package/dist/size-rollup-dom-animation-m.js +1 -0
  83. package/dist/size-rollup-dom-animation.js +1 -1
  84. package/dist/size-rollup-dom-max-assets.js +1 -0
  85. package/dist/size-rollup-dom-max.js +1 -1
  86. package/dist/size-rollup-m.js +1 -1
  87. package/dist/size-rollup-motion.js +1 -0
  88. package/dist/size-webpack-dom-animation.js +1 -1
  89. package/dist/size-webpack-dom-max.js +1 -1
  90. package/dist/size-webpack-m.js +1 -1
  91. package/dist/three-entry.d.ts +41 -22
  92. package/package.json +12 -8
  93. package/dist/es/motion/features/use-features.mjs +0 -40
  94. package/dist/es/motion/features/use-projection.mjs +0 -33
  95. package/dist/es/render/utils/variants.mjs +0 -73
  96. package/dist/es/utils/use-reduced-motion.mjs +0 -73
@@ -3,12 +3,12 @@ import { rootProjectionNode } from './node/HTMLProjectionNode.mjs';
3
3
  function useInstantLayoutTransition() {
4
4
  return startTransition;
5
5
  }
6
- function startTransition(cb) {
6
+ function startTransition(callback) {
7
7
  if (!rootProjectionNode.current)
8
8
  return;
9
9
  rootProjectionNode.current.isUpdating = false;
10
10
  rootProjectionNode.current.blockUpdate();
11
- cb === null || cb === void 0 ? void 0 : cb();
11
+ callback && callback();
12
12
  }
13
13
 
14
14
  export { useInstantLayoutTransition };
@@ -5,6 +5,10 @@ import { createDomVisualElement } from './create-visual-element.mjs';
5
5
  /**
6
6
  * @public
7
7
  */
8
- const domAnimation = Object.assign(Object.assign({ renderer: createDomVisualElement }, animations), gestureAnimations);
8
+ const domAnimation = {
9
+ renderer: createDomVisualElement,
10
+ ...animations,
11
+ ...gestureAnimations,
12
+ };
9
13
 
10
14
  export { domAnimation };
@@ -6,6 +6,11 @@ import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs
6
6
  /**
7
7
  * @public
8
8
  */
9
- const domMax = Object.assign(Object.assign(Object.assign(Object.assign({}, domAnimation), drag), layoutFeatures), { projectionNodeConstructor: HTMLProjectionNode });
9
+ const domMax = {
10
+ ...domAnimation,
11
+ ...drag,
12
+ ...layoutFeatures,
13
+ projectionNodeConstructor: HTMLProjectionNode,
14
+ };
10
15
 
11
16
  export { domMax };
@@ -8,7 +8,12 @@ import { createDomVisualElement } from './create-visual-element.mjs';
8
8
  import { layoutFeatures } from '../../motion/features/layout/index.mjs';
9
9
  import { HTMLProjectionNode } from '../../projection/node/HTMLProjectionNode.mjs';
10
10
 
11
- const featureBundle = Object.assign(Object.assign(Object.assign(Object.assign({}, animations), gestureAnimations), drag), layoutFeatures);
11
+ const featureBundle = {
12
+ ...animations,
13
+ ...gestureAnimations,
14
+ ...drag,
15
+ ...layoutFeatures,
16
+ };
12
17
  /**
13
18
  * HTML & SVG components, optimised for use with gestures and animation. These can be used as
14
19
  * drop-in replacements for any HTML & SVG component, all CSS & SVG properties are supported.
@@ -11,7 +11,11 @@ function createUseRender(forwardMotionProps = false) {
11
11
  : useHTMLProps;
12
12
  const visualProps = useVisualProps(props, latestValues, isStatic);
13
13
  const filteredProps = filterProps(props, typeof Component === "string", forwardMotionProps);
14
- const elementProps = Object.assign(Object.assign(Object.assign({}, filteredProps), visualProps), { ref });
14
+ const elementProps = {
15
+ ...filteredProps,
16
+ ...visualProps,
17
+ ref,
18
+ };
15
19
  if (projectionId) {
16
20
  elementProps["data-projection-id"] = projectionId;
17
21
  }
@@ -1,8 +1,6 @@
1
- const CAMEL_CASE_PATTERN = /([a-z])([A-Z])/g;
2
- const REPLACE_TEMPLATE = "$1-$2";
3
1
  /**
4
2
  * Convert camelCase to dash-case properties.
5
3
  */
6
- const camelToDash = (str) => str.replace(CAMEL_CASE_PATTERN, REPLACE_TEMPLATE).toLowerCase();
4
+ const camelToDash = (str) => str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
7
5
 
8
6
  export { camelToDash };
@@ -7,9 +7,14 @@ function createDomMotionConfig(Component, { forwardMotionProps = false }, preloa
7
7
  const baseConfig = isSVGComponent(Component)
8
8
  ? svgMotionConfig
9
9
  : htmlMotionConfig;
10
- return Object.assign(Object.assign({}, baseConfig), { preloadedFeatures, useRender: createUseRender(forwardMotionProps), createVisualElement,
10
+ return {
11
+ ...baseConfig,
12
+ preloadedFeatures,
13
+ useRender: createUseRender(forwardMotionProps),
14
+ createVisualElement,
11
15
  projectionNodeConstructor,
12
- Component });
16
+ Component,
17
+ };
13
18
  }
14
19
 
15
20
  export { createDomMotionConfig };
@@ -1,4 +1,3 @@
1
- import { __rest } from 'tslib';
2
1
  import { invariant } from 'hey-listen';
3
2
 
4
3
  function isCSSVariable(value) {
@@ -46,16 +45,14 @@ function getVariableValue(current, element, depth = 1) {
46
45
  *
47
46
  * @internal
48
47
  */
49
- function resolveCSSVariables(visualElement, _a, transitionEnd) {
50
- var _b;
51
- var target = __rest(_a, []);
48
+ function resolveCSSVariables(visualElement, { ...target }, transitionEnd) {
52
49
  const element = visualElement.getInstance();
53
50
  if (!(element instanceof Element))
54
51
  return { target, transitionEnd };
55
52
  // If `transitionEnd` isn't `undefined`, clone it. We could clone `target` and `transitionEnd`
56
53
  // only if they change but I think this reads clearer and this isn't a performance-critical path.
57
54
  if (transitionEnd) {
58
- transitionEnd = Object.assign({}, transitionEnd);
55
+ transitionEnd = { ...transitionEnd };
59
56
  }
60
57
  // Go through existing `MotionValue`s and ensure any existing CSS variables are resolved
61
58
  visualElement.forEachValue((value) => {
@@ -80,8 +77,9 @@ function resolveCSSVariables(visualElement, _a, transitionEnd) {
80
77
  // If the user hasn't already set this key on `transitionEnd`, set it to the unresolved
81
78
  // CSS variable. This will ensure that after the animation the component will reflect
82
79
  // changes in the value of the CSS variable.
83
- if (transitionEnd)
84
- (_b = transitionEnd[key]) !== null && _b !== void 0 ? _b : (transitionEnd[key] = current);
80
+ if (transitionEnd && transitionEnd[key] === undefined) {
81
+ transitionEnd[key] = current;
82
+ }
85
83
  }
86
84
  return { target, transitionEnd };
87
85
  }
@@ -1,7 +1,7 @@
1
1
  import { px, number } from 'style-value-types';
2
2
  import { isKeyframesTarget } from '../../../animation/utils/is-keyframes-target.mjs';
3
3
  import { invariant } from 'hey-listen';
4
- import { transformProps } from '../../html/utils/transform.mjs';
4
+ import { transformPropOrder } from '../../html/utils/transform.mjs';
5
5
  import { findDimensionValueType } from '../value-types/dimensions.mjs';
6
6
  import { isBrowser } from '../../../utils/is-browser.mjs';
7
7
 
@@ -54,7 +54,7 @@ const getTranslateFromMatrix = (pos2, pos3) => (_bbox, { transform }) => {
54
54
  }
55
55
  };
56
56
  const transformKeys = new Set(["x", "y", "z"]);
57
- const nonTranslationalTransformKeys = transformProps.filter((key) => !transformKeys.has(key));
57
+ const nonTranslationalTransformKeys = transformPropOrder.filter((key) => !transformKeys.has(key));
58
58
  function removeNonTranslationalTransform(visualElement) {
59
59
  const removedTransforms = [];
60
60
  nonTranslationalTransformKeys.forEach((key) => {
@@ -111,8 +111,8 @@ const convertChangedValueTypes = (target, visualElement, changedKeys) => {
111
111
  return target;
112
112
  };
113
113
  const checkAndConvertChangedValueTypes = (visualElement, target, origin = {}, transitionEnd = {}) => {
114
- target = Object.assign({}, target);
115
- transitionEnd = Object.assign({}, transitionEnd);
114
+ target = { ...target };
115
+ transitionEnd = { ...transitionEnd };
116
116
  const targetPositionalKeys = Object.keys(target).filter(isPositionalKey);
117
117
  // We want to remove any transform values that could affect the element's bounding box before
118
118
  // it's measured. We'll reapply these later.
@@ -4,11 +4,23 @@ import { numberValueTypes } from './number.mjs';
4
4
  /**
5
5
  * A map of default value types for common values
6
6
  */
7
- const defaultValueTypes = Object.assign(Object.assign({}, numberValueTypes), {
7
+ const defaultValueTypes = {
8
+ ...numberValueTypes,
8
9
  // Color props
9
- color, backgroundColor: color, outlineColor: color, fill: color, stroke: color,
10
+ color,
11
+ backgroundColor: color,
12
+ outlineColor: color,
13
+ fill: color,
14
+ stroke: color,
10
15
  // Border props
11
- borderColor: color, borderTopColor: color, borderRightColor: color, borderBottomColor: color, borderLeftColor: color, filter, WebkitFilter: filter });
16
+ borderColor: color,
17
+ borderTopColor: color,
18
+ borderRightColor: color,
19
+ borderBottomColor: color,
20
+ borderLeftColor: color,
21
+ filter,
22
+ WebkitFilter: filter,
23
+ };
12
24
  /**
13
25
  * Gets the default ValueType for the provided value key
14
26
  */
@@ -1,5 +1,8 @@
1
1
  import { number } from 'style-value-types';
2
2
 
3
- const int = Object.assign(Object.assign({}, number), { transform: Math.round });
3
+ const int = {
4
+ ...number,
5
+ transform: Math.round,
6
+ };
4
7
 
5
8
  export { int };
@@ -4,7 +4,7 @@ import { createHtmlRenderState } from './utils/create-render-state.mjs';
4
4
 
5
5
  const htmlMotionConfig = {
6
6
  useVisualState: makeUseVisualState({
7
- scrapeMotionValuesFromProps: scrapeMotionValuesFromProps,
7
+ scrapeMotionValuesFromProps,
8
8
  createRenderState: createHtmlRenderState,
9
9
  }),
10
10
  };
@@ -15,28 +15,24 @@ function useInitialMotionValues({ transformTemplate }, visualState, isStatic) {
15
15
  return useMemo(() => {
16
16
  const state = createHtmlRenderState();
17
17
  buildHTMLStyles(state, visualState, { enableHardwareAcceleration: !isStatic }, transformTemplate);
18
- const { vars, style } = state;
19
- return Object.assign(Object.assign({}, vars), style);
18
+ return Object.assign({}, state.vars, state.style);
20
19
  }, [visualState]);
21
20
  }
22
21
  function useStyle(props, visualState, isStatic) {
23
22
  const styleProp = props.style || {};
24
- let style = {};
23
+ const style = {};
25
24
  /**
26
25
  * Copy non-Motion Values straight into style
27
26
  */
28
27
  copyRawValuesOnly(style, styleProp, props);
29
28
  Object.assign(style, useInitialMotionValues(props, visualState, isStatic));
30
- if (props.transformValues) {
31
- style = props.transformValues(style);
32
- }
33
- return style;
29
+ return props.transformValues ? props.transformValues(style) : style;
34
30
  }
35
31
  function useHTMLProps(props, visualState, isStatic) {
36
32
  // The `any` isn't ideal but it is the type of createElement props argument
37
33
  const htmlProps = {};
38
34
  const style = useStyle(props, visualState, isStatic);
39
- if (Boolean(props.drag) && props.dragListener !== false) {
35
+ if (props.drag && props.dragListener !== false) {
40
36
  // Disable the ghost element when a user drags
41
37
  htmlProps.draggable = false;
42
38
  // Disable text selection
@@ -54,4 +50,4 @@ function useHTMLProps(props, visualState, isStatic) {
54
50
  return htmlProps;
55
51
  }
56
52
 
57
- export { copyRawValuesOnly, useHTMLProps, useStyle };
53
+ export { copyRawValuesOnly, useHTMLProps };
@@ -1,15 +1,11 @@
1
- import { buildTransform, buildTransformOrigin } from './build-transform.mjs';
1
+ import { buildTransform } from './build-transform.mjs';
2
2
  import { isCSSVariable } from '../../dom/utils/is-css-variable.mjs';
3
- import { isTransformProp, isTransformOriginProp } from './transform.mjs';
3
+ import { transformProps } from './transform.mjs';
4
4
  import { getValueAsType } from '../../dom/value-types/get-as-type.mjs';
5
5
  import { numberValueTypes } from '../../dom/value-types/number.mjs';
6
6
 
7
7
  function buildHTMLStyles(state, latestValues, options, transformTemplate) {
8
- var _a;
9
8
  const { style, vars, transform, transformKeys, transformOrigin } = state;
10
- // Empty the transformKeys array. As we're throwing out refs to its items
11
- // this might not be as cheap as suspected. Maybe using the array as a buffer
12
- // with a manual incrementation would be better.
13
9
  transformKeys.length = 0;
14
10
  // Track whether we encounter any transform or transformOrigin values.
15
11
  let hasTransform = false;
@@ -34,7 +30,7 @@ function buildHTMLStyles(state, latestValues, options, transformTemplate) {
34
30
  // Convert the value to its default value type, ie 0 -> "0px"
35
31
  const valueType = numberValueTypes[key];
36
32
  const valueAsType = getValueAsType(value, valueType);
37
- if (isTransformProp(key)) {
33
+ if (transformProps.has(key)) {
38
34
  // If this is a transform, flag to enable further transform processing
39
35
  hasTransform = true;
40
36
  transform[key] = valueAsType;
@@ -43,29 +39,35 @@ function buildHTMLStyles(state, latestValues, options, transformTemplate) {
43
39
  if (!transformIsNone)
44
40
  continue;
45
41
  // Otherwise check to see if this is a default transform
46
- if (value !== ((_a = valueType.default) !== null && _a !== void 0 ? _a : 0))
42
+ if (value !== (valueType.default || 0))
47
43
  transformIsNone = false;
48
44
  }
49
- else if (isTransformOriginProp(key)) {
50
- transformOrigin[key] = valueAsType;
45
+ else if (key.startsWith("origin")) {
51
46
  // If this is a transform origin, flag and enable further transform-origin processing
52
47
  hasTransformOrigin = true;
48
+ transformOrigin[key] = valueAsType;
53
49
  }
54
50
  else {
55
51
  style[key] = valueAsType;
56
52
  }
57
53
  }
58
- if (hasTransform) {
54
+ if (hasTransform || transformTemplate) {
59
55
  style.transform = buildTransform(state, options, transformIsNone, transformTemplate);
60
56
  }
61
- else if (transformTemplate) {
62
- style.transform = transformTemplate({}, "");
63
- }
64
57
  else if (!latestValues.transform && style.transform) {
58
+ /**
59
+ * If we have previously created a transform but currently don't have any,
60
+ * reset transform style to none.
61
+ */
65
62
  style.transform = "none";
66
63
  }
64
+ /**
65
+ * Build a transformOrigin style. Uses the same defaults as the browser for
66
+ * undefined origins.
67
+ */
67
68
  if (hasTransformOrigin) {
68
- style.transformOrigin = buildTransformOrigin(transformOrigin);
69
+ const { originX = "50%", originY = "50%", originZ = 0, } = transformOrigin;
70
+ style.transformOrigin = `${originX} ${originY} ${originZ}`;
69
71
  }
70
72
  }
71
73
 
@@ -1,4 +1,4 @@
1
- import { sortTransformProps } from './transform.mjs';
1
+ import { transformPropOrder } from './transform.mjs';
2
2
 
3
3
  const translateAlias = {
4
4
  x: "translateX",
@@ -6,6 +6,10 @@ const translateAlias = {
6
6
  z: "translateZ",
7
7
  transformPerspective: "perspective",
8
8
  };
9
+ /**
10
+ * A function to use with Array.sort to sort transform keys by their default order.
11
+ */
12
+ const sortTransformProps = (a, b) => transformPropOrder.indexOf(a) - transformPropOrder.indexOf(b);
9
13
  /**
10
14
  * Build a CSS transform style from individual x/y/scale etc properties.
11
15
  *
@@ -17,18 +21,11 @@ function buildTransform({ transform, transformKeys }, { enableHardwareAccelerati
17
21
  let transformString = "";
18
22
  // Transform keys into their default order - this will determine the output order.
19
23
  transformKeys.sort(sortTransformProps);
20
- // Track whether the defined transform has a defined z so we don't add a
21
- // second to enable hardware acceleration
22
- let transformHasZ = false;
23
24
  // Loop over each transform and build them into transformString
24
- const numTransformKeys = transformKeys.length;
25
- for (let i = 0; i < numTransformKeys; i++) {
26
- const key = transformKeys[i];
25
+ for (const key of transformKeys) {
27
26
  transformString += `${translateAlias[key] || key}(${transform[key]}) `;
28
- if (key === "z")
29
- transformHasZ = true;
30
27
  }
31
- if (!transformHasZ && enableHardwareAcceleration) {
28
+ if (enableHardwareAcceleration && !transform.z) {
32
29
  transformString += "translateZ(0)";
33
30
  }
34
31
  transformString = transformString.trim();
@@ -42,12 +39,5 @@ function buildTransform({ transform, transformKeys }, { enableHardwareAccelerati
42
39
  }
43
40
  return transformString;
44
41
  }
45
- /**
46
- * Build a transformOrigin style. Uses the same defaults as the browser for
47
- * undefined origins.
48
- */
49
- function buildTransformOrigin({ originX = "50%", originY = "50%", originZ = 0, }) {
50
- return `${originX} ${originY} ${originZ}`;
51
- }
52
42
 
53
- export { buildTransform, buildTransformOrigin };
43
+ export { buildTransform };
@@ -1,37 +1,28 @@
1
- /**
2
- * A list of all transformable axes. We'll use this list to generated a version
3
- * of each axes for each transform.
4
- */
5
- const transformAxes = ["", "X", "Y", "Z"];
6
- /**
7
- * An ordered array of each transformable value. By default, transform values
8
- * will be sorted to this order.
9
- */
10
- const order = ["translate", "scale", "rotate", "skew"];
11
1
  /**
12
2
  * Generate a list of every possible transform key.
13
3
  */
14
- const transformProps = ["transformPerspective", "x", "y", "z"];
15
- order.forEach((operationKey) => transformAxes.forEach((axesKey) => transformProps.push(operationKey + axesKey)));
16
- /**
17
- * A function to use with Array.sort to sort transform keys by their default order.
18
- */
19
- function sortTransformProps(a, b) {
20
- return transformProps.indexOf(a) - transformProps.indexOf(b);
21
- }
4
+ const transformPropOrder = [
5
+ "transformPerspective",
6
+ "x",
7
+ "y",
8
+ "z",
9
+ "translateX",
10
+ "translateY",
11
+ "translateZ",
12
+ "scale",
13
+ "scaleX",
14
+ "scaleY",
15
+ "rotate",
16
+ "rotateX",
17
+ "rotateY",
18
+ "rotateZ",
19
+ "skew",
20
+ "skewX",
21
+ "skewY",
22
+ ];
22
23
  /**
23
24
  * A quick lookup for transform props.
24
25
  */
25
- const transformPropSet = new Set(transformProps);
26
- function isTransformProp(key) {
27
- return transformPropSet.has(key);
28
- }
29
- /**
30
- * A quick lookup for transform origin props
31
- */
32
- const transformOriginProps = new Set(["originX", "originY", "originZ"]);
33
- function isTransformOriginProp(key) {
34
- return transformOriginProps.has(key);
35
- }
26
+ const transformProps = new Set(transformPropOrder);
36
27
 
37
- export { isTransformOriginProp, isTransformProp, sortTransformProps, transformAxes, transformProps };
28
+ export { transformPropOrder, transformProps };
@@ -1,10 +1,9 @@
1
- import { __rest } from 'tslib';
2
1
  import { visualElement } from '../index.mjs';
3
2
  import { getOrigin, checkTargetForNewValues } from '../utils/setters.mjs';
4
3
  import { buildHTMLStyles } from './utils/build-styles.mjs';
5
4
  import { isCSSVariable } from '../dom/utils/is-css-variable.mjs';
6
5
  import { parseDomVariant } from '../dom/utils/parse-dom-variant.mjs';
7
- import { isTransformProp } from './utils/transform.mjs';
6
+ import { transformProps } from './utils/transform.mjs';
8
7
  import { scrapeMotionValuesFromProps } from './utils/scrape-motion-values.mjs';
9
8
  import { renderHTML } from './utils/render.mjs';
10
9
  import { getDefaultValueType } from '../dom/value-types/defaults.mjs';
@@ -16,7 +15,7 @@ function getComputedStyle(element) {
16
15
  const htmlConfig = {
17
16
  treeType: "dom",
18
17
  readValueFromInstance(domElement, key) {
19
- if (isTransformProp(key)) {
18
+ if (transformProps.has(key)) {
20
19
  const defaultType = getDefaultValueType(key);
21
20
  return defaultType ? defaultType.default || 0 : 0;
22
21
  }
@@ -69,10 +68,7 @@ const htmlConfig = {
69
68
  * Ensure that HTML and Framer-specific value types like `px`->`%` and `Color`
70
69
  * can be animated by Motion.
71
70
  */
72
- makeTargetAnimatable(element, _a, _b, isMounted) {
73
- var { transition, transitionEnd } = _a, target = __rest(_a, ["transition", "transitionEnd"]);
74
- var transformValues = _b.transformValues;
75
- if (isMounted === void 0) { isMounted = true; }
71
+ makeTargetAnimatable(element, { transition, transitionEnd, ...target }, { transformValues }, isMounted = true) {
76
72
  let origin = getOrigin(target, transition || {}, element);
77
73
  /**
78
74
  * If Framer has provided a function to convert `Color` etc value types, convert them
@@ -91,8 +87,11 @@ const htmlConfig = {
91
87
  transitionEnd = parsed.transitionEnd;
92
88
  target = parsed.target;
93
89
  }
94
- return Object.assign({ transition,
95
- transitionEnd }, target);
90
+ return {
91
+ transition,
92
+ transitionEnd,
93
+ ...target,
94
+ };
96
95
  },
97
96
  scrapeMotionValuesFromProps,
98
97
  build(element, renderState, latestValues, options, props) {