@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,880 @@
1
+ /**
2
+ * `<Reorder>` on Solid 2 (#209 PR 3b, ADR-0020, ADR-0037, ADR-0045): drag items to reorder a list,
3
+ * or reorder it by keyboard. `reorderGroup(config)` and `reorderItem(list, config)` are refs that
4
+ * carry their props, as a ward is; `Reorder.Group` and `Reorder.Item` are built on them.
5
+ *
6
+ * ```tsx
7
+ * const list = reorderGroup({ values: items, onReorder: setItems })
8
+ * <ul {...list}>
9
+ * <For each={items()}>
10
+ * {(item) => {
11
+ * const row = reorderItem(list, { value: item, whileDrag: { scale: 1.05 } })
12
+ * return <li {...row}>{item.name}</li>
13
+ * }}
14
+ * </For>
15
+ * </ul>
16
+ * ```
17
+ *
18
+ * The **Reorder group** is `@wardic/dom`'s `ReorderController` (core's `Reorder.Group` underneath),
19
+ * as on the Solid 1 binding: it reads each item's slot and drag offset from its projection node,
20
+ * runs the **Crossover** on each drag sample, calls the app's `onReorder`, runs **Auto-scroll**,
21
+ * detects the axis after every Measure pass, and speaks the **Keyboard reorder** through the
22
+ * Environment's `Announcer`. This file adds Solid 2's half: the reactive config, the lifecycle, the
23
+ * props and the components. The app owns `values` and keys its items with `<For>`. The group flushes
24
+ * Solid right after the app's `onReorder`, so the DOM follows within the controller's call, as
25
+ * Solid 1's synchronous updates have it.
26
+ *
27
+ * - **The group** spreads `overflow-anchor: none` under the config's `style` (Motion's
28
+ * Group.tsx:187-195 at 16c6122), so the browser's scroll anchoring doesn't shift the page as items
29
+ * move; given to `ref` alone it sets it on the element. `list.move(value, toIndex)` moves a value
30
+ * in code, announced.
31
+ * - **An item** is a ward (`row.read`, `row.atom`, `row.Provider`): a `layout` node whose drag the
32
+ * group's axis decides per gesture, raised while dragged, whose `touch-action` follows the group's
33
+ * axis. Its `value` is read once. Its spread carries the keyboard reorder's `tabindex="0"` and
34
+ * `aria-describedby` (the group's instructions); an app's own `tabindex` and `aria-describedby`
35
+ * go in the item's config, as a ward's `style` does: its `tabindex` wins, its ids come first
36
+ * (#209 PR 3b's R2). Written in JSX after the spread, they'd replace the item's (Solid's rule).
37
+ *
38
+ * @module
39
+ */
40
+ import * as InputSource from "@wardic/core/InputSource"
41
+ import type * as CoreReorder from "@wardic/core/Reorder"
42
+ import * as DomAnnouncer from "@wardic/dom/DomAnnouncer"
43
+ import * as ReorderController from "@wardic/dom/ReorderController"
44
+ import * as Style from "@wardic/dom/Style"
45
+ import * as Arr from "effect/Array"
46
+ import * as Bool from "effect/Boolean"
47
+ import * as Effect from "effect/Effect"
48
+ import { constUndefined, identity, pipe } from "effect/Function"
49
+ import * as Match from "effect/Match"
50
+ import * as Option from "effect/Option"
51
+ import * as Predicate from "effect/Predicate"
52
+ import * as Scope from "effect/Scope"
53
+ import * as UndefinedOr from "effect/UndefinedOr"
54
+ import { isServer, type JSX } from "@solidjs/web"
55
+ import { type Accessor, type Component, createContext, createEffect, createMemo, createSignal, flush, omit, onCleanup, untrack, useContext } from "solid-js"
56
+ import { MOTION_PROPS_V2 as MOTION_PROPS, type WardicMotionPropsV2 as WardicMotionProps } from "../../motion-props.ts"
57
+ import type { Feature } from "../../feature.ts"
58
+ import { drag } from "../../features/drag.ts"
59
+ import { focus } from "../../features/focus.ts"
60
+ import { hover } from "../../features/hover.ts"
61
+ import { inView } from "../../features/in-view.ts"
62
+ import { layout } from "../../features/layout.ts"
63
+ import { pan } from "../../features/pan.ts"
64
+ import { press } from "../../features/press.ts"
65
+ import { inputIn } from "../../gesture-features.ts"
66
+ import * as OwnerScope from "../../owner-scope.ts"
67
+ import { watchItemInput } from "../../reorder-input.ts"
68
+ import { changesContext } from "../../variant-tree.ts"
69
+ import { configView, type PerKey } from "./config-view.ts"
70
+ import { useBrought, useWardicRuntime } from "./provider.tsx"
71
+ import { useLayoutServices } from "./layout-projection.ts"
72
+ import { type AnyWard, spreadPropsOf, type Ward, withSpreadProps, type WardConfig, type WardConfigValues, wardConfigView, type WardOptions, type WardShare, type WardStyle, wardWith } from "./ward.tsx"
73
+ import { drivenWard, type GivenWard, givenOf, handOver, listOf, refsOf, sets, setKeysOf, staticElementOf, type WardicBeside, type WardicMotion, type WardRefCallback, type WardSetKey } from "./element.tsx"
74
+ import { w } from "./w.tsx"
75
+ import { CLIENT_ONLY, CLIENT_ONLY_DEFERRED } from "./solid-reactivity.ts"
76
+ import { eachOf, neverLands, NO_EVENTS, serverWhen, Waiters, whenOf } from "./waiters.ts"
77
+
78
+ /** A Reorder group's config, each key read as a value. */
79
+ export interface ReorderGroupConfigValues<V> {
80
+ /** The list's values, in order. Your app owns them. */
81
+ readonly values: ReadonlyArray<V>
82
+ /** Given each new order, as an item crosses another: set `values` from it. */
83
+ readonly onReorder: (values: Array<V>) => void
84
+ /** The list's direction: `"y"`, a column, or `"x"`, a row. Left out, it's found from the items' boxes. */
85
+ readonly axis?: CoreReorder.Axis | undefined
86
+ /** The keyboard reorder: on unless `false`. Off, the items have no keys, no tab stop and no instructions. */
87
+ // ADR-0037.
88
+ readonly keyboard?: boolean | undefined
89
+ /**
90
+ * What a screen reader hears at each step of a keyboard reorder, over the English defaults: `lift`,
91
+ * `step`, `drop`, `cancel`, and `move` for a move in code, each a function of the item's `label`,
92
+ * `position` and the list's `count`.
93
+ */
94
+ readonly announcements?: Partial<CoreReorder.Announcements<V>> | undefined
95
+ /** What each item's `aria-describedby` reads, over the English default. */
96
+ readonly instructions?: string | undefined
97
+ /** The list element's style, over `overflow-anchor: none`. */
98
+ readonly style?: JSX.CSSProperties | string | undefined
99
+ }
100
+
101
+ /**
102
+ * A Reorder group's config: its `values` in order, `onReorder`, given each new order to set them from,
103
+ * and its options. Each key is a value or an accessor of it, such as a signal, a getter, a store's
104
+ * property or a component's prop; `onReorder` is a function.
105
+ */
106
+ // Read per key (#259).
107
+ export type ReorderGroupConfig<V> = PerKey<ReorderGroupConfigValues<V>, "onReorder">
108
+
109
+ /** A group's config read per key (#259). */
110
+ const GROUP_VIEW = configView<ReorderGroupConfigValues<unknown>>(["values", "onReorder", "axis", "keyboard", "announcements", "instructions", "style"], ["onReorder"])
111
+ /** A group's config as a view of `config`. */
112
+ const groupViewOf = <V,>(config: ReorderGroupConfig<V>, beside: object): ReorderGroupConfigValues<V> => GROUP_VIEW.of(config, beside) as ReorderGroupConfigValues<V>
113
+
114
+ /**
115
+ * A group's config as made, and the layer a `Reorder.Group` it's given to lays its element's props in
116
+ * (#398): empty until then, each key it fixes read through the element's prop.
117
+ */
118
+ interface GroupLayer {
119
+ readonly config: object
120
+ readonly beside: object
121
+ }
122
+ // Module state (#460, Q7): a cache held weakly by the object it's for, so it goes with it.
123
+ const GROUP_LAYERS = new WeakMap<object, GroupLayer>()
124
+
125
+ /** A Reorder group's events, as a ward's: `list.next(name)`, `list.each(name)` and `list.when(name)`. */
126
+ // #257 item 3, ADR-0046.
127
+ export interface ReorderGroupEvents<V> {
128
+ /**
129
+ * Once at the end of a reorder that changed the order: a drag let go, or a keyboard lift dropped,
130
+ * with the order, the item that moved, and its index `from` and `to`. What an app saves. Not for a
131
+ * keyboard cancel, nor for `list.move`.
132
+ */
133
+ readonly reorderEnd: ReorderController.End<V>
134
+ /**
135
+ * As an item is taken in hand, by a drag starting (past its threshold, not at the press) or a
136
+ * keyboard lift, with its index then.
137
+ */
138
+ // A Reorder hold's start (#348, ADR-0020 *Amendment (#348)*).
139
+ readonly holdStart: ReorderController.HoldStart<V>
140
+ /**
141
+ * Once as an item in hand is let go, however: let go or dropped (`how: "drop"`), put back with Escape
142
+ * (`"cancel"`), or unmounted (`"unmount"`). After `reorderEnd` when it moved.
143
+ */
144
+ // A Reorder hold's end (#348).
145
+ readonly holdEnd: ReorderController.HoldEnd<V>
146
+ }
147
+
148
+ /** The `AbortError`'s message for a group's `next` its disposal cut off. */
149
+ const GROUP_GONE = "The Reorder group was disposed before its next event."
150
+
151
+ /** What a group's spread gives its element: its `ref`, and its `style` over `overflow-anchor: none`. */
152
+ export interface ReorderGroupProps {
153
+ /** The group: Solid calls it with the element. */
154
+ readonly ref: (element: HTMLElement) => void
155
+ /** The config's `style` over `overflow-anchor: none`. */
156
+ readonly style: JSX.CSSProperties
157
+ }
158
+
159
+ /**
160
+ * A **Reorder group**'s mark (#349): what tells a group given to `Reorder.Group`'s `groupRef` from a
161
+ * function handed the component's own. Internal.
162
+ */
163
+ export const REORDER_GROUP: unique symbol = Symbol("wardic.reorderGroup")
164
+
165
+ /** A Reorder group of `V`, whatever its config: what `Reorder.Group`'s `groupRef` takes. */
166
+ // #349.
167
+ export interface AnyReorderGroup<V> {
168
+ readonly [REORDER_GROUP]: V
169
+ }
170
+
171
+ /**
172
+ * `reorderGroup()`'s group: spread it on the list's element, `<ul {...list}>`, or give it to `ref`.
173
+ * Its items join it, and it gives its direction, `move`, and its events.
174
+ */
175
+ export interface ReorderGroup<V> extends ReorderGroupProps, AnyReorderGroup<V> {
176
+ /** Attaches the group to `element`: Solid calls it as a ref. */
177
+ (element: HTMLElement): void
178
+ /**
179
+ * Its spread's props alone (#495): what Solid 2's `merge` reads when the group is spread, calling it
180
+ * as a function source, on no prototype, so none of the group's own names shadows the element's props.
181
+ */
182
+ (previous?: unknown): ReorderGroupProps
183
+ /** The group's state: `@wardic/core`'s `Reorder.Group`. */
184
+ readonly group: CoreReorder.Group<V>
185
+ /** The list's direction: the config's, else the one found from the items' boxes. */
186
+ readonly axis: Accessor<CoreReorder.Axis>
187
+ /** Moves `value` to `toIndex`, as a button of your own would, and announces it to a screen reader. */
188
+ readonly move: (value: V, toIndex: number) => void
189
+ /** A promise of the group's next `name` after the call. It rejects with an `AbortError` once the group is gone. */
190
+ readonly next: <E extends keyof ReorderGroupEvents<V>>(name: E) => Promise<ReorderGroupEvents<V>[E]>
191
+ /**
192
+ * Every `name` from the call on, as an async iterable, for a `for await`: each step waits for the
193
+ * next one, so one that comes while a step's work runs is missed. It ends once the group is gone. To
194
+ * act on each one in an effect, use {@link when}.
195
+ */
196
+ readonly each: <E extends keyof ReorderGroupEvents<V>>(name: E) => AsyncIterable<ReorderGroupEvents<V>[E]>
197
+ /**
198
+ * Every `name`, as a memo for an effect, as a ward's `when` is: pending until the first, so the
199
+ * effect runs at each one, on any page. An optimistic save at each reorder:
200
+ *
201
+ * ```tsx
202
+ * const [tasks, setTasks] = createOptimisticStore<Task[]>(() => api.listTasks(), [])
203
+ * const [order, setOrder] = createSignal(() => [...tasks]) // follows tasks; the drag writes it
204
+ * const save = action(function* (ids: string[]) {
205
+ * setTasks((list) => ids.map((id) => list.find((task) => task.id === id)!)) // optimistic
206
+ * yield api.saveOrder(ids)
207
+ * refresh(tasks)
208
+ * })
209
+ * const list = reorderGroup({ values: order, onReorder: setOrder })
210
+ * const reordered = list.when("reorderEnd")
211
+ * createEffect(() => reordered().values.map((task) => task.id), (ids) => {
212
+ * save(ids).catch(setSaveError)
213
+ * })
214
+ * ```
215
+ */
216
+ readonly when: <E extends keyof ReorderGroupEvents<V>>(name: E) => Accessor<ReorderGroupEvents<V>[E]>
217
+ /** Whether the items reorder from the keyboard. */
218
+ readonly keyboard: Accessor<boolean>
219
+ /** The instructions the items' `aria-describedby` reads. */
220
+ readonly instructions: Accessor<string>
221
+ /** @internal for the items: the group's controller. */
222
+ readonly controller: ReorderController.ReorderController<V>
223
+ }
224
+
225
+ /**
226
+ * A `<Reorder>` item's `layout`: `true`, its place and size animating (the default), or `"position"`,
227
+ * its place alone, its size changing at once, as Motion's `Reorder.Item` takes.
228
+ */
229
+ // Its Layout mode (ADR-0009, *Amendment (#42)*).
230
+ export type ReorderItemLayout = true | "position"
231
+
232
+ /**
233
+ * A `<Reorder>` item's config: its `value`, read once, its `layout`, your own `tabindex` and
234
+ * `aria-describedby`, kept beside the keyboard reorder's, and any motion prop but `layoutId` and
235
+ * `drag`, which the group sets.
236
+ */
237
+ export type ReorderItemConfig<V> =
238
+ & PerKey<ReorderItemOwn<V>>
239
+ & Omit<WardConfig, "layout" | "layoutId" | "drag">
240
+
241
+ /** A `<Reorder>` item's own keys, beside a ward's. */
242
+ interface ReorderItemOwn<V> {
243
+ /** Its value in the group's `values`. Read once. */
244
+ readonly value: V
245
+ /** `true`, its place and size animating (the default), or `"position"`, its place alone. */
246
+ readonly layout?: ReorderItemLayout
247
+ /** The app's own tab stop (Solid 2's attribute spelling): it wins over the keyboard reorder's `0`. */
248
+ readonly tabindex?: number | undefined
249
+ /** The app's own ids: kept, before the instructions'. */
250
+ readonly "aria-describedby"?: string | undefined
251
+ }
252
+
253
+ /** An item's own keys read per key (#259); the rest are its ward's, which reads them itself. */
254
+ /**
255
+ * What an item brings (ADR-0067 decision 12), whatever its section has (#511): its layout node, its
256
+ * drag, and every other gesture, so `whileHover` or `whileTap` on an item works as on Motion's, for
257
+ * about 0.5 KB gzipped beside the drag's.
258
+ */
259
+ const ITEM_BRINGS: ReadonlyArray<Feature> = [layout, drag, hover, press, focus, inView, pan]
260
+
261
+ const ITEM_VIEW = configView<ReorderItemOwn<unknown>>(["value", "layout", "tabindex", "aria-describedby"], [])
262
+
263
+ /** An item's `layout` as its Layout mode: `"position"`, else `true` (ADR-0009, *Amendment (#42)*). */
264
+ const itemLayoutOf = (layout: unknown): ReorderItemLayout =>
265
+ Bool.match(layout === "position", { onTrue: (): ReorderItemLayout => "position", onFalse: (): ReorderItemLayout => true })
266
+
267
+ /** A config given whole as an accessor, which the Solid 2 binding no longer reads (#259). */
268
+ const WHOLE_GROUP_ACCESSOR =
269
+ "reorderGroup(config) takes its config as an object, read per key (#259): make a key reactive with an accessor " +
270
+ "(`reorderGroup({ values: items, onReorder: setItems })`), a getter, a store or a component's props."
271
+ const WHOLE_ITEM_ACCESSOR =
272
+ "reorderItem(list, config) takes its config as an object, read per key (#259): `reorderItem(list, { value })`, " +
273
+ "a key made reactive with an accessor, a getter, a store or a component's props."
274
+
275
+ /** Whether a call is Solid applying a ref. */
276
+ const isElement = (value: unknown): value is HTMLElement => Predicate.hasProperty(value, "nodeType")
277
+
278
+ /** The group's keyboard reorder settings, as accessors (ADR-0037). */
279
+ const keyboardOf = <V,>(cfg: Accessor<ReorderGroupConfigValues<V>>) => ({
280
+ keyboard: (): boolean => cfg().keyboard !== false,
281
+ instructions: (): string => UndefinedOr.match(cfg().instructions, { onUndefined: () => ReorderController.DEFAULT_INSTRUCTIONS, onDefined: identity }),
282
+ })
283
+
284
+ /** The group element's style: the config's over `overflow-anchor: none`. */
285
+ const groupStyleOf = (style: JSX.CSSProperties | string | undefined): JSX.CSSProperties =>
286
+ pipe(style, Style.over(ReorderController.GROUP_STYLE)) as JSX.CSSProperties
287
+
288
+ /**
289
+ * A ref carrying `props` and `reads`: `props` enumerable (a spread applies them), `reads` not. Called
290
+ * with nothing, as Solid 2's `merge` calls a spread's function source, it gives `ref` and `props` alone
291
+ * (#495), so none of its own names (`name`, `length`, its reads) shadows the element's props.
292
+ */
293
+ const refCarrying = <G,>(attach: (element: HTMLElement) => void, props: PropertyDescriptorMap, reads: object): G => {
294
+ const self = ((value?: unknown): object | undefined => {
295
+ if (isElement(value)) {
296
+ attach(value)
297
+ return undefined
298
+ }
299
+ return spread
300
+ }) as unknown as G
301
+ const spreadProps: PropertyDescriptorMap = { ref: { value: self, enumerable: true }, ...props }
302
+ const spread = spreadPropsOf<object>(spreadProps)
303
+ Object.defineProperties(self, { [REORDER_GROUP]: { value: true }, ...spreadProps })
304
+ return Object.assign(self as object, reads) as G
305
+ }
306
+
307
+ /**
308
+ * Makes a list of your own elements reorderable, by dragging or from the keyboard: spread the group on
309
+ * the list's element, and make each item with `reorderItem`, keyed with `<For>`. Your app owns
310
+ * `values`, and sets them from `onReorder`; a reorder it makes itself animates too. Call it where you'd
311
+ * make a signal, under a `WardicProvider`. `Reorder.Group` is built on it.
312
+ *
313
+ * @example
314
+ * const list = reorderGroup({ values: items, onReorder: setItems })
315
+ * <ul {...list}>
316
+ * <For each={items()}>
317
+ * {(item) => {
318
+ * const row = reorderItem(list, { value: item })
319
+ * return <li {...row}>{item.name}</li>
320
+ * }}
321
+ * </For>
322
+ * </ul>
323
+ * @see https://wardic.dev/reference/solid/reorder/reorder-group
324
+ */
325
+ // ADR-0020. Given to `ref` alone, it's client-only. Its axis is the config's, else detected from the
326
+ // items' boxes after every Measure pass (for their touch-action); a drag resolves its own at its start.
327
+ // A `values` change re-measures. On a server it renders the element's style and nothing else: no
328
+ // controller, no runtime; its `group`, `move` and `controller` do nothing (ADR-0021).
329
+ export function reorderGroup<V>(config: ReorderGroupConfig<V>): ReorderGroup<V> {
330
+ if (Predicate.isFunction(config)) throw new Error(WHOLE_GROUP_ACCESSOR)
331
+ const beside = {}
332
+ const view = groupViewOf(config, beside)
333
+ const cfg = (): ReorderGroupConfigValues<V> => view
334
+ const runtime = useWardicRuntime()
335
+ if (isServer) return layered(serverReorderGroup(cfg), config, beside)
336
+ const [detected, setDetected] = createSignal<CoreReorder.Axis>("y")
337
+ // Its events (#257 item 3), ended with it.
338
+ const events = new Waiters<ReorderGroupEvents<V>>(GROUP_GONE)
339
+ onCleanup(() => events.dispose())
340
+ // Whether the app's `move` is the call under way: its reorder isn't flushed.
341
+ let moving = false
342
+ // The group's controller, over the provider's projection system and the Environment's channel to
343
+ // assistive technology (ADR-0037), in a Scope of the group's own, closed with its owner: set before
344
+ // the controller is built, so one that fails as it's built leaves nothing (#618).
345
+ const scope = OwnerScope.open(runtime)
346
+ onCleanup(() => OwnerScope.close(runtime, scope, CLOSE_FAILED))
347
+ const controller = runtime.runSync(
348
+ ReorderController.make<V>({
349
+ values: () => untrack(() => cfg().values),
350
+ // The DOM follows a reorder within the controller's call, as on Solid 1, whose updates are
351
+ // synchronous: the controller keeps focus on a lifted item right after (moving a focused node
352
+ // can blur it), and Solid 2 would otherwise move the node at its next flush, after that.
353
+ // A `move` the app calls doesn't: nothing reads the DOM after it, and the app may call it inside
354
+ // an `action`, where Solid refuses a flush (FLUSH_IN_ACTION, #257 item 12).
355
+ onReorder: (values) => {
356
+ const onReorder = untrack(() => cfg().onReorder)
357
+ if (moving) return onReorder(values)
358
+ flush(() => onReorder(values))
359
+ },
360
+ onReorderEnd: (end) => events.tell("reorderEnd", () => end),
361
+ onHoldStart: (start) => events.tell("holdStart", () => start),
362
+ onHoldEnd: (end) => events.tell("holdEnd", () => end),
363
+ axis: () => Option.fromUndefinedOr(untrack(() => cfg().axis)),
364
+ onAxis: setDetected,
365
+ keyedWith: "<For>",
366
+ keyboard: () => untrack(() => cfg().keyboard) !== false,
367
+ announcements: () => Option.fromUndefinedOr(untrack(() => cfg().announcements)),
368
+ }).pipe(Effect.provide(useLayoutServices()), Scope.provide(scope)),
369
+ )
370
+ // The app's axis, else the detected one. When the app's is cleared, detected here, from the boxes the
371
+ // engine holds, so the items' touch-action follows in the same flush (#257's audit: an effect that
372
+ // detected it wrote a signal the items read a flush late, EFFECT_RELAY_TEAR). A Measure pass's change
373
+ // comes through `onAxis`. Lazy: read first by an item, so a given group's `axis` beside it, laid
374
+ // over its config by the `Reorder.Group` the items render in, is the one it tracks (#398).
375
+ const axis: Accessor<CoreReorder.Axis> = createMemo(
376
+ () =>
377
+ UndefinedOr.match(cfg().axis, {
378
+ onDefined: identity,
379
+ onUndefined: () => {
380
+ detected()
381
+ return controller.detect()
382
+ },
383
+ }),
384
+ AXIS_MEMO,
385
+ )
386
+
387
+ // A `values` change re-measures, so the items animate to their new slots whoever reordered them.
388
+ createEffect(
389
+ () => cfg().values,
390
+ () => {
391
+ controller.valuesChanged()
392
+ },
393
+ CLIENT_ONLY_DEFERRED,
394
+ )
395
+
396
+ const attach = (element: HTMLElement): void => {
397
+ // Given to `ref` alone, the element has no spread's style: the group sets its own.
398
+ if (element.style.getPropertyValue("overflow-anchor") === "") element.style.setProperty("overflow-anchor", "none")
399
+ controller.attach(element)
400
+ }
401
+ return layered(refCarrying<ReorderGroup<V>>(
402
+ attach,
403
+ { style: { get: () => groupStyleOf(cfg().style), enumerable: true } },
404
+ {
405
+ group: controller.group,
406
+ axis,
407
+ move: (value: V, toIndex: number) => {
408
+ moving = true
409
+ try {
410
+ controller.move(value, toIndex)
411
+ } finally {
412
+ moving = false
413
+ }
414
+ },
415
+ next: <E extends keyof ReorderGroupEvents<V>>(name: E) => events.wait(name),
416
+ each: <E extends keyof ReorderGroupEvents<V>>(name: E) => eachOf<ReorderGroupEvents<V>, E>(events, name),
417
+ when: <E extends keyof ReorderGroupEvents<V>>(name: E) => whenOf<ReorderGroupEvents<V>, E>(events, name),
418
+ controller,
419
+ ...keyboardOf(cfg),
420
+ },
421
+ ), config, beside)
422
+ }
423
+
424
+ /** The group's axis memo's options: client-only, and lazy (#398). */
425
+ const AXIS_MEMO = { ...CLIENT_ONLY, lazy: true } as const
426
+
427
+ /** `group`, its config and its layer kept for a `Reorder.Group` it's given to (#398). */
428
+ const layered = <G extends object,>(group: G, config: object, beside: object): G => {
429
+ GROUP_LAYERS.set(group, { config, beside })
430
+ return group
431
+ }
432
+
433
+ /**
434
+ * A given group's element props (#398): each config key its `Reorder.Group` sets, laid over the
435
+ * group's config, read through the element's prop. A key the group's config sets too is an error.
436
+ */
437
+ const besideGroup = (local: object, group: object): void => {
438
+ const layer = UndefinedOr.getOrThrow(GROUP_LAYERS.get(group))
439
+ const given = setKeysOf(local, GROUP_CONFIG)
440
+ const twice = setKeysOf(layer.config, given)
441
+ if (twice.length > 0) {
442
+ throw new Error(
443
+ `Reorder.Group: ${listOf(twice)} set both in the group given to groupRef and on the element (#398). ` +
444
+ "Set each key in one place: in reorderGroup({ … }), or on the element.",
445
+ )
446
+ }
447
+ Arr.forEach(given, (key) =>
448
+ Object.defineProperty(layer.beside, key, { enumerable: true, configurable: true, get: () => (local as Readonly<Record<string, unknown>>)[key] }))
449
+ }
450
+
451
+ /** What a group's Scope reports when one of its finalizers fails as its owner goes. */
452
+ const CLOSE_FAILED = "wardic.reorder: a finalizer failed"
453
+
454
+ /**
455
+ * {@link reorderGroup} during a server render (ADR-0021): the group element's style and the app's
456
+ * axis, else `"y"`; its `group`, `move` and `controller` do nothing.
457
+ */
458
+ const serverReorderGroup = <V,>(cfg: Accessor<ReorderGroupConfigValues<V>>): ReorderGroup<V> => {
459
+ const controller = ReorderController.inert as unknown as ReorderController.ReorderController<V>
460
+ const axis = (): CoreReorder.Axis => UndefinedOr.match(cfg().axis, { onUndefined: (): CoreReorder.Axis => "y", onDefined: identity })
461
+ return refCarrying<ReorderGroup<V>>(
462
+ constUndefined,
463
+ { style: { value: groupStyleOf(untrack(() => cfg().style)), enumerable: true } },
464
+ { group: controller.group, axis, move: constUndefined, next: neverLands, each: () => NO_EVENTS, when: serverWhen, controller, ...keyboardOf(cfg) },
465
+ )
466
+ }
467
+
468
+ /** A Reorder item's drag axis for its gesture's axis: a grid's `xy` is a free drag. Built once, at module load. */
469
+ const dragAxisFor: (axis: CoreReorder.Axis) => true | "x" | "y" = Match.type<CoreReorder.Axis>().pipe(
470
+ Match.when("xy", (): true => true),
471
+ Match.orElse((axis) => axis as "x" | "y"),
472
+ )
473
+
474
+ /**
475
+ * What an item adds to its spread for the keyboard reorder (ADR-0037): `tabindex="0"` while the
476
+ * group's keyboard is on and the app gave no `tabindex`, and `aria-describedby` with the group's
477
+ * instructions (`describedBy`, set on the client) after the app's own ids.
478
+ */
479
+ const keyboardAttributes = <V,>(
480
+ list: Pick<ReorderGroup<V>, "keyboard">,
481
+ cfg: Accessor<ReorderItemOwn<V>>,
482
+ describedBy: Accessor<string | undefined>,
483
+ ): PropertyDescriptorMap => ({
484
+ tabindex: {
485
+ get: (): number | undefined =>
486
+ UndefinedOr.match(cfg().tabindex, {
487
+ onDefined: identity,
488
+ onUndefined: () => Bool.match(list.keyboard(), { onTrue: () => 0, onFalse: constUndefined }),
489
+ }),
490
+ enumerable: true,
491
+ },
492
+ "aria-describedby": {
493
+ get: (): string | undefined => {
494
+ const ids = Arr.filter([cfg()["aria-describedby"], Bool.match(list.keyboard(), { onTrue: describedBy, onFalse: constUndefined })], Predicate.isNotUndefined)
495
+ return Bool.match(ids.length === 0, { onTrue: constUndefined, onFalse: () => ids.join(" ") })
496
+ },
497
+ enumerable: true,
498
+ },
499
+ })
500
+
501
+ /**
502
+ * Makes an element an item of a Reorder group: a ward, spread on the element, `<li {...row}>`, or given
503
+ * to `Reorder.Item`'s `wardRef`. `value` is its value in the group's `values`, read once; the rest is a
504
+ * ward's config, but `layout` (`true` or `"position"`), `layoutId` and `drag`, which the group sets. It's
505
+ * a tab stop for the keyboard reorder: your own `tabindex` and `aria-describedby` go in its config.
506
+ * Call it where you'd make a signal: in a `<For>` callback.
507
+ *
508
+ * @example
509
+ * const row = reorderItem(list, { value: item, whileDrag: { scale: 1.05 } })
510
+ * <li {...row}>{item.name}</li>
511
+ * @see https://wardic.dev/reference/solid/reorder/reorder-item
512
+ */
513
+ // ADR-0020. Given to `ref` alone, it's client-only. The element takes the drag defaults, with the
514
+ // group's axis's touch-action, which its `style` can override.
515
+ export function reorderItem<V, const C extends ReorderItemConfig<V>>(list: ReorderGroup<V>, config: C, options?: WardOptions): ReorderItem<V, C> {
516
+ return reorderItemWith(list, config as ReorderItemConfig<V>, UndefinedOr.map(options, (o) => o.parent), undefined) as unknown as ReorderItem<V, C>
517
+ }
518
+
519
+ /** A `<Reorder>` item's mark (#349): the group it's in. Internal. */
520
+ export const REORDER_ITEM: unique symbol = Symbol("wardic.reorderItem")
521
+
522
+ /** A `<Reorder>` item of `V`, whatever its config: what `Reorder.Item`'s `wardRef` takes. */
523
+ // #349.
524
+ export interface AnyReorderItem<V> extends AnyWard {
525
+ readonly [REORDER_ITEM]: V
526
+ }
527
+
528
+ /**
529
+ * `reorderItem()`'s item: a ward in its group. Spread it on the item's element, or give it to
530
+ * `Reorder.Item`'s `wardRef`.
531
+ */
532
+ export type ReorderItem<V, C extends ReorderItemConfig<V> = ReorderItemConfig<V>> = Ward<C> & AnyReorderItem<V>
533
+
534
+ /** {@link reorderItem} for `tag` (`Reorder.Item`'s `as`). Internal. */
535
+ const reorderItemWith = <V,>(list: ReorderGroup<V>, config: ReorderItemConfig<V>, parent: AnyWard | undefined, tag: string | undefined): Ward => {
536
+ if (Predicate.isFunction(config)) throw new Error(WHOLE_ITEM_ACCESSOR)
537
+ // Its own keys read per key (#259); the rest are its ward's config, read by the ward. Its `layout`
538
+ // is its Layout mode, `true` or `"position"` whatever the config gives, read at each layout
539
+ // animation's start as any ward's is (ADR-0009, *Amendment (#42)*).
540
+ const own = ITEM_VIEW.of(config) as ReorderItemOwn<V>
541
+ const cfg = (): ReorderItemOwn<V> => own
542
+ const fixed = { layout: (): ReorderItemLayout => itemLayoutOf(own.layout) }
543
+ const wardConfig = config as unknown as WardConfig
544
+ // Its group's axis's `touch-action`, under its style: none when its own presses don't drag it
545
+ // (`dragListener={false}`, #431), as with its other drag defaults, so a list dragged by handles scrolls by touch.
546
+ const touchAction = Bool.match(untrack(() => wardConfig.dragListener) !== false, {
547
+ onTrue: () => (): object => ({ "touch-action": Style.reorderTouchAction(list.axis()) }),
548
+ onFalse: constUndefined,
549
+ })
550
+ // On a server the item renders the drag defaults with its group's touch-action, and joins no
551
+ // controller (ADR-0021); the instructions element exists on the client only.
552
+ if (isServer) {
553
+ const row = wardWith(wardConfig, { tag, brings: ITEM_BRINGS, dragAxis: () => true, baseStyle: touchAction, fixed, group: list, parent })
554
+ return withSpreadProps(Object.defineProperties(row, { [REORDER_ITEM]: { value: list } }), keyboardAttributes(list, cfg, constUndefined))
555
+ }
556
+ const runtime = useWardicRuntime()
557
+ // Its keys' input, the `drag` Feature's it brings (#511).
558
+ const services = useBrought(ITEM_BRINGS)
559
+ const value = untrack(() => own.value)
560
+ // A keyboard lift turns the item's `whileDrag` on (ADR-0037).
561
+ const [lifted, setLifted] = createSignal(false)
562
+ let element: HTMLElement | undefined
563
+ const driver = list.controller.item(value, () => Option.fromUndefinedOr(element), setLifted)
564
+ // An item unmounted mid-gesture gets no end sample: its disposal ends the gesture (and a lift).
565
+ onCleanup(driver.dispose)
566
+ // The instructions' id (ADR-0037), derived, so the element is rendered with its `aria-describedby`:
567
+ // the page's document's, until the element's own replaces it (an iframe's). An effect adds the
568
+ // instructions element, writing nothing. An effect that wrote the id after the mount relayed
569
+ // through four effects, each flush showing the item without it (#320).
570
+ const [document, setDocument] = createSignal<Document>(globalThis.document)
571
+ const describedBy = createMemo(() => DomAnnouncer.instructionsIdOf(document(), list.instructions()), CLIENT_ONLY)
572
+ createEffect(
573
+ () => ({ doc: document(), text: list.instructions() }),
574
+ ({ doc, text }) => DomAnnouncer.showInstructions(doc, text),
575
+ CLIENT_ONLY,
576
+ )
577
+ const row = wardWith(wardConfig, {
578
+ tag,
579
+ brings: ITEM_BRINGS,
580
+ fixed,
581
+ group: list,
582
+ parent,
583
+ dragAxis: () => dragAxisFor(driver.dragAxis()),
584
+ onDragSample: driver.onSample,
585
+ onLayoutHandle: driver.register,
586
+ raiseWhileDragged: true,
587
+ keysTaken: true,
588
+ lifted,
589
+ baseStyle: touchAction,
590
+ onMount: (el, watch) => {
591
+ element = el
592
+ setDocument(DomAnnouncer.documentOf(el))
593
+ // Its keys, blurs and presses (ADR-0037), watched in the ward's watch Scope, with no fiber at rest (#379).
594
+ watch((onDefect) => Effect.provideService(watchItemInput(el, driver, (effect) => void runtime.runFork(effect), onDefect), InputSource.InputSource, inputIn(services())))
595
+ return () => {
596
+ element = undefined
597
+ }
598
+ },
599
+ })
600
+ // eslint-disable-next-line solid/reactivity -- handed to getters, which read it where the spread tracks them
601
+ return withSpreadProps(Object.defineProperties(row, { [REORDER_ITEM]: { value: list } }), keyboardAttributes(list, cfg, describedBy))
602
+ }
603
+
604
+ // --- Components (ADR-0020: built on the factories) ---------------------------------------------
605
+
606
+ /** The nearest `Reorder.Group`'s group, for its items: `null` for none (Solid 2's contexts). */
607
+ const GroupContext = createContext<ReorderGroup<unknown> | null>(null)
608
+
609
+ /** An element tag a `<Reorder>` group or item can render. */
610
+ export type ReorderElementTag = keyof JSX.IntrinsicElements
611
+
612
+ /**
613
+ * `Reorder.Group`'s group: its config as props, `groupRef` handing the group out, or a group made with
614
+ * `reorderGroup` given to `groupRef`, with the options its config doesn't set beside it. A key given
615
+ * both ways is an error.
616
+ */
617
+ // #349, #398. A key set twice is caught at setup; in the types only for `values` and `onReorder`, which
618
+ // every group sets: a group's type doesn't carry its config.
619
+ export type ReorderGroupOf<V> =
620
+ | {
621
+ readonly values: ReadonlyArray<V>
622
+ readonly onReorder: (values: Array<V>) => void
623
+ readonly axis?: CoreReorder.Axis | undefined
624
+ readonly keyboard?: boolean | undefined
625
+ readonly announcements?: Partial<CoreReorder.Announcements<V>> | undefined
626
+ readonly instructions?: string | undefined
627
+ /**
628
+ * Given the group once, as it's made, as `wardRef` is given a ward: for its `next(name)`,
629
+ * `when(name)` and `move`.
630
+ */
631
+ readonly groupRef?: GroupRefCallback<V> | undefined
632
+ }
633
+ | {
634
+ /**
635
+ * A group made with `reorderGroup`, which the component renders, with the options its config
636
+ * doesn't set beside it: never `values` or `onReorder`, which a group is made with.
637
+ */
638
+ readonly groupRef: AnyReorderGroup<V>
639
+ readonly values?: never
640
+ readonly onReorder?: never
641
+ readonly axis?: CoreReorder.Axis | undefined
642
+ readonly keyboard?: boolean | undefined
643
+ readonly announcements?: Partial<CoreReorder.Announcements<V>> | undefined
644
+ readonly instructions?: string | undefined
645
+ }
646
+
647
+ /** A function `groupRef` gives the component's group: never a group, which it would take instead. */
648
+ export type GroupRefCallback<V> = ((list: ReorderGroup<V>) => void) & { readonly [REORDER_GROUP]?: never }
649
+
650
+ /**
651
+ * `Reorder.Group`'s props: its group ({@link ReorderGroupOf}), `as`, the element it renders (`"ul"` by
652
+ * default, read once), and that element's own props and motion props.
653
+ */
654
+ export type ReorderGroupComponentProps<V, Tag extends ReorderElementTag = "ul"> =
655
+ & ReorderGroupOf<V>
656
+ & { readonly as?: Tag }
657
+ & Omit<JSX.IntrinsicElements[Tag], "style" | "onReorder">
658
+ & { readonly style?: WardStyle | string | undefined }
659
+ & WardicMotion
660
+
661
+ /** A `<Reorder>` item's motion props: any but `layoutId` and `drag`, its `layout` a Layout mode. */
662
+ type ItemMotionProps = Omit<WardicMotionProps, "layout" | "layoutId" | "drag">
663
+
664
+ /**
665
+ * `Reorder.Item`'s item: its `value`, its `layout` and its motion props, `wardRef` handing its ward out,
666
+ * or an item made with `reorderItem` given to `wardRef`, with the keys its config `C` doesn't set
667
+ * beside it, as beside a ward: never `value`, which an item is made with.
668
+ */
669
+ // #349, #398.
670
+ export type ReorderItemOf<V, C = {}> =
671
+ | (ItemMotionProps & { readonly value: V; readonly layout?: ReorderItemLayout; readonly wardRef?: WardRefCallback | undefined })
672
+ | (WardicBeside<C, ItemMotionProps> & {
673
+ readonly wardRef: AnyReorderItem<V> & GivenWard<C>
674
+ readonly value?: never
675
+ readonly layout?: "layout" extends WardSetKey<C> ? never : ReorderItemLayout
676
+ readonly tabindex?: "tabindex" extends WardSetKey<C> ? never : number
677
+ readonly "aria-describedby"?: "aria-describedby" extends WardSetKey<C> ? never : string
678
+ })
679
+
680
+ /**
681
+ * `Reorder.Item`'s props: its item ({@link ReorderItemOf}), `as`, the element it renders (`"li"` by
682
+ * default, read once), and that element's own props.
683
+ */
684
+ export type ReorderItemComponentProps<V, Tag extends ReorderElementTag = "li", C = {}> =
685
+ & ReorderItemOf<V, C>
686
+ & { readonly as?: Tag }
687
+ & Omit<JSX.IntrinsicElements[Tag], "style">
688
+ & { readonly style?: WardStyle | string | undefined }
689
+
690
+ /**
691
+ * The props a component body reads, as plain records: instantiating the public prop types over
692
+ * every element tag makes a type checker build a union of every element's props.
693
+ */
694
+ interface GroupLocal<V> {
695
+ readonly values: ReadonlyArray<V>
696
+ readonly onReorder: (values: Array<V>) => void
697
+ readonly groupRef?: unknown
698
+ readonly axis?: CoreReorder.Axis | undefined
699
+ readonly keyboard?: boolean | undefined
700
+ readonly announcements?: Partial<CoreReorder.Announcements<V>> | undefined
701
+ readonly instructions?: string | undefined
702
+ readonly as?: string | undefined
703
+ readonly ref?: unknown
704
+ readonly style?: WardStyle | string | undefined
705
+ readonly children?: JSX.Element
706
+ }
707
+ interface ItemLocal<V> {
708
+ readonly value: V
709
+ readonly as?: string | undefined
710
+ readonly ref?: unknown
711
+ readonly style?: WardStyle | string | undefined
712
+ readonly children?: JSX.Element
713
+ readonly tabindex?: number | undefined
714
+ readonly "aria-describedby"?: string | undefined
715
+ readonly wardRef?: unknown
716
+ }
717
+
718
+ const GROUP_OWN = ["values", "onReorder", "axis", "keyboard", "announcements", "instructions", "as", "ref", "style", "children", "groupRef"] as const
719
+ const ITEM_OWN = [...MOTION_PROPS, "value", "as", "ref", "style", "children", "tabindex", "aria-describedby", "wardRef"] as const
720
+ /** A group's config keys: beside a given group, each it doesn't set (#398). */
721
+ const GROUP_CONFIG = ["values", "onReorder", "axis", "keyboard", "announcements", "instructions"] as const
722
+ /** An item's config keys, its motion props and its own: beside a given item, each it doesn't set (#398). */
723
+ const ITEM_CONFIG = [...MOTION_PROPS, "value", "tabindex", "aria-describedby"] as const
724
+ /** A `<Reorder>` item's keyboard reorder attributes (ADR-0037), which a given item's element carries (#349). */
725
+ const KEYBOARD_ATTRIBUTES = ["tabindex", "aria-describedby"] as const
726
+
727
+ /**
728
+ * The Wardic element for `tag`, as a plain component: a Slim element's (`w[tag]`, #511), so a Reorder
729
+ * brings no Feature but its own (ADR-0067 decision 12) and renders under a `strict` section.
730
+ */
731
+ const wardicTag = (tag: string): Component<Record<string, unknown>> =>
732
+ UndefinedOr.getOrThrow((w as unknown as Record<string, Component<Record<string, unknown>> | undefined>)[tag])
733
+
734
+ /** The group given to `groupRef` (#349), or `undefined` for a function or none: read once, untracked, as `ref` is. */
735
+ const givenGroupOf = <V,>(local: GroupLocal<V>): ReorderGroup<V> | undefined => {
736
+ const ref = untrack(() => local.groupRef)
737
+ return Bool.match(Predicate.hasProperty(ref, REORDER_GROUP), { onTrue: () => ref as ReorderGroup<V>, onFalse: constUndefined })
738
+ }
739
+
740
+ /**
741
+ * A list put in order by dragging its items, or from the keyboard, rendered as `as`, `"ul"` by
742
+ * default. Your app owns `values`, and sets them from `onReorder`; or give it a group made with
743
+ * `reorderGroup` as `groupRef`. Key its `Reorder.Item`s with `<For>`.
744
+ *
745
+ * @see https://wardic.dev/reference/solid/reorder/reorder
746
+ */
747
+ // ADR-0020, #349: a `reorderGroup` on `w[as]`, the group in context for its items.
748
+ function Group<V, Tag extends ReorderElementTag = "ul">(props: ReorderGroupComponentProps<V, Tag>): JSX.Element {
749
+ const local = props as unknown as GroupLocal<V>
750
+ const given = givenGroupOf(local)
751
+ const list = UndefinedOr.match(given, {
752
+ onUndefined: () => {
753
+ // Its props are its config, read per key (#259).
754
+ const made = reorderGroup<V>(local as unknown as ReorderGroupConfig<V>)
755
+ // The group, to its `groupRef` (#257 item 3), read once, untracked, as `ref` is.
756
+ const give = untrack(() => local.groupRef)
757
+ if (Predicate.isFunction(give)) give(made)
758
+ return made
759
+ },
760
+ onDefined: (group) => {
761
+ besideGroup(local, group)
762
+ return group
763
+ },
764
+ })
765
+ const Tag = wardicTag(UndefinedOr.match(untrack(() => local.as), { onUndefined: () => "ul", onDefined: identity }))
766
+ const rest = omit(props as unknown as Record<string, unknown>, ...GROUP_OWN)
767
+ // Its element's style over the group's: `overflow-anchor: none`, under a given group's config (#349).
768
+ const styleOf: () => JSX.CSSProperties = UndefinedOr.match(given, {
769
+ onUndefined: () => () => pipe(local.style, Style.over(ReorderController.GROUP_STYLE)) as JSX.CSSProperties,
770
+ onDefined: (group) => () => pipe(local.style, Style.over(group.style)) as JSX.CSSProperties,
771
+ })
772
+ return (
773
+ <GroupContext value={list as ReorderGroup<unknown>}>
774
+ <Tag {...rest} style={styleOf()} ref={refsOf(local, [list])}>
775
+ {local.children}
776
+ </Tag>
777
+ </GroupContext>
778
+ )
779
+ }
780
+
781
+ /**
782
+ * A `<Reorder>` item given to `Reorder.Item`'s `wardRef` (#349): one of `list`'s, made with
783
+ * {@link reorderItem}. Its element is driven by a ward of the component's, and carries the item's
784
+ * keyboard reorder attributes.
785
+ */
786
+ const givenItem = <V,>(list: ReorderGroup<V>, local: ItemLocal<V>, share: WardShare, tag: string): { readonly row: Ward; readonly keys: object; readonly setup: WardConfigValues } => {
787
+ if (Predicate.isUndefined(share.internal.group)) {
788
+ throw new Error("Reorder.Item: the ward in wardRef isn't a Reorder item (#349). Make it with reorderItem(list, { value }), list the group it's in.")
789
+ }
790
+ if (share.internal.group !== list) {
791
+ throw new Error("Reorder.Item: the item in wardRef is another group's (#349). Make it with reorderItem(list, …), list the Reorder.Group it renders in.")
792
+ }
793
+ const item = untrack(() => local.wardRef) as object
794
+ const { ward: row, setup } = drivenWard("Reorder.Item", local, share, { tag }, ITEM_CONFIG)
795
+ // Its keyboard attributes: the item's, or the element's where it sets one the item doesn't (#398).
796
+ const keys = Object.defineProperties(
797
+ {},
798
+ Object.fromEntries(
799
+ Arr.map(KEYBOARD_ATTRIBUTES, (key) => [
800
+ key,
801
+ Bool.match(sets(local, key), {
802
+ onTrue: (): PropertyDescriptor => ({ enumerable: true, get: () => (local as unknown as Readonly<Record<string, unknown>>)[key] }),
803
+ onFalse: () => UndefinedOr.getOrThrow(Object.getOwnPropertyDescriptor(item, key)),
804
+ }),
805
+ ]),
806
+ ),
807
+ )
808
+ return { row, keys, setup }
809
+ }
810
+
811
+ /**
812
+ * An item of the `Reorder.Group` around it, rendered as `as`, `"li"` by default: made from its props,
813
+ * or an item made with `reorderItem` given as `wardRef`. Outside a group it throws, as Motion's does.
814
+ *
815
+ * @see https://wardic.dev/reference/solid/reorder/reorder
816
+ */
817
+ // ADR-0020, #349: a `reorderItem` on the nearest group.
818
+ function Item<V, Tag extends ReorderElementTag = "li", C = {}>(props: ReorderItemComponentProps<V, Tag, C>): JSX.Element {
819
+ const list = useContext(GroupContext) as ReorderGroup<V> | null
820
+ if (Predicate.isNull(list)) throw new Error("Reorder.Item must be a child of Reorder.Group")
821
+ const local = props as unknown as ItemLocal<V> & WardicMotionProps
822
+ const tag = UndefinedOr.match(untrack(() => local.as), { onUndefined: () => "li", onDefined: identity })
823
+ const given = givenOf(local)
824
+ // One plain element a tag, as every Wardic element's (#618, M3).
825
+ const Element = staticElementOf(tag)
826
+ const rest = omit(props as unknown as Record<string, unknown>, ...ITEM_OWN)
827
+ const element = UndefinedOr.match(given, {
828
+ onUndefined: () => {
829
+ // Its props are its config, read per key (#259); its `layout` is read as a Layout mode.
830
+ const row = reorderItemWith<V>(list, local as unknown as ReorderItemConfig<V>, undefined, tag)
831
+ // Its ward, to the item's `wardRef` (#257).
832
+ handOver(local, row)
833
+ // The ward's spread props, as an object: spread as the function it is, it's a source `merge`
834
+ // calls in a computation, whose keys `spread` can't know, so it inserts children too (#525, #618 M3).
835
+ const rowProps = row()
836
+ return {
837
+ row,
838
+ setup: undefined,
839
+ render: (): JSX.Element => (
840
+ <Element {...rest} {...rowProps} ref={refsOf(local, [row])}>
841
+ {local.children}
842
+ </Element>
843
+ ),
844
+ }
845
+ },
846
+ onDefined: (share) => {
847
+ const { row, keys, setup } = givenItem(list, local, share, tag)
848
+ return {
849
+ row,
850
+ setup,
851
+ render: (): JSX.Element => (
852
+ <Element {...rest} {...row.with({ style: local.style })} {...keys} ref={refsOf(local, [row])}>
853
+ {local.children}
854
+ </Element>
855
+ ),
856
+ }
857
+ },
858
+ })
859
+ // An item that changes what its children read renders its variant context's Provider around them
860
+ // (#50), as every Wardic element does; any other renders none.
861
+ const config = UndefinedOr.match(element.setup, { onUndefined: () => wardConfigView(local as unknown as WardConfig), onDefined: identity })
862
+ return Bool.match(untrack(() => changesContext(config)), {
863
+ onFalse: element.render,
864
+ onTrue: () => <element.row.Provider>{element.render()}</element.row.Provider>,
865
+ })
866
+ }
867
+
868
+ /**
869
+ * A list put in order by dragging its items, or from the keyboard: `Reorder.Group` and `Reorder.Item`.
870
+ * Your app owns the order: the group takes it as `values`, and `onReorder` hands each new one back.
871
+ * Motion's `Reorder`.
872
+ *
873
+ * @example
874
+ * <Reorder.Group values={items()} onReorder={setItems}>
875
+ * <For each={items()}>{(item) => <Reorder.Item value={item}>{item}</Reorder.Item>}</For>
876
+ * </Reorder.Group>
877
+ * @see https://wardic.dev/reference/solid/reorder/reorder
878
+ */
879
+ // ADR-0020.
880
+ export const Reorder = { Group, Item } as const