@wardic/solid 0.0.0-stage → 1.0.0-rc.2

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,1207 @@
1
+ import * as InterpolatorRegistry from "@wardic/core/InterpolatorRegistry";
2
+ import * as Renderer from "@wardic/core/Renderer";
3
+ import * as Values from "@wardic/core/Values";
4
+ import * as Machine from "@wardic/core/Machine";
5
+ import * as Microtask from "@wardic/core/Microtask";
6
+ import * as Velocity from "@wardic/core/Velocity";
7
+ import * as DomRenderer from "@wardic/dom/DomRenderer";
8
+ import * as MeasuredPair from "@wardic/dom/MeasuredPair";
9
+ import * as Report from "@wardic/dom/Report";
10
+ import * as Variables from "@wardic/dom/Variables";
11
+ import * as Arr from "effect/Array";
12
+ import * as Bool from "effect/Boolean";
13
+ import * as Cause from "effect/Cause";
14
+ import * as Effect from "effect/Effect";
15
+ import { constFalse, constUndefined, constVoid, identity } from "effect/Function";
16
+ import * as Option from "effect/Option";
17
+ import * as Predicate from "effect/Predicate";
18
+ import * as Rec from "effect/Record";
19
+ import * as UndefinedOr from "effect/UndefinedOr";
20
+ import { delayedBy, hasManyStops, keyframesFrom, legsOf, velocitiesOf } from "./retarget-legs.js";
21
+ import { childDelayOf, staggerOf } from "./variant-tree.js";
22
+ /** Whether a value-map has any keys (an empty exit means "remove immediately"). */
23
+ const isEmpty = (values) => Rec.isEmptyRecord(values);
24
+ /**
25
+ * An element's values as they're drawn, without its Transform template (#443): it rides in its
26
+ * presence record to draw its exit through, and isn't a value a child back under its key takes over.
27
+ */
28
+ const valuesDrawn = (values) => Rec.remove(values, DomRenderer.TEMPLATE_KEY);
29
+ /** An exit's spring: the defaults, one object, so core decodes it once (#66). */
30
+ /** A record's place in the variant tree (#290): left out, a lone element's. */
31
+ const LONE = { joins: false, provides: false, twin: false };
32
+ /** A record's place in the variant tree, {@link LONE} without one. */
33
+ const treeOf = (rec) => UndefinedOr.match(rec.tree, { onUndefined: () => LONE, onDefined: identity });
34
+ /** No elements: a leaving child with none inside it exiting. */
35
+ const NO_PARTS = [];
36
+ /** No records: nothing registered inside a leaving child. */
37
+ const NO_RECORDS = [];
38
+ /** No record of its own: a plain leaving child (#392). */
39
+ const NO_OWN = [];
40
+ /** Whether an exit node, or one under it, has anything to animate. */
41
+ const busy = (node) => Bool.or(Bool.not(isEmpty(node.exit.values)), Arr.some(node.kids, busy));
42
+ /** No velocities: an element with no spine to read them from (#464: one with a spine starts its exit from its own). */
43
+ const NO_VELOCITIES = {};
44
+ /** No boxes: a leaver none of whose elements was on the page. */
45
+ const NO_BOXES = new Map();
46
+ /** Whether two lists of elements have the same shape (#286): as many, each pair the same tag. */
47
+ const sameShape = (a, b) => Bool.and(a.length === b.length, Arr.every(Arr.zip(a, b), ([x, y]) => x.tagName === y.tagName));
48
+ /**
49
+ * Each numeric key's velocity from a step's frame (#286): its change since the step before, over
50
+ * the step's `dt` (seconds), and 0 once the frame settles. A key's first step sets nothing.
51
+ */
52
+ const measure = (velocities, last, frame, dt) => {
53
+ Arr.forEach(Rec.keys(frame.value), (key) => {
54
+ const now = frame.value[key];
55
+ if (Predicate.isString(now))
56
+ return;
57
+ const before = last[key];
58
+ last[key] = now;
59
+ if (frame.done) {
60
+ velocities[key] = 0;
61
+ return;
62
+ }
63
+ if (Predicate.isUndefined(before))
64
+ return;
65
+ if (dt <= 0)
66
+ return;
67
+ velocities[key] = Velocity.between(before, now, dt);
68
+ });
69
+ };
70
+ /** A blend's machine, its numeric keys' velocities measured each step (#286): a tween's frames carry none. */
71
+ const measuredInto = (velocities) => (machine) => Machine.make({
72
+ settles: machine.settles,
73
+ span: machine.span,
74
+ start: () => {
75
+ const step = machine.start();
76
+ const last = {};
77
+ return (dt) => {
78
+ const frame = step(dt);
79
+ measure(velocities, last, frame, Math.min(dt, Machine.MAX_DT));
80
+ return frame;
81
+ };
82
+ },
83
+ });
84
+ /**
85
+ * One leg of an exit (#277), as the spine runs a Retarget's, committing onto the retained `el`. Each
86
+ * key's velocity goes into `velocities` (#286): a spring's from its frames, a blend's measured, a
87
+ * snap's 0, so a child back under its key starts with it.
88
+ */
89
+ const exitRunOf = (leg, el, commitFrame, velocities) => {
90
+ if (leg._tag === "Blend") {
91
+ return Effect.suspend(leg.machine).pipe(InterpolatorRegistry.withKeyRules([Variables.values(el)]), Effect.map(measuredInto(velocities)), Effect.flatMap(Machine.run(commitFrame)));
92
+ }
93
+ if (leg._tag === "Follow") {
94
+ const key = leg.key;
95
+ return Effect.suspend(() => leg.machine().pipe(Machine.run((frame) => {
96
+ velocities[key] = UndefinedOr.match(frame.velocity, { onUndefined: () => 0, onDefined: identity });
97
+ return commitFrame({ ...frame, value: { [key]: frame.value } });
98
+ })));
99
+ }
100
+ if (leg._tag === "Numbers") {
101
+ return Effect.suspend(() => leg.machine().pipe(Machine.run((frame) => {
102
+ Object.assign(velocities, frame.velocity);
103
+ return commitFrame(frame);
104
+ })));
105
+ }
106
+ Arr.forEach(leg.keys, (key) => {
107
+ velocities[key] = 0;
108
+ });
109
+ return Effect.suspend(() => leg.machine().pipe(Machine.run(commitFrame)));
110
+ };
111
+ /** At once, every name. */
112
+ const NO_DELAY = () => 0;
113
+ /**
114
+ * An exit's Measured pairs (#430): each key whose start and target differ in type, asked of the
115
+ * end-of-task batch, but a key with Keyframes of more than two stops (`stops`, #460). `undefined` with
116
+ * none, nearly every exit.
117
+ */
118
+ const exitMeasuredOf = (element, from, to, stops) => {
119
+ const pairs = Rec.filter(to, (target, key) => Bool.and(Bool.and(Object.hasOwn(from, key), Bool.not(hasManyStops(stops, key))), keepsMeasured(key, from[key], target)));
120
+ if (Rec.isEmptyRecord(pairs))
121
+ return undefined;
122
+ return MeasuredPair.measure(element, Rec.map(pairs, (target, key) => ({ from: UndefinedOr.getOrThrow(from[key]), to: target })), from);
123
+ };
124
+ /** Whether a start and a target make a Measured pair (#430). */
125
+ const keepsMeasured = (key, start, target) => {
126
+ if (Predicate.isUndefined(start))
127
+ return false;
128
+ return MeasuredPair.needs(key, start, target);
129
+ };
130
+ /** An exit's name when it's one name, for its delay; `undefined` for a list or a values map. */
131
+ const singleNameOf = (name) => {
132
+ if (Predicate.isString(name))
133
+ return name;
134
+ return undefined;
135
+ };
136
+ /** The transition a name of an exit orchestrates its Variant children's keys on (#297): its group's, else the exit's. */
137
+ const transitionOfName = (exit, name) => {
138
+ const groups = exit.groups;
139
+ if (Bool.or(Predicate.isUndefined(groups), Predicate.isUndefined(name)))
140
+ return exit.transition;
141
+ return Option.match(Arr.findFirst(groups, (group) => group.name === name), {
142
+ onNone: () => exit.transition,
143
+ onSome: (group) => group.transition,
144
+ });
145
+ };
146
+ /** Whether a resolved child is an element. Only called on the client, where `HTMLElement` exists. */
147
+ const isHTMLElement = (node) => node instanceof HTMLElement;
148
+ /** The elements of what a binding's `children()` resolved: one node, a flat array, or none. */
149
+ const elementsOf = (resolved) => Arr.filter(Arr.ensure(resolved), isHTMLElement);
150
+ /** Where `el` is now. */
151
+ const placedOf = (el) => ({
152
+ el,
153
+ parent: Option.getOrUndefined(Option.fromNullOr(el.parentNode)),
154
+ next: Option.getOrUndefined(Option.fromNullOr(el.nextSibling)),
155
+ });
156
+ /** The size of the padding box `el`'s offsets are from: its offset parent's, or the viewport's. */
157
+ const containerOf = (el) => {
158
+ const parent = el.offsetParent;
159
+ if (isHTMLElement(parent) && parent !== document.body)
160
+ return { width: parent.clientWidth, height: parent.clientHeight };
161
+ return { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight };
162
+ };
163
+ /** A px length of a computed style, `0` for none. */
164
+ const pxOf = (value) => {
165
+ const px = Number.parseFloat(value);
166
+ if (Number.isNaN(px))
167
+ return 0;
168
+ return px;
169
+ };
170
+ /**
171
+ * Where `el` is now, to pop it (#277): `undefined` for one with no size of its own (an inline element,
172
+ * or an empty one) or not on the page, which isn't popped, as Motion's.
173
+ */
174
+ const popBoxOf = (el, anchors) => {
175
+ const style = getComputedStyle(el);
176
+ const width = Number.parseFloat(style.width);
177
+ const height = Number.parseFloat(style.height);
178
+ if (Bool.not(Bool.and(width > 0, height > 0)))
179
+ return undefined;
180
+ const container = containerOf(el);
181
+ // Positioned by its margin box, as its offsets are its border box's. Each edge's distance from the
182
+ // container's same edge; `anchorX` names the inline start (`"left"`) or end, which a right-to-left
183
+ // one flips, as Motion's.
184
+ const x = Bool.match((anchors.x === "right") !== (style.direction === "rtl"), { onTrue: () => "right", onFalse: () => "left" });
185
+ const xAt = Bool.match(x === "right", {
186
+ onTrue: () => container.width - el.offsetLeft - el.offsetWidth - pxOf(style.marginRight),
187
+ onFalse: () => el.offsetLeft - pxOf(style.marginLeft),
188
+ });
189
+ const yAt = Bool.match(anchors.y === "bottom", {
190
+ onTrue: () => container.height - el.offsetTop - el.offsetHeight - pxOf(style.marginBottom),
191
+ onFalse: () => el.offsetTop - pxOf(style.marginTop),
192
+ });
193
+ return { width, height, y: anchors.y, yAt, x, xAt };
194
+ };
195
+ /** Pin a leaver where `box` measured it, out of the flow, over any style of its own. */
196
+ const pin = (el, box) => {
197
+ const style = el.style;
198
+ style.setProperty("position", "absolute", "important");
199
+ style.setProperty("width", `${box.width}px`, "important");
200
+ style.setProperty("height", `${box.height}px`, "important");
201
+ style.setProperty(box.y, `${box.yAt}px`, "important");
202
+ style.setProperty(box.x, `${box.xAt}px`, "important");
203
+ // Out of the flow over what took its place, it takes none of its clicks (#486). Not Motion's: its
204
+ // popped child still takes input. It's never unpinned: a child that comes back is a new element.
205
+ style.setProperty("pointer-events", "none", "important");
206
+ };
207
+ /**
208
+ * A popped leaver moved by `by` in the page from where `box` pinned it (ADR-0048 *Amendment (#480)*):
209
+ * each pinned edge by its axis's move, a right or bottom one against it.
210
+ */
211
+ const movePin = (el, box, by) => {
212
+ const style = el.style;
213
+ style.setProperty(box.y, `${box.yAt + EDGE_BY[box.y] * by.y}px`, "important");
214
+ style.setProperty(box.x, `${box.xAt + EDGE_BY[box.x] * by.x}px`, "important");
215
+ };
216
+ /** Which way a move along the page moves a pinned edge's offset: with a left or top one, against a right or bottom one. */
217
+ const EDGE_BY = { left: 1, right: -1, top: 1, bottom: -1 };
218
+ /** The element its first child sits in, if it's one (#277's PR 5c). */
219
+ const parentElementOf = (placed) => UndefinedOr.map(UndefinedOr.map(placed[0], (first) => first.parent), (parent) => {
220
+ if (parent instanceof Element)
221
+ return parent;
222
+ return undefined;
223
+ });
224
+ /**
225
+ * The children in Motion's order for a change (#486, its `AnimatePresence`, #3746 there): `now`, with
226
+ * each of `before`, the children as they were, leavers still exiting among them, that isn't in `now`
227
+ * put back right after the staying child it followed, after the others put back there; first, when it
228
+ * followed none.
229
+ */
230
+ const orderOf = (before, now) => {
231
+ const at = new Map(Arr.map(now, (el, i) => [el, i]));
232
+ return Arr.reduce(before, { order: [...now], next: 0, back: 0 }, (acc, el) => UndefinedOr.match(at.get(el), {
233
+ onUndefined: () => {
234
+ acc.order.splice(acc.next, 0, el);
235
+ return { order: acc.order, next: acc.next + 1, back: acc.back + 1 };
236
+ },
237
+ onDefined: (i) => ({ order: acc.order, next: i + acc.back + 1, back: acc.back }),
238
+ })).order;
239
+ };
240
+ /**
241
+ * Where the leaver at `i` in `order` goes back (#486): right after the nearest child before it that's on
242
+ * the page, or before the nearest one after it; where it was, with neither.
243
+ */
244
+ const backPlaceOf = (placed, order, i) => {
245
+ const before = Arr.findLast(Arr.take(order, i), (el) => el.isConnected);
246
+ const after = Arr.findFirst(Arr.drop(order, i + 1), (el) => el.isConnected);
247
+ return Option.match(before, {
248
+ onSome: (el) => ({ el: placed.el, parent: Option.getOrUndefined(Option.fromNullOr(el.parentNode)), next: Option.getOrUndefined(Option.fromNullOr(el.nextSibling)) }),
249
+ onNone: () => Option.match(after, {
250
+ onSome: (el) => ({ el: placed.el, parent: Option.getOrUndefined(Option.fromNullOr(el.parentNode)), next: el }),
251
+ onNone: () => placed,
252
+ }),
253
+ });
254
+ };
255
+ /** Put a retained node back into the parent it left: before its old next sibling while that's still there, else at the end. */
256
+ const reinsert = (el, parent, next) => {
257
+ if (Predicate.isNotUndefined(next) && next.parentNode === parent) {
258
+ parent.insertBefore(el, next);
259
+ return;
260
+ }
261
+ parent.appendChild(el);
262
+ };
263
+ /**
264
+ * Solid 1's {@link PresenceEvents} (#257): only Motion's `onExitComplete`, read when it's called. One
265
+ * that throws is reported (`wardic.presence: onExitComplete failed`), and the presence goes on.
266
+ */
267
+ export const exitCompleteEvents = (runtime, onExitComplete) => ({
268
+ exitStart: constVoid,
269
+ exiting: constVoid,
270
+ exitComplete: () => {
271
+ const callback = onExitComplete();
272
+ if (Predicate.isUndefined(callback))
273
+ return;
274
+ try {
275
+ callback();
276
+ }
277
+ catch (defect) {
278
+ runtime.runFork(Report.failure("wardic.presence: onExitComplete failed", Cause.die(defect)));
279
+ }
280
+ },
281
+ });
282
+ /**
283
+ * The projection system as a presence asks it (#511): the provider's once its `layout` Feature is
284
+ * built, read at each call, as a presence brings no Feature; until then, what one with no layout node
285
+ * answers: no twin to cross-fade or hand back, no leaving node to keep, nothing to tell. A popped
286
+ * leaver isn't kept where it was seen across a scroll then (ADR-0048 *Amendment (#480)*): the
287
+ * projection's frame does that.
288
+ */
289
+ const presenceProjectionOf = (projection) => {
290
+ const call = (use, none) => UndefinedOr.match(projection(), { onUndefined: none, onDefined: use });
291
+ return {
292
+ notify: () => call((system) => system.notify(), constVoid),
293
+ handleLeave: (el, onDone) => call((system) => system.handleLeave(el, onDone), constFalse),
294
+ handBackWithin: (el, onDone) => call((system) => system.handBackWithin(el, onDone), Option.none),
295
+ keepLeaving: (el, taken) => call((system) => system.keepLeaving(el, taken), () => constVoid),
296
+ awaitsTwin: (el) => call((system) => system.awaitsTwin(el), constFalse),
297
+ keepSeen: (el, move) => call((system) => system.keepSeen(el, move), constVoid),
298
+ registerValues: (el, read) => call((system) => system.registerValues(el, read), () => constVoid),
299
+ rootBoxOf: (el) => call((system) => system.rootBoxOf(el), Option.none),
300
+ dropLeaver: (el) => call((system) => system.dropLeaver(el), Option.none),
301
+ };
302
+ };
303
+ /** A presence's work: see the module. */
304
+ export const makePresence = (options) => {
305
+ const { runtime, reducedMotion, positionalKeys, defaultTransition } = options;
306
+ const projection = presenceProjectionOf(options.projection);
307
+ const { commit, project } = options.renderer;
308
+ /**
309
+ * Debug-level lifecycle log for the parent-driven exit (observability
310
+ * convention): forked on the runtime, filtered out unless the logger is at
311
+ * Debug, so an exit that never removes its node — or a re-entry that interrupts
312
+ * the wrong one — is diagnosable. The per-frame commit stays silent.
313
+ */
314
+ const debug = Report.debugOf(runtime, "wardic.presence");
315
+ // The registry of live child records, keyed by their DOM element. Filled by
316
+ // register() (called from the child's spine on mount), drained as children
317
+ // leave (after their exit settles).
318
+ const registry = new Map();
319
+ // In-flight exit fibers keyed by the leaving node, so a re-entry (or this
320
+ // component's own teardown) can interrupt them. A Map, not Effect's `FiberMap` (#618): an exit's
321
+ // entry goes from inside its own `ensuring`, before its fiber has ended, and is checked right after;
322
+ // `FiberMap.remove` interrupts the fiber it removes, and its own removal waits for the fiber's end.
323
+ const exiting = new Map();
324
+ // A leaving child's parts still running (ADR-0010 *Amendment (#181)*): its exit, and the handovers
325
+ // of the twins it handed back. It goes when the count reaches 0. Every retained child that runs its
326
+ // own exit is here; a twin presence left to the projection isn't.
327
+ const pending = new Map();
328
+ // The handed-back twins of a leaving child, by it: the call that drops them, for an interrupted exit.
329
+ const handovers = new Map();
330
+ // What lets go of the twins each leaving child keeps for a late take-over (#402): called as it goes.
331
+ const lates = new Map();
332
+ // The unregistration of each exit's values with the projection.
333
+ const exitValues = new Map();
334
+ // The Wardic elements exiting inside each leaving child (#290), dropped with it.
335
+ const exitParts = new Map();
336
+ // `initial={false}` (#134): the children set up with this first render start at their
337
+ // `animate`; one that enters after it animates in.
338
+ let firstRender = true;
339
+ // The children exiting now, each told once at its end (#257): completed, or interrupted.
340
+ const leaving = new Set();
341
+ // Each retained child's place when it left (#277): a framework that clears its nodes wholesale (a
342
+ // list emptied clears its parent) takes it out mid-exit, and it goes back there.
343
+ const places = new Map();
344
+ const events = options.events;
345
+ // The presence hooks registered (#277's PR 5b), each told at its child's leave.
346
+ const watches = new Set();
347
+ // The children `mode="wait"` holds off the page now (#277), and the start of each ward inside one,
348
+ // by its element, called once the child is on the page.
349
+ let held = [];
350
+ const starts = new Map();
351
+ // `popLayout`'s leavers (#277), each where it was measured before the change: popped as it leaves,
352
+ // and kept until it's gone. Whether this change popped one, so the projection is told.
353
+ const pops = new Map();
354
+ let popped = false;
355
+ // Keys (#286, ADR-0048): each Wardic element made under this presence, told as it's made, so a
356
+ // child's key is known before what goes on the page is decided.
357
+ const made = new WeakMap();
358
+ // The latest child exiting under each key: a child back under it takes over from that one.
359
+ const keyedLeavers = new Map();
360
+ // What each element exiting has drawn, kept by its exit's frames.
361
+ const draws = new Map();
362
+ // The children entering now that take over from a leaver, each with that leaver: taken over at
363
+ // the first of their wards' mounts, or the presence's next look, whichever comes first.
364
+ const takeovers = new Map();
365
+ // Where each Wardic element in a child that took over starts: read once, at its mount.
366
+ const seeds = new WeakMap();
367
+ // The keyed leavers crossfading as twins (ADR-0010), the projection's: one taken over ends its
368
+ // leaving Follower at once (Q8: D).
369
+ const crossfades = new Set();
370
+ // Where each leaver taken over painted, it and the Wardic elements inside it, in the Root frame:
371
+ // read as the take-over is found, before the change moves anything.
372
+ const leaverBoxes = new Map();
373
+ // Whether any keyed element was made: until then, no change looks for a take-over.
374
+ let keyed = false;
375
+ /** A child's exit starts: told, and `exiting` turns on with the first. */
376
+ const leaveStarts = (el) => {
377
+ leaving.add(el);
378
+ if (Predicate.isUndefined(events))
379
+ return;
380
+ if (leaving.size === 1)
381
+ events.exiting(true);
382
+ events.exitStart();
383
+ };
384
+ /**
385
+ * A child's exit ended: with the last, `exiting` turns off, a completion is told, and the children
386
+ * `mode="wait"` held go on the page (#277), as Motion renders them after its `onExitComplete`.
387
+ */
388
+ const leaveEnds = (el, completed) => {
389
+ if (Bool.not(leaving.delete(el)))
390
+ return;
391
+ if (leaving.size > 0)
392
+ return;
393
+ UndefinedOr.map(events, (told) => {
394
+ told.exiting(false);
395
+ if (completed)
396
+ told.exitComplete();
397
+ });
398
+ // `propagate` (#277's PR 5c): the last child that left lets the parent's child go.
399
+ allLeft();
400
+ if (held.length > 0)
401
+ UndefinedOr.map(options.release, (release) => release());
402
+ };
403
+ // What `leaveAll` calls once none is left (#277's PR 5c), and where its children last were.
404
+ let onAllLeft;
405
+ let anchor;
406
+ /** `leaveAll`'s end, told once (#277's PR 5c). */
407
+ const allLeft = () => {
408
+ if (Predicate.isUndefined(onAllLeft))
409
+ return;
410
+ const done = onAllLeft;
411
+ onAllLeft = undefined;
412
+ done();
413
+ };
414
+ /** Whether `el` is inside a child held off the page (#277). */
415
+ const isHeld = (el) => Arr.some(held, (child) => child.contains(el));
416
+ const ctx = {
417
+ register: (rec) => {
418
+ registry.set(rec.element, rec);
419
+ return () => {
420
+ registry.delete(rec.element);
421
+ };
422
+ },
423
+ blocksInitial: () => options.initial() === false && firstRender,
424
+ watch: (watch) => {
425
+ watches.add(watch);
426
+ },
427
+ hold: (el, start) => {
428
+ if (Bool.not(isHeld(el)))
429
+ return undefined;
430
+ starts.set(el, start);
431
+ return () => {
432
+ starts.delete(el);
433
+ };
434
+ },
435
+ made: (el, key, twin) => {
436
+ made.set(el, { key, twin });
437
+ if (Predicate.isNotUndefined(key))
438
+ keyed = true;
439
+ },
440
+ takeOverOf: (el) => {
441
+ settleTakeovers();
442
+ const seed = seeds.get(el);
443
+ seeds.delete(el);
444
+ return seed;
445
+ },
446
+ };
447
+ // Commit a projected value-map onto a retained node via the Renderer.
448
+ const commitValues = (el, values) => {
449
+ const patch = project(values);
450
+ commit(el, patch);
451
+ };
452
+ // Remove a retained node from the DOM + drop its registration + clear its
453
+ // in-flight fiber bookkeeping. Idempotent. `completed`: its exit ended on its own (#257).
454
+ const finishExit = (el, completed = true) => {
455
+ exiting.delete(el);
456
+ registry.delete(el);
457
+ draws.delete(el);
458
+ crossfades.delete(el);
459
+ leaverBoxes.delete(el);
460
+ // No longer one a child back under its key takes over from (#286).
461
+ UndefinedOr.map(keyOf(el), (key) => {
462
+ if (keyedLeavers.get(key) === el)
463
+ keyedLeavers.delete(key);
464
+ });
465
+ pending.delete(el);
466
+ handovers.delete(el);
467
+ UndefinedOr.map(lates.get(el), (forget) => forget());
468
+ lates.delete(el);
469
+ places.delete(el);
470
+ // A popped leaver is out of the flow: its going moves nothing.
471
+ const moves = Bool.and(el.isConnected, Bool.not(pops.delete(el)));
472
+ const unregister = exitValues.get(el);
473
+ exitValues.delete(el);
474
+ if (Predicate.isNotUndefined(unregister))
475
+ unregister();
476
+ // The elements inside it that exited with it go with it (#290): their records, and their values.
477
+ Arr.forEach(UndefinedOr.match(exitParts.get(el), { onUndefined: () => NO_PARTS, onDefined: identity }), (part) => {
478
+ registry.delete(part);
479
+ draws.delete(part);
480
+ UndefinedOr.map(exitValues.get(part), (unregisterPart) => unregisterPart());
481
+ exitValues.delete(part);
482
+ });
483
+ exitParts.delete(el);
484
+ el.remove();
485
+ // Its siblings take the space it leaves (#277): a `layout` one animates there, as Motion's do.
486
+ if (Bool.and(moves, affectsLayout()))
487
+ projection.notify();
488
+ // Told once the node is gone, as Motion's `onExitComplete` finds it (#257).
489
+ leaveEnds(el, completed);
490
+ };
491
+ // One of a leaving child's parts ended (#181): it goes with the last. A child already removed
492
+ // (an interrupted exit's fiber ending after) is ignored.
493
+ const partDone = (el) => {
494
+ const left = pending.get(el);
495
+ if (Predicate.isUndefined(left))
496
+ return;
497
+ if (left > 1) {
498
+ pending.set(el, left - 1);
499
+ return;
500
+ }
501
+ finishExit(el);
502
+ };
503
+ // Interrupt an in-flight exit for `el` (re-entry / teardown) and remove the
504
+ // retained node, the twins it handed back dropped with it. Idempotent.
505
+ const interruptExit = (el) => {
506
+ // Told first, as interrupted: the exit's fiber, interrupted below, ends at once through
507
+ // `partDone`, which would tell it completed (#257).
508
+ leaveEnds(el, false);
509
+ const fiber = exiting.get(el);
510
+ if (Predicate.isNotUndefined(fiber)) {
511
+ debug("exit: interrupt");
512
+ // Nothing waits on its end: interrupted here, not by a fiber forked for it (#618, L2).
513
+ fiber.interruptUnsafe();
514
+ }
515
+ const drop = handovers.get(el);
516
+ if (Predicate.isNotUndefined(drop))
517
+ drop();
518
+ finishExit(el, false);
519
+ };
520
+ // A leaving child that isn't a twin (ADR-0010 *Amendment (#181)*): it hands back the twins inside
521
+ // it, then runs its own exit and the exits inside it, and goes once all have ended. A plain child
522
+ // (not a Wardic element, no `rec`) runs only those inside it (#392), as Motion's presence child does.
523
+ const leave = (el, rec, custom, inside, holds) => {
524
+ // A keyed one is what a child back under its key takes over from (#286), the latest the one.
525
+ UndefinedOr.map(keyOf(el), (key) => keyedLeavers.set(key, el));
526
+ const drop = projection.handBackWithin(el, () => partDone(el));
527
+ // Its parts: its exit, each hook holding it (#277's PR 5b), and the handovers of the twins it hands back.
528
+ pending.set(el, 1 + holds);
529
+ if (Option.isSome(drop)) {
530
+ handovers.set(el, drop.value);
531
+ pending.set(el, 2 + holds);
532
+ debug("leave: hands back its twins");
533
+ }
534
+ // The twins nobody took over stay a later twin's to take over while it's on the page (#402).
535
+ lates.set(el, projection.keepLeaving(el, (dropLate) => takenLate(el, dropLate)));
536
+ tellLeave(el, inside, true);
537
+ driveExit(el, rec, custom);
538
+ };
539
+ // A twin in a leaving child taken over late (ADR-0010 *Amendment (#402)*): one more of its parts,
540
+ // ended with that handover, and dropped with its others by an interrupted exit. Its own exit runs on:
541
+ // the handover draws the twin over it.
542
+ const takenLate = (el, drop) => {
543
+ const left = pending.get(el);
544
+ if (Predicate.isUndefined(left)) {
545
+ drop();
546
+ return constVoid;
547
+ }
548
+ pending.set(el, left + 1);
549
+ const before = handovers.get(el);
550
+ handovers.set(el, () => {
551
+ UndefinedOr.map(before, (dropBefore) => dropBefore());
552
+ drop();
553
+ });
554
+ debug("leave: a twin taken over late");
555
+ return () => partDone(el);
556
+ };
557
+ /**
558
+ * The Wardic elements inside a leaving child (#290), in document order, each running its own exit
559
+ * with the child's: every registered one but a twin, whose crossfade replaces its exit (#181).
560
+ */
561
+ const partsOf = (el) => Arr.filter(registeredWithin(el), isPart);
562
+ /**
563
+ * The records of the elements inside `el`, in document order, `undefined` for one not registered:
564
+ * found by walking its own elements (#392), as many steps as it has, not as the presence has records.
565
+ */
566
+ const registeredWithin = (el) => {
567
+ if (registry.size === 0)
568
+ return NO_RECORDS;
569
+ return Arr.map(Arr.fromIterable(el.getElementsByTagName("*")), (inner) => registry.get(inner));
570
+ };
571
+ /** A registered element but a twin. */
572
+ const isPart = (part) => {
573
+ if (Predicate.isUndefined(part))
574
+ return false;
575
+ return Bool.not(treeOf(part).twin);
576
+ };
577
+ /**
578
+ * Whether a leaving child stays to exit (#392): a Wardic element, or a plain one with something
579
+ * inside it to wait for, a Wardic element (an exit to run, a twin to hand back) or a hook's hold.
580
+ */
581
+ const retains = (el) => {
582
+ if (registry.has(el))
583
+ return true;
584
+ if (holdsIn(el))
585
+ return true;
586
+ return registersWithin(el);
587
+ };
588
+ /** Whether a Wardic element made under this presence is inside `el`. */
589
+ const registersWithin = (el) => Arr.some(registeredWithin(el), Predicate.isNotUndefined);
590
+ /**
591
+ * A leaving child's exit, and the exits inside it (#290), as Motion's `animateVariant` runs them:
592
+ * each element's own exit, its Variant children's on the name it hands down, in its exit
593
+ * orchestration (`delayChildren`, the stagger, `when`), and every other element's from the leave.
594
+ * A plain child (no `rec`) has no exit of its own: the elements inside it are the roots (#392).
595
+ * The child goes once all of them, and the handovers of the twins it handed back, have ended.
596
+ */
597
+ const driveExit = (el, rec, custom) => {
598
+ const parts = partsOf(el);
599
+ exitParts.set(el, Arr.map(parts, (part) => part.element));
600
+ const own = UndefinedOr.match(rec, { onUndefined: () => NO_OWN, onDefined: Arr.of });
601
+ const byElement = new Map(Arr.map([...own, ...parts], (r) => [r.element, r]));
602
+ // The nearest element inside the child its Variant children join: one that provides a context.
603
+ const providerOf = (node) => {
604
+ if (node === null)
605
+ return undefined;
606
+ const found = byElement.get(node);
607
+ if (Predicate.isNotUndefined(found) && treeOf(found).provides)
608
+ return found;
609
+ if (node === el)
610
+ return undefined;
611
+ return providerOf(node.parentElement);
612
+ };
613
+ const joinsTo = new Map();
614
+ Arr.forEach(parts, (part) => {
615
+ if (Bool.not(treeOf(part).joins))
616
+ return;
617
+ UndefinedOr.map(providerOf(part.element.parentElement), (provider) => joinsTo.set(part, provider));
618
+ });
619
+ const joinersOf = (provider) => Arr.filter(parts, (part) => joinsTo.get(part) === provider);
620
+ const nodeOf = (node, inherited) => {
621
+ const exit = node.exitOf(custom, inherited);
622
+ return { rec: node, exit, kids: Arr.map(joinersOf(node), (kid) => nodeOf(kid, exit.name)) };
623
+ };
624
+ // The child's own tree, if it's a Wardic element, and each element inside it that joins nothing
625
+ // inside it, from the leave.
626
+ const roots = [
627
+ ...Arr.map(own, (r) => nodeOf(r, undefined)),
628
+ ...Arr.map(Arr.filter(parts, (part) => Bool.not(joinsTo.has(part))), (part) => nodeOf(part, undefined)),
629
+ ];
630
+ if (Bool.not(Arr.some(roots, busy))) {
631
+ debug("exit: immediate (no target)");
632
+ partDone(el);
633
+ return;
634
+ }
635
+ // One `wardic.presence.exit` span spans the whole exit, from the leave to the last part's end.
636
+ // A failed run is logged and reported (ADR-0030, decision 4); the node is removed either way.
637
+ const fiber = runtime.runFork(Effect.all(Arr.map(roots, (root) => runOf(root, NO_DELAY)), { concurrency: "unbounded", discard: true }).pipe(Effect.tapCause((cause) => Report.failure("wardic.presence: an exit failed", cause)), Effect.ensuring(Effect.sync(() => partDone(el))), Effect.withSpan("wardic.presence.exit", { attributes: { parts: parts.length + own.length } },
638
+ // No call-site stack (ADR-0040, decision 2): pipeable, it's the third argument.
639
+ { captureStackTrace: false })));
640
+ exiting.set(el, fiber);
641
+ };
642
+ /**
643
+ * A node's exit and its Variant children's (#290), Motion's `animateVariant`: with `when`, one after
644
+ * the other, the children's delays from 0; else together, the children's from `delay`.
645
+ */
646
+ const runOf = (node, delay) => {
647
+ // A list's names each run on their own (#297's PR 2): each name's keys and its children's, in that
648
+ // name's own `when`.
649
+ const groups = node.exit.groups;
650
+ if (Predicate.isNotUndefined(groups)) {
651
+ const first = UndefinedOr.match(groups[0], { onUndefined: constUndefined, onDefined: (group) => group.name });
652
+ return Effect.all(Arr.map(groups, (group) => runName(node, group.name, delay, group.name === first)), { concurrency: "unbounded", discard: true });
653
+ }
654
+ const own = exitOf(node.rec, node.exit, delay);
655
+ if (node.kids.length === 0)
656
+ return own;
657
+ const n = node.kids.length;
658
+ // Each name orchestrates the children's keys of that name (#297, Motion's `animateVariant` a name):
659
+ // its own transition's delay and stagger, else the exit's.
660
+ const slot = (i) => (name) => {
661
+ const s = staggerOf(transitionOfName(node.exit, name));
662
+ return childDelayOf(s, i, n);
663
+ };
664
+ const kidsFrom = (from) => Effect.all(Arr.map(node.kids, (kid, i) => runOf(kid, (name) => from(name) + slot(i)(name))), { concurrency: "unbounded", discard: true });
665
+ // `when` for a list as a whole, meanwhile (#297's PR 1): the exit's, its last name's that sets it.
666
+ const when = UndefinedOr.map(node.exit.transition, (t) => t.when);
667
+ if (when === "beforeChildren")
668
+ return Effect.andThen(own, kidsFrom(NO_DELAY));
669
+ if (when === "afterChildren")
670
+ return Effect.andThen(kidsFrom(NO_DELAY), own);
671
+ return Effect.all([own, kidsFrom(delay)], { concurrency: "unbounded", discard: true });
672
+ };
673
+ /**
674
+ * One name of a list's exit (#297's PR 2, Motion's `animateVariant` a name): the element's keys of that
675
+ * name, and its Variant children's, one after the other with that name's `when`, else together. A
676
+ * child whose exit isn't the list runs it whole, under the list's first name.
677
+ */
678
+ const runName = (node, name, delay, first) => {
679
+ const own = exitOf(node.rec, node.exit, delay, name);
680
+ const n = node.kids.length;
681
+ if (n === 0)
682
+ return own;
683
+ const slot = (i) => (of) => {
684
+ const s = staggerOf(transitionOfName(node.exit, of));
685
+ return childDelayOf(s, i, n);
686
+ };
687
+ const kidsFrom = (from) => Effect.all(Arr.map(node.kids, (kid, i) => {
688
+ const at = (of) => from(of) + slot(i)(of);
689
+ if (Predicate.isNotUndefined(kid.exit.groups))
690
+ return runName(kid, name, at, first);
691
+ if (first)
692
+ return runOf(kid, at);
693
+ return Effect.void;
694
+ }), { concurrency: "unbounded", discard: true });
695
+ const when = UndefinedOr.map(transitionOfName(node.exit, name), (t) => t.when);
696
+ if (when === "beforeChildren")
697
+ return Effect.andThen(own, kidsFrom(NO_DELAY));
698
+ if (when === "afterChildren")
699
+ return Effect.andThen(kidsFrom(NO_DELAY), own);
700
+ return Effect.all([own, kidsFrom(delay)], { concurrency: "unbounded", discard: true });
701
+ };
702
+ /**
703
+ * One element's own exit on its retained node, `delay` seconds in (#290): a Retarget's legs (#277),
704
+ * on the exit's own transition, else the element's, its positional keys snapping under reduced
705
+ * motion (ADR-0029) unless it opts out. Nothing to run for an empty one.
706
+ */
707
+ const exitOf = (rec, exit, delay, only) => {
708
+ const to = exit.values;
709
+ if (isEmpty(to))
710
+ return Effect.void;
711
+ const { from, stops, commitFrame, velocities, el } = preparedOf(rec, exit);
712
+ // Its keys start with the velocity their frames gave them (#464, Motion's): 0 for one at rest.
713
+ const moving = velocitiesOf(UndefinedOr.match(rec.velocities, { onUndefined: () => NO_VELOCITIES, onDefined: (of) => of() }));
714
+ // A list's exit by name (#297): each name's keys on its own transition, at its own delay; one
715
+ // name's alone when its `when` orders it (#297's PR 2).
716
+ // The leaver's own, under its nearest WardicConfig (#434), else the presence's.
717
+ const reduce = UndefinedOr.match(rec.reducedMotion, { onUndefined: reducedMotion, onDefined: (own) => own() });
718
+ // Skipped (#468): every key lands at its end on the first tick, and the element leaves then.
719
+ const skipped = UndefinedOr.match(rec.skipAnimations, { onUndefined: constFalse, onDefined: (own) => own() });
720
+ // Measured pairs (#430): an exit from `auto` to 0 measures both ends, as a Retarget does, unless
721
+ // reduced motion snaps them or the exit is skipped.
722
+ const measured = Bool.match(Bool.or(reduce, skipped), { onTrue: constUndefined, onFalse: () => exitMeasuredOf(el, from, to, stops) });
723
+ const legs = UndefinedOr.match(exit.groups, {
724
+ onUndefined: () => legsOf(from, to, delayedBy(exit.transition, delay(singleNameOf(exit.name))), reduce, skipped, positionalKeys, defaultTransition, moving, undefined, stops, measured),
725
+ onDefined: (groups) => Arr.flatMap(Arr.filter(groups, (group) => Bool.or(Predicate.isUndefined(only), group.name === only)), (group) => legsOf(from, group.values, delayedBy(group.transition, delay(group.name)), reduce, skipped, positionalKeys, defaultTransition, moving, undefined, stops, measured)),
726
+ });
727
+ return Effect.all(Arr.map(legs, (leg) => exitRunOf(leg, el, commitFrame, velocities)), { concurrency: "unbounded", discard: true });
728
+ };
729
+ // Each exit's start, made once though a list's names run its keys apart (#297's PR 2).
730
+ const prepared = new WeakMap();
731
+ /** An element's exit made ready to run: where it starts, and what each frame commits. */
732
+ const preparedOf = (rec, exit) => {
733
+ const known = prepared.get(exit);
734
+ if (Predicate.isNotUndefined(known))
735
+ return known;
736
+ const el = rec.element;
737
+ const to = exit.values;
738
+ // Seeded from the element's last snapshot, so its exit departs continuously. A key it never
739
+ // animated starts from its Base value's start links (ADR-0022), else at its target.
740
+ const snapshot = rec.snapshot.current;
741
+ const startOf = (key, target) => UndefinedOr.match(UndefinedOr.match(rec.startOf, { onUndefined: constUndefined, onDefined: (of) => of(key, target) }), {
742
+ onUndefined: () => target,
743
+ onDefined: identity,
744
+ });
745
+ const seeded = {
746
+ ...snapshot,
747
+ ...Rec.map(Rec.filter(to, (_, key) => Predicate.isUndefined(snapshot[key])), (target, key) => startOf(key, target)),
748
+ };
749
+ // Its Keyframes (#429) start at their first stop, a `null` one where the key is.
750
+ const { from, stops } = UndefinedOr.match(exit.keyframes, {
751
+ onUndefined: () => ({ from: seeded, stops: undefined }),
752
+ onDefined: (keyframes) => keyframesFrom(seeded, to, keyframes),
753
+ });
754
+ // The merged latest value-map, so each committed frame carries every key.
755
+ const latest = { ...from };
756
+ // What the exit has drawn, for the projection (ADR-0010 *Amendment (#181)*): the twins handed back
757
+ // follow it. Its last snapshot until the first frame commits.
758
+ const drawn = { ...from };
759
+ UndefinedOr.map(exitValues.get(el), (unregister) => unregister());
760
+ exitValues.set(el, projection.registerValues(el, () => drawn));
761
+ // And how fast each key moves (#286): a child back under its key starts with it.
762
+ const velocities = {};
763
+ draws.set(el, { values: drawn, velocities });
764
+ const commitFrame = (frame) => {
765
+ Object.assign(latest, frame.value);
766
+ commitValues(el, latest);
767
+ Object.assign(drawn, latest);
768
+ return undefined;
769
+ };
770
+ const made = { el, from, stops, commitFrame, velocities };
771
+ prepared.set(exit, made);
772
+ return made;
773
+ };
774
+ // The children present at the last change, and where each was, to retain one as it leaves.
775
+ let previous = [];
776
+ // The children as the last change left them (#486): those on the page, the leavers among them.
777
+ let rendered = [];
778
+ // Teardown: interrupt every in-flight exit + remove retained nodes, the twins they handed back
779
+ // dropped with them (no leaks). Every child running its own exit is in `pending`.
780
+ const teardown = () => {
781
+ debug("teardown", { inflight: exiting.size, retained: pending.size });
782
+ // A held child never goes on the page, nor do its wards start (#277): with none held, the exits
783
+ // ended below release nothing, so the binding isn't rendered again as it's disposed.
784
+ held = [];
785
+ starts.clear();
786
+ // The hooks still waiting go with it, told nothing left (#277's PR 5b).
787
+ Arr.forEach(Arr.fromIterable(watches), (watch) => watch.gone());
788
+ watches.clear();
789
+ // Each retained child, a leave waiting for its task's end (#482) among them.
790
+ Arr.forEach(Arr.fromIterable(new Set([...pending.keys(), ...exiting.keys()])), (el) => interruptExit(el));
791
+ // A crossfading leaver is the projection's, not in `pending`: its exit ends here too, uncompleted (#257).
792
+ Arr.forEach(Arr.fromIterable(leaving), (el) => leaveEnds(el, false));
793
+ };
794
+ /** Whether a hook inside `el` holds it as it leaves (#277's PR 5b). */
795
+ const holdsIn = (el) => Arr.some(watchesIn(el), (watch) => watch.holds);
796
+ /** A record whose element is off the page, dropped; a leaver's is put back first, so it stays. */
797
+ const dropDetached = (el) => {
798
+ if (el.isConnected)
799
+ return;
800
+ registry.delete(el);
801
+ };
802
+ /** Pop a leaver `popLayout` measured. */
803
+ const popOut = (el) => {
804
+ const box = pops.get(el);
805
+ if (Predicate.isUndefined(box))
806
+ return;
807
+ pin(el, box);
808
+ // Where it was seen, through the page's scroll at this change: a router's to the top (#480).
809
+ projection.keepSeen(el, (by) => movePin(el, box, by));
810
+ popped = true;
811
+ };
812
+ /**
813
+ * Measure each child leaving in this change that stays to exit, before the change is applied (#277):
814
+ * a plain one too, with something inside it to wait for (#392).
815
+ */
816
+ const measureLeavers = (resolved) => {
817
+ const kept = new Set(elementsOf(resolved));
818
+ // Its anchors now (#442).
819
+ const anchors = {
820
+ x: UndefinedOr.match(UndefinedOr.map(options.anchorX, (read) => read()), { onUndefined: () => "left", onDefined: identity }),
821
+ y: UndefinedOr.match(UndefinedOr.map(options.anchorY, (read) => read()), { onUndefined: () => "top", onDefined: identity }),
822
+ };
823
+ Arr.forEach(previous, (placed) => {
824
+ if (kept.has(placed.el))
825
+ return;
826
+ if (Bool.not(retains(placed.el)))
827
+ return;
828
+ UndefinedOr.map(popBoxOf(placed.el, anchors), (box) => pops.set(placed.el, box));
829
+ });
830
+ };
831
+ /** Put a retained child back where it was, if a framework took it out. */
832
+ const putBack = (placed) => {
833
+ if (placed.el.parentNode !== null)
834
+ return;
835
+ UndefinedOr.map(placed.parent, (parent) => reinsert(placed.el, parent, placed.next));
836
+ };
837
+ /** A child that left: retained at `back` (#486), and exiting, unless it's leaving already. */
838
+ const left = (placed, back) => {
839
+ const el = placed.el;
840
+ const rec = registry.get(el);
841
+ // The presence hooks inside it (#277's PR 5b): told it left; `usePresence`'s hold it until released.
842
+ const inside = watchesIn(el);
843
+ const holds = Arr.filter(inside, (watch) => watch.holds).length;
844
+ // A plain child (not a Wardic element) with nothing inside it to wait for, no Wardic element
845
+ // (an exit to run, a twin to hand back) and no hook holding it, is gone at once (#257, #392).
846
+ if (Bool.and(Predicate.isUndefined(rec), holds === 0)) {
847
+ if (Bool.not(registersWithin(el))) {
848
+ if (Bool.not(leaving.has(el))) {
849
+ leaveStarts(el);
850
+ tellLeave(el, inside, false);
851
+ leaveEnds(el, true);
852
+ }
853
+ return;
854
+ }
855
+ }
856
+ if (Bool.or(exiting.has(el), pending.has(el)))
857
+ return;
858
+ leaveStarts(el);
859
+ // RE-INSERT: Solid's branch disposal may have already removed the node. Put it back, so the
860
+ // parent-driven exit has a mounted node to animate: at `back`, moved there if Solid left it in.
861
+ UndefinedOr.map(back.parent, (parent) => reinsert(el, parent, back.next));
862
+ places.set(el, placedOf(el));
863
+ // `popLayout` (#277): out of the flow where it was, so the children after it take their places.
864
+ popOut(el);
865
+ // A twin it is or holds left with none to take it over yet (ADR-0010 *Amendment (#482)*): its
866
+ // partner may arrive later in this update, as Solid runs a presence before the children it mounts.
867
+ // So it's decided at the task's end, before a frame, and stays on the page till then, an exit-less
868
+ // one too, as Motion keeps its relegated leaver until `postRender`.
869
+ if (projection.awaitsTwin(el)) {
870
+ // Keyed, it's what a child back under its key in this update takes over from (#286), meanwhile too.
871
+ UndefinedOr.map(keyOf(el), (key) => keyedLeavers.set(key, el));
872
+ decideAtTaskEnd(el, () => decideLeave(el, rec, inside, holds));
873
+ return;
874
+ }
875
+ decideLeave(el, rec, inside, holds);
876
+ };
877
+ /** A leave decided at the task's end (#482): kept as `exiting`, so a re-entry or the teardown interrupts it. */
878
+ const decideAtTaskEnd = (el, decide) => {
879
+ const fiber = runtime.runFork(Microtask.next.pipe(Effect.andThen(Effect.sync(() => {
880
+ exiting.delete(el);
881
+ decide();
882
+ }))));
883
+ exiting.set(el, fiber);
884
+ };
885
+ /** What a retained leaver does: crossfade onto its twin, or run its exit, or hand back the twins inside it. */
886
+ const decideLeave = (el, rec, inside, holds) => {
887
+ // A plain child (#392): retained, as Motion's presence child, until the exits inside it, the
888
+ // handovers of its twins and the hooks holding it (#277's PR 5b) have all ended.
889
+ if (Predicate.isUndefined(rec)) {
890
+ leave(el, undefined, customNow(), inside, holds);
891
+ return;
892
+ }
893
+ // Shared-element crossfade (ADR-0010): if the projection has a live twin (Lead) to crossfade
894
+ // toward, defer to it — it drives the retained node as a leaving Follower and calls onDone
895
+ // (-> finishExit) on the lead's settle. Otherwise run the normal exit animation. A crossfading
896
+ // child goes with its handover: the hooks inside it are told, but don't hold it.
897
+ const crossfaded = projection.handleLeave(el, () => finishExit(el));
898
+ if (crossfaded) {
899
+ debug("leave: crossfade (deferred to projection)");
900
+ tellLeave(el, inside, false);
901
+ // A keyed one is what a child back under its key takes over from (#286), its Follower ended.
902
+ UndefinedOr.map(keyOf(el), (key) => {
903
+ keyedLeavers.set(key, el);
904
+ crossfades.add(el);
905
+ });
906
+ return;
907
+ }
908
+ // Its exit, resolved now (#277): with the presence's `custom` when it has one, else the child's last.
909
+ leave(el, rec, customNow(), inside, holds);
910
+ };
911
+ /** The presence hooks inside `el` (#277's PR 5b): those whose element it holds. */
912
+ const watchesIn = (el) => Arr.filter(Arr.fromIterable(watches), (watch) => UndefinedOr.match(watch.element(), { onUndefined: constFalse, onDefined: (at) => el.contains(at) }));
913
+ /**
914
+ * Tell the hooks inside a leaving child it left (#277's PR 5b), with the presence's `custom`. With
915
+ * `counted`, each that holds it is one of its parts, ended by its release (once). A callback that
916
+ * throws is reported, and lets the child go.
917
+ */
918
+ const tellLeave = (el, inside, counted) => {
919
+ const custom = customNow();
920
+ Arr.forEach(inside, (watch) => {
921
+ watches.delete(watch);
922
+ let released = false;
923
+ const release = () => {
924
+ if (released)
925
+ return;
926
+ released = true;
927
+ if (Bool.and(counted, watch.holds))
928
+ partDone(el);
929
+ };
930
+ try {
931
+ watch.leave(custom, release);
932
+ }
933
+ catch (defect) {
934
+ runtime.runFork(Report.failure("wardic.presence: a usePresence callback failed", Cause.die(defect)));
935
+ release();
936
+ }
937
+ });
938
+ };
939
+ /** A hook whose element left the page some other way, dropped (#277's PR 5b): not one a held child holds. */
940
+ const dropDetachedWatch = (watch) => {
941
+ UndefinedOr.map(watch.element(), (at) => {
942
+ if (Bool.or(at.isConnected, isHeld(at)))
943
+ return;
944
+ watches.delete(watch);
945
+ watch.gone();
946
+ });
947
+ };
948
+ // --- Keys (#286, ADR-0048) ------------------------------------------------
949
+ /** An element's `key`, told as it was made: `undefined` for one with none, or not a Wardic element. */
950
+ const keyOf = (el) => UndefinedOr.map(made.get(el), (m) => m.key);
951
+ /**
952
+ * Where a Wardic element is drawn: what its exit has drawn, if it's exiting, over its last values;
953
+ * else its last values, at the velocities its own animation left them.
954
+ */
955
+ const drawnOf = (rec) => UndefinedOr.match(draws.get(rec.element), {
956
+ onUndefined: () => ({
957
+ values: valuesDrawn(rec.snapshot.current),
958
+ velocities: UndefinedOr.match(rec.velocities, { onUndefined: () => NO_VELOCITIES, onDefined: (of) => ({ ...of() }) }),
959
+ }),
960
+ onDefined: (drawn) => ({ values: valuesDrawn({ ...rec.snapshot.current, ...drawn.values }), velocities: { ...drawn.velocities } }),
961
+ });
962
+ /** The Wardic elements made under this presence inside `el`, in document order, but the twins (#181). */
963
+ const madeWithin = (el) => Arr.filter(Arr.fromIterable(el.querySelectorAll("*")), (inner) => UndefinedOr.match(made.get(inner), { onUndefined: constFalse, onDefined: (m) => Bool.not(m.twin) }));
964
+ /**
965
+ * The children entering in this change that take over from a leaver: one with the key of a child
966
+ * exiting, or of one leaving in this change (Motion keeps an element whose key stays).
967
+ */
968
+ const findTakeovers = (resolved) => {
969
+ const onPage = new Set(Arr.map(previous, (placed) => placed.el));
970
+ const now = elementsOf(resolved);
971
+ const kept = new Set(now);
972
+ // The keyed children leaving in this change, by key, over the ones exiting already.
973
+ const byKey = new Map(keyedLeavers);
974
+ Arr.forEach(previous, (placed) => {
975
+ if (Bool.or(kept.has(placed.el), Bool.not(registry.has(placed.el))))
976
+ return;
977
+ UndefinedOr.map(keyOf(placed.el), (key) => byKey.set(key, placed.el));
978
+ });
979
+ if (byKey.size === 0)
980
+ return;
981
+ Arr.forEach(now, (el) => {
982
+ if (onPage.has(el))
983
+ return;
984
+ UndefinedOr.map(keyOf(el), (key) => UndefinedOr.map(byKey.get(key), (leaver) => {
985
+ if (leaver === el)
986
+ return;
987
+ takeovers.set(el, leaver);
988
+ if (Bool.not(leaverBoxes.has(leaver)))
989
+ leaverBoxes.set(leaver, boxesOf(leaver));
990
+ }));
991
+ });
992
+ };
993
+ /** Where a leaver and the Wardic elements inside it paint now, in the Root frame: each one on the page. */
994
+ const boxesOf = (leaver) => {
995
+ const boxes = new Map();
996
+ Arr.forEach([leaver, ...Arr.map(partsOf(leaver), (part) => part.element)], (el) => Option.map(projection.rootBoxOf(el), (box) => boxes.set(el, box)));
997
+ return boxes;
998
+ };
999
+ /** The take-overs found, each done once: at the first of the child's wards' mounts, or the presence's next look. */
1000
+ const settleTakeovers = () => {
1001
+ if (takeovers.size === 0)
1002
+ return;
1003
+ const due = Arr.fromIterable(takeovers);
1004
+ takeovers.clear();
1005
+ Arr.forEach(due, ([el, leaver]) => takeOver(el, leaver));
1006
+ };
1007
+ // Children taken over in the change they left in: they never start an exit.
1008
+ const takenOver = new WeakSet();
1009
+ /**
1010
+ * `el` takes over from `leaver`: each Wardic element in it starts where the one it pairs with in
1011
+ * the leaver is drawn, the child itself with the leaver, and those inside in document order when
1012
+ * the two have the same shape (as many, each pair the same tag). The leaver goes at once. An exiting
1013
+ * one's exit ends, uncompleted, as an interrupted one's does (Motion tells no completion for a key
1014
+ * back); one leaving in this change never starts its exit, nor are its hooks told it left.
1015
+ */
1016
+ const takeOver = (el, leaver) => {
1017
+ const from = registry.get(leaver);
1018
+ // Gone since (its exit ended): the child enters as any other.
1019
+ if (Predicate.isUndefined(from))
1020
+ return;
1021
+ const before = partsOf(leaver);
1022
+ const after = madeWithin(el);
1023
+ // Each as drawn, and where it painted: a layout node moves from there (#286's PR 2).
1024
+ const boxes = UndefinedOr.match(leaverBoxes.get(leaver), { onUndefined: () => NO_BOXES, onDefined: identity });
1025
+ leaverBoxes.delete(leaver);
1026
+ const seedOf = (rec) => ({ ...drawnOf(rec), box: boxes.get(rec.element) });
1027
+ const paired = sameShape(Arr.map(before, (part) => part.element), after);
1028
+ if (paired)
1029
+ Arr.forEach(Arr.zip(before, after), ([part, into]) => seeds.set(into, seedOf(part)));
1030
+ debug("leave: taken over", { parts: before.length, paired });
1031
+ // A twin crossfading out (Q8: D): its leaving Follower goes at once, uncompleted, and the new
1032
+ // node's handover fades on from where it had faded to, as Motion's same element would.
1033
+ if (crossfades.has(leaver)) {
1034
+ leaveEnds(leaver, false);
1035
+ seeds.set(el, { ...seedOf(from), fade: Option.getOrUndefined(projection.dropLeaver(leaver)) });
1036
+ return;
1037
+ }
1038
+ seeds.set(el, seedOf(from));
1039
+ // Retained, or its leave waiting for its task's end (#482).
1040
+ if (Bool.or(pending.has(leaver), exiting.has(leaver))) {
1041
+ interruptExit(leaver);
1042
+ return;
1043
+ }
1044
+ // Leaving in this change: it goes as Solid took it, its records and hooks with it.
1045
+ takenOver.add(leaver);
1046
+ pops.delete(leaver);
1047
+ Arr.forEach([from, ...before], (rec) => registry.delete(rec.element));
1048
+ Arr.forEach(watchesIn(leaver), (watch) => {
1049
+ watches.delete(watch);
1050
+ watch.gone();
1051
+ });
1052
+ };
1053
+ const present = (current) => {
1054
+ const now = elementsOf(current);
1055
+ const kept = new Set(now);
1056
+ // A child entering pushes its siblings (#442): not on the page at the last change, the first one
1057
+ // included, so a presence mounting moves a `layout` element after it, as Motion's re-render does.
1058
+ const wasThere = new Set(Arr.map(previous, (placed) => placed.el));
1059
+ const entered = Arr.some(now, (el) => Bool.not(wasThere.has(el)));
1060
+ // The take-overs found as these children went on the page (#286), before any leaves: a child
1061
+ // taken over in the change it left in doesn't leave.
1062
+ if (takeovers.size > 0) {
1063
+ Arr.forEach(Arr.fromIterable(takeovers.keys()), (el) => {
1064
+ if (Bool.not(kept.has(el)))
1065
+ takeovers.delete(el);
1066
+ });
1067
+ settleTakeovers();
1068
+ }
1069
+ // The children that left go back in Motion's order (#486): each right after the staying child it
1070
+ // followed before the change, after the leavers back there already; first, when it followed none.
1071
+ // Leavers from earlier changes, still exiting, keep their places in it.
1072
+ const gone = new Map(Arr.map(Arr.filter(previous, (placed) => Bool.and(Bool.not(kept.has(placed.el)), Bool.not(takenOver.has(placed.el)))), (placed) => [placed.el, placed]));
1073
+ const before = Arr.filter(rendered, (el) => Bool.or(Bool.or(kept.has(el), gone.has(el)), Bool.and(el.isConnected, Bool.not(takenOver.has(el)))));
1074
+ const listed = new Set(before);
1075
+ const order = orderOf(Arr.appendAll(before, Arr.filter(Arr.map(previous, (placed) => placed.el), (el) => Bool.not(listed.has(el)))), now);
1076
+ Arr.forEach(order, (el, i) => UndefinedOr.map(gone.get(el), (placed) => left(placed, backPlaceOf(placed, order, i))));
1077
+ rendered = Arr.filter(order, (el) => el.isConnected);
1078
+ // A child still exiting that the framework took out since (a list emptied) goes back too.
1079
+ Arr.forEach(Arr.fromIterable(places.values()), putBack);
1080
+ previous = Arr.map(now, placedOf);
1081
+ // Where its children are (#277's PR 5c): a parent presence finds it inside its leaving child by it.
1082
+ if (now.length > 0)
1083
+ anchor = parentElementOf(previous);
1084
+ // A record whose element left the page some other way (its own control flow, inside a child that
1085
+ // stays) is dropped (#290): nothing exits it, and nothing else would.
1086
+ Arr.forEach(Arr.fromIterable(registry.keys()), dropDetached);
1087
+ Arr.forEach(Arr.fromIterable(watches), dropDetachedWatch);
1088
+ // A popped leaver moved its siblings (#277), and so did a child entering (#442): a `layout` one
1089
+ // animates into the space, as Motion's presence re-renders its children then.
1090
+ if (Bool.and(Bool.or(popped, entered), affectsLayout()))
1091
+ projection.notify();
1092
+ popped = false;
1093
+ // The wards inside the children held until now start, the children on the page (#277). Held
1094
+ // children go on together, so none is left held then. (A ward started while its child is held
1095
+ // would only wait again: the check saves its re-run.)
1096
+ if (Bool.and(starts.size > 0, held.length === 0))
1097
+ startHeld();
1098
+ };
1099
+ /** The held wards' starts, each once. */
1100
+ const startHeld = () => {
1101
+ const ready = Arr.fromIterable(starts.values());
1102
+ starts.clear();
1103
+ Arr.forEach(ready, (start) => start());
1104
+ };
1105
+ /** The presence's `custom` now (#277): `undefined` without one. */
1106
+ const customNow = () => UndefinedOr.map(options.custom, (custom) => custom());
1107
+ /** The mode now: `"sync"` unless the prop says otherwise. */
1108
+ const modeNow = () => UndefinedOr.map(options.mode, (mode) => mode());
1109
+ /** Whether the projection is told when its children move (#442, `presenceAffectsLayout`): unless the prop says `false`. */
1110
+ const affectsLayout = () => UndefinedOr.map(options.presenceAffectsLayout, (affects) => affects()) !== false;
1111
+ /**
1112
+ * Whether an entering child waits (#277): under `mode="wait"`, while a child exits, or one shown at
1113
+ * the last change is leaving now and stays to exit (a Wardic element, or a plain one with something
1114
+ * inside it to wait for, #392).
1115
+ */
1116
+ const waits = (kept) => Bool.or(leaving.size > 0, Arr.some(previous, (placed) => {
1117
+ if (kept.has(placed.el))
1118
+ return false;
1119
+ return retains(placed.el);
1120
+ }));
1121
+ const shown = (resolved) => {
1122
+ const mode = modeNow();
1123
+ // `popLayout` (#277): each child leaving in this change is measured where it is, before the change
1124
+ // moves it, as Motion's `getSnapshotBeforeUpdate`.
1125
+ if (mode === "popLayout")
1126
+ measureLeavers(resolved);
1127
+ // A child back under the key of one leaving takes over from it (#286): found before the mode
1128
+ // decides what goes on the page, so `wait` doesn't hold it. Nothing is looked up with no key.
1129
+ if (keyed)
1130
+ findTakeovers(resolved);
1131
+ if (mode !== "wait") {
1132
+ held = [];
1133
+ return resolved;
1134
+ }
1135
+ const now = elementsOf(resolved);
1136
+ const kept = new Set(now);
1137
+ // Entering: not on the page at the last change.
1138
+ const onPage = new Set(Arr.map(previous, (placed) => placed.el));
1139
+ held = Bool.match(waits(kept), { onTrue: () => Arr.filter(now, (el) => Bool.and(Bool.not(onPage.has(el)), Bool.not(takeovers.has(el)))), onFalse: () => [] });
1140
+ if (held.length === 0)
1141
+ return resolved;
1142
+ const holding = new Set(held);
1143
+ return Arr.filter(Arr.ensure(resolved), (node) => Bool.not(holding.has(node)));
1144
+ };
1145
+ const leaveAll = (done) => {
1146
+ onAllLeft = done;
1147
+ present([]);
1148
+ if (leaving.size === 0)
1149
+ allLeft();
1150
+ };
1151
+ return {
1152
+ context: ctx,
1153
+ shown,
1154
+ leaveAll,
1155
+ anchor: () => anchor,
1156
+ mounted: () => {
1157
+ firstRender = false;
1158
+ },
1159
+ present,
1160
+ teardown,
1161
+ };
1162
+ };
1163
+ /**
1164
+ * `propagate` (#277's PR 5c, ADR-0048, Motion's): a presence inside another's child registers with
1165
+ * that one as a hook that holds it. When the child leaves, every child of this presence leaves, and
1166
+ * the parent's child goes once they've all gone. Its own disposal comes first (Solid disposes the
1167
+ * leaving child before its presence hears of it), so its teardown waits a microtask for that word.
1168
+ * Without `propagate`, or a presence above, its teardown runs at its disposal, as before. Returns
1169
+ * what its disposal runs.
1170
+ */
1171
+ export const propagateTo = (parent, propagate, presence) => {
1172
+ let torn = false;
1173
+ const tear = () => {
1174
+ if (torn)
1175
+ return;
1176
+ torn = true;
1177
+ presence.teardown();
1178
+ };
1179
+ const watch = UndefinedOr.map(parent, (above) => above.watch);
1180
+ if (Bool.or(Bool.not(propagate), Predicate.isUndefined(watch)))
1181
+ return tear;
1182
+ let disposed = false;
1183
+ let leaving = false;
1184
+ watch({
1185
+ element: presence.anchor,
1186
+ holds: true,
1187
+ leave: (_custom, release) => {
1188
+ leaving = true;
1189
+ presence.leaveAll(() => {
1190
+ release();
1191
+ tear();
1192
+ });
1193
+ },
1194
+ gone: () => {
1195
+ if (disposed)
1196
+ tear();
1197
+ },
1198
+ });
1199
+ return () => {
1200
+ disposed = true;
1201
+ queueMicrotask(() => {
1202
+ if (Bool.not(leaving))
1203
+ tear();
1204
+ });
1205
+ };
1206
+ };
1207
+ //# sourceMappingURL=presence-controller.js.map