@teamturing/react-kit 2.4.0 → 2.6.0

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 (244) hide show
  1. package/dist/core/Button/index.d.ts +1 -1
  2. package/dist/core/Dialog/index.d.ts +16 -0
  3. package/dist/core/DialogHandler/index.d.ts +13 -0
  4. package/dist/core/GradientText/index.d.ts +11 -12
  5. package/dist/core/Grid/index.d.ts +2 -2
  6. package/dist/core/IconButton/index.d.ts +1 -1
  7. package/dist/core/ItemList/index.d.ts +2 -2
  8. package/dist/core/MotionView/index.d.ts +3 -0
  9. package/dist/core/Spinner/index.d.ts +116 -116
  10. package/dist/core/Stack/index.d.ts +2 -2
  11. package/dist/core/TextInput/index.d.ts +39 -0
  12. package/dist/core/Textarea/index.d.ts +9 -0
  13. package/dist/hook/useDialogHandler.d.ts +6 -0
  14. package/dist/index.d.ts +8 -0
  15. package/dist/index.js +10732 -593
  16. package/dist/utils/index.d.ts +1 -0
  17. package/dist/utils/isFunction.d.ts +1 -0
  18. package/esm/_virtual/index.js +3 -0
  19. package/esm/_virtual/react-is.development.js +3 -0
  20. package/esm/_virtual/react-is.production.min.js +3 -0
  21. package/esm/core/Dialog/index.js +188 -0
  22. package/esm/core/DialogHandler/index.js +33 -0
  23. package/esm/core/MotionView/index.js +6 -0
  24. package/esm/core/TextInput/index.js +220 -0
  25. package/esm/core/Textarea/index.js +158 -0
  26. package/esm/hook/useDialogHandler.js +14 -0
  27. package/esm/index.js +5 -0
  28. package/esm/node_modules/framer-motion/dist/es/animation/animators/instant.js +40 -0
  29. package/esm/node_modules/framer-motion/dist/es/animation/animators/js/driver-frameloop.js +16 -0
  30. package/esm/node_modules/framer-motion/dist/es/animation/animators/js/index.js +303 -0
  31. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/create-accelerated-animation.js +199 -0
  32. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/easing.js +31 -0
  33. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/index.js +23 -0
  34. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.js +8 -0
  35. package/esm/node_modules/framer-motion/dist/es/animation/generators/inertia.js +87 -0
  36. package/esm/node_modules/framer-motion/dist/es/animation/generators/keyframes.js +51 -0
  37. package/esm/node_modules/framer-motion/dist/es/animation/generators/spring/find.js +89 -0
  38. package/esm/node_modules/framer-motion/dist/es/animation/generators/spring/index.js +129 -0
  39. package/esm/node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.js +17 -0
  40. package/esm/node_modules/framer-motion/dist/es/animation/generators/utils/velocity.js +9 -0
  41. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.js +101 -0
  42. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/single-value.js +11 -0
  43. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.js +71 -0
  44. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.js +63 -0
  45. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.js +24 -0
  46. package/esm/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.js +6 -0
  47. package/esm/node_modules/framer-motion/dist/es/animation/utils/default-transitions.js +40 -0
  48. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-animatable.js +30 -0
  49. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.js +5 -0
  50. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.js +5 -0
  51. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-none.js +12 -0
  52. package/esm/node_modules/framer-motion/dist/es/animation/utils/keyframes.js +45 -0
  53. package/esm/node_modules/framer-motion/dist/es/animation/utils/transitions.js +13 -0
  54. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js +71 -0
  55. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js +56 -0
  56. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js +158 -0
  57. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +40 -0
  58. package/esm/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +5 -0
  59. package/esm/node_modules/framer-motion/dist/es/context/LazyContext.js +5 -0
  60. package/esm/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
  61. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/create.js +13 -0
  62. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/index.js +5 -0
  63. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
  64. package/esm/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
  65. package/esm/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
  66. package/esm/node_modules/framer-motion/dist/es/debug/record.js +7 -0
  67. package/esm/node_modules/framer-motion/dist/es/easing/anticipate.js +5 -0
  68. package/esm/node_modules/framer-motion/dist/es/easing/back.js +9 -0
  69. package/esm/node_modules/framer-motion/dist/es/easing/circ.js +8 -0
  70. package/esm/node_modules/framer-motion/dist/es/easing/cubic-bezier.js +51 -0
  71. package/esm/node_modules/framer-motion/dist/es/easing/ease.js +7 -0
  72. package/esm/node_modules/framer-motion/dist/es/easing/modifiers/mirror.js +5 -0
  73. package/esm/node_modules/framer-motion/dist/es/easing/modifiers/reverse.js +5 -0
  74. package/esm/node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.js +3 -0
  75. package/esm/node_modules/framer-motion/dist/es/easing/utils/is-easing-array.js +5 -0
  76. package/esm/node_modules/framer-motion/dist/es/easing/utils/map.js +37 -0
  77. package/esm/node_modules/framer-motion/dist/es/events/add-dom-event.js +6 -0
  78. package/esm/node_modules/framer-motion/dist/es/events/add-pointer-event.js +8 -0
  79. package/esm/node_modules/framer-motion/dist/es/events/event-info.js +15 -0
  80. package/esm/node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.js +18 -0
  81. package/esm/node_modules/framer-motion/dist/es/frameloop/batcher.js +60 -0
  82. package/esm/node_modules/framer-motion/dist/es/frameloop/frame.js +6 -0
  83. package/esm/node_modules/framer-motion/dist/es/frameloop/render-step.js +104 -0
  84. package/esm/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +457 -0
  85. package/esm/node_modules/framer-motion/dist/es/gestures/drag/index.js +27 -0
  86. package/esm/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +125 -0
  87. package/esm/node_modules/framer-motion/dist/es/gestures/drag/utils/lock.js +53 -0
  88. package/esm/node_modules/framer-motion/dist/es/gestures/focus.js +41 -0
  89. package/esm/node_modules/framer-motion/dist/es/gestures/hover.js +32 -0
  90. package/esm/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +148 -0
  91. package/esm/node_modules/framer-motion/dist/es/gestures/pan/index.js +46 -0
  92. package/esm/node_modules/framer-motion/dist/es/gestures/press.js +120 -0
  93. package/esm/node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.js +20 -0
  94. package/esm/node_modules/framer-motion/dist/es/motion/features/Feature.js +9 -0
  95. package/esm/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +31 -0
  96. package/esm/node_modules/framer-motion/dist/es/motion/features/animation/index.js +38 -0
  97. package/esm/node_modules/framer-motion/dist/es/motion/features/animations.js +13 -0
  98. package/esm/node_modules/framer-motion/dist/es/motion/features/definitions.js +28 -0
  99. package/esm/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
  100. package/esm/node_modules/framer-motion/dist/es/motion/features/gestures.js +21 -0
  101. package/esm/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +131 -0
  102. package/esm/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
  103. package/esm/node_modules/framer-motion/dist/es/motion/features/load-features.js +12 -0
  104. package/esm/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +72 -0
  105. package/esm/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +49 -0
  106. package/esm/node_modules/framer-motion/dist/es/motion/index.js +79 -0
  107. package/esm/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.js +11 -0
  108. package/esm/node_modules/framer-motion/dist/es/motion/utils/symbol.js +3 -0
  109. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +33 -0
  110. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +75 -0
  111. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +81 -0
  112. package/esm/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +59 -0
  113. package/esm/node_modules/framer-motion/dist/es/projection/animation/mix-values.js +93 -0
  114. package/esm/node_modules/framer-motion/dist/es/projection/geometry/conversion.js +33 -0
  115. package/esm/node_modules/framer-motion/dist/es/projection/geometry/copy.js +20 -0
  116. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.js +122 -0
  117. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.js +41 -0
  118. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.js +54 -0
  119. package/esm/node_modules/framer-motion/dist/es/projection/geometry/models.js +17 -0
  120. package/esm/node_modules/framer-motion/dist/es/projection/geometry/utils.js +25 -0
  121. package/esm/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.js +13 -0
  122. package/esm/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.js +27 -0
  123. package/esm/node_modules/framer-motion/dist/es/projection/node/create-projection-node.js +1494 -0
  124. package/esm/node_modules/framer-motion/dist/es/projection/node/state.js +19 -0
  125. package/esm/node_modules/framer-motion/dist/es/projection/shared/stack.js +112 -0
  126. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.js +41 -0
  127. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.js +35 -0
  128. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-correction.js +6 -0
  129. package/esm/node_modules/framer-motion/dist/es/projection/styles/transform.js +42 -0
  130. package/esm/node_modules/framer-motion/dist/es/projection/utils/each-axis.js +5 -0
  131. package/esm/node_modules/framer-motion/dist/es/projection/utils/has-transform.js +24 -0
  132. package/esm/node_modules/framer-motion/dist/es/projection/utils/measure.js +17 -0
  133. package/esm/node_modules/framer-motion/dist/es/render/VisualElement.js +507 -0
  134. package/esm/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.js +48 -0
  135. package/esm/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +11 -0
  136. package/esm/node_modules/framer-motion/dist/es/render/dom/motion-proxy.js +47 -0
  137. package/esm/node_modules/framer-motion/dist/es/render/dom/motion.js +23 -0
  138. package/esm/node_modules/framer-motion/dist/es/render/dom/use-render.js +35 -0
  139. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.js +6 -0
  140. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/create-config.js +19 -0
  141. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.js +89 -0
  142. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +57 -0
  143. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.js +6 -0
  144. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +30 -0
  145. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.js +5 -0
  146. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.js +15 -0
  147. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.js +230 -0
  148. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.js +15 -0
  149. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/defaults.js +30 -0
  150. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.js +15 -0
  151. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/find.js +15 -0
  152. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.js +10 -0
  153. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/number.js +72 -0
  154. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/test.js +6 -0
  155. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.js +9 -0
  156. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/type-int.js +8 -0
  157. package/esm/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.js +55 -0
  158. package/esm/node_modules/framer-motion/dist/es/render/html/config-motion.js +12 -0
  159. package/esm/node_modules/framer-motion/dist/es/render/html/use-props.js +57 -0
  160. package/esm/node_modules/framer-motion/dist/es/render/html/utils/build-styles.js +74 -0
  161. package/esm/node_modules/framer-motion/dist/es/render/html/utils/build-transform.js +45 -0
  162. package/esm/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +8 -0
  163. package/esm/node_modules/framer-motion/dist/es/render/html/utils/render.js +9 -0
  164. package/esm/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.js +17 -0
  165. package/esm/node_modules/framer-motion/dist/es/render/html/utils/transform.js +28 -0
  166. package/esm/node_modules/framer-motion/dist/es/render/store.js +3 -0
  167. package/esm/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.js +46 -0
  168. package/esm/node_modules/framer-motion/dist/es/render/svg/config-motion.js +40 -0
  169. package/esm/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +33 -0
  170. package/esm/node_modules/framer-motion/dist/es/render/svg/use-props.js +24 -0
  171. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.js +52 -0
  172. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
  173. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +8 -0
  174. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.js +3 -0
  175. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/path.js +32 -0
  176. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/render.js +12 -0
  177. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.js +18 -0
  178. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.js +18 -0
  179. package/esm/node_modules/framer-motion/dist/es/render/utils/animation-state.js +319 -0
  180. package/esm/node_modules/framer-motion/dist/es/render/utils/compare-by-depth.js +3 -0
  181. package/esm/node_modules/framer-motion/dist/es/render/utils/flat-tree.js +24 -0
  182. package/esm/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.js +13 -0
  183. package/esm/node_modules/framer-motion/dist/es/render/utils/is-variant-label.js +8 -0
  184. package/esm/node_modules/framer-motion/dist/es/render/utils/motion-values.js +63 -0
  185. package/esm/node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.js +24 -0
  186. package/esm/node_modules/framer-motion/dist/es/render/utils/resolve-variants.js +26 -0
  187. package/esm/node_modules/framer-motion/dist/es/render/utils/setters.js +101 -0
  188. package/esm/node_modules/framer-motion/dist/es/render/utils/variant-props.js +12 -0
  189. package/esm/node_modules/framer-motion/dist/es/utils/array.js +11 -0
  190. package/esm/node_modules/framer-motion/dist/es/utils/clamp.js +3 -0
  191. package/esm/node_modules/framer-motion/dist/es/utils/delay.js +19 -0
  192. package/esm/node_modules/framer-motion/dist/es/utils/distance.js +9 -0
  193. package/esm/node_modules/framer-motion/dist/es/utils/errors.js +18 -0
  194. package/esm/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.js +42 -0
  195. package/esm/node_modules/framer-motion/dist/es/utils/interpolate.js +92 -0
  196. package/esm/node_modules/framer-motion/dist/es/utils/is-browser.js +3 -0
  197. package/esm/node_modules/framer-motion/dist/es/utils/is-numerical-string.js +6 -0
  198. package/esm/node_modules/framer-motion/dist/es/utils/is-ref-object.js +6 -0
  199. package/esm/node_modules/framer-motion/dist/es/utils/is-zero-value-string.js +6 -0
  200. package/esm/node_modules/framer-motion/dist/es/utils/memo.js +10 -0
  201. package/esm/node_modules/framer-motion/dist/es/utils/mix-color.js +40 -0
  202. package/esm/node_modules/framer-motion/dist/es/utils/mix-complex.js +64 -0
  203. package/esm/node_modules/framer-motion/dist/es/utils/mix.js +24 -0
  204. package/esm/node_modules/framer-motion/dist/es/utils/noop.js +3 -0
  205. package/esm/node_modules/framer-motion/dist/es/utils/offsets/default.js +9 -0
  206. package/esm/node_modules/framer-motion/dist/es/utils/offsets/fill.js +12 -0
  207. package/esm/node_modules/framer-motion/dist/es/utils/offsets/time.js +5 -0
  208. package/esm/node_modules/framer-motion/dist/es/utils/pipe.js +11 -0
  209. package/esm/node_modules/framer-motion/dist/es/utils/progress.js +18 -0
  210. package/esm/node_modules/framer-motion/dist/es/utils/reduced-motion/index.js +19 -0
  211. package/esm/node_modules/framer-motion/dist/es/utils/reduced-motion/state.js +5 -0
  212. package/esm/node_modules/framer-motion/dist/es/utils/resolve-value.js +11 -0
  213. package/esm/node_modules/framer-motion/dist/es/utils/shallow-compare.js +14 -0
  214. package/esm/node_modules/framer-motion/dist/es/utils/subscription-manager.js +40 -0
  215. package/esm/node_modules/framer-motion/dist/es/utils/time-conversion.js +10 -0
  216. package/esm/node_modules/framer-motion/dist/es/utils/use-constant.js +18 -0
  217. package/esm/node_modules/framer-motion/dist/es/utils/use-force-update.js +19 -0
  218. package/esm/node_modules/framer-motion/dist/es/utils/use-instant-transition-state.js +5 -0
  219. package/esm/node_modules/framer-motion/dist/es/utils/use-is-mounted.js +15 -0
  220. package/esm/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +6 -0
  221. package/esm/node_modules/framer-motion/dist/es/utils/use-unmount-effect.js +7 -0
  222. package/esm/node_modules/framer-motion/dist/es/utils/velocity-per-second.js +11 -0
  223. package/esm/node_modules/framer-motion/dist/es/utils/warn-once.js +11 -0
  224. package/esm/node_modules/framer-motion/dist/es/value/index.js +331 -0
  225. package/esm/node_modules/framer-motion/dist/es/value/types/color/hex.js +40 -0
  226. package/esm/node_modules/framer-motion/dist/es/value/types/color/hsla.js +22 -0
  227. package/esm/node_modules/framer-motion/dist/es/value/types/color/index.js +28 -0
  228. package/esm/node_modules/framer-motion/dist/es/value/types/color/rgba.js +25 -0
  229. package/esm/node_modules/framer-motion/dist/es/value/types/color/utils.js +23 -0
  230. package/esm/node_modules/framer-motion/dist/es/value/types/complex/filter.js +30 -0
  231. package/esm/node_modules/framer-motion/dist/es/value/types/complex/index.js +92 -0
  232. package/esm/node_modules/framer-motion/dist/es/value/types/numbers/index.js +17 -0
  233. package/esm/node_modules/framer-motion/dist/es/value/types/numbers/units.js +19 -0
  234. package/esm/node_modules/framer-motion/dist/es/value/types/utils.js +15 -0
  235. package/esm/node_modules/framer-motion/dist/es/value/use-will-change/is.js +7 -0
  236. package/esm/node_modules/framer-motion/dist/es/value/utils/is-motion-value.js +3 -0
  237. package/esm/node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.js +16 -0
  238. package/esm/node_modules/react-is/cjs/react-is.development.js +211 -0
  239. package/esm/node_modules/react-is/cjs/react-is.production.min.js +123 -0
  240. package/esm/node_modules/react-is/index.js +12 -0
  241. package/esm/packages/icons/esm/Close.js +17 -0
  242. package/esm/packages/token-studio/esm/token/elevation/index.js +5 -1
  243. package/esm/utils/isFunction.js +3 -0
  244. package/package.json +5 -3
