@wardic/solid 0.0.0-stage → 1.0.0-rc.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 (994) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +26 -2
  3. package/THIRD_PARTY_NOTICES.md +145 -0
  4. package/dist/browser/animation-controls.js +150 -0
  5. package/dist/browser/animation-controls.js.map +1 -0
  6. package/dist/browser/animation-frame.js +29 -0
  7. package/dist/browser/animation-frame.js.map +1 -0
  8. package/dist/browser/appear.js +727 -0
  9. package/dist/browser/appear.js.map +1 -0
  10. package/dist/browser/arc.js +21 -0
  11. package/dist/browser/arc.js.map +1 -0
  12. package/dist/browser/bridge.js +69 -0
  13. package/dist/browser/bridge.js.map +1 -0
  14. package/dist/browser/complete.js +30 -0
  15. package/dist/browser/complete.js.map +1 -0
  16. package/dist/browser/config.js +2 -0
  17. package/dist/browser/config.js.map +1 -0
  18. package/dist/browser/create-animate.js +41 -0
  19. package/dist/browser/create-animate.js.map +1 -0
  20. package/dist/browser/create-ward.js +1001 -0
  21. package/dist/browser/create-ward.js.map +1 -0
  22. package/dist/browser/cycle-index.js +17 -0
  23. package/dist/browser/cycle-index.js.map +1 -0
  24. package/dist/browser/cycle.js +31 -0
  25. package/dist/browser/cycle.js.map +1 -0
  26. package/dist/browser/directive.js +80 -0
  27. package/dist/browser/directive.js.map +1 -0
  28. package/dist/browser/drag-constraints.js +76 -0
  29. package/dist/browser/drag-constraints.js.map +1 -0
  30. package/dist/browser/drag-controls.js +51 -0
  31. package/dist/browser/drag-controls.js.map +1 -0
  32. package/dist/browser/drag-samples.js +40 -0
  33. package/dist/browser/drag-samples.js.map +1 -0
  34. package/dist/browser/drag-sensor.js +35 -0
  35. package/dist/browser/drag-sensor.js.map +1 -0
  36. package/dist/browser/drag-track.js +817 -0
  37. package/dist/browser/drag-track.js.map +1 -0
  38. package/dist/browser/drag-transition.js +56 -0
  39. package/dist/browser/drag-transition.js.map +1 -0
  40. package/dist/browser/drag.js +44 -0
  41. package/dist/browser/drag.js.map +1 -0
  42. package/dist/browser/element-style.js +67 -0
  43. package/dist/browser/element-style.js.map +1 -0
  44. package/dist/browser/element.js +353 -0
  45. package/dist/browser/element.js.map +1 -0
  46. package/dist/browser/feature-section.js +17 -0
  47. package/dist/browser/feature-section.js.map +1 -0
  48. package/dist/browser/feature.js +261 -0
  49. package/dist/browser/feature.js.map +1 -0
  50. package/dist/browser/features/all.js +10 -0
  51. package/dist/browser/features/all.js.map +1 -0
  52. package/dist/browser/features/colors.js +33 -0
  53. package/dist/browser/features/colors.js.map +1 -0
  54. package/dist/browser/features/dom-animation.js +7 -0
  55. package/dist/browser/features/dom-animation.js.map +1 -0
  56. package/dist/browser/features/dom-max.js +4 -0
  57. package/dist/browser/features/dom-max.js.map +1 -0
  58. package/dist/browser/features/drag.js +28 -0
  59. package/dist/browser/features/drag.js.map +1 -0
  60. package/dist/browser/features/focus.js +18 -0
  61. package/dist/browser/features/focus.js.map +1 -0
  62. package/dist/browser/features/hover.js +18 -0
  63. package/dist/browser/features/hover.js.map +1 -0
  64. package/dist/browser/features/in-view.js +18 -0
  65. package/dist/browser/features/in-view.js.map +1 -0
  66. package/dist/browser/features/input.js +30 -0
  67. package/dist/browser/features/input.js.map +1 -0
  68. package/dist/browser/features/keys.js +19 -0
  69. package/dist/browser/features/keys.js.map +1 -0
  70. package/dist/browser/features/layout.js +33 -0
  71. package/dist/browser/features/layout.js.map +1 -0
  72. package/dist/browser/features/pan.js +18 -0
  73. package/dist/browser/features/pan.js.map +1 -0
  74. package/dist/browser/features/press.js +12 -0
  75. package/dist/browser/features/press.js.map +1 -0
  76. package/dist/browser/focus-sensor.js +23 -0
  77. package/dist/browser/focus-sensor.js.map +1 -0
  78. package/dist/browser/frame-time.js +40 -0
  79. package/dist/browser/frame-time.js.map +1 -0
  80. package/dist/browser/gesture-callbacks.js +172 -0
  81. package/dist/browser/gesture-callbacks.js.map +1 -0
  82. package/dist/browser/gesture-features.js +29 -0
  83. package/dist/browser/gesture-features.js.map +1 -0
  84. package/dist/browser/gesture-info.js +43 -0
  85. package/dist/browser/gesture-info.js.map +1 -0
  86. package/dist/browser/hover-sensor.js +29 -0
  87. package/dist/browser/hover-sensor.js.map +1 -0
  88. package/dist/browser/imperative.js +614 -0
  89. package/dist/browser/imperative.js.map +1 -0
  90. package/dist/browser/index.js +165 -0
  91. package/dist/browser/index.js.map +1 -0
  92. package/dist/browser/instant.js +51 -0
  93. package/dist/browser/instant.js.map +1 -0
  94. package/dist/browser/layout-group.js +27 -0
  95. package/dist/browser/layout-group.js.map +1 -0
  96. package/dist/browser/layout-member.js +362 -0
  97. package/dist/browser/layout-member.js.map +1 -0
  98. package/dist/browser/layout-projection.js +19 -0
  99. package/dist/browser/layout-projection.js.map +1 -0
  100. package/dist/browser/layout.js +91 -0
  101. package/dist/browser/layout.js.map +1 -0
  102. package/dist/browser/live-style.js +313 -0
  103. package/dist/browser/live-style.js.map +1 -0
  104. package/dist/browser/live-value.js +252 -0
  105. package/dist/browser/live-value.js.map +1 -0
  106. package/dist/browser/motion-props.js +172 -0
  107. package/dist/browser/motion-props.js.map +1 -0
  108. package/dist/browser/owner-scope.js +29 -0
  109. package/dist/browser/owner-scope.js.map +1 -0
  110. package/dist/browser/page-point.js +92 -0
  111. package/dist/browser/page-point.js.map +1 -0
  112. package/dist/browser/presence-controller.js +1324 -0
  113. package/dist/browser/presence-controller.js.map +1 -0
  114. package/dist/browser/presence-record.js +27 -0
  115. package/dist/browser/presence-record.js.map +1 -0
  116. package/dist/browser/presence.js +207 -0
  117. package/dist/browser/presence.js.map +1 -0
  118. package/dist/browser/press-sensor.js +30 -0
  119. package/dist/browser/press-sensor.js.map +1 -0
  120. package/dist/browser/press.js +24 -0
  121. package/dist/browser/press.js.map +1 -0
  122. package/dist/browser/provider.js +445 -0
  123. package/dist/browser/provider.js.map +1 -0
  124. package/dist/browser/reactivity.js +9 -0
  125. package/dist/browser/reactivity.js.map +1 -0
  126. package/dist/browser/reorder-input.js +46 -0
  127. package/dist/browser/reorder-input.js.map +1 -0
  128. package/dist/browser/reorder.js +543 -0
  129. package/dist/browser/reorder.js.map +1 -0
  130. package/dist/browser/retarget-legs.js +1019 -0
  131. package/dist/browser/retarget-legs.js.map +1 -0
  132. package/dist/browser/runtime.js +249 -0
  133. package/dist/browser/runtime.js.map +1 -0
  134. package/dist/browser/sensors.js +172 -0
  135. package/dist/browser/sensors.js.map +1 -0
  136. package/dist/browser/server-interpolators.js +20 -0
  137. package/dist/browser/server-interpolators.js.map +1 -0
  138. package/dist/browser/server.js +20 -0
  139. package/dist/browser/server.js.map +1 -0
  140. package/dist/browser/solid-reactivity.js +26 -0
  141. package/dist/browser/solid-reactivity.js.map +1 -0
  142. package/dist/browser/spine.js +2939 -0
  143. package/dist/browser/spine.js.map +1 -0
  144. package/dist/browser/stagger.js +13 -0
  145. package/dist/browser/stagger.js.map +1 -0
  146. package/dist/browser/unstable/v2/bridge.js +76 -0
  147. package/dist/browser/unstable/v2/bridge.js.map +1 -0
  148. package/dist/browser/unstable/v2/complete.js +29 -0
  149. package/dist/browser/unstable/v2/complete.js.map +1 -0
  150. package/dist/browser/unstable/v2/config-view.js +111 -0
  151. package/dist/browser/unstable/v2/config-view.js.map +1 -0
  152. package/dist/browser/unstable/v2/create-animate.js +102 -0
  153. package/dist/browser/unstable/v2/create-animate.js.map +1 -0
  154. package/dist/browser/unstable/v2/cycle.js +30 -0
  155. package/dist/browser/unstable/v2/cycle.js.map +1 -0
  156. package/dist/browser/unstable/v2/drag-sensor.js +34 -0
  157. package/dist/browser/unstable/v2/drag-sensor.js.map +1 -0
  158. package/dist/browser/unstable/v2/element.js +393 -0
  159. package/dist/browser/unstable/v2/element.js.map +1 -0
  160. package/dist/browser/unstable/v2/feature-section.js +27 -0
  161. package/dist/browser/unstable/v2/feature-section.js.map +1 -0
  162. package/dist/browser/unstable/v2/focus-sensor.js +23 -0
  163. package/dist/browser/unstable/v2/focus-sensor.js.map +1 -0
  164. package/dist/browser/unstable/v2/hover-sensor.js +28 -0
  165. package/dist/browser/unstable/v2/hover-sensor.js.map +1 -0
  166. package/dist/browser/unstable/v2/index.js +114 -0
  167. package/dist/browser/unstable/v2/index.js.map +1 -0
  168. package/dist/browser/unstable/v2/layout-projection.js +18 -0
  169. package/dist/browser/unstable/v2/layout-projection.js.map +1 -0
  170. package/dist/browser/unstable/v2/layout.js +71 -0
  171. package/dist/browser/unstable/v2/layout.js.map +1 -0
  172. package/dist/browser/unstable/v2/lifecycle.js +455 -0
  173. package/dist/browser/unstable/v2/lifecycle.js.map +1 -0
  174. package/dist/browser/unstable/v2/live-value.js +264 -0
  175. package/dist/browser/unstable/v2/live-value.js.map +1 -0
  176. package/dist/browser/unstable/v2/presence-handle.js +146 -0
  177. package/dist/browser/unstable/v2/presence-handle.js.map +1 -0
  178. package/dist/browser/unstable/v2/presence-hooks.js +142 -0
  179. package/dist/browser/unstable/v2/presence-hooks.js.map +1 -0
  180. package/dist/browser/unstable/v2/presence.js +124 -0
  181. package/dist/browser/unstable/v2/presence.js.map +1 -0
  182. package/dist/browser/unstable/v2/press-sensor.js +29 -0
  183. package/dist/browser/unstable/v2/press-sensor.js.map +1 -0
  184. package/dist/browser/unstable/v2/provider.js +457 -0
  185. package/dist/browser/unstable/v2/provider.js.map +1 -0
  186. package/dist/browser/unstable/v2/reorder.js +663 -0
  187. package/dist/browser/unstable/v2/reorder.js.map +1 -0
  188. package/dist/browser/unstable/v2/sensors.js +138 -0
  189. package/dist/browser/unstable/v2/sensors.js.map +1 -0
  190. package/dist/browser/unstable/v2/solid-reactivity.js +82 -0
  191. package/dist/browser/unstable/v2/solid-reactivity.js.map +1 -0
  192. package/dist/browser/unstable/v2/variant-node.js +395 -0
  193. package/dist/browser/unstable/v2/variant-node.js.map +1 -0
  194. package/dist/browser/unstable/v2/w.js +23 -0
  195. package/dist/browser/unstable/v2/w.js.map +1 -0
  196. package/dist/browser/unstable/v2/waiters.js +185 -0
  197. package/dist/browser/unstable/v2/waiters.js.map +1 -0
  198. package/dist/browser/unstable/v2/ward.js +1620 -0
  199. package/dist/browser/unstable/v2/ward.js.map +1 -0
  200. package/dist/browser/unstable/v2/wardic-config.js +40 -0
  201. package/dist/browser/unstable/v2/wardic-config.js.map +1 -0
  202. package/dist/browser/unstable/v2/wardic.js +16 -0
  203. package/dist/browser/unstable/v2/wardic.js.map +1 -0
  204. package/dist/browser/variant-node.js +308 -0
  205. package/dist/browser/variant-node.js.map +1 -0
  206. package/dist/browser/variant-target.js +224 -0
  207. package/dist/browser/variant-target.js.map +1 -0
  208. package/dist/browser/variant-tree.js +394 -0
  209. package/dist/browser/variant-tree.js.map +1 -0
  210. package/dist/browser/variants.js +43 -0
  211. package/dist/browser/variants.js.map +1 -0
  212. package/dist/browser/w.js +25 -0
  213. package/dist/browser/w.js.map +1 -0
  214. package/dist/browser/ward-keys.js +2 -0
  215. package/dist/browser/ward-keys.js.map +1 -0
  216. package/dist/browser/wardic-component.js +74 -0
  217. package/dist/browser/wardic-component.js.map +1 -0
  218. package/dist/browser/wardic-config-value.js +91 -0
  219. package/dist/browser/wardic-config-value.js.map +1 -0
  220. package/dist/browser/wardic-config.js +42 -0
  221. package/dist/browser/wardic-config.js.map +1 -0
  222. package/dist/browser/wardic.js +31 -0
  223. package/dist/browser/wardic.js.map +1 -0
  224. package/dist/server/animation-controls.js +150 -0
  225. package/dist/server/animation-controls.js.map +1 -0
  226. package/dist/server/animation-frame.js +29 -0
  227. package/dist/server/animation-frame.js.map +1 -0
  228. package/dist/server/appear.js +727 -0
  229. package/dist/server/appear.js.map +1 -0
  230. package/dist/server/arc.js +21 -0
  231. package/dist/server/arc.js.map +1 -0
  232. package/dist/server/bridge.js +69 -0
  233. package/dist/server/bridge.js.map +1 -0
  234. package/dist/server/complete.js +30 -0
  235. package/dist/server/complete.js.map +1 -0
  236. package/dist/server/config.js +2 -0
  237. package/dist/server/config.js.map +1 -0
  238. package/dist/server/create-animate.js +41 -0
  239. package/dist/server/create-animate.js.map +1 -0
  240. package/dist/server/create-ward.js +1001 -0
  241. package/dist/server/create-ward.js.map +1 -0
  242. package/dist/server/cycle-index.js +17 -0
  243. package/dist/server/cycle-index.js.map +1 -0
  244. package/dist/server/cycle.js +31 -0
  245. package/dist/server/cycle.js.map +1 -0
  246. package/dist/server/directive.js +80 -0
  247. package/dist/server/directive.js.map +1 -0
  248. package/dist/server/drag-constraints.js +76 -0
  249. package/dist/server/drag-constraints.js.map +1 -0
  250. package/dist/server/drag-controls.js +51 -0
  251. package/dist/server/drag-controls.js.map +1 -0
  252. package/dist/server/drag-samples.js +40 -0
  253. package/dist/server/drag-samples.js.map +1 -0
  254. package/dist/server/drag-sensor.js +35 -0
  255. package/dist/server/drag-sensor.js.map +1 -0
  256. package/dist/server/drag-track.js +817 -0
  257. package/dist/server/drag-track.js.map +1 -0
  258. package/dist/server/drag-transition.js +56 -0
  259. package/dist/server/drag-transition.js.map +1 -0
  260. package/dist/server/drag.js +44 -0
  261. package/dist/server/drag.js.map +1 -0
  262. package/dist/server/element-style.js +67 -0
  263. package/dist/server/element-style.js.map +1 -0
  264. package/dist/server/element.js +353 -0
  265. package/dist/server/element.js.map +1 -0
  266. package/dist/server/feature-section.js +17 -0
  267. package/dist/server/feature-section.js.map +1 -0
  268. package/dist/server/feature.js +261 -0
  269. package/dist/server/feature.js.map +1 -0
  270. package/dist/server/features/all.js +10 -0
  271. package/dist/server/features/all.js.map +1 -0
  272. package/dist/server/features/colors.js +33 -0
  273. package/dist/server/features/colors.js.map +1 -0
  274. package/dist/server/features/dom-animation.js +7 -0
  275. package/dist/server/features/dom-animation.js.map +1 -0
  276. package/dist/server/features/dom-max.js +4 -0
  277. package/dist/server/features/dom-max.js.map +1 -0
  278. package/dist/server/features/drag.js +28 -0
  279. package/dist/server/features/drag.js.map +1 -0
  280. package/dist/server/features/focus.js +18 -0
  281. package/dist/server/features/focus.js.map +1 -0
  282. package/dist/server/features/hover.js +18 -0
  283. package/dist/server/features/hover.js.map +1 -0
  284. package/dist/server/features/in-view.js +18 -0
  285. package/dist/server/features/in-view.js.map +1 -0
  286. package/dist/server/features/input.js +30 -0
  287. package/dist/server/features/input.js.map +1 -0
  288. package/dist/server/features/keys.js +19 -0
  289. package/dist/server/features/keys.js.map +1 -0
  290. package/dist/server/features/layout.js +33 -0
  291. package/dist/server/features/layout.js.map +1 -0
  292. package/dist/server/features/pan.js +18 -0
  293. package/dist/server/features/pan.js.map +1 -0
  294. package/dist/server/features/press.js +12 -0
  295. package/dist/server/features/press.js.map +1 -0
  296. package/dist/server/focus-sensor.js +23 -0
  297. package/dist/server/focus-sensor.js.map +1 -0
  298. package/dist/server/frame-time.js +40 -0
  299. package/dist/server/frame-time.js.map +1 -0
  300. package/dist/server/gesture-callbacks.js +172 -0
  301. package/dist/server/gesture-callbacks.js.map +1 -0
  302. package/dist/server/gesture-features.js +29 -0
  303. package/dist/server/gesture-features.js.map +1 -0
  304. package/dist/server/gesture-info.js +43 -0
  305. package/dist/server/gesture-info.js.map +1 -0
  306. package/dist/server/hover-sensor.js +29 -0
  307. package/dist/server/hover-sensor.js.map +1 -0
  308. package/dist/server/imperative.js +614 -0
  309. package/dist/server/imperative.js.map +1 -0
  310. package/dist/server/index.js +165 -0
  311. package/dist/server/index.js.map +1 -0
  312. package/dist/server/instant.js +51 -0
  313. package/dist/server/instant.js.map +1 -0
  314. package/dist/server/layout-group.js +27 -0
  315. package/dist/server/layout-group.js.map +1 -0
  316. package/dist/server/layout-member.js +362 -0
  317. package/dist/server/layout-member.js.map +1 -0
  318. package/dist/server/layout-projection.js +19 -0
  319. package/dist/server/layout-projection.js.map +1 -0
  320. package/dist/server/layout.js +90 -0
  321. package/dist/server/layout.js.map +1 -0
  322. package/dist/server/live-style.js +313 -0
  323. package/dist/server/live-style.js.map +1 -0
  324. package/dist/server/live-value.js +252 -0
  325. package/dist/server/live-value.js.map +1 -0
  326. package/dist/server/motion-props.js +172 -0
  327. package/dist/server/motion-props.js.map +1 -0
  328. package/dist/server/owner-scope.js +29 -0
  329. package/dist/server/owner-scope.js.map +1 -0
  330. package/dist/server/page-point.js +92 -0
  331. package/dist/server/page-point.js.map +1 -0
  332. package/dist/server/presence-controller.js +1324 -0
  333. package/dist/server/presence-controller.js.map +1 -0
  334. package/dist/server/presence-record.js +27 -0
  335. package/dist/server/presence-record.js.map +1 -0
  336. package/dist/server/presence.js +207 -0
  337. package/dist/server/presence.js.map +1 -0
  338. package/dist/server/press-sensor.js +30 -0
  339. package/dist/server/press-sensor.js.map +1 -0
  340. package/dist/server/press.js +24 -0
  341. package/dist/server/press.js.map +1 -0
  342. package/dist/server/provider.js +439 -0
  343. package/dist/server/provider.js.map +1 -0
  344. package/dist/server/reactivity.js +9 -0
  345. package/dist/server/reactivity.js.map +1 -0
  346. package/dist/server/reorder-input.js +46 -0
  347. package/dist/server/reorder-input.js.map +1 -0
  348. package/dist/server/reorder.js +543 -0
  349. package/dist/server/reorder.js.map +1 -0
  350. package/dist/server/retarget-legs.js +1019 -0
  351. package/dist/server/retarget-legs.js.map +1 -0
  352. package/dist/server/runtime.js +249 -0
  353. package/dist/server/runtime.js.map +1 -0
  354. package/dist/server/sensors.js +172 -0
  355. package/dist/server/sensors.js.map +1 -0
  356. package/dist/server/server-interpolators.js +20 -0
  357. package/dist/server/server-interpolators.js.map +1 -0
  358. package/dist/server/server.js +20 -0
  359. package/dist/server/server.js.map +1 -0
  360. package/dist/server/solid-reactivity.js +26 -0
  361. package/dist/server/solid-reactivity.js.map +1 -0
  362. package/dist/server/spine.js +2939 -0
  363. package/dist/server/spine.js.map +1 -0
  364. package/dist/server/stagger.js +13 -0
  365. package/dist/server/stagger.js.map +1 -0
  366. package/dist/server/unstable/v2/bridge.js +76 -0
  367. package/dist/server/unstable/v2/bridge.js.map +1 -0
  368. package/dist/server/unstable/v2/complete.js +29 -0
  369. package/dist/server/unstable/v2/complete.js.map +1 -0
  370. package/dist/server/unstable/v2/config-view.js +111 -0
  371. package/dist/server/unstable/v2/config-view.js.map +1 -0
  372. package/dist/server/unstable/v2/create-animate.js +102 -0
  373. package/dist/server/unstable/v2/create-animate.js.map +1 -0
  374. package/dist/server/unstable/v2/cycle.js +30 -0
  375. package/dist/server/unstable/v2/cycle.js.map +1 -0
  376. package/dist/server/unstable/v2/drag-sensor.js +34 -0
  377. package/dist/server/unstable/v2/drag-sensor.js.map +1 -0
  378. package/dist/server/unstable/v2/element.js +402 -0
  379. package/dist/server/unstable/v2/element.js.map +1 -0
  380. package/dist/server/unstable/v2/feature-section.js +27 -0
  381. package/dist/server/unstable/v2/feature-section.js.map +1 -0
  382. package/dist/server/unstable/v2/focus-sensor.js +23 -0
  383. package/dist/server/unstable/v2/focus-sensor.js.map +1 -0
  384. package/dist/server/unstable/v2/hover-sensor.js +28 -0
  385. package/dist/server/unstable/v2/hover-sensor.js.map +1 -0
  386. package/dist/server/unstable/v2/index.js +114 -0
  387. package/dist/server/unstable/v2/index.js.map +1 -0
  388. package/dist/server/unstable/v2/layout-projection.js +18 -0
  389. package/dist/server/unstable/v2/layout-projection.js.map +1 -0
  390. package/dist/server/unstable/v2/layout.js +88 -0
  391. package/dist/server/unstable/v2/layout.js.map +1 -0
  392. package/dist/server/unstable/v2/lifecycle.js +455 -0
  393. package/dist/server/unstable/v2/lifecycle.js.map +1 -0
  394. package/dist/server/unstable/v2/live-value.js +264 -0
  395. package/dist/server/unstable/v2/live-value.js.map +1 -0
  396. package/dist/server/unstable/v2/presence-handle.js +146 -0
  397. package/dist/server/unstable/v2/presence-handle.js.map +1 -0
  398. package/dist/server/unstable/v2/presence-hooks.js +142 -0
  399. package/dist/server/unstable/v2/presence-hooks.js.map +1 -0
  400. package/dist/server/unstable/v2/presence.js +142 -0
  401. package/dist/server/unstable/v2/presence.js.map +1 -0
  402. package/dist/server/unstable/v2/press-sensor.js +29 -0
  403. package/dist/server/unstable/v2/press-sensor.js.map +1 -0
  404. package/dist/server/unstable/v2/provider.js +475 -0
  405. package/dist/server/unstable/v2/provider.js.map +1 -0
  406. package/dist/server/unstable/v2/reorder.js +733 -0
  407. package/dist/server/unstable/v2/reorder.js.map +1 -0
  408. package/dist/server/unstable/v2/sensors.js +138 -0
  409. package/dist/server/unstable/v2/sensors.js.map +1 -0
  410. package/dist/server/unstable/v2/solid-reactivity.js +82 -0
  411. package/dist/server/unstable/v2/solid-reactivity.js.map +1 -0
  412. package/dist/server/unstable/v2/variant-node.js +395 -0
  413. package/dist/server/unstable/v2/variant-node.js.map +1 -0
  414. package/dist/server/unstable/v2/w.js +23 -0
  415. package/dist/server/unstable/v2/w.js.map +1 -0
  416. package/dist/server/unstable/v2/waiters.js +185 -0
  417. package/dist/server/unstable/v2/waiters.js.map +1 -0
  418. package/dist/server/unstable/v2/ward.js +1653 -0
  419. package/dist/server/unstable/v2/ward.js.map +1 -0
  420. package/dist/server/unstable/v2/wardic-config.js +49 -0
  421. package/dist/server/unstable/v2/wardic-config.js.map +1 -0
  422. package/dist/server/unstable/v2/wardic.js +16 -0
  423. package/dist/server/unstable/v2/wardic.js.map +1 -0
  424. package/dist/server/variant-node.js +308 -0
  425. package/dist/server/variant-node.js.map +1 -0
  426. package/dist/server/variant-target.js +224 -0
  427. package/dist/server/variant-target.js.map +1 -0
  428. package/dist/server/variant-tree.js +394 -0
  429. package/dist/server/variant-tree.js.map +1 -0
  430. package/dist/server/variants.js +43 -0
  431. package/dist/server/variants.js.map +1 -0
  432. package/dist/server/w.js +25 -0
  433. package/dist/server/w.js.map +1 -0
  434. package/dist/server/ward-keys.js +2 -0
  435. package/dist/server/ward-keys.js.map +1 -0
  436. package/dist/server/wardic-component.js +74 -0
  437. package/dist/server/wardic-component.js.map +1 -0
  438. package/dist/server/wardic-config-value.js +91 -0
  439. package/dist/server/wardic-config-value.js.map +1 -0
  440. package/dist/server/wardic-config.js +42 -0
  441. package/dist/server/wardic-config.js.map +1 -0
  442. package/dist/server/wardic.js +31 -0
  443. package/dist/server/wardic.js.map +1 -0
  444. package/dist/solid/animation-controls.d.ts +104 -0
  445. package/dist/solid/animation-controls.d.ts.map +1 -0
  446. package/dist/solid/animation-controls.js +129 -0
  447. package/dist/solid/animation-controls.js.map +1 -0
  448. package/dist/solid/animation-frame.d.ts +11 -0
  449. package/dist/solid/animation-frame.d.ts.map +1 -0
  450. package/dist/solid/animation-frame.js +31 -0
  451. package/dist/solid/animation-frame.js.map +1 -0
  452. package/dist/solid/appear.d.ts +205 -0
  453. package/dist/solid/appear.d.ts.map +1 -0
  454. package/dist/solid/appear.js +519 -0
  455. package/dist/solid/appear.js.map +1 -0
  456. package/dist/solid/arc.d.ts +25 -0
  457. package/dist/solid/arc.d.ts.map +1 -0
  458. package/dist/solid/arc.js +21 -0
  459. package/dist/solid/arc.js.map +1 -0
  460. package/dist/solid/bridge.d.ts +53 -0
  461. package/dist/solid/bridge.d.ts.map +1 -0
  462. package/dist/solid/bridge.js +66 -0
  463. package/dist/solid/bridge.js.map +1 -0
  464. package/dist/solid/complete.d.ts +31 -0
  465. package/dist/solid/complete.d.ts.map +1 -0
  466. package/dist/solid/complete.js +27 -0
  467. package/dist/solid/complete.js.map +1 -0
  468. package/dist/solid/config.d.ts +693 -0
  469. package/dist/solid/config.d.ts.map +1 -0
  470. package/dist/solid/config.js +2 -0
  471. package/dist/solid/config.js.map +1 -0
  472. package/dist/solid/create-animate.d.ts +17 -0
  473. package/dist/solid/create-animate.d.ts.map +1 -0
  474. package/dist/solid/create-animate.js +42 -0
  475. package/dist/solid/create-animate.js.map +1 -0
  476. package/dist/solid/create-ward.d.ts +278 -0
  477. package/dist/solid/create-ward.d.ts.map +1 -0
  478. package/dist/solid/create-ward.jsx +874 -0
  479. package/dist/solid/create-ward.jsx.map +1 -0
  480. package/dist/solid/cycle-index.d.ts +7 -0
  481. package/dist/solid/cycle-index.d.ts.map +1 -0
  482. package/dist/solid/cycle-index.js +17 -0
  483. package/dist/solid/cycle-index.js.map +1 -0
  484. package/dist/solid/cycle.d.ts +21 -0
  485. package/dist/solid/cycle.d.ts.map +1 -0
  486. package/dist/solid/cycle.js +31 -0
  487. package/dist/solid/cycle.js.map +1 -0
  488. package/dist/solid/directive.d.ts +21 -0
  489. package/dist/solid/directive.d.ts.map +1 -0
  490. package/dist/solid/directive.js +76 -0
  491. package/dist/solid/directive.js.map +1 -0
  492. package/dist/solid/drag-constraints.d.ts +46 -0
  493. package/dist/solid/drag-constraints.d.ts.map +1 -0
  494. package/dist/solid/drag-constraints.js +49 -0
  495. package/dist/solid/drag-constraints.js.map +1 -0
  496. package/dist/solid/drag-controls.d.ts +50 -0
  497. package/dist/solid/drag-controls.d.ts.map +1 -0
  498. package/dist/solid/drag-controls.js +51 -0
  499. package/dist/solid/drag-controls.js.map +1 -0
  500. package/dist/solid/drag-samples.d.ts +34 -0
  501. package/dist/solid/drag-samples.d.ts.map +1 -0
  502. package/dist/solid/drag-samples.js +28 -0
  503. package/dist/solid/drag-samples.js.map +1 -0
  504. package/dist/solid/drag-sensor.d.ts +23 -0
  505. package/dist/solid/drag-sensor.d.ts.map +1 -0
  506. package/dist/solid/drag-sensor.js +33 -0
  507. package/dist/solid/drag-sensor.js.map +1 -0
  508. package/dist/solid/drag-track.d.ts +227 -0
  509. package/dist/solid/drag-track.d.ts.map +1 -0
  510. package/dist/solid/drag-track.js +631 -0
  511. package/dist/solid/drag-track.js.map +1 -0
  512. package/dist/solid/drag-transition.d.ts +20 -0
  513. package/dist/solid/drag-transition.d.ts.map +1 -0
  514. package/dist/solid/drag-transition.js +31 -0
  515. package/dist/solid/drag-transition.js.map +1 -0
  516. package/dist/solid/drag.d.ts +23 -0
  517. package/dist/solid/drag.d.ts.map +1 -0
  518. package/dist/solid/drag.js +44 -0
  519. package/dist/solid/drag.js.map +1 -0
  520. package/dist/solid/element-style.d.ts +60 -0
  521. package/dist/solid/element-style.d.ts.map +1 -0
  522. package/dist/solid/element-style.js +50 -0
  523. package/dist/solid/element-style.js.map +1 -0
  524. package/dist/solid/element.d.ts +73 -0
  525. package/dist/solid/element.d.ts.map +1 -0
  526. package/dist/solid/element.jsx +326 -0
  527. package/dist/solid/element.jsx.map +1 -0
  528. package/dist/solid/feature-section.d.ts +18 -0
  529. package/dist/solid/feature-section.d.ts.map +1 -0
  530. package/dist/solid/feature-section.js +13 -0
  531. package/dist/solid/feature-section.js.map +1 -0
  532. package/dist/solid/feature.d.ts +114 -0
  533. package/dist/solid/feature.d.ts.map +1 -0
  534. package/dist/solid/feature.js +248 -0
  535. package/dist/solid/feature.js.map +1 -0
  536. package/dist/solid/features/all.d.ts +10 -0
  537. package/dist/solid/features/all.d.ts.map +1 -0
  538. package/dist/solid/features/all.js +10 -0
  539. package/dist/solid/features/all.js.map +1 -0
  540. package/dist/solid/features/colors.d.ts +12 -0
  541. package/dist/solid/features/colors.d.ts.map +1 -0
  542. package/dist/solid/features/colors.js +34 -0
  543. package/dist/solid/features/colors.js.map +1 -0
  544. package/dist/solid/features/dom-animation.d.ts +11 -0
  545. package/dist/solid/features/dom-animation.d.ts.map +1 -0
  546. package/dist/solid/features/dom-animation.js +7 -0
  547. package/dist/solid/features/dom-animation.js.map +1 -0
  548. package/dist/solid/features/dom-max.d.ts +10 -0
  549. package/dist/solid/features/dom-max.d.ts.map +1 -0
  550. package/dist/solid/features/dom-max.js +4 -0
  551. package/dist/solid/features/dom-max.js.map +1 -0
  552. package/dist/solid/features/drag.d.ts +5 -0
  553. package/dist/solid/features/drag.d.ts.map +1 -0
  554. package/dist/solid/features/drag.js +28 -0
  555. package/dist/solid/features/drag.js.map +1 -0
  556. package/dist/solid/features/focus.d.ts +5 -0
  557. package/dist/solid/features/focus.d.ts.map +1 -0
  558. package/dist/solid/features/focus.js +16 -0
  559. package/dist/solid/features/focus.js.map +1 -0
  560. package/dist/solid/features/hover.d.ts +5 -0
  561. package/dist/solid/features/hover.d.ts.map +1 -0
  562. package/dist/solid/features/hover.js +16 -0
  563. package/dist/solid/features/hover.js.map +1 -0
  564. package/dist/solid/features/in-view.d.ts +5 -0
  565. package/dist/solid/features/in-view.d.ts.map +1 -0
  566. package/dist/solid/features/in-view.js +16 -0
  567. package/dist/solid/features/in-view.js.map +1 -0
  568. package/dist/solid/features/input.d.ts +26 -0
  569. package/dist/solid/features/input.d.ts.map +1 -0
  570. package/dist/solid/features/input.js +31 -0
  571. package/dist/solid/features/input.js.map +1 -0
  572. package/dist/solid/features/keys.d.ts +70 -0
  573. package/dist/solid/features/keys.d.ts.map +1 -0
  574. package/dist/solid/features/keys.js +26 -0
  575. package/dist/solid/features/keys.js.map +1 -0
  576. package/dist/solid/features/layout.d.ts +32 -0
  577. package/dist/solid/features/layout.d.ts.map +1 -0
  578. package/dist/solid/features/layout.js +34 -0
  579. package/dist/solid/features/layout.js.map +1 -0
  580. package/dist/solid/features/pan.d.ts +5 -0
  581. package/dist/solid/features/pan.d.ts.map +1 -0
  582. package/dist/solid/features/pan.js +16 -0
  583. package/dist/solid/features/pan.js.map +1 -0
  584. package/dist/solid/features/press.d.ts +11 -0
  585. package/dist/solid/features/press.d.ts.map +1 -0
  586. package/dist/solid/features/press.js +10 -0
  587. package/dist/solid/features/press.js.map +1 -0
  588. package/dist/solid/focus-sensor.d.ts +19 -0
  589. package/dist/solid/focus-sensor.d.ts.map +1 -0
  590. package/dist/solid/focus-sensor.js +23 -0
  591. package/dist/solid/focus-sensor.js.map +1 -0
  592. package/dist/solid/frame-time.d.ts +21 -0
  593. package/dist/solid/frame-time.d.ts.map +1 -0
  594. package/dist/solid/frame-time.js +41 -0
  595. package/dist/solid/frame-time.js.map +1 -0
  596. package/dist/solid/gesture-callbacks.d.ts +53 -0
  597. package/dist/solid/gesture-callbacks.d.ts.map +1 -0
  598. package/dist/solid/gesture-callbacks.js +184 -0
  599. package/dist/solid/gesture-callbacks.js.map +1 -0
  600. package/dist/solid/gesture-features.d.ts +28 -0
  601. package/dist/solid/gesture-features.d.ts.map +1 -0
  602. package/dist/solid/gesture-features.js +29 -0
  603. package/dist/solid/gesture-features.js.map +1 -0
  604. package/dist/solid/gesture-info.d.ts +59 -0
  605. package/dist/solid/gesture-info.d.ts.map +1 -0
  606. package/dist/solid/gesture-info.js +23 -0
  607. package/dist/solid/gesture-info.js.map +1 -0
  608. package/dist/solid/hover-sensor.d.ts +19 -0
  609. package/dist/solid/hover-sensor.d.ts.map +1 -0
  610. package/dist/solid/hover-sensor.js +23 -0
  611. package/dist/solid/hover-sensor.js.map +1 -0
  612. package/dist/solid/imperative.d.ts +195 -0
  613. package/dist/solid/imperative.d.ts.map +1 -0
  614. package/dist/solid/imperative.js +536 -0
  615. package/dist/solid/imperative.js.map +1 -0
  616. package/dist/solid/index.d.ts +180 -0
  617. package/dist/solid/index.d.ts.map +1 -0
  618. package/dist/solid/index.js +165 -0
  619. package/dist/solid/index.js.map +1 -0
  620. package/dist/solid/instant.d.ts +44 -0
  621. package/dist/solid/instant.d.ts.map +1 -0
  622. package/dist/solid/instant.js +49 -0
  623. package/dist/solid/instant.js.map +1 -0
  624. package/dist/solid/layout-group.d.ts +14 -0
  625. package/dist/solid/layout-group.d.ts.map +1 -0
  626. package/dist/solid/layout-group.js +27 -0
  627. package/dist/solid/layout-group.js.map +1 -0
  628. package/dist/solid/layout-member.d.ts +117 -0
  629. package/dist/solid/layout-member.d.ts.map +1 -0
  630. package/dist/solid/layout-member.js +164 -0
  631. package/dist/solid/layout-member.js.map +1 -0
  632. package/dist/solid/layout-projection.d.ts +22 -0
  633. package/dist/solid/layout-projection.d.ts.map +1 -0
  634. package/dist/solid/layout-projection.js +19 -0
  635. package/dist/solid/layout-projection.js.map +1 -0
  636. package/dist/solid/layout.d.ts +76 -0
  637. package/dist/solid/layout.d.ts.map +1 -0
  638. package/dist/solid/layout.jsx +80 -0
  639. package/dist/solid/layout.jsx.map +1 -0
  640. package/dist/solid/live-style.d.ts +147 -0
  641. package/dist/solid/live-style.d.ts.map +1 -0
  642. package/dist/solid/live-style.js +304 -0
  643. package/dist/solid/live-style.js.map +1 -0
  644. package/dist/solid/live-value.d.ts +144 -0
  645. package/dist/solid/live-value.d.ts.map +1 -0
  646. package/dist/solid/live-value.js +223 -0
  647. package/dist/solid/live-value.js.map +1 -0
  648. package/dist/solid/motion-props.d.ts +75 -0
  649. package/dist/solid/motion-props.d.ts.map +1 -0
  650. package/dist/solid/motion-props.js +314 -0
  651. package/dist/solid/motion-props.js.map +1 -0
  652. package/dist/solid/owner-scope.d.ts +16 -0
  653. package/dist/solid/owner-scope.d.ts.map +1 -0
  654. package/dist/solid/owner-scope.js +31 -0
  655. package/dist/solid/owner-scope.js.map +1 -0
  656. package/dist/solid/page-point.d.ts +35 -0
  657. package/dist/solid/page-point.d.ts.map +1 -0
  658. package/dist/solid/page-point.js +87 -0
  659. package/dist/solid/page-point.js.map +1 -0
  660. package/dist/solid/presence-controller.d.ts +122 -0
  661. package/dist/solid/presence-controller.d.ts.map +1 -0
  662. package/dist/solid/presence-controller.js +1207 -0
  663. package/dist/solid/presence-controller.js.map +1 -0
  664. package/dist/solid/presence-record.d.ts +167 -0
  665. package/dist/solid/presence-record.d.ts.map +1 -0
  666. package/dist/solid/presence-record.js +26 -0
  667. package/dist/solid/presence-record.js.map +1 -0
  668. package/dist/solid/presence.d.ts +95 -0
  669. package/dist/solid/presence.d.ts.map +1 -0
  670. package/dist/solid/presence.jsx +195 -0
  671. package/dist/solid/presence.jsx.map +1 -0
  672. package/dist/solid/press-sensor.d.ts +20 -0
  673. package/dist/solid/press-sensor.d.ts.map +1 -0
  674. package/dist/solid/press-sensor.js +24 -0
  675. package/dist/solid/press-sensor.js.map +1 -0
  676. package/dist/solid/press.d.ts +24 -0
  677. package/dist/solid/press.d.ts.map +1 -0
  678. package/dist/solid/press.js +19 -0
  679. package/dist/solid/press.js.map +1 -0
  680. package/dist/solid/provider.d.ts +263 -0
  681. package/dist/solid/provider.d.ts.map +1 -0
  682. package/dist/solid/provider.jsx +411 -0
  683. package/dist/solid/provider.jsx.map +1 -0
  684. package/dist/solid/reactivity.d.ts +27 -0
  685. package/dist/solid/reactivity.d.ts.map +1 -0
  686. package/dist/solid/reactivity.js +9 -0
  687. package/dist/solid/reactivity.js.map +1 -0
  688. package/dist/solid/reorder-input.d.ts +22 -0
  689. package/dist/solid/reorder-input.d.ts.map +1 -0
  690. package/dist/solid/reorder-input.js +45 -0
  691. package/dist/solid/reorder-input.js.map +1 -0
  692. package/dist/solid/reorder.d.ts +241 -0
  693. package/dist/solid/reorder.d.ts.map +1 -0
  694. package/dist/solid/reorder.jsx +427 -0
  695. package/dist/solid/reorder.jsx.map +1 -0
  696. package/dist/solid/retarget-legs.d.ts +189 -0
  697. package/dist/solid/retarget-legs.d.ts.map +1 -0
  698. package/dist/solid/retarget-legs.js +825 -0
  699. package/dist/solid/retarget-legs.js.map +1 -0
  700. package/dist/solid/runtime.d.ts +179 -0
  701. package/dist/solid/runtime.d.ts.map +1 -0
  702. package/dist/solid/runtime.js +237 -0
  703. package/dist/solid/runtime.js.map +1 -0
  704. package/dist/solid/sensors.d.ts +95 -0
  705. package/dist/solid/sensors.d.ts.map +1 -0
  706. package/dist/solid/sensors.js +154 -0
  707. package/dist/solid/sensors.js.map +1 -0
  708. package/dist/solid/server-interpolators.d.ts +13 -0
  709. package/dist/solid/server-interpolators.d.ts.map +1 -0
  710. package/dist/solid/server-interpolators.js +20 -0
  711. package/dist/solid/server-interpolators.js.map +1 -0
  712. package/dist/solid/server.d.ts +9 -0
  713. package/dist/solid/server.d.ts.map +1 -0
  714. package/dist/solid/server.js +20 -0
  715. package/dist/solid/server.js.map +1 -0
  716. package/dist/solid/solid-reactivity.d.ts +3 -0
  717. package/dist/solid/solid-reactivity.d.ts.map +1 -0
  718. package/dist/solid/solid-reactivity.js +19 -0
  719. package/dist/solid/solid-reactivity.js.map +1 -0
  720. package/dist/solid/spine.d.ts +597 -0
  721. package/dist/solid/spine.d.ts.map +1 -0
  722. package/dist/solid/spine.js +2761 -0
  723. package/dist/solid/spine.js.map +1 -0
  724. package/dist/solid/stagger.d.ts +29 -0
  725. package/dist/solid/stagger.d.ts.map +1 -0
  726. package/dist/solid/stagger.js +13 -0
  727. package/dist/solid/stagger.js.map +1 -0
  728. package/dist/solid/unstable/v2/bridge.d.ts +33 -0
  729. package/dist/solid/unstable/v2/bridge.d.ts.map +1 -0
  730. package/dist/solid/unstable/v2/bridge.js +76 -0
  731. package/dist/solid/unstable/v2/bridge.js.map +1 -0
  732. package/dist/solid/unstable/v2/complete.d.ts +21 -0
  733. package/dist/solid/unstable/v2/complete.d.ts.map +1 -0
  734. package/dist/solid/unstable/v2/complete.js +27 -0
  735. package/dist/solid/unstable/v2/complete.js.map +1 -0
  736. package/dist/solid/unstable/v2/config-view.d.ts +49 -0
  737. package/dist/solid/unstable/v2/config-view.d.ts.map +1 -0
  738. package/dist/solid/unstable/v2/config-view.js +114 -0
  739. package/dist/solid/unstable/v2/config-view.js.map +1 -0
  740. package/dist/solid/unstable/v2/create-animate.d.ts +31 -0
  741. package/dist/solid/unstable/v2/create-animate.d.ts.map +1 -0
  742. package/dist/solid/unstable/v2/create-animate.js +102 -0
  743. package/dist/solid/unstable/v2/create-animate.js.map +1 -0
  744. package/dist/solid/unstable/v2/cycle.d.ts +20 -0
  745. package/dist/solid/unstable/v2/cycle.d.ts.map +1 -0
  746. package/dist/solid/unstable/v2/cycle.js +30 -0
  747. package/dist/solid/unstable/v2/cycle.js.map +1 -0
  748. package/dist/solid/unstable/v2/drag-sensor.d.ts +23 -0
  749. package/dist/solid/unstable/v2/drag-sensor.d.ts.map +1 -0
  750. package/dist/solid/unstable/v2/drag-sensor.js +32 -0
  751. package/dist/solid/unstable/v2/drag-sensor.js.map +1 -0
  752. package/dist/solid/unstable/v2/element.d.ts +178 -0
  753. package/dist/solid/unstable/v2/element.d.ts.map +1 -0
  754. package/dist/solid/unstable/v2/element.jsx +325 -0
  755. package/dist/solid/unstable/v2/element.jsx.map +1 -0
  756. package/dist/solid/unstable/v2/feature-section.d.ts +12 -0
  757. package/dist/solid/unstable/v2/feature-section.d.ts.map +1 -0
  758. package/dist/solid/unstable/v2/feature-section.js +23 -0
  759. package/dist/solid/unstable/v2/feature-section.js.map +1 -0
  760. package/dist/solid/unstable/v2/focus-sensor.d.ts +13 -0
  761. package/dist/solid/unstable/v2/focus-sensor.d.ts.map +1 -0
  762. package/dist/solid/unstable/v2/focus-sensor.js +23 -0
  763. package/dist/solid/unstable/v2/focus-sensor.js.map +1 -0
  764. package/dist/solid/unstable/v2/hover-sensor.d.ts +12 -0
  765. package/dist/solid/unstable/v2/hover-sensor.d.ts.map +1 -0
  766. package/dist/solid/unstable/v2/hover-sensor.js +22 -0
  767. package/dist/solid/unstable/v2/hover-sensor.js.map +1 -0
  768. package/dist/solid/unstable/v2/index.d.ts +131 -0
  769. package/dist/solid/unstable/v2/index.d.ts.map +1 -0
  770. package/dist/solid/unstable/v2/index.js +114 -0
  771. package/dist/solid/unstable/v2/index.js.map +1 -0
  772. package/dist/solid/unstable/v2/layout-projection.d.ts +21 -0
  773. package/dist/solid/unstable/v2/layout-projection.d.ts.map +1 -0
  774. package/dist/solid/unstable/v2/layout-projection.js +18 -0
  775. package/dist/solid/unstable/v2/layout-projection.js.map +1 -0
  776. package/dist/solid/unstable/v2/layout.d.ts +47 -0
  777. package/dist/solid/unstable/v2/layout.d.ts.map +1 -0
  778. package/dist/solid/unstable/v2/layout.jsx +62 -0
  779. package/dist/solid/unstable/v2/layout.jsx.map +1 -0
  780. package/dist/solid/unstable/v2/lifecycle.d.ts +267 -0
  781. package/dist/solid/unstable/v2/lifecycle.d.ts.map +1 -0
  782. package/dist/solid/unstable/v2/lifecycle.js +457 -0
  783. package/dist/solid/unstable/v2/lifecycle.js.map +1 -0
  784. package/dist/solid/unstable/v2/live-value.d.ts +146 -0
  785. package/dist/solid/unstable/v2/live-value.d.ts.map +1 -0
  786. package/dist/solid/unstable/v2/live-value.js +235 -0
  787. package/dist/solid/unstable/v2/live-value.js.map +1 -0
  788. package/dist/solid/unstable/v2/presence-handle.d.ts +55 -0
  789. package/dist/solid/unstable/v2/presence-handle.d.ts.map +1 -0
  790. package/dist/solid/unstable/v2/presence-handle.js +119 -0
  791. package/dist/solid/unstable/v2/presence-handle.js.map +1 -0
  792. package/dist/solid/unstable/v2/presence-hooks.d.ts +51 -0
  793. package/dist/solid/unstable/v2/presence-hooks.d.ts.map +1 -0
  794. package/dist/solid/unstable/v2/presence-hooks.js +115 -0
  795. package/dist/solid/unstable/v2/presence-hooks.js.map +1 -0
  796. package/dist/solid/unstable/v2/presence.d.ts +89 -0
  797. package/dist/solid/unstable/v2/presence.d.ts.map +1 -0
  798. package/dist/solid/unstable/v2/presence.jsx +107 -0
  799. package/dist/solid/unstable/v2/presence.jsx.map +1 -0
  800. package/dist/solid/unstable/v2/press-sensor.d.ts +13 -0
  801. package/dist/solid/unstable/v2/press-sensor.d.ts.map +1 -0
  802. package/dist/solid/unstable/v2/press-sensor.js +23 -0
  803. package/dist/solid/unstable/v2/press-sensor.js.map +1 -0
  804. package/dist/solid/unstable/v2/provider.d.ts +239 -0
  805. package/dist/solid/unstable/v2/provider.d.ts.map +1 -0
  806. package/dist/solid/unstable/v2/provider.jsx +423 -0
  807. package/dist/solid/unstable/v2/provider.jsx.map +1 -0
  808. package/dist/solid/unstable/v2/reorder.d.ts +292 -0
  809. package/dist/solid/unstable/v2/reorder.d.ts.map +1 -0
  810. package/dist/solid/unstable/v2/reorder.jsx +525 -0
  811. package/dist/solid/unstable/v2/reorder.jsx.map +1 -0
  812. package/dist/solid/unstable/v2/sensors.d.ts +91 -0
  813. package/dist/solid/unstable/v2/sensors.d.ts.map +1 -0
  814. package/dist/solid/unstable/v2/sensors.js +124 -0
  815. package/dist/solid/unstable/v2/sensors.js.map +1 -0
  816. package/dist/solid/unstable/v2/solid-reactivity.d.ts +61 -0
  817. package/dist/solid/unstable/v2/solid-reactivity.d.ts.map +1 -0
  818. package/dist/solid/unstable/v2/solid-reactivity.js +62 -0
  819. package/dist/solid/unstable/v2/solid-reactivity.js.map +1 -0
  820. package/dist/solid/unstable/v2/variant-node.d.ts +51 -0
  821. package/dist/solid/unstable/v2/variant-node.d.ts.map +1 -0
  822. package/dist/solid/unstable/v2/variant-node.js +336 -0
  823. package/dist/solid/unstable/v2/variant-node.js.map +1 -0
  824. package/dist/solid/unstable/v2/w.d.ts +42 -0
  825. package/dist/solid/unstable/v2/w.d.ts.map +1 -0
  826. package/dist/solid/unstable/v2/w.jsx +22 -0
  827. package/dist/solid/unstable/v2/w.jsx.map +1 -0
  828. package/dist/solid/unstable/v2/waiters.d.ts +72 -0
  829. package/dist/solid/unstable/v2/waiters.d.ts.map +1 -0
  830. package/dist/solid/unstable/v2/waiters.js +175 -0
  831. package/dist/solid/unstable/v2/waiters.js.map +1 -0
  832. package/dist/solid/unstable/v2/ward.d.ts +393 -0
  833. package/dist/solid/unstable/v2/ward.d.ts.map +1 -0
  834. package/dist/solid/unstable/v2/ward.jsx +1475 -0
  835. package/dist/solid/unstable/v2/ward.jsx.map +1 -0
  836. package/dist/solid/unstable/v2/wardic-config.d.ts +68 -0
  837. package/dist/solid/unstable/v2/wardic-config.d.ts.map +1 -0
  838. package/dist/solid/unstable/v2/wardic-config.jsx +28 -0
  839. package/dist/solid/unstable/v2/wardic-config.jsx.map +1 -0
  840. package/dist/solid/unstable/v2/wardic.d.ts +28 -0
  841. package/dist/solid/unstable/v2/wardic.d.ts.map +1 -0
  842. package/dist/solid/unstable/v2/wardic.jsx +16 -0
  843. package/dist/solid/unstable/v2/wardic.jsx.map +1 -0
  844. package/dist/solid/variant-node.d.ts +32 -0
  845. package/dist/solid/variant-node.d.ts.map +1 -0
  846. package/dist/solid/variant-node.js +257 -0
  847. package/dist/solid/variant-node.js.map +1 -0
  848. package/dist/solid/variant-target.d.ts +102 -0
  849. package/dist/solid/variant-target.d.ts.map +1 -0
  850. package/dist/solid/variant-target.js +180 -0
  851. package/dist/solid/variant-target.js.map +1 -0
  852. package/dist/solid/variant-tree.d.ts +349 -0
  853. package/dist/solid/variant-tree.d.ts.map +1 -0
  854. package/dist/solid/variant-tree.js +358 -0
  855. package/dist/solid/variant-tree.js.map +1 -0
  856. package/dist/solid/variants.d.ts +21 -0
  857. package/dist/solid/variants.d.ts.map +1 -0
  858. package/dist/solid/variants.js +43 -0
  859. package/dist/solid/variants.js.map +1 -0
  860. package/dist/solid/w.d.ts +42 -0
  861. package/dist/solid/w.d.ts.map +1 -0
  862. package/dist/solid/w.jsx +23 -0
  863. package/dist/solid/w.jsx.map +1 -0
  864. package/dist/solid/ward-keys.d.ts +236 -0
  865. package/dist/solid/ward-keys.d.ts.map +1 -0
  866. package/dist/solid/ward-keys.js +2 -0
  867. package/dist/solid/ward-keys.js.map +1 -0
  868. package/dist/solid/wardic-component.d.ts +50 -0
  869. package/dist/solid/wardic-component.d.ts.map +1 -0
  870. package/dist/solid/wardic-component.js +74 -0
  871. package/dist/solid/wardic-component.js.map +1 -0
  872. package/dist/solid/wardic-config-value.d.ts +87 -0
  873. package/dist/solid/wardic-config-value.d.ts.map +1 -0
  874. package/dist/solid/wardic-config-value.js +106 -0
  875. package/dist/solid/wardic-config-value.js.map +1 -0
  876. package/dist/solid/wardic-config.d.ts +69 -0
  877. package/dist/solid/wardic-config.d.ts.map +1 -0
  878. package/dist/solid/wardic-config.jsx +30 -0
  879. package/dist/solid/wardic-config.jsx.map +1 -0
  880. package/dist/solid/wardic.d.ts +45 -0
  881. package/dist/solid/wardic.d.ts.map +1 -0
  882. package/dist/solid/wardic.jsx +31 -0
  883. package/dist/solid/wardic.jsx.map +1 -0
  884. package/package.json +98 -4
  885. package/src/animation-controls.ts +204 -0
  886. package/src/animation-frame.ts +32 -0
  887. package/src/appear.ts +804 -0
  888. package/src/arc.ts +34 -0
  889. package/src/bridge.ts +98 -0
  890. package/src/complete.ts +45 -0
  891. package/src/config.ts +805 -0
  892. package/src/create-animate.ts +41 -0
  893. package/src/create-ward.tsx +1271 -0
  894. package/src/cycle-index.ts +18 -0
  895. package/src/cycle.ts +34 -0
  896. package/src/directive.ts +87 -0
  897. package/src/drag-constraints.ts +103 -0
  898. package/src/drag-controls.ts +94 -0
  899. package/src/drag-samples.ts +54 -0
  900. package/src/drag-sensor.ts +46 -0
  901. package/src/drag-track.ts +937 -0
  902. package/src/drag-transition.ts +43 -0
  903. package/src/drag.ts +58 -0
  904. package/src/element-style.ts +112 -0
  905. package/src/element.tsx +400 -0
  906. package/src/feature-section.ts +33 -0
  907. package/src/feature.ts +342 -0
  908. package/src/features/all.ts +18 -0
  909. package/src/features/colors.ts +36 -0
  910. package/src/features/dom-animation.ts +15 -0
  911. package/src/features/dom-max.ts +11 -0
  912. package/src/features/drag.ts +30 -0
  913. package/src/features/focus.ts +17 -0
  914. package/src/features/hover.ts +17 -0
  915. package/src/features/in-view.ts +17 -0
  916. package/src/features/input.ts +42 -0
  917. package/src/features/keys.ts +89 -0
  918. package/src/features/layout.ts +54 -0
  919. package/src/features/pan.ts +17 -0
  920. package/src/features/press.ts +17 -0
  921. package/src/focus-sensor.ts +32 -0
  922. package/src/frame-time.ts +45 -0
  923. package/src/gesture-callbacks.ts +212 -0
  924. package/src/gesture-features.ts +35 -0
  925. package/src/gesture-info.ts +81 -0
  926. package/src/hover-sensor.ts +32 -0
  927. package/src/imperative.ts +782 -0
  928. package/src/index.ts +334 -0
  929. package/src/instant.ts +90 -0
  930. package/src/layout-group.ts +32 -0
  931. package/src/layout-member.ts +300 -0
  932. package/src/layout-projection.ts +28 -0
  933. package/src/layout.tsx +127 -0
  934. package/src/live-style.ts +449 -0
  935. package/src/live-value.ts +378 -0
  936. package/src/motion-props.ts +325 -0
  937. package/src/owner-scope.ts +31 -0
  938. package/src/page-point.ts +98 -0
  939. package/src/presence-controller.ts +1483 -0
  940. package/src/presence-record.ts +189 -0
  941. package/src/presence.tsx +269 -0
  942. package/src/press-sensor.ts +33 -0
  943. package/src/press.ts +40 -0
  944. package/src/provider.tsx +526 -0
  945. package/src/reactivity.ts +29 -0
  946. package/src/reorder-input.ts +53 -0
  947. package/src/reorder.tsx +703 -0
  948. package/src/retarget-legs.ts +1048 -0
  949. package/src/runtime.ts +388 -0
  950. package/src/sensors.ts +189 -0
  951. package/src/server-interpolators.ts +33 -0
  952. package/src/server.ts +21 -0
  953. package/src/solid-reactivity.ts +21 -0
  954. package/src/spine.ts +3385 -0
  955. package/src/stagger.ts +31 -0
  956. package/src/unstable/v2/bridge.ts +79 -0
  957. package/src/unstable/v2/complete.ts +47 -0
  958. package/src/unstable/v2/config-view.ts +156 -0
  959. package/src/unstable/v2/create-animate.ts +123 -0
  960. package/src/unstable/v2/cycle.ts +33 -0
  961. package/src/unstable/v2/drag-sensor.ts +44 -0
  962. package/src/unstable/v2/element.tsx +478 -0
  963. package/src/unstable/v2/feature-section.ts +32 -0
  964. package/src/unstable/v2/focus-sensor.ts +31 -0
  965. package/src/unstable/v2/hover-sensor.ts +30 -0
  966. package/src/unstable/v2/index.ts +270 -0
  967. package/src/unstable/v2/layout-projection.ts +27 -0
  968. package/src/unstable/v2/layout.tsx +89 -0
  969. package/src/unstable/v2/lifecycle.ts +612 -0
  970. package/src/unstable/v2/live-value.ts +414 -0
  971. package/src/unstable/v2/presence-handle.ts +159 -0
  972. package/src/unstable/v2/presence-hooks.ts +157 -0
  973. package/src/unstable/v2/presence.tsx +174 -0
  974. package/src/unstable/v2/press-sensor.ts +31 -0
  975. package/src/unstable/v2/provider.tsx +524 -0
  976. package/src/unstable/v2/reorder.tsx +880 -0
  977. package/src/unstable/v2/sensors.ts +169 -0
  978. package/src/unstable/v2/solid-reactivity.ts +69 -0
  979. package/src/unstable/v2/variant-node.ts +446 -0
  980. package/src/unstable/v2/w.tsx +49 -0
  981. package/src/unstable/v2/waiters.ts +212 -0
  982. package/src/unstable/v2/ward.tsx +2068 -0
  983. package/src/unstable/v2/wardic-config.tsx +84 -0
  984. package/src/unstable/v2/wardic.tsx +41 -0
  985. package/src/variant-node.ts +368 -0
  986. package/src/variant-target.ts +234 -0
  987. package/src/variant-tree.ts +638 -0
  988. package/src/variants.ts +47 -0
  989. package/src/w.tsx +59 -0
  990. package/src/ward-keys.ts +343 -0
  991. package/src/wardic-component.ts +96 -0
  992. package/src/wardic-config-value.ts +150 -0
  993. package/src/wardic-config.tsx +78 -0
  994. package/src/wardic.tsx +59 -0
