@remix-run/ui 0.0.0 → 0.1.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 (272) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -2
  3. package/dist/animation/animate-layout-mixin.d.ts +12 -0
  4. package/dist/animation/animate-layout-mixin.js +214 -0
  5. package/dist/animation/animate-layout-mixin.js.map +1 -0
  6. package/dist/animation/animate-mixins.d.ts +29 -0
  7. package/dist/animation/animate-mixins.js +235 -0
  8. package/dist/animation/animate-mixins.js.map +1 -0
  9. package/dist/animation/index.d.ts +6 -0
  10. package/dist/animation/index.js +5 -0
  11. package/dist/animation/index.js.map +1 -0
  12. package/dist/animation/spring.d.ts +75 -0
  13. package/dist/animation/spring.js +183 -0
  14. package/dist/animation/spring.js.map +1 -0
  15. package/dist/animation/tween.d.ts +70 -0
  16. package/dist/animation/tween.js +93 -0
  17. package/dist/animation/tween.js.map +1 -0
  18. package/dist/components/accordion/accordion.d.ts +92 -0
  19. package/dist/components/accordion/accordion.js +337 -0
  20. package/dist/components/accordion/accordion.js.map +1 -0
  21. package/dist/components/anchor/anchor.d.ts +13 -0
  22. package/dist/components/anchor/anchor.js +558 -0
  23. package/dist/components/anchor/anchor.js.map +1 -0
  24. package/dist/components/breadcrumbs/breadcrumbs.d.ts +11 -0
  25. package/dist/components/breadcrumbs/breadcrumbs.js +78 -0
  26. package/dist/components/breadcrumbs/breadcrumbs.js.map +1 -0
  27. package/dist/components/button/button.d.ts +23 -0
  28. package/dist/components/button/button.js +147 -0
  29. package/dist/components/button/button.js.map +1 -0
  30. package/dist/components/combobox/combobox.d.ts +101 -0
  31. package/dist/components/combobox/combobox.js +708 -0
  32. package/dist/components/combobox/combobox.js.map +1 -0
  33. package/dist/components/glyph/glyph.d.ts +14 -0
  34. package/dist/components/glyph/glyph.js +65 -0
  35. package/dist/components/glyph/glyph.js.map +1 -0
  36. package/dist/components/listbox/listbox.d.ts +67 -0
  37. package/dist/components/listbox/listbox.js +340 -0
  38. package/dist/components/listbox/listbox.js.map +1 -0
  39. package/dist/components/menu/hover-aim.d.ts +5 -0
  40. package/dist/components/menu/hover-aim.js +308 -0
  41. package/dist/components/menu/hover-aim.js.map +1 -0
  42. package/dist/components/menu/menu.d.ts +164 -0
  43. package/dist/components/menu/menu.js +1106 -0
  44. package/dist/components/menu/menu.js.map +1 -0
  45. package/dist/components/popover/popover.d.ts +35 -0
  46. package/dist/components/popover/popover.js +138 -0
  47. package/dist/components/popover/popover.js.map +1 -0
  48. package/dist/components/select/select.d.ts +67 -0
  49. package/dist/components/select/select.js +397 -0
  50. package/dist/components/select/select.js.map +1 -0
  51. package/dist/components/separator/separator.d.ts +2 -0
  52. package/dist/components/separator/separator.js +15 -0
  53. package/dist/components/separator/separator.js.map +1 -0
  54. package/dist/components/tabs/tabs.d.ts +78 -0
  55. package/dist/components/tabs/tabs.js +341 -0
  56. package/dist/components/tabs/tabs.js.map +1 -0
  57. package/dist/index.d.ts +28 -0
  58. package/dist/index.js +21 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/interactions/keydown/keydown.d.ts +1 -0
  61. package/dist/interactions/keydown/keydown.js +8 -0
  62. package/dist/interactions/keydown/keydown.js.map +1 -0
  63. package/dist/interactions/outside-click/outside-click-mixin.d.ts +2 -0
  64. package/dist/interactions/outside-click/outside-click-mixin.js +29 -0
  65. package/dist/interactions/outside-click/outside-click-mixin.js.map +1 -0
  66. package/dist/interactions/typeahead/typeahead-mixin.d.ts +8 -0
  67. package/dist/interactions/typeahead/typeahead-mixin.js +59 -0
  68. package/dist/interactions/typeahead/typeahead-mixin.js.map +1 -0
  69. package/dist/jsx-runtime.d.ts +2 -0
  70. package/dist/jsx-runtime.js +3 -0
  71. package/dist/jsx-runtime.js.map +1 -0
  72. package/dist/runtime/client-entries.d.ts +91 -0
  73. package/dist/runtime/client-entries.js +40 -0
  74. package/dist/runtime/client-entries.js.map +1 -0
  75. package/dist/runtime/component.d.ts +223 -0
  76. package/dist/runtime/component.js +152 -0
  77. package/dist/runtime/component.js.map +1 -0
  78. package/dist/runtime/create-element.d.ts +10 -0
  79. package/dist/runtime/create-element.js +29 -0
  80. package/dist/runtime/create-element.js.map +1 -0
  81. package/dist/runtime/diff-dom.d.ts +2 -0
  82. package/dist/runtime/diff-dom.js +364 -0
  83. package/dist/runtime/diff-dom.js.map +1 -0
  84. package/dist/runtime/diff-props.d.ts +9 -0
  85. package/dist/runtime/diff-props.js +195 -0
  86. package/dist/runtime/diff-props.js.map +1 -0
  87. package/dist/runtime/document-state.d.ts +11 -0
  88. package/dist/runtime/document-state.js +106 -0
  89. package/dist/runtime/document-state.js.map +1 -0
  90. package/dist/runtime/dom.d.ts +3189 -0
  91. package/dist/runtime/dom.js +2 -0
  92. package/dist/runtime/dom.js.map +1 -0
  93. package/dist/runtime/error-event.d.ts +20 -0
  94. package/dist/runtime/error-event.js +19 -0
  95. package/dist/runtime/error-event.js.map +1 -0
  96. package/dist/runtime/event-listeners.d.ts +50 -0
  97. package/dist/runtime/event-listeners.js +31 -0
  98. package/dist/runtime/event-listeners.js.map +1 -0
  99. package/dist/runtime/frame.d.ts +119 -0
  100. package/dist/runtime/frame.js +920 -0
  101. package/dist/runtime/frame.js.map +1 -0
  102. package/dist/runtime/invariant.d.ts +23 -0
  103. package/dist/runtime/invariant.js +33 -0
  104. package/dist/runtime/invariant.js.map +1 -0
  105. package/dist/runtime/jsx.d.ts +320 -0
  106. package/dist/runtime/jsx.js +32 -0
  107. package/dist/runtime/jsx.js.map +1 -0
  108. package/dist/runtime/mixins/attrs-mixin.d.ts +9 -0
  109. package/dist/runtime/mixins/attrs-mixin.js +23 -0
  110. package/dist/runtime/mixins/attrs-mixin.js.map +1 -0
  111. package/dist/runtime/mixins/link-mixin.d.ts +17 -0
  112. package/dist/runtime/mixins/link-mixin.js +101 -0
  113. package/dist/runtime/mixins/link-mixin.js.map +1 -0
  114. package/dist/runtime/mixins/mixin.d.ts +145 -0
  115. package/dist/runtime/mixins/mixin.js +570 -0
  116. package/dist/runtime/mixins/mixin.js.map +1 -0
  117. package/dist/runtime/mixins/on-mixin.d.ts +16 -0
  118. package/dist/runtime/mixins/on-mixin.js +49 -0
  119. package/dist/runtime/mixins/on-mixin.js.map +1 -0
  120. package/dist/runtime/mixins/ref-mixin.d.ts +9 -0
  121. package/dist/runtime/mixins/ref-mixin.js +21 -0
  122. package/dist/runtime/mixins/ref-mixin.js.map +1 -0
  123. package/dist/runtime/navigation.d.ts +28 -0
  124. package/dist/runtime/navigation.js +107 -0
  125. package/dist/runtime/navigation.js.map +1 -0
  126. package/dist/runtime/reconcile.d.ts +11 -0
  127. package/dist/runtime/reconcile.js +1262 -0
  128. package/dist/runtime/reconcile.js.map +1 -0
  129. package/dist/runtime/render.d.ts +54 -0
  130. package/dist/runtime/render.js +50 -0
  131. package/dist/runtime/render.js.map +1 -0
  132. package/dist/runtime/run.d.ts +45 -0
  133. package/dist/runtime/run.js +68 -0
  134. package/dist/runtime/run.js.map +1 -0
  135. package/dist/runtime/scheduler.d.ts +30 -0
  136. package/dist/runtime/scheduler.js +195 -0
  137. package/dist/runtime/scheduler.js.map +1 -0
  138. package/dist/runtime/svg-attributes.d.ts +5 -0
  139. package/dist/runtime/svg-attributes.js +124 -0
  140. package/dist/runtime/svg-attributes.js.map +1 -0
  141. package/dist/runtime/to-vnode.d.ts +3 -0
  142. package/dist/runtime/to-vnode.js +46 -0
  143. package/dist/runtime/to-vnode.js.map +1 -0
  144. package/dist/runtime/typed-event-target.d.ts +50 -0
  145. package/dist/runtime/typed-event-target.js +6 -0
  146. package/dist/runtime/typed-event-target.js.map +1 -0
  147. package/dist/runtime/vdom.d.ts +55 -0
  148. package/dist/runtime/vdom.js +198 -0
  149. package/dist/runtime/vdom.js.map +1 -0
  150. package/dist/runtime/vnode.d.ts +79 -0
  151. package/dist/runtime/vnode.js +38 -0
  152. package/dist/runtime/vnode.js.map +1 -0
  153. package/dist/server/stream.d.ts +57 -0
  154. package/dist/server/stream.js +1011 -0
  155. package/dist/server/stream.js.map +1 -0
  156. package/dist/style/css-mixin.d.ts +8 -0
  157. package/dist/style/css-mixin.js +54 -0
  158. package/dist/style/css-mixin.js.map +1 -0
  159. package/dist/style/index.d.ts +5 -0
  160. package/dist/style/index.js +4 -0
  161. package/dist/style/index.js.map +1 -0
  162. package/dist/style/style.d.ts +24 -0
  163. package/dist/style/style.js +269 -0
  164. package/dist/style/style.js.map +1 -0
  165. package/dist/style/stylesheet.d.ts +11 -0
  166. package/dist/style/stylesheet.js +174 -0
  167. package/dist/style/stylesheet.js.map +1 -0
  168. package/dist/test.d.ts +2 -0
  169. package/dist/test.js +2 -0
  170. package/dist/test.js.map +1 -0
  171. package/dist/theme/contract.d.ts +259 -0
  172. package/dist/theme/contract.js +131 -0
  173. package/dist/theme/contract.js.map +1 -0
  174. package/dist/theme/glyph-contract.d.ts +13 -0
  175. package/dist/theme/glyph-contract.js +34 -0
  176. package/dist/theme/glyph-contract.js.map +1 -0
  177. package/dist/theme/presets/rmx-01/glyphs.d.ts +2 -0
  178. package/dist/theme/presets/rmx-01/glyphs.js +252 -0
  179. package/dist/theme/presets/rmx-01/glyphs.js.map +1 -0
  180. package/dist/theme/presets/rmx-01/index.d.ts +2 -0
  181. package/dist/theme/presets/rmx-01/index.js +119 -0
  182. package/dist/theme/presets/rmx-01/index.js.map +1 -0
  183. package/dist/theme/runtime.d.ts +2 -0
  184. package/dist/theme/runtime.js +81 -0
  185. package/dist/theme/runtime.js.map +1 -0
  186. package/dist/theme/theme.d.ts +6 -0
  187. package/dist/theme/theme.js +5 -0
  188. package/dist/theme/theme.js.map +1 -0
  189. package/dist/utils/flash-attribute.d.ts +1 -0
  190. package/dist/utils/flash-attribute.js +11 -0
  191. package/dist/utils/flash-attribute.js.map +1 -0
  192. package/dist/utils/scroll-lock.d.ts +3 -0
  193. package/dist/utils/scroll-lock.js +69 -0
  194. package/dist/utils/scroll-lock.js.map +1 -0
  195. package/dist/utils/wait-for-css-transition.d.ts +1 -0
  196. package/dist/utils/wait-for-css-transition.js +58 -0
  197. package/dist/utils/wait-for-css-transition.js.map +1 -0
  198. package/dist/utils/wait.d.ts +1 -0
  199. package/dist/utils/wait.js +6 -0
  200. package/dist/utils/wait.js.map +1 -0
  201. package/package.json +124 -5
  202. package/src/animation/animate-layout-mixin.ts +266 -0
  203. package/src/animation/animate-mixins.ts +292 -0
  204. package/src/animation/index.ts +6 -0
  205. package/src/animation/spring.ts +299 -0
  206. package/src/animation/tween.ts +134 -0
  207. package/src/components/accordion/accordion.tsx +565 -0
  208. package/src/components/anchor/anchor.ts +904 -0
  209. package/src/components/breadcrumbs/breadcrumbs.tsx +124 -0
  210. package/src/components/button/README.md +44 -0
  211. package/src/components/button/button.tsx +188 -0
  212. package/src/components/combobox/README.md +145 -0
  213. package/src/components/combobox/combobox.tsx +1014 -0
  214. package/src/components/glyph/glyph.tsx +110 -0
  215. package/src/components/listbox/listbox.ts +447 -0
  216. package/src/components/menu/hover-aim.ts +428 -0
  217. package/src/components/menu/menu.tsx +1547 -0
  218. package/src/components/popover/README.md +122 -0
  219. package/src/components/popover/popover.ts +201 -0
  220. package/src/components/select/select.tsx +585 -0
  221. package/src/components/separator/separator.ts +19 -0
  222. package/src/components/tabs/README.md +105 -0
  223. package/src/components/tabs/tabs.tsx +499 -0
  224. package/src/index.ts +72 -0
  225. package/src/interactions/keydown/keydown.ts +14 -0
  226. package/src/interactions/outside-click/outside-click-mixin.ts +55 -0
  227. package/src/interactions/typeahead/typeahead-mixin.ts +89 -0
  228. package/src/jsx-runtime.ts +2 -0
  229. package/src/runtime/client-entries.ts +137 -0
  230. package/src/runtime/component.ts +402 -0
  231. package/src/runtime/create-element.ts +38 -0
  232. package/src/runtime/diff-dom.ts +404 -0
  233. package/src/runtime/diff-props.ts +209 -0
  234. package/src/runtime/document-state.ts +130 -0
  235. package/src/runtime/dom.ts +3971 -0
  236. package/src/runtime/error-event.ts +26 -0
  237. package/src/runtime/event-listeners.ts +171 -0
  238. package/src/runtime/frame.ts +1218 -0
  239. package/src/runtime/invariant.ts +31 -0
  240. package/src/runtime/jsx.ts +397 -0
  241. package/src/runtime/mixins/attrs-mixin.ts +35 -0
  242. package/src/runtime/mixins/link-mixin.ts +131 -0
  243. package/src/runtime/mixins/mixin.ts +908 -0
  244. package/src/runtime/mixins/on-mixin.ts +89 -0
  245. package/src/runtime/mixins/ref-mixin.ts +32 -0
  246. package/src/runtime/navigation.ts +148 -0
  247. package/src/runtime/reconcile.ts +1757 -0
  248. package/src/runtime/render.ts +101 -0
  249. package/src/runtime/run.ts +100 -0
  250. package/src/runtime/scheduler.ts +269 -0
  251. package/src/runtime/svg-attributes.ts +133 -0
  252. package/src/runtime/to-vnode.ts +51 -0
  253. package/src/runtime/typed-event-target.ts +67 -0
  254. package/src/runtime/vdom.ts +295 -0
  255. package/src/runtime/vnode.ts +137 -0
  256. package/src/server/stream.ts +1347 -0
  257. package/src/style/css-mixin.ts +82 -0
  258. package/src/style/index.ts +10 -0
  259. package/src/style/style.ts +312 -0
  260. package/src/style/stylesheet.ts +209 -0
  261. package/src/test/utils.ts +45 -0
  262. package/src/test.ts +2 -0
  263. package/src/theme/contract.ts +183 -0
  264. package/src/theme/glyph-contract.ts +57 -0
  265. package/src/theme/presets/rmx-01/glyphs.tsx +308 -0
  266. package/src/theme/presets/rmx-01/index.ts +121 -0
  267. package/src/theme/runtime.ts +116 -0
  268. package/src/theme/theme.ts +15 -0
  269. package/src/utils/flash-attribute.ts +11 -0
  270. package/src/utils/scroll-lock.ts +97 -0
  271. package/src/utils/wait-for-css-transition.ts +66 -0
  272. package/src/utils/wait.ts +5 -0