@@ -0,0 +1,87 @@
1
+ import { spring } from './spring/index.js';
2
+ import { calcGeneratorVelocity } from './utils/velocity.js';
3
+
4
+ function inertia({ keyframes, velocity = 0.0, power = 0.8, timeConstant = 325, bounceDamping = 10, bounceStiffness = 500, modifyTarget, min, max, restDelta = 0.5, restSpeed, }) {
5
+ const origin = keyframes[0];
6
+ const state = {
7
+ done: false,
8
+ value: origin,
9
+ };
10
+ const isOutOfBounds = (v) => (min !== undefined && v < min) || (max !== undefined && v > max);
11
+ const nearestBoundary = (v) => {
12
+ if (min === undefined)
13
+ return max;
14
+ if (max === undefined)
15
+ return min;
16
+ return Math.abs(min - v) < Math.abs(max - v) ? min : max;
17
+ };
18
+ let amplitude = power * velocity;
19
+ const ideal = origin + amplitude;
20
+ const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);
21
+ /**
22
+ * If the target has changed we need to re-calculate the amplitude, otherwise
23
+ * the animation will start from the wrong position.
24
+ */
25
+ if (target !== ideal)
26
+ amplitude = target - origin;
27
+ const calcDelta = (t) => -amplitude * Math.exp(-t / timeConstant);
28
+ const calcLatest = (t) => target + calcDelta(t);
29
+ const applyFriction = (t) => {
30
+ const delta = calcDelta(t);
31
+ const latest = calcLatest(t);
32
+ state.done = Math.abs(delta) <= restDelta;
33
+ state.value = state.done ? target : latest;
34
+ };
35
+ /**
36
+ * Ideally this would resolve for t in a stateless way, we could
37
+ * do that by always precalculating the animation but as we know
38
+ * this will be done anyway we can assume that spring will
39
+ * be discovered during that.
40
+ */
41
+ let timeReachedBoundary;
42
+ let spring$1;
43
+ const checkCatchBoundary = (t) => {
44
+ if (!isOutOfBounds(state.value))
45
+ return;
46
+ timeReachedBoundary = t;
47
+ spring$1 = spring({
48
+ keyframes: [state.value, nearestBoundary(state.value)],
49
+ velocity: calcGeneratorVelocity(calcLatest, t, state.value),
50
+ damping: bounceDamping,
51
+ stiffness: bounceStiffness,
52
+ restDelta,
53
+ restSpeed,
54
+ });
55
+ };
56
+ checkCatchBoundary(0);
57
+ return {
58
+ calculatedDuration: null,
59
+ next: (t) => {
60
+ /**
61
+ * We need to resolve the friction to figure out if we need a
62
+ * spring but we don't want to do this twice per frame. So here
63
+ * we flag if we updated for this frame and later if we did
64
+ * we can skip doing it again.
65
+ */
66
+ let hasUpdatedFrame = false;
67
+ if (!spring$1 && timeReachedBoundary === undefined) {
68
+ hasUpdatedFrame = true;
69
+ applyFriction(t);
70
+ checkCatchBoundary(t);
71
+ }
72
+ /**
73
+ * If we have a spring and the provided t is beyond the moment the friction
74
+ * animation crossed the min/max boundary, use the spring.
75
+ */
76
+ if (timeReachedBoundary !== undefined && t > timeReachedBoundary) {
77
+ return spring$1.next(t - timeReachedBoundary);
78
+ }
79
+ else {
80
+ !hasUpdatedFrame && applyFriction(t);
81
+ return state;
82
+ }
83
+ },
84
+ };
85
+ }
86
+
87
+ export { inertia };
@@ -0,0 +1,51 @@
1
+ import { easeInOut } from '../../easing/ease.js';
2
+ import { isEasingArray } from '../../easing/utils/is-easing-array.js';
3
+ import { easingDefinitionToFunction } from '../../easing/utils/map.js';
4
+ import { interpolate } from '../../utils/interpolate.js';
5
+ import { defaultOffset } from '../../utils/offsets/default.js';
6
+ import { convertOffsetToTimes } from '../../utils/offsets/time.js';
7
+
8
+ function defaultEasing(values, easing) {
9
+ return values.map(() => easing || easeInOut).splice(0, values.length - 1);
10
+ }
11
+ function keyframes({ duration = 300, keyframes: keyframeValues, times, ease = "easeInOut", }) {
12
+ /**
13
+ * Easing functions can be externally defined as strings. Here we convert them
14
+ * into actual functions.
15
+ */
16
+ const easingFunctions = isEasingArray(ease)
17
+ ? ease.map(easingDefinitionToFunction)
18
+ : easingDefinitionToFunction(ease);
19
+ /**
20
+ * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator
21
+ * to reduce GC during animation.
22
+ */
23
+ const state = {
24
+ done: false,
25
+ value: keyframeValues[0],
26
+ };
27
+ /**
28
+ * Create a times array based on the provided 0-1 offsets
29
+ */
30
+ const absoluteTimes = convertOffsetToTimes(
31
+ // Only use the provided offsets if they're the correct length
32
+ // TODO Maybe we should warn here if there's a length mismatch
33
+ times && times.length === keyframeValues.length
34
+ ? times
35
+ : defaultOffset(keyframeValues), duration);
36
+ const mapTimeToKeyframe = interpolate(absoluteTimes, keyframeValues, {
37
+ ease: Array.isArray(easingFunctions)
38
+ ? easingFunctions
39
+ : defaultEasing(keyframeValues, easingFunctions),
40
+ });
41
+ return {
42
+ calculatedDuration: duration,
43
+ next: (t) => {
44
+ state.value = mapTimeToKeyframe(t);
45
+ state.done = t >= duration;
46
+ return state;
47
+ },
48
+ };
49
+ }
50
+
51
+ export { defaultEasing, keyframes };
@@ -0,0 +1,89 @@
1
+ import { warning } from '../../../utils/errors.js';
2
+ import { clamp } from '../../../utils/clamp.js';
3
+ import { secondsToMilliseconds, millisecondsToSeconds } from '../../../utils/time-conversion.js';
4
+
5
+ const safeMin = 0.001;
6
+ const minDuration = 0.01;
7
+ const maxDuration = 10.0;
8
+ const minDamping = 0.05;
9
+ const maxDamping = 1;
10
+ function findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {
11
+ let envelope;
12
+ let derivative;
13
+ warning(duration <= secondsToMilliseconds(maxDuration), "Spring duration must be 10 seconds or less");
14
+ let dampingRatio = 1 - bounce;
15
+ /**
16
+ * Restrict dampingRatio and duration to within acceptable ranges.
17
+ */
18
+ dampingRatio = clamp(minDamping, maxDamping, dampingRatio);
19
+ duration = clamp(minDuration, maxDuration, millisecondsToSeconds(duration));
20
+ if (dampingRatio < 1) {
21
+ /**
22
+ * Underdamped spring
23
+ */
24
+ envelope = (undampedFreq) => {
25
+ const exponentialDecay = undampedFreq * dampingRatio;
26
+ const delta = exponentialDecay * duration;
27
+ const a = exponentialDecay - velocity;
28
+ const b = calcAngularFreq(undampedFreq, dampingRatio);
29
+ const c = Math.exp(-delta);
30
+ return safeMin - (a / b) * c;
31
+ };
32
+ derivative = (undampedFreq) => {
33
+ const exponentialDecay = undampedFreq * dampingRatio;
34
+ const delta = exponentialDecay * duration;
35
+ const d = delta * velocity + velocity;
36
+ const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;
37
+ const f = Math.exp(-delta);
38
+ const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);
39
+ const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;
40
+ return (factor * ((d - e) * f)) / g;
41
+ };
42
+ }
43
+ else {
44
+ /**
45
+ * Critically-damped spring
46
+ */
47
+ envelope = (undampedFreq) => {
48
+ const a = Math.exp(-undampedFreq * duration);
49
+ const b = (undampedFreq - velocity) * duration + 1;
50
+ return -safeMin + a * b;
51
+ };
52
+ derivative = (undampedFreq) => {
53
+ const a = Math.exp(-undampedFreq * duration);
54
+ const b = (velocity - undampedFreq) * (duration * duration);
55
+ return a * b;
56
+ };
57
+ }
58
+ const initialGuess = 5 / duration;
59
+ const undampedFreq = approximateRoot(envelope, derivative, initialGuess);
60
+ duration = secondsToMilliseconds(duration);
61
+ if (isNaN(undampedFreq)) {
62
+ return {
63
+ stiffness: 100,
64
+ damping: 10,
65
+ duration,
66
+ };
67
+ }
68
+ else {
69
+ const stiffness = Math.pow(undampedFreq, 2) * mass;
70
+ return {
71
+ stiffness,
72
+ damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),
73
+ duration,
74
+ };
75
+ }
76
+ }
77
+ const rootIterations = 12;
78
+ function approximateRoot(envelope, derivative, initialGuess) {
79
+ let result = initialGuess;
80
+ for (let i = 1; i < rootIterations; i++) {
81
+ result = result - envelope(result) / derivative(result);
82
+ }
83
+ return result;
84
+ }
85
+ function calcAngularFreq(undampedFreq, dampingRatio) {
86
+ return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);
87
+ }
88
+
89
+ export { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };
@@ -0,0 +1,129 @@
1
+ import { millisecondsToSeconds } from '../../../utils/time-conversion.js';
2
+ import { calcGeneratorVelocity } from '../utils/velocity.js';
3
+ import { findSpring, calcAngularFreq } from './find.js';
4
+
5
+ const durationKeys = ["duration", "bounce"];
6
+ const physicsKeys = ["stiffness", "damping", "mass"];
7
+ function isSpringType(options, keys) {
8
+ return keys.some((key) => options[key] !== undefined);
9
+ }
10
+ function getSpringOptions(options) {
11
+ let springOptions = {
12
+ velocity: 0.0,
13
+ stiffness: 100,
14
+ damping: 10,
15
+ mass: 1.0,
16
+ isResolvedFromDuration: false,
17
+ ...options,
18
+ };
19
+ // stiffness/damping/mass overrides duration/bounce
20
+ if (!isSpringType(options, physicsKeys) &&
21
+ isSpringType(options, durationKeys)) {
22
+ const derived = findSpring(options);
23
+ springOptions = {
24
+ ...springOptions,
25
+ ...derived,
26
+ velocity: 0.0,
27
+ mass: 1.0,
28
+ };
29
+ springOptions.isResolvedFromDuration = true;
30
+ }
31
+ return springOptions;
32
+ }
33
+ function spring({ keyframes, restDelta, restSpeed, ...options }) {
34
+ const origin = keyframes[0];
35
+ const target = keyframes[keyframes.length - 1];
36
+ /**
37
+ * This is the Iterator-spec return value. We ensure it's mutable rather than using a generator
38
+ * to reduce GC during animation.
39
+ */
40
+ const state = { done: false, value: origin };
41
+ const { stiffness, damping, mass, velocity, duration, isResolvedFromDuration, } = getSpringOptions(options);
42
+ const initialVelocity = velocity ? -millisecondsToSeconds(velocity) : 0.0;
43
+ const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));
44
+ const initialDelta = target - origin;
45
+ const undampedAngularFreq = millisecondsToSeconds(Math.sqrt(stiffness / mass));
46
+ /**
47
+ * If we're working on a granular scale, use smaller defaults for determining
48
+ * when the spring is finished.
49
+ *
50
+ * These defaults have been selected emprically based on what strikes a good
51
+ * ratio between feeling good and finishing as soon as changes are imperceptible.
52
+ */
53
+ const isGranularScale = Math.abs(initialDelta) < 5;
54
+ restSpeed || (restSpeed = isGranularScale ? 0.01 : 2);
55
+ restDelta || (restDelta = isGranularScale ? 0.005 : 0.5);
56
+ let resolveSpring;
57
+ if (dampingRatio < 1) {
58
+ const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);
59
+ // Underdamped spring
60
+ resolveSpring = (t) => {
61
+ const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);
62
+ return (target -
63
+ envelope *
64
+ (((initialVelocity +
65
+ dampingRatio * undampedAngularFreq * initialDelta) /
66
+ angularFreq) *
67
+ Math.sin(angularFreq * t) +
68
+ initialDelta * Math.cos(angularFreq * t)));
69
+ };
70
+ }
71
+ else if (dampingRatio === 1) {
72
+ // Critically damped spring
73
+ resolveSpring = (t) => target -
74
+ Math.exp(-undampedAngularFreq * t) *
75
+ (initialDelta +
76
+ (initialVelocity + undampedAngularFreq * initialDelta) * t);
77
+ }
78
+ else {
79
+ // Overdamped spring
80
+ const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);
81
+ resolveSpring = (t) => {
82
+ const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);
83
+ // When performing sinh or cosh values can hit Infinity so we cap them here
84
+ const freqForT = Math.min(dampedAngularFreq * t, 300);
85
+ return (target -
86
+ (envelope *
87
+ ((initialVelocity +
88
+ dampingRatio * undampedAngularFreq * initialDelta) *
89
+ Math.sinh(freqForT) +
90
+ dampedAngularFreq *
91
+ initialDelta *
92
+ Math.cosh(freqForT))) /
93
+ dampedAngularFreq);
94
+ };
95
+ }
96
+ return {
97
+ calculatedDuration: isResolvedFromDuration ? duration || null : null,
98
+ next: (t) => {
99
+ const current = resolveSpring(t);
100
+ if (!isResolvedFromDuration) {
101
+ let currentVelocity = initialVelocity;
102
+ if (t !== 0) {
103
+ /**
104
+ * We only need to calculate velocity for under-damped springs
105
+ * as over- and critically-damped springs can't overshoot, so
106
+ * checking only for displacement is enough.
107
+ */
108
+ if (dampingRatio < 1) {
109
+ currentVelocity = calcGeneratorVelocity(resolveSpring, t, current);
110
+ }
111
+ else {
112
+ currentVelocity = 0;
113
+ }
114
+ }
115
+ const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;
116
+ const isBelowDisplacementThreshold = Math.abs(target - current) <= restDelta;
117
+ state.done =
118
+ isBelowVelocityThreshold && isBelowDisplacementThreshold;
119
+ }
120
+ else {
121
+ state.done = t >= duration;
122
+ }
123
+ state.value = state.done ? target : current;
124
+ return state;
125
+ },
126
+ };
127
+ }
128
+
129
+ export { spring };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Implement a practical max duration for keyframe generation
3
+ * to prevent infinite loops
4
+ */
5
+ const maxGeneratorDuration = 20000;
6
+ function calcGeneratorDuration(generator) {
7
+ let duration = 0;
8
+ const timeStep = 50;
9
+ let state = generator.next(duration);
10
+ while (!state.done && duration < maxGeneratorDuration) {
11
+ duration += timeStep;
12
+ state = generator.next(duration);
13
+ }
14
+ return duration >= maxGeneratorDuration ? Infinity : duration;
15
+ }
16
+
17
+ export { calcGeneratorDuration, maxGeneratorDuration };
@@ -0,0 +1,9 @@
1
+ import { velocityPerSecond } from '../../../utils/velocity-per-second.js';
2
+
3
+ const velocitySampleDuration = 5; // ms
4
+ function calcGeneratorVelocity(resolveValue, t, current) {
5
+ const prevT = Math.max(t - velocitySampleDuration, 0);
6
+ return velocityPerSecond(current - resolveValue(prevT), t - prevT);
7
+ }
8
+
9
+ export { calcGeneratorVelocity };
@@ -0,0 +1,101 @@
1
+ import { warning } from '../../utils/errors.js';
2
+ import { secondsToMilliseconds } from '../../utils/time-conversion.js';
3
+ import { instantAnimationState } from '../../utils/use-instant-transition-state.js';
4
+ import { createAcceleratedAnimation } from '../animators/waapi/create-accelerated-animation.js';
5
+ import { createInstantAnimation } from '../animators/instant.js';
6
+ import { getDefaultTransition } from '../utils/default-transitions.js';
7
+ import { isAnimatable } from '../utils/is-animatable.js';
8
+ import { getKeyframes } from '../utils/keyframes.js';
9
+ import { getValueTransition, isTransitionDefined } from '../utils/transitions.js';
10
+ import { animateValue } from '../animators/js/index.js';
11
+
12
+ const animateMotionValue = (valueName, value, target, transition = {}) => {
13
+ return (onComplete) => {
14
+ const valueTransition = getValueTransition(transition, valueName) || {};
15
+ /**
16
+ * Most transition values are currently completely overwritten by value-specific
17
+ * transitions. In the future it'd be nicer to blend these transitions. But for now
18
+ * delay actually does inherit from the root transition if not value-specific.
19
+ */
20
+ const delay = valueTransition.delay || transition.delay || 0;
21
+ /**
22
+ * Elapsed isn't a public transition option but can be passed through from
23
+ * optimized appear effects in milliseconds.
24
+ */
25
+ let { elapsed = 0 } = transition;
26
+ elapsed = elapsed - secondsToMilliseconds(delay);
27
+ const keyframes = getKeyframes(value, valueName, target, valueTransition);
28
+ /**
29
+ * Check if we're able to animate between the start and end keyframes,
30
+ * and throw a warning if we're attempting to animate between one that's
31
+ * animatable and another that isn't.
32
+ */
33
+ const originKeyframe = keyframes[0];
34
+ const targetKeyframe = keyframes[keyframes.length - 1];
35
+ const isOriginAnimatable = isAnimatable(valueName, originKeyframe);
36
+ const isTargetAnimatable = isAnimatable(valueName, targetKeyframe);
37
+ warning(isOriginAnimatable === isTargetAnimatable, `You are trying to animate ${valueName} from "${originKeyframe}" to "${targetKeyframe}". ${originKeyframe} is not an animatable value - to enable this animation set ${originKeyframe} to a value animatable to ${targetKeyframe} via the \`style\` property.`);
38
+ let options = {
39
+ keyframes,
40
+ velocity: value.getVelocity(),
41
+ ease: "easeOut",
42
+ ...valueTransition,
43
+ delay: -elapsed,
44
+ onUpdate: (v) => {
45
+ value.set(v);
46
+ valueTransition.onUpdate && valueTransition.onUpdate(v);
47
+ },
48
+ onComplete: () => {
49
+ onComplete();
50
+ valueTransition.onComplete && valueTransition.onComplete();
51
+ },
52
+ };
53
+ /**
54
+ * If there's no transition defined for this value, we can generate
55
+ * unqiue transition settings for this value.
56
+ */
57
+ if (!isTransitionDefined(valueTransition)) {
58
+ options = {
59
+ ...options,
60
+ ...getDefaultTransition(valueName, options),
61
+ };
62
+ }
63
+ /**
64
+ * Both WAAPI and our internal animation functions use durations
65
+ * as defined by milliseconds, while our external API defines them
66
+ * as seconds.
67
+ */
68
+ if (options.duration) {
69
+ options.duration = secondsToMilliseconds(options.duration);
70
+ }
71
+ if (options.repeatDelay) {
72
+ options.repeatDelay = secondsToMilliseconds(options.repeatDelay);
73
+ }
74
+ if (!isOriginAnimatable ||
75
+ !isTargetAnimatable ||
76
+ instantAnimationState.current ||
77
+ valueTransition.type === false) {
78
+ /**
79
+ * If we can't animate this value, or the global instant animation flag is set,
80
+ * or this is simply defined as an instant transition, return an instant transition.
81
+ */
82
+ return createInstantAnimation(options);
83
+ }
84
+ /**
85
+ * Animate via WAAPI if possible.
86
+ */
87
+ if (value.owner &&
88
+ value.owner.current instanceof HTMLElement &&
89
+ !value.owner.getProps().onUpdate) {
90
+ const acceleratedAnimation = createAcceleratedAnimation(value, valueName, options);
91
+ if (acceleratedAnimation)
92
+ return acceleratedAnimation;
93
+ }
94
+ /**
95
+ * If we didn't create an accelerated animation, create a JS animation
96
+ */
97
+ return animateValue(options);
98
+ };
99
+ };
100
+
101
+ export { animateMotionValue };
@@ -0,0 +1,11 @@
1
+ import { animateMotionValue } from './motion-value.js';
2
+ import { motionValue } from '../../value/index.js';
3
+ import { isMotionValue } from '../../value/utils/is-motion-value.js';
4
+
5
+ function animateSingleValue(value, keyframes, options) {
6
+ const motionValue$1 = isMotionValue(value) ? value : motionValue(value);
7
+ motionValue$1.start(animateMotionValue("", motionValue$1, keyframes, options));
8
+ return motionValue$1.animation;
9
+ }
10
+
11
+ export { animateSingleValue };
@@ -0,0 +1,71 @@
1
+ import { transformProps } from '../../render/html/utils/transform.js';
2
+ import { optimizedAppearDataAttribute } from '../optimized-appear/data-id.js';
3
+ import { animateMotionValue } from './motion-value.js';
4
+ import { isWillChangeMotionValue } from '../../value/use-will-change/is.js';
5
+ import { setTarget } from '../../render/utils/setters.js';
6
+ import { frame } from '../../frameloop/frame.js';
7
+
8
+ /**
9
+ * Decide whether we should block this animation. Previously, we achieved this
10
+ * just by checking whether the key was listed in protectedKeys, but this
11
+ * posed problems if an animation was triggered by afterChildren and protectedKeys
12
+ * had been set to true in the meantime.
13
+ */
14
+ function shouldBlockAnimation({ protectedKeys, needsAnimating }, key) {
15
+ const shouldBlock = protectedKeys.hasOwnProperty(key) && needsAnimating[key] !== true;
16
+ needsAnimating[key] = false;
17
+ return shouldBlock;
18
+ }
19
+ function animateTarget(visualElement, definition, { delay = 0, transitionOverride, type } = {}) {
20
+ let { transition = visualElement.getDefaultTransition(), transitionEnd, ...target } = visualElement.makeTargetAnimatable(definition);
21
+ const willChange = visualElement.getValue("willChange");
22
+ if (transitionOverride)
23
+ transition = transitionOverride;
24
+ const animations = [];
25
+ const animationTypeState = type &&
26
+ visualElement.animationState &&
27
+ visualElement.animationState.getState()[type];
28
+ for (const key in target) {
29
+ const value = visualElement.getValue(key);
30
+ const valueTarget = target[key];
31
+ if (!value ||
32
+ valueTarget === undefined ||
33
+ (animationTypeState &&
34
+ shouldBlockAnimation(animationTypeState, key))) {
35
+ continue;
36
+ }
37
+ const valueTransition = {
38
+ delay,
39
+ elapsed: 0,
40
+ ...transition,
41
+ };
42
+ /**
43
+ * If this is the first time a value is being animated, check
44
+ * to see if we're handling off from an existing animation.
45
+ */
46
+ if (window.HandoffAppearAnimations && !value.hasAnimated) {
47
+ const appearId = visualElement.getProps()[optimizedAppearDataAttribute];
48
+ if (appearId) {
49
+ valueTransition.elapsed = window.HandoffAppearAnimations(appearId, key, value, frame);
50
+ valueTransition.syncStart = true;
51
+ }
52
+ }
53
+ value.start(animateMotionValue(key, value, valueTarget, visualElement.shouldReduceMotion && transformProps.has(key)
54
+ ? { type: false }
55
+ : valueTransition));
56
+ const animation = value.animation;
57
+ if (isWillChangeMotionValue(willChange)) {
58
+ willChange.add(key);
59
+ animation.then(() => willChange.remove(key));
60
+ }
61
+ animations.push(animation);
62
+ }
63
+ if (transitionEnd) {
64
+ Promise.all(animations).then(() => {
65
+ transitionEnd && setTarget(visualElement, transitionEnd);
66
+ });
67
+ }
68
+ return animations;
69
+ }
70
+
71
+ export { animateTarget };
@@ -0,0 +1,63 @@
1
+ import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.js';
2
+ import { animateTarget } from './visual-element-target.js';
3
+
4
+ function animateVariant(visualElement, variant, options = {}) {
5
+ const resolved = resolveVariant(visualElement, variant, options.custom);
6
+ let { transition = visualElement.getDefaultTransition() || {} } = resolved || {};
7
+ if (options.transitionOverride) {
8
+ transition = options.transitionOverride;
9
+ }
10
+ /**
11
+ * If we have a variant, create a callback that runs it as an animation.
12
+ * Otherwise, we resolve a Promise immediately for a composable no-op.
13
+ */
14
+ const getAnimation = resolved
15
+ ? () => Promise.all(animateTarget(visualElement, resolved, options))
16
+ : () => Promise.resolve();
17
+ /**
18
+ * If we have children, create a callback that runs all their animations.
19
+ * Otherwise, we resolve a Promise immediately for a composable no-op.
20
+ */
21
+ const getChildAnimations = visualElement.variantChildren && visualElement.variantChildren.size
22
+ ? (forwardDelay = 0) => {
23
+ const { delayChildren = 0, staggerChildren, staggerDirection, } = transition;
24
+ return animateChildren(visualElement, variant, delayChildren + forwardDelay, staggerChildren, staggerDirection, options);
25
+ }
26
+ : () => Promise.resolve();
27
+ /**
28
+ * If the transition explicitly defines a "when" option, we need to resolve either
29
+ * this animation or all children animations before playing the other.
30
+ */
31
+ const { when } = transition;
32
+ if (when) {
33
+ const [first, last] = when === "beforeChildren"
34
+ ? [getAnimation, getChildAnimations]
35
+ : [getChildAnimations, getAnimation];
36
+ return first().then(() => last());
37
+ }
38
+ else {
39
+ return Promise.all([getAnimation(), getChildAnimations(options.delay)]);
40
+ }
41
+ }
42
+ function animateChildren(visualElement, variant, delayChildren = 0, staggerChildren = 0, staggerDirection = 1, options) {
43
+ const animations = [];
44
+ const maxStaggerDuration = (visualElement.variantChildren.size - 1) * staggerChildren;
45
+ const generateStaggerDuration = staggerDirection === 1
46
+ ? (i = 0) => i * staggerChildren
47
+ : (i = 0) => maxStaggerDuration - i * staggerChildren;
48
+ Array.from(visualElement.variantChildren)
49
+ .sort(sortByTreeOrder)
50
+ .forEach((child, i) => {
51
+ child.notify("AnimationStart", variant);
52
+ animations.push(animateVariant(child, variant, {
53
+ ...options,
54
+ delay: delayChildren + generateStaggerDuration(i),
55
+ }).then(() => child.notify("AnimationComplete", variant)));
56
+ });
57
+ return Promise.all(animations);
58
+ }
59
+ function sortByTreeOrder(a, b) {
60
+ return a.sortNodePosition(b);
61
+ }
62
+
63
+ export { animateVariant, sortByTreeOrder };
@@ -0,0 +1,24 @@
1
+ import { resolveVariant } from '../../render/utils/resolve-dynamic-variants.js';
2
+ import { animateTarget } from './visual-element-target.js';
3
+ import { animateVariant } from './visual-element-variant.js';
4
+
5
+ function animateVisualElement(visualElement, definition, options = {}) {
6
+ visualElement.notify("AnimationStart", definition);
7
+ let animation;
8
+ if (Array.isArray(definition)) {
9
+ const animations = definition.map((variant) => animateVariant(visualElement, variant, options));
10
+ animation = Promise.all(animations);
11
+ }
12
+ else if (typeof definition === "string") {
13
+ animation = animateVariant(visualElement, definition, options);
14
+ }
15
+ else {
16
+ const resolvedDefinition = typeof definition === "function"
17
+ ? resolveVariant(visualElement, definition, options.custom)
18
+ : definition;
19
+ animation = Promise.all(animateTarget(visualElement, resolvedDefinition, options));
20
+ }
21
+ return animation.then(() => visualElement.notify("AnimationComplete", definition));
22
+ }
23
+
24
+ export { animateVisualElement };
@@ -0,0 +1,6 @@
1
+ import { camelToDash } from '../../render/dom/utils/camel-to-dash.js';
2
+
3
+ const optimizedAppearDataId = "framerAppearId";
4
+ const optimizedAppearDataAttribute = "data-" + camelToDash(optimizedAppearDataId);
5
+
6
+ export { optimizedAppearDataAttribute, optimizedAppearDataId };