@askrjs/askr 0.0.51 → 0.0.53

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 (651) hide show
  1. package/README.md +5 -1
  2. package/dist/{runtime/scheduler.js → access-Bg4RJNC8.js} +190 -20
  3. package/dist/actions/index.d.ts +2 -0
  4. package/dist/actions/index.js +103 -0
  5. package/dist/{common/attr-names.js → attr-names-CjhzmHOn.js} +1 -3
  6. package/dist/benchmark.d.ts +7 -4
  7. package/dist/benchmark.js +63 -13
  8. package/dist/boot/index.d.ts +62 -4
  9. package/dist/boot/index.js +1 -194
  10. package/dist/boot-j2KoN6ss.js +647 -0
  11. package/dist/cleanup-COv77su2.js +487 -0
  12. package/dist/component-internal-B3z7GXlD.js +614 -0
  13. package/dist/component-lifecycle-CO4hXlP4.js +357 -0
  14. package/dist/{runtime/component-scope.js → component-scope-CC3cojX9.js} +35 -9
  15. package/dist/component-scope-CvPba6O6.d.ts +12 -0
  16. package/dist/components/index.d.ts +17 -2
  17. package/dist/components/index.js +39 -1
  18. package/dist/compose-ref-Cc_YkUpM.js +92 -0
  19. package/dist/{foundations/utilities/compose-ref.d.ts → compose-ref-Cizq72-x.d.ts} +1 -2
  20. package/dist/control/index.d.ts +1 -3
  21. package/dist/control/index.js +1 -3
  22. package/dist/control-BQvNVfAd.d.ts +436 -0
  23. package/dist/control-BYyLTFyw.js +165 -0
  24. package/dist/control-Bf4Wkdvv.d.ts +9 -0
  25. package/dist/{common/control.js → control-DhFRTIoE.js} +1 -3
  26. package/dist/data/index.d.ts +2 -6
  27. package/dist/data/index.js +4 -5
  28. package/dist/data-DnxnDxD-.js +559 -0
  29. package/dist/{data/data-runtime.js → data-runtime-SJ1BSUvk.js} +35 -36
  30. package/dist/deferred-lKE8uR0z.js +386 -0
  31. package/dist/effect-BwnIvLah.js +260 -0
  32. package/dist/fastlane-Dw8SOBr9.js +343 -0
  33. package/dist/for-internal-BKf_Tnv1.js +1563 -0
  34. package/dist/foundations/icon/index.d.ts +68 -2
  35. package/dist/foundations/icon/index.js +85 -1
  36. package/dist/foundations/index.d.ts +2 -5
  37. package/dist/foundations/index.js +2 -5
  38. package/dist/foundations/interactions/index.d.ts +264 -6
  39. package/dist/foundations/interactions/index.js +1 -6
  40. package/dist/foundations/state/index.d.ts +32 -1
  41. package/dist/foundations/state/index.js +78 -1
  42. package/dist/foundations/structures/index.d.ts +2 -7
  43. package/dist/foundations/structures/index.js +2 -7
  44. package/dist/foundations/utilities/index.d.ts +2 -6
  45. package/dist/foundations/utilities/index.js +2 -5
  46. package/dist/fx/index.d.ts +190 -3
  47. package/dist/fx/index.js +454 -4
  48. package/dist/index-31Uoz_NS.d.ts +239 -0
  49. package/dist/index-Bki2rqcr.d.ts +233 -0
  50. package/dist/index-BnU0NPwM.d.ts +101 -0
  51. package/dist/index-D73jgYx1.d.ts +48 -0
  52. package/dist/{runtime/runtime.d.ts → index-R2JJIbM-.d.ts} +31 -9
  53. package/dist/index-SJXJkssx.d.ts +44 -0
  54. package/dist/index.d.ts +8 -13
  55. package/dist/index.js +150 -17
  56. package/dist/interactions-w7gQN4ha.js +280 -0
  57. package/dist/{data/invalidation-listeners.js → invalidation-listeners-Des3AHYs.js} +1 -3
  58. package/dist/{common/props.d.ts → jsx-CP0gmYwJ.d.ts} +17 -6
  59. package/dist/{common/jsx.js → jsx-CUpRxrLH.js} +1 -3
  60. package/dist/jsx-dev-runtime.d.ts +17 -5
  61. package/dist/jsx-dev-runtime.js +3 -10
  62. package/dist/jsx-runtime-92bV2hSa.d.ts +34 -0
  63. package/dist/jsx-runtime-BVVgDSdq.d.ts +1 -0
  64. package/dist/jsx-runtime.d.ts +3 -22
  65. package/dist/jsx-runtime.js +17 -20
  66. package/dist/{runtime/lifecycle-operations.js → lifecycle-operations-D9va7GOU.js} +9 -11
  67. package/dist/navigate-BVDCzOuB.d.ts +34 -0
  68. package/dist/navigate-CmPLSXyw.js +1449 -0
  69. package/dist/{runtime/portal.js → portal-CyU3Ucf2.js} +124 -35
  70. package/dist/query-registry-CQIT4mXr.js +73 -0
  71. package/dist/{common/render-context.js → render-context-Clw3rFiO.js} +14 -8
  72. package/dist/renderer-DzPjeLby.js +6197 -0
  73. package/dist/resource-operation-CEzfpnDk.js +276 -0
  74. package/dist/resources/index.d.ts +42 -3
  75. package/dist/resources/index.js +3 -4
  76. package/dist/{common/route-activity.js → route-activity-CNJfpwx-.js} +1 -3
  77. package/dist/route-matching-vJpvLVbX.js +515 -0
  78. package/dist/router/index.d.ts +166 -14
  79. package/dist/router/index.js +150 -12
  80. package/dist/{common/router.d.ts → router-CeYvjj5_.d.ts} +72 -29
  81. package/dist/{common/router-internal.js → router-internal-BC0w1_xk.js} +1 -3
  82. package/dist/{runtime/scheduler.d.ts → scheduler-CmLO4Dfm.d.ts} +1 -4
  83. package/dist/{runtime/selector.js → selector-DafVYzV4.js} +35 -20
  84. package/dist/{runtime/snapshot-source.js → snapshot-source-BB42xgwb.js} +1 -3
  85. package/dist/ssg/index.d.ts +252 -4
  86. package/dist/ssg/index.js +857 -1
  87. package/dist/ssr/index.d.ts +225 -8
  88. package/dist/ssr/index.js +3 -6
  89. package/dist/{common/ssr.js → ssr-CbQO5xd3.js} +1 -3
  90. package/dist/ssr-D3t80Rc0.js +1413 -0
  91. package/dist/{runtime/state.js → state-DPl8lffD.js} +4 -8
  92. package/dist/structures-DUB3HchX.js +221 -0
  93. package/dist/testing/index.d.ts +4 -4
  94. package/dist/testing/index.js +2 -7
  95. package/dist/{jsx/types.d.ts → types-DnQVG4ZY.d.ts} +2 -6
  96. package/dist/{foundations/utilities/use-id.js → utilities-C_CGX4Dz.js} +1 -3
  97. package/dist/{ssr/verify-hydration.js → verify-hydration-io9ahUeq.js} +2 -4
  98. package/dist/{common/vnode.js → vnode-CGMJYPMB.js} +2 -4
  99. package/package.json +63 -45
  100. package/dist/bench/components/benchmark-row.d.ts +0 -20
  101. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  102. package/dist/bench/components/benchmark-row.js +0 -42
  103. package/dist/bench/components/benchmark-row.js.map +0 -1
  104. package/dist/bench/components/benchmark-table.js +0 -25
  105. package/dist/bench/components/benchmark-table.js.map +0 -1
  106. package/dist/benchmark.d.ts.map +0 -1
  107. package/dist/benchmark.js.map +0 -1
  108. package/dist/bin/askr-ssg.d.ts +0 -28
  109. package/dist/bin/askr-ssg.d.ts.map +0 -1
  110. package/dist/bin/askr-ssg.js +0 -171
  111. package/dist/bin/askr-ssg.js.map +0 -1
  112. package/dist/boot/hydration.js +0 -140
  113. package/dist/boot/hydration.js.map +0 -1
  114. package/dist/boot/index.d.ts.map +0 -1
  115. package/dist/boot/index.js.map +0 -1
  116. package/dist/boot/root-lifecycle.d.ts +0 -15
  117. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  118. package/dist/boot/root-lifecycle.js +0 -205
  119. package/dist/boot/root-lifecycle.js.map +0 -1
  120. package/dist/boot/route-startup.js +0 -45
  121. package/dist/boot/route-startup.js.map +0 -1
  122. package/dist/boot/types.d.ts +0 -62
  123. package/dist/boot/types.d.ts.map +0 -1
  124. package/dist/common/attr-names.js.map +0 -1
  125. package/dist/common/component.d.ts +0 -19
  126. package/dist/common/component.d.ts.map +0 -1
  127. package/dist/common/control.d.ts +0 -13
  128. package/dist/common/control.d.ts.map +0 -1
  129. package/dist/common/control.js.map +0 -1
  130. package/dist/common/env.js +0 -47
  131. package/dist/common/env.js.map +0 -1
  132. package/dist/common/error-boundary.d.ts +0 -16
  133. package/dist/common/error-boundary.d.ts.map +0 -1
  134. package/dist/common/invariant.js +0 -17
  135. package/dist/common/invariant.js.map +0 -1
  136. package/dist/common/jsx.d.ts +0 -23
  137. package/dist/common/jsx.d.ts.map +0 -1
  138. package/dist/common/jsx.js.map +0 -1
  139. package/dist/common/logger.js +0 -36
  140. package/dist/common/logger.js.map +0 -1
  141. package/dist/common/promise.js +0 -8
  142. package/dist/common/promise.js.map +0 -1
  143. package/dist/common/props.d.ts.map +0 -1
  144. package/dist/common/render-context.js.map +0 -1
  145. package/dist/common/route-activity.js.map +0 -1
  146. package/dist/common/router-internal.js.map +0 -1
  147. package/dist/common/router.d.ts.map +0 -1
  148. package/dist/common/ssr-errors.d.ts +0 -11
  149. package/dist/common/ssr-errors.d.ts.map +0 -1
  150. package/dist/common/ssr-errors.js +0 -16
  151. package/dist/common/ssr-errors.js.map +0 -1
  152. package/dist/common/ssr.d.ts +0 -42
  153. package/dist/common/ssr.d.ts.map +0 -1
  154. package/dist/common/ssr.js.map +0 -1
  155. package/dist/common/vnode.d.ts +0 -22
  156. package/dist/common/vnode.d.ts.map +0 -1
  157. package/dist/common/vnode.js.map +0 -1
  158. package/dist/components/error-boundary.d.ts +0 -15
  159. package/dist/components/error-boundary.d.ts.map +0 -1
  160. package/dist/components/error-boundary.js +0 -43
  161. package/dist/components/error-boundary.js.map +0 -1
  162. package/dist/components/link.d.ts +0 -68
  163. package/dist/components/link.d.ts.map +0 -1
  164. package/dist/components/link.js +0 -76
  165. package/dist/components/link.js.map +0 -1
  166. package/dist/control/case.d.ts +0 -19
  167. package/dist/control/case.d.ts.map +0 -1
  168. package/dist/control/case.js +0 -70
  169. package/dist/control/case.js.map +0 -1
  170. package/dist/control/for.d.ts +0 -24
  171. package/dist/control/for.d.ts.map +0 -1
  172. package/dist/control/for.js +0 -63
  173. package/dist/control/for.js.map +0 -1
  174. package/dist/control/shared.d.ts +0 -9
  175. package/dist/control/shared.d.ts.map +0 -1
  176. package/dist/control/shared.js +0 -20
  177. package/dist/control/shared.js.map +0 -1
  178. package/dist/control/show.d.ts +0 -15
  179. package/dist/control/show.d.ts.map +0 -1
  180. package/dist/control/show.js +0 -34
  181. package/dist/control/show.js.map +0 -1
  182. package/dist/data/data-runtime.d.ts +0 -28
  183. package/dist/data/data-runtime.d.ts.map +0 -1
  184. package/dist/data/data-runtime.js.map +0 -1
  185. package/dist/data/invalidation-listeners.js.map +0 -1
  186. package/dist/data/invalidation.d.ts +0 -9
  187. package/dist/data/invalidation.d.ts.map +0 -1
  188. package/dist/data/invalidation.js +0 -27
  189. package/dist/data/invalidation.js.map +0 -1
  190. package/dist/data/mutation-cell.d.ts +0 -28
  191. package/dist/data/mutation-cell.d.ts.map +0 -1
  192. package/dist/data/mutation-cell.js +0 -132
  193. package/dist/data/mutation-cell.js.map +0 -1
  194. package/dist/data/query-cell.d.ts +0 -46
  195. package/dist/data/query-cell.d.ts.map +0 -1
  196. package/dist/data/query-cell.js +0 -290
  197. package/dist/data/query-cell.js.map +0 -1
  198. package/dist/data/query-key.js +0 -42
  199. package/dist/data/query-key.js.map +0 -1
  200. package/dist/data/shared.js +0 -21
  201. package/dist/data/shared.js.map +0 -1
  202. package/dist/data/testing.js +0 -2
  203. package/dist/data/types.d.ts +0 -161
  204. package/dist/data/types.d.ts.map +0 -1
  205. package/dist/foundations/icon/icon.d.ts +0 -53
  206. package/dist/foundations/icon/icon.d.ts.map +0 -1
  207. package/dist/foundations/icon/icon.js +0 -88
  208. package/dist/foundations/icon/icon.js.map +0 -1
  209. package/dist/foundations/icon/icon.types.d.ts +0 -22
  210. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  211. package/dist/foundations/interactions/dismissable.d.ts +0 -72
  212. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  213. package/dist/foundations/interactions/dismissable.js +0 -26
  214. package/dist/foundations/interactions/dismissable.js.map +0 -1
  215. package/dist/foundations/interactions/focusable.d.ts +0 -22
  216. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  217. package/dist/foundations/interactions/focusable.js +0 -18
  218. package/dist/foundations/interactions/focusable.js.map +0 -1
  219. package/dist/foundations/interactions/hoverable.d.ts +0 -26
  220. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  221. package/dist/foundations/interactions/hoverable.js +0 -15
  222. package/dist/foundations/interactions/hoverable.js.map +0 -1
  223. package/dist/foundations/interactions/interaction-policy.d.ts +0 -50
  224. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  225. package/dist/foundations/interactions/interaction-policy.js +0 -122
  226. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  227. package/dist/foundations/interactions/pressable.d.ts +0 -61
  228. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  229. package/dist/foundations/interactions/pressable.js +0 -51
  230. package/dist/foundations/interactions/pressable.js.map +0 -1
  231. package/dist/foundations/interactions/roving-focus.d.ts +0 -52
  232. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  233. package/dist/foundations/interactions/roving-focus.js +0 -71
  234. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  235. package/dist/foundations/state/controllable.d.ts +0 -33
  236. package/dist/foundations/state/controllable.d.ts.map +0 -1
  237. package/dist/foundations/state/controllable.js +0 -82
  238. package/dist/foundations/state/controllable.js.map +0 -1
  239. package/dist/foundations/structures/collection.d.ts +0 -52
  240. package/dist/foundations/structures/collection.d.ts.map +0 -1
  241. package/dist/foundations/structures/collection.js +0 -51
  242. package/dist/foundations/structures/collection.js.map +0 -1
  243. package/dist/foundations/structures/layer.d.ts +0 -81
  244. package/dist/foundations/structures/layer.d.ts.map +0 -1
  245. package/dist/foundations/structures/layer.js +0 -81
  246. package/dist/foundations/structures/layer.js.map +0 -1
  247. package/dist/foundations/structures/layout.d.ts +0 -33
  248. package/dist/foundations/structures/layout.d.ts.map +0 -1
  249. package/dist/foundations/structures/layout.js +0 -13
  250. package/dist/foundations/structures/layout.js.map +0 -1
  251. package/dist/foundations/structures/portal.d.ts +0 -2
  252. package/dist/foundations/structures/portal.js +0 -3
  253. package/dist/foundations/structures/presence.d.ts +0 -37
  254. package/dist/foundations/structures/presence.d.ts.map +0 -1
  255. package/dist/foundations/structures/presence.js +0 -39
  256. package/dist/foundations/structures/presence.js.map +0 -1
  257. package/dist/foundations/structures/slot.d.ts +0 -35
  258. package/dist/foundations/structures/slot.d.ts.map +0 -1
  259. package/dist/foundations/structures/slot.js +0 -41
  260. package/dist/foundations/structures/slot.js.map +0 -1
  261. package/dist/foundations/utilities/aria.d.ts +0 -16
  262. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  263. package/dist/foundations/utilities/aria.js +0 -17
  264. package/dist/foundations/utilities/aria.js.map +0 -1
  265. package/dist/foundations/utilities/compose-handlers.d.ts +0 -37
  266. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  267. package/dist/foundations/utilities/compose-handlers.js +0 -20
  268. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  269. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  270. package/dist/foundations/utilities/compose-ref.js +0 -18
  271. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  272. package/dist/foundations/utilities/event-types.d.ts +0 -20
  273. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  274. package/dist/foundations/utilities/merge-props.d.ts +0 -5
  275. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  276. package/dist/foundations/utilities/merge-props.js +0 -49
  277. package/dist/foundations/utilities/merge-props.js.map +0 -1
  278. package/dist/foundations/utilities/use-id.d.ts +0 -32
  279. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  280. package/dist/foundations/utilities/use-id.js.map +0 -1
  281. package/dist/fx/fx.d.ts +0 -33
  282. package/dist/fx/fx.d.ts.map +0 -1
  283. package/dist/fx/fx.js +0 -213
  284. package/dist/fx/fx.js.map +0 -1
  285. package/dist/fx/noop.js +0 -9
  286. package/dist/fx/noop.js.map +0 -1
  287. package/dist/fx/timing.d.ts +0 -159
  288. package/dist/fx/timing.d.ts.map +0 -1
  289. package/dist/fx/timing.js +0 -243
  290. package/dist/fx/timing.js.map +0 -1
  291. package/dist/index.js.map +0 -1
  292. package/dist/jsx/index.d.ts +0 -2
  293. package/dist/jsx/index.js +0 -4
  294. package/dist/jsx/types.d.ts.map +0 -1
  295. package/dist/jsx/types.js +0 -2
  296. package/dist/jsx/utils.d.ts +0 -5
  297. package/dist/jsx/utils.d.ts.map +0 -1
  298. package/dist/jsx/utils.js +0 -19
  299. package/dist/jsx/utils.js.map +0 -1
  300. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  301. package/dist/jsx-dev-runtime.js.map +0 -1
  302. package/dist/jsx-runtime.d.ts.map +0 -1
  303. package/dist/jsx-runtime.js.map +0 -1
  304. package/dist/jsx-runtime2.d.ts +0 -3
  305. package/dist/jsx-runtime2.js +0 -4
  306. package/dist/renderer/attributes.js +0 -232
  307. package/dist/renderer/attributes.js.map +0 -1
  308. package/dist/renderer/boundaries.js +0 -266
  309. package/dist/renderer/boundaries.js.map +0 -1
  310. package/dist/renderer/child-shape.js +0 -85
  311. package/dist/renderer/child-shape.js.map +0 -1
  312. package/dist/renderer/children-fastpath.js +0 -149
  313. package/dist/renderer/children-fastpath.js.map +0 -1
  314. package/dist/renderer/children.js +0 -160
  315. package/dist/renderer/children.js.map +0 -1
  316. package/dist/renderer/cleanup.js +0 -210
  317. package/dist/renderer/cleanup.js.map +0 -1
  318. package/dist/renderer/component-host-cleanup.js +0 -68
  319. package/dist/renderer/component-host-cleanup.js.map +0 -1
  320. package/dist/renderer/component-host-instances.js +0 -65
  321. package/dist/renderer/component-host-instances.js.map +0 -1
  322. package/dist/renderer/component-host.js +0 -247
  323. package/dist/renderer/component-host.js.map +0 -1
  324. package/dist/renderer/dom-host.js +0 -13
  325. package/dist/renderer/dom-host.js.map +0 -1
  326. package/dist/renderer/dom-internal.js +0 -186
  327. package/dist/renderer/dom-internal.js.map +0 -1
  328. package/dist/renderer/dom.js +0 -10
  329. package/dist/renderer/element-children.js +0 -279
  330. package/dist/renderer/element-children.js.map +0 -1
  331. package/dist/renderer/env.js +0 -2
  332. package/dist/renderer/error-boundary-dom.js +0 -78
  333. package/dist/renderer/error-boundary-dom.js.map +0 -1
  334. package/dist/renderer/evaluate-dom-range.js +0 -85
  335. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  336. package/dist/renderer/evaluate-reconcile.js +0 -282
  337. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  338. package/dist/renderer/evaluate.js +0 -84
  339. package/dist/renderer/evaluate.js.map +0 -1
  340. package/dist/renderer/fastpath.js +0 -150
  341. package/dist/renderer/fastpath.js.map +0 -1
  342. package/dist/renderer/for-commit-dom-map.js +0 -83
  343. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  344. package/dist/renderer/for-commit-removal.js +0 -36
  345. package/dist/renderer/for-commit-removal.js.map +0 -1
  346. package/dist/renderer/for-commit-reorder.js +0 -89
  347. package/dist/renderer/for-commit-reorder.js.map +0 -1
  348. package/dist/renderer/for-commit.js +0 -314
  349. package/dist/renderer/for-commit.js.map +0 -1
  350. package/dist/renderer/index.js +0 -38
  351. package/dist/renderer/index.js.map +0 -1
  352. package/dist/renderer/keyed-children.js +0 -32
  353. package/dist/renderer/keyed-children.js.map +0 -1
  354. package/dist/renderer/keyed.js +0 -167
  355. package/dist/renderer/keyed.js.map +0 -1
  356. package/dist/renderer/namespaces.js +0 -23
  357. package/dist/renderer/namespaces.js.map +0 -1
  358. package/dist/renderer/prop-bindings.js +0 -280
  359. package/dist/renderer/prop-bindings.js.map +0 -1
  360. package/dist/renderer/reactive-child-dom.js +0 -133
  361. package/dist/renderer/reactive-child-dom.js.map +0 -1
  362. package/dist/renderer/reactive-child-sources.js +0 -184
  363. package/dist/renderer/reactive-child-sources.js.map +0 -1
  364. package/dist/renderer/reactive-children.js +0 -294
  365. package/dist/renderer/reactive-children.js.map +0 -1
  366. package/dist/renderer/reconcile-commit.js +0 -38
  367. package/dist/renderer/reconcile-commit.js.map +0 -1
  368. package/dist/renderer/reconcile-fastpaths.js +0 -107
  369. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  370. package/dist/renderer/reconcile-resolution.js +0 -187
  371. package/dist/renderer/reconcile-resolution.js.map +0 -1
  372. package/dist/renderer/reconcile.js +0 -39
  373. package/dist/renderer/reconcile.js.map +0 -1
  374. package/dist/renderer/retained-element-rollback.js +0 -277
  375. package/dist/renderer/retained-element-rollback.js.map +0 -1
  376. package/dist/renderer/stable-patch.js +0 -81
  377. package/dist/renderer/stable-patch.js.map +0 -1
  378. package/dist/renderer/static-reuse.js +0 -96
  379. package/dist/renderer/static-reuse.js.map +0 -1
  380. package/dist/renderer/types.js +0 -2
  381. package/dist/renderer/utils.js +0 -256
  382. package/dist/renderer/utils.js.map +0 -1
  383. package/dist/router/access.js +0 -36
  384. package/dist/router/access.js.map +0 -1
  385. package/dist/router/activity.d.ts +0 -10
  386. package/dist/router/activity.d.ts.map +0 -1
  387. package/dist/router/activity.js +0 -87
  388. package/dist/router/activity.js.map +0 -1
  389. package/dist/router/authoring.d.ts +0 -22
  390. package/dist/router/authoring.d.ts.map +0 -1
  391. package/dist/router/authoring.js +0 -198
  392. package/dist/router/authoring.js.map +0 -1
  393. package/dist/router/internal-types.d.ts +0 -31
  394. package/dist/router/internal-types.d.ts.map +0 -1
  395. package/dist/router/lazy.d.ts +0 -19
  396. package/dist/router/lazy.d.ts.map +0 -1
  397. package/dist/router/lazy.js +0 -52
  398. package/dist/router/lazy.js.map +0 -1
  399. package/dist/router/manifest.d.ts +0 -10
  400. package/dist/router/manifest.d.ts.map +0 -1
  401. package/dist/router/manifest.js +0 -49
  402. package/dist/router/manifest.js.map +0 -1
  403. package/dist/router/match.js +0 -122
  404. package/dist/router/match.js.map +0 -1
  405. package/dist/router/navigate.d.ts +0 -11
  406. package/dist/router/navigate.d.ts.map +0 -1
  407. package/dist/router/navigate.js +0 -76
  408. package/dist/router/navigate.js.map +0 -1
  409. package/dist/router/navigation-registry.d.ts +0 -32
  410. package/dist/router/navigation-registry.d.ts.map +0 -1
  411. package/dist/router/navigation-registry.js +0 -105
  412. package/dist/router/navigation-registry.js.map +0 -1
  413. package/dist/router/navigation-scroll.d.ts +0 -14
  414. package/dist/router/navigation-scroll.d.ts.map +0 -1
  415. package/dist/router/navigation-scroll.js +0 -93
  416. package/dist/router/navigation-scroll.js.map +0 -1
  417. package/dist/router/navigation-targets.d.ts +0 -31
  418. package/dist/router/navigation-targets.d.ts.map +0 -1
  419. package/dist/router/navigation-targets.js +0 -255
  420. package/dist/router/navigation-targets.js.map +0 -1
  421. package/dist/router/policy.d.ts +0 -28
  422. package/dist/router/policy.d.ts.map +0 -1
  423. package/dist/router/policy.js +0 -132
  424. package/dist/router/policy.js.map +0 -1
  425. package/dist/router/rendering.d.ts +0 -10
  426. package/dist/router/rendering.d.ts.map +0 -1
  427. package/dist/router/rendering.js +0 -46
  428. package/dist/router/rendering.js.map +0 -1
  429. package/dist/router/resolution.d.ts +0 -4
  430. package/dist/router/resolution.d.ts.map +0 -1
  431. package/dist/router/resolution.js +0 -86
  432. package/dist/router/resolution.js.map +0 -1
  433. package/dist/router/route-context.js +0 -79
  434. package/dist/router/route-context.js.map +0 -1
  435. package/dist/router/route-matching.d.ts +0 -20
  436. package/dist/router/route-matching.d.ts.map +0 -1
  437. package/dist/router/route-matching.js +0 -175
  438. package/dist/router/route-matching.js.map +0 -1
  439. package/dist/router/route-query.d.ts +0 -17
  440. package/dist/router/route-query.d.ts.map +0 -1
  441. package/dist/router/route-query.js +0 -47
  442. package/dist/router/route-query.js.map +0 -1
  443. package/dist/router/route.d.ts +0 -8
  444. package/dist/router/route.js +0 -10
  445. package/dist/router/store.d.ts +0 -50
  446. package/dist/router/store.d.ts.map +0 -1
  447. package/dist/router/store.js +0 -171
  448. package/dist/router/store.js.map +0 -1
  449. package/dist/router/testing.js +0 -4
  450. package/dist/runtime/access.d.ts +0 -20
  451. package/dist/runtime/access.d.ts.map +0 -1
  452. package/dist/runtime/access.js +0 -45
  453. package/dist/runtime/access.js.map +0 -1
  454. package/dist/runtime/child-scope.d.ts +0 -22
  455. package/dist/runtime/child-scope.d.ts.map +0 -1
  456. package/dist/runtime/child-scope.js +0 -87
  457. package/dist/runtime/child-scope.js.map +0 -1
  458. package/dist/runtime/component-cleanup.d.ts +0 -16
  459. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  460. package/dist/runtime/component-cleanup.js +0 -70
  461. package/dist/runtime/component-cleanup.js.map +0 -1
  462. package/dist/runtime/component-commit.js +0 -165
  463. package/dist/runtime/component-commit.js.map +0 -1
  464. package/dist/runtime/component-facade.d.ts +0 -5
  465. package/dist/runtime/component-facade.js +0 -4
  466. package/dist/runtime/component-internal.d.ts +0 -100
  467. package/dist/runtime/component-internal.d.ts.map +0 -1
  468. package/dist/runtime/component-internal.js +0 -219
  469. package/dist/runtime/component-internal.js.map +0 -1
  470. package/dist/runtime/component-lifecycle.d.ts +0 -49
  471. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  472. package/dist/runtime/component-lifecycle.js +0 -176
  473. package/dist/runtime/component-lifecycle.js.map +0 -1
  474. package/dist/runtime/component-scope.d.ts +0 -55
  475. package/dist/runtime/component-scope.d.ts.map +0 -1
  476. package/dist/runtime/component-scope.js.map +0 -1
  477. package/dist/runtime/component.d.ts +0 -5
  478. package/dist/runtime/component.js +0 -5
  479. package/dist/runtime/context.d.ts +0 -69
  480. package/dist/runtime/context.d.ts.map +0 -1
  481. package/dist/runtime/context.js +0 -210
  482. package/dist/runtime/context.js.map +0 -1
  483. package/dist/runtime/control.d.ts +0 -43
  484. package/dist/runtime/control.d.ts.map +0 -1
  485. package/dist/runtime/control.js +0 -126
  486. package/dist/runtime/control.js.map +0 -1
  487. package/dist/runtime/derive.d.ts +0 -17
  488. package/dist/runtime/derive.d.ts.map +0 -1
  489. package/dist/runtime/derive.js +0 -142
  490. package/dist/runtime/derive.js.map +0 -1
  491. package/dist/runtime/dev-namespace.d.ts +0 -31
  492. package/dist/runtime/dev-namespace.d.ts.map +0 -1
  493. package/dist/runtime/dev-namespace.js +0 -57
  494. package/dist/runtime/dev-namespace.js.map +0 -1
  495. package/dist/runtime/effect.d.ts +0 -32
  496. package/dist/runtime/effect.d.ts.map +0 -1
  497. package/dist/runtime/effect.js +0 -177
  498. package/dist/runtime/effect.js.map +0 -1
  499. package/dist/runtime/error-boundary.d.ts +0 -5
  500. package/dist/runtime/error-boundary.d.ts.map +0 -1
  501. package/dist/runtime/error-boundary.js +0 -31
  502. package/dist/runtime/error-boundary.js.map +0 -1
  503. package/dist/runtime/events.d.ts +0 -58
  504. package/dist/runtime/events.d.ts.map +0 -1
  505. package/dist/runtime/events.js +0 -204
  506. package/dist/runtime/events.js.map +0 -1
  507. package/dist/runtime/execution-model.d.ts +0 -7
  508. package/dist/runtime/execution-model.d.ts.map +0 -1
  509. package/dist/runtime/execution-model.js +0 -15
  510. package/dist/runtime/execution-model.js.map +0 -1
  511. package/dist/runtime/fastlane.d.ts +0 -34
  512. package/dist/runtime/fastlane.d.ts.map +0 -1
  513. package/dist/runtime/fastlane.js +0 -175
  514. package/dist/runtime/fastlane.js.map +0 -1
  515. package/dist/runtime/for-bench.d.ts +0 -41
  516. package/dist/runtime/for-bench.d.ts.map +0 -1
  517. package/dist/runtime/for-bench.js +0 -171
  518. package/dist/runtime/for-bench.js.map +0 -1
  519. package/dist/runtime/for-internal.d.ts +0 -43
  520. package/dist/runtime/for-internal.d.ts.map +0 -1
  521. package/dist/runtime/for-internal.js +0 -98
  522. package/dist/runtime/for-internal.js.map +0 -1
  523. package/dist/runtime/for-reconcile.d.ts +0 -8
  524. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  525. package/dist/runtime/for-reconcile.js +0 -389
  526. package/dist/runtime/for-reconcile.js.map +0 -1
  527. package/dist/runtime/for-scopes.d.ts +0 -26
  528. package/dist/runtime/for-scopes.d.ts.map +0 -1
  529. package/dist/runtime/for-scopes.js +0 -160
  530. package/dist/runtime/for-scopes.js.map +0 -1
  531. package/dist/runtime/for-signals.d.ts +0 -30
  532. package/dist/runtime/for-signals.d.ts.map +0 -1
  533. package/dist/runtime/for-signals.js +0 -139
  534. package/dist/runtime/for-signals.js.map +0 -1
  535. package/dist/runtime/for-types.d.ts +0 -9
  536. package/dist/runtime/for-types.d.ts.map +0 -1
  537. package/dist/runtime/for.d.ts +0 -4
  538. package/dist/runtime/for.js +0 -5
  539. package/dist/runtime/index.d.ts +0 -24
  540. package/dist/runtime/index.js +0 -31
  541. package/dist/runtime/lifecycle-operations.d.ts +0 -31
  542. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  543. package/dist/runtime/lifecycle-operations.js.map +0 -1
  544. package/dist/runtime/operations.d.ts +0 -3
  545. package/dist/runtime/operations.js +0 -3
  546. package/dist/runtime/perf-metrics.d.ts +0 -26
  547. package/dist/runtime/perf-metrics.d.ts.map +0 -1
  548. package/dist/runtime/perf-metrics.js +0 -70
  549. package/dist/runtime/perf-metrics.js.map +0 -1
  550. package/dist/runtime/portal.d.ts +0 -22
  551. package/dist/runtime/portal.d.ts.map +0 -1
  552. package/dist/runtime/portal.js.map +0 -1
  553. package/dist/runtime/readable.d.ts +0 -29
  554. package/dist/runtime/readable.d.ts.map +0 -1
  555. package/dist/runtime/readable.js +0 -159
  556. package/dist/runtime/readable.js.map +0 -1
  557. package/dist/runtime/resource-cell.js +0 -114
  558. package/dist/runtime/resource-cell.js.map +0 -1
  559. package/dist/runtime/resource-operation.d.ts +0 -13
  560. package/dist/runtime/resource-operation.d.ts.map +0 -1
  561. package/dist/runtime/resource-operation.js +0 -170
  562. package/dist/runtime/resource-operation.js.map +0 -1
  563. package/dist/runtime/runtime.d.ts.map +0 -1
  564. package/dist/runtime/runtime.js +0 -59
  565. package/dist/runtime/runtime.js.map +0 -1
  566. package/dist/runtime/scheduler.d.ts.map +0 -1
  567. package/dist/runtime/scheduler.js.map +0 -1
  568. package/dist/runtime/selector-store.js +0 -24
  569. package/dist/runtime/selector-store.js.map +0 -1
  570. package/dist/runtime/selector.d.ts +0 -11
  571. package/dist/runtime/selector.d.ts.map +0 -1
  572. package/dist/runtime/selector.js.map +0 -1
  573. package/dist/runtime/snapshot-source.d.ts +0 -10
  574. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  575. package/dist/runtime/snapshot-source.js.map +0 -1
  576. package/dist/runtime/state.d.ts +0 -55
  577. package/dist/runtime/state.d.ts.map +0 -1
  578. package/dist/runtime/state.js.map +0 -1
  579. package/dist/ssg/batch-render.js +0 -103
  580. package/dist/ssg/batch-render.js.map +0 -1
  581. package/dist/ssg/create-static-gen.d.ts +0 -64
  582. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  583. package/dist/ssg/create-static-gen.js +0 -199
  584. package/dist/ssg/create-static-gen.js.map +0 -1
  585. package/dist/ssg/generate-metadata.js +0 -94
  586. package/dist/ssg/generate-metadata.js.map +0 -1
  587. package/dist/ssg/generation-plan.js +0 -70
  588. package/dist/ssg/generation-plan.js.map +0 -1
  589. package/dist/ssg/incremental-manifest.js +0 -56
  590. package/dist/ssg/incremental-manifest.js.map +0 -1
  591. package/dist/ssg/resolve-ssg-data.js +0 -105
  592. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  593. package/dist/ssg/route-utils.js +0 -24
  594. package/dist/ssg/route-utils.js.map +0 -1
  595. package/dist/ssg/static-routes.js +0 -102
  596. package/dist/ssg/static-routes.js.map +0 -1
  597. package/dist/ssg/types.d.ts +0 -189
  598. package/dist/ssg/types.d.ts.map +0 -1
  599. package/dist/ssg/write-static-files.js +0 -73
  600. package/dist/ssg/write-static-files.js.map +0 -1
  601. package/dist/ssr/attrs.js +0 -94
  602. package/dist/ssr/attrs.js.map +0 -1
  603. package/dist/ssr/boundaries.js +0 -113
  604. package/dist/ssr/boundaries.js.map +0 -1
  605. package/dist/ssr/component-runtime.js +0 -111
  606. package/dist/ssr/component-runtime.js.map +0 -1
  607. package/dist/ssr/context.d.ts +0 -50
  608. package/dist/ssr/context.d.ts.map +0 -1
  609. package/dist/ssr/context.js +0 -91
  610. package/dist/ssr/context.js.map +0 -1
  611. package/dist/ssr/errors.d.ts +0 -10
  612. package/dist/ssr/errors.d.ts.map +0 -1
  613. package/dist/ssr/errors.js +0 -14
  614. package/dist/ssr/errors.js.map +0 -1
  615. package/dist/ssr/escape.js +0 -193
  616. package/dist/ssr/escape.js.map +0 -1
  617. package/dist/ssr/hydration-data.js +0 -10
  618. package/dist/ssr/hydration-data.js.map +0 -1
  619. package/dist/ssr/hydration-verify.d.ts +0 -12
  620. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  621. package/dist/ssr/hydration-verify.js +0 -144
  622. package/dist/ssr/hydration-verify.js.map +0 -1
  623. package/dist/ssr/index-internal.d.ts +0 -15
  624. package/dist/ssr/index-internal.d.ts.map +0 -1
  625. package/dist/ssr/index-internal.js +0 -19
  626. package/dist/ssr/index-internal.js.map +0 -1
  627. package/dist/ssr/render-keys.js +0 -16
  628. package/dist/ssr/render-keys.js.map +0 -1
  629. package/dist/ssr/render-resolved.d.ts +0 -20
  630. package/dist/ssr/render-resolved.d.ts.map +0 -1
  631. package/dist/ssr/render-resolved.js +0 -35
  632. package/dist/ssr/render-resolved.js.map +0 -1
  633. package/dist/ssr/render-sync.d.ts +0 -21
  634. package/dist/ssr/render-sync.d.ts.map +0 -1
  635. package/dist/ssr/render-sync.js +0 -275
  636. package/dist/ssr/render-sync.js.map +0 -1
  637. package/dist/ssr/route-policy-resolution.js +0 -78
  638. package/dist/ssr/route-policy-resolution.js.map +0 -1
  639. package/dist/ssr/route-render.d.ts +0 -77
  640. package/dist/ssr/route-render.d.ts.map +0 -1
  641. package/dist/ssr/route-render.js +0 -120
  642. package/dist/ssr/route-render.js.map +0 -1
  643. package/dist/ssr/sink.d.ts +0 -26
  644. package/dist/ssr/sink.d.ts.map +0 -1
  645. package/dist/ssr/sink.js +0 -86
  646. package/dist/ssr/sink.js.map +0 -1
  647. package/dist/ssr/types.d.ts +0 -23
  648. package/dist/ssr/types.d.ts.map +0 -1
  649. package/dist/ssr/verify-hydration.js.map +0 -1
  650. package/dist/testing/index.d.ts.map +0 -1
  651. package/dist/testing/index.js.map +0 -1