@@ -0,0 +1,235 @@
1
+ import { createMixin } from "../runtime/mixins/mixin.js";
2
+ import { invariant } from "../runtime/invariant.js";
3
+ const DEFAULT_ENTER = {
4
+ opacity: 0,
5
+ duration: 150,
6
+ easing: 'ease-out',
7
+ };
8
+ const DEFAULT_EXIT = {
9
+ opacity: 0,
10
+ duration: 150,
11
+ easing: 'ease-in',
12
+ };
13
+ const animatingNodes = new WeakMap();
14
+ const initialEntranceSeenByParent = new WeakMap();
15
+ function extractStyleProps(config) {
16
+ let result = {};
17
+ for (let key in config) {
18
+ if (key === 'duration' ||
19
+ key === 'easing' ||
20
+ key === 'delay' ||
21
+ key === 'composite' ||
22
+ key === 'initial') {
23
+ continue;
24
+ }
25
+ let value = config[key];
26
+ if (value === undefined)
27
+ continue;
28
+ if (typeof value !== 'string' && typeof value !== 'number')
29
+ continue;
30
+ result[key] = value;
31
+ }
32
+ return result;
33
+ }
34
+ function buildEnterKeyframes(config) {
35
+ let keyframe = extractStyleProps(config);
36
+ return [keyframe, {}];
37
+ }
38
+ function buildExitKeyframes(config) {
39
+ let keyframe = extractStyleProps(config);
40
+ return [{}, keyframe];
41
+ }
42
+ function resolveEnterConfig(config) {
43
+ if (!config)
44
+ return null;
45
+ if (config === true)
46
+ return DEFAULT_ENTER;
47
+ return config;
48
+ }
49
+ function resolveExitConfig(config) {
50
+ if (!config)
51
+ return null;
52
+ if (config === true)
53
+ return DEFAULT_EXIT;
54
+ return config;
55
+ }
56
+ function createAnimationOptions(config, fill) {
57
+ return {
58
+ duration: config.duration,
59
+ delay: config.delay,
60
+ easing: config.easing,
61
+ composite: config.composite,
62
+ fill,
63
+ };
64
+ }
65
+ function collectAnimatedProperties(keyframes) {
66
+ let properties = new Set();
67
+ for (let keyframe of keyframes) {
68
+ for (let key in keyframe) {
69
+ if (key === 'offset' || key === 'easing' || key === 'composite')
70
+ continue;
71
+ properties.add(key);
72
+ }
73
+ }
74
+ return [...properties];
75
+ }
76
+ function toCssPropertyName(property) {
77
+ return property.includes('-')
78
+ ? property
79
+ : property.replace(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
80
+ }
81
+ function readInlineStyle(style, property) {
82
+ return style.getPropertyValue(toCssPropertyName(property));
83
+ }
84
+ function writeInlineStyle(style, property, value) {
85
+ let cssProperty = toCssPropertyName(property);
86
+ if (value === '') {
87
+ style.removeProperty(cssProperty);
88
+ return;
89
+ }
90
+ style.setProperty(cssProperty, value);
91
+ }
92
+ function trackAnimation(node, animation, keyframes) {
93
+ let properties = collectAnimatedProperties(keyframes);
94
+ animatingNodes.set(node, { animation, properties });
95
+ animation.finished
96
+ .catch(() => { })
97
+ .finally(() => {
98
+ let current = animatingNodes.get(node);
99
+ if (current?.animation !== animation)
100
+ return;
101
+ animatingNodes.delete(node);
102
+ });
103
+ }
104
+ function waitForAnimationOrAbort(animation, signal) {
105
+ if (signal.aborted)
106
+ return Promise.resolve();
107
+ return new Promise((resolve) => {
108
+ let settled = false;
109
+ let settle = () => {
110
+ if (settled)
111
+ return;
112
+ settled = true;
113
+ signal.removeEventListener('abort', settle);
114
+ resolve();
115
+ };
116
+ signal.addEventListener('abort', settle, { once: true });
117
+ void animation.finished.catch(() => { }).finally(settle);
118
+ });
119
+ }
120
+ function shouldSkipInitialEntrance(event, config) {
121
+ if (config.initial !== false)
122
+ return false;
123
+ if (event.key == null)
124
+ return false;
125
+ let seenForParent = initialEntranceSeenByParent.get(event.parent);
126
+ if (!seenForParent) {
127
+ seenForParent = new Set();
128
+ initialEntranceSeenByParent.set(event.parent, seenForParent);
129
+ }
130
+ if (seenForParent.has(event.key))
131
+ return false;
132
+ seenForParent.add(event.key);
133
+ return true;
134
+ }
135
+ const animateEntranceMixin = createMixin((handle) => {
136
+ let currentConfig = true;
137
+ handle.addEventListener('insert', (event) => {
138
+ let node = event.node;
139
+ let current = animatingNodes.get(node);
140
+ if (current && current.animation.playState === 'running') {
141
+ return;
142
+ }
143
+ let config = resolveEnterConfig(currentConfig);
144
+ if (!config)
145
+ return;
146
+ if (shouldSkipInitialEntrance(event, config))
147
+ return;
148
+ let keyframes = buildEnterKeyframes(config);
149
+ let options = createAnimationOptions(config, 'backwards');
150
+ let animation = node.animate(keyframes, options);
151
+ trackAnimation(node, animation, keyframes);
152
+ });
153
+ return (config) => {
154
+ currentConfig = config;
155
+ return handle.element;
156
+ };
157
+ });
158
+ const animateExitMixin = createMixin((handle) => {
159
+ let currentConfig = true;
160
+ let node = null;
161
+ handle.addEventListener('insert', (event) => {
162
+ node = event.node;
163
+ });
164
+ handle.addEventListener('reclaimed', (event) => {
165
+ node = event.node;
166
+ let current = animatingNodes.get(event.node);
167
+ if (current && current.animation.playState === 'running') {
168
+ // WAAPI can throw InvalidStateError here if the target is transiently non-rendered
169
+ // during reclaim; we still have computed-style fallback below for retargeting.
170
+ try {
171
+ current.animation.commitStyles();
172
+ }
173
+ catch { }
174
+ current.animation.cancel();
175
+ let style = event.node.style;
176
+ let computed = getComputedStyle(event.node);
177
+ let from = {};
178
+ for (let property of current.properties) {
179
+ let cssProperty = toCssPropertyName(property);
180
+ let value = readInlineStyle(style, property) || computed.getPropertyValue(cssProperty);
181
+ if (value !== '') {
182
+ from[property] = value;
183
+ }
184
+ writeInlineStyle(style, property, '');
185
+ }
186
+ let enterConfig = resolveEnterConfig(currentConfig) ?? DEFAULT_ENTER;
187
+ let keyframes = [from, {}];
188
+ let options = createAnimationOptions(enterConfig, 'none');
189
+ let animation = event.node.animate(keyframes, options);
190
+ trackAnimation(event.node, animation, keyframes);
191
+ }
192
+ });
193
+ handle.addEventListener('beforeRemove', (event) => {
194
+ let config = resolveExitConfig(currentConfig);
195
+ if (!config)
196
+ return;
197
+ event.persistNode(async (signal) => {
198
+ invariant(node);
199
+ let current = animatingNodes.get(node);
200
+ if (current && current.animation.playState === 'running') {
201
+ current.animation.reverse();
202
+ await waitForAnimationOrAbort(current.animation, signal);
203
+ return;
204
+ }
205
+ let keyframes = buildExitKeyframes(config);
206
+ let options = createAnimationOptions(config, 'forwards');
207
+ let animation = node.animate(keyframes, options);
208
+ trackAnimation(node, animation, keyframes);
209
+ await waitForAnimationOrAbort(animation, signal);
210
+ });
211
+ });
212
+ return (config) => {
213
+ currentConfig = config;
214
+ return handle.element;
215
+ };
216
+ });
217
+ /**
218
+ * Animates an element when it is inserted into the DOM.
219
+ *
220
+ * @param config Entrance animation configuration.
221
+ * @returns A mixin descriptor for the target element.
222
+ */
223
+ export function animateEntrance(config = true) {
224
+ return animateEntranceMixin(config);
225
+ }
226
+ /**
227
+ * Animates an element when it is removed from the DOM.
228
+ *
229
+ * @param config Exit animation configuration.
230
+ * @returns A mixin descriptor for the target element.
231
+ */
232
+ export function animateExit(config = true) {
233
+ return animateExitMixin(config);
234
+ }
235
+ //# sourceMappingURL=animate-mixins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animate-mixins.js","sourceRoot":"","sources":["../../src/animation/animate-mixins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { animateEntrance, animateExit } from './animate-mixins.ts';
2
+ export { animateLayout } from './animate-layout-mixin.ts';
3
+ export { spring } from './spring.ts';
4
+ export type { SpringIterator, SpringPreset, SpringOptions } from './spring.ts';
5
+ export { tween, easings } from './tween.ts';
6
+ export type { TweenOptions, BezierCurve } from './tween.ts';
@@ -0,0 +1,5 @@
1
+ export { animateEntrance, animateExit } from "./animate-mixins.js";
2
+ export { animateLayout } from "./animate-layout-mixin.js";
3
+ export { spring } from "./spring.js";
4
+ export { tween, easings } from "./tween.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/animation/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Spring physics based on SwiftUI's spring math.
3
+ *
4
+ * Returns a decorated iterator that can be:
5
+ * - Iterated to get position values (0→1)
6
+ * - Spread for WAAPI: { ...spring() }
7
+ * - Stringified for CSS: `transform ${spring()}`
8
+ *
9
+ * Spring Parameter Conversion (SwiftUI formulas, mass = 1):
10
+ * stiffness = (2π ÷ duration)²
11
+ * damping = 1 - 4π × bounce ÷ duration (bounce ≥ 0)
12
+ * damping = 4π ÷ (duration + 4π × bounce) (bounce < 0)
13
+ */
14
+ export type SpringPreset = 'smooth' | 'snappy' | 'bouncy';
15
+ /**
16
+ * Options for generating a spring easing iterator.
17
+ */
18
+ export interface SpringOptions {
19
+ /** Perceptual duration in milliseconds used to derive spring stiffness. */
20
+ duration?: number;
21
+ /** Spring bounce amount from overdamped (`< 0`) to bouncy (`> 0`). */
22
+ bounce?: number;
23
+ /** Initial velocity in units per second. */
24
+ velocity?: number;
25
+ }
26
+ /**
27
+ * Iterator returned by {@link spring}, decorated for CSS and WAAPI use.
28
+ */
29
+ export interface SpringIterator extends IterableIterator<number> {
30
+ /** Time when spring settles to rest (milliseconds) */
31
+ duration: number;
32
+ /** CSS linear() easing function */
33
+ easing: string;
34
+ /** Returns "duration ms linear(...)" for CSS transitions */
35
+ toString(): string;
36
+ }
37
+ /**
38
+ * Create a spring iterator for animations.
39
+ *
40
+ * @example
41
+ * let s = spring('bouncy')
42
+ *
43
+ * // As CSS transition
44
+ * element.style.transition = `transform ${s}`
45
+ *
46
+ * // Spread for WAAPI
47
+ * element.animate(keyframes, { ...spring() })
48
+ *
49
+ * // Iterate for JS animation
50
+ * for (let position of spring()) {
51
+ * element.style.transform = `translateX(${position * 100}px)`
52
+ * }
53
+ */
54
+ /**
55
+ * Creates a spring iterator from a named preset.
56
+ *
57
+ * @param preset Preset spring profile to start from.
58
+ * @param overrides Optional preset overrides.
59
+ * @returns A spring iterator.
60
+ */
61
+ export declare function spring(preset: SpringPreset, overrides?: Omit<SpringOptions, 'bounce'>): SpringIterator;
62
+ /**
63
+ * Creates a spring iterator from explicit spring options.
64
+ *
65
+ * @param options Spring parameters.
66
+ * @returns A spring iterator.
67
+ */
68
+ export declare function spring(options?: SpringOptions): SpringIterator;
69
+ export declare namespace spring {
70
+ var transition: (property: string | string[], presetOrOptions?: SpringPreset | SpringOptions, overrides?: Omit<SpringOptions, "bounce">) => string;
71
+ var presets: Record<SpringPreset, {
72
+ duration: number;
73
+ bounce: number;
74
+ }>;
75
+ }
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Spring physics based on SwiftUI's spring math.
3
+ *
4
+ * Returns a decorated iterator that can be:
5
+ * - Iterated to get position values (0→1)
6
+ * - Spread for WAAPI: { ...spring() }
7
+ * - Stringified for CSS: `transform ${spring()}`
8
+ *
9
+ * Spring Parameter Conversion (SwiftUI formulas, mass = 1):
10
+ * stiffness = (2π ÷ duration)²
11
+ * damping = 1 - 4π × bounce ÷ duration (bounce ≥ 0)
12
+ * damping = 4π ÷ (duration + 4π × bounce) (bounce < 0)
13
+ */
14
+ const presets = {
15
+ smooth: { duration: 400, bounce: -0.3 },
16
+ snappy: { duration: 200, bounce: 0 },
17
+ bouncy: { duration: 400, bounce: 0.3 },
18
+ };
19
+ // Rest thresholds for determining when spring has settled
20
+ const restSpeed = 0.01;
21
+ const restDelta = 0.005;
22
+ const maxSettlingTime = 20_000;
23
+ const frameMs = 1000 / 60; // ~16.67ms per frame
24
+ export function spring(presetOrOptions, overrides) {
25
+ let options = resolveOptions(presetOrOptions, overrides);
26
+ let { position, settlingTime, easing } = computeSpring(options);
27
+ let duration = Math.round(settlingTime);
28
+ function* generator() {
29
+ let t = 0;
30
+ while (t < settlingTime) {
31
+ yield position(t);
32
+ t += frameMs;
33
+ }
34
+ yield 1;
35
+ }
36
+ let iter = generator();
37
+ // Decorate iterator with spring properties (enumerable for spread)
38
+ Object.defineProperties(iter, {
39
+ duration: { value: duration, enumerable: true },
40
+ easing: { value: easing, enumerable: true },
41
+ toString: {
42
+ value() {
43
+ return `${duration}ms ${easing}`;
44
+ },
45
+ },
46
+ });
47
+ return iter;
48
+ }
49
+ // Transition helper for CSS transition property
50
+ spring.transition = function transition(property, presetOrOptions, overrides) {
51
+ let s = typeof presetOrOptions === 'string'
52
+ ? spring(presetOrOptions, overrides)
53
+ : spring(presetOrOptions);
54
+ let properties = Array.isArray(property) ? property : [property];
55
+ return properties.map((p) => `${p} ${s}`).join(', ');
56
+ };
57
+ // Access preset defaults
58
+ spring.presets = presets;
59
+ function resolveOptions(presetOrOptions, overrides) {
60
+ if (typeof presetOrOptions === 'string') {
61
+ let preset = presets[presetOrOptions];
62
+ return {
63
+ duration: overrides?.duration ?? preset.duration,
64
+ bounce: preset.bounce,
65
+ velocity: overrides?.velocity,
66
+ };
67
+ }
68
+ if (presetOrOptions) {
69
+ return presetOrOptions;
70
+ }
71
+ // Default to 'snappy' preset
72
+ return presets.snappy;
73
+ }
74
+ // Core spring computation
75
+ function computeSpring(options) {
76
+ let { duration: durationMs = 300, bounce = 0, velocity = 0 } = options;
77
+ // Convert duration to seconds for physics calculations
78
+ let durationSec = durationMs / 1000;
79
+ // Natural frequency: ω₀ = √(stiffness) = 2π / duration
80
+ let omega0 = (2 * Math.PI) / durationSec;
81
+ // Clamp bounce to valid range
82
+ bounce = Math.max(-1, Math.min(0.95, bounce));
83
+ // Damping ratio (ζ):
84
+ // bounce >= 0: ζ = 1 - bounce (linear, 0→1 maps to critical→underdamped)
85
+ // bounce < 0: ζ = 1 / (1 + bounce) (stronger overdamping as bounce→-1)
86
+ let zeta = bounce >= 0 ? 1 - bounce : 1 / (1 + bounce);
87
+ // Convert to per-millisecond for time calculations
88
+ let omega0Ms = omega0 / 1000;
89
+ let velocityMs = -velocity / 1000; // negated for spring equation convention
90
+ // Position function based on damping regime
91
+ let position;
92
+ if (zeta < 1) {
93
+ // Underdamped (bouncy) - oscillates around target
94
+ let omegaD = omega0Ms * Math.sqrt(1 - zeta * zeta);
95
+ position = (t) => {
96
+ let envelope = Math.exp(-zeta * omega0Ms * t);
97
+ return (1 -
98
+ envelope *
99
+ (((velocityMs + zeta * omega0Ms) / omegaD) * Math.sin(omegaD * t) + Math.cos(omegaD * t)));
100
+ };
101
+ }
102
+ else if (zeta > 1) {
103
+ // Overdamped (smooth) - no oscillation, two decay rates
104
+ let sqrtTerm = Math.sqrt(zeta * zeta - 1);
105
+ let s1 = omega0Ms * (-zeta + sqrtTerm); // slower decay
106
+ let s2 = omega0Ms * (-zeta - sqrtTerm); // faster decay
107
+ let A = (s2 + velocityMs) / (s2 - s1);
108
+ let B = 1 - A;
109
+ position = (t) => 1 - A * Math.exp(s1 * t) - B * Math.exp(s2 * t);
110
+ }
111
+ else {
112
+ // Critically damped - fastest approach without oscillation
113
+ position = (t) => 1 - Math.exp(-omega0Ms * t) * (1 + (velocityMs + omega0Ms) * t);
114
+ }
115
+ // Velocity via numerical differentiation (units per second)
116
+ let velocitySampleMs = 0.5;
117
+ function velocityAt(t) {
118
+ if (t < velocitySampleMs) {
119
+ return ((position(velocitySampleMs) - position(0)) / velocitySampleMs) * 1000;
120
+ }
121
+ return ((position(t) - position(t - velocitySampleMs)) / velocitySampleMs) * 1000;
122
+ }
123
+ // Find settling time
124
+ let settlingTime = maxSettlingTime;
125
+ let step = 50;
126
+ for (let t = 0; t < maxSettlingTime; t += step) {
127
+ let pos = position(t);
128
+ let vel = Math.abs(velocityAt(t));
129
+ let displacement = Math.abs(1 - pos);
130
+ if (vel <= restSpeed && displacement <= restDelta) {
131
+ settlingTime = t;
132
+ break;
133
+ }
134
+ }
135
+ // Generate CSS easing
136
+ let easing = generateEasing(position, settlingTime);
137
+ return { position, settlingTime, easing };
138
+ }
139
+ // Generate CSS linear() easing with adaptive sampling
140
+ function generateEasing(position, settlingTime) {
141
+ let points = adaptiveSample(position, settlingTime);
142
+ return `linear(${points
143
+ .map((p, i) => {
144
+ let isLast = i === points.length - 1;
145
+ let value = isLast ? 1 : Math.round(p.value * 10000) / 10000;
146
+ if (i === 0 || isLast) {
147
+ return value === 1 ? '1' : value.toString();
148
+ }
149
+ let percent = Math.round((p.t / settlingTime) * 1000) / 10;
150
+ return `${value} ${percent}%`;
151
+ })
152
+ .join(', ')})`;
153
+ }
154
+ // Adaptive sampling - more points where curvature is high, fewer where linear
155
+ function adaptiveSample(resolve, duration, tolerance = 0.002, minSegment = 8) {
156
+ let points = [];
157
+ function addPoint(t, value) {
158
+ if (points.length === 0 || points[points.length - 1].t < t) {
159
+ points.push({ t, value });
160
+ }
161
+ }
162
+ function subdivide(t0, v0, t1, v1, depth = 0) {
163
+ if (depth > 12) {
164
+ addPoint(t0, v0);
165
+ return;
166
+ }
167
+ let tMid = (t0 + t1) / 2;
168
+ let vMid = resolve(tMid);
169
+ let vLinear = (v0 + v1) / 2;
170
+ let error = Math.abs(vMid - vLinear);
171
+ if (error > tolerance && t1 - t0 > minSegment) {
172
+ subdivide(t0, v0, tMid, vMid, depth + 1);
173
+ subdivide(tMid, vMid, t1, v1, depth + 1);
174
+ }
175
+ else {
176
+ addPoint(t0, v0);
177
+ }
178
+ }
179
+ subdivide(0, resolve(0), duration, resolve(duration));
180
+ addPoint(duration, resolve(duration));
181
+ return points;
182
+ }
183
+ //# sourceMappingURL=spring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spring.js","sourceRoot":"","sources":["../../src/animation/spring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4BH,MAAM,OAAO,GAA+D;IAC1E,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE;IACvC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE;IACpC,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;CACvC,CAAA;AAED,0DAA0D;AAC1D,MAAM,SAAS,GAAG,IAAI,CAAA;AACtB,MAAM,SAAS,GAAG,KAAK,CAAA;AACvB,MAAM,eAAe,GAAG,MAAM,CAAA;AAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA,CAAC,qBAAqB;AAqC/C,MAAM,UAAU,MAAM,CACpB,eAA8C,EAC9C,SAAyC;IAEzC,IAAI,OAAO,GAAG,cAAc,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;IACxD,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAE/D,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAEvC,QAAQ,CAAC,CAAC,SAAS;QACjB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,OAAO,CAAC,GAAG,YAAY,EAAE,CAAC;YACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,IAAI,OAAO,CAAA;QACd,CAAC;QACD,MAAM,CAAC,CAAA;IACT,CAAC;IAED,IAAI,IAAI,GAAG,SAAS,EAAE,CAAA;IAEtB,mEAAmE;IACnE,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;QAC5B,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE;QAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3C,QAAQ,EAAE;YACR,KAAK;gBACH,OAAO,GAAG,QAAQ,MAAM,MAAM,EAAE,CAAA;YAClC,CAAC;SACF;KACF,CAAC,CAAA;IAEF,OAAO,IAAiC,CAAA;AAC1C,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,CACrC,QAA2B,EAC3B,eAA8C,EAC9C,SAAyC;IAEzC,IAAI,CAAC,GACH,OAAO,eAAe,KAAK,QAAQ;QACjC,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAE7B,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAChE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,yBAAyB;AACzB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;AAExB,SAAS,cAAc,CACrB,eAA8C,EAC9C,SAAyC;IAEzC,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QACxC,IAAI,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAA;QACrC,OAAO;YACL,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAChD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ,EAAE,SAAS,EAAE,QAAQ;SAC9B,CAAA;IACH,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,eAAe,CAAA;IACxB,CAAC;IACD,6BAA6B;IAC7B,OAAO,OAAO,CAAC,MAAM,CAAA;AACvB,CAAC;AAQD,0BAA0B;AAC1B,SAAS,aAAa,CAAC,OAAsB;IAC3C,IAAI,EAAE,QAAQ,EAAE,UAAU,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,OAAO,CAAA;IAEtE,uDAAuD;IACvD,IAAI,WAAW,GAAG,UAAU,GAAG,IAAI,CAAA;IAEnC,uDAAuD;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,WAAW,CAAA;IAExC,8BAA8B;IAC9B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;IAE7C,qBAAqB;IACrB,yEAAyE;IACzE,uEAAuE;IACvE,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;IAEtD,mDAAmD;IACnD,IAAI,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAA;IAC5B,IAAI,UAAU,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAA,CAAC,yCAAyC;IAE3E,4CAA4C;IAC5C,IAAI,QAA+B,CAAA;IAEnC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,kDAAkD;QAClD,IAAI,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAA;QAClD,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE;YACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAA;YAC7C,OAAO,CACL,CAAC;gBACD,QAAQ;oBACN,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAC5F,CAAA;QACH,CAAC,CAAA;IACH,CAAC;SAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,wDAAwD;QACxD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAA;QACzC,IAAI,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAA,CAAC,eAAe;QACtD,IAAI,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAA,CAAC,eAAe;QACtD,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IAC3E,CAAC;SAAM,CAAC;QACN,2DAA2D;QAC3D,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3F,CAAC;IAED,4DAA4D;IAC5D,IAAI,gBAAgB,GAAG,GAAG,CAAA;IAC1B,SAAS,UAAU,CAAC,CAAS;QAC3B,IAAI,CAAC,GAAG,gBAAgB,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAA;QAC/E,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAA;IACnF,CAAC;IAED,qBAAqB;IACrB,IAAI,YAAY,GAAG,eAAe,CAAA;IAClC,IAAI,IAAI,GAAG,EAAE,CAAA;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC/C,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACrB,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACjC,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA;QAEpC,IAAI,GAAG,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;YAClD,YAAY,GAAG,CAAC,CAAA;YAChB,MAAK;QACP,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAEnD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAA;AAC3C,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc,CAAC,QAA+B,EAAE,YAAoB;IAC3E,IAAI,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IAEnD,OAAO,UAAU,MAAM;SACpB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,IAAI,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;QACpC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAA;QAC5D,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACtB,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC7C,CAAC;QACD,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1D,OAAO,GAAG,KAAK,IAAI,OAAO,GAAG,CAAA;IAC/B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAClB,CAAC;AAED,8EAA8E;AAC9E,SAAS,cAAc,CACrB,OAA8B,EAC9B,QAAgB,EAChB,YAAoB,KAAK,EACzB,aAAqB,CAAC;IAEtB,IAAI,MAAM,GAAwC,EAAE,CAAA;IAEpD,SAAS,QAAQ,CAAC,CAAS,EAAE,KAAa;QACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,SAAS,SAAS,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,QAAgB,CAAC;QAClF,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YAChB,OAAM;QACR,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QACxB,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,CAAA;QAEpC,IAAI,KAAK,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;YAC9C,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YACxC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IACrD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAA;IAErC,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Cubic-bezier control points used by {@link tween}.
3
+ */
4
+ export interface BezierCurve {
5
+ /** First control point x coordinate. */
6
+ x1: number;
7
+ /** First control point y coordinate. */
8
+ y1: number;
9
+ /** Second control point x coordinate. */
10
+ x2: number;
11
+ /** Second control point y coordinate. */
12
+ y2: number;
13
+ }
14
+ /**
15
+ * Common cubic-bezier presets for {@link tween}.
16
+ */
17
+ export declare const easings: {
18
+ readonly linear: {
19
+ readonly x1: 0;
20
+ readonly y1: 0;
21
+ readonly x2: 1;
22
+ readonly y2: 1;
23
+ };
24
+ readonly ease: {
25
+ readonly x1: 0.25;
26
+ readonly y1: 0.1;
27
+ readonly x2: 0.25;
28
+ readonly y2: 1;
29
+ };
30
+ readonly easeIn: {
31
+ readonly x1: 0.42;
32
+ readonly y1: 0;
33
+ readonly x2: 1;
34
+ readonly y2: 1;
35
+ };
36
+ readonly easeOut: {
37
+ readonly x1: 0;
38
+ readonly y1: 0;
39
+ readonly x2: 0.58;
40
+ readonly y2: 1;
41
+ };
42
+ readonly easeInOut: {
43
+ readonly x1: 0.42;
44
+ readonly y1: 0;
45
+ readonly x2: 0.58;
46
+ readonly y2: 1;
47
+ };
48
+ };
49
+ /**
50
+ * Options for generating tweened values over time.
51
+ */
52
+ export interface TweenOptions {
53
+ /** Starting value for the tween. */
54
+ from: number;
55
+ /** Ending value for the tween. */
56
+ to: number;
57
+ /** Total tween duration in milliseconds. */
58
+ duration: number;
59
+ /** Cubic-bezier curve used to shape the interpolation. */
60
+ curve: BezierCurve;
61
+ }
62
+ /**
63
+ * Generator that tweens a value over time using a cubic bezier curve.
64
+ * Yields the current value on each frame. Use the iterator's `done` property
65
+ * to check if the animation is complete.
66
+ * @param options The tween configuration
67
+ * @yields The current tweened value
68
+ * @returns The final value
69
+ */
70
+ export declare function tween(options: TweenOptions): Generator<number, number, number>;