@askrjs/askr 0.0.50 → 0.0.52

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 (594) hide show
  1. package/dist/bench/components/benchmark-row.d.ts +2 -2
  2. package/dist/bench/components/benchmark-row.js +0 -2
  3. package/dist/bench/components/benchmark-table.js +0 -2
  4. package/dist/benchmark.d.ts +1 -2
  5. package/dist/benchmark.js +5 -6
  6. package/dist/bin/askr-ssg.d.ts +1 -2
  7. package/dist/bin/askr-ssg.js +21 -6
  8. package/dist/boot/hydration.js +10 -11
  9. package/dist/boot/index.d.ts +1 -2
  10. package/dist/boot/index.js +21 -11
  11. package/dist/boot/root-lifecycle.d.ts +6 -3
  12. package/dist/boot/root-lifecycle.js +18 -14
  13. package/dist/boot/route-startup.js +13 -4
  14. package/dist/boot/types.d.ts +1 -2
  15. package/dist/common/attr-names.js +0 -2
  16. package/dist/common/component.d.ts +1 -2
  17. package/dist/common/control.d.ts +1 -2
  18. package/dist/common/control.js +0 -2
  19. package/dist/common/dom-range.d.ts +13 -0
  20. package/dist/common/env.js +1 -7
  21. package/dist/common/error-boundary.d.ts +15 -0
  22. package/dist/common/invariant.js +15 -0
  23. package/dist/common/jsx.d.ts +1 -2
  24. package/dist/common/jsx.js +0 -2
  25. package/dist/{dev → common}/logger.js +5 -8
  26. package/dist/common/promise.js +0 -2
  27. package/dist/common/props.d.ts +1 -2
  28. package/dist/common/render-context.js +0 -2
  29. package/dist/common/route-activity.js +0 -2
  30. package/dist/common/router-internal.js +0 -2
  31. package/dist/common/router.d.ts +1 -2
  32. package/dist/common/ssr-errors.d.ts +1 -2
  33. package/dist/common/ssr-errors.js +0 -2
  34. package/dist/common/ssr.d.ts +1 -2
  35. package/dist/common/ssr.js +0 -2
  36. package/dist/common/vnode.d.ts +1 -2
  37. package/dist/common/vnode.js +0 -2
  38. package/dist/components/error-boundary.d.ts +2 -16
  39. package/dist/components/error-boundary.js +2 -76
  40. package/dist/components/index.d.ts +2 -1
  41. package/dist/components/link.d.ts +2 -2
  42. package/dist/components/link.js +2 -2
  43. package/dist/control/case.d.ts +1 -2
  44. package/dist/control/case.js +1 -2
  45. package/dist/control/for.d.ts +3 -4
  46. package/dist/control/for.js +2 -4
  47. package/dist/control/shared.d.ts +1 -2
  48. package/dist/control/shared.js +0 -2
  49. package/dist/control/show.d.ts +1 -2
  50. package/dist/control/show.js +1 -2
  51. package/dist/data/data-runtime.d.ts +1 -2
  52. package/dist/data/data-runtime.js +3 -5
  53. package/dist/data/invalidation-listeners.js +0 -2
  54. package/dist/data/invalidation.d.ts +1 -2
  55. package/dist/data/invalidation.js +2 -4
  56. package/dist/data/mutation-cell.d.ts +1 -2
  57. package/dist/data/mutation-cell.js +7 -6
  58. package/dist/data/query-cell.d.ts +3 -2
  59. package/dist/data/query-cell.js +45 -11
  60. package/dist/data/query-key.js +0 -2
  61. package/dist/data/shared.js +3 -3
  62. package/dist/data/testing.js +2 -0
  63. package/dist/data/types.d.ts +1 -2
  64. package/dist/foundations/icon/icon.d.ts +1 -2
  65. package/dist/foundations/icon/icon.js +0 -2
  66. package/dist/foundations/icon/icon.types.d.ts +1 -2
  67. package/dist/foundations/index.d.ts +1 -1
  68. package/dist/foundations/index.js +1 -1
  69. package/dist/foundations/interactions/dismissable.d.ts +1 -2
  70. package/dist/foundations/interactions/dismissable.js +0 -2
  71. package/dist/foundations/interactions/focusable.d.ts +1 -2
  72. package/dist/foundations/interactions/focusable.js +0 -2
  73. package/dist/foundations/interactions/hoverable.d.ts +1 -2
  74. package/dist/foundations/interactions/hoverable.js +0 -2
  75. package/dist/foundations/interactions/interaction-policy.d.ts +1 -2
  76. package/dist/foundations/interactions/interaction-policy.js +0 -2
  77. package/dist/foundations/interactions/pressable.d.ts +1 -2
  78. package/dist/foundations/interactions/pressable.js +0 -2
  79. package/dist/foundations/interactions/roving-focus.d.ts +1 -2
  80. package/dist/foundations/interactions/roving-focus.js +0 -2
  81. package/dist/foundations/state/controllable.d.ts +1 -3
  82. package/dist/foundations/state/controllable.js +1 -2
  83. package/dist/foundations/structures/collection.d.ts +1 -2
  84. package/dist/foundations/structures/collection.js +0 -2
  85. package/dist/foundations/structures/index.d.ts +1 -1
  86. package/dist/foundations/structures/index.js +2 -1
  87. package/dist/foundations/structures/layer.d.ts +1 -2
  88. package/dist/foundations/structures/layer.js +0 -2
  89. package/dist/foundations/structures/layout.d.ts +1 -2
  90. package/dist/foundations/structures/layout.js +0 -2
  91. package/dist/foundations/structures/portal.d.ts +2 -24
  92. package/dist/foundations/structures/portal.js +3 -187
  93. package/dist/foundations/structures/presence.d.ts +1 -2
  94. package/dist/foundations/structures/presence.js +0 -2
  95. package/dist/foundations/structures/slot.d.ts +1 -2
  96. package/dist/foundations/structures/slot.js +0 -2
  97. package/dist/foundations/utilities/aria.d.ts +1 -2
  98. package/dist/foundations/utilities/aria.js +0 -2
  99. package/dist/foundations/utilities/compose-handlers.d.ts +1 -2
  100. package/dist/foundations/utilities/compose-handlers.js +0 -2
  101. package/dist/foundations/utilities/compose-ref.d.ts +1 -2
  102. package/dist/foundations/utilities/compose-ref.js +0 -2
  103. package/dist/foundations/utilities/event-types.d.ts +1 -2
  104. package/dist/foundations/utilities/merge-props.d.ts +1 -2
  105. package/dist/foundations/utilities/merge-props.js +0 -2
  106. package/dist/foundations/utilities/use-id.d.ts +1 -2
  107. package/dist/foundations/utilities/use-id.js +0 -2
  108. package/dist/fx/fx.d.ts +1 -2
  109. package/dist/fx/fx.js +2 -4
  110. package/dist/fx/index.js +1 -0
  111. package/dist/fx/noop.js +0 -2
  112. package/dist/fx/timing.d.ts +1 -2
  113. package/dist/fx/timing.js +0 -2
  114. package/dist/index.d.ts +4 -4
  115. package/dist/index.js +4 -6
  116. package/dist/jsx/types.d.ts +1 -2
  117. package/dist/jsx/utils.d.ts +1 -2
  118. package/dist/jsx/utils.js +0 -2
  119. package/dist/jsx-dev-runtime.d.ts +16 -2
  120. package/dist/jsx-dev-runtime.js +4 -12
  121. package/dist/jsx-runtime.d.ts +16 -2
  122. package/dist/jsx-runtime.js +16 -24
  123. package/dist/jsx-runtime2.d.ts +1 -1
  124. package/dist/renderer/attributes.js +29 -6
  125. package/dist/renderer/boundaries.js +50 -174
  126. package/dist/renderer/boundary-materialization.js +72 -0
  127. package/dist/renderer/boundary-range-adoption.js +76 -0
  128. package/dist/renderer/boundary-range-sync.js +101 -0
  129. package/dist/renderer/boundary-state.js +50 -0
  130. package/dist/renderer/child-shape.js +2 -4
  131. package/dist/renderer/children-fastpath.js +149 -0
  132. package/dist/renderer/children.js +3 -140
  133. package/dist/renderer/cleanup.js +72 -15
  134. package/dist/renderer/component-host-cleanup.js +124 -49
  135. package/dist/renderer/component-host-instances.js +60 -9
  136. package/dist/renderer/component-host-replacement.js +105 -0
  137. package/dist/renderer/component-host-results.js +138 -0
  138. package/dist/renderer/component-host.js +95 -170
  139. package/dist/renderer/dom-host.js +0 -2
  140. package/dist/renderer/dom-internal.js +115 -57
  141. package/dist/renderer/dom-range.js +161 -0
  142. package/dist/renderer/dom.js +7 -5
  143. package/dist/renderer/element-children.js +112 -32
  144. package/dist/renderer/error-boundary-dom.js +70 -13
  145. package/dist/renderer/evaluate-dom-range.js +3 -4
  146. package/dist/renderer/evaluate-reconcile.js +18 -42
  147. package/dist/renderer/evaluate.js +14 -3
  148. package/dist/renderer/fastpath.js +7 -14
  149. package/dist/renderer/for-commit-dom-map.js +6 -18
  150. package/dist/renderer/for-commit-removal.js +8 -17
  151. package/dist/renderer/for-commit-reorder.js +2 -4
  152. package/dist/renderer/for-commit.js +173 -45
  153. package/dist/renderer/hydration-boundaries.js +60 -0
  154. package/dist/renderer/hydration-listener-transaction.js +49 -0
  155. package/dist/renderer/index.js +11 -8
  156. package/dist/renderer/intrinsic-blueprint-analysis.js +202 -0
  157. package/dist/renderer/intrinsic-blueprint-bindings.js +152 -0
  158. package/dist/renderer/intrinsic-blueprint-materialization.js +100 -0
  159. package/dist/renderer/intrinsic-blueprint.js +30 -0
  160. package/dist/renderer/intrinsic-hydration-adoption.js +66 -0
  161. package/dist/renderer/keyed-children.js +3 -9
  162. package/dist/renderer/keyed.js +10 -10
  163. package/dist/renderer/namespaces.js +0 -2
  164. package/dist/renderer/prop-bindings.js +59 -24
  165. package/dist/renderer/reactive-child-dom.js +10 -4
  166. package/dist/renderer/reactive-child-sources.js +0 -2
  167. package/dist/renderer/reactive-children.js +33 -24
  168. package/dist/renderer/reconcile-commit.js +0 -2
  169. package/dist/renderer/reconcile-fastpaths.js +6 -12
  170. package/dist/renderer/reconcile-resolution.js +32 -56
  171. package/dist/renderer/reconcile.js +0 -2
  172. package/dist/renderer/retained-element-rollback.js +161 -149
  173. package/dist/renderer/stable-patch.js +5 -7
  174. package/dist/renderer/static-reuse.js +0 -2
  175. package/dist/renderer/utils.js +20 -10
  176. package/dist/resources/index.js +1 -2
  177. package/dist/router/access.js +0 -2
  178. package/dist/router/activity.d.ts +1 -2
  179. package/dist/router/activity.js +20 -24
  180. package/dist/router/authoring.d.ts +1 -2
  181. package/dist/router/authoring.js +1 -3
  182. package/dist/router/index.d.ts +1 -1
  183. package/dist/router/internal-types.d.ts +1 -2
  184. package/dist/router/lazy.d.ts +1 -2
  185. package/dist/router/lazy.js +0 -2
  186. package/dist/router/manifest.d.ts +1 -2
  187. package/dist/router/manifest.js +0 -2
  188. package/dist/router/match.js +0 -2
  189. package/dist/router/navigate.d.ts +1 -2
  190. package/dist/router/navigate.js +5 -8
  191. package/dist/router/navigation-registry.d.ts +1 -2
  192. package/dist/router/navigation-registry.js +1 -3
  193. package/dist/router/navigation-scroll.d.ts +1 -2
  194. package/dist/router/navigation-scroll.js +0 -2
  195. package/dist/router/navigation-targets.d.ts +3 -4
  196. package/dist/router/navigation-targets.js +425 -44
  197. package/dist/router/policy.d.ts +1 -2
  198. package/dist/router/policy.js +0 -2
  199. package/dist/router/rendering.d.ts +1 -2
  200. package/dist/router/rendering.js +5 -3
  201. package/dist/router/resolution.d.ts +2 -16
  202. package/dist/router/resolution.js +6 -175
  203. package/dist/router/route-context.js +0 -2
  204. package/dist/router/route-matching.d.ts +19 -0
  205. package/dist/router/route-matching.js +173 -0
  206. package/dist/router/route-query.d.ts +1 -2
  207. package/dist/router/route-query.js +1 -3
  208. package/dist/router/route.js +4 -2
  209. package/dist/router/store.d.ts +1 -2
  210. package/dist/router/store.js +0 -2
  211. package/dist/router/testing.js +4 -0
  212. package/dist/runtime/access.d.ts +19 -0
  213. package/dist/runtime/access.js +0 -2
  214. package/dist/runtime/child-scope.d.ts +21 -2
  215. package/dist/runtime/child-scope.js +101 -54
  216. package/dist/runtime/component-cleanup.d.ts +1 -2
  217. package/dist/runtime/component-cleanup.js +3 -5
  218. package/dist/runtime/component-commit.js +26 -24
  219. package/dist/runtime/component-facade.js +5 -3
  220. package/dist/runtime/component-internal.d.ts +12 -7
  221. package/dist/runtime/component-internal.js +64 -46
  222. package/dist/runtime/component-lifecycle.d.ts +2 -41
  223. package/dist/runtime/component-lifecycle.js +6 -149
  224. package/dist/runtime/component-scope.d.ts +4 -5
  225. package/dist/runtime/component-scope.js +27 -8
  226. package/dist/runtime/component.js +4 -3
  227. package/dist/runtime/context.d.ts +5 -2
  228. package/dist/runtime/context.js +29 -3
  229. package/dist/runtime/control.d.ts +22 -3
  230. package/dist/runtime/control.js +168 -55
  231. package/dist/runtime/derive.d.ts +1 -2
  232. package/dist/runtime/derive.js +0 -2
  233. package/dist/runtime/dev-namespace.d.ts +30 -0
  234. package/dist/runtime/dev-namespace.js +32 -25
  235. package/dist/runtime/effect.d.ts +8 -5
  236. package/dist/runtime/effect.js +158 -75
  237. package/dist/runtime/error-boundary.d.ts +4 -0
  238. package/dist/runtime/error-boundary.js +29 -0
  239. package/dist/runtime/events.d.ts +58 -0
  240. package/dist/runtime/events.js +67 -70
  241. package/dist/runtime/execution-model.d.ts +6 -0
  242. package/dist/runtime/execution-model.js +0 -2
  243. package/dist/runtime/fastlane.d.ts +33 -0
  244. package/dist/runtime/fastlane.js +0 -2
  245. package/dist/runtime/for-bench.d.ts +1 -2
  246. package/dist/runtime/for-bench.js +9 -167
  247. package/dist/runtime/for-internal.d.ts +73 -10
  248. package/dist/runtime/for-internal.js +201 -14
  249. package/dist/runtime/for-reconcile.d.ts +1 -2
  250. package/dist/runtime/for-reconcile.js +76 -23
  251. package/dist/runtime/for-scopes.d.ts +5 -5
  252. package/dist/runtime/for-scopes.js +168 -48
  253. package/dist/runtime/for-signals.d.ts +14 -5
  254. package/dist/runtime/for-signals.js +157 -83
  255. package/dist/runtime/for-types.d.ts +8 -0
  256. package/dist/runtime/for.d.ts +2 -2
  257. package/dist/runtime/for.js +3 -3
  258. package/dist/runtime/index.d.ts +24 -0
  259. package/dist/runtime/index.js +33 -0
  260. package/dist/runtime/lifecycle-batch.d.ts +59 -0
  261. package/dist/runtime/lifecycle-batch.js +178 -0
  262. package/dist/runtime/lifecycle-operation-settlement.d.ts +5 -0
  263. package/dist/runtime/lifecycle-operation-settlement.js +51 -0
  264. package/dist/runtime/lifecycle-operations.d.ts +1 -2
  265. package/dist/runtime/lifecycle-operations.js +5 -6
  266. package/dist/runtime/perf-metrics.d.ts +27 -0
  267. package/dist/runtime/perf-metrics.js +4 -68
  268. package/dist/runtime/portal.d.ts +21 -0
  269. package/dist/runtime/portal.js +305 -0
  270. package/dist/runtime/readable.d.ts +9 -4
  271. package/dist/runtime/readable.js +41 -17
  272. package/dist/runtime/resource-cell.js +3 -5
  273. package/dist/runtime/resource-operation.d.ts +1 -2
  274. package/dist/runtime/resource-operation.js +38 -35
  275. package/dist/runtime/runtime.d.ts +2 -3
  276. package/dist/runtime/runtime.js +0 -2
  277. package/dist/runtime/scheduler.d.ts +1 -2
  278. package/dist/runtime/scheduler.js +10 -13
  279. package/dist/runtime/selector-store.js +22 -0
  280. package/dist/runtime/selector.d.ts +1 -2
  281. package/dist/runtime/selector.js +6 -29
  282. package/dist/runtime/snapshot-source.d.ts +1 -2
  283. package/dist/runtime/snapshot-source.js +0 -2
  284. package/dist/runtime/state.d.ts +1 -2
  285. package/dist/runtime/state.js +1 -3
  286. package/dist/ssg/batch-render.js +0 -2
  287. package/dist/ssg/create-static-gen.d.ts +4 -2
  288. package/dist/ssg/create-static-gen.js +66 -14
  289. package/dist/ssg/generate-metadata.js +0 -2
  290. package/dist/ssg/generation-plan.js +0 -2
  291. package/dist/ssg/incremental-manifest.js +1 -3
  292. package/dist/ssg/resolve-ssg-data.js +0 -2
  293. package/dist/ssg/route-utils.js +0 -2
  294. package/dist/ssg/static-routes.js +1 -2
  295. package/dist/ssg/types.d.ts +2 -3
  296. package/dist/ssg/write-static-files.js +16 -12
  297. package/dist/ssr/attrs.js +0 -2
  298. package/dist/ssr/boundaries.js +17 -6
  299. package/dist/ssr/component-runtime.js +4 -30
  300. package/dist/ssr/context.d.ts +1 -2
  301. package/dist/ssr/context.js +0 -2
  302. package/dist/ssr/errors.d.ts +1 -2
  303. package/dist/ssr/errors.js +0 -2
  304. package/dist/ssr/escape.js +0 -2
  305. package/dist/ssr/hydration-data.js +0 -2
  306. package/dist/ssr/hydration-verify.d.ts +1 -2
  307. package/dist/ssr/hydration-verify.js +34 -7
  308. package/dist/ssr/index-internal.d.ts +1 -2
  309. package/dist/ssr/index-internal.js +0 -2
  310. package/dist/ssr/render-keys.js +0 -2
  311. package/dist/ssr/render-resolved.d.ts +1 -2
  312. package/dist/ssr/render-resolved.js +1 -3
  313. package/dist/ssr/render-sync.d.ts +1 -2
  314. package/dist/ssr/render-sync.js +28 -20
  315. package/dist/ssr/route-policy-resolution.js +2 -3
  316. package/dist/ssr/route-render.d.ts +1 -2
  317. package/dist/ssr/route-render.js +2 -3
  318. package/dist/ssr/sink.d.ts +1 -2
  319. package/dist/ssr/sink.js +0 -2
  320. package/dist/ssr/types.d.ts +1 -2
  321. package/dist/ssr/verify-hydration.js +0 -2
  322. package/dist/testing/index.d.ts +1 -2
  323. package/dist/testing/index.js +3 -4
  324. package/package.json +60 -47
  325. package/dist/bench/components/benchmark-row.d.ts.map +0 -1
  326. package/dist/bench/components/benchmark-row.js.map +0 -1
  327. package/dist/bench/components/benchmark-table.js.map +0 -1
  328. package/dist/benchmark.d.ts.map +0 -1
  329. package/dist/benchmark.js.map +0 -1
  330. package/dist/bin/askr-ssg.d.ts.map +0 -1
  331. package/dist/bin/askr-ssg.js.map +0 -1
  332. package/dist/boot/hydration.js.map +0 -1
  333. package/dist/boot/index.d.ts.map +0 -1
  334. package/dist/boot/index.js.map +0 -1
  335. package/dist/boot/root-lifecycle.d.ts.map +0 -1
  336. package/dist/boot/root-lifecycle.js.map +0 -1
  337. package/dist/boot/route-startup.js.map +0 -1
  338. package/dist/boot/types.d.ts.map +0 -1
  339. package/dist/common/attr-names.js.map +0 -1
  340. package/dist/common/component.d.ts.map +0 -1
  341. package/dist/common/control.d.ts.map +0 -1
  342. package/dist/common/control.js.map +0 -1
  343. package/dist/common/env.js.map +0 -1
  344. package/dist/common/jsx.d.ts.map +0 -1
  345. package/dist/common/jsx.js.map +0 -1
  346. package/dist/common/promise.js.map +0 -1
  347. package/dist/common/props.d.ts.map +0 -1
  348. package/dist/common/render-context.js.map +0 -1
  349. package/dist/common/route-activity.js.map +0 -1
  350. package/dist/common/router-internal.js.map +0 -1
  351. package/dist/common/router.d.ts.map +0 -1
  352. package/dist/common/ssr-errors.d.ts.map +0 -1
  353. package/dist/common/ssr-errors.js.map +0 -1
  354. package/dist/common/ssr.d.ts.map +0 -1
  355. package/dist/common/ssr.js.map +0 -1
  356. package/dist/common/vnode.d.ts.map +0 -1
  357. package/dist/common/vnode.js.map +0 -1
  358. package/dist/components/error-boundary.d.ts.map +0 -1
  359. package/dist/components/error-boundary.js.map +0 -1
  360. package/dist/components/link.d.ts.map +0 -1
  361. package/dist/components/link.js.map +0 -1
  362. package/dist/control/case.d.ts.map +0 -1
  363. package/dist/control/case.js.map +0 -1
  364. package/dist/control/for.d.ts.map +0 -1
  365. package/dist/control/for.js.map +0 -1
  366. package/dist/control/shared.d.ts.map +0 -1
  367. package/dist/control/shared.js.map +0 -1
  368. package/dist/control/show.d.ts.map +0 -1
  369. package/dist/control/show.js.map +0 -1
  370. package/dist/data/data-runtime.d.ts.map +0 -1
  371. package/dist/data/data-runtime.js.map +0 -1
  372. package/dist/data/invalidation-listeners.js.map +0 -1
  373. package/dist/data/invalidation.d.ts.map +0 -1
  374. package/dist/data/invalidation.js.map +0 -1
  375. package/dist/data/mutation-cell.d.ts.map +0 -1
  376. package/dist/data/mutation-cell.js.map +0 -1
  377. package/dist/data/query-cell.d.ts.map +0 -1
  378. package/dist/data/query-cell.js.map +0 -1
  379. package/dist/data/query-key.js.map +0 -1
  380. package/dist/data/shared.js.map +0 -1
  381. package/dist/data/types.d.ts.map +0 -1
  382. package/dist/dev/invariant.js +0 -29
  383. package/dist/dev/invariant.js.map +0 -1
  384. package/dist/dev/logger.js.map +0 -1
  385. package/dist/foundations/icon/icon.d.ts.map +0 -1
  386. package/dist/foundations/icon/icon.js.map +0 -1
  387. package/dist/foundations/icon/icon.types.d.ts.map +0 -1
  388. package/dist/foundations/interactions/dismissable.d.ts.map +0 -1
  389. package/dist/foundations/interactions/dismissable.js.map +0 -1
  390. package/dist/foundations/interactions/focusable.d.ts.map +0 -1
  391. package/dist/foundations/interactions/focusable.js.map +0 -1
  392. package/dist/foundations/interactions/hoverable.d.ts.map +0 -1
  393. package/dist/foundations/interactions/hoverable.js.map +0 -1
  394. package/dist/foundations/interactions/interaction-policy.d.ts.map +0 -1
  395. package/dist/foundations/interactions/interaction-policy.js.map +0 -1
  396. package/dist/foundations/interactions/pressable.d.ts.map +0 -1
  397. package/dist/foundations/interactions/pressable.js.map +0 -1
  398. package/dist/foundations/interactions/roving-focus.d.ts.map +0 -1
  399. package/dist/foundations/interactions/roving-focus.js.map +0 -1
  400. package/dist/foundations/state/controllable.d.ts.map +0 -1
  401. package/dist/foundations/state/controllable.js.map +0 -1
  402. package/dist/foundations/structures/collection.d.ts.map +0 -1
  403. package/dist/foundations/structures/collection.js.map +0 -1
  404. package/dist/foundations/structures/layer.d.ts.map +0 -1
  405. package/dist/foundations/structures/layer.js.map +0 -1
  406. package/dist/foundations/structures/layout.d.ts.map +0 -1
  407. package/dist/foundations/structures/layout.js.map +0 -1
  408. package/dist/foundations/structures/portal.d.ts.map +0 -1
  409. package/dist/foundations/structures/portal.js.map +0 -1
  410. package/dist/foundations/structures/presence.d.ts.map +0 -1
  411. package/dist/foundations/structures/presence.js.map +0 -1
  412. package/dist/foundations/structures/slot.d.ts.map +0 -1
  413. package/dist/foundations/structures/slot.js.map +0 -1
  414. package/dist/foundations/utilities/aria.d.ts.map +0 -1
  415. package/dist/foundations/utilities/aria.js.map +0 -1
  416. package/dist/foundations/utilities/compose-handlers.d.ts.map +0 -1
  417. package/dist/foundations/utilities/compose-handlers.js.map +0 -1
  418. package/dist/foundations/utilities/compose-ref.d.ts.map +0 -1
  419. package/dist/foundations/utilities/compose-ref.js.map +0 -1
  420. package/dist/foundations/utilities/event-types.d.ts.map +0 -1
  421. package/dist/foundations/utilities/merge-props.d.ts.map +0 -1
  422. package/dist/foundations/utilities/merge-props.js.map +0 -1
  423. package/dist/foundations/utilities/use-id.d.ts.map +0 -1
  424. package/dist/foundations/utilities/use-id.js.map +0 -1
  425. package/dist/fx/fx.d.ts.map +0 -1
  426. package/dist/fx/fx.js.map +0 -1
  427. package/dist/fx/noop.js.map +0 -1
  428. package/dist/fx/timing.d.ts.map +0 -1
  429. package/dist/fx/timing.js.map +0 -1
  430. package/dist/index.js.map +0 -1
  431. package/dist/jsx/types.d.ts.map +0 -1
  432. package/dist/jsx/utils.d.ts.map +0 -1
  433. package/dist/jsx/utils.js.map +0 -1
  434. package/dist/jsx-dev-runtime.d.ts.map +0 -1
  435. package/dist/jsx-dev-runtime.js.map +0 -1
  436. package/dist/jsx-runtime.d.ts.map +0 -1
  437. package/dist/jsx-runtime.js.map +0 -1
  438. package/dist/renderer/attributes.js.map +0 -1
  439. package/dist/renderer/boundaries.js.map +0 -1
  440. package/dist/renderer/child-shape.js.map +0 -1
  441. package/dist/renderer/children.js.map +0 -1
  442. package/dist/renderer/cleanup.js.map +0 -1
  443. package/dist/renderer/component-host-cleanup.js.map +0 -1
  444. package/dist/renderer/component-host-instances.js.map +0 -1
  445. package/dist/renderer/component-host.js.map +0 -1
  446. package/dist/renderer/dom-host.js.map +0 -1
  447. package/dist/renderer/dom-internal.js.map +0 -1
  448. package/dist/renderer/element-children.js.map +0 -1
  449. package/dist/renderer/error-boundary-dom.js.map +0 -1
  450. package/dist/renderer/evaluate-dom-range.js.map +0 -1
  451. package/dist/renderer/evaluate-reconcile.js.map +0 -1
  452. package/dist/renderer/evaluate.js.map +0 -1
  453. package/dist/renderer/fastpath.js.map +0 -1
  454. package/dist/renderer/for-commit-dom-map.js.map +0 -1
  455. package/dist/renderer/for-commit-removal.js.map +0 -1
  456. package/dist/renderer/for-commit-reorder.js.map +0 -1
  457. package/dist/renderer/for-commit.js.map +0 -1
  458. package/dist/renderer/index.js.map +0 -1
  459. package/dist/renderer/keyed-children.js.map +0 -1
  460. package/dist/renderer/keyed.js.map +0 -1
  461. package/dist/renderer/namespaces.js.map +0 -1
  462. package/dist/renderer/prop-bindings.js.map +0 -1
  463. package/dist/renderer/reactive-child-dom.js.map +0 -1
  464. package/dist/renderer/reactive-child-sources.js.map +0 -1
  465. package/dist/renderer/reactive-children.js.map +0 -1
  466. package/dist/renderer/reconcile-commit.js.map +0 -1
  467. package/dist/renderer/reconcile-fastpaths.js.map +0 -1
  468. package/dist/renderer/reconcile-resolution.js.map +0 -1
  469. package/dist/renderer/reconcile.js.map +0 -1
  470. package/dist/renderer/retained-element-rollback.js.map +0 -1
  471. package/dist/renderer/stable-patch.js.map +0 -1
  472. package/dist/renderer/static-reuse.js.map +0 -1
  473. package/dist/renderer/utils.js.map +0 -1
  474. package/dist/router/access.js.map +0 -1
  475. package/dist/router/activity.d.ts.map +0 -1
  476. package/dist/router/activity.js.map +0 -1
  477. package/dist/router/authoring.d.ts.map +0 -1
  478. package/dist/router/authoring.js.map +0 -1
  479. package/dist/router/internal-types.d.ts.map +0 -1
  480. package/dist/router/lazy.d.ts.map +0 -1
  481. package/dist/router/lazy.js.map +0 -1
  482. package/dist/router/manifest.d.ts.map +0 -1
  483. package/dist/router/manifest.js.map +0 -1
  484. package/dist/router/match.js.map +0 -1
  485. package/dist/router/navigate.d.ts.map +0 -1
  486. package/dist/router/navigate.js.map +0 -1
  487. package/dist/router/navigation-registry.d.ts.map +0 -1
  488. package/dist/router/navigation-registry.js.map +0 -1
  489. package/dist/router/navigation-scroll.d.ts.map +0 -1
  490. package/dist/router/navigation-scroll.js.map +0 -1
  491. package/dist/router/navigation-targets.d.ts.map +0 -1
  492. package/dist/router/navigation-targets.js.map +0 -1
  493. package/dist/router/policy.d.ts.map +0 -1
  494. package/dist/router/policy.js.map +0 -1
  495. package/dist/router/rendering.d.ts.map +0 -1
  496. package/dist/router/rendering.js.map +0 -1
  497. package/dist/router/resolution.d.ts.map +0 -1
  498. package/dist/router/resolution.js.map +0 -1
  499. package/dist/router/route-context.js.map +0 -1
  500. package/dist/router/route-query.d.ts.map +0 -1
  501. package/dist/router/route-query.js.map +0 -1
  502. package/dist/router/store.d.ts.map +0 -1
  503. package/dist/router/store.js.map +0 -1
  504. package/dist/runtime/access.js.map +0 -1
  505. package/dist/runtime/child-scope.d.ts.map +0 -1
  506. package/dist/runtime/child-scope.js.map +0 -1
  507. package/dist/runtime/component-cleanup.d.ts.map +0 -1
  508. package/dist/runtime/component-cleanup.js.map +0 -1
  509. package/dist/runtime/component-commit.js.map +0 -1
  510. package/dist/runtime/component-contracts.js +0 -5
  511. package/dist/runtime/component-internal.d.ts.map +0 -1
  512. package/dist/runtime/component-internal.js.map +0 -1
  513. package/dist/runtime/component-lifecycle.d.ts.map +0 -1
  514. package/dist/runtime/component-lifecycle.js.map +0 -1
  515. package/dist/runtime/component-scope.d.ts.map +0 -1
  516. package/dist/runtime/component-scope.js.map +0 -1
  517. package/dist/runtime/context.d.ts.map +0 -1
  518. package/dist/runtime/context.js.map +0 -1
  519. package/dist/runtime/control.d.ts.map +0 -1
  520. package/dist/runtime/control.js.map +0 -1
  521. package/dist/runtime/derive.d.ts.map +0 -1
  522. package/dist/runtime/derive.js.map +0 -1
  523. package/dist/runtime/dev-namespace.js.map +0 -1
  524. package/dist/runtime/effect.d.ts.map +0 -1
  525. package/dist/runtime/effect.js.map +0 -1
  526. package/dist/runtime/events.js.map +0 -1
  527. package/dist/runtime/execution-model.js.map +0 -1
  528. package/dist/runtime/fastlane.js.map +0 -1
  529. package/dist/runtime/for-bench.d.ts.map +0 -1
  530. package/dist/runtime/for-bench.js.map +0 -1
  531. package/dist/runtime/for-internal.d.ts.map +0 -1
  532. package/dist/runtime/for-internal.js.map +0 -1
  533. package/dist/runtime/for-reconcile.d.ts.map +0 -1
  534. package/dist/runtime/for-reconcile.js.map +0 -1
  535. package/dist/runtime/for-scopes.d.ts.map +0 -1
  536. package/dist/runtime/for-scopes.js.map +0 -1
  537. package/dist/runtime/for-signals.d.ts.map +0 -1
  538. package/dist/runtime/for-signals.js.map +0 -1
  539. package/dist/runtime/lifecycle-operations.d.ts.map +0 -1
  540. package/dist/runtime/lifecycle-operations.js.map +0 -1
  541. package/dist/runtime/perf-metrics.js.map +0 -1
  542. package/dist/runtime/readable.d.ts.map +0 -1
  543. package/dist/runtime/readable.js.map +0 -1
  544. package/dist/runtime/resource-cell.js.map +0 -1
  545. package/dist/runtime/resource-operation.d.ts.map +0 -1
  546. package/dist/runtime/resource-operation.js.map +0 -1
  547. package/dist/runtime/runtime.d.ts.map +0 -1
  548. package/dist/runtime/runtime.js.map +0 -1
  549. package/dist/runtime/scheduler.d.ts.map +0 -1
  550. package/dist/runtime/scheduler.js.map +0 -1
  551. package/dist/runtime/selector.d.ts.map +0 -1
  552. package/dist/runtime/selector.js.map +0 -1
  553. package/dist/runtime/snapshot-source.d.ts.map +0 -1
  554. package/dist/runtime/snapshot-source.js.map +0 -1
  555. package/dist/runtime/state.d.ts.map +0 -1
  556. package/dist/runtime/state.js.map +0 -1
  557. package/dist/ssg/batch-render.js.map +0 -1
  558. package/dist/ssg/create-static-gen.d.ts.map +0 -1
  559. package/dist/ssg/create-static-gen.js.map +0 -1
  560. package/dist/ssg/generate-metadata.js.map +0 -1
  561. package/dist/ssg/generation-plan.js.map +0 -1
  562. package/dist/ssg/incremental-manifest.js.map +0 -1
  563. package/dist/ssg/resolve-ssg-data.js.map +0 -1
  564. package/dist/ssg/route-utils.js.map +0 -1
  565. package/dist/ssg/static-routes.js.map +0 -1
  566. package/dist/ssg/types.d.ts.map +0 -1
  567. package/dist/ssg/write-static-files.js.map +0 -1
  568. package/dist/ssr/attrs.js.map +0 -1
  569. package/dist/ssr/boundaries.js.map +0 -1
  570. package/dist/ssr/component-runtime.js.map +0 -1
  571. package/dist/ssr/context.d.ts.map +0 -1
  572. package/dist/ssr/context.js.map +0 -1
  573. package/dist/ssr/errors.d.ts.map +0 -1
  574. package/dist/ssr/errors.js.map +0 -1
  575. package/dist/ssr/escape.js.map +0 -1
  576. package/dist/ssr/hydration-data.js.map +0 -1
  577. package/dist/ssr/hydration-verify.d.ts.map +0 -1
  578. package/dist/ssr/hydration-verify.js.map +0 -1
  579. package/dist/ssr/index-internal.d.ts.map +0 -1
  580. package/dist/ssr/index-internal.js.map +0 -1
  581. package/dist/ssr/render-keys.js.map +0 -1
  582. package/dist/ssr/render-resolved.d.ts.map +0 -1
  583. package/dist/ssr/render-resolved.js.map +0 -1
  584. package/dist/ssr/render-sync.d.ts.map +0 -1
  585. package/dist/ssr/render-sync.js.map +0 -1
  586. package/dist/ssr/route-policy-resolution.js.map +0 -1
  587. package/dist/ssr/route-render.d.ts.map +0 -1
  588. package/dist/ssr/route-render.js.map +0 -1
  589. package/dist/ssr/sink.d.ts.map +0 -1
  590. package/dist/ssr/sink.js.map +0 -1
  591. package/dist/ssr/types.d.ts.map +0 -1
  592. package/dist/ssr/verify-hydration.js.map +0 -1
  593. package/dist/testing/index.d.ts.map +0 -1
  594. package/dist/testing/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"for.d.ts","names":[],"sources":["../../src/control/for.ts"],"mappings":";;;;;KAgBY,aAAA,MAAmB,CAAA,YAAa,CAAC;AAAA,KAExC,YAAA;EACH,IAAA,EAAM,aAAA,CAAc,CAAA;EACpB,QAAA,GAAW,aAAA;EACX,QAAA,GAAW,IAAA,EAAM,CAAA,EAAG,KAAA,mBAAwB,KAAA;AAAA;AAAA,KAGzC,aAAA,iCAA8C,YAAA,CAAa,CAAA;EAC9D,EAAA,GAAK,IAAA,EAAM,CAAA,EAAG,KAAA,aAAkB,CAAA;EAChC,OAAA;AAAA;AAAA,KAGG,eAAA,MAAqB,YAAY,CAAC,CAAA;EACrC,EAAA;EACA,OAAA;AAAA;AAAA,KAGU,QAAA,mDACR,aAAA,CAAc,CAAA,EAAG,CAAA,IACjB,eAAA,CAAgB,CAAA;AAAA,cA0EP,GAAA,mDAKX,KAAA,EAAO,QAAA,CAAS,CAAA,EAAG,CAAA,MAChB,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"for.js","names":[],"sources":["../../src/control/for.ts"],"sourcesContent":["/**\n * For JSX primitive\n *\n * Creates a keyed child-scope boundary for efficient list rendering.\n */\n\nimport {\n __CONTROL_BOUNDARY__,\n markEagerControlPrimitive,\n} from '../common/control';\nimport type { JSXElement } from '../common/jsx';\nimport type { DOMElement, VNode } from '../common/vnode';\nimport { createFineGrainedEffect } from '../runtime/effect';\nimport { type ForState, useForState } from '../runtime/for';\nimport { type BoundaryChild, normalizeBoundaryChild } from './shared';\n\nexport type ForEachSource<T> = T[] | (() => T[]);\n\ntype ForBaseProps<T> = {\n each: ForEachSource<T>;\n fallback?: BoundaryChild;\n children: (item: T, index: () => number) => VNode;\n};\n\ntype KeyedForProps<T, K extends string | number> = ForBaseProps<T> & {\n by: (item: T, index: number) => K;\n byIndex?: never;\n};\n\ntype IndexedForProps<T> = ForBaseProps<T> & {\n by?: never;\n byIndex: true;\n};\n\nexport type ForProps<T, K extends string | number = string | number> =\n | KeyedForProps<T, K>\n | IndexedForProps<T>;\n\nfunction resolveEach<T>(each: ForEachSource<T>): T[] {\n const resolved = typeof each === 'function' ? each() : each;\n if (!Array.isArray(resolved)) {\n throw new Error('For each must resolve to an array.');\n }\n return resolved;\n}\n\nfunction resolveKeyFn<T>(\n props: ForProps<T>\n): (item: T, index: number) => string | number {\n if ('by' in props && typeof props.by === 'function') {\n return props.by;\n }\n if ('byIndex' in props && props.byIndex === true) {\n return (_item, index) => index;\n }\n throw new Error(\n '[askr] <For> requires a stable `by` key function. Use `byIndex` only as an explicit positional escape hatch.'\n );\n}\n\nfunction createForBoundary<T>(props: ForProps<T>): DOMElement {\n if ('by' in props && typeof props.by === 'function' && 'byIndex' in props) {\n throw new Error('[askr] <For> accepts either `by` or `byIndex`, not both.');\n }\n\n const byFn = resolveKeyFn(props);\n const fallback = normalizeBoundaryChild(props.fallback);\n const forState = useForState(props.each, byFn, props.children, fallback);\n\n const computeItems = () => resolveEach(forState.eachSource);\n if (!forState._sourceEffect) {\n forState._suspendSourceCommit = true;\n forState._sourceEffect = createFineGrainedEffect({\n lane: 'reactive',\n compute: computeItems,\n commit: (items) => {\n forState.currentItems = items;\n\n if (forState._suspendSourceCommit) {\n return;\n }\n\n forState._needsSourceReconcile = true;\n\n if (forState._enqueueBoundaryCommit) {\n forState._enqueueBoundaryCommit();\n return;\n }\n\n forState.parentInstance?._enqueueRun?.();\n },\n });\n forState._suspendSourceCommit = false;\n } else {\n forState._suspendSourceCommit = true;\n forState._sourceEffect.updateCompute(computeItems);\n forState._suspendSourceCommit = false;\n }\n\n return {\n type: __CONTROL_BOUNDARY__,\n _controlState: forState as unknown as ForState<unknown>,\n _forState: forState as unknown as ForState<unknown>,\n };\n}\n\nfunction ForPrimitive<T>(props: ForProps<T>): JSXElement {\n return createForBoundary(props) as unknown as JSXElement;\n}\n\nexport const For = markEagerControlPrimitive(\n ForPrimitive as <T, K extends string | number = string | number>(\n props: ForProps<T, K>\n ) => JSXElement\n) as <T, K extends string | number = string | number>(\n props: ForProps<T, K>\n) => JSXElement;\n"],"mappings":";;;;;;;;;;;AAsCA,SAAS,YAAe,MAA6B;CACnD,MAAM,WAAW,OAAO,SAAS,aAAa,KAAK,IAAI;CACvD,IAAI,CAAC,MAAM,QAAQ,QAAQ,GACzB,MAAM,IAAI,MAAM,oCAAoC;CAEtD,OAAO;AACT;AAEA,SAAS,aACP,OAC6C;CAC7C,IAAI,QAAQ,SAAS,OAAO,MAAM,OAAO,YACvC,OAAO,MAAM;CAEf,IAAI,aAAa,SAAS,MAAM,YAAY,MAC1C,QAAQ,OAAO,UAAU;CAE3B,MAAM,IAAI,MACR,8GACF;AACF;AAEA,SAAS,kBAAqB,OAAgC;CAC5D,IAAI,QAAQ,SAAS,OAAO,MAAM,OAAO,cAAc,aAAa,OAClE,MAAM,IAAI,MAAM,0DAA0D;CAG5E,MAAM,OAAO,aAAa,KAAK;CAC/B,MAAM,WAAW,uBAAuB,MAAM,QAAQ;CACtD,MAAM,WAAW,YAAY,MAAM,MAAM,MAAM,MAAM,UAAU,QAAQ;CAEvE,MAAM,qBAAqB,YAAY,SAAS,UAAU;CAC1D,IAAI,CAAC,SAAS,eAAe;EAC3B,SAAS,uBAAuB;EAChC,SAAS,gBAAgB,wBAAwB;GAC/C,MAAM;GACN,SAAS;GACT,SAAS,UAAU;IACjB,SAAS,eAAe;IAExB,IAAI,SAAS,sBACX;IAGF,SAAS,wBAAwB;IAEjC,IAAI,SAAS,wBAAwB;KACnC,SAAS,uBAAuB;KAChC;IACF;IAEA,SAAS,gBAAgB,cAAc;GACzC;EACF,CAAC;EACD,SAAS,uBAAuB;CAClC,OAAO;EACL,SAAS,uBAAuB;EAChC,SAAS,cAAc,cAAc,YAAY;EACjD,SAAS,uBAAuB;CAClC;CAEA,OAAO;EACL,MAAM;EACN,eAAe;EACf,WAAW;CACb;AACF;AAEA,SAAS,aAAgB,OAAgC;CACvD,OAAO,kBAAkB,KAAK;AAChC;AAEA,MAAa,MAAM,0BACjB,YAGF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.ts","names":[],"sources":["../../src/control/shared.ts"],"mappings":";;;KAGY,aAAA,GAAgB,eAAe;AAAA,iBAE3B,sBAAA,CAAuB,KAAA,YAAiB,KAAK;AAAA,iBAmB7C,oBAAA,IAAwB,KAAA,EAAO,CAAA,UAAW,CAAA,IAAK,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","names":[],"sources":["../../src/control/shared.ts"],"sourcesContent":["import { Fragment } from '../common/jsx';\nimport type { DOMElement, RenderableChild, VNode } from '../common/vnode';\n\nexport type BoundaryChild = RenderableChild;\n\nexport function normalizeBoundaryChild(value: unknown): VNode | null {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return null;\n }\n if (value.length === 1) {\n return normalizeBoundaryChild(value[0]);\n }\n return {\n type: Fragment,\n props: {\n children: value,\n },\n } as DOMElement;\n }\n\n return (value ?? null) as VNode | null;\n}\n\nexport function resolveMaybeAccessor<T>(value: T | (() => T)): T {\n return typeof value === 'function' ? (value as () => T)() : value;\n}\n"],"mappings":";;AAKA,SAAgB,uBAAuB,OAA8B;CACnE,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,IAAI,MAAM,WAAW,GACnB,OAAO;EAET,IAAI,MAAM,WAAW,GACnB,OAAO,uBAAuB,MAAM,EAAE;EAExC,OAAO;GACL,MAAM;GACN,OAAO,EACL,UAAU,MACZ;EACF;CACF;CAEA,OAAQ,SAAS;AACnB;AAEA,SAAgB,qBAAwB,OAAyB;CAC/D,OAAO,OAAO,UAAU,aAAc,MAAkB,IAAI;AAC9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"show.d.ts","names":[],"sources":["../../src/control/show.ts"],"mappings":";;;;KAcK,UAAA,MAAgB,CAAA,UAAW,CAAC;AAAA,KAC5B,MAAA,MAAY,CAAA,0DAA2D,CAAC;AAAA,KAEjE,SAAA;EACV,IAAA,EAAM,UAAA,CAAW,CAAA;EACjB,QAAA,GAAW,aAAA;EACX,QAAA,EAAU,aAAA,KAAkB,KAAA,EAAO,MAAA,CAAO,CAAA,MAAO,aAAA;AAAA;AAAA,cA+CtC,IAAA,MAEJ,KAAA,EAAO,SAAA,CAAU,CAAA,MAAO,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"show.js","names":[],"sources":["../../src/control/show.ts"],"sourcesContent":["import {\n __CONTROL_BOUNDARY__,\n markEagerControlPrimitive,\n} from '../common/control';\nimport type { JSXElement } from '../common/jsx';\nimport type { VNode } from '../common/vnode';\nimport { createShowState, type ShowState } from '../runtime/control';\nimport { state } from '../runtime/state';\nimport {\n type BoundaryChild,\n normalizeBoundaryChild,\n resolveMaybeAccessor,\n} from './shared';\n\ntype ShowSource<T> = T | (() => T);\ntype Truthy<T> = T extends false | '' | 0 | 0n | null | undefined ? never : T;\n\nexport type ShowProps<T> = {\n when: ShowSource<T>;\n fallback?: BoundaryChild;\n children: BoundaryChild | ((value: Truthy<T>) => BoundaryChild);\n};\n\nfunction createTruthyRenderer<T>(\n props: ShowProps<T>\n): ShowState['renderTruthy'] {\n if (typeof props.children === 'function') {\n return (value: unknown) =>\n normalizeBoundaryChild(\n (props.children as (resolved: Truthy<T>) => VNode)(value as Truthy<T>)\n ) as VNode;\n }\n\n const staticChild = normalizeBoundaryChild(props.children);\n return () => staticChild as VNode;\n}\n\nfunction createFallbackRenderer(\n fallback: BoundaryChild | undefined\n): (() => VNode) | null {\n const normalizedFallback = normalizeBoundaryChild(fallback);\n if (normalizedFallback == null || normalizedFallback === false) {\n return null;\n }\n return () => normalizedFallback;\n}\n\nfunction ShowPrimitive<T>(props: ShowProps<T>): JSXElement {\n const selectedValue = resolveMaybeAccessor(props.when);\n const renderTruthy = createTruthyRenderer(props);\n const renderFallback = createFallbackRenderer(props.fallback);\n\n const showStateContainer = state<ShowState>(\n createShowState(selectedValue, renderTruthy, renderFallback)\n );\n const showState = showStateContainer();\n\n showState.selectedValue = selectedValue;\n showState.renderTruthy = renderTruthy;\n showState.renderFallback = renderFallback;\n\n return {\n type: __CONTROL_BOUNDARY__,\n _controlState: showState,\n } as unknown as JSXElement;\n}\n\nexport const Show = markEagerControlPrimitive(\n ShowPrimitive as <T>(props: ShowProps<T>) => JSXElement\n) as <T>(props: ShowProps<T>) => JSXElement;\n"],"mappings":";;;;;AAuBA,SAAS,qBACP,OAC2B;CAC3B,IAAI,OAAO,MAAM,aAAa,YAC5B,QAAQ,UACN,uBACG,MAAM,SAA4C,KAAkB,CACvE;CAGJ,MAAM,cAAc,uBAAuB,MAAM,QAAQ;CACzD,aAAa;AACf;AAEA,SAAS,uBACP,UACsB;CACtB,MAAM,qBAAqB,uBAAuB,QAAQ;CAC1D,IAAI,sBAAsB,QAAQ,uBAAuB,OACvD,OAAO;CAET,aAAa;AACf;AAEA,SAAS,cAAiB,OAAiC;CACzD,MAAM,gBAAgB,qBAAqB,MAAM,IAAI;CACrD,MAAM,eAAe,qBAAqB,KAAK;CAC/C,MAAM,iBAAiB,uBAAuB,MAAM,QAAQ;CAK5D,MAAM,YAHqB,MACzB,gBAAgB,eAAe,cAAc,cAAc,CAE3C,CAAA,CAAmB;CAErC,UAAU,gBAAgB;CAC1B,UAAU,eAAe;CACzB,UAAU,iBAAiB;CAE3B,OAAO;EACL,MAAM;EACN,eAAe;CACjB;AACF;AAEA,MAAa,OAAO,0BAClB,aACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-runtime.d.ts","names":[],"sources":["../../src/data/data-runtime.ts"],"mappings":";;;;;;KAOY,SAAA;EACV,GAAA;EACA,IAAA,EAAM,SAAS;AAAA;AAAA,KAGL,gBAAA;EACV,UAAA,EAAY,GAAA,SAAY,SAAA;EACxB,oBAAA,EAAsB,OAAA,CAAQ,iBAAA,EAAmB,GAAA,SAAY,SAAA;EAC7D,uBAAA,EAAyB,OAAA,CACvB,iBAAA,EACA,GAAA,SAAY,YAAA;EAEd,sBAAA,EAAwB,OAAA,CAAQ,iBAAA;EAChC,yBAAA,EAA2B,OAAA,CAAQ,iBAAA;AAAA;AAAA,iBAqBrB,iBAAA,CACd,OAAA,GAAS,kBAAA,GACR,WAAW;AAAA,iBAWE,qBAAA,IAAyB,WAAW;AAAA,iBAkDpC,uBAAA,CACd,OAAA,GAAU,WAAA,GACT,gBAAgB;AAAA,iBAIH,iBAAA,CACd,YAAA,EAAc,gBAAA,EACd,QAAA,EAAU,iBAAA,GACT,GAAA,SAAY,SAAA;AAAA,iBASC,oBAAA,CACd,YAAA,EAAc,gBAAA,EACd,QAAA,EAAU,iBAAA,GACT,GAAA,SAAY,YAAA;AAAA,iBASC,kBAAA,CACd,YAAA,EAAc,gBAAA,EACd,QAAA,EAAU,iBAAiB;AAAA,iBAwBb,qBAAA,CACd,YAAA,EAAc,gBAAA,EACd,QAAA,EAAU,iBAAiB;AAAA,iBAwBb,2BAAA,CACd,YAAA,EAAc,gBAAgB,EAC9B,MAAA,UACA,gBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"data-runtime.js","names":[],"sources":["../../src/data/data-runtime.ts"],"sourcesContent":["import { getActiveRenderContext } from '../common/render-context';\nimport type { ComponentInstance } from '../runtime/component';\nimport { emitInvalidation } from './invalidation-listeners';\nimport type { MutationCell } from './mutation-cell';\nimport type { QueryCell } from './query-cell';\nimport type { DataRuntime, DataRuntimeOptions } from './types';\n\nexport type QuerySlot = {\n key: string;\n cell: QueryCell<unknown>;\n};\n\nexport type DataRuntimeState = {\n queryCache: Map<string, QueryCell<unknown>>;\n querySlotsByInstance: WeakMap<ComponentInstance, Map<number, QuerySlot>>;\n mutationSlotsByInstance: WeakMap<\n ComponentInstance,\n Map<number, MutationCell<unknown, unknown>>\n >;\n queryCleanupRegistered: WeakSet<ComponentInstance>;\n mutationCleanupRegistered: WeakSet<ComponentInstance>;\n};\n\nconst dataRuntimeStates = new WeakMap<DataRuntime, DataRuntimeState>();\nconst dataRuntimeByQueryCache = new WeakMap<\n Map<string, unknown>,\n DataRuntime\n>();\n\nfunction createDataRuntimeState(\n queryCache: Map<string, unknown>\n): DataRuntimeState {\n return {\n queryCache: queryCache as Map<string, QueryCell<unknown>>,\n querySlotsByInstance: new WeakMap(),\n mutationSlotsByInstance: new WeakMap(),\n queryCleanupRegistered: new WeakSet(),\n mutationCleanupRegistered: new WeakSet(),\n };\n}\n\nexport function createDataRuntime(\n options: DataRuntimeOptions = {}\n): DataRuntime {\n const runtime: DataRuntime = Object.freeze({\n queryCache: options.queryCache ?? new Map<string, unknown>(),\n });\n dataRuntimeStates.set(runtime, createDataRuntimeState(runtime.queryCache));\n dataRuntimeByQueryCache.set(runtime.queryCache, runtime);\n return runtime;\n}\n\nconst defaultDataRuntime = createDataRuntime();\n\nexport function getDefaultDataRuntime(): DataRuntime {\n return defaultDataRuntime;\n}\n\nfunction getDataRuntimeState(runtime: DataRuntime): DataRuntimeState {\n const state = dataRuntimeStates.get(runtime);\n if (!state) {\n throw new Error(\n '[Askr] data runtime was not created by createDataRuntime().'\n );\n }\n return state;\n}\n\nfunction isDataRuntime(value: unknown): value is DataRuntime {\n return (\n typeof value === 'object' &&\n value !== null &&\n dataRuntimeStates.has(value as DataRuntime)\n );\n}\n\nfunction getDataRuntimeForQueryCache(\n queryCache: Map<string, unknown>\n): DataRuntime {\n let runtime = dataRuntimeByQueryCache.get(queryCache);\n if (!runtime) {\n runtime = createDataRuntime({ queryCache });\n dataRuntimeByQueryCache.set(queryCache, runtime);\n }\n return runtime;\n}\n\nfunction getActiveDataRuntime(): DataRuntime {\n const ctx = getActiveRenderContext();\n if (isDataRuntime(ctx?.dataRuntime)) {\n return ctx.dataRuntime;\n }\n\n if (ctx?.queryCache) {\n return getDataRuntimeForQueryCache(ctx.queryCache);\n }\n\n return defaultDataRuntime;\n}\n\nfunction getActiveDataRuntimeState(): DataRuntimeState {\n return getDataRuntimeState(getActiveDataRuntime());\n}\n\nexport function resolveDataRuntimeState(\n runtime?: DataRuntime\n): DataRuntimeState {\n return runtime ? getDataRuntimeState(runtime) : getActiveDataRuntimeState();\n}\n\nexport function getQuerySlotStore(\n runtimeState: DataRuntimeState,\n instance: ComponentInstance\n): Map<number, QuerySlot> {\n let store = runtimeState.querySlotsByInstance.get(instance);\n if (!store) {\n store = new Map();\n runtimeState.querySlotsByInstance.set(instance, store);\n }\n return store;\n}\n\nexport function getMutationSlotStore(\n runtimeState: DataRuntimeState,\n instance: ComponentInstance\n): Map<number, MutationCell<unknown, unknown>> {\n let store = runtimeState.mutationSlotsByInstance.get(instance);\n if (!store) {\n store = new Map();\n runtimeState.mutationSlotsByInstance.set(instance, store);\n }\n return store;\n}\n\nexport function ensureQueryCleanup(\n runtimeState: DataRuntimeState,\n instance: ComponentInstance\n): void {\n if (runtimeState.queryCleanupRegistered.has(instance)) {\n return;\n }\n\n runtimeState.queryCleanupRegistered.add(instance);\n instance.cleanupFns.push(() => {\n const slots = runtimeState.querySlotsByInstance.get(instance);\n if (!slots) {\n runtimeState.queryCleanupRegistered.delete(instance);\n return;\n }\n\n for (const [hookIndex, slot] of slots) {\n slot.cell.detach(instance, hookIndex);\n }\n\n slots.clear();\n runtimeState.querySlotsByInstance.delete(instance);\n runtimeState.queryCleanupRegistered.delete(instance);\n });\n}\n\nexport function ensureMutationCleanup(\n runtimeState: DataRuntimeState,\n instance: ComponentInstance\n): void {\n if (runtimeState.mutationCleanupRegistered.has(instance)) {\n return;\n }\n\n runtimeState.mutationCleanupRegistered.add(instance);\n instance.cleanupFns.push(() => {\n const slots = runtimeState.mutationSlotsByInstance.get(instance);\n if (!slots) {\n runtimeState.mutationCleanupRegistered.delete(instance);\n return;\n }\n\n for (const cell of slots.values()) {\n cell.abort();\n }\n\n slots.clear();\n runtimeState.mutationSlotsByInstance.delete(instance);\n runtimeState.mutationCleanupRegistered.delete(instance);\n });\n}\n\nexport function invalidateQueriesForRuntime(\n runtimeState: DataRuntimeState,\n prefix: string,\n markPendingWrite: boolean\n): void {\n emitInvalidation({ prefix, markPendingWrite });\n\n const cache = runtimeState.queryCache;\n\n for (const [key, query] of cache) {\n if (!key.startsWith(prefix)) {\n continue;\n }\n\n if (markPendingWrite) {\n query.markPendingWrite();\n }\n\n void query.refresh();\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"invalidation-listeners.js","names":[],"sources":["../../src/data/invalidation-listeners.ts"],"sourcesContent":["export interface InvalidationEvent {\n prefix: string;\n markPendingWrite: boolean;\n}\n\ntype InvalidationListener = (event: InvalidationEvent) => void;\n\nconst invalidationListeners = new Set<InvalidationListener>();\n\nexport function addInvalidationListener(\n listener: InvalidationListener\n): () => void {\n invalidationListeners.add(listener);\n return () => {\n invalidationListeners.delete(listener);\n };\n}\n\nexport function emitInvalidation(event: InvalidationEvent): void {\n for (const listener of invalidationListeners) {\n listener(event);\n }\n}\n"],"mappings":";AAOA,MAAM,wCAAwB,IAAI,IAA0B;AAE5D,SAAgB,wBACd,UACY;CACZ,sBAAsB,IAAI,QAAQ;CAClC,aAAa;EACX,sBAAsB,OAAO,QAAQ;CACvC;AACF;AAEA,SAAgB,iBAAiB,OAAgC;CAC/D,KAAK,MAAM,YAAY,uBACrB,SAAS,KAAK;AAElB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"invalidation.d.ts","names":[],"sources":["../../src/data/invalidation.ts"],"mappings":";;;iBAkBgB,UAAA,CAAW,MAAA,UAAgB,OAAA,GAAU,iBAAiB;AAAA,iBAQtD,UAAA,CAAW,SAAA,WAAoB,UAAU;AAAA,iBAOzC,oBAAA,CACd,MAAA,UACA,OAAA,EAAS,2BAA2B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"invalidation.js","names":[],"sources":["../../src/data/invalidation.ts"],"sourcesContent":["import {\n documentVisible,\n routeActive,\n timer,\n windowFocused,\n type ActivityPredicate,\n} from '../runtime/operations';\nimport {\n invalidateQueriesForRuntime,\n resolveDataRuntimeState,\n} from './data-runtime';\nimport { createQueryScope } from './query-key';\nimport type {\n InvalidateOnIntervalOptions,\n InvalidateOptions,\n QueryScope,\n} from './types';\n\nexport function invalidate(prefix: string, options?: InvalidateOptions): void {\n invalidateQueriesForRuntime(\n resolveDataRuntimeState(options?.runtime),\n prefix,\n options?.markPendingWrite ?? false\n );\n}\n\nexport function queryScope(namespace: string): QueryScope {\n return createQueryScope(namespace, invalidate);\n}\n\nconst INVALIDATE_ON_INTERVAL_OPTIONS_ERROR =\n '[Askr] invalidateOnInterval() requires an options object with a finite numeric intervalMs.';\n\nexport function invalidateOnInterval(\n prefix: string,\n options: InvalidateOnIntervalOptions\n): void {\n if (\n !options ||\n typeof options !== 'object' ||\n typeof options.intervalMs !== 'number' ||\n !Number.isFinite(options.intervalMs)\n ) {\n throw new Error(INVALIDATE_ON_INTERVAL_OPTIONS_ERROR);\n }\n\n const runtimeState = resolveDataRuntimeState(options.runtime);\n const when: ActivityPredicate[] = [];\n\n if (options.activeOn) {\n when.push(routeActive(options.activeOn));\n }\n\n if (options.visibleOnly) {\n when.push(documentVisible());\n }\n\n if (options.focusedOnly) {\n when.push(windowFocused());\n }\n\n timer(\n options.intervalMs,\n () => {\n invalidateQueriesForRuntime(\n runtimeState,\n prefix,\n options.markPendingWrite ?? false\n );\n },\n when.length > 0 ? { when } : undefined\n );\n}\n"],"mappings":";;;;;AAkBA,SAAgB,WAAW,QAAgB,SAAmC;CAC5E,4BACE,wBAAwB,SAAS,OAAO,GACxC,QACA,SAAS,oBAAoB,KAC/B;AACF;AAEA,SAAgB,WAAW,WAA+B;CACxD,OAAO,iBAAiB,WAAW,UAAU;AAC/C;AAEA,MAAM,uCACJ;AAEF,SAAgB,qBACd,QACA,SACM;CACN,IACE,CAAC,WACD,OAAO,YAAY,YACnB,OAAO,QAAQ,eAAe,YAC9B,CAAC,OAAO,SAAS,QAAQ,UAAU,GAEnC,MAAM,IAAI,MAAM,oCAAoC;CAGtD,MAAM,eAAe,wBAAwB,QAAQ,OAAO;CAC5D,MAAM,OAA4B,CAAC;CAEnC,IAAI,QAAQ,UACV,KAAK,KAAK,YAAY,QAAQ,QAAQ,CAAC;CAGzC,IAAI,QAAQ,aACV,KAAK,KAAK,gBAAgB,CAAC;CAG7B,IAAI,QAAQ,aACV,KAAK,KAAK,cAAc,CAAC;CAG3B,MACE,QAAQ,kBACF;EACJ,4BACE,cACA,QACA,QAAQ,oBAAoB,KAC9B;CACF,GACA,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,MAC/B;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-cell.d.ts","names":[],"sources":["../../src/data/mutation-cell.ts"],"mappings":";;;;cAoBa,YAAA;EAAA,iBACM,MAAA;EAAA,iBACA,YAAA;EAAA,QACT,MAAA;EAAA,QACA,OAAA;EAAA,QACA,YAAA;EAAA,QACA,UAAA;EAAA,QACA,UAAA;EAAA,QAEA,KAAA;cAON,OAAA,EAAS,eAAA,CAAgB,MAAA,EAAQ,OAAA,GACjC,YAAA,EAAc,gBAAA;EAQhB,UAAA,CAAW,OAAA,EAAS,eAAA,CAAgB,MAAA,EAAQ,OAAA;EAAA,IAMxC,MAAA;EAAA,IAKA,OAAA;EAAA,IAKA,KAAA;EAAA,IAKA,MAAA,IAAU,OAAA;EAAA,QAKN,QAAA;EAQF,OAAA,CAAQ,KAAA,EAAO,MAAA,GAAS,OAAA,CAAQ,OAAA;EA8CtC,KAAA;EAWA,KAAA;AAAA;AAAA,iBAQc,cAAA,kBACd,OAAA,EAAS,eAAA,CAAgB,MAAA,EAAQ,OAAA,IAChC,QAAA,CAAS,MAAA,EAAQ,OAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mutation-cell.js","names":[],"sources":["../../src/data/mutation-cell.ts"],"sourcesContent":["import {\n claimHookIndex,\n getCurrentComponentInstance,\n} from '../runtime/component';\nimport { recordReadableRead } from '../runtime/readable';\nimport {\n ensureMutationCleanup,\n getMutationSlotStore,\n invalidateQueriesForRuntime,\n resolveDataRuntimeState,\n type DataRuntimeState,\n} from './data-runtime';\nimport {\n createReadableSource,\n isAbortError,\n normalizeAsyncDataError,\n notifySource,\n} from './shared';\nimport type { Mutation, MutationOptions, MutationRecord } from './types';\n\nexport class MutationCell<TInput, TResult> {\n private readonly source = createReadableSource();\n private readonly runtimeState: DataRuntimeState;\n private action: MutationOptions<TInput, TResult>['action'];\n private affects?: MutationOptions<TInput, TResult>['affects'];\n private afterSuccess?: MutationOptions<TInput, TResult>['afterSuccess'];\n private controller: AbortController | null = null;\n private generation = 0;\n\n private state: MutationRecord<TResult> = {\n status: 'idle',\n error: null,\n result: null,\n };\n\n constructor(\n options: MutationOptions<TInput, TResult>,\n runtimeState: DataRuntimeState\n ) {\n this.runtimeState = runtimeState;\n this.action = options.action;\n this.affects = options.affects;\n this.afterSuccess = options.afterSuccess;\n }\n\n setOptions(options: MutationOptions<TInput, TResult>): void {\n this.action = options.action;\n this.affects = options.affects;\n this.afterSuccess = options.afterSuccess;\n }\n\n get status(): 'idle' | 'pending' | 'success' | 'error' {\n recordReadableRead(this.source);\n return this.state.status;\n }\n\n get pending(): boolean {\n recordReadableRead(this.source);\n return this.state.status === 'pending';\n }\n\n get error(): {} | null {\n recordReadableRead(this.source);\n return this.state.error;\n }\n\n get result(): TResult | null {\n recordReadableRead(this.source);\n return this.state.result;\n }\n\n private setState(next: Partial<MutationRecord<TResult>>): void {\n this.state = {\n ...this.state,\n ...next,\n };\n notifySource(this.source);\n }\n\n async execute(input: TInput): Promise<TResult> {\n this.generation += 1;\n const generation = this.generation;\n\n this.controller?.abort();\n const controller = new AbortController();\n this.controller = controller;\n\n this.setState({ status: 'pending', error: null, result: null });\n\n let result: TResult;\n try {\n result = await this.action(input, { signal: controller.signal });\n } catch (error) {\n if (this.generation !== generation || this.controller !== controller) {\n throw error;\n }\n\n if (isAbortError(error, controller.signal)) {\n this.setState({ status: 'idle', error: null });\n throw error;\n }\n\n this.setState({\n status: 'error',\n error: normalizeAsyncDataError(error, 'Unknown mutation error'),\n });\n throw error;\n }\n\n if (this.generation !== generation || this.controller !== controller) {\n return result;\n }\n\n this.setState({ status: 'success', error: null, result });\n\n if (this.afterSuccess === 'invalidate') {\n const prefixes = this.affects?.(input, result) ?? [];\n for (const prefix of new Set(prefixes)) {\n invalidateQueriesForRuntime(this.runtimeState, prefix, true);\n }\n }\n\n return result;\n }\n\n abort(): void {\n if (this.state.status !== 'pending') {\n return;\n }\n\n this.generation += 1;\n this.controller?.abort();\n this.controller = null;\n this.setState({ status: 'idle', error: null, result: null });\n }\n\n reset(): void {\n this.generation += 1;\n this.controller?.abort();\n this.controller = null;\n this.setState({ status: 'idle', error: null, result: null });\n }\n}\n\nexport function createMutation<TInput, TResult>(\n options: MutationOptions<TInput, TResult>\n): Mutation<TInput, TResult> {\n const instance = getCurrentComponentInstance();\n const runtimeState = resolveDataRuntimeState(options.runtime);\n\n if (!instance) {\n return new MutationCell(options, runtimeState) as unknown as Mutation<\n TInput,\n TResult\n >;\n }\n\n const hookIndex = claimHookIndex(instance, 'mutation');\n ensureMutationCleanup(runtimeState, instance);\n\n const slotStore = getMutationSlotStore(runtimeState, instance);\n const existing = slotStore.get(hookIndex) as\n | MutationCell<TInput, TResult>\n | undefined;\n if (existing) {\n existing.setOptions(options);\n return existing as unknown as Mutation<TInput, TResult>;\n }\n\n const created = new MutationCell(options, runtimeState);\n slotStore.set(hookIndex, created as MutationCell<unknown, unknown>);\n return created as unknown as Mutation<TInput, TResult>;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-cell.d.ts","names":[],"sources":["../../src/data/query-cell.ts"],"mappings":";;;;cA6Ba,SAAA;EAAA,iBACM,MAAA;EAAA,iBACA,GAAA;EAAA,iBACA,KAAA;EAAA,QACT,OAAA;EAAA,QACA,UAAA;EAAA,QACA,UAAA;EAAA,QACA,WAAA;EAAA,QACA,cAAA;EAAA,QACA,qBAAA;EAAA,QACA,qBAAA;EAAA,QACA,SAAA;EAAA,QACA,UAAA;EAAA,iBACS,MAAA;EAAA,iBACA,4BAAA;EAAA,QAET,KAAA;cAWN,OAAA,EAAS,YAAA,CAAa,CAAA,GACtB,GAAA,UACA,KAAA,EAAO,GAAA,SAAY,SAAA;EAOrB,MAAA,CAAO,QAAA,EAAU,iBAAA,EAAmB,SAAA;EAepC,MAAA,CAAO,QAAA,EAAU,iBAAA,EAAmB,SAAA;EAgBpC,2BAAA,CAA4B,OAAA,EAAS,YAAA,CAAa,CAAA;EAAA,QAyB1C,OAAA;EAAA,QAgBA,sBAAA;EAAA,IAoBJ,IAAA,IAAQ,CAAA;EAAA,IAKR,KAAA;EAAA,IAKA,OAAA;EAAA,IAKA,UAAA;EAAA,IAKA,KAAA;EAAA,IAKA,WAAA,IAAe,UAAA,CAAW,CAAA;EAAA,IAK1B,WAAA,IAAe,UAAA,CAAW,CAAA;EAK9B,aAAA;EAaA,OAAA,IAAW,OAAA;EAaX,gBAAA;EAAA,QAmBQ,UAAA;EAAA,QAuBA,oBAAA;EAAA,QAOA,QAAA;EAAA,QAYM,KAAA;EAAA,QA6GA,SAAA;AAAA;AAAA,iBA6BA,WAAA,eAA0B,OAAA,EAAS,YAAA,CAAa,CAAA,IAAK,KAAA,CAAM,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-cell.js","names":[],"sources":["../../src/data/query-cell.ts"],"sourcesContent":["import { logger } from '../dev/logger';\nimport { enqueueRuntimeTask } from '../runtime/access';\nimport {\n claimHookIndex,\n getCurrentComponentInstance,\n type ComponentInstance,\n} from '../runtime/component';\nimport { recordReadableRead } from '../runtime/readable';\nimport {\n ensureQueryCleanup,\n getQuerySlotStore,\n resolveDataRuntimeState,\n} from './data-runtime';\nimport {\n createReadableSource,\n isAbortError,\n normalizeAsyncDataError,\n notifySource,\n} from './shared';\nimport type {\n Query,\n QueryDefinitionField,\n QueryOptions,\n QueryState,\n} from './types';\n\nconst RECONCILE_MAX_ATTEMPTS = 3;\nconst RECONCILE_RETRY_DELAY_MS = 25;\n\nexport class QueryCell<T> {\n private readonly source = createReadableSource();\n private readonly key: string;\n private readonly cache: Map<string, QueryCell<unknown>>;\n private options: QueryOptions<T>;\n private controller: AbortController | null = null;\n private generation = 0;\n private startQueued = false;\n private pendingRefresh: Promise<void> | null = null;\n private pendingRefreshResolve: (() => void) | null = null;\n private reconcileAttemptCount = 0;\n private destroyed = false;\n private ownerCount = 0;\n private readonly owners = new Map<ComponentInstance, Set<number>>();\n private readonly warnedDefinitionConflictKeys = new Set<string>();\n\n private state: QueryState<T> = {\n data: null,\n error: null,\n loading: true,\n refreshing: false,\n stale: false,\n consistency: 'fresh',\n staleReason: null,\n };\n\n constructor(\n options: QueryOptions<T>,\n key: string,\n cache: Map<string, QueryCell<unknown>>\n ) {\n this.options = options;\n this.key = key;\n this.cache = cache;\n }\n\n attach(instance: ComponentInstance, hookIndex: number): void {\n let hooks = this.owners.get(instance);\n if (!hooks) {\n hooks = new Set();\n this.owners.set(instance, hooks);\n }\n\n if (hooks.has(hookIndex)) {\n return;\n }\n\n hooks.add(hookIndex);\n this.ownerCount += 1;\n }\n\n detach(instance: ComponentInstance, hookIndex: number): void {\n const hooks = this.owners.get(instance);\n if (!hooks || !hooks.delete(hookIndex)) {\n return;\n }\n\n this.ownerCount -= 1;\n if (hooks.size === 0) {\n this.owners.delete(instance);\n }\n\n if (this.ownerCount <= 0) {\n this.destroy();\n }\n }\n\n warnOnConflictingDefinition(options: QueryOptions<T>): void {\n const conflicts = this.getDefinitionConflicts(options);\n if (conflicts.length === 0) {\n return;\n }\n\n const conflictKey = conflicts.join(',');\n if (this.warnedDefinitionConflictKeys.has(conflictKey)) {\n return;\n }\n\n this.warnedDefinitionConflictKeys.add(conflictKey);\n\n const callbackLabel =\n conflicts.length === 1\n ? `callback \\`${conflicts[0]}\\``\n : `callbacks ${conflicts.map((field) => `\\`${field}\\``).join(', ')}`;\n\n logger.warn(\n `[askr] Conflicting shared query definition for key \"${this.key}\". ` +\n `Shared queries are canonical by key, so reuse the same ${callbackLabel} ` +\n 'for every reader of that key.'\n );\n }\n\n private destroy(): void {\n if (this.destroyed) {\n return;\n }\n\n this.destroyed = true;\n this.controller?.abort();\n this.controller = null;\n this.startQueued = false;\n this.reconcileAttemptCount = 0;\n this.ownerCount = 0;\n this.owners.clear();\n this.cache.delete(this.key);\n this.finishPendingRefresh();\n }\n\n private getDefinitionConflicts(\n options: QueryOptions<T>\n ): QueryDefinitionField[] {\n const conflicts: QueryDefinitionField[] = [];\n\n if (this.options.fetch !== options.fetch) {\n conflicts.push('fetch');\n }\n\n if (this.options.isConsistent !== options.isConsistent) {\n conflicts.push('isConsistent');\n }\n\n if (this.options.reconcile !== options.reconcile) {\n conflicts.push('reconcile');\n }\n\n return conflicts;\n }\n\n get data(): T | null {\n recordReadableRead(this.source);\n return this.state.data;\n }\n\n get error(): {} | null {\n recordReadableRead(this.source);\n return this.state.error;\n }\n\n get loading(): boolean {\n recordReadableRead(this.source);\n return this.state.loading;\n }\n\n get refreshing(): boolean {\n recordReadableRead(this.source);\n return this.state.refreshing;\n }\n\n get stale(): boolean {\n recordReadableRead(this.source);\n return this.state.stale;\n }\n\n get consistency(): QueryState<T>['consistency'] {\n recordReadableRead(this.source);\n return this.state.consistency;\n }\n\n get staleReason(): QueryState<T>['staleReason'] {\n recordReadableRead(this.source);\n return this.state.staleReason;\n }\n\n ensureStarted(): void {\n if (\n this.destroyed ||\n this.state.data !== null ||\n this.pendingRefresh ||\n this.startQueued\n ) {\n return;\n }\n\n this.queueStart('initial');\n }\n\n refresh(): Promise<void> {\n if (this.destroyed) {\n return Promise.resolve();\n }\n\n if (this.pendingRefresh) {\n return this.pendingRefresh;\n }\n\n this.queueStart('manual');\n return this.pendingRefresh ?? Promise.resolve();\n }\n\n markPendingWrite(): void {\n if (this.destroyed) {\n return;\n }\n\n if (this.state.data === null) {\n return;\n }\n\n this.setState({\n loading: false,\n error: null,\n refreshing: true,\n stale: true,\n consistency: 'pending-write',\n staleReason: null,\n });\n }\n\n private queueStart(\n reason: 'initial' | 'manual' | 'invalidate' | 'pending-write'\n ): void {\n if (this.destroyed) {\n return;\n }\n\n this.startQueued = true;\n this.pendingRefresh = new Promise<void>((resolve) => {\n this.pendingRefreshResolve = resolve;\n enqueueRuntimeTask(() => {\n this.startQueued = false;\n if (this.destroyed) {\n this.finishPendingRefresh();\n return;\n }\n void this.start(reason).finally(() => {\n this.finishPendingRefresh();\n });\n });\n });\n }\n\n private finishPendingRefresh(): void {\n const resolve = this.pendingRefreshResolve;\n this.pendingRefresh = null;\n this.pendingRefreshResolve = null;\n resolve?.();\n }\n\n private setState(next: Partial<QueryState<T>>): void {\n if (this.destroyed) {\n return;\n }\n\n this.state = {\n ...this.state,\n ...next,\n };\n notifySource(this.source);\n }\n\n private async start(\n reason: 'initial' | 'manual' | 'invalidate' | 'pending-write'\n ): Promise<void> {\n if (this.destroyed) {\n return;\n }\n\n this.generation += 1;\n const generation = this.generation;\n\n this.controller?.abort();\n const controller = new AbortController();\n this.controller = controller;\n\n const hasData = this.state.data !== null;\n this.setState({\n loading: !hasData,\n refreshing: hasData,\n stale: hasData,\n consistency:\n reason === 'pending-write'\n ? 'pending-write'\n : hasData\n ? 'refreshing'\n : 'fresh',\n error: null,\n staleReason: null,\n });\n\n let nextData: T;\n try {\n nextData = await this.options.fetch({ signal: controller.signal });\n } catch (error) {\n if (\n this.destroyed ||\n this.generation !== generation ||\n this.controller !== controller\n ) {\n return;\n }\n\n if (isAbortError(error, controller.signal)) {\n this.setState(\n hasData\n ? {\n loading: false,\n refreshing: false,\n stale: true,\n consistency: 'stale',\n error: null,\n staleReason: 'aborted',\n }\n : {\n loading: true,\n refreshing: false,\n stale: false,\n consistency: 'fresh',\n error: null,\n staleReason: null,\n }\n );\n return;\n }\n\n this.setState({\n loading: false,\n refreshing: false,\n stale: true,\n consistency: 'stale',\n error: normalizeAsyncDataError(error, 'Unknown query error'),\n staleReason: 'error',\n });\n return;\n }\n\n if (\n this.destroyed ||\n this.generation !== generation ||\n this.controller !== controller\n ) {\n return;\n }\n\n const isConsistent = this.options.isConsistent?.(nextData) ?? true;\n if (!isConsistent) {\n this.setState({\n data: nextData,\n loading: false,\n refreshing: false,\n stale: true,\n consistency: 'stale',\n staleReason: 'inconsistent',\n });\n await this.reconcile(nextData);\n return;\n }\n\n this.reconcileAttemptCount = 0;\n this.setState({\n data: nextData,\n loading: false,\n refreshing: false,\n stale: false,\n consistency: 'fresh',\n error: null,\n staleReason: null,\n });\n }\n\n private async reconcile(data: T): Promise<void> {\n const shouldRetry =\n this.options.reconcile?.(data, { key: this.options.key }) ?? false;\n\n if (!shouldRetry || this.destroyed) {\n return;\n }\n\n this.reconcileAttemptCount += 1;\n if (this.reconcileAttemptCount > RECONCILE_MAX_ATTEMPTS) {\n this.setState({\n consistency: 'stale',\n refreshing: false,\n staleReason: 'inconsistent',\n });\n return;\n }\n\n await new Promise<void>((resolve) =>\n setTimeout(resolve, RECONCILE_RETRY_DELAY_MS)\n );\n if (this.destroyed || this.state.consistency === 'fresh') {\n return;\n }\n\n await this.refresh();\n }\n}\n\nexport function createQuery<T extends {}>(options: QueryOptions<T>): Query<T> {\n const instance = getCurrentComponentInstance();\n const runtimeState = resolveDataRuntimeState(options.runtime);\n const cache = runtimeState.queryCache;\n if (!instance) {\n let cell = cache.get(options.key) as QueryCell<T> | undefined;\n if (!cell) {\n cell = new QueryCell(options, options.key, cache);\n cache.set(options.key, cell as QueryCell<unknown>);\n cell.ensureStarted();\n } else {\n cell.warnOnConflictingDefinition(options);\n }\n return cell as unknown as Query<T>;\n }\n\n const hookIndex = claimHookIndex(instance, 'query');\n ensureQueryCleanup(runtimeState, instance);\n\n const slotStore = getQuerySlotStore(runtimeState, instance);\n const existingSlot = slotStore.get(hookIndex);\n if (existingSlot && existingSlot.key === options.key) {\n (existingSlot.cell as QueryCell<T>).warnOnConflictingDefinition(options);\n return existingSlot.cell as unknown as Query<T>;\n }\n\n if (existingSlot) {\n existingSlot.cell.detach(instance, hookIndex);\n }\n\n let cell = cache.get(options.key) as QueryCell<T> | undefined;\n if (!cell) {\n cell = new QueryCell(options, options.key, cache);\n cache.set(options.key, cell as QueryCell<unknown>);\n cell.ensureStarted();\n } else {\n cell.warnOnConflictingDefinition(options);\n }\n\n slotStore.set(hookIndex, {\n key: options.key,\n cell: cell as QueryCell<unknown>,\n });\n cell.attach(instance, hookIndex);\n return cell as unknown as Query<T>;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-key.js","names":[],"sources":["../../src/data/query-key.ts"],"sourcesContent":["import type { InvalidateOptions, QueryKeyPart, QueryScope } from './types';\n\ntype InvalidateQueryPrefix = (\n prefix: string,\n options?: InvalidateOptions\n) => void;\n\nfunction serializeQueryKeyNumber(part: number): string {\n if (Number.isNaN(part)) {\n return 'NaN';\n }\n\n if (Object.is(part, -0)) {\n return '-0';\n }\n\n if (part === Infinity) {\n return 'Infinity';\n }\n\n if (part === -Infinity) {\n return '-Infinity';\n }\n\n return String(part);\n}\n\nfunction serializeQueryKeyPart(part: QueryKeyPart): string {\n if (typeof (part as unknown) === 'symbol') {\n throw new Error('[Askr] queryScope() key parts cannot be symbols.');\n }\n\n if (part === null) {\n return 'null';\n }\n\n if (part === undefined) {\n return 'undefined';\n }\n\n switch (typeof part) {\n case 'string':\n return `s=${encodeURIComponent(part)}`;\n case 'number':\n return `n=${serializeQueryKeyNumber(part)}`;\n case 'boolean':\n return `b=${part ? '1' : '0'}`;\n case 'object':\n if (Array.isArray(part)) {\n return `a[${part.map((item) => serializeQueryKeyPart(item)).join(',')}]`;\n }\n\n const objectPart = part as { readonly [key: string]: QueryKeyPart };\n return `o{${Object.keys(objectPart)\n .sort()\n .map(\n (key) =>\n `${encodeURIComponent(key)}=${serializeQueryKeyPart(objectPart[key])}`\n )\n .join(',')}}`;\n default:\n return String(part);\n }\n}\n\nexport function createQueryScope(\n namespace: string,\n invalidate: InvalidateQueryPrefix\n): QueryScope {\n if (typeof namespace !== 'string' || namespace.trim().length === 0) {\n throw new Error(\n '[Askr] queryScope() requires a non-empty namespace string.'\n );\n }\n\n const build = (parts: readonly QueryKeyPart[]): string =>\n [namespace, ...parts].map(serializeQueryKeyPart).join(':') + ':';\n\n return {\n key(...parts) {\n return build(parts);\n },\n\n prefix(...parts) {\n return build(parts);\n },\n\n invalidate(parts, options) {\n invalidate(build(parts), options);\n },\n };\n}\n"],"mappings":";AAOA,SAAS,wBAAwB,MAAsB;CACrD,IAAI,OAAO,MAAM,IAAI,GACnB,OAAO;CAGT,IAAI,OAAO,GAAG,MAAM,EAAE,GACpB,OAAO;CAGT,IAAI,SAAS,UACX,OAAO;CAGT,IAAI,SAAS,WACX,OAAO;CAGT,OAAO,OAAO,IAAI;AACpB;AAEA,SAAS,sBAAsB,MAA4B;CACzD,IAAI,OAAQ,SAAqB,UAC/B,MAAM,IAAI,MAAM,kDAAkD;CAGpE,IAAI,SAAS,MACX,OAAO;CAGT,IAAI,SAAS,QACX,OAAO;CAGT,QAAQ,OAAO,MAAf;EACE,KAAK,UACH,OAAO,KAAK,mBAAmB,IAAI;EACrC,KAAK,UACH,OAAO,KAAK,wBAAwB,IAAI;EAC1C,KAAK,WACH,OAAO,KAAK,OAAO,MAAM;EAC3B,KAAK;GACH,IAAI,MAAM,QAAQ,IAAI,GACpB,OAAO,KAAK,KAAK,KAAK,SAAS,sBAAsB,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;GAGxE,MAAM,aAAa;GACnB,OAAO,KAAK,OAAO,KAAK,UAAU,CAAC,CAChC,KAAK,CAAC,CACN,KACE,QACC,GAAG,mBAAmB,GAAG,EAAE,GAAG,sBAAsB,WAAW,IAAI,GACvE,CAAC,CACA,KAAK,GAAG,EAAE;EACf,SACE,OAAO,OAAO,IAAI;CACtB;AACF;AAEA,SAAgB,iBACd,WACA,YACY;CACZ,IAAI,OAAO,cAAc,YAAY,UAAU,KAAK,CAAC,CAAC,WAAW,GAC/D,MAAM,IAAI,MACR,4DACF;CAGF,MAAM,SAAS,UACb,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC,IAAI,qBAAqB,CAAC,CAAC,KAAK,GAAG,IAAI;CAE/D,OAAO;EACL,IAAI,GAAG,OAAO;GACZ,OAAO,MAAM,KAAK;EACpB;EAEA,OAAO,GAAG,OAAO;GACf,OAAO,MAAM,KAAK;EACpB;EAEA,WAAW,OAAO,SAAS;GACzB,WAAW,MAAM,KAAK,GAAG,OAAO;EAClC;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","names":[],"sources":["../../src/data/shared.ts"],"sourcesContent":["import {\n markReadableDerivedSubscribersDirty,\n markReactivePropsDirtySource,\n notifyReadableReaders,\n type ReadableSource,\n} from '../runtime/readable';\n\nexport function createReadableSource(): ReadableSource<unknown> {\n return (() => undefined) as ReadableSource<unknown>;\n}\n\nexport function notifySource(source: ReadableSource<unknown>): void {\n markReadableDerivedSubscribersDirty(source);\n markReactivePropsDirtySource(source);\n notifyReadableReaders(source);\n}\n\nexport function isAbortError(error: unknown, signal: AbortSignal): boolean {\n return (\n signal.aborted ||\n (error instanceof Error && error.name === 'AbortError') ||\n (typeof DOMException !== 'undefined' &&\n error instanceof DOMException &&\n error.name === 'AbortError')\n );\n}\n\nexport function normalizeAsyncDataError(\n error: unknown,\n fallbackMessage: string\n): {} {\n return error ?? new Error(fallbackMessage);\n}\n"],"mappings":";;AAOA,SAAgB,uBAAgD;CAC9D,cAAc;AAChB;AAEA,SAAgB,aAAa,QAAuC;CAClE,oCAAoC,MAAM;CAC1C,6BAA6B,MAAM;CACnC,sBAAsB,MAAM;AAC9B;AAEA,SAAgB,aAAa,OAAgB,QAA8B;CACzE,OACE,OAAO,WACN,iBAAiB,SAAS,MAAM,SAAS,gBACzC,OAAO,iBAAiB,eACvB,iBAAiB,gBACjB,MAAM,SAAS;AAErB;AAEA,SAAgB,wBACd,OACA,iBACI;CACJ,OAAO,SAAS,IAAI,MAAM,eAAe;AAC3C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","names":[],"sources":["../../src/data/types.ts"],"mappings":";KAAY,gBAAA;AAAA,KAMA,gBAAA;AAAA,UAEK,WAAA;EAAA,SACN,UAAA,EAAY,GAAG;AAAA;AAAA,UAGT,kBAAA;EACf,UAAA,GAAa,GAAG;AAAA;AAAA,UAGD,iBAAA;EACf,gBAAA;EACA,OAAA,GAAU,WAAW;AAAA;AAAA,UAGN,2BAAA,SAAoC,iBAAiB;EACpE,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGU,YAAA,2DAMC,YAAA;EAAA,UACG,GAAA,WAAc,YAAY;AAAA;AAAA,UAEzB,UAAA;EACf,GAAA,IAAO,KAAA,EAAO,YAAA;EACd,MAAA,IAAU,KAAA,EAAO,YAAA;EACjB,UAAA,CAAW,KAAA,WAAgB,YAAA,IAAgB,OAAA,GAAU,iBAAA;AAAA;AAAA,KAGlD,aAAA;EACH,OAAA,IAAW,OAAO;AAAA;AAAA,KAGf,YAAA;EACH,IAAA;EACA,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,UAAA;EACH,IAAA,EAAM,CAAC;EACP,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,eAAA;EACH,IAAA,EAAM,CAAC;EACP,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,iBAAA;EACH,IAAA,EAAM,CAAC;EACP,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,eAAA;EACH,IAAA,EAAM,CAAC;EACP,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,wBAAA;EACH,IAAA,EAAM,CAAC;EACP,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGG,eAAA;EACH,IAAA;EACA,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,KAGU,KAAA,iBAAsB,aAAA,IAE5B,YAAA,GACA,UAAA,CAAW,CAAA,IACX,eAAA,CAAgB,CAAA,IAChB,iBAAA,CAAkB,CAAA,IAClB,eAAA,CAAgB,CAAA,IAChB,wBAAA,CAAyB,CAAA,IACzB,eAAA;AAAA,KAGD,gBAAA;EACH,OAAA,CAAQ,KAAA,EAAO,MAAA,GAAS,OAAA,CAAQ,OAAA;EAChC,KAAA;EACA,KAAA;AAAA;AAAA,KAGG,YAAA;EACH,MAAA;EACA,OAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,KAGG,eAAA;EACH,MAAA;EACA,OAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,KAGG,eAAA;EACH,MAAA;EACA,OAAA;EACA,KAAA;EACA,MAAA,EAAQ,OAAO;AAAA;AAAA,KAGZ,aAAA;EACH,MAAA;EACA,OAAA;EACA,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,QAAA,oBAA4B,gBAAA,CAAiB,MAAA,EAAQ,OAAA,KAC9D,YAAA,GAAe,eAAA,GAAkB,eAAA,CAAgB,OAAA,IAAW,aAAA;AAAA,KAEnD,cAAA;EACV,MAAA;EACA,KAAA;EACA,MAAA,EAAQ,OAAO;AAAA;AAAA,KAGL,YAAA;EACV,GAAA;EACA,KAAA,GAAQ,GAAA;IAAO,MAAA,EAAQ,WAAA;EAAA,MAAkB,OAAA,CAAQ,CAAA;EACjD,YAAA,IAAgB,IAAA,EAAM,CAAA;EACtB,SAAA,IAAa,IAAA,EAAM,CAAA,EAAG,GAAA;IAAO,GAAA;EAAA,MAAkB,OAAA;EAC/C,OAAA,GAAU,WAAA;AAAA;AAAA,KAGA,eAAA;EACV,MAAA,GAAS,KAAA,EAAO,MAAA,EAAQ,GAAA;IAAO,MAAA,EAAQ,WAAA;EAAA,MAAkB,OAAA,CAAQ,OAAA;EACjE,OAAA,IAAW,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,OAAA;EAClC,YAAA;EACA,OAAA,GAAU,WAAA;AAAA;AAAA,KAGA,UAAA;EACV,IAAA,EAAM,CAAA;EACN,KAAA;EACA,OAAA;EACA,UAAA;EACA,KAAA;EACA,WAAA,EAAa,gBAAA;EACb,WAAA,EAAa,gBAAA;AAAA;AAAA,KAGH,oBAAA"}
@@ -1,29 +0,0 @@
1
- //#region src/dev/invariant.ts
2
- /**
3
- * Invariant assertion utilities for correctness checking
4
- * Production-safe: invariants are enforced at build-time or with minimal overhead
5
- *
6
- * Core principle: fail fast when invariants are violated
7
- * All functions throw descriptive errors for debugging
8
- */
9
- /**
10
- * Assert a condition; throw with context if false
11
- * @internal
12
- */
13
- function invariant(condition, message, context) {
14
- if (!condition) {
15
- const contextStr = context ? "\n" + JSON.stringify(context, null, 2) : "";
16
- throw new Error(`[Askr Invariant] ${message}${contextStr}`);
17
- }
18
- }
19
- /**
20
- * Assert scheduling precondition (not reentering, not during render, etc)
21
- * @internal
22
- */
23
- function assertSchedulingPrecondition(condition, violationMessage) {
24
- invariant(condition, `[Scheduler Precondition] ${violationMessage}`);
25
- }
26
- //#endregion
27
- export { assertSchedulingPrecondition, invariant };
28
-
29
- //# sourceMappingURL=invariant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invariant.js","names":[],"sources":["../../src/dev/invariant.ts"],"sourcesContent":["/**\n * Invariant assertion utilities for correctness checking\n * Production-safe: invariants are enforced at build-time or with minimal overhead\n *\n * Core principle: fail fast when invariants are violated\n * All functions throw descriptive errors for debugging\n */\n\n/**\n * Assert a condition; throw with context if false\n * @internal\n */\nexport function invariant(\n condition: boolean,\n message: string,\n context?: Record<string, unknown>\n): asserts condition {\n if (!condition) {\n const contextStr = context ? '\\n' + JSON.stringify(context, null, 2) : '';\n throw new Error(`[Askr Invariant] ${message}${contextStr}`);\n }\n}\n\n/**\n * Assert object property exists and has correct type\n * @internal\n */\nexport function assertProperty<T extends object, K extends keyof T>(\n obj: T,\n prop: K,\n expectedType?: string\n): asserts obj is T & Required<Pick<T, K>> {\n invariant(prop in obj, `Object missing required property '${String(prop)}'`, {\n object: obj,\n });\n\n if (expectedType) {\n const actualType = typeof obj[prop];\n invariant(\n actualType === expectedType,\n `Property '${String(prop)}' has type '${actualType}', expected '${expectedType}'`,\n { value: obj[prop], expectedType }\n );\n }\n}\n\n/**\n * Assert a reference is not null/undefined\n * @internal\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message: string\n): asserts value is T {\n invariant(value !== null && value !== undefined, message, { value });\n}\n\n/**\n * Assert a task runs exactly once atomically\n * Useful for verifying lifecycle events fire precisely when expected\n * @internal\n */\nexport class Once {\n private called = false;\n private calledAt: number | null = null;\n readonly name: string;\n\n constructor(name: string) {\n this.name = name;\n }\n\n check(): boolean {\n return this.called;\n }\n\n mark(): void {\n invariant(\n !this.called,\n `${this.name} called multiple times (previously at ${this.calledAt}ms)`,\n { now: Date.now() }\n );\n this.called = true;\n this.calledAt = Date.now();\n }\n\n reset(): void {\n this.called = false;\n this.calledAt = null;\n }\n}\n\n/**\n * Assert a value falls in an enumerated set\n * @internal\n */\nexport function assertEnum<T extends readonly unknown[]>(\n value: unknown,\n allowedValues: T,\n fieldName: string\n): asserts value is T[number] {\n invariant(\n allowedValues.includes(value),\n `${fieldName} must be one of [${allowedValues.join(', ')}], got ${JSON.stringify(value)}`,\n { value, allowed: allowedValues }\n );\n}\n\n/**\n * Assert execution context (scheduler, component, etc)\n * @internal\n */\nexport function assertContext(\n actual: unknown,\n expected: unknown,\n contextName: string\n): asserts actual is typeof expected {\n invariant(\n actual === expected,\n `Invalid ${contextName} context. Expected ${expected}, got ${actual}`,\n { expected, actual }\n );\n}\n\n/**\n * Assert scheduling precondition (not reentering, not during render, etc)\n * @internal\n */\nexport function assertSchedulingPrecondition(\n condition: boolean,\n violationMessage: string\n): asserts condition {\n invariant(condition, `[Scheduler Precondition] ${violationMessage}`);\n}\n\n/**\n * Assert state precondition\n * @internal\n */\nexport function assertStatePrecondition(\n condition: boolean,\n violationMessage: string\n): asserts condition {\n invariant(condition, `[State Precondition] ${violationMessage}`);\n}\n\n/**\n * Verify AbortController lifecycle\n * @internal\n */\nexport function assertAbortControllerState(\n signal: AbortSignal,\n expectedAborted: boolean,\n context: string\n): void {\n invariant(\n signal.aborted === expectedAborted,\n `AbortSignal ${expectedAborted ? 'should be' : 'should not be'} aborted in ${context}`,\n { actual: signal.aborted, expected: expectedAborted }\n );\n}\n\n/**\n * Guard: throw if callback is null when it shouldn't be\n * Used for notifyUpdate, event handlers, etc.\n * @internal\n */\nexport function assertCallbackAvailable<\n T extends (...args: unknown[]) => unknown,\n>(callback: T | null | undefined, callbackName: string): asserts callback is T {\n invariant(\n callback !== null && callback !== undefined,\n `${callbackName} callback is required but not available`,\n { callback }\n );\n}\n\n/**\n * Verify evaluation generation prevents stale evaluations\n * @internal\n */\nexport function assertEvaluationGeneration(\n current: number,\n latest: number,\n context: string\n): void {\n invariant(\n current === latest,\n `Stale evaluation generation in ${context}: current ${current}, latest ${latest}`,\n { current, latest }\n );\n}\n\n/**\n * Verify mounted flag state\n * @internal\n */\nexport function assertMountedState(\n mounted: boolean,\n expectedMounted: boolean,\n context: string\n): void {\n invariant(\n mounted === expectedMounted,\n `Invalid mounted state in ${context}: expected ${expectedMounted}, got ${mounted}`,\n { mounted, expected: expectedMounted }\n );\n}\n\n/**\n * Verify no null target when rendering\n * @internal\n */\nexport function assertRenderTarget(\n target: Element | null,\n context: string\n): asserts target is Element {\n invariant(target !== null, `Cannot render in ${context}: target is null`, {\n target,\n });\n}\n"],"mappings":";;;;;;;;;;;;AAYA,SAAgB,UACd,WACA,SACA,SACmB;CACnB,IAAI,CAAC,WAAW;EACd,MAAM,aAAa,UAAU,OAAO,KAAK,UAAU,SAAS,MAAM,CAAC,IAAI;EACvE,MAAM,IAAI,MAAM,oBAAoB,UAAU,YAAY;CAC5D;AACF;;;;;AA0GA,SAAgB,6BACd,WACA,kBACmB;CACnB,UAAU,WAAW,4BAA4B,kBAAkB;AACrE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","names":[],"sources":["../../src/dev/logger.ts"],"sourcesContent":["/**\n * Centralized logger interface\n * - Keeps production builds silent for debug/warn/info messages\n * - Ensures consistent behavior across the codebase\n * - Protects against missing `console` in some environments\n */\n\nimport { isProductionEnvironment } from '../common/env';\n\nfunction callConsole(method: string, args: unknown[]): void {\n const c = typeof console !== 'undefined' ? (console as unknown) : undefined;\n if (!c) return;\n const fn = (c as Record<string, unknown>)[method];\n if (typeof fn === 'function') {\n try {\n (fn as (...a: unknown[]) => unknown).apply(console, args as unknown[]);\n } catch {\n // ignore logging errors\n }\n }\n}\n\nexport const logger = {\n debug: (...args: unknown[]) => {\n if (isProductionEnvironment()) return;\n callConsole('debug', args);\n },\n\n info: (...args: unknown[]) => {\n if (isProductionEnvironment()) return;\n callConsole('info', args);\n },\n\n warn: (...args: unknown[]) => {\n if (isProductionEnvironment()) return;\n callConsole('warn', args);\n },\n\n error: (...args: unknown[]) => {\n callConsole('error', args);\n },\n};\n"],"mappings":";;;;;;;;AASA,SAAS,YAAY,QAAgB,MAAuB;CAC1D,MAAM,IAAI,OAAO,YAAY,cAAe,UAAsB;CAClE,IAAI,CAAC,GAAG;CACR,MAAM,KAAM,EAA8B;CAC1C,IAAI,OAAO,OAAO,YAChB,IAAI;EACF,GAAqC,MAAM,SAAS,IAAiB;CACvE,QAAQ,CAER;AAEJ;AAEA,MAAa,SAAS;CACpB,QAAQ,GAAG,SAAoB;EAC7B,IAAI,wBAAwB,GAAG;EAC/B,YAAY,SAAS,IAAI;CAC3B;CAEA,OAAO,GAAG,SAAoB;EAC5B,IAAI,wBAAwB,GAAG;EAC/B,YAAY,QAAQ,IAAI;CAC1B;CAEA,OAAO,GAAG,SAAoB;EAC5B,IAAI,wBAAwB,GAAG;EAC/B,YAAY,QAAQ,IAAI;CAC1B;CAEA,QAAQ,GAAG,SAAoB;EAC7B,YAAY,SAAS,IAAI;CAC3B;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon.d.ts","names":[],"sources":["../../../src/foundations/icon/icon.tsx"],"mappings":";;;;iBAQgB,eAAA,CAAgB,KAAA,YAAiB,KAAA,IAAS,aAAa;AAAA,iBAOvD,sBAAA,CAAuB,IAAqB;AAAA,iBAK5C,uBAAA,CAAwB,IAAqB;AAAA,iBAO7C,8BAAA,CACd,WAAA,UACA,SAAA,EAAW,aAAa;AAAA,iBAYV,kBAAA,CACd,KAA2C,WAA3B,eAAe;AAAA,iBAUjB,aAAA,IACX,MAAA,EAAQ,KAAK;AAAA,iBAMF,oBAAA;EACd,IAAA;EACA,WAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA;EACA;AAAA,GACC,IAAA,CACD,SAAA;;;;;;;;;;;;;;;;;;;;;iBA4Cc,QAAA;EACd,IAAA;EACA,WAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA,EAAO,SAAA;EACP,KAAA;EACA,QAAA;EACA,QAAA;EACA,GAAA;EAAA,GACG;AAAA,GACF,SAAA,GAAY,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon.js","names":[],"sources":["../../../src/foundations/icon/icon.tsx"],"sourcesContent":["/* eslint-disable askr/no-hardcoded-theme-tokens -- Icon exposes a stable CSS variable contract consumed by themes. */\nimport { jsx, jsxs } from '../../jsx/jsx-runtime';\nimport type { JSXElement } from '../../common/jsx';\nimport type { KnownIntrinsicElementProps } from '../../common/props';\nimport type { IconProps, IconSizeToken, IconStyleObject } from './icon.types';\n\nconst ICON_SIZE_TOKENS: readonly IconSizeToken[] = ['sm', 'md', 'lg', 'xl'];\n\nexport function isIconSizeToken(value: unknown): value is IconSizeToken {\n return (\n typeof value === 'string' &&\n ICON_SIZE_TOKENS.includes(value as IconSizeToken)\n );\n}\n\nexport function normalizeIconSizeValue(size: number | string): string {\n if (typeof size === 'number') return `${size}px`;\n return size;\n}\n\nexport function resolveIconSizeVariable(size: number | string): string {\n if (isIconSizeToken(size)) {\n return `var(--ak-icon-size-${size}, var(--ak-icon-size-md, 1.25rem))`;\n }\n return normalizeIconSizeValue(size);\n}\n\nexport function resolveIconStrokeWidthVariable(\n strokeWidth: number,\n sizeToken: IconSizeToken | undefined\n): string {\n if (sizeToken) {\n return `var(--ak-icon-stroke-width-${sizeToken}, var(--ak-icon-stroke-width-md, ${strokeWidth}))`;\n }\n return `var(--ak-icon-stroke-width-md, ${strokeWidth})`;\n}\n\nfunction camelToKebab(key: string): string {\n return key.replace(/([A-Z])/g, (match) => `-${match.toLowerCase()}`);\n}\n\nexport function serializeIconStyle(\n style: string | IconStyleObject | undefined\n): string {\n if (!style) return '';\n if (typeof style === 'string') return style.trim();\n return Object.entries(style)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(([key, value]) => `${camelToKebab(key)}:${String(value)}`)\n .join(';');\n}\n\nexport function joinIconStyle(\n ...styles: Array<string | undefined>\n): string | undefined {\n const merged = styles.map((style) => style?.trim()).filter(Boolean);\n return merged.length > 0 ? merged.join(';') : undefined;\n}\n\nexport function getIconContractProps({\n size = 20,\n strokeWidth = 2,\n color = 'currentColor',\n title,\n style,\n iconName,\n}: Pick<\n IconProps,\n 'color' | 'iconName' | 'size' | 'strokeWidth' | 'style' | 'title'\n>) {\n const sizeToken = isIconSizeToken(size) ? size : undefined;\n const decorative = title ? undefined : 'true';\n const resolvedSize = resolveIconSizeVariable(size);\n const resolvedStrokeWidth = resolveIconStrokeWidthVariable(\n strokeWidth,\n sizeToken\n );\n const iconStyle = joinIconStyle(\n `--ak-icon-size:${resolvedSize}`,\n `--ak-icon-stroke-width:${resolvedStrokeWidth}`,\n 'display:inline-block',\n 'flex-shrink:0',\n 'width:var(--ak-icon-size)',\n 'height:var(--ak-icon-size)',\n 'stroke-width:var(--ak-icon-stroke-width)',\n serializeIconStyle(style)\n );\n\n return {\n sizeToken,\n decorative,\n iconStyle,\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: '24',\n height: '24',\n fill: 'none',\n stroke: color,\n 'stroke-width': 'var(--ak-icon-stroke-width)',\n role: 'img',\n 'aria-hidden': title ? undefined : 'true',\n style: iconStyle,\n 'data-slot': 'icon',\n 'data-icon': iconName,\n 'data-size': sizeToken,\n 'data-decorative': decorative,\n 'data-color': color === 'currentColor' ? 'current' : undefined,\n },\n };\n}\n\nexport function IconBase({\n size = 20,\n strokeWidth = 2,\n color = 'currentColor',\n title,\n class: className,\n style,\n iconName,\n children,\n ref,\n ...rest\n}: IconProps): JSXElement {\n const { attrs } = getIconContractProps({\n size,\n strokeWidth,\n color,\n title,\n style,\n iconName,\n });\n\n const finalChildren = title\n ? [jsx('title', { children: title }), children]\n : children;\n\n const svgProps = {\n ...rest,\n ...attrs,\n viewBox: rest.viewBox ?? '0 0 24 24',\n 'stroke-linecap': rest['stroke-linecap'] ?? 'round',\n 'stroke-linejoin': rest['stroke-linejoin'] ?? 'round',\n class: className,\n ref,\n children: finalChildren,\n } as unknown as KnownIntrinsicElementProps['svg'];\n\n return jsxs('svg', svgProps);\n}\n"],"mappings":";;AAMA,MAAM,mBAA6C;CAAC;CAAM;CAAM;CAAM;AAAI;AAE1E,SAAgB,gBAAgB,OAAwC;CACtE,OACE,OAAO,UAAU,YACjB,iBAAiB,SAAS,KAAsB;AAEpD;AAEA,SAAgB,uBAAuB,MAA+B;CACpE,IAAI,OAAO,SAAS,UAAU,OAAO,GAAG,KAAK;CAC7C,OAAO;AACT;AAEA,SAAgB,wBAAwB,MAA+B;CACrE,IAAI,gBAAgB,IAAI,GACtB,OAAO,sBAAsB,KAAK;CAEpC,OAAO,uBAAuB,IAAI;AACpC;AAEA,SAAgB,+BACd,aACA,WACQ;CACR,IAAI,WACF,OAAO,8BAA8B,UAAU,mCAAmC,YAAY;CAEhG,OAAO,kCAAkC,YAAY;AACvD;AAEA,SAAS,aAAa,KAAqB;CACzC,OAAO,IAAI,QAAQ,aAAa,UAAU,IAAI,MAAM,YAAY,GAAG;AACrE;AAEA,SAAgB,mBACd,OACQ;CACR,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,OAAO,UAAU,UAAU,OAAO,MAAM,KAAK;CACjD,OAAO,OAAO,QAAQ,KAAK,CAAC,CACzB,QAAQ,GAAG,WAAW,UAAU,UAAa,UAAU,IAAI,CAAC,CAC5D,KAAK,CAAC,KAAK,WAAW,GAAG,aAAa,GAAG,EAAE,GAAG,OAAO,KAAK,GAAG,CAAC,CAC9D,KAAK,GAAG;AACb;AAEA,SAAgB,cACd,GAAG,QACiB;CACpB,MAAM,SAAS,OAAO,KAAK,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO;CAClE,OAAO,OAAO,SAAS,IAAI,OAAO,KAAK,GAAG,IAAI;AAChD;AAEA,SAAgB,qBAAqB,EACnC,OAAO,IACP,cAAc,GACd,QAAQ,gBACR,OACA,OACA,YAIC;CACD,MAAM,YAAY,gBAAgB,IAAI,IAAI,OAAO;CACjD,MAAM,aAAa,QAAQ,SAAY;CACvC,MAAM,eAAe,wBAAwB,IAAI;CACjD,MAAM,sBAAsB,+BAC1B,aACA,SACF;CACA,MAAM,YAAY,cAChB,kBAAkB,gBAClB,0BAA0B,uBAC1B,wBACA,iBACA,6BACA,8BACA,4CACA,mBAAmB,KAAK,CAC1B;CAEA,OAAO;EACL;EACA;EACA;EACA,OAAO;GACL,OAAO;GACP,OAAO;GACP,QAAQ;GACR,MAAM;GACN,QAAQ;GACR,gBAAgB;GAChB,MAAM;GACN,eAAe,QAAQ,SAAY;GACnC,OAAO;GACP,aAAa;GACb,aAAa;GACb,aAAa;GACb,mBAAmB;GACnB,cAAc,UAAU,iBAAiB,YAAY;EACvD;CACF;AACF;AAEA,SAAgB,SAAS,EACvB,OAAO,IACP,cAAc,GACd,QAAQ,gBACR,OACA,OAAO,WACP,OACA,UACA,UACA,KACA,GAAG,QACqB;CACxB,MAAM,EAAE,UAAU,qBAAqB;EACrC;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,MAAM,gBAAgB,QAClB,CAAC,IAAI,SAAS,EAAE,UAAU,MAAM,CAAC,GAAG,QAAQ,IAC5C;CAaJ,OAAO,KAAK,OAAO;EAVjB,GAAG;EACH,GAAG;EACH,SAAS,KAAK,WAAW;EACzB,kBAAkB,KAAK,qBAAqB;EAC5C,mBAAmB,KAAK,sBAAsB;EAC9C,OAAO;EACP;EACA,UAAU;CAGO,CAAQ;AAC7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon.types.d.ts","names":[],"sources":["../../../src/foundations/icon/icon.types.ts"],"mappings":";;;;KAIY,aAAA;AAAA,KAEA,eAAA,GAAkB,MAAM;AAAA,KAExB,YAAA;EACV,IAAA;EACA,WAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA;EACA,KAAA,YAAiB,eAAe;EAChC,QAAA;AAAA;AAAA,KAGU,SAAA,GAAY,IAAA,CACtB,KAAA,0HAaA,YAAA;EACE,QAAA;EACA,GAAA,GAAM,GAAA,CAAI,aAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dismissable.d.ts","names":[],"sources":["../../../src/foundations/interactions/dismissable.ts"],"mappings":";;;;;;AA4CA;;;;;;;;;;AAe4C;AAQ5C;;;;;;;;;;;;;;;;;;;;;;;;;AAUuD;;;;UAjCtC,kBAAA;;;;;EAKf,IAAA,GAAO,IAAI;;;;EAKX,QAAA;;;;EAKA,SAAA,IAAa,OAAA;AAAA;AAAA,iBAQC,WAAA;EAAc,IAAA;EAAM,QAAA;EAAU;AAAA,GAAa,kBAAA;iBAC/B,iBAAA;4BASW,gBAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dismissable.js","names":[],"sources":["../../../src/foundations/interactions/dismissable.ts"],"sourcesContent":["/**\n * dismissable\n *\n * THE dismissal primitive. Handles Escape key and outside interactions.\n *\n * INVARIANTS:\n * 1. Returns props that compose via mergeProps (no factories)\n * 2. Disabled state respected exactly once, here\n * 3. No side effects - pure props generation\n * 4. Outside detection requires explicit node reference\n * 5. This is the ONLY dismissal primitive - do not create alternatives\n *\n * DESIGN:\n * - Returns standard event handler props (onKeyDown, onPointerDownCapture)\n * - Composable via mergeProps with other foundations\n * - Caller provides the protected node reference for outside detection\n * - Returned capture props must be attached to a surface that can observe both\n * the protected subtree and the outside interaction path (for example, an\n * overlay or wrapper around the protected node)\n * - Single onDismiss callback for all dismiss triggers\n *\n * PIT OF SUCCESS:\n * ✓ Can't accidentally bypass (only way to get dismiss behavior)\n * ✓ Can't duplicate (disabled checked once)\n * ✓ Composes via mergeProps (standard props)\n * ✓ Wrong usage is hard (no factories to misuse)\n *\n * USAGE:\n * const props = dismissable({\n * node: elementRef,\n * disabled: false,\n * onDismiss: () => close()\n * });\n *\n * <div {...props}>\n * <div ref={elementRef}>Content</div>\n * </div>\n *\n * MISUSE EXAMPLE (PREVENTED):\n * ❌ Can't forget to check disabled - checked inside dismissable\n * ❌ Can't create custom escape handler - this is the only one\n * ❌ Can't bypass via direct event listeners - mergeProps composes correctly\n */\n\nexport interface DismissableOptions {\n /**\n * Reference to the protected element for outside click detection. Attach the\n * returned capture props to a surface that encloses this node.\n */\n node?: Node | null;\n\n /**\n * Whether dismiss is disabled\n */\n disabled?: boolean;\n\n /**\n * Called when dismiss is triggered (Escape or outside click)\n */\n onDismiss?: (trigger: 'escape' | 'outside') => void;\n}\n\nimport type {\n KeyboardLikeEvent,\n PointerLikeEvent,\n} from '../utilities/event-types';\n\nexport function dismissable({ node, disabled, onDismiss }: DismissableOptions) {\n function handleKeyDown(e: KeyboardLikeEvent) {\n if (disabled) return;\n if (e.key === 'Escape') {\n e.preventDefault?.();\n e.stopPropagation?.();\n onDismiss?.('escape');\n }\n }\n\n function handlePointerDownCapture(e: PointerLikeEvent) {\n if (disabled) return;\n\n const target = e.target;\n if (!(target instanceof Node)) return;\n\n // If no node provided, can't detect outside clicks\n if (!node) return;\n\n // Check if click is outside the protected node\n if (!node.contains(target)) {\n onDismiss?.('outside');\n }\n }\n\n return {\n onKeyDown: handleKeyDown,\n // Use capture phase to catch events before they bubble\n onPointerDownCapture: handlePointerDownCapture,\n };\n}\n"],"mappings":";AAmEA,SAAgB,YAAY,EAAE,MAAM,UAAU,aAAiC;CAC7E,SAAS,cAAc,GAAsB;EAC3C,IAAI,UAAU;EACd,IAAI,EAAE,QAAQ,UAAU;GACtB,EAAE,iBAAiB;GACnB,EAAE,kBAAkB;GACpB,YAAY,QAAQ;EACtB;CACF;CAEA,SAAS,yBAAyB,GAAqB;EACrD,IAAI,UAAU;EAEd,MAAM,SAAS,EAAE;EACjB,IAAI,EAAE,kBAAkB,OAAO;EAG/B,IAAI,CAAC,MAAM;EAGX,IAAI,CAAC,KAAK,SAAS,MAAM,GACvB,YAAY,SAAS;CAEzB;CAEA,OAAO;EACL,WAAW;EAEX,sBAAsB;CACxB;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"focusable.d.ts","names":[],"sources":["../../../src/foundations/interactions/focusable.ts"],"mappings":";;AASA;;;;AAEU;UAFO,gBAAA;EACf,QAAA;EACA,QAAQ;AAAA;AAAA,UAGO,eAAA;EACf,QAAA;EACA,eAAe;AAAA;AAAA,iBAGD,SAAA;EACd,QAAA;EACA;AAAA,GACC,gBAAA,GAAmB,eAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"focusable.js","names":[],"sources":["../../../src/foundations/interactions/focusable.ts"],"sourcesContent":["/**\n * focusable\n *\n * Normalize focus-related props for hosts.\n * - No DOM manipulation here; returns props that the runtime may attach.\n */\n\nimport { ariaDisabled } from '../utilities/aria';\n\nexport interface FocusableOptions {\n disabled?: boolean;\n tabIndex?: number | undefined;\n}\n\nexport interface FocusableResult {\n tabIndex?: number;\n 'aria-disabled'?: 'true';\n}\n\nexport function focusable({\n disabled,\n tabIndex,\n}: FocusableOptions): FocusableResult {\n return {\n tabIndex: disabled ? -1 : tabIndex === undefined ? 0 : tabIndex,\n ...ariaDisabled(disabled),\n };\n}\n"],"mappings":";;;;;;;;AAmBA,SAAgB,UAAU,EACxB,UACA,YACoC;CACpC,OAAO;EACL,UAAU,WAAW,KAAK,aAAa,SAAY,IAAI;EACvD,GAAG,aAAa,QAAQ;CAC1B;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hoverable.d.ts","names":[],"sources":["../../../src/foundations/interactions/hoverable.ts"],"mappings":";;;;;;AAMA;;UAAiB,gBAAA;EACf,QAAA;EACA,OAAA,IAAW,CAAA,EAAG,UAAA;EACd,OAAA,IAAW,CAAA,EAAG,UAAU;AAAA;AAAA,KAQrB,UAAA,GAAa,kBAAA,GAAqB,oBAAoB;AAAA,UAE1C,eAAA;EACf,cAAA,IAAkB,CAAA,EAAG,UAAA;EACrB,cAAA,IAAkB,CAAA,EAAG,UAAU;AAAA;AAAA,iBAGjB,SAAA;EACd,QAAA;EACA,OAAA;EACA;AAAA,GACC,gBAAA,GAAmB,eAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hoverable.js","names":[],"sources":["../../../src/foundations/interactions/hoverable.ts"],"sourcesContent":["/**\n * hoverable\n *\n * Produces props for pointer enter/leave handling. Pure and deterministic.\n */\n\nexport interface HoverableOptions {\n disabled?: boolean;\n onEnter?: (e: HoverEvent) => void;\n onLeave?: (e: HoverEvent) => void;\n}\n\nimport type {\n DefaultPreventable,\n PropagationStoppable,\n} from '../utilities/event-types';\n\ntype HoverEvent = DefaultPreventable & PropagationStoppable;\n\nexport interface HoverableResult {\n onPointerEnter?: (e: HoverEvent) => void;\n onPointerLeave?: (e: HoverEvent) => void;\n}\n\nexport function hoverable({\n disabled,\n onEnter,\n onLeave,\n}: HoverableOptions): HoverableResult {\n return {\n onPointerEnter: disabled\n ? undefined\n : (e) => {\n onEnter?.(e);\n },\n onPointerLeave: disabled\n ? undefined\n : (e) => {\n onLeave?.(e);\n },\n };\n}\n"],"mappings":";AAwBA,SAAgB,UAAU,EACxB,UACA,SACA,WACoC;CACpC,OAAO;EACL,gBAAgB,WACZ,UACC,MAAM;GACL,UAAU,CAAC;EACb;EACJ,gBAAgB,WACZ,UACC,MAAM;GACL,UAAU,CAAC;EACb;CACN;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"interaction-policy.d.ts","names":[],"sources":["../../../src/foundations/interactions/interaction-policy.ts"],"mappings":";;;UA8DiB,sBAAA;;EAEf,QAAA;;EAEA,QAAA;;EAEA,OAAA,IAAW,CAAA,EAAG,KAAA;;EAEd,GAAA,GAAM,GAAG;AAAA;;;AAwDX;;iBAjDgB,sBAAA;EACd,QAAA;EACA,QAAA;EACA,OAAA;EACA;AAAA,GACC,sBAAA;;eAcgB,KAAA;;;;;;;;;;;;;AAiCkB;;;;;;;;;iBAHrB,qBAAA,CACd,UAAA,EAAY,MAAA,mBACZ,WAAA,EAAa,MAAA,mBACb,SAAA,GAAY,MAAA,oBAAuB,MAAA"}
@@ -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 +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 +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 +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 +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 +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 +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/state';\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 +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 +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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.d.ts","names":[],"sources":["../../../src/foundations/structures/layer.ts"],"mappings":";;AA+BA;;;;;;;;;;;AAca;AAGb;;;;;;;;AAcY;AAGZ;;;;;;;;UAlCiB,YAAA;EAqDqB;;;EAjDpC,QAAA;EAkCiC;;;EA7BjC,gBAAA,IAAoB,CAAA,EAAG,YAAA;EAuCvB;;;EAlCA,IAAA,GAAO,IAAI;AAAA;AAAA,UAGI,KAAA;EAuCD;;;EAnCd,EAAA;EAmCyC;;;EA9BzC,KAAA;;;;EAKA,UAAA;AAAA;AAAA,UAGe,YAAA;;;;EAIf,QAAA,CAAS,OAAA,EAAS,YAAA,GAAe,KAAA;;;;EAKjC,MAAA,IAAU,aAAA,CAAc,KAAA;;;;EAKxB,YAAA;;;;EAKA,oBAAA,CAAqB,CAAA,EAAG,YAAA;AAAA;AAAA,iBAGV,WAAA,IAAe,YAAY"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.js","names":[],"sources":["../../../src/foundations/structures/layer.ts"],"sourcesContent":["/**\n * createLayer\n *\n * Manages stacking order and coordination for overlays (modals, popovers, etc).\n *\n * INVARIANTS:\n * 1. Layers are ordered by registration time (FIFO)\n * 2. Only the top layer handles Escape key\n * 3. Only the top layer handles outside pointer events\n * 4. Nested layers are supported\n * 5. Does not implement portals (orthogonal concern)\n * 6. No automatic DOM insertion (caller controls mounting)\n *\n * DESIGN:\n * - Returns a layer manager with register/unregister API\n * - Each layer has a unique ID and can query if it's the top layer\n * - Escape and outside pointer coordination via callbacks\n * - No z-index management (CSS concern)\n *\n * USAGE:\n * const manager = createLayer();\n *\n * const layer = manager.register({\n * onEscape: () => { ... },\n * onOutsidePointer: () => { ... }\n * });\n *\n * layer.isTop(); // true if this is the topmost layer\n * layer.unregister();\n */\n\nexport interface LayerOptions {\n /**\n * Called when Escape is pressed and this is the top layer\n */\n onEscape?: () => void;\n\n /**\n * Called when pointer event occurs outside and this is the top layer\n */\n onOutsidePointer?: (e: PointerEvent) => void;\n\n /**\n * Optional node reference for outside pointer detection\n */\n node?: Node | null;\n}\n\nexport interface Layer {\n /**\n * Unique layer ID\n */\n id: number;\n\n /**\n * Check if this layer is the topmost\n */\n isTop(): boolean;\n\n /**\n * Remove this layer from the stack\n */\n unregister(): void;\n}\n\nexport interface LayerManager {\n /**\n * Register a new layer\n */\n register(options: LayerOptions): Layer;\n\n /**\n * Get all active layers in order\n */\n layers(): ReadonlyArray<Layer>;\n\n /**\n * Manually trigger escape handling on the top layer\n */\n handleEscape(): void;\n\n /**\n * Manually trigger outside pointer handling on the top layer\n */\n handleOutsidePointer(e: PointerEvent): void;\n}\n\nexport function createLayer(): LayerManager {\n const stack: Array<{\n id: number;\n options: LayerOptions;\n }> = [];\n\n let nextId = 1;\n\n function register(options: LayerOptions): Layer {\n const id = nextId++;\n const entry = { id, options };\n stack.push(entry);\n\n function isTop(): boolean {\n return stack[stack.length - 1]?.id === id;\n }\n\n function unregister(): void {\n const index = stack.findIndex((e) => e.id === id);\n if (index !== -1) {\n stack.splice(index, 1);\n }\n }\n\n return {\n id,\n isTop,\n unregister,\n };\n }\n\n function layers(): ReadonlyArray<Layer> {\n return stack.map((entry) => ({\n id: entry.id,\n isTop: () => stack[stack.length - 1]?.id === entry.id,\n unregister: () => {\n const index = stack.findIndex((e) => e.id === entry.id);\n if (index !== -1) {\n stack.splice(index, 1);\n }\n },\n }));\n }\n\n function handleEscape(): void {\n const top = stack[stack.length - 1];\n if (top) {\n top.options.onEscape?.();\n }\n }\n\n function handleOutsidePointer(e: PointerEvent): void {\n const top = stack[stack.length - 1];\n if (!top) return;\n\n const node = top.options.node;\n if (node && e.target instanceof Node) {\n // Check if the event target is outside the layer node\n if (!node.contains(e.target)) {\n top.options.onOutsidePointer?.(e);\n }\n } else {\n // No node provided, always trigger\n top.options.onOutsidePointer?.(e);\n }\n }\n\n return {\n register,\n layers,\n handleEscape,\n handleOutsidePointer,\n };\n}\n\n/**\n * USAGE EXAMPLE:\n *\n * const layerManager = createLayer();\n *\n * function Modal({ onClose }) {\n * const modalRef = ref<HTMLDivElement>();\n *\n * const layer = layerManager.register({\n * node: modalRef.current,\n * onEscape: onClose,\n * onOutsidePointer: onClose,\n * });\n *\n * onUnmount(() => layer.unregister());\n *\n * return (\n * <div ref={modalRef}>\n * <h1>Modal</h1>\n * {layer.isTop() && <p>I am on top!</p>}\n * </div>\n * );\n * }\n */\n"],"mappings":";AAuFA,SAAgB,cAA4B;CAC1C,MAAM,QAGD,CAAC;CAEN,IAAI,SAAS;CAEb,SAAS,SAAS,SAA8B;EAC9C,MAAM,KAAK;EACX,MAAM,QAAQ;GAAE;GAAI;EAAQ;EAC5B,MAAM,KAAK,KAAK;EAEhB,SAAS,QAAiB;GACxB,OAAO,MAAM,MAAM,SAAS,EAAE,EAAE,OAAO;EACzC;EAEA,SAAS,aAAmB;GAC1B,MAAM,QAAQ,MAAM,WAAW,MAAM,EAAE,OAAO,EAAE;GAChD,IAAI,UAAU,IACZ,MAAM,OAAO,OAAO,CAAC;EAEzB;EAEA,OAAO;GACL;GACA;GACA;EACF;CACF;CAEA,SAAS,SAA+B;EACtC,OAAO,MAAM,KAAK,WAAW;GAC3B,IAAI,MAAM;GACV,aAAa,MAAM,MAAM,SAAS,EAAE,EAAE,OAAO,MAAM;GACnD,kBAAkB;IAChB,MAAM,QAAQ,MAAM,WAAW,MAAM,EAAE,OAAO,MAAM,EAAE;IACtD,IAAI,UAAU,IACZ,MAAM,OAAO,OAAO,CAAC;GAEzB;EACF,EAAE;CACJ;CAEA,SAAS,eAAqB;EAC5B,MAAM,MAAM,MAAM,MAAM,SAAS;EACjC,IAAI,KACF,IAAI,QAAQ,WAAW;CAE3B;CAEA,SAAS,qBAAqB,GAAuB;EACnD,MAAM,MAAM,MAAM,MAAM,SAAS;EACjC,IAAI,CAAC,KAAK;EAEV,MAAM,OAAO,IAAI,QAAQ;EACzB,IAAI,QAAQ,EAAE,kBAAkB,MAE9B;OAAI,CAAC,KAAK,SAAS,EAAE,MAAM,GACzB,IAAI,QAAQ,mBAAmB,CAAC;EAClC,OAGA,IAAI,QAAQ,mBAAmB,CAAC;CAEpC;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout.d.ts","names":[],"sources":["../../../src/foundations/structures/layout.tsx"],"mappings":";;;;;AA0BA;;;;;;;;;;AAC2C;AAG3C;;;;;;;;;;KAJY,eAAA,gBACV,KAAA,EAAO,CAAA;EAAM,QAAA,GAAW,eAAe;AAAA;AAAA,iBAGzB,MAAA,aAAmB,MAAA,EAAQ,eAAA,CAAgB,CAAA,KACjD,QAAA,GAAW,eAAA,EAAiB,KAAA,GAAQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"layout.js","names":[],"sources":["../../../src/foundations/structures/layout.tsx"],"sourcesContent":["import type { RenderableChild } from '../../common/vnode';\n\n/**\n * Layout helper.\n *\n * A layout is just a normal component that wraps children.\n * Persistence and reuse are handled by the runtime via component identity.\n *\n * This helper exists purely for readability and convention.\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Return Type is Opaque (unknown)\n * Layout components return `unknown` to remain runtime-agnostic.\n * The runtime owns concrete JSX element types.\n *\n * 2. Children Positioning\n * Layout receives children as first argument (router-friendly).\n * Props come second. This matches route layout conventions where\n * children represent the nested route content.\n *\n * 3. Props Spreading\n * Props are spread into the layout component. This is intentional\n * and deterministic — no merging or composition.\n */\n\nexport type LayoutComponent<P = object> = (\n props: P & { children?: RenderableChild }\n) => unknown;\n\nexport function layout<P = object>(Layout: LayoutComponent<P>) {\n return (children?: RenderableChild, props?: P) => {\n const mergedProps = { ...props, children } as P & {\n children?: RenderableChild;\n };\n return Layout(mergedProps);\n };\n}\n"],"mappings":";AA8BA,SAAgB,OAAmB,QAA4B;CAC7D,QAAQ,UAA4B,UAAc;EAIhD,OAAO,OAAO;GAHQ,GAAG;GAAO;EAGlB,CAAW;CAC3B;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal.d.ts","names":[],"sources":["../../../src/foundations/structures/portal.tsx"],"mappings":";;;;UAoCiB,MAAA,WAAiB,eAAA,GAAkB,eAAA;;;EASxB;EAJ1B,MAAA,CAAO,KAAA;IAAS,QAAA,GAAW,CAAA;EAAA;AAAA;AAAA,UAGZ,WAAA;EACf,QAAA,GAAW,eAAe;AAAA;AAAA,iBA+BZ,YAAA,WACJ,eAAA,GAAkB,eAAA,KACzB,MAAA,CAAO,CAAA;AAAA,iBAyDI,mBAAA;AAAA,iBAMA,yBAAA,CAA0B,KAAoB;AAAA,iBAsI9C,6BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,cAkBhB,aAAA,EAAe,MAAM,CAAC,eAAA;AAAA,iBAkBnB,MAAA,CAAO,KAAkB,EAAX,WAAW"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"portal.js","names":[],"sources":["../../../src/foundations/structures/portal.tsx"],"sourcesContent":["/**\n * Portal / Host primitive.\n *\n * Foundations remain runtime-agnostic: a portal is an explicit read/write slot.\n * Scheduling and attachment are owned by the runtime when `createPortalSlot`\n * exists; otherwise this falls back to a local slot (deterministic, but does\n * not schedule updates).\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Local Mutable State\n * Foundations may use local mutable state ONLY to model deterministic slots,\n * never to coordinate timing, effects, or ordering. The fallback mode uses\n * closure-local `mounted` and `value` variables which are non-escaping and\n * deterministic.\n *\n * 2. Return Type Philosophy\n * Portal call signatures return `unknown` (intentionally opaque). The runtime\n * owns the concrete type. This prevents foundations from assuming JSX.Element\n * or DOM node types, maintaining runtime-agnostic portability.\n */\n\nimport {\n markReactivePropsDirtySource,\n markReadableDerivedSubscribersDirty,\n notifyReadableReaders,\n recordReadableRead,\n type ReadableSource,\n} from '../../runtime/readable';\nimport {\n getCurrentComponentInstance,\n getCurrentPortalScope,\n type ComponentInstance,\n} from '../../runtime/component';\nimport type { RenderableChild } from '../../common/vnode';\n\nexport interface Portal<T extends RenderableChild = RenderableChild> {\n /** Mount point — rendered exactly once */\n (): unknown;\n\n /** Render content into the portal */\n render(props: { children?: T }): unknown;\n}\n\nexport interface PortalProps {\n children?: RenderableChild;\n}\n\nfunction createPortalSlot<T>(): {\n read(): unknown;\n write(value: T | undefined): void;\n} {\n let currentValue: T | undefined;\n\n const source = (() => {\n recordReadableRead(source);\n return currentValue;\n }) as ReadableSource<T | undefined>;\n\n return {\n read() {\n return source();\n },\n write(value: T | undefined) {\n if (Object.is(currentValue, value)) {\n return;\n }\n\n currentValue = value;\n markReadableDerivedSubscribersDirty(source);\n markReactivePropsDirtySource(source);\n notifyReadableReaders(source);\n },\n };\n}\n\nexport function definePortal<\n T extends RenderableChild = RenderableChild,\n>(): Portal<T> {\n // Using `typeof createPortalSlot` is safe even if the identifier is not\n // defined at runtime (it returns 'undefined' rather than throwing).\n if (typeof createPortalSlot === 'function') {\n const slot = createPortalSlot<T>();\n\n function PortalHost() {\n return slot.read();\n }\n\n PortalHost.render = function PortalRender(props: { children?: T }) {\n slot.write(props.children);\n return null;\n };\n\n return PortalHost as Portal<T>;\n }\n\n // Deterministic local fallback (SSR/tests). No runtime scheduling.\n // Writes are accepted only after the host has rendered at least once.\n //\n // CRITICAL BEHAVIOR:\n // - Writes update local state but do NOT trigger re-renders\n // - The portal host will reflect changes only when the component tree\n // re-renders for other reasons (e.g., parent state change)\n // - This is safe for SSR and tests where rendering is synchronous\n // and externally controlled\n // - In runtime mode, createPortalSlot handles scheduling automatically\n let mounted = false;\n let value: T | undefined;\n\n function PortalHostFallback() {\n mounted = true;\n return value as unknown;\n }\n\n PortalHostFallback.render = function PortalRenderFallback(props: {\n children?: T;\n }) {\n if (!mounted) return null;\n value = props.children;\n return null;\n };\n\n return PortalHostFallback as Portal<T>;\n}\n\ntype DefaultPortalState = {\n portal: Portal<RenderableChild>;\n owner: ComponentInstance | null;\n cleanupOwners: WeakSet<ComponentInstance>;\n};\n\nlet _defaultPortalStates = new Map<object, DefaultPortalState>();\nlet _hasPendingDefaultPortalValue = false;\nlet _pendingDefaultPortalValue: RenderableChild | undefined = undefined;\n\nexport function _resetDefaultPortal(): void {\n _defaultPortalStates = new Map<object, DefaultPortalState>();\n _hasPendingDefaultPortalValue = false;\n _pendingDefaultPortalValue = undefined;\n}\n\nexport function disposeDefaultPortalScope(scope: object | null): void {\n if (!scope) {\n return;\n }\n\n const state = _defaultPortalStates.get(scope);\n if (state) {\n state.portal.render({ children: undefined });\n }\n\n _defaultPortalStates.delete(scope);\n}\n\nfunction isComponentPortalScope(scope: object): scope is ComponentInstance {\n return Array.isArray((scope as ComponentInstance).cleanupFns);\n}\n\nfunction isStaleDefaultPortalScope(scope: object): boolean {\n if (!isComponentPortalScope(scope)) {\n return false;\n }\n\n if (scope.target && scope.target.isConnected === false) {\n return true;\n }\n\n return scope.mounted === false;\n}\n\nfunction pruneStaleDefaultPortalScopes(): void {\n if (_defaultPortalStates.size === 0) {\n return;\n }\n\n for (const scope of Array.from(_defaultPortalStates.keys())) {\n if (isStaleDefaultPortalScope(scope)) {\n disposeDefaultPortalScope(scope);\n }\n }\n}\n\nfunction getSingleDefaultPortalScope(): object | null {\n pruneStaleDefaultPortalScopes();\n\n if (_defaultPortalStates.size !== 1) {\n return null;\n }\n\n return _defaultPortalStates.keys().next().value ?? null;\n}\n\nfunction getDefaultPortalState(scope: object): DefaultPortalState {\n let state = _defaultPortalStates.get(scope);\n if (!state) {\n state = {\n portal: definePortal<RenderableChild>(),\n owner: null,\n cleanupOwners: new WeakSet<ComponentInstance>(),\n };\n _defaultPortalStates.set(scope, state);\n }\n return state;\n}\n\nfunction resolveDefaultPortalScope(\n owner: ComponentInstance | null\n): object | null {\n return (\n owner?.portalScope ??\n getCurrentPortalScope() ??\n getSingleDefaultPortalScope()\n );\n}\n\nfunction writeDefaultPortal(\n props: PortalProps,\n owner: ComponentInstance | null\n): void {\n const scope = resolveDefaultPortalScope(owner);\n if (!scope) {\n if (_defaultPortalStates.size !== 0) {\n return;\n }\n\n _hasPendingDefaultPortalValue = true;\n _pendingDefaultPortalValue = props.children;\n return;\n }\n\n const state = getDefaultPortalState(scope);\n _hasPendingDefaultPortalValue = false;\n _pendingDefaultPortalValue = undefined;\n state.portal.render(props);\n state.owner = owner;\n}\n\nfunction applyPendingDefaultPortalValue(scope: object): void {\n if (!_hasPendingDefaultPortalValue) {\n return;\n }\n\n const state = getDefaultPortalState(scope);\n state.portal.render({ children: _pendingDefaultPortalValue });\n state.owner = null;\n _hasPendingDefaultPortalValue = false;\n _pendingDefaultPortalValue = undefined;\n}\n\nfunction registerDefaultPortalOwner(owner: ComponentInstance): void {\n const scope = resolveDefaultPortalScope(owner);\n if (!scope) {\n return;\n }\n\n const state = getDefaultPortalState(scope);\n if (state.cleanupOwners.has(owner)) {\n return;\n }\n\n state.cleanupOwners.add(owner);\n owner.cleanupFns.push(() => {\n const currentState = _defaultPortalStates.get(scope);\n if (!currentState) {\n return;\n }\n\n if (currentState.owner === owner) {\n currentState.portal.render({ children: undefined });\n currentState.owner = null;\n }\n currentState.cleanupOwners.delete(owner);\n });\n}\n\nexport function clearDefaultPortalForInstance(\n instance: ComponentInstance\n): void {\n const scope = instance.portalScope;\n if (!scope) {\n return;\n }\n\n const state = _defaultPortalStates.get(scope);\n if (!state) {\n return;\n }\n\n _hasPendingDefaultPortalValue = false;\n _pendingDefaultPortalValue = undefined;\n state.portal.render({ children: undefined });\n state.owner = null;\n}\n\nexport const DefaultPortal: Portal<RenderableChild> = (() => {\n function Host() {\n const scope = resolveDefaultPortalScope(getCurrentComponentInstance());\n if (!scope) {\n return null;\n }\n\n applyPendingDefaultPortalValue(scope);\n const v = getDefaultPortalState(scope).portal();\n return v === undefined ? null : v;\n }\n Host.render = function Render(props: { children?: RenderableChild }) {\n writeDefaultPortal(props, getCurrentComponentInstance());\n return null;\n };\n return Host as Portal<RenderableChild>;\n})();\n\nexport function Portal(props: PortalProps): null {\n const owner = getCurrentComponentInstance();\n if (owner) {\n registerDefaultPortalOwner(owner);\n }\n writeDefaultPortal(props, owner);\n return null;\n}\n\n/**\n * NOTE:\n * createPortalSlot is a runtime primitive.\n * It owns scheduling, consistency, and SSR behavior.\n */\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,SAAS,mBAGP;CACA,IAAI;CAEJ,MAAM,gBAAgB;EACpB,mBAAmB,MAAM;EACzB,OAAO;CACT;CAEA,OAAO;EACL,OAAO;GACL,OAAO,OAAO;EAChB;EACA,MAAM,OAAsB;GAC1B,IAAI,OAAO,GAAG,cAAc,KAAK,GAC/B;GAGF,eAAe;GACf,oCAAoC,MAAM;GAC1C,6BAA6B,MAAM;GACnC,sBAAsB,MAAM;EAC9B;CACF;AACF;AAEA,SAAgB,eAED;CAGb,IAAI,OAAO,qBAAqB,YAAY;EAC1C,MAAM,OAAO,iBAAoB;EAEjC,SAAS,aAAa;GACpB,OAAO,KAAK,KAAK;EACnB;EAEA,WAAW,SAAS,SAAS,aAAa,OAAyB;GACjE,KAAK,MAAM,MAAM,QAAQ;GACzB,OAAO;EACT;EAEA,OAAO;CACT;CAYA,IAAI,UAAU;CACd,IAAI;CAEJ,SAAS,qBAAqB;EAC5B,UAAU;EACV,OAAO;CACT;CAEA,mBAAmB,SAAS,SAAS,qBAAqB,OAEvD;EACD,IAAI,CAAC,SAAS,OAAO;EACrB,QAAQ,MAAM;EACd,OAAO;CACT;CAEA,OAAO;AACT;AAQA,IAAI,uCAAuB,IAAI,IAAgC;AAC/D,IAAI,gCAAgC;AACpC,IAAI,6BAA0D;AAQ9D,SAAgB,0BAA0B,OAA4B;CACpE,IAAI,CAAC,OACH;CAGF,MAAM,QAAQ,qBAAqB,IAAI,KAAK;CAC5C,IAAI,OACF,MAAM,OAAO,OAAO,EAAE,UAAU,OAAU,CAAC;CAG7C,qBAAqB,OAAO,KAAK;AACnC;AAEA,SAAS,uBAAuB,OAA2C;CACzE,OAAO,MAAM,QAAS,MAA4B,UAAU;AAC9D;AAEA,SAAS,0BAA0B,OAAwB;CACzD,IAAI,CAAC,uBAAuB,KAAK,GAC/B,OAAO;CAGT,IAAI,MAAM,UAAU,MAAM,OAAO,gBAAgB,OAC/C,OAAO;CAGT,OAAO,MAAM,YAAY;AAC3B;AAEA,SAAS,gCAAsC;CAC7C,IAAI,qBAAqB,SAAS,GAChC;CAGF,KAAK,MAAM,SAAS,MAAM,KAAK,qBAAqB,KAAK,CAAC,GACxD,IAAI,0BAA0B,KAAK,GACjC,0BAA0B,KAAK;AAGrC;AAEA,SAAS,8BAA6C;CACpD,8BAA8B;CAE9B,IAAI,qBAAqB,SAAS,GAChC,OAAO;CAGT,OAAO,qBAAqB,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS;AACrD;AAEA,SAAS,sBAAsB,OAAmC;CAChE,IAAI,QAAQ,qBAAqB,IAAI,KAAK;CAC1C,IAAI,CAAC,OAAO;EACV,QAAQ;GACN,QAAQ,aAA8B;GACtC,OAAO;GACP,+BAAe,IAAI,QAA2B;EAChD;EACA,qBAAqB,IAAI,OAAO,KAAK;CACvC;CACA,OAAO;AACT;AAEA,SAAS,0BACP,OACe;CACf,OACE,OAAO,eACP,sBAAsB,KACtB,4BAA4B;AAEhC;AAEA,SAAS,mBACP,OACA,OACM;CACN,MAAM,QAAQ,0BAA0B,KAAK;CAC7C,IAAI,CAAC,OAAO;EACV,IAAI,qBAAqB,SAAS,GAChC;EAGF,gCAAgC;EAChC,6BAA6B,MAAM;EACnC;CACF;CAEA,MAAM,QAAQ,sBAAsB,KAAK;CACzC,gCAAgC;CAChC,6BAA6B;CAC7B,MAAM,OAAO,OAAO,KAAK;CACzB,MAAM,QAAQ;AAChB;AAEA,SAAS,+BAA+B,OAAqB;CAC3D,IAAI,CAAC,+BACH;CAGF,MAAM,QAAQ,sBAAsB,KAAK;CACzC,MAAM,OAAO,OAAO,EAAE,UAAU,2BAA2B,CAAC;CAC5D,MAAM,QAAQ;CACd,gCAAgC;CAChC,6BAA6B;AAC/B;AAEA,SAAS,2BAA2B,OAAgC;CAClE,MAAM,QAAQ,0BAA0B,KAAK;CAC7C,IAAI,CAAC,OACH;CAGF,MAAM,QAAQ,sBAAsB,KAAK;CACzC,IAAI,MAAM,cAAc,IAAI,KAAK,GAC/B;CAGF,MAAM,cAAc,IAAI,KAAK;CAC7B,MAAM,WAAW,WAAW;EAC1B,MAAM,eAAe,qBAAqB,IAAI,KAAK;EACnD,IAAI,CAAC,cACH;EAGF,IAAI,aAAa,UAAU,OAAO;GAChC,aAAa,OAAO,OAAO,EAAE,UAAU,OAAU,CAAC;GAClD,aAAa,QAAQ;EACvB;EACA,aAAa,cAAc,OAAO,KAAK;CACzC,CAAC;AACH;AAEA,SAAgB,8BACd,UACM;CACN,MAAM,QAAQ,SAAS;CACvB,IAAI,CAAC,OACH;CAGF,MAAM,QAAQ,qBAAqB,IAAI,KAAK;CAC5C,IAAI,CAAC,OACH;CAGF,gCAAgC;CAChC,6BAA6B;CAC7B,MAAM,OAAO,OAAO,EAAE,UAAU,OAAU,CAAC;CAC3C,MAAM,QAAQ;AAChB;AAEA,MAAa,uBAAgD;CAC3D,SAAS,OAAO;EACd,MAAM,QAAQ,0BAA0B,4BAA4B,CAAC;EACrE,IAAI,CAAC,OACH,OAAO;EAGT,+BAA+B,KAAK;EACpC,MAAM,IAAI,sBAAsB,KAAK,CAAC,CAAC,OAAO;EAC9C,OAAO,MAAM,SAAY,OAAO;CAClC;CACA,KAAK,SAAS,SAAS,OAAO,OAAuC;EACnE,mBAAmB,OAAO,4BAA4B,CAAC;EACvD,OAAO;CACT;CACA,OAAO;AACT,EAAA,CAAG;AAEH,SAAgB,OAAO,OAA0B;CAC/C,MAAM,QAAQ,4BAA4B;CAC1C,IAAI,OACF,2BAA2B,KAAK;CAElC,mBAAmB,OAAO,KAAK;CAC/B,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presence.d.ts","names":[],"sources":["../../../src/foundations/structures/presence.ts"],"mappings":";;;UAIiB,aAAA;EACf,OAAA;EACA,QAAA,GAAW,eAAe;AAAA;;;;;;;;AAAA;AA0B5B;;;;;;;;;;;;;;;iBAAgB,QAAA;EACd,OAAA;EACA;AAAA,GACC,aAAA,GAAgB,UAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presence.js","names":[],"sources":["../../../src/foundations/structures/presence.ts"],"sourcesContent":["import { ELEMENT_TYPE, Fragment } from '../../jsx';\nimport type { JSXElement } from '../../jsx';\nimport type { RenderableChild } from '../../common/vnode';\n\nexport interface PresenceProps {\n present: boolean | (() => boolean);\n children?: RenderableChild;\n}\n\n/**\n * Presence\n *\n * Structural policy primitive for conditional mount/unmount.\n * - No timers\n * - No animation coupling\n * - No DOM side-effects\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Present as Function\n * Accepts boolean OR function to support lazy evaluation patterns.\n * Function is called once per render. Use boolean form for static values.\n *\n * 2. Children Type\n * Presence forwards normal renderable child content only.\n * Imperative DOM nodes are not part of the public contract.\n *\n * 3. Immediate Mount/Unmount\n * No exit animations or transitions. When `present` becomes false,\n * children are removed immediately. Animation must be layered above\n * this primitive.\n */\nexport function Presence({\n present,\n children,\n}: PresenceProps): JSXElement | null {\n const isPresent =\n typeof present === 'function' ? present() : Boolean(present);\n if (!isPresent) return null;\n\n const element: JSXElement = {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children },\n key: null,\n };\n return element;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAgB,SAAS,EACvB,SACA,YACmC;CAGnC,IAAI,EADF,OAAO,YAAY,aAAa,QAAQ,IAAI,QAAQ,OAAO,IAC7C,OAAO;CAQvB,OAAO;EALL,UAAU;EACV,MAAM;EACN,OAAO,EAAE,SAAS;EAClB,KAAK;CAEA;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slot.d.ts","names":[],"sources":["../../../src/foundations/structures/slot.tsx"],"mappings":";;;KAIY,SAAA;EAEN,OAAA;EACA,QAAA,EAAU,UAAA;EAAA,CACT,GAAA;AAAA;EAGD,OAAA;EACA,QAAA,GAAW,eAAe;AAAA;;;;;;;;AAAA;AAuBhC;;;;;;;;AAAkD;;;;iBAAlC,IAAA,CAAK,KAAA,EAAO,SAAA,GAAY,UAAU"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slot.js","names":[],"sources":["../../../src/foundations/structures/slot.tsx"],"sourcesContent":["import { Fragment, cloneElement, isElement, ELEMENT_TYPE } from '../../jsx';\nimport type { JSXElement } from '../../jsx';\nimport type { RenderableChild } from '../../common/vnode';\n\nexport type SlotProps =\n | {\n asChild: true;\n children: JSXElement;\n [key: string]: unknown;\n }\n | {\n asChild?: false;\n children?: RenderableChild;\n };\n\n/**\n * Slot\n *\n * Structural primitive for prop forwarding patterns.\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. asChild Pattern\n * When asChild=true, merges props into the single child element.\n * Child must be a valid JSXElement; non-element children return null.\n * **Slot props override child props** (injection pattern).\n *\n * 2. Fallback Behavior\n * When asChild=false, returns a Fragment (structural no-op).\n * No DOM element is introduced.\n *\n * 3. Type Safety\n * asChild=true requires exactly one JSXElement child (enforced by type).\n * Runtime validates with isElement() check.\n */\nexport function Slot(props: SlotProps): JSXElement | null {\n if (props.asChild) {\n const { children, asChild: _asChild, ...rest } = props;\n\n if (isElement(children)) {\n return cloneElement(children, rest);\n }\n return null;\n }\n\n // Structural no-op: Slot does not introduce DOM\n // Return a vnode object for the fragment with the internal element marker.\n const element: JSXElement = {\n $$typeof: ELEMENT_TYPE,\n type: Fragment,\n props: { children: props.children },\n key: null,\n };\n return element;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmCA,SAAgB,KAAK,OAAqC;CACxD,IAAI,MAAM,SAAS;EACjB,MAAM,EAAE,UAAU,SAAS,UAAU,GAAG,SAAS;EAEjD,IAAI,UAAU,QAAQ,GACpB,OAAO,aAAa,UAAU,IAAI;EAEpC,OAAO;CACT;CAUA,OAAO;EALL,UAAU;EACV,MAAM;EACN,OAAO,EAAE,UAAU,MAAM,SAAS;EAClC,KAAK;CAEA;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"aria.d.ts","names":[],"sources":["../../../src/foundations/utilities/aria.ts"],"mappings":";;AAIA;;iBAAgB,YAAA,CAAa,QAAA;EAAuB,eAAe;AAAA;AAAA,iBAInD,YAAA,CAAa,QAAA;EAC3B,eAAe;AAAA;AAAA,iBAOD,YAAA,CAAa,QAAA;EAC3B,eAAe;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"aria.js","names":[],"sources":["../../../src/foundations/utilities/aria.ts"],"sourcesContent":["/**\n * Tiny aria helpers\n */\n\nexport function ariaDisabled(disabled?: boolean): { 'aria-disabled'?: 'true' } {\n return disabled ? { 'aria-disabled': 'true' } : {};\n}\n\nexport function ariaExpanded(expanded?: boolean): {\n 'aria-expanded'?: 'true' | 'false';\n} {\n return expanded === undefined\n ? {}\n : { 'aria-expanded': String(expanded) as 'true' | 'false' };\n}\n\nexport function ariaSelected(selected?: boolean): {\n 'aria-selected'?: 'true' | 'false';\n} {\n return selected === undefined\n ? {}\n : { 'aria-selected': String(selected) as 'true' | 'false' };\n}\n"],"mappings":";;;;AAIA,SAAgB,aAAa,UAAkD;CAC7E,OAAO,WAAW,EAAE,iBAAiB,OAAO,IAAI,CAAC;AACnD;AAEA,SAAgB,aAAa,UAE3B;CACA,OAAO,aAAa,SAChB,CAAC,IACD,EAAE,iBAAiB,OAAO,QAAQ,EAAsB;AAC9D;AAEA,SAAgB,aAAa,UAE3B;CACA,OAAO,aAAa,SAChB,CAAC,IACD,EAAE,iBAAiB,OAAO,QAAQ,EAAsB;AAC9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-handlers.d.ts","names":[],"sources":["../../../src/foundations/utilities/compose-handlers.ts"],"mappings":";;AA0BA;;;;AAKuB;AAcvB;;;;;;;;;;;;;;;;;;;UAnBiB,sBAAA;EAuBH;AAAA;;;EAlBZ,qBAAqB;AAAA;AAAA,iBAcP,eAAA,+BACd,KAAA,OAAY,IAAA,EAAM,CAAA,WAClB,MAAA,OAAa,IAAA,EAAM,CAAA,WACnB,OAAA,GAAU,sBAAA,OACL,IAAA,EAAM,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-handlers.js","names":[],"sources":["../../../src/foundations/utilities/compose-handlers.ts"],"sourcesContent":["/**\n * composeHandlers\n *\n * Compose two event handlers into one. The first handler runs, and unless it\n * calls `event.preventDefault()` (or sets `defaultPrevented`), the second\n * handler runs. This prevents accidental clobbering of child handlers when\n * injecting props.\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Execution Order\n * First handler runs before second (injected before base).\n * This allows injected handlers to prevent default behavior.\n *\n * 2. Default Prevention Check\n * By default, checks `defaultPrevented` on first argument.\n * Can be disabled via options.checkDefaultPrevented = false.\n *\n * 3. Undefined Handler Support\n * Undefined handlers are skipped (no-op). This simplifies usage\n * where handlers are optional.\n *\n * 4. Type Safety\n * Args are readonly to prevent mutation. Return type matches input.\n */\n\nexport interface ComposeHandlersOptions {\n /**\n * When true (default), do not run the second handler if the first prevented default.\n * When false, always run both handlers.\n */\n checkDefaultPrevented?: boolean;\n}\n\nfunction isDefaultPrevented(\n value: unknown\n): value is { defaultPrevented: true } {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'defaultPrevented' in value &&\n (value as { defaultPrevented?: boolean }).defaultPrevented === true\n );\n}\n\nexport function composeHandlers<A extends readonly unknown[]>(\n first?: (...args: A) => void,\n second?: (...args: A) => void,\n options?: ComposeHandlersOptions\n): (...args: A) => void {\n // Fast path: if neither handler exists, return stable no-op\n if (!first && !second) {\n return noop as (...args: A) => void;\n }\n\n // Fast path: if only one handler exists, return it directly\n if (!first) return second!;\n if (!second) return first;\n\n // Composition path: both handlers exist\n const checkDefaultPrevented = options?.checkDefaultPrevented !== false;\n\n return function composed(...args: A) {\n first(...args);\n\n if (checkDefaultPrevented && isDefaultPrevented(args[0])) {\n return;\n }\n\n second(...args);\n } as (...args: A) => void;\n}\n\n// Stable no-op for fast path\nfunction noop() {}\n"],"mappings":";AAkCA,SAAS,mBACP,OACqC;CACrC,OACE,OAAO,UAAU,YACjB,UAAU,QACV,sBAAsB,SACrB,MAAyC,qBAAqB;AAEnE;AAEA,SAAgB,gBACd,OACA,QACA,SACsB;CAEtB,IAAI,CAAC,SAAS,CAAC,QACb,OAAO;CAIT,IAAI,CAAC,OAAO,OAAO;CACnB,IAAI,CAAC,QAAQ,OAAO;CAGpB,MAAM,wBAAwB,SAAS,0BAA0B;CAEjE,OAAO,SAAS,SAAS,GAAG,MAAS;EACnC,MAAM,GAAG,IAAI;EAEb,IAAI,yBAAyB,mBAAmB,KAAK,EAAE,GACrD;EAGF,OAAO,GAAG,IAAI;CAChB;AACF;AAGA,SAAS,OAAO,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-ref.d.ts","names":[],"sources":["../../../src/foundations/utilities/compose-ref.ts"],"mappings":";;AAmBA;;;;;;;;;;AAEgB;AAIhB;;;;;;KANY,GAAA,QACN,KAAA,EAAO,CAAA;EACP,OAAA,EAAS,CAAC;AAAA;AAAA,iBAIA,MAAA,IAAU,GAAA,EAAK,GAAA,CAAI,CAAA,GAAI,KAAA,EAAO,CAAA;AAAA,iBAY9B,WAAA,OACX,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,CAAA,MACjB,KAAA,EAAO,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compose-ref.js","names":[],"sources":["../../../src/foundations/utilities/compose-ref.ts"],"sourcesContent":["/**\n * Ref composition utilities\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Ref Types Supported\n * - Callback refs: (value: T | null) => void\n * - Object refs: { current: T | null }\n * - null/undefined (no-op)\n *\n * 2. Write Failure Handling\n * setRef catches write failures (readonly refs) and ignores them.\n * This is intentional — refs may be readonly in some contexts.\n *\n * 3. Composition Order\n * composeRefs applies refs in array order (left to right).\n * All refs are called even if one fails.\n */\n\nexport type Ref<T> =\n | ((value: T | null) => void)\n | { current: T | null }\n | null\n | undefined;\n\nexport function setRef<T>(ref: Ref<T>, value: T | null): void {\n if (!ref) return;\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n // Fast path: use Object.isExtensible check instead of try/catch for better performance\n if (Object.isExtensible(ref)) {\n (ref as { current: T | null }).current = value;\n }\n}\n\nexport function composeRefs<T>(\n ...refs: Array<Ref<T>>\n): (value: T | null) => void {\n return (value: T | null) => {\n for (const ref of refs) setRef(ref, value);\n };\n}\n"],"mappings":";AAyBA,SAAgB,OAAU,KAAa,OAAuB;CAC5D,IAAI,CAAC,KAAK;CACV,IAAI,OAAO,QAAQ,YAAY;EAC7B,IAAI,KAAK;EACT;CACF;CAEA,IAAI,OAAO,aAAa,GAAG,GACzB,IAA+B,UAAU;AAE7C;AAEA,SAAgB,YACd,GAAG,MACwB;CAC3B,QAAQ,UAAoB;EAC1B,KAAK,MAAM,OAAO,MAAM,OAAO,KAAK,KAAK;CAC3C;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-types.d.ts","names":[],"sources":["../../../src/foundations/utilities/event-types.ts"],"mappings":";UAAiB,kBAAA;EACf,gBAAA;EACA,cAAc;AAAA;AAAA,UAGC,oBAAA;EACf,eAAe;AAAA;AAAA,UAGA,iBAAA,SACP,kBAAA,EAAoB,oBAAoB;EAChD,GAAA;AAAA;AAAA,UAGe,gBAAA,SACP,kBAAA,EAAoB,oBAAoB;EAChD,MAAA;AAAA;AAAA,UAGe,cAAA,SACP,kBAAA,EAAoB,oBAAoB;EAChD,aAAA;AAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-props.d.ts","names":[],"sources":["../../../src/foundations/utilities/merge-props.ts"],"mappings":";iBAiCgB,UAAA,iDACd,IAAA,EAAM,KAAA,EACN,QAAA,EAAU,SAAA,GACT,SAAA,GAAY,KAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-props.js","names":[],"sources":["../../../src/foundations/utilities/merge-props.ts"],"sourcesContent":["/**\n * mergeProps\n *\n * Deterministic props merging.\n * - For non-handlers: `base` overwrites `injected`.\n * - For handlers present in both: handlers are composed with `injected` running\n * first; it may call `preventDefault()` to suppress the `base` handler.\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. Merge Strategy\n * Base props overwrite injected props (base wins).\n * Exception: Event handlers are composed, not overwritten.\n *\n * 2. Event Handler Detection\n * Keys starting with \"on\" are treated as event handlers.\n * This matches JSX conventions.\n *\n * 3. Handler Composition Order\n * Injected handler runs first, base handler second.\n * This allows injected handlers to prevent default.\n *\n * 4. Return Type\n * Returns intersection type (TInjected & TBase) for type safety.\n */\nimport { composeHandlers } from './compose-handlers';\n\ntype Fn = (...args: readonly unknown[]) => void;\n\nfunction isEventHandlerKey(key: string): boolean {\n return key.startsWith('on');\n}\n\nexport function mergeProps<TBase extends object, TInjected extends object>(\n base: TBase,\n injected: TInjected\n): TInjected & TBase {\n // Fast path: if base is empty, return injected as-is\n const baseKeys = Object.keys(base);\n if (baseKeys.length === 0) {\n return injected as TInjected & TBase;\n }\n\n const out = { ...(injected as object) } as TInjected & TBase;\n\n for (const key of baseKeys as Array<Extract<keyof TBase, string>>) {\n const baseValue = (base as Record<string, unknown>)[key];\n const injectedValue = (injected as Record<string, unknown>)[key];\n\n if (\n isEventHandlerKey(key) &&\n typeof baseValue === 'function' &&\n typeof injectedValue === 'function'\n ) {\n // Invariant: injected runs first; it may call preventDefault() to\n // suppress base behaviour.\n (out as Record<string, unknown>)[key] = composeHandlers(\n injectedValue as unknown as Fn,\n baseValue as unknown as Fn\n );\n continue;\n }\n\n (out as Record<string, unknown>)[key] = baseValue;\n }\n\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAS,kBAAkB,KAAsB;CAC/C,OAAO,IAAI,WAAW,IAAI;AAC5B;AAEA,SAAgB,WACd,MACA,UACmB;CAEnB,MAAM,WAAW,OAAO,KAAK,IAAI;CACjC,IAAI,SAAS,WAAW,GACtB,OAAO;CAGT,MAAM,MAAM,EAAE,GAAI,SAAoB;CAEtC,KAAK,MAAM,OAAO,UAAiD;EACjE,MAAM,YAAa,KAAiC;EACpD,MAAM,gBAAiB,SAAqC;EAE5D,IACE,kBAAkB,GAAG,KACrB,OAAO,cAAc,cACrB,OAAO,kBAAkB,YACzB;GAGA,IAAiC,OAAO,gBACtC,eACA,SACF;GACA;EACF;EAEA,IAAiC,OAAO;CAC1C;CAEA,OAAO;AACT"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-id.d.ts","names":[],"sources":["../../../src/foundations/utilities/use-id.ts"],"mappings":";UAAiB,eAAA;EAAA;EAEf,MAAA;;EAEA,EAAE;AAAA;AAwBJ;;;;AAAiD;;;;;;;;;;;;;;;;;AAAjD,iBAAgB,QAAA,CAAS,OAAwB,EAAf,eAAe"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-id.js","names":[],"sources":["../../../src/foundations/utilities/use-id.ts"],"sourcesContent":["export interface FormatIdOptions {\n /** Defaults to 'askr' */\n prefix?: string;\n /** Stable, caller-provided identity */\n id: string | number;\n}\n\n/**\n * formatId\n *\n * Formats a stable ID from a caller-provided identity.\n * - Pure and deterministic (no time/randomness/global counters)\n * - SSR-safe\n *\n * POLICY DECISIONS (LOCKED):\n *\n * 1. No Auto-Generation\n * Caller must provide the `id`. No random/sequential generation.\n * This ensures determinism and SSR safety.\n *\n * 2. Format Convention\n * IDs are formatted as `{prefix}-{id}`.\n * Default prefix is \"askr\".\n *\n * 3. Type Coercion\n * Numbers are coerced to strings via String().\n * This is deterministic and consistent.\n */\nexport function formatId(options: FormatIdOptions): string {\n const prefix = options.prefix ?? 'askr';\n return `${prefix}-${String(options.id)}`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA4BA,SAAgB,SAAS,SAAkC;CAEzD,OAAO,GADQ,QAAQ,UAAU,OAChB,GAAG,OAAO,QAAQ,EAAE;AACvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fx.d.ts","names":[],"sources":["../../src/fx/fx.ts"],"mappings":";KAKY,QAAA;AAAA,iBAwCI,aAAA,CACd,EAAA,UACA,OAAA,EAAS,aAAA,EACT,OAAA;EAAY,OAAA;EAAmB,QAAA;AAAA,IAC9B,aAAa;EAAK,MAAA;EAAgB,KAAA;AAAA;AAAA,iBAsErB,aAAA,CACd,EAAA,UACA,OAAA,EAAS,aAAA,EACT,OAAA;EAAY,OAAA;EAAmB,QAAA;AAAA,IAC9B,aAAa;EAAK,MAAA;AAAA;AAAA,iBA0DL,QAAA,CACd,OAAA,EAAS,aAAA,GACR,aAAa;EAAK,MAAA;AAAA;AAAA,iBAuDL,eAAA,CAAgB,EAAA,UAAY,EAAA,eAAiB,QAAQ;AAAA,iBAuBrD,YAAA,CACd,EAAA,cACA,OAAA;EAAY,OAAA;AAAA,IACX,QAAQ;AAAA,UA0CM,YAAA;EACf,WAAA;EACA,OAAA;EACA,OAAA,IAAW,YAAA;AAAA;AAAA,iBAGG,aAAA,IACd,EAAA,QAAU,OAAA,CAAQ,CAAA,GAClB,OAAA,GAAU,YAAA;EACP,MAAA;AAAA"}