@@ -1,122 +0,0 @@
1
- import { composeHandlers } from "../utilities/compose-handlers.js";
2
- import { mergeProps } from "../utilities/merge-props.js";
3
- import { ariaDisabled } from "../utilities/aria.js";
4
- import { composeRefs } from "../utilities/compose-ref.js";
5
- import { pressable } from "./pressable.js";
6
- //#region src/foundations/interactions/interaction-policy.ts
7
- /**
8
- * INTERACTION POLICY (FRAMEWORK LAW)
9
- *
10
- * This is THE ONLY way to create interactive elements. Components MUST NOT
11
- * implement interaction logic directly.
12
- *
13
- * INVARIANTS (ENFORCED):
14
- * 1. "Press" is the semantic. Click/touch/Enter/Space are implementation details.
15
- * 2. Disabled is enforced exactly once, here. Components may not check disabled.
16
- * 3. Keyboard handling is automatic. Components may not add onKeyDown for activation.
17
- * 4. Native elements opt out of polyfills, not semantics.
18
- * 5. asChild may replace the host element, not interaction behavior.
19
- * 6. This policy is the SINGLE SOURCE OF TRUTH for interactive behavior.
20
- *
21
- * DESIGN:
22
- * - Single public function: applyInteractionPolicy
23
- * - Returns props that compose via mergeProps
24
- * - Delegates to pressable for mechanics
25
- * - Enforces disabled once and only once
26
- * - No configuration beyond disabled and native element type
27
- *
28
- * PIT OF SUCCESS:
29
- * ✓ Can't bypass policy (only way to get interaction behavior)
30
- * ✓ Can't duplicate disabled checks (enforced once, here)
31
- * ✓ Can't write custom keyboard handlers for buttons (policy owns it)
32
- * ✓ Composes via mergeProps (standard props)
33
- * ✓ Wrong usage is impossible (no escape hatch)
34
- *
35
- * USAGE:
36
- * function Button({ onPress, disabled }) {
37
- * const interaction = applyInteractionPolicy({
38
- * isNative: true,
39
- * disabled,
40
- * onPress
41
- * });
42
- *
43
- * return <button {...interaction}>Click me</button>;
44
- * }
45
- *
46
- * MISUSE EXAMPLE (PREVENTED):
47
- * ❌ Button checking disabled again:
48
- * function Button({ disabled, onPress }) {
49
- * if (disabled) return; // NO! Policy handles this
50
- * const interaction = applyInteractionPolicy(...);
51
- * }
52
- *
53
- * ❌ Custom keyboard handler:
54
- * function Button({ onPress }) {
55
- * const interaction = applyInteractionPolicy(...);
56
- * return <button {...interaction} onKeyDown={...}>; // NO! Policy owns this
57
- * }
58
- *
59
- * ❌ Direct event handler:
60
- * <button onClick={onPress}>; // NO! Use applyInteractionPolicy
61
- */
62
- /**
63
- * THE interaction policy. Components MUST use this, NEVER implement
64
- * interaction logic directly.
65
- */
66
- function applyInteractionPolicy({ isNative, disabled, onPress, ref }) {
67
- function invokePress(e) {
68
- if (disabled) {
69
- e.preventDefault?.();
70
- return;
71
- }
72
- onPress?.(e);
73
- }
74
- if (isNative) return {
75
- disabled: disabled || void 0,
76
- onClick: (e) => invokePress(e),
77
- ref
78
- };
79
- const interaction = pressable({
80
- disabled,
81
- isNativeButton: false,
82
- onPress: (e) => invokePress(e)
83
- });
84
- return {
85
- ...interaction,
86
- ...ariaDisabled(disabled),
87
- tabIndex: disabled ? -1 : interaction.tabIndex ?? 0,
88
- ref
89
- };
90
- }
91
- /**
92
- * Merge rule for Slot / asChild
93
- *
94
- * Precedence:
95
- * policy → user → child
96
- *
97
- * Event handlers are composed (policy first).
98
- * Refs are always composed.
99
- * Policy props MUST take precedence to enforce invariants.
100
- */
101
- function mergeInteractionProps(childProps, policyProps, userProps) {
102
- const out = mergeProps(policyProps, userProps ? mergeProps(userProps, childProps) : childProps);
103
- for (const k in out) {
104
- if (!k.startsWith("on")) continue;
105
- const policyHandler = policyProps?.[k];
106
- const userHandler = userProps?.[k];
107
- const childHandler = childProps?.[k];
108
- if (policyHandler || userHandler || childHandler) {
109
- const toHandler = (h) => typeof h === "function" ? h : void 0;
110
- out[k] = composeHandlers(toHandler(policyHandler), composeHandlers(toHandler(userHandler), toHandler(childHandler)));
111
- }
112
- }
113
- const childRef = childProps?.ref;
114
- const userRef = userProps?.ref;
115
- const policyRef = policyProps?.ref;
116
- out.ref = composeRefs(childRef, userRef, policyRef);
117
- return out;
118
- }
119
- //#endregion
120
- export { applyInteractionPolicy, mergeInteractionProps };
121
-
122
- //# sourceMappingURL=interaction-policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interaction-policy.js","names":["mergePropsBase"],"sources":["../../../src/foundations/interactions/interaction-policy.ts"],"sourcesContent":["/**\n * INTERACTION POLICY (FRAMEWORK LAW)\n *\n * This is THE ONLY way to create interactive elements. Components MUST NOT\n * implement interaction logic directly.\n *\n * INVARIANTS (ENFORCED):\n * 1. \"Press\" is the semantic. Click/touch/Enter/Space are implementation details.\n * 2. Disabled is enforced exactly once, here. Components may not check disabled.\n * 3. Keyboard handling is automatic. Components may not add onKeyDown for activation.\n * 4. Native elements opt out of polyfills, not semantics.\n * 5. asChild may replace the host element, not interaction behavior.\n * 6. This policy is the SINGLE SOURCE OF TRUTH for interactive behavior.\n *\n * DESIGN:\n * - Single public function: applyInteractionPolicy\n * - Returns props that compose via mergeProps\n * - Delegates to pressable for mechanics\n * - Enforces disabled once and only once\n * - No configuration beyond disabled and native element type\n *\n * PIT OF SUCCESS:\n * ✓ Can't bypass policy (only way to get interaction behavior)\n * ✓ Can't duplicate disabled checks (enforced once, here)\n * ✓ Can't write custom keyboard handlers for buttons (policy owns it)\n * ✓ Composes via mergeProps (standard props)\n * ✓ Wrong usage is impossible (no escape hatch)\n *\n * USAGE:\n * function Button({ onPress, disabled }) {\n * const interaction = applyInteractionPolicy({\n * isNative: true,\n * disabled,\n * onPress\n * });\n *\n * return <button {...interaction}>Click me</button>;\n * }\n *\n * MISUSE EXAMPLE (PREVENTED):\n * ❌ Button checking disabled again:\n * function Button({ disabled, onPress }) {\n * if (disabled) return; // NO! Policy handles this\n * const interaction = applyInteractionPolicy(...);\n * }\n *\n * ❌ Custom keyboard handler:\n * function Button({ onPress }) {\n * const interaction = applyInteractionPolicy(...);\n * return <button {...interaction} onKeyDown={...}>; // NO! Policy owns this\n * }\n *\n * ❌ Direct event handler:\n * <button onClick={onPress}>; // NO! Use applyInteractionPolicy\n */\n\nimport { pressable } from './pressable';\nimport { ariaDisabled } from '../utilities/aria';\nimport { composeHandlers } from '../utilities/compose-handlers';\nimport { composeRefs, Ref } from '../utilities/compose-ref';\nimport { mergeProps as mergePropsBase } from '../utilities/merge-props';\n\nexport interface InteractionPolicyInput {\n /** Whether the host element is a native interactive element (button, a, etc) */\n isNative: boolean;\n /** Disabled state - checked ONLY here, never in components */\n disabled: boolean;\n /** User-provided press handler - semantic action, not DOM event */\n onPress?: (e: Event) => void;\n /** Optional ref to compose */\n ref?: Ref<unknown>;\n}\n\n/**\n * THE interaction policy. Components MUST use this, NEVER implement\n * interaction logic directly.\n */\nexport function applyInteractionPolicy({\n isNative,\n disabled,\n onPress,\n ref,\n}: InteractionPolicyInput) {\n // Disabled is enforced exactly once, here.\n // Components downstream may NOT check disabled.\n function invokePress(e: Event) {\n if (disabled) {\n e.preventDefault?.();\n return;\n }\n onPress?.(e);\n }\n\n if (isNative) {\n return {\n disabled: disabled || undefined,\n onClick: (e: Event) => invokePress(e),\n ref,\n };\n }\n\n // Non-native elements get full button semantics\n const interaction = pressable({\n disabled,\n isNativeButton: false,\n onPress: (e) => invokePress(e as Event),\n });\n\n return {\n ...interaction,\n ...ariaDisabled(disabled),\n tabIndex: disabled ? -1 : (interaction.tabIndex ?? 0),\n ref,\n };\n}\n\n/**\n * Merge rule for Slot / asChild\n *\n * Precedence:\n * policy → user → child\n *\n * Event handlers are composed (policy first).\n * Refs are always composed.\n * Policy props MUST take precedence to enforce invariants.\n */\nexport function mergeInteractionProps(\n childProps: Record<string, unknown>,\n policyProps: Record<string, unknown>,\n userProps?: Record<string, unknown>\n) {\n const mergedUserChild = userProps\n ? mergePropsBase(userProps, childProps)\n : childProps;\n const out = mergePropsBase(policyProps, mergedUserChild);\n\n // Ensure policy handlers always run first\n for (const k in out) {\n if (!k.startsWith('on')) continue;\n\n const policyHandler = policyProps?.[k];\n const userHandler = userProps?.[k];\n const childHandler = childProps?.[k];\n\n if (policyHandler || userHandler || childHandler) {\n const toHandler = (h: unknown) =>\n typeof h === 'function'\n ? (h as (...args: readonly unknown[]) => void)\n : undefined;\n\n out[k] = composeHandlers(\n toHandler(policyHandler),\n composeHandlers(toHandler(userHandler), toHandler(childHandler))\n );\n }\n }\n\n const childRef = childProps?.ref as Ref<unknown> | undefined;\n const userRef = userProps?.ref as Ref<unknown> | undefined;\n const policyRef = policyProps?.ref as Ref<unknown> | undefined;\n\n out.ref = composeRefs(childRef, userRef, policyRef);\n\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EA,SAAgB,uBAAuB,EACrC,UACA,UACA,SACA,OACyB;CAGzB,SAAS,YAAY,GAAU;EAC7B,IAAI,UAAU;GACZ,EAAE,iBAAiB;GACnB;EACF;EACA,UAAU,CAAC;CACb;CAEA,IAAI,UACF,OAAO;EACL,UAAU,YAAY;EACtB,UAAU,MAAa,YAAY,CAAC;EACpC;CACF;CAIF,MAAM,cAAc,UAAU;EAC5B;EACA,gBAAgB;EAChB,UAAU,MAAM,YAAY,CAAU;CACxC,CAAC;CAED,OAAO;EACL,GAAG;EACH,GAAG,aAAa,QAAQ;EACxB,UAAU,WAAW,KAAM,YAAY,YAAY;EACnD;CACF;AACF;;;;;;;;;;;AAYA,SAAgB,sBACd,YACA,aACA,WACA;CAIA,MAAM,MAAMA,WAAe,aAHH,YACpBA,WAAe,WAAW,UAAU,IACpC,UACmD;CAGvD,KAAK,MAAM,KAAK,KAAK;EACnB,IAAI,CAAC,EAAE,WAAW,IAAI,GAAG;EAEzB,MAAM,gBAAgB,cAAc;EACpC,MAAM,cAAc,YAAY;EAChC,MAAM,eAAe,aAAa;EAElC,IAAI,iBAAiB,eAAe,cAAc;GAChD,MAAM,aAAa,MACjB,OAAO,MAAM,aACR,IACD;GAEN,IAAI,KAAK,gBACP,UAAU,aAAa,GACvB,gBAAgB,UAAU,WAAW,GAAG,UAAU,YAAY,CAAC,CACjE;EACF;CACF;CAEA,MAAM,WAAW,YAAY;CAC7B,MAAM,UAAU,WAAW;CAC3B,MAAM,YAAY,aAAa;CAE/B,IAAI,MAAM,YAAY,UAAU,SAAS,SAAS;CAElD,OAAO;AACT"}
@@ -1,61 +0,0 @@
1
- import { DefaultPreventable, KeyboardLikeEvent, PropagationStoppable } from "../utilities/event-types.js";
2
-
3
- //#region src/foundations/interactions/pressable.d.ts
4
- /**
5
- * pressable
6
- *
7
- * Interaction helper that produces VNode props for 'press' semantics.
8
- * - Pure and deterministic: no DOM construction or mutation here
9
- * - The runtime owns event attachment and scheduling
10
- * - This helper returns plain props (handlers) intended to be attached by the runtime
11
- *
12
- * Behaviour:
13
- * - For native buttons: only an `onClick` prop is provided (no ARIA or keyboard shims)
14
- * - For non-button elements: add `role="button"` and `tabIndex` and keyboard handlers
15
- * - Activation: `Enter` activates on keydown, `Space` activates on keyup (matches native button)
16
- * - Disabled: handlers short-circuit and `aria-disabled` is set for all hosts
17
- *
18
- * POLICY DECISIONS (LOCKED):
19
- *
20
- * 1. Activation Timing (Platform Parity)
21
- * - Enter fires on keydown (immediate response)
22
- * - Space fires on keyup (allows cancel by moving focus, matches native)
23
- * - Space keydown prevents scroll (matches native button behavior)
24
- *
25
- * 2. Disabled Enforcement Strategy
26
- * - Native buttons: Use HTML `disabled` attribute (platform-enforced non-interactivity)
27
- * AND `aria-disabled` (consistent a11y signaling)
28
- * - Non-native: Use `tabIndex=-1` (removes from tab order)
29
- * AND `aria-disabled` (signals disabled state to AT)
30
- * - Click handler short-circuits as defense-in-depth (prevents leaked focus issues)
31
- *
32
- * 3. Key Repeat Behavior
33
- * - Held Enter/Space will fire onPress repeatedly (matches native button)
34
- * - No debouncing or repeat prevention (platform parity)
35
- */
36
- interface PressableOptions {
37
- disabled?: boolean;
38
- onPress?: (e: PressEvent) => void;
39
- /**
40
- * Whether the host is a native button. Defaults to false.
41
- */
42
- isNativeButton?: boolean;
43
- }
44
- type PressEvent = DefaultPreventable & PropagationStoppable;
45
- interface PressableResult {
46
- onClick: (e: PressEvent) => void;
47
- disabled?: true;
48
- role?: 'button';
49
- tabIndex?: number;
50
- onKeyDown?: (e: KeyboardLikeEvent) => void;
51
- onKeyUp?: (e: KeyboardLikeEvent) => void;
52
- 'aria-disabled'?: 'true';
53
- }
54
- declare function pressable({
55
- disabled,
56
- onPress,
57
- isNativeButton
58
- }: PressableOptions): PressableResult;
59
- //#endregion
60
- export { PressableOptions, PressableResult, pressable };
61
- //# sourceMappingURL=pressable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pressable.d.ts","names":[],"sources":["../../../src/foundations/interactions/pressable.ts"],"mappings":";;;;;;AAiCA;;;;;;;;;;AAMgB;AAOkB;;;;AAGyB;AAE3D;;;;;;;;;;;;;UAlBiB,gBAAA;EACf,QAAA;EACA,OAAA,IAAW,CAAA,EAAG,UAAU;EAqBX;;;EAjBb,cAAA;AAAA;AAAA,KAUG,UAAA,GAAa,kBAAA,GAAqB,oBAAoB;AAAA,UAE1C,eAAA;EACf,OAAA,GAAU,CAAA,EAAG,UAAA;EACb,QAAA;EACA,IAAA;EACA,QAAA;EACA,SAAA,IAAa,CAAA,EAAG,iBAAA;EAChB,OAAA,IAAW,CAAA,EAAG,iBAAA;EACd,eAAA;AAAA;AAAA,iBAGc,SAAA;EACd,QAAA;EACA,OAAA;EACA;AAAA,GACC,gBAAA,GAAmB,eAAA"}
@@ -1,51 +0,0 @@
1
- import { ariaDisabled } from "../utilities/aria.js";
2
- //#region src/foundations/interactions/pressable.ts
3
- function pressable({ disabled, onPress, isNativeButton = false }) {
4
- const props = { onClick: (e) => {
5
- if (disabled) {
6
- e.preventDefault?.();
7
- e.stopPropagation?.();
8
- return;
9
- }
10
- onPress?.(e);
11
- } };
12
- if (isNativeButton) {
13
- if (disabled) {
14
- props.disabled = true;
15
- Object.assign(props, ariaDisabled(disabled));
16
- }
17
- return props;
18
- }
19
- props.role = "button";
20
- props.tabIndex = disabled ? -1 : 0;
21
- props.onKeyDown = (e) => {
22
- if (disabled) {
23
- e.preventDefault?.();
24
- e.stopPropagation?.();
25
- return;
26
- }
27
- if (e.key === "Enter") {
28
- e.preventDefault?.();
29
- onPress?.(e);
30
- return;
31
- }
32
- if (e.key === " ") e.preventDefault?.();
33
- };
34
- props.onKeyUp = (e) => {
35
- if (disabled) {
36
- e.preventDefault?.();
37
- e.stopPropagation?.();
38
- return;
39
- }
40
- if (e.key === " ") {
41
- e.preventDefault?.();
42
- onPress?.(e);
43
- }
44
- };
45
- if (disabled) Object.assign(props, ariaDisabled(disabled));
46
- return props;
47
- }
48
- //#endregion
49
- export { pressable };
50
-
51
- //# sourceMappingURL=pressable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pressable.js","names":[],"sources":["../../../src/foundations/interactions/pressable.ts"],"sourcesContent":["/**\n * pressable\n *\n * Interaction helper that produces VNode props for 'press' semantics.\n * - Pure and deterministic: no DOM construction or mutation here\n * - The runtime owns event attachment and scheduling\n * - This helper returns plain props (handlers) intended to be attached by the runtime\n *\n * Behaviour:\n * - For native buttons: only an `onClick` prop is provided (no ARIA or keyboard shims)\n * - For non-button elements: add `role=\"button\"` and `tabIndex` and keyboard handlers\n * - Activation: `Enter` activates on keydown, `Space` activates on keyup (matches native button)\n * - Disabled: handlers short-circuit and `aria-disabled` is set for all hosts\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Activation Timing (Platform Parity)\n * - Enter fires on keydown (immediate response)\n * - Space fires on keyup (allows cancel by moving focus, matches native)\n * - Space keydown prevents scroll (matches native button behavior)\n *\n * 2. Disabled Enforcement Strategy\n * - Native buttons: Use HTML `disabled` attribute (platform-enforced non-interactivity)\n * AND `aria-disabled` (consistent a11y signaling)\n * - Non-native: Use `tabIndex=-1` (removes from tab order)\n * AND `aria-disabled` (signals disabled state to AT)\n * - Click handler short-circuits as defense-in-depth (prevents leaked focus issues)\n *\n * 3. Key Repeat Behavior\n * - Held Enter/Space will fire onPress repeatedly (matches native button)\n * - No debouncing or repeat prevention (platform parity)\n */\n\nexport interface PressableOptions {\n disabled?: boolean;\n onPress?: (e: PressEvent) => void;\n /**\n * Whether the host is a native button. Defaults to false.\n */\n isNativeButton?: boolean;\n}\n\nimport type {\n DefaultPreventable,\n KeyboardLikeEvent,\n PropagationStoppable,\n} from '../utilities/event-types';\nimport { ariaDisabled } from '../utilities/aria';\n\ntype PressEvent = DefaultPreventable & PropagationStoppable;\n\nexport interface PressableResult {\n onClick: (e: PressEvent) => void;\n disabled?: true;\n role?: 'button';\n tabIndex?: number;\n onKeyDown?: (e: KeyboardLikeEvent) => void;\n onKeyUp?: (e: KeyboardLikeEvent) => void;\n 'aria-disabled'?: 'true';\n}\n\nexport function pressable({\n disabled,\n onPress,\n isNativeButton = false,\n}: PressableOptions): PressableResult {\n const props: PressableResult = {\n onClick: (e) => {\n if (disabled) {\n e.preventDefault?.();\n e.stopPropagation?.();\n return;\n }\n onPress?.(e);\n },\n };\n\n if (isNativeButton) {\n if (disabled) {\n props.disabled = true;\n Object.assign(props, ariaDisabled(disabled));\n }\n return props;\n }\n\n props.role = 'button';\n props.tabIndex = disabled ? -1 : 0;\n\n props.onKeyDown = (e) => {\n if (disabled) {\n e.preventDefault?.();\n e.stopPropagation?.();\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault?.();\n onPress?.(e);\n return;\n }\n\n if (e.key === ' ') {\n // Prevent scrolling while Space is held.\n e.preventDefault?.();\n }\n };\n\n props.onKeyUp = (e) => {\n if (disabled) {\n e.preventDefault?.();\n e.stopPropagation?.();\n return;\n }\n if (e.key === ' ') {\n e.preventDefault?.();\n onPress?.(e);\n }\n };\n\n if (disabled) Object.assign(props, ariaDisabled(disabled));\n return props;\n}\n"],"mappings":";;AA6DA,SAAgB,UAAU,EACxB,UACA,SACA,iBAAiB,SACmB;CACpC,MAAM,QAAyB,EAC7B,UAAU,MAAM;EACd,IAAI,UAAU;GACZ,EAAE,iBAAiB;GACnB,EAAE,kBAAkB;GACpB;EACF;EACA,UAAU,CAAC;CACb,EACF;CAEA,IAAI,gBAAgB;EAClB,IAAI,UAAU;GACZ,MAAM,WAAW;GACjB,OAAO,OAAO,OAAO,aAAa,QAAQ,CAAC;EAC7C;EACA,OAAO;CACT;CAEA,MAAM,OAAO;CACb,MAAM,WAAW,WAAW,KAAK;CAEjC,MAAM,aAAa,MAAM;EACvB,IAAI,UAAU;GACZ,EAAE,iBAAiB;GACnB,EAAE,kBAAkB;GACpB;EACF;EAEA,IAAI,EAAE,QAAQ,SAAS;GACrB,EAAE,iBAAiB;GACnB,UAAU,CAAC;GACX;EACF;EAEA,IAAI,EAAE,QAAQ,KAEZ,EAAE,iBAAiB;CAEvB;CAEA,MAAM,WAAW,MAAM;EACrB,IAAI,UAAU;GACZ,EAAE,iBAAiB;GACnB,EAAE,kBAAkB;GACpB;EACF;EACA,IAAI,EAAE,QAAQ,KAAK;GACjB,EAAE,iBAAiB;GACnB,UAAU,CAAC;EACb;CACF;CAEA,IAAI,UAAU,OAAO,OAAO,OAAO,aAAa,QAAQ,CAAC;CACzD,OAAO;AACT"}
@@ -1,52 +0,0 @@
1
- import { KeyboardLikeEvent } from "../utilities/event-types.js";
2
-
3
- //#region src/foundations/interactions/roving-focus.d.ts
4
- type Orientation = 'horizontal' | 'vertical' | 'both';
5
- interface RovingFocusOptions {
6
- /**
7
- * Current focused index
8
- */
9
- currentIndex: number;
10
- /**
11
- * Total number of items
12
- */
13
- itemCount: number;
14
- /**
15
- * Navigation orientation
16
- * - horizontal: ArrowLeft/ArrowRight
17
- * - vertical: ArrowUp/ArrowDown
18
- * - both: all arrow keys
19
- */
20
- orientation?: Orientation;
21
- /**
22
- * Whether to loop when reaching the end
23
- */
24
- loop?: boolean;
25
- /**
26
- * Callback when navigation occurs
27
- */
28
- onNavigate?: (index: number) => void;
29
- /**
30
- * Optional disabled state check per index
31
- */
32
- isDisabled?: (index: number) => boolean;
33
- }
34
- interface RovingFocusResult {
35
- /**
36
- * Props for the container element (composes via mergeProps)
37
- */
38
- container: {
39
- onKeyDown: (e: KeyboardLikeEvent) => void;
40
- };
41
- /**
42
- * Generate props for an item at the given index (composes via mergeProps)
43
- */
44
- item: (index: number) => {
45
- tabIndex: number;
46
- 'data-roving-index': number;
47
- };
48
- }
49
- declare function rovingFocus(options: RovingFocusOptions): RovingFocusResult;
50
- //#endregion
51
- export { Orientation, RovingFocusOptions, RovingFocusResult, rovingFocus };
52
- //# sourceMappingURL=roving-focus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roving-focus.d.ts","names":[],"sources":["../../../src/foundations/interactions/roving-focus.ts"],"mappings":";;;KA8CY,WAAA;AAAA,UAEK,kBAAA;;;;EAIf,YAAA;;;;EAKA,SAAA;;;;;;;EAQA,WAAA,GAAc,WAAW;;;;EAKzB,IAAA;;;;EAKA,UAAA,IAAc,KAAA;;;;EAKd,UAAA,IAAc,KAAA;AAAA;AAAA,UAGC,iBAAA;;;;EAIf,SAAA;IACE,SAAA,GAAY,CAAA,EAAG,iBAAiB;EAAA;;;;EAMlC,IAAA,GAAO,KAAA;IACL,QAAA;IACA,mBAAA;EAAA;AAAA;AAAA,iBAIY,WAAA,CAAY,OAAA,EAAS,kBAAA,GAAqB,iBAAiB"}
@@ -1,71 +0,0 @@
1
- //#region src/foundations/interactions/roving-focus.ts
2
- function rovingFocus(options) {
3
- const { currentIndex, itemCount, orientation = "horizontal", loop = false, onNavigate, isDisabled } = options;
4
- function findNextIndex(from, direction) {
5
- let next = from;
6
- for (let steps = 0; steps < itemCount; steps += 1) {
7
- next += direction;
8
- if (loop) {
9
- if (next < 0) next = itemCount - 1;
10
- if (next >= itemCount) next = 0;
11
- } else if (next < 0 || next >= itemCount) return;
12
- if (next === from) return void 0;
13
- if (!isDisabled?.(next)) return next;
14
- }
15
- }
16
- function handleKeyDown(e) {
17
- const { key } = e;
18
- let direction;
19
- if (orientation === "horizontal" || orientation === "both") {
20
- if (key === "ArrowRight") direction = 1;
21
- if (key === "ArrowLeft") direction = -1;
22
- }
23
- if (orientation === "vertical" || orientation === "both") {
24
- if (key === "ArrowDown") direction = 1;
25
- if (key === "ArrowUp") direction = -1;
26
- }
27
- if (direction === void 0) return;
28
- const nextIndex = findNextIndex(currentIndex, direction);
29
- if (nextIndex === void 0) return;
30
- e.preventDefault?.();
31
- e.stopPropagation?.();
32
- onNavigate?.(nextIndex);
33
- }
34
- return {
35
- container: { onKeyDown: handleKeyDown },
36
- item: (index) => ({
37
- tabIndex: index === currentIndex ? 0 : -1,
38
- "data-roving-index": index
39
- })
40
- };
41
- }
42
- /**
43
- * USAGE EXAMPLE:
44
- *
45
- * function Menu() {
46
- * const [focusIndex, setFocusIndex] = state(0);
47
- * const items = ['File', 'Edit', 'View'];
48
- *
49
- * const navigation = rovingFocus({
50
- * currentIndex: focusIndex(),
51
- * itemCount: items.length,
52
- * orientation: 'horizontal',
53
- * loop: true,
54
- * onNavigate: setFocusIndex,
55
- * });
56
- *
57
- * return (
58
- * <div {...navigation.container}>
59
- * {items.map((label, index) => (
60
- * <button {...navigation.item(index)}>
61
- * {label}
62
- * </button>
63
- * ))}
64
- * </div>
65
- * );
66
- * }
67
- */
68
- //#endregion
69
- export { rovingFocus };
70
-
71
- //# sourceMappingURL=roving-focus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"roving-focus.js","names":[],"sources":["../../../src/foundations/interactions/roving-focus.ts"],"sourcesContent":["/**\n * rovingFocus\n *\n * Single tab stop navigation with arrow-key control.\n *\n * INVARIANTS:\n * 1. Only one item in the group is reachable via Tab (single tab stop)\n * 2. Arrow keys move focus within the group\n * 3. Orientation determines which arrow keys are active\n * 4. Looping is opt-in\n * 5. Disabled items are skipped\n * 6. Returns props objects, never factories (composes via mergeProps)\n *\n * DESIGN:\n * - Container gets onKeyDown for arrow navigation\n * - Each item gets tabIndex based on current selection\n * - Navigation logic is pure - caller controls focus application\n * - Disabled check happens per-item via predicate\n *\n * PIT OF SUCCESS:\n * ✓ Can't accidentally break tab order (tabIndex assigned correctly)\n * ✓ Can't duplicate navigation logic (single source)\n * ✓ Composes via mergeProps (all standard props)\n * ✓ Type-safe - invalid indices caught at call site\n *\n * USAGE:\n * const nav = rovingFocus({\n * currentIndex: 0,\n * itemCount: 3,\n * orientation: 'horizontal',\n * onNavigate: setIndex\n * });\n *\n * <div {...nav.container}>\n * <button {...nav.item(0)}>First</button>\n * <button {...nav.item(1)}>Second</button>\n * </div>\n *\n * MISUSE EXAMPLE (PREVENTED):\n * ❌ Can't forget to set tabIndex - returned in item props\n * ❌ Can't create conflicting arrow handlers - mergeProps composes\n * ❌ Can't skip disabled items incorrectly - logic is internal\n */\n\nimport type { KeyboardLikeEvent } from '../utilities/event-types';\n\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\nexport interface RovingFocusOptions {\n /**\n * Current focused index\n */\n currentIndex: number;\n\n /**\n * Total number of items\n */\n itemCount: number;\n\n /**\n * Navigation orientation\n * - horizontal: ArrowLeft/ArrowRight\n * - vertical: ArrowUp/ArrowDown\n * - both: all arrow keys\n */\n orientation?: Orientation;\n\n /**\n * Whether to loop when reaching the end\n */\n loop?: boolean;\n\n /**\n * Callback when navigation occurs\n */\n onNavigate?: (index: number) => void;\n\n /**\n * Optional disabled state check per index\n */\n isDisabled?: (index: number) => boolean;\n}\n\nexport interface RovingFocusResult {\n /**\n * Props for the container element (composes via mergeProps)\n */\n container: {\n onKeyDown: (e: KeyboardLikeEvent) => void;\n };\n\n /**\n * Generate props for an item at the given index (composes via mergeProps)\n */\n item: (index: number) => {\n tabIndex: number;\n 'data-roving-index': number;\n };\n}\n\nexport function rovingFocus(options: RovingFocusOptions): RovingFocusResult {\n const {\n currentIndex,\n itemCount,\n orientation = 'horizontal',\n loop = false,\n onNavigate,\n isDisabled,\n } = options;\n\n function findNextIndex(from: number, direction: 1 | -1): number | undefined {\n let next = from;\n\n for (let steps = 0; steps < itemCount; steps += 1) {\n next += direction;\n\n if (loop) {\n if (next < 0) next = itemCount - 1;\n if (next >= itemCount) next = 0;\n } else if (next < 0 || next >= itemCount) {\n return undefined;\n }\n\n if (next === from) return undefined;\n if (!isDisabled?.(next)) return next;\n }\n\n return undefined;\n }\n\n function handleKeyDown(e: KeyboardLikeEvent) {\n const { key } = e;\n\n let direction: 1 | -1 | undefined;\n\n if (orientation === 'horizontal' || orientation === 'both') {\n if (key === 'ArrowRight') direction = 1;\n if (key === 'ArrowLeft') direction = -1;\n }\n\n if (orientation === 'vertical' || orientation === 'both') {\n if (key === 'ArrowDown') direction = 1;\n if (key === 'ArrowUp') direction = -1;\n }\n\n if (direction === undefined) return;\n\n const nextIndex = findNextIndex(currentIndex, direction);\n if (nextIndex === undefined) return;\n\n e.preventDefault?.();\n e.stopPropagation?.();\n\n onNavigate?.(nextIndex);\n }\n\n return {\n container: {\n onKeyDown: handleKeyDown,\n },\n item: (index: number) => ({\n tabIndex: index === currentIndex ? 0 : -1,\n 'data-roving-index': index,\n }),\n };\n}\n\n/**\n * USAGE EXAMPLE:\n *\n * function Menu() {\n * const [focusIndex, setFocusIndex] = state(0);\n * const items = ['File', 'Edit', 'View'];\n *\n * const navigation = rovingFocus({\n * currentIndex: focusIndex(),\n * itemCount: items.length,\n * orientation: 'horizontal',\n * loop: true,\n * onNavigate: setFocusIndex,\n * });\n *\n * return (\n * <div {...navigation.container}>\n * {items.map((label, index) => (\n * <button {...navigation.item(index)}>\n * {label}\n * </button>\n * ))}\n * </div>\n * );\n * }\n */\n"],"mappings":";AAoGA,SAAgB,YAAY,SAAgD;CAC1E,MAAM,EACJ,cACA,WACA,cAAc,cACd,OAAO,OACP,YACA,eACE;CAEJ,SAAS,cAAc,MAAc,WAAuC;EAC1E,IAAI,OAAO;EAEX,KAAK,IAAI,QAAQ,GAAG,QAAQ,WAAW,SAAS,GAAG;GACjD,QAAQ;GAER,IAAI,MAAM;IACR,IAAI,OAAO,GAAG,OAAO,YAAY;IACjC,IAAI,QAAQ,WAAW,OAAO;GAChC,OAAO,IAAI,OAAO,KAAK,QAAQ,WAC7B;GAGF,IAAI,SAAS,MAAM,OAAO;GAC1B,IAAI,CAAC,aAAa,IAAI,GAAG,OAAO;EAClC;CAGF;CAEA,SAAS,cAAc,GAAsB;EAC3C,MAAM,EAAE,QAAQ;EAEhB,IAAI;EAEJ,IAAI,gBAAgB,gBAAgB,gBAAgB,QAAQ;GAC1D,IAAI,QAAQ,cAAc,YAAY;GACtC,IAAI,QAAQ,aAAa,YAAY;EACvC;EAEA,IAAI,gBAAgB,cAAc,gBAAgB,QAAQ;GACxD,IAAI,QAAQ,aAAa,YAAY;GACrC,IAAI,QAAQ,WAAW,YAAY;EACrC;EAEA,IAAI,cAAc,QAAW;EAE7B,MAAM,YAAY,cAAc,cAAc,SAAS;EACvD,IAAI,cAAc,QAAW;EAE7B,EAAE,iBAAiB;EACnB,EAAE,kBAAkB;EAEpB,aAAa,SAAS;CACxB;CAEA,OAAO;EACL,WAAW,EACT,WAAW,cACb;EACA,OAAO,WAAmB;GACxB,UAAU,UAAU,eAAe,IAAI;GACvC,qBAAqB;EACvB;CACF;AACF"}
@@ -1,33 +0,0 @@
1
- import { State } from "../../runtime/state.js";
2
- //#region src/foundations/state/controllable.d.ts
3
- declare function isControlled<T>(value: T | undefined): value is T;
4
- declare function resolveControllable<T>(value: T | undefined, defaultValue: T): {
5
- value: T;
6
- isControlled: boolean;
7
- };
8
- declare function makeControllable<T>(options: {
9
- value: T | undefined;
10
- defaultValue: T;
11
- onChange?: (next: T) => void;
12
- setInternal?: (next: T) => void;
13
- }): {
14
- set: (next: T) => void;
15
- isControlled: boolean;
16
- };
17
- type ControllableState<T> = State<T> & {
18
- isControlled: boolean;
19
- };
20
- /**
21
- * controllableState
22
- *
23
- * Hook-like primitive that mirrors `state()` semantics while supporting
24
- * controlled/uncontrolled behavior.
25
- */
26
- declare function controllableState<T>(options: {
27
- value: T | undefined;
28
- defaultValue: T;
29
- onChange?: (next: T) => void;
30
- }): ControllableState<T>;
31
- //#endregion
32
- export { ControllableState, controllableState, isControlled, makeControllable, resolveControllable };
33
- //# sourceMappingURL=controllable.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controllable.d.ts","names":[],"sources":["../../../src/foundations/state/controllable.ts"],"mappings":";;iBA0BgB,YAAA,IAAgB,KAAA,EAAO,CAAA,eAAgB,KAAA,IAAS,CAAC;AAAA,iBAIjD,mBAAA,IACd,KAAA,EAAO,CAAA,cACP,YAAA,EAAc,CAAA;EACX,KAAA,EAAO,CAAA;EAAG,YAAA;AAAA;AAAA,iBAQC,gBAAA,IAAoB,OAAA;EAClC,KAAA,EAAO,CAAA;EACP,YAAA,EAAc,CAAA;EACd,QAAA,IAAY,IAAA,EAAM,CAAA;EAClB,WAAA,IAAe,IAAA,EAAM,CAAA;AAAA;cAKF,CAAA;;;KAYT,iBAAA,MAAuB,KAAK,CAAC,CAAA;EAAO,YAAA;AAAA;;;;;;;iBAQhC,iBAAA,IAAqB,OAAA;EACnC,KAAA,EAAO,CAAA;EACP,YAAA,EAAc,CAAA;EACd,QAAA,IAAY,IAAA,EAAM,CAAA;AAAA,IAChB,iBAAA,CAAkB,CAAA"}
@@ -1,82 +0,0 @@
1
- import { state } from "../../runtime/state.js";
2
- import "../../runtime/index.js";
3
- //#region src/foundations/state/controllable.ts
4
- /**
5
- * controllable
6
- *
7
- * Small utilities for controlled vs uncontrolled components. These helpers are
8
- * intentionally minimal and do not manage state themselves; they help component
9
- * implementations make correct decisions about when to call `onChange` vs
10
- * update internal state.
11
- *
12
- * POLICY DECISIONS (LOCKED):
13
- *
14
- * 1. Controlled Detection
15
- * A value is "controlled" if it is not `undefined`.
16
- * This matches React conventions and is SSR-safe.
17
- *
18
- * 2. onChange Timing
19
- * - Controlled mode: onChange called immediately, no internal update
20
- * - Uncontrolled mode: internal state updated first, then onChange called
21
- * This ensures onChange sees the new value in both modes.
22
- *
23
- * 3. Value Equality
24
- * controllableState uses Object.is() to prevent unnecessary onChange calls.
25
- * This is intentional — strict equality, no deep comparison.
26
- */
27
- function isControlled(value) {
28
- return value !== void 0;
29
- }
30
- function resolveControllable(value, defaultValue) {
31
- const controlled = isControlled(value);
32
- return {
33
- value: controlled ? value : defaultValue,
34
- isControlled: controlled
35
- };
36
- }
37
- function makeControllable(options) {
38
- const { value, defaultValue, onChange, setInternal } = options;
39
- const { isControlled } = resolveControllable(value, defaultValue);
40
- function set(next) {
41
- if (isControlled) onChange?.(next);
42
- else {
43
- setInternal?.(next);
44
- onChange?.(next);
45
- }
46
- }
47
- return {
48
- set,
49
- isControlled
50
- };
51
- }
52
- /**
53
- * controllableState
54
- *
55
- * Hook-like primitive that mirrors `state()` semantics while supporting
56
- * controlled/uncontrolled behavior.
57
- */
58
- function controllableState(options) {
59
- const isControlled = options.value !== void 0;
60
- const internal = isControlled ? null : state(options.defaultValue);
61
- function read() {
62
- if (isControlled) return options.value;
63
- return internal();
64
- }
65
- read.set = (nextOrUpdater) => {
66
- const prev = read();
67
- const next = typeof nextOrUpdater === "function" ? nextOrUpdater(prev) : nextOrUpdater;
68
- if (Object.is(prev, next)) return;
69
- if (isControlled) {
70
- options.onChange?.(next);
71
- return;
72
- }
73
- internal.set(nextOrUpdater);
74
- options.onChange?.(next);
75
- };
76
- read.isControlled = isControlled;
77
- return read;
78
- }
79
- //#endregion
80
- export { controllableState, isControlled, makeControllable, resolveControllable };
81
-
82
- //# sourceMappingURL=controllable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"controllable.js","names":[],"sources":["../../../src/foundations/state/controllable.ts"],"sourcesContent":["/**\n * controllable\n *\n * Small utilities for controlled vs uncontrolled components. These helpers are\n * intentionally minimal and do not manage state themselves; they help component\n * implementations make correct decisions about when to call `onChange` vs\n * update internal state.\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Controlled Detection\n * A value is \"controlled\" if it is not `undefined`.\n * This matches React conventions and is SSR-safe.\n *\n * 2. onChange Timing\n * - Controlled mode: onChange called immediately, no internal update\n * - Uncontrolled mode: internal state updated first, then onChange called\n * This ensures onChange sees the new value in both modes.\n *\n * 3. Value Equality\n * controllableState uses Object.is() to prevent unnecessary onChange calls.\n * This is intentional — strict equality, no deep comparison.\n */\n\nimport { state, type State } from '../../runtime';\n\nexport function isControlled<T>(value: T | undefined): value is T {\n return value !== undefined;\n}\n\nexport function resolveControllable<T>(\n value: T | undefined,\n defaultValue: T\n): { value: T; isControlled: boolean } {\n const controlled = isControlled(value);\n return {\n value: controlled ? (value as T) : defaultValue,\n isControlled: controlled,\n };\n}\n\nexport function makeControllable<T>(options: {\n value: T | undefined;\n defaultValue: T;\n onChange?: (next: T) => void;\n setInternal?: (next: T) => void;\n}) {\n const { value, defaultValue, onChange, setInternal } = options;\n const { isControlled } = resolveControllable(value, defaultValue);\n\n function set(next: T) {\n if (isControlled) {\n onChange?.(next);\n } else {\n setInternal?.(next);\n onChange?.(next);\n }\n }\n\n return { set, isControlled };\n}\n\nexport type ControllableState<T> = State<T> & { isControlled: boolean };\n\n/**\n * controllableState\n *\n * Hook-like primitive that mirrors `state()` semantics while supporting\n * controlled/uncontrolled behavior.\n */\nexport function controllableState<T>(options: {\n value: T | undefined;\n defaultValue: T;\n onChange?: (next: T) => void;\n}): ControllableState<T> {\n const isControlled = options.value !== undefined;\n const internal = isControlled ? null : state<T>(options.defaultValue);\n\n function read(): T {\n if (isControlled) {\n return options.value as T;\n }\n\n return internal!();\n }\n\n read.set = (nextOrUpdater: T | ((prev: T) => T)) => {\n const prev = read();\n const next =\n typeof nextOrUpdater === 'function'\n ? (nextOrUpdater as (p: T) => T)(prev)\n : (nextOrUpdater as T);\n\n if (Object.is(prev, next)) return;\n\n if (isControlled) {\n options.onChange?.(next);\n return;\n }\n\n internal!.set(nextOrUpdater as never);\n options.onChange?.(next);\n };\n\n (read as ControllableState<T>).isControlled = isControlled;\n return read as ControllableState<T>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,aAAgB,OAAkC;CAChE,OAAO,UAAU;AACnB;AAEA,SAAgB,oBACd,OACA,cACqC;CACrC,MAAM,aAAa,aAAa,KAAK;CACrC,OAAO;EACL,OAAO,aAAc,QAAc;EACnC,cAAc;CAChB;AACF;AAEA,SAAgB,iBAAoB,SAKjC;CACD,MAAM,EAAE,OAAO,cAAc,UAAU,gBAAgB;CACvD,MAAM,EAAE,iBAAiB,oBAAoB,OAAO,YAAY;CAEhE,SAAS,IAAI,MAAS;EACpB,IAAI,cACF,WAAW,IAAI;OACV;GACL,cAAc,IAAI;GAClB,WAAW,IAAI;EACjB;CACF;CAEA,OAAO;EAAE;EAAK;CAAa;AAC7B;;;;;;;AAUA,SAAgB,kBAAqB,SAIZ;CACvB,MAAM,eAAe,QAAQ,UAAU;CACvC,MAAM,WAAW,eAAe,OAAO,MAAS,QAAQ,YAAY;CAEpE,SAAS,OAAU;EACjB,IAAI,cACF,OAAO,QAAQ;EAGjB,OAAO,SAAU;CACnB;CAEA,KAAK,OAAO,kBAAwC;EAClD,MAAM,OAAO,KAAK;EAClB,MAAM,OACJ,OAAO,kBAAkB,aACpB,cAA8B,IAAI,IAClC;EAEP,IAAI,OAAO,GAAG,MAAM,IAAI,GAAG;EAE3B,IAAI,cAAc;GAChB,QAAQ,WAAW,IAAI;GACvB;EACF;EAEA,SAAU,IAAI,aAAsB;EACpC,QAAQ,WAAW,IAAI;CACzB;CAEA,KAA+B,eAAe;CAC9C,OAAO;AACT"}
@@ -1,52 +0,0 @@
1
- //#region src/foundations/structures/collection.d.ts
2
- /**
3
- * createCollection
4
- *
5
- * Ordered descendant registry for coordinating items without DOM queries.
6
- *
7
- * INVARIANTS:
8
- * 1. Registration order determines item order (no DOM queries)
9
- * 2. Stable ordering across renders (insertion order preserved)
10
- * 3. Each item may have metadata (type-safe, user-defined)
11
- * 4. No implicit global state (explicit collection instances)
12
- * 5. No automatic cleanup (caller controls lifecycle)
13
- *
14
- * DESIGN:
15
- * - Returns a registry API ({ register, items, clear })
16
- * - Items are stored in insertion order
17
- * - Registration returns an unregister function
18
- * - No side effects on registration (pure data structure)
19
- *
20
- * USAGE:
21
- * const collection = createCollection<HTMLElement, { disabled: boolean }>();
22
- * const unregister = collection.register(element, { disabled: false });
23
- * const allItems = collection.items();
24
- * unregister();
25
- */
26
- type CollectionItem<TNode, TMetadata = unknown> = {
27
- node: TNode;
28
- metadata: TMetadata;
29
- };
30
- interface Collection<TNode, TMetadata = unknown> {
31
- /**
32
- * Register a node with optional metadata.
33
- * Returns an unregister function.
34
- */
35
- register(node: TNode, metadata: TMetadata): () => void;
36
- /**
37
- * Get all registered items in insertion order.
38
- */
39
- items(): ReadonlyArray<CollectionItem<TNode, TMetadata>>;
40
- /**
41
- * Clear all registered items.
42
- */
43
- clear(): void;
44
- /**
45
- * Get the count of registered items.
46
- */
47
- size(): number;
48
- }
49
- declare function createCollection<TNode, TMetadata = unknown>(): Collection<TNode, TMetadata>;
50
- //#endregion
51
- export { Collection, CollectionItem, createCollection };
52
- //# sourceMappingURL=collection.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection.d.ts","names":[],"sources":["../../../src/foundations/structures/collection.ts"],"mappings":";;AAyBA;;;;;;;;;;;AAEqB;AAGrB;;;;;;;;;;;KALY,cAAA;EACV,IAAA,EAAM,KAAA;EACN,QAAA,EAAU,SAAS;AAAA;AAAA,UAGJ,UAAA;EAKiB;;;;EAAhC,QAAA,CAAS,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,SAAA;EAKM;;;EAAtC,KAAA,IAAS,aAAA,CAAc,cAAA,CAAe,KAAA,EAAO,SAAA;EAUzC;AAAA;AAGN;EARE,KAAA;EAQ8B;;;EAH9B,IAAA;AAAA;AAAA,iBAGc,gBAAA,gCAAgD,UAAA,CAC9D,KAAA,EACA,SAAA"}
@@ -1,51 +0,0 @@
1
- //#region src/foundations/structures/collection.ts
2
- function createCollection() {
3
- const registry = /* @__PURE__ */ new Map();
4
- function register(node, metadata) {
5
- const item = {
6
- node,
7
- metadata
8
- };
9
- registry.set(node, item);
10
- return () => {
11
- registry.delete(node);
12
- };
13
- }
14
- function items() {
15
- return Array.from(registry.values());
16
- }
17
- function clear() {
18
- registry.clear();
19
- }
20
- function size() {
21
- return registry.size;
22
- }
23
- return {
24
- register,
25
- items,
26
- clear,
27
- size
28
- };
29
- }
30
- /**
31
- * USAGE EXAMPLE:
32
- *
33
- * // Create a collection for menu items
34
- * const menuItems = createCollection<HTMLElement, { disabled: boolean }>();
35
- *
36
- * // Register items
37
- * const unregister1 = menuItems.register(element1, { disabled: false });
38
- * const unregister2 = menuItems.register(element2, { disabled: true });
39
- *
40
- * // Query items
41
- * const allItems = menuItems.items();
42
- * const enabledItems = allItems.filter(item => !item.metadata.disabled);
43
- *
44
- * // Cleanup
45
- * unregister1();
46
- * unregister2();
47
- */
48
- //#endregion
49
- export { createCollection };
50
-
51
- //# sourceMappingURL=collection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collection.js","names":[],"sources":["../../../src/foundations/structures/collection.ts"],"sourcesContent":["/**\n * createCollection\n *\n * Ordered descendant registry for coordinating items without DOM queries.\n *\n * INVARIANTS:\n * 1. Registration order determines item order (no DOM queries)\n * 2. Stable ordering across renders (insertion order preserved)\n * 3. Each item may have metadata (type-safe, user-defined)\n * 4. No implicit global state (explicit collection instances)\n * 5. No automatic cleanup (caller controls lifecycle)\n *\n * DESIGN:\n * - Returns a registry API ({ register, items, clear })\n * - Items are stored in insertion order\n * - Registration returns an unregister function\n * - No side effects on registration (pure data structure)\n *\n * USAGE:\n * const collection = createCollection<HTMLElement, { disabled: boolean }>();\n * const unregister = collection.register(element, { disabled: false });\n * const allItems = collection.items();\n * unregister();\n */\n\nexport type CollectionItem<TNode, TMetadata = unknown> = {\n node: TNode;\n metadata: TMetadata;\n};\n\nexport interface Collection<TNode, TMetadata = unknown> {\n /**\n * Register a node with optional metadata.\n * Returns an unregister function.\n */\n register(node: TNode, metadata: TMetadata): () => void;\n\n /**\n * Get all registered items in insertion order.\n */\n items(): ReadonlyArray<CollectionItem<TNode, TMetadata>>;\n\n /**\n * Clear all registered items.\n */\n clear(): void;\n\n /**\n * Get the count of registered items.\n */\n size(): number;\n}\n\nexport function createCollection<TNode, TMetadata = unknown>(): Collection<\n TNode,\n TMetadata\n> {\n const registry = new Map<TNode, CollectionItem<TNode, TMetadata>>();\n\n function register(node: TNode, metadata: TMetadata): () => void {\n const item: CollectionItem<TNode, TMetadata> = { node, metadata };\n registry.set(node, item);\n\n return () => {\n registry.delete(node);\n };\n }\n\n function items(): ReadonlyArray<CollectionItem<TNode, TMetadata>> {\n return Array.from(registry.values());\n }\n\n function clear(): void {\n registry.clear();\n }\n\n function size(): number {\n return registry.size;\n }\n\n return {\n register,\n items,\n clear,\n size,\n };\n}\n\n/**\n * USAGE EXAMPLE:\n *\n * // Create a collection for menu items\n * const menuItems = createCollection<HTMLElement, { disabled: boolean }>();\n *\n * // Register items\n * const unregister1 = menuItems.register(element1, { disabled: false });\n * const unregister2 = menuItems.register(element2, { disabled: true });\n *\n * // Query items\n * const allItems = menuItems.items();\n * const enabledItems = allItems.filter(item => !item.metadata.disabled);\n *\n * // Cleanup\n * unregister1();\n * unregister2();\n */\n"],"mappings":";AAqDA,SAAgB,mBAGd;CACA,MAAM,2BAAW,IAAI,IAA6C;CAElE,SAAS,SAAS,MAAa,UAAiC;EAC9D,MAAM,OAAyC;GAAE;GAAM;EAAS;EAChE,SAAS,IAAI,MAAM,IAAI;EAEvB,aAAa;GACX,SAAS,OAAO,IAAI;EACtB;CACF;CAEA,SAAS,QAAyD;EAChE,OAAO,MAAM,KAAK,SAAS,OAAO,CAAC;CACrC;CAEA,SAAS,QAAc;EACrB,SAAS,MAAM;CACjB;CAEA,SAAS,OAAe;EACtB,OAAO,SAAS;CAClB;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}