@@ -0,0 +1,782 @@
1
+ /**
2
+ * **Imperative animation** (#433, CONTEXT.md; Motion's `useAnimate`), Solid-free: an **Animation
3
+ * scope**'s `animate`, the elements it animates, and the **Playback controls** it returns. Both
4
+ * bindings' `createAnimate()` build on it.
5
+ *
6
+ * - **A Wardic element** animates through its own spine, registered here while it's mounted: the
7
+ * call takes the keys it animates, which stay where it leaves them until the element's own target
8
+ * for them changes (the spine's `animate`, Motion's latest-wins).
9
+ * - **A plain element** animates through a spine of its own (#433's Q4), with no config, presence or
10
+ * layout node: it starts from the element's Own value (ADR-0022) and keeps its values for the next
11
+ * call, velocity included. It's in the gate only while it animates, so the gate keeps nothing of an
12
+ * element it isn't animating.
13
+ * - **The controls** are Motion's (`AnimationPlaybackControls`): awaitable, with `stop`, `cancel`,
14
+ * `complete`, `pause`, `play`, `speed`, `time` and `duration`, every element's legs run through
15
+ * one `Playback.Playhead`. Its `finished` resolves at a landing or `complete()`, never at a `stop()`
16
+ * or a `cancel()`, as Motion's.
17
+ * - **A sequence** (#433's PR 2, Motion's) is compiled by core's `Sequence` to each subject's
18
+ * Keyframes over the whole sequence, run on the same controls: each element animates as a call
19
+ * does, and a function Segment's value, from 0, is told to its callback each frame.
20
+ *
21
+ * @module
22
+ */
23
+ import type * as DefaultTransition from "@wardic/core/DefaultTransition"
24
+ import * as Machine from "@wardic/core/Machine"
25
+ import * as Playback from "@wardic/core/Playback"
26
+ import * as ReducedMotion from "@wardic/core/ReducedMotion"
27
+ import type * as Values from "@wardic/core/Values"
28
+ import * as Sequence from "@wardic/core/Sequence"
29
+ import type * as FlushGate from "@wardic/dom/FlushGate"
30
+ import * as Report from "@wardic/dom/Report"
31
+ import * as Arr from "effect/Array"
32
+ import * as Bool from "effect/Boolean"
33
+ import * as Cause from "effect/Cause"
34
+ import * as Effect from "effect/Effect"
35
+ import * as Exit from "effect/Exit"
36
+ import type * as Fiber from "effect/Fiber"
37
+ import { constVoid, identity } from "effect/Function"
38
+ import * as Match from "effect/Match"
39
+ import * as Predicate from "effect/Predicate"
40
+ import * as Rec from "effect/Record"
41
+ import * as UndefinedOr from "effect/UndefinedOr"
42
+ import type { WardicKeyframes, WardicTargetValues, WardicTransition, WardicVariant } from "./config.ts"
43
+ import { filledStops, runOf } from "./retarget-legs.ts"
44
+ import type { WardicRuntime } from "./runtime.ts"
45
+ import { type ElementSpine, emptySnapshotOf, type ImperativeTrack, makeElementSpine, makeReuse, type Snapshot, startLinksOf } from "./spine.ts"
46
+ import { NO_VARIANT_STATE, resolveTarget } from "./variant-target.ts"
47
+
48
+ /** What an Imperative animation animates an element through: its spine's `animate`. */
49
+ type Animatable = Pick<ElementSpine, "animate">
50
+
51
+ /** Each mounted Wardic element's spine (Motion's `visualElementStore`). */
52
+ // Module state (#460, Q7): each Wardic element's animatable, held weakly by the element.
53
+ const wardicElements = new WeakMap<Element, Animatable>()
54
+
55
+ /**
56
+ * Register a mounted Wardic element's spine for the Imperative animations of it (#433): until the
57
+ * returned function, which its unmount calls.
58
+ */
59
+ export const registerAnimatable = (element: Element, spine: Animatable): (() => void) => {
60
+ wardicElements.set(element, spine)
61
+ return () => {
62
+ if (wardicElements.get(element) === spine) wardicElements.delete(element)
63
+ }
64
+ }
65
+
66
+ /** What a scope animates plain elements with: its provider's. */
67
+ export interface AnimateEnv {
68
+ readonly runtime: WardicRuntime
69
+ readonly gate: FlushGate.Shape
70
+ readonly reducedMotion: () => boolean
71
+ /**
72
+ * Whether its animations are skipped (#468): its scope's nearest `WardicConfig`'s, read as each
73
+ * starts, and handed to each element's animation in its transition, as Motion's `useAnimate` does.
74
+ */
75
+ readonly skipAnimations: () => boolean
76
+ readonly positionalKeys: ReducedMotion.PositionalKeys["Service"]
77
+ readonly defaultTransition: DefaultTransition.DefaultTransition["Service"]
78
+ }
79
+
80
+ /** A plain element's spine (#433's Q4), its values, and how many of its animations run, which keep it in the gate. */
81
+ interface Plain {
82
+ readonly spine: ElementSpine
83
+ readonly snapshot: Snapshot
84
+ readonly id: string
85
+ running: number
86
+ unregister: () => void
87
+ }
88
+
89
+ /** Each gate's plain elements: a provider's own, kept while the element is. */
90
+ // Module state (#460, Q7): each gate's plain elements, held weakly by the gate.
91
+ const plainByGate = new WeakMap<FlushGate.Shape, WeakMap<Element, Plain>>()
92
+
93
+ /** The plain elements' gate ids, counted. */
94
+ // Module state (#460, Q7): an id counter, unique across every gate.
95
+ let plainIds = 0
96
+
97
+ /** No config: a plain element's. */
98
+ const NO_CONFIG = {}
99
+
100
+ /** `element`'s plain spine under `env`'s gate, made at its first animation. */
101
+ const plainOf = (env: AnimateEnv, element: Element): Plain => {
102
+ let byElement = plainByGate.get(env.gate)
103
+ if (Predicate.isUndefined(byElement)) {
104
+ byElement = new WeakMap()
105
+ plainByGate.set(env.gate, byElement)
106
+ }
107
+ const known = byElement.get(element)
108
+ if (Predicate.isNotUndefined(known)) return known
109
+ const el = element as HTMLElement
110
+ const id = `wardic-animate-${plainIds++}`
111
+ const snapshot: Snapshot = emptySnapshotOf({})
112
+ const spine = makeElementSpine({
113
+ runtime: env.runtime,
114
+ gate: env.gate,
115
+ id,
116
+ element: el,
117
+ tag: undefined,
118
+ config: () => NO_CONFIG,
119
+ parent: undefined,
120
+ canStart: undefined,
121
+ extraDelay: undefined,
122
+ onFrame: undefined,
123
+ reducedMotion: env.reducedMotion,
124
+ positionalKeys: env.positionalKeys,
125
+ defaultTransition: env.defaultTransition,
126
+ start: { initialValues: {}, initialLink: {}, startedLink: {}, quiet: false },
127
+ snapshot,
128
+ reuse: makeReuse(),
129
+ links: startLinksOf(el, undefined, undefined),
130
+ styleNow: undefined,
131
+ live: undefined,
132
+ presence: undefined,
133
+ projected: false,
134
+ dragAxis: undefined,
135
+ handoff: undefined,
136
+ })
137
+ const plain: Plain = { spine, snapshot, id, running: 0, unregister: constVoid }
138
+ byElement.set(element, plain)
139
+ return plain
140
+ }
141
+
142
+ /**
143
+ * `transition` with `skipAnimations` when its scope's animations are skipped (#468, Motion's
144
+ * `useAnimate`, which hands its config's to each animation): a Wardic element's own config can skip it
145
+ * too, and a plain element has none.
146
+ */
147
+ const skippedIn = (env: AnimateEnv, transition: WardicTransition | undefined): WardicTransition | undefined => {
148
+ if (Bool.not(env.skipAnimations())) return transition
149
+ return { ...transition, skipAnimations: true } as WardicTransition
150
+ }
151
+
152
+ /**
153
+ * An element's animation of `target`: through its spine when it's a Wardic element's, else through its
154
+ * plain spine, in the gate while any of its animations runs.
155
+ */
156
+ const trackOf = (env: AnimateEnv, element: Element, target: WardicVariant, given: WardicTransition | undefined, head: Playback.Playhead, settled: () => void): ImperativeTrack => {
157
+ const resolved = resolveTarget(target, undefined, undefined, NO_VARIANT_STATE)
158
+ const own = wardicElements.get(element)
159
+ const hooks = { settled, failed: constVoid }
160
+ const transition = skippedIn(env, given)
161
+ if (Predicate.isNotUndefined(own)) return own.animate(resolved, transition, head, hooks)
162
+ const plain = plainOf(env, element)
163
+ // In the gate while it runs; out once its last animation is done, after the flush of its last frame.
164
+ let live = false
165
+ const enter = (): void => {
166
+ if (live) return
167
+ live = true
168
+ // Back in the gate with every value it holds, so a transform it draws keeps the keys it isn't animating.
169
+ if (plain.running === 0) {
170
+ plain.unregister = env.gate.register(plain.id, { target: element })
171
+ if (Bool.not(Rec.isEmptyRecord(plain.snapshot.values))) env.gate.write(plain.id, plain.snapshot.values)
172
+ }
173
+ plain.running++
174
+ }
175
+ const leave = (): void => {
176
+ if (Bool.not(live)) return
177
+ live = false
178
+ plain.running--
179
+ if (plain.running === 0) env.gate.afterFlush(() => {
180
+ if (plain.running === 0) plain.unregister()
181
+ })
182
+ }
183
+ const track = plain.spine.animate(resolved, transition, head, {
184
+ settled: () => {
185
+ leave()
186
+ settled()
187
+ },
188
+ failed: () => leave(),
189
+ })
190
+ return {
191
+ run: () => {
192
+ enter()
193
+ track.run()
194
+ },
195
+ stop: () => {
196
+ track.stop()
197
+ leave()
198
+ },
199
+ cancel: () => {
200
+ enter()
201
+ track.cancel()
202
+ leave()
203
+ },
204
+ duration: track.duration,
205
+ }
206
+ }
207
+
208
+ /** What `animate` animates: an element, a selector looked up inside the scope, or a list of elements. Motion's `ElementOrSelector`. */
209
+ export type WardicAnimationSubject = Element | string | ArrayLike<Element> | Iterable<Element> | null | undefined
210
+
211
+ /** A transition without its `delay`, each arm: `animate`'s and a Segment's take their own. */
212
+ type WithoutDelay = WardicTransition extends infer T ? (T extends unknown ? { readonly [K in keyof T as Exclude<K, "delay">]: T[K] } : never) : never
213
+
214
+ /** A `delay` that may be each element's (Motion's `delay(i, n)`; `stagger()` is #436). */
215
+ interface EachDelay {
216
+ readonly delay?: number | ((index: number, count: number) => number) | undefined
217
+ }
218
+
219
+ /**
220
+ * `animate`'s options: a transition, its `delay` a number, or a function of each element's index and
221
+ * their count, such as `stagger(0.05)`; and `onComplete`, called as it lands. Motion's.
222
+ */
223
+ export type WardicAnimateOptions = WithoutDelay & EachDelay & {
224
+ readonly onComplete?: (() => void) | undefined
225
+ }
226
+
227
+ /** The elements of `subject`: a selector's inside `scope`, else the page's. */
228
+ const subjectsOf = (subject: WardicAnimationSubject, scope: Element | undefined): ReadonlyArray<Element> => {
229
+ if (Predicate.isNullish(subject)) return []
230
+ if (Predicate.isString(subject)) return Arr.fromIterable(UndefinedOr.match(scope, { onUndefined: () => document, onDefined: (el): ParentNode => el }).querySelectorAll(subject))
231
+ if (Predicate.hasProperty(subject, "nodeType")) return [subject as Element]
232
+ // A list's missing members left out, as Motion's.
233
+ if (Predicate.isIterable(subject)) return Arr.filter(Arr.fromIterable(subject), Predicate.isNotNullish)
234
+ const list = subject as ArrayLike<Element>
235
+ return Arr.filter(Arr.makeBy(list.length, (i) => list[i] as Element), Predicate.isNotNullish)
236
+ }
237
+
238
+ /** Each element's transition: its `delay` worked out for it (Motion's `delay(i, n)`). */
239
+ const transitionFor = (options: WardicAnimateOptions | undefined, index: number, count: number): WardicTransition | undefined =>
240
+ UndefinedOr.map(options, (given) => {
241
+ const { delay, onComplete: _onComplete, ...rest } = given as Readonly<Record<string, unknown>>
242
+ if (Predicate.isFunction(delay)) return { ...rest, delay: (delay as (index: number, count: number) => number)(index, count) } as WardicTransition
243
+ if (Predicate.isUndefined(delay)) return rest as WardicTransition
244
+ return { ...rest, delay } as WardicTransition
245
+ })
246
+
247
+ /** Where an animation is: `"idle"`, `"running"`, `"paused"` or `"finished"`. Motion's `AnimationPlayState`. */
248
+ export type WardicPlayState = "idle" | "running" | "paused" | "finished"
249
+
250
+ /**
251
+ * What `animate` returns: an animation's controls, and a promise of its landing, so it can be awaited.
252
+ * Motion's `AnimationPlaybackControls`.
253
+ */
254
+ // #433: every element's legs run through one Playhead.
255
+ export interface WardicPlaybackControls extends PromiseLike<void> {
256
+ /** Seconds played, a delay included. Set, it seeks: each key starts again there, holding while paused. */
257
+ time: number
258
+ /** How fast it plays: 1 as given, 2 twice as fast, 0 held, below 0 backwards. */
259
+ speed: number
260
+ /** How long it runs, in seconds: its longest element's longest key, a spring's to rest. */
261
+ readonly duration: number
262
+ readonly state: WardicPlayState
263
+ /** Resolves when it lands, or at `complete()`; never at `stop()` or `cancel()`, as Motion's. */
264
+ readonly finished: Promise<void>
265
+ /** Play it on: from where it's paused, or again from its start once it's finished or cancelled. Not after `stop()`. */
266
+ readonly play: () => void
267
+ /** Hold it where it is. */
268
+ readonly pause: () => void
269
+ /** End it where it is, for good: its keys stay there. */
270
+ readonly stop: () => void
271
+ /** End it, and put its keys back where it started them. */
272
+ readonly cancel: () => void
273
+ /** Go to its end at once, and finish. */
274
+ readonly complete: () => void
275
+ }
276
+
277
+ /** What a scope hears of its animations: each one's start and its end, however it ended. */
278
+ export interface AnimationWatch {
279
+ readonly started: (controls: WardicPlaybackControls) => void
280
+ /** It's no longer in flight: `landed` when it finished. */
281
+ readonly ended: (controls: WardicPlaybackControls, landed: boolean) => void
282
+ }
283
+
284
+ /** Playback controls over `tracks`, all run through `head`, started now. */
285
+ const controlsOf = (tracks: ReadonlyArray<ImperativeTrack>, head: Playback.Playhead, watch: AnimationWatch, onComplete: (() => void) | undefined): {
286
+ readonly controls: WardicPlaybackControls
287
+ readonly settledOne: () => void
288
+ } => {
289
+ let state: WardicPlayState = "running"
290
+ let stopped = false
291
+ let landed = 0
292
+ let resolve: (() => void) | undefined
293
+ let finished: Promise<void> | undefined
294
+ let isResolved = false
295
+ let duration: number | undefined
296
+ const durationNow = (): number => {
297
+ if (Predicate.isUndefined(duration)) duration = Arr.reduce(tracks, 0, (longest, track) => Math.max(longest, track.duration()))
298
+ return duration
299
+ }
300
+ const runAll = (): void => {
301
+ landed = 0
302
+ Arr.forEach(tracks, (track) => track.run())
303
+ }
304
+ const fresh = (): void => {
305
+ finished = undefined
306
+ resolve = undefined
307
+ isResolved = false
308
+ }
309
+ const end = (how: WardicPlayState, landedNow: boolean): void => {
310
+ const was = state
311
+ state = how
312
+ if (Bool.or(was === "running", was === "paused")) watch.ended(controls, landedNow)
313
+ }
314
+ const restart = (): void => {
315
+ const was = state
316
+ state = "running"
317
+ if (Bool.or(was === "finished", was === "idle")) watch.started(controls)
318
+ }
319
+ const controls: WardicPlaybackControls = {
320
+ get time() {
321
+ return head.time
322
+ },
323
+ set time(at: number) {
324
+ Playback.seek(head, at)
325
+ // A seek of one that isn't running holds where it goes, as Motion's.
326
+ if (state !== "running") {
327
+ Playback.pause(head)
328
+ if (Bool.or(state === "finished", state === "idle")) {
329
+ fresh()
330
+ watch.started(controls)
331
+ }
332
+ state = "paused"
333
+ }
334
+ runAll()
335
+ },
336
+ get speed() {
337
+ return head.speed
338
+ },
339
+ set speed(speed: number) {
340
+ Playback.setSpeed(head, speed)
341
+ },
342
+ get duration() {
343
+ return durationNow()
344
+ },
345
+ get state() {
346
+ return state
347
+ },
348
+ get finished() {
349
+ if (Predicate.isUndefined(finished)) {
350
+ finished = Bool.match(isResolved, {
351
+ onTrue: () => Promise.resolve(),
352
+ onFalse: () =>
353
+ new Promise<void>((done) => {
354
+ resolve = done
355
+ }),
356
+ })
357
+ }
358
+ return finished
359
+ },
360
+ then: (onResolve, onReject) => controls.finished.then(onResolve, onReject),
361
+ play: () => {
362
+ if (stopped) return
363
+ if (state === "paused") {
364
+ Playback.play(head)
365
+ state = "running"
366
+ return
367
+ }
368
+ if (state === "running") return
369
+ // Again from its start: its end when it plays backwards.
370
+ fresh()
371
+ Playback.play(head)
372
+ Playback.seek(head, Bool.match(head.speed < 0, { onTrue: durationNow, onFalse: () => 0 }))
373
+ restart()
374
+ runAll()
375
+ },
376
+ pause: () => {
377
+ if (stopped) return
378
+ Playback.pause(head)
379
+ if (state === "running") state = "paused"
380
+ },
381
+ stop: () => {
382
+ stopped = true
383
+ Arr.forEach(tracks, (track) => track.stop())
384
+ end("idle", false)
385
+ },
386
+ cancel: () => {
387
+ Arr.forEach(tracks, (track) => track.cancel())
388
+ Playback.seek(head, 0)
389
+ end("idle", false)
390
+ },
391
+ complete: () => {
392
+ if (stopped) return
393
+ if (state !== "running") restart()
394
+ Playback.play(head)
395
+ Playback.seek(head, durationNow())
396
+ runAll()
397
+ },
398
+ }
399
+ // Each element's legs landed: the last lands the animation.
400
+ const settledOne = (): void => {
401
+ landed++
402
+ if (landed < tracks.length) return
403
+ isResolved = true
404
+ UndefinedOr.map(resolve, (done) => done())
405
+ UndefinedOr.map(onComplete, (complete) => complete())
406
+ end("finished", true)
407
+ }
408
+ return { controls, settledOne }
409
+ }
410
+
411
+ /** An animation of no element: finished at once (a server's, or a subject that matched none). */
412
+ const finishedControls = (): WardicPlaybackControls => {
413
+ const done = Promise.resolve()
414
+ return {
415
+ time: 0,
416
+ speed: 1,
417
+ duration: 0,
418
+ state: "finished",
419
+ finished: done,
420
+ then: (onResolve, onReject) => done.then(onResolve, onReject),
421
+ play: constVoid,
422
+ pause: constVoid,
423
+ stop: constVoid,
424
+ cancel: constVoid,
425
+ complete: constVoid,
426
+ }
427
+ }
428
+
429
+ /**
430
+ * Where a Segment starts in a sequence: seconds in, `1.5`; after or before the end of the Segment
431
+ * before, `"+0.5"` or `"-0.5"`; at its start, `"<"`, or around it, `"<+0.5"` or `"<-0.5"`; or a label's
432
+ * name. Motion's `SequenceTime`.
433
+ */
434
+ export type WardicSequenceTime = number | "<" | `+${number}` | `-${number}` | `<+${number}` | `<-${number}` | (string & {})
435
+
436
+ /** A label in a sequence: a name for where the Segment before ends, or `{ name, at }` for a time of its own. Motion's. */
437
+ export type WardicSequenceLabel = string | { readonly name: string; readonly at: WardicSequenceTime }
438
+
439
+ /**
440
+ * A Segment's options: a transition, with a value's own entries laid over it; its `delay`, a number or
441
+ * a function of each element's index and count, such as `stagger(0.05)`; and `at`, where it starts. A
442
+ * spring through two stops or fewer plays as an easing over its time to rest. Motion's.
443
+ */
444
+ export type WardicSegmentOptions = WithoutDelay & EachDelay & {
445
+ readonly at?: WardicSequenceTime | undefined
446
+ }
447
+
448
+ /** A Segment's values: each a value or a list of keyframes, as a target's. */
449
+ export type WardicSegmentTarget = Omit<WardicTargetValues, "transition">
450
+
451
+ /** A Segment of elements, `[subject, target, options?]`: an element, a selector inside the scope, or a list. Motion's. */
452
+ export type WardicElementSegment =
453
+ | readonly [subject: WardicAnimationSubject, target: WardicSegmentTarget]
454
+ | readonly [subject: WardicAnimationSubject, target: WardicSegmentTarget, options: WardicSegmentOptions]
455
+
456
+ /**
457
+ * A function Segment, `[callback, value?, options?]`: its callback is given a value each frame, from 0
458
+ * to 1 unless it gives its own stops, for what isn't an element's style. Motion's, in place of its
459
+ * motion value Segments.
460
+ */
461
+ export type WardicFunctionSegment =
462
+ | readonly [callback: (value: number) => void]
463
+ | readonly [callback: (value: number) => void, options: WardicSegmentOptions]
464
+ | readonly [callback: (value: number) => void, value: number | WardicKeyframes<number>, options: WardicSegmentOptions]
465
+ | readonly [callback: (value: string) => void, value: string | WardicKeyframes<string>, options: WardicSegmentOptions]
466
+
467
+ /** One step of a sequence: a label, a Segment of elements, or a function Segment. */
468
+ export type WardicSegment = WardicSequenceLabel | WardicElementSegment | WardicFunctionSegment
469
+
470
+ /**
471
+ * A sequence: Segments played one after another, unless an `at` says where one starts, and labels to
472
+ * start them at. `animate(sequence, options)` plays it. Motion's `AnimationSequence`.
473
+ *
474
+ * @example
475
+ * animate([
476
+ * ["ul", { opacity: 1 }],
477
+ * ["li", { x: [-20, 0] }, { delay: stagger(0.05), at: "-0.1" }],
478
+ * ])
479
+ * @see https://wardic.dev/reference/solid/animation/sequences
480
+ */
481
+ // #433's PR 2.
482
+ export type WardicAnimationSequence = ReadonlyArray<WardicSegment>
483
+
484
+ /**
485
+ * A sequence's options: `duration`, the whole sequence scaled to it; `delay`; `repeat`, `repeatType`
486
+ * and `repeatDelay`; `defaultTransition`, each Segment's when it gives none (a 0.3 s `easeOut` tween
487
+ * otherwise); and `onComplete`, called as it lands. Motion's `SequenceOptions`.
488
+ */
489
+ export interface WardicSequenceOptions {
490
+ readonly duration?: number | undefined
491
+ readonly delay?: number | undefined
492
+ readonly repeat?: number | undefined
493
+ readonly repeatType?: "loop" | "reverse" | "mirror" | undefined
494
+ readonly repeatDelay?: number | undefined
495
+ readonly defaultTransition?: WardicTransition | undefined
496
+ readonly onComplete?: (() => void) | undefined
497
+ }
498
+
499
+ /**
500
+ * A scope's `animate`: `animate(subject, target, options?)` animates the subject's elements to
501
+ * `target`, and `animate(sequence, options?)` plays a sequence. Either returns its playback controls.
502
+ * Motion's `animate`, as `useAnimate` gives it.
503
+ */
504
+ // #433: through one Playhead.
505
+ export interface WardicAnimate {
506
+ (subject: WardicAnimationSubject, target: WardicVariant, options?: WardicAnimateOptions): WardicPlaybackControls
507
+ (sequence: WardicAnimationSequence, options?: WardicSequenceOptions): WardicPlaybackControls
508
+ }
509
+
510
+ /**
511
+ * An **Animation scope**'s `animate` (#433): selectors looked up inside `scope()`, each animation
512
+ * told to `watch` as it starts and ends. Every element's legs start in the call, on the loop by
513
+ * the end of its task.
514
+ */
515
+ export const scopedAnimate = (env: AnimateEnv, scope: () => Element | undefined, watch: AnimationWatch): WardicAnimate =>
516
+ ((first: WardicAnimationSubject | WardicAnimationSequence, second?: WardicVariant | WardicSequenceOptions, third?: WardicAnimateOptions): WardicPlaybackControls => {
517
+ if (isSequence(first)) return sequenceOf(env, scope(), watch, first, second as WardicSequenceOptions | undefined)
518
+ const elements = subjectsOf(first as WardicAnimationSubject, scope())
519
+ const target = second as WardicVariant
520
+ return started(watch, elements.length, UndefinedOr.map(third, (given) => given.onComplete), (head, settled) =>
521
+ Arr.map(elements, (element, index) => trackOf(env, element, target, transitionFor(third, index, elements.length), head, settled)))
522
+ }) as WardicAnimate
523
+
524
+ /**
525
+ * An animation of `count` tracks started (#433): its controls over them, through one Playhead, told
526
+ * to `watch`, each track run. Finished at once with none.
527
+ */
528
+ const started = (
529
+ watch: AnimationWatch,
530
+ count: number,
531
+ onComplete: (() => void) | undefined,
532
+ tracksOf: (head: Playback.Playhead, settled: () => void) => ReadonlyArray<ImperativeTrack>,
533
+ ): WardicPlaybackControls => {
534
+ if (count === 0) return finishedControls()
535
+ const head = Playback.make()
536
+ let settledOne = constVoid
537
+ const tracks = tracksOf(head, () => settledOne())
538
+ const made = controlsOf(tracks, head, watch, onComplete)
539
+ settledOne = made.settledOne
540
+ watch.started(made.controls)
541
+ Arr.forEach(tracks, (track) => track.run())
542
+ return made.controls
543
+ }
544
+
545
+ /** A server's `animate`: nothing to animate. */
546
+ export const serverAnimate: WardicAnimate = () => finishedControls()
547
+
548
+ // --- Sequences (#433's PR 2) ------------------------------------------------------------------
549
+
550
+ /** Whether `animate` was given a sequence (Motion's `isSequence`): a list with a Segment in it. */
551
+ const isSequence = (given: unknown): given is WardicAnimationSequence =>
552
+ Bool.match(Arr.isArray(given), { onTrue: () => Arr.some(given as ReadonlyArray<unknown>, Arr.isArray), onFalse: () => false })
553
+
554
+ /** A function Segment's value (Motion's motion value): its own subject, its callback told each frame. */
555
+ interface Callback {
556
+ readonly call: (value: number | string) => void
557
+ }
558
+
559
+ /** What a sequence animates: elements, and function Segments' values. */
560
+ type Subject = Element | Callback
561
+
562
+ /** Whether a subject is a function Segment's value. */
563
+ const isCallback = (subject: Subject): subject is Callback => Predicate.hasProperty(subject, "call")
564
+
565
+ /** The key a function Segment's value animates under. */
566
+ const VALUE = "value"
567
+
568
+ /** A function Segment's stops with none given (Motion's). */
569
+ const ZERO_TO_ONE: ReadonlyArray<number> = [0, 1]
570
+
571
+ /** No fields. */
572
+ const NO_FIELDS: Readonly<Record<string, unknown>> = {}
573
+
574
+ /**
575
+ * What a Segment's transition doesn't take from the sequence's `defaultTransition` (Motion's): its
576
+ * delay, times and repeat, which are each Segment's own, and a value's own transitions.
577
+ */
578
+ const PLACING: ReadonlySet<string> = new Set(["delay", "times", "repeat", "repeatType", "repeatDelay", "reverse", "at"])
579
+
580
+ /** A Segment's default transition (Motion's): a 0.3 s `easeOut` tween. */
581
+ const SEGMENT_TWEEN: Sequence.Transition = { type: "tween" }
582
+
583
+ /** The fields of a sequence's options laid over each key's animation: `duration`, `delay` and the repeat. */
584
+ const WHOLE = ["duration", "delay", "repeat", "repeatType", "repeatDelay"] as const
585
+
586
+ /**
587
+ * The fields of a sequence's `defaultTransition` laid over each key's animation, under its own
588
+ * options' (Motion's): its delay and repeat. Its `duration` is a Segment's, never the sequence's.
589
+ */
590
+ const WHOLE_DEFAULTS = ["delay", "repeat", "repeatType", "repeatDelay"] as const
591
+
592
+ /** `fields`' `keys`, those it has. */
593
+ const picked = (fields: Readonly<Record<string, unknown>>, keys: ReadonlyArray<string>): Readonly<Record<string, unknown>> =>
594
+ Rec.filter(fields, (value, key) => Bool.and(Arr.contains(keys, key), Predicate.isNotUndefined(value)))
595
+
596
+ /**
597
+ * `key`'s transition in a Segment (Motion's `getValueTransition` for sequences): the Segment's,
598
+ * the value's own laid over it, over the sequence's `defaultTransition` less its placing; a spring
599
+ * or a tween as Wardic's transitions are (ADR-0051), Motion's 0.3 s `easeOut` tween when it defines
600
+ * neither; its `delay` kept as given, each element's when it's a function.
601
+ */
602
+ const segmentTransitionOf = (options: WardicSegmentOptions | undefined, key: string, defaults: WardicTransition | undefined): Sequence.Transition => {
603
+ const own = UndefinedOr.match(options as Readonly<Record<string, unknown>> | undefined, {
604
+ onUndefined: () => NO_FIELDS,
605
+ onDefined: (given) => ({ ...given, ...UndefinedOr.match(given[key], { onUndefined: () => NO_FIELDS, onDefined: (entry) => Bool.match(Predicate.isObject(entry), { onTrue: () => entry as Readonly<Record<string, unknown>>, onFalse: () => NO_FIELDS }) }) }),
606
+ })
607
+ const base = UndefinedOr.match(defaults as Readonly<Record<string, unknown>> | undefined, {
608
+ onUndefined: () => NO_FIELDS,
609
+ onDefined: (given) => Rec.filter(given, (_, field) => Bool.not(PLACING.has(field))),
610
+ })
611
+ const { delay, at: _at, ...fields } = own
612
+ // An inertia (#435) isn't a sequence's: a Segment's time is placed on its timeline, and a glide has none to place.
613
+ const run = UndefinedOr.match(runOf({ ...base, ...fields } as WardicTransition), {
614
+ onUndefined: () => SEGMENT_TWEEN,
615
+ onDefined: (made) => Bool.match(made.type === "inertia", { onTrue: () => SEGMENT_TWEEN, onFalse: () => made as Sequence.Transition }),
616
+ })
617
+ return Bool.match(Predicate.isUndefined(delay), { onTrue: () => run, onFalse: () => ({ ...run, delay }) as Sequence.Transition })
618
+ }
619
+
620
+ /** Whether a Segment's value is one: a number, a string, `null` or Keyframes. */
621
+ const isSegmentValue: Predicate.Predicate<unknown> = Predicate.or(Predicate.or(Predicate.isNumber, Predicate.isString), Predicate.or(Predicate.isNull, Arr.isArray))
622
+
623
+ /** A Segment's values: those that are a value, `null` or Keyframes. */
624
+ const segmentValuesOf = (target: WardicSegmentTarget): Readonly<Record<string, Sequence.Stop | ReadonlyArray<Sequence.Stop>>> =>
625
+ Rec.filter(target as Readonly<Record<string, unknown>>, isSegmentValue) as Readonly<Record<string, Sequence.Stop | ReadonlyArray<Sequence.Stop>>>
626
+
627
+ /** Each of `values`' keys' transition in a Segment. */
628
+ const segmentTransitionsOf = (values: Readonly<Record<string, unknown>>, options: WardicSegmentOptions | undefined, defaults: WardicTransition | undefined): Readonly<Record<string, Sequence.Transition>> =>
629
+ Rec.map(values, (_, key) => segmentTransitionOf(options, key, defaults))
630
+
631
+ /** A Segment's `at`, when it gives one. */
632
+ const atOf = (options: WardicSegmentOptions | undefined): Sequence.Time | undefined => UndefinedOr.map(options, (given) => given.at)
633
+
634
+ /**
635
+ * A sequence's steps for core (#433): labels as they are; an element Segment's elements (a selector
636
+ * looked up once a sequence, inside `scope`), values and each value's transition; a function
637
+ * Segment's own value, from 0 to 1 unless it gives its stops.
638
+ */
639
+ const stepsOf = (sequence: WardicAnimationSequence, scope: Element | undefined, defaults: WardicTransition | undefined): ReadonlyArray<Sequence.Step<Subject>> => {
640
+ const selected = new Map<string, ReadonlyArray<Element>>()
641
+ const elementsOf = (subject: WardicAnimationSubject): ReadonlyArray<Element> => {
642
+ if (Bool.not(Predicate.isString(subject))) return subjectsOf(subject, scope)
643
+ const selector = subject as string
644
+ const known = selected.get(selector)
645
+ if (Predicate.isNotUndefined(known)) return known
646
+ const found = subjectsOf(selector, scope)
647
+ selected.set(selector, found)
648
+ return found
649
+ }
650
+ return Arr.map(sequence, (segment): Sequence.Step<Subject> => {
651
+ if (Predicate.isString(segment)) return segment
652
+ if (Bool.not(Arr.isArray(segment))) return segment as { readonly name: string; readonly at: Sequence.Time }
653
+ const parts = segment as ReadonlyArray<unknown>
654
+ if (Predicate.isFunction(parts[0])) {
655
+ const call = parts[0] as (value: number | string) => void
656
+ const three = parts.length === 3
657
+ const given = Bool.match(three, { onTrue: () => parts[1] as Sequence.Stop | ReadonlyArray<Sequence.Stop>, onFalse: () => ZERO_TO_ONE })
658
+ const options = Bool.match(three, { onTrue: () => parts[2], onFalse: () => parts[1] }) as WardicSegmentOptions | undefined
659
+ const target = { [VALUE]: given }
660
+ return { subjects: [{ call }], target, transitions: segmentTransitionsOf(target, options, defaults), at: atOf(options) }
661
+ }
662
+ const [subject, values, options] = segment as WardicElementSegment
663
+ const target = segmentValuesOf(values)
664
+ return { subjects: elementsOf(subject), target, transitions: segmentTransitionsOf(target, options, defaults), at: atOf(options) }
665
+ })
666
+ }
667
+
668
+ /**
669
+ * A function Segment's value animated (#433): its stops, a first `null` 0, through the
670
+ * Interpolators on its tween over the sequence, each frame told to its callback. Cancelled, the
671
+ * callback hears its first stop again, as Motion's motion value is set back.
672
+ */
673
+ const callbackTrackOf = (env: AnimateEnv, callback: Callback, animation: Sequence.Animation, head: Playback.Playhead, settled: () => void): ImperativeTrack => {
674
+ const stops = filledStops(UndefinedOr.getOrThrow(animation.keyframes[VALUE]), 0)
675
+ const options = UndefinedOr.getOrThrow(animation.transition[VALUE])
676
+ // Skipped (#468): its callback told the value it would end on, on the first tick.
677
+ const machine = Bool.match(env.skipAnimations(), {
678
+ onTrue: () => Effect.succeed(ReducedMotion.snap<Values.Values>({ [VALUE]: UndefinedOr.getOrThrow(stops[0]) }, { [VALUE]: ReducedMotion.endOf(UndefinedOr.getOrThrow(stops[0]), UndefinedOr.getOrThrow(stops[stops.length - 1]), options) })),
679
+ onFalse: () => Machine.keyframesValues({ [VALUE]: stops }, options),
680
+ })
681
+ let fiber: Fiber.Fiber<unknown> | undefined
682
+ const end = (): void => {
683
+ if (Predicate.isUndefined(fiber)) return
684
+ const running = fiber
685
+ fiber = undefined
686
+ // Nothing waits on its end: interrupted here, not by a fiber forked for it (#618, L2).
687
+ if (Predicate.isUndefined(running.pollUnsafe())) running.interruptUnsafe()
688
+ }
689
+ const landed = (exit: Exit.Exit<unknown>): Effect.Effect<void> =>
690
+ Exit.match(exit, {
691
+ onSuccess: () => Effect.sync(settled),
692
+ onFailure: (cause) => Bool.match(Cause.hasInterruptsOnly(cause), { onTrue: () => Effect.void, onFalse: () => Report.failure("wardic.animate: a function Segment failed", cause) }),
693
+ })
694
+ const run = (): void => {
695
+ end()
696
+ fiber = env.runtime.runFork(
697
+ machine.pipe(
698
+ Effect.map(Playback.drive(head)),
699
+ Effect.flatMap(Machine.run((frame) => {
700
+ callback.call(UndefinedOr.getOrThrow(frame.value[VALUE]))
701
+ return undefined
702
+ })),
703
+ Effect.onExit(landed),
704
+ ),
705
+ )
706
+ }
707
+ return {
708
+ run,
709
+ stop: end,
710
+ cancel: () => {
711
+ end()
712
+ callback.call(UndefinedOr.getOrThrow(stops[0]))
713
+ },
714
+ duration: () => Machine.durationOf(env.runtime.runSync(machine)),
715
+ }
716
+ }
717
+
718
+ /**
719
+ * A sequence started (#433's PR 2, Motion's): compiled by core's `Sequence`, each element animated
720
+ * through its Keyframes on its spine or its plain one, as a call animates it, and each function
721
+ * Segment's value told to its callback; one Playhead for all, so it seeks, pauses and awaits as one.
722
+ */
723
+ const sequenceOf = (env: AnimateEnv, scope: Element | undefined, watch: AnimationWatch, sequence: WardicAnimationSequence, options: WardicSequenceOptions | undefined): WardicPlaybackControls => {
724
+ const defaults = UndefinedOr.map(options, (given) => given.defaultTransition)
725
+ // The sequence's own options over its `defaultTransition`'s, as Motion's.
726
+ const whole = {
727
+ ...picked(UndefinedOr.match(defaults as Readonly<Record<string, unknown>> | undefined, { onUndefined: () => NO_FIELDS, onDefined: identity }), WHOLE_DEFAULTS),
728
+ ...picked(UndefinedOr.match(options as Readonly<Record<string, unknown>> | undefined, { onUndefined: () => NO_FIELDS, onDefined: identity }), WHOLE),
729
+ } as Sequence.Options
730
+ const compiled = Arr.fromIterable(Sequence.compile(stepsOf(sequence, scope, defaults), whole))
731
+ return started(watch, compiled.length, UndefinedOr.map(options, (given) => given.onComplete), (head, settled) =>
732
+ Arr.map(compiled, ([subject, animation]) =>
733
+ Match.value(subject).pipe(
734
+ Match.when(isCallback, (callback) => callbackTrackOf(env, callback, animation, head, settled)),
735
+ Match.orElse((element) => trackOf(env, element as Element, animation.keyframes as WardicVariant, animation.transition as WardicTransition, head, settled)),
736
+ )))
737
+ }
738
+
739
+ /**
740
+ * An animation scope: give it as an element's `ref`, and `animate`'s selectors are looked up inside
741
+ * that element. Motion's `AnimationScope`.
742
+ */
743
+ // #433.
744
+ export interface WardicAnimationScope<T extends Element = HTMLElement> {
745
+ /** Give it as the element's `ref`. */
746
+ (element: T): void
747
+ /** The element, once it's mounted. */
748
+ readonly current: T | undefined
749
+ /** Its animations in flight: started, and neither finished, stopped nor cancelled. */
750
+ readonly animations: ReadonlyArray<WardicPlaybackControls>
751
+ }
752
+
753
+ /**
754
+ * An Animation scope's ref and what it hears of its animations (#433): each in `animations` while in
755
+ * flight, and `also` told too (Solid 2's `settled()`). `stopAll` stops them, at its owner's cleanup.
756
+ */
757
+ export const scopeOf = <T extends Element>(also?: AnimationWatch): {
758
+ readonly scope: WardicAnimationScope<T>
759
+ readonly watch: AnimationWatch
760
+ readonly stopAll: () => void
761
+ } => {
762
+ let current: T | undefined
763
+ let animations: ReadonlyArray<WardicPlaybackControls> = []
764
+ const ref = (element: T): void => {
765
+ current = element
766
+ }
767
+ const scope = Object.defineProperties(ref, {
768
+ current: { get: () => current },
769
+ animations: { get: () => animations },
770
+ }) as WardicAnimationScope<T>
771
+ const watch: AnimationWatch = {
772
+ started: (controls) => {
773
+ animations = Arr.append(animations, controls)
774
+ UndefinedOr.map(also, (more) => more.started(controls))
775
+ },
776
+ ended: (controls, landed) => {
777
+ animations = Arr.filter(animations, (one) => one !== controls)
778
+ UndefinedOr.map(also, (more) => more.ended(controls, landed))
779
+ },
780
+ }
781
+ return { scope, watch, stopAll: () => Arr.forEach(animations, (controls) => controls.stop()) }
782
+ }