@madojs/mado 0.11.1 → 0.13.0

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 (298) hide show
  1. package/AGENTS.md +116 -32
  2. package/CHANGELOG.md +216 -1
  3. package/README.md +158 -173
  4. package/dist/src/component.d.ts +6 -3
  5. package/dist/src/component.d.ts.map +1 -0
  6. package/dist/src/component.js +163 -36
  7. package/dist/src/component.js.map +1 -1
  8. package/dist/src/context.d.ts +13 -32
  9. package/dist/src/context.d.ts.map +1 -0
  10. package/dist/src/context.js +73 -48
  11. package/dist/src/context.js.map +1 -1
  12. package/dist/src/css.d.ts +1 -0
  13. package/dist/src/css.d.ts.map +1 -0
  14. package/dist/src/css.js +34 -5
  15. package/dist/src/css.js.map +1 -1
  16. package/dist/src/devtools-hook.d.ts +14 -0
  17. package/dist/src/devtools-hook.d.ts.map +1 -0
  18. package/dist/src/devtools-hook.js +27 -0
  19. package/dist/src/devtools-hook.js.map +1 -0
  20. package/dist/src/devtools.d.ts +24 -22
  21. package/dist/src/devtools.d.ts.map +1 -0
  22. package/dist/src/devtools.js +230 -58
  23. package/dist/src/devtools.js.map +1 -1
  24. package/dist/src/diagnostics.d.ts +12 -0
  25. package/dist/src/diagnostics.d.ts.map +1 -0
  26. package/dist/src/diagnostics.js +68 -8
  27. package/dist/src/diagnostics.js.map +1 -1
  28. package/dist/src/each.d.ts +1 -5
  29. package/dist/src/each.d.ts.map +1 -0
  30. package/dist/src/each.js +0 -8
  31. package/dist/src/each.js.map +1 -1
  32. package/dist/src/forms.d.ts +27 -96
  33. package/dist/src/forms.d.ts.map +1 -0
  34. package/dist/src/forms.js +184 -394
  35. package/dist/src/forms.js.map +1 -1
  36. package/dist/src/head.d.ts +7 -6
  37. package/dist/src/head.d.ts.map +1 -0
  38. package/dist/src/head.js +8 -7
  39. package/dist/src/head.js.map +1 -1
  40. package/dist/src/html/bindings.d.ts +1 -0
  41. package/dist/src/html/bindings.d.ts.map +1 -0
  42. package/dist/src/html/bindings.js.map +1 -1
  43. package/dist/src/html/parser.d.ts +4 -5
  44. package/dist/src/html/parser.d.ts.map +1 -0
  45. package/dist/src/html/parser.js +64 -15
  46. package/dist/src/html/parser.js.map +1 -1
  47. package/dist/src/html/template-types.d.ts +1 -0
  48. package/dist/src/html/template-types.d.ts.map +1 -0
  49. package/dist/src/html/template-types.js.map +1 -1
  50. package/dist/src/html/template.d.ts +5 -1
  51. package/dist/src/html/template.d.ts.map +1 -0
  52. package/dist/src/html/template.js +102 -13
  53. package/dist/src/html/template.js.map +1 -1
  54. package/dist/src/index.d.ts +15 -12
  55. package/dist/src/index.d.ts.map +1 -0
  56. package/dist/src/index.js +18 -10
  57. package/dist/src/index.js.map +1 -1
  58. package/dist/src/json.d.ts +3 -0
  59. package/dist/src/json.d.ts.map +1 -0
  60. package/dist/src/json.js +14 -0
  61. package/dist/src/json.js.map +1 -0
  62. package/dist/src/lifecycle.d.ts +1 -0
  63. package/dist/src/lifecycle.d.ts.map +1 -0
  64. package/dist/src/lifecycle.js +3 -2
  65. package/dist/src/lifecycle.js.map +1 -1
  66. package/dist/src/page.d.ts +63 -28
  67. package/dist/src/page.d.ts.map +1 -0
  68. package/dist/src/page.js +5 -0
  69. package/dist/src/page.js.map +1 -1
  70. package/dist/src/persisted.d.ts +6 -1
  71. package/dist/src/persisted.d.ts.map +1 -0
  72. package/dist/src/persisted.js +17 -11
  73. package/dist/src/persisted.js.map +1 -1
  74. package/dist/src/resource.d.ts +2 -1
  75. package/dist/src/resource.d.ts.map +1 -0
  76. package/dist/src/resource.js +128 -50
  77. package/dist/src/resource.js.map +1 -1
  78. package/dist/src/router/base.d.ts +66 -0
  79. package/dist/src/router/base.d.ts.map +1 -0
  80. package/dist/src/router/base.js +168 -0
  81. package/dist/src/router/base.js.map +1 -0
  82. package/dist/src/router/manifest.d.ts +1 -0
  83. package/dist/src/router/manifest.d.ts.map +1 -0
  84. package/dist/src/router/manifest.js +156 -171
  85. package/dist/src/router/manifest.js.map +1 -1
  86. package/dist/src/router/match.d.ts +17 -2
  87. package/dist/src/router/match.d.ts.map +1 -0
  88. package/dist/src/router/match.js +60 -6
  89. package/dist/src/router/match.js.map +1 -1
  90. package/dist/src/router/navigation.d.ts +1 -0
  91. package/dist/src/router/navigation.d.ts.map +1 -0
  92. package/dist/src/router/navigation.js +58 -9
  93. package/dist/src/router/navigation.js.map +1 -1
  94. package/dist/src/signal.d.ts +1 -0
  95. package/dist/src/signal.d.ts.map +1 -0
  96. package/dist/src/signal.js +46 -17
  97. package/dist/src/signal.js.map +1 -1
  98. package/dist/src/static-runtime.d.ts +82 -0
  99. package/dist/src/static-runtime.d.ts.map +1 -0
  100. package/dist/src/static-runtime.js +209 -0
  101. package/dist/src/static-runtime.js.map +1 -0
  102. package/dist/src/vite/index.d.ts +32 -3
  103. package/dist/src/vite/index.d.ts.map +1 -0
  104. package/dist/src/vite/index.js +49 -17
  105. package/dist/src/vite/index.js.map +1 -1
  106. package/docs/README.md +5 -8
  107. package/docs/architecture/adr/0001-browser-static-snapshots.md +132 -0
  108. package/docs/architecture/v1-roadmap.md +19 -0
  109. package/docs/en/00-the-mado-way.md +1 -1
  110. package/docs/en/01-quickstart.md +183 -0
  111. package/docs/en/10-pages-and-components.md +279 -0
  112. package/docs/en/11-templates-and-signals.md +211 -0
  113. package/docs/en/12-routing.md +229 -0
  114. package/docs/en/13-data.md +227 -0
  115. package/docs/en/14-forms.md +91 -0
  116. package/docs/en/15-static-snapshots.md +181 -0
  117. package/docs/en/{10-app-architecture.md → 16-app-architecture.md} +56 -4
  118. package/docs/en/{13-deployment.md → 20-deployment.md} +79 -17
  119. package/docs/en/{15-error-handling.md → 21-error-handling.md} +9 -6
  120. package/docs/en/{14-testing.md → 22-testing.md} +6 -5
  121. package/docs/en/23-cookbook.md +292 -0
  122. package/docs/en/24-devtools-and-diagnostics.md +45 -0
  123. package/docs/en/{18-api-freeze-map.md → 30-api-freeze-map.md} +17 -9
  124. package/docs/en/{20-v1-stability.md → 32-v1-stability.md} +5 -5
  125. package/docs/en/33-migration-0.12-0.13.md +56 -0
  126. package/docs/en/40-llm-guide.md +774 -0
  127. package/docs/en/{06-for-backenders.md → 41-for-backenders.md} +28 -25
  128. package/docs/en/{05-why-mado.md → 42-why-mado.md} +3 -3
  129. package/docs/en/README.md +99 -27
  130. package/docs/recipes/nginx/Containerfile +26 -0
  131. package/docs/recipes/nginx/nginx.conf +42 -0
  132. package/llms.txt +263 -210
  133. package/package.json +51 -23
  134. package/scripts/clean.mjs +8 -0
  135. package/scripts/cli/generate.mjs +57 -10
  136. package/scripts/cli/help.mjs +13 -5
  137. package/scripts/cli/index.mjs +31 -7
  138. package/scripts/cli/init.mjs +19 -19
  139. package/scripts/cli/release.mjs +38 -83
  140. package/scripts/cli/run.mjs +5 -3
  141. package/scripts/logger.mjs +117 -0
  142. package/scripts/output-guard.mjs +128 -0
  143. package/scripts/preview.mjs +105 -24
  144. package/scripts/static/browser.mjs +695 -0
  145. package/scripts/static/discover.mjs +284 -0
  146. package/scripts/static/output.mjs +141 -0
  147. package/scripts/static/serialize.mjs +212 -0
  148. package/scripts/static/server.mjs +167 -0
  149. package/scripts/static.mjs +205 -0
  150. package/starters/default/README.md +57 -55
  151. package/starters/default/package.json +6 -12
  152. package/starters/default/src/app.routes.ts +20 -33
  153. package/starters/default/src/components/feature-card.component.ts +40 -0
  154. package/starters/default/src/components/live-counter.component.ts +57 -0
  155. package/starters/default/src/content/guides.ts +55 -0
  156. package/starters/default/src/main.ts +9 -13
  157. package/starters/default/src/pages/app.page.ts +41 -0
  158. package/starters/default/src/pages/guide.page.ts +40 -0
  159. package/starters/default/src/pages/home.page.ts +49 -0
  160. package/starters/default/src/pages/not-found.page.ts +18 -0
  161. package/starters/default/src/styles/document.css +39 -0
  162. package/starters/default/src/styles/reset.css +37 -0
  163. package/starters/default/src/styles/tokens.css +30 -0
  164. package/starters/default/src/styles.d.ts +3 -1
  165. package/starters/default/src/vite-env.d.ts +1 -1
  166. package/starters/default/tsconfig.node.json +13 -0
  167. package/starters/default/vite.config.ts +14 -4
  168. package/starters/modular/README.md +142 -0
  169. package/starters/modular/index.html +13 -0
  170. package/starters/modular/package.json +30 -0
  171. package/starters/modular/src/app.routes.ts +39 -0
  172. package/starters/{default → modular}/src/layouts/app-shell.layout.ts +9 -7
  173. package/starters/{default → modular}/src/layouts/auth-shell.layout.ts +3 -3
  174. package/starters/modular/src/main.ts +16 -0
  175. package/starters/{default → modular}/src/modules/auth/login.page.ts +5 -12
  176. package/starters/{default → modular}/src/modules/billing/pages/invoice-detail.page.ts +3 -4
  177. package/starters/{default → modular}/src/modules/billing/pages/invoices-list.page.ts +4 -4
  178. package/starters/{default → modular}/src/modules/home/home.page.ts +5 -7
  179. package/starters/modular/src/modules/home/not-found.page.ts +14 -0
  180. package/starters/{default → modular}/src/shared/styles/reset.css +21 -1
  181. package/starters/modular/src/styles.d.ts +1 -0
  182. package/starters/modular/src/vite-env.d.ts +1 -0
  183. package/starters/modular/tsconfig.json +33 -0
  184. package/starters/modular/tsconfig.node.json +13 -0
  185. package/starters/modular/vite.config.ts +132 -0
  186. package/TODO.md +0 -79
  187. package/dist/src/lazy.d.ts +0 -38
  188. package/dist/src/lazy.js +0 -73
  189. package/dist/src/lazy.js.map +0 -1
  190. package/docs/en/01-routing.md +0 -152
  191. package/docs/en/02-project-layout.md +0 -124
  192. package/docs/en/03-static-bake.md +0 -249
  193. package/docs/en/04-ide-setup.md +0 -162
  194. package/docs/en/07-llm-pitfalls.md +0 -724
  195. package/docs/en/08-llm-zero-history-test.md +0 -56
  196. package/docs/en/09-shadow-vs-light-dom.md +0 -174
  197. package/docs/en/11-layouts.md +0 -113
  198. package/docs/en/12-auth-and-api.md +0 -124
  199. package/docs/en/16-bake-cookbook.md +0 -100
  200. package/docs/en/17-shadow-dom-forms.md +0 -192
  201. package/docs/fr/00-the-mado-way.md +0 -85
  202. package/docs/fr/01-routing.md +0 -120
  203. package/docs/fr/02-project-layout.md +0 -84
  204. package/docs/fr/03-static-bake.md +0 -289
  205. package/docs/fr/04-ide-setup.md +0 -162
  206. package/docs/fr/05-why-mado.md +0 -193
  207. package/docs/fr/06-for-backenders.md +0 -438
  208. package/docs/fr/07-llm-pitfalls.md +0 -625
  209. package/docs/fr/08-llm-zero-history-test.md +0 -38
  210. package/docs/fr/09-shadow-vs-light-dom.md +0 -65
  211. package/docs/fr/10-app-architecture.md +0 -138
  212. package/docs/fr/11-layouts.md +0 -47
  213. package/docs/fr/12-auth-and-api.md +0 -76
  214. package/docs/fr/13-deployment.md +0 -57
  215. package/docs/fr/14-testing.md +0 -41
  216. package/docs/fr/15-error-handling.md +0 -50
  217. package/docs/fr/16-bake-cookbook.md +0 -88
  218. package/docs/fr/17-shadow-dom-forms.md +0 -196
  219. package/docs/fr/18-api-freeze-map.md +0 -63
  220. package/docs/fr/19-reactivity-ordering.md +0 -97
  221. package/docs/fr/20-v1-stability.md +0 -88
  222. package/docs/fr/README.md +0 -27
  223. package/docs/ru/00-the-mado-way.md +0 -84
  224. package/docs/ru/01-routing.md +0 -119
  225. package/docs/ru/02-project-layout.md +0 -84
  226. package/docs/ru/03-static-bake.md +0 -250
  227. package/docs/ru/04-ide-setup.md +0 -144
  228. package/docs/ru/05-why-mado.md +0 -193
  229. package/docs/ru/06-for-backenders.md +0 -428
  230. package/docs/ru/07-llm-pitfalls.md +0 -624
  231. package/docs/ru/08-llm-zero-history-test.md +0 -57
  232. package/docs/ru/09-shadow-vs-light-dom.md +0 -63
  233. package/docs/ru/10-app-architecture.md +0 -152
  234. package/docs/ru/11-layouts.md +0 -47
  235. package/docs/ru/12-auth-and-api.md +0 -75
  236. package/docs/ru/13-deployment.md +0 -66
  237. package/docs/ru/14-testing.md +0 -50
  238. package/docs/ru/15-error-handling.md +0 -56
  239. package/docs/ru/16-bake-cookbook.md +0 -95
  240. package/docs/ru/17-shadow-dom-forms.md +0 -193
  241. package/docs/ru/18-api-freeze-map.md +0 -64
  242. package/docs/ru/19-reactivity-ordering.md +0 -95
  243. package/docs/ru/20-v1-stability.md +0 -82
  244. package/docs/ru/README.md +0 -25
  245. package/docs/uk/00-the-mado-way.md +0 -82
  246. package/docs/uk/01-routing.md +0 -76
  247. package/docs/uk/02-project-layout.md +0 -73
  248. package/docs/uk/03-static-bake.md +0 -48
  249. package/docs/uk/04-ide-setup.md +0 -26
  250. package/docs/uk/05-why-mado.md +0 -34
  251. package/docs/uk/06-for-backenders.md +0 -55
  252. package/docs/uk/07-llm-pitfalls.md +0 -145
  253. package/docs/uk/08-llm-zero-history-test.md +0 -34
  254. package/docs/uk/09-shadow-vs-light-dom.md +0 -58
  255. package/docs/uk/10-app-architecture.md +0 -97
  256. package/docs/uk/11-layouts.md +0 -47
  257. package/docs/uk/12-auth-and-api.md +0 -70
  258. package/docs/uk/13-deployment.md +0 -40
  259. package/docs/uk/14-testing.md +0 -34
  260. package/docs/uk/15-error-handling.md +0 -32
  261. package/docs/uk/16-bake-cookbook.md +0 -36
  262. package/docs/uk/17-shadow-dom-forms.md +0 -193
  263. package/docs/uk/18-api-freeze-map.md +0 -61
  264. package/docs/uk/19-reactivity-ordering.md +0 -95
  265. package/docs/uk/20-v1-stability.md +0 -83
  266. package/docs/uk/README.md +0 -27
  267. package/scripts/bake.mjs +0 -570
  268. package/scripts/package-smoke.mjs +0 -77
  269. package/scripts/release-notes.mjs +0 -66
  270. package/scripts/size-budget.mjs +0 -91
  271. package/starters/default/src/modules/home/not-found.page.ts +0 -11
  272. package/starters/default/src/shared/ui/x-button.component.ts +0 -49
  273. /package/docs/en/{19-reactivity-ordering.md → 31-reactivity-ordering.md} +0 -0
  274. /package/starters/{default → modular}/.editorconfig +0 -0
  275. /package/starters/{default → modular}/eslint.config.mjs +0 -0
  276. /package/starters/{default → modular}/public/favicon.svg +0 -0
  277. /package/starters/{default → modular}/src/modules/auth/_contracts/auth-api.types.ts +0 -0
  278. /package/starters/{default → modular}/src/modules/auth/auth.connector.ts +0 -0
  279. /package/starters/{default → modular}/src/modules/auth/auth.guard.ts +0 -0
  280. /package/starters/{default → modular}/src/modules/auth/auth.public.ts +0 -0
  281. /package/starters/{default → modular}/src/modules/auth/auth.routes.ts +0 -0
  282. /package/starters/{default → modular}/src/modules/auth/auth.service.ts +0 -0
  283. /package/starters/{default → modular}/src/modules/auth/auth.types.ts +0 -0
  284. /package/starters/{default → modular}/src/modules/billing/_contracts/stripe.types.ts +0 -0
  285. /package/starters/{default → modular}/src/modules/billing/api/stripe.connector.ts +0 -0
  286. /package/starters/{default → modular}/src/modules/billing/billing.public.ts +0 -0
  287. /package/starters/{default → modular}/src/modules/billing/billing.routes.ts +0 -0
  288. /package/starters/{default → modular}/src/modules/billing/billing.types.ts +0 -0
  289. /package/starters/{default → modular}/src/modules/billing/components/invoice-status-badge.component.ts +0 -0
  290. /package/starters/{default → modular}/src/modules/billing/data/invoices.resource.ts +0 -0
  291. /package/starters/{default → modular}/src/shared/http/http-client.ts +0 -0
  292. /package/starters/{default → modular}/src/shared/http/http-error.ts +0 -0
  293. /package/starters/{default → modular}/src/shared/http/interceptors.ts +0 -0
  294. /package/starters/{default → modular}/src/shared/lib/format-date.ts +0 -0
  295. /package/starters/{default → modular}/src/shared/styles/content.css +0 -0
  296. /package/starters/{default → modular}/src/shared/styles/shell.css +0 -0
  297. /package/starters/{default → modular}/src/shared/styles/tokens.css +0 -0
  298. /package/starters/{default → modular}/src/shared/ui/x-spinner.component.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/html/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/html/parser.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tagged-template parser: a state machine that turns strings[] into\n * { template: HTMLTemplateElement, bindings: BindingSpec[] }\n *\n * It does not depend on the reactive runtime (signal/each/effect), only on DOM\n * APIs (document.createElement and walking Node trees). That makes it possible\n * to test the parser in isolation and reuse it for future static tooling.\n *\n * Algorithm:\n * 1. Walk strings[] char-by-char through an explicit finite state machine.\n * For every `${}` slot we know the current context: text, attribute,\n * attribute value, comment, or raw text.\n * 2. Build the final HTML string with markers:\n * - opaque comments for child slots\n * - opaque data attributes for attribute slots\n * and keep a parallel BindingSpec list that describes each slot.\n * 3. Parse HTML through `<template>.innerHTML`, then walk() finds markers in\n * the DOM and fills BindingSpec.path and childIndex. Marker attributes are\n * removed from elements; marker comments remain as child binding anchors.\n * 4. Cache by strings identity. TemplateStringsArray is stable for the same\n * tagged literal between calls.\n */\n\n// ---------- Markers ----------\n\n\n/**\n * Stable, template-specific marker token.\n *\n * The token must not be a predictable global counter because authored markup\n * can contain similarly named attributes. It also cannot use randomness:\n * child anchors survive static capture and must be byte-for-byte reproducible.\n */\nfunction markerTokenFor(strings: TemplateStringsArray): string {\n let hash = 0x811c9dc5;\n\n for (const part of strings) {\n hash ^= part.length;\n for (let index = 0; index < part.length; index++) {\n hash = Math.imul(hash ^ part.charCodeAt(index), 0x01000193);\n }\n hash = Math.imul(hash ^ 0xffff, 0x01000193);\n }\n\n return (hash >>> 0).toString(36);\n}\n\n// ---------- Binding description ----------\n\n\nexport interface ChildBindingSpec {\n type: \"child\";\n id: number;\n path: number[];\n childIndex: number;\n slot: number;\n}\n\n/** Attribute / event / property / boolean — can be multi-part. */\nexport interface AttrBindingSpec {\n type: \"attr\";\n id: number;\n path: number[];\n /** Attribute name: 'class', '@click', '.value', '?disabled'. */\n name: string;\n /**\n * If the attribute is single-part (the entire value = one ${}), then\n * slots = [N], strings = ['', ''], isMulti = false.\n * If multi-part, strings and slots alternate:\n * strings[0] + values[slots[0]] + strings[1] + ... + strings[k]\n */\n strings: string[];\n slots: number[];\n /** True if the value is assembled from multiple parts (static + slots). */\n isMulti: boolean;\n}\n\nexport type BindingSpec = ChildBindingSpec | AttrBindingSpec;\n\nexport interface ParsedTemplate {\n template: HTMLTemplateElement;\n bindings: BindingSpec[];\n}\n\n// ---------- Cache ----------\n\n\nconst templateCache = new WeakMap<TemplateStringsArray, ParsedTemplate>();\n\n// ---------- State machine ----------\n\n\ntype State =\n | \"TEXT\"\n | \"TAG_OPEN\" // after '<'\n | \"TAG_NAME\"\n | \"BEFORE_ATTR\" // inside a tag, between attributes\n | \"ATTR_NAME\"\n | \"AFTER_ATTR_NAME\" // after name, before '=' or next attribute\n | \"BEFORE_ATTR_VALUE\" // after '='\n | \"ATTR_VALUE_DQ\" // inside double quotes\n | \"ATTR_VALUE_SQ\" // inside single quotes\n | \"ATTR_VALUE_UNQ\" // unquoted\n | \"SELF_CLOSE\" // inside a tag, after '/'\n | \"COMMENT\" // inside <!-- ... -->\n | \"RAW_TEXT\" // inside <script>/<style>/<textarea>/<title>\n | \"CLOSE_TAG\"; // </name>\n\n// Tags inside which HTML is not parsed.\nconst RAW_TEXT_TAGS = new Set([\"script\", \"style\", \"textarea\", \"title\"]);\nconst VOID_ELEMENTS = new Set([\n \"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"link\",\n \"meta\", \"param\", \"source\", \"track\", \"wbr\",\n]);\n\n// SVG-only element names. If one of these is the TOP-LEVEL element of a\n// template, the HTML parser (`<template>.innerHTML`) places it in the HTML\n// namespace instead of the SVG namespace → an invisible element. Mado has no\n// `svg\\`\\`` tag yet, so we detect this and throw a clear error instead of\n// rendering nothing. A self-contained `<svg>…</svg>` is fine: the parser puts\n// everything under <svg> into the SVG namespace correctly. (FABLE_REPORT #7)\nconst SVG_ONLY_TAGS = new Set([\n \"circle\",\n \"clippath\",\n \"defs\",\n \"ellipse\",\n \"g\",\n \"image\",\n \"line\",\n \"lineargradient\",\n \"mask\",\n \"path\",\n \"pattern\",\n \"polygon\",\n \"polyline\",\n \"radialgradient\",\n \"rect\",\n \"stop\",\n \"text\",\n \"tspan\",\n \"use\",\n]);\n\n\ninterface AttrAccum {\n /** Raw name as written in the template (including @/./? prefixes). */\n rawName: string;\n /** Value fragments between slots; for attributes without value — empty array. */\n valueParts: string[];\n /** Current fragment being collected (between slots). */\n current: string;\n /** Slots that appeared in this attribute's value. */\n slots: number[];\n /** Which quote opened the value: '\"' | \"'\" | '' (unquoted). */\n quote: string;\n /** Whether there was any value (=). Attributes without value are boolean. */\n hasValue: boolean;\n}\n\n/**\n * Main export: parse a tagged-template literal into a ready-to-instantiate\n * ParsedTemplate. Idempotent (cached by strings).\n */\nexport function parseTemplate(strings: TemplateStringsArray): ParsedTemplate {\n const cached = templateCache.get(strings);\n if (cached) return cached;\n\n const bindings: BindingSpec[] = [];\n let html = \"\";\n let state: State = \"TEXT\";\n let tagName = \"\";\n let attr: AttrAccum | null = null;\n let rawTagName = \"\";\n let firstTagName = \"\";\n let nextId = 0;\n const markerToken = markerTokenFor(strings);\n const childMarkerPrefix = `mado$${markerToken}$`;\n const attrMarkerPrefix = `data-mado-bind-${markerToken}-`;\n\n\n /** Creates a child binding and adds a marker to html. */\n const emitChildMarker = (slot: number): void => {\n const id = nextId++;\n html += `<!--${childMarkerPrefix}${id}-->`;\n bindings.push({\n type: \"child\",\n id,\n path: [], // filled during walk\n childIndex: 0,\n slot,\n });\n };\n\n /** Closes the current attribute and flushes it into html. */\n const flushAttr = (): void => {\n if (!attr) return;\n // Finalize the last fragment.\n if (attr.hasValue) {\n attr.valueParts.push(attr.current);\n }\n\n if (attr.slots.length === 0) {\n // Static attribute: emit as-is.\n if (!attr.hasValue) {\n html += \" \" + attr.rawName;\n } else if (attr.quote) {\n html +=\n \" \" + attr.rawName + \"=\" + attr.quote + attr.current + attr.quote;\n } else {\n html += \" \" + attr.rawName + \"=\" + attr.current;\n }\n } else {\n // dynamic attribute — place marker, write binding\n const id = nextId++;\n // escape name for safe writing into a data attribute value\n const escapedName = attr.rawName\n .replace(/&/g, \"&amp;\")\n .replace(/\"/g, \"&quot;\");\n html += ` ${attrMarkerPrefix}${id}=\"${escapedName}\"`;\n const parts = attr.valueParts.length > 0 ? attr.valueParts : [\"\", \"\"];\n // single-part: the attribute is entirely defined by one slot\n // (all static fragments are empty ⇒ value = just values[slot])\n const isMulti = attr.slots.length > 1 || parts.some((p) => p !== \"\");\n bindings.push({\n type: \"attr\",\n id,\n path: [], // filled during walk\n name: attr.rawName,\n strings: parts,\n slots: attr.slots,\n isMulti,\n });\n }\n attr = null;\n };\n\n /** Processes one character of a template string. */\n const processChar = (c: string, i: number, s: string): void => {\n switch (state) {\n // ---------- TEXT ----------\n case \"TEXT\": {\n if (c === \"<\") {\n // Potential tag start.\n const next = s[i + 1] ?? \"\";\n if (/[a-zA-Z]/.test(next)) {\n html += \"<\";\n tagName = \"\";\n state = \"TAG_NAME\";\n } else if (next === \"/\") {\n html += \"<\";\n state = \"CLOSE_TAG\";\n } else if (next === \"!\") {\n // Check for <!--.\n if (s[i + 2] === \"-\" && s[i + 3] === \"-\") {\n html += \"<\";\n state = \"COMMENT\";\n // Every following char is copied into html as-is.\n } else {\n // <!doctype or <![CDATA[: treat as a normal tag-like block.\n html += \"<\";\n state = \"CLOSE_TAG\"; // Reuse CLOSE_TAG as \"wait until >\".\n }\n } else {\n // '<' does not open a tag here, e.g. \"a < b\".\n html += \"&lt;\";\n }\n } else {\n html += c;\n }\n break;\n }\n\n // ---------- TAG_NAME ----------\n case \"TAG_NAME\": {\n if (/\\s/.test(c)) {\n html += c;\n // Tag name complete — remember the first element's tag (SVG guard).\n if (firstTagName === \"\") firstTagName = tagName.toLowerCase();\n state = \"BEFORE_ATTR\";\n } else if (c === \"/\") {\n if (firstTagName === \"\") firstTagName = tagName.toLowerCase();\n state = \"SELF_CLOSE\";\n } else if (c === \">\") {\n html += c;\n if (firstTagName === \"\") firstTagName = tagName.toLowerCase();\n if (RAW_TEXT_TAGS.has(tagName.toLowerCase())) {\n rawTagName = tagName.toLowerCase();\n state = \"RAW_TEXT\";\n } else {\n state = \"TEXT\";\n }\n } else {\n tagName += c;\n html += c;\n }\n break;\n }\n\n // ---------- BEFORE_ATTR ----------\n case \"BEFORE_ATTR\": {\n\n if (/\\s/.test(c)) {\n html += c;\n } else if (c === \"/\") {\n state = \"SELF_CLOSE\";\n } else if (c === \">\") {\n html += c;\n if (RAW_TEXT_TAGS.has(tagName.toLowerCase())) {\n rawTagName = tagName.toLowerCase();\n state = \"RAW_TEXT\";\n } else {\n state = \"TEXT\";\n }\n } else {\n // Start a new attribute accumulator.\n attr = {\n rawName: c,\n valueParts: [],\n current: \"\",\n slots: [],\n quote: \"\",\n hasValue: false,\n };\n state = \"ATTR_NAME\";\n }\n break;\n }\n\n // ---------- ATTR_NAME ----------\n case \"ATTR_NAME\": {\n if (c === \"=\") {\n attr!.hasValue = true;\n state = \"BEFORE_ATTR_VALUE\";\n } else if (/\\s/.test(c)) {\n state = \"AFTER_ATTR_NAME\";\n } else if (c === \"/\") {\n flushAttr();\n state = \"SELF_CLOSE\";\n } else if (c === \">\") {\n flushAttr();\n html += c;\n if (RAW_TEXT_TAGS.has(tagName.toLowerCase())) {\n rawTagName = tagName.toLowerCase();\n state = \"RAW_TEXT\";\n } else {\n state = \"TEXT\";\n }\n } else {\n attr!.rawName += c;\n }\n break;\n }\n\n // ---------- AFTER_ATTR_NAME ----------\n case \"AFTER_ATTR_NAME\": {\n if (/\\s/.test(c)) {\n // Keep skipping whitespace.\n } else if (c === \"=\") {\n attr!.hasValue = true;\n state = \"BEFORE_ATTR_VALUE\";\n } else if (c === \"/\") {\n flushAttr();\n html += \" \";\n state = \"SELF_CLOSE\";\n } else if (c === \">\") {\n flushAttr();\n html += c;\n if (RAW_TEXT_TAGS.has(tagName.toLowerCase())) {\n rawTagName = tagName.toLowerCase();\n state = \"RAW_TEXT\";\n } else {\n state = \"TEXT\";\n }\n } else {\n // This starts a new attribute; the previous one was boolean.\n flushAttr();\n html += \" \";\n attr = {\n rawName: c,\n valueParts: [],\n current: \"\",\n slots: [],\n quote: \"\",\n hasValue: false,\n };\n state = \"ATTR_NAME\";\n }\n break;\n }\n\n // ---------- BEFORE_ATTR_VALUE ----------\n case \"BEFORE_ATTR_VALUE\": {\n if (/\\s/.test(c)) {\n // skip\n } else if (c === '\"') {\n attr!.quote = '\"';\n state = \"ATTR_VALUE_DQ\";\n } else if (c === \"'\") {\n attr!.quote = \"'\";\n state = \"ATTR_VALUE_SQ\";\n } else if (c === \">\") {\n // Empty value through =\n flushAttr();\n html += c;\n state = \"TEXT\";\n } else {\n attr!.quote = \"\";\n attr!.current = c;\n state = \"ATTR_VALUE_UNQ\";\n }\n break;\n }\n\n // ---------- ATTR_VALUE_DQ ----------\n case \"ATTR_VALUE_DQ\": {\n if (c === '\"') {\n flushAttr();\n state = \"BEFORE_ATTR\";\n } else {\n attr!.current += c;\n }\n break;\n }\n\n // ---------- ATTR_VALUE_SQ ----------\n case \"ATTR_VALUE_SQ\": {\n if (c === \"'\") {\n flushAttr();\n state = \"BEFORE_ATTR\";\n } else {\n attr!.current += c;\n }\n break;\n }\n\n // ---------- ATTR_VALUE_UNQ ----------\n case \"ATTR_VALUE_UNQ\": {\n if (/\\s/.test(c)) {\n flushAttr();\n html += c;\n state = \"BEFORE_ATTR\";\n } else if (c === \">\") {\n flushAttr();\n html += c;\n if (RAW_TEXT_TAGS.has(tagName.toLowerCase())) {\n rawTagName = tagName.toLowerCase();\n state = \"RAW_TEXT\";\n } else {\n state = \"TEXT\";\n }\n } else if (c === \"/\" && s[i + 1] === \">\") {\n // Self-closing after an unquoted value: <x-icon name=${v}/>\n flushAttr();\n state = \"SELF_CLOSE\";\n } else {\n attr!.current += c;\n }\n break;\n }\n\n // ---------- SELF_CLOSE ----------\n case \"SELF_CLOSE\": {\n if (c === \">\") {\n const lower = tagName.toLowerCase();\n if (\n !VOID_ELEMENTS.has(lower) &&\n lower !== \"svg\" &&\n !SVG_ONLY_TAGS.has(lower)\n ) {\n throw new Error(\n `[mado] <${tagName}/> is not self-closing in HTML. ` +\n `Write <${tagName}></${tagName}> instead.`,\n );\n }\n html += \"/>\";\n state = \"TEXT\";\n } else if (/\\s/.test(c)) {\n // ignore\n } else {\n // Not self-closing: roll back into a normal attribute.\n html += \"/\";\n attr = {\n rawName: c,\n valueParts: [],\n current: \"\",\n slots: [],\n quote: \"\",\n hasValue: false,\n };\n state = \"ATTR_NAME\";\n }\n break;\n }\n\n // ---------- COMMENT ----------\n case \"COMMENT\": {\n html += c;\n // Look for '-->' by checking the last three html chars.\n if (\n html.endsWith(\"-->\") &&\n // Guard: it must be at least the length of \"<!---->\".\n html.length >= 7\n ) {\n state = \"TEXT\";\n }\n break;\n }\n\n // ---------- RAW_TEXT ----------\n case \"RAW_TEXT\": {\n html += c;\n // Look for the closing </tagName>.\n const closing = \"</\" + rawTagName;\n if (c === \">\" && html.toLowerCase().endsWith(closing + \">\")) {\n rawTagName = \"\";\n state = \"TEXT\";\n }\n break;\n }\n\n // ---------- CLOSE_TAG ----------\n case \"CLOSE_TAG\": {\n html += c;\n if (c === \">\") {\n state = \"TEXT\";\n }\n break;\n }\n }\n };\n\n /** Processes the slot ${...} between strings[i] and strings[i+1]. */\n const processSlot = (slot: number): void => {\n switch (state) {\n case \"TEXT\": {\n emitChildMarker(slot);\n break;\n }\n case \"TAG_NAME\":\n case \"BEFORE_ATTR\":\n case \"ATTR_NAME\":\n case \"AFTER_ATTR_NAME\": {\n throw new Error(\n `[mado] Dynamic slot in tag/attribute name position is not supported (state=${state}).`,\n );\n }\n case \"BEFORE_ATTR_VALUE\": {\n // <attr=${v}> without quotes: the slot is the whole value.\n attr!.quote = \"\";\n attr!.slots.push(slot);\n attr!.valueParts.push(attr!.current);\n attr!.current = \"\";\n state = \"ATTR_VALUE_UNQ\";\n break;\n }\n case \"ATTR_VALUE_DQ\":\n case \"ATTR_VALUE_SQ\":\n case \"ATTR_VALUE_UNQ\": {\n attr!.slots.push(slot);\n attr!.valueParts.push(attr!.current);\n attr!.current = \"\";\n break;\n }\n case \"COMMENT\": {\n // binding inside a static comment — ignore\n break;\n }\n case \"RAW_TEXT\": {\n // A ${} slot inside <textarea>/<title>/<style>/<script> cannot become a\n // child binding — the browser parses these as raw text, so the marker\n // comment would be literal text. Throw a clear, fixable error instead\n // of silently dropping the value. (FABLE_REPORT.md finding #7)\n throw new Error(rawTextSlotError(rawTagName));\n }\n\n case \"SELF_CLOSE\":\n case \"CLOSE_TAG\":\n case \"TAG_OPEN\": {\n throw new Error(\n `[mado] Dynamic slot in position ${state} is not supported.`,\n );\n }\n }\n };\n\n for (let i = 0; i < strings.length; i++) {\n const s = strings[i]!;\n for (let j = 0; j < s.length; j++) {\n processChar(s[j]!, j, s);\n }\n if (i < strings.length - 1) {\n processSlot(i);\n }\n }\n\n // SVG-only root guard: <template>.innerHTML parses an SVG child element\n // (e.g. <circle>, <path>) in the HTML namespace, producing an invisible\n // element. Detect it and throw a clear error instead of rendering nothing.\n if (SVG_ONLY_TAGS.has(firstTagName)) {\n throw new Error(\n `[mado] <${firstTagName}> cannot be a top-level template element — it ` +\n `renders in the wrong (HTML) namespace and stays invisible. Wrap SVG ` +\n `content in a single <svg>…</svg> template instead of nesting an SVG ` +\n `child as its own html\\`\\` fragment.`,\n );\n }\n\n // 2) Parse the final HTML string through <template>.\n const tpl = document.createElement(\"template\");\n tpl.innerHTML = html;\n\n for (const nested of tpl.content.querySelectorAll(\"template\")) {\n if (containsMarker(nested.content, childMarkerPrefix, attrMarkerPrefix)) {\n throw new Error(\n \"[mado] Dynamic slots inside <template> are not supported. \" +\n \"Move the dynamic value outside <template> or render it after cloning.\",\n );\n }\n }\n\n\n // 3) Walk content, find markers, fill path/childIndex for bindings.\n const byId = new Map<number, BindingSpec>();\n for (const b of bindings) byId.set(b.id, b);\n walk(tpl.content, [], byId, childMarkerPrefix, attrMarkerPrefix);\n\n const parsed: ParsedTemplate = { template: tpl, bindings };\n templateCache.set(strings, parsed);\n return parsed;\n}\n\n/**\n * Walk the template DOM: for each marker (attribute or comment)\n * find the corresponding BindingSpec and fill its `path` (how to\n * reach it from root) and `childIndex` (for child bindings — position\n * of the placeholder comment among the parent's children).\n *\n * Internal marker attributes are removed from elements;\n * marker comments remain — they serve as an \"anchor\" for child binding.\n */\nfunction walk(\n node: Node,\n path: number[],\n byId: Map<number, BindingSpec>,\n childMarkerPrefix: string,\n attrMarkerPrefix: string,\n): void {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element;\n const toRemove: string[] = [];\n for (const attr of [...el.attributes]) {\n if (attr.name.startsWith(attrMarkerPrefix)) {\n const id = Number(attr.name.slice(attrMarkerPrefix.length));\n const b = byId.get(id);\n if (b && b.type === \"attr\") {\n b.path = [...path];\n }\n toRemove.push(attr.name);\n }\n }\n for (const n of toRemove) el.removeAttribute(n);\n }\n\n if (node.nodeType === Node.COMMENT_NODE) {\n const c = node as Comment;\n if (c.data.startsWith(childMarkerPrefix)) {\n const id = Number(c.data.slice(childMarkerPrefix.length));\n const b = byId.get(id);\n if (b && b.type === \"child\") {\n // Path points to the parent; index is the node position among children.\n b.path = path.slice(0, -1);\n b.childIndex = path[path.length - 1]!;\n }\n }\n }\n\n const children = node.childNodes;\n for (let i = 0; i < children.length; i++) {\n walk(children[i]!, [...path, i], byId, childMarkerPrefix, attrMarkerPrefix);\n }\n}\n\nfunction containsMarker(\n node: Node,\n childMarkerPrefix: string,\n attrMarkerPrefix: string,\n): boolean {\n if (\n node.nodeType === Node.COMMENT_NODE &&\n (node as Comment).data.startsWith(childMarkerPrefix)\n ) return true;\n if (\n node.nodeType === Node.ELEMENT_NODE &&\n [...(node as Element).attributes].some((attr) =>\n attr.name.startsWith(attrMarkerPrefix))\n ) return true;\n for (const child of node.childNodes) {\n if (containsMarker(child, childMarkerPrefix, attrMarkerPrefix)) return true;\n }\n return false;\n}\n\n/**\n * Retrieve a node by path from root. Used when instantiating\n * a template to resolve BindingSpec.path → concrete Node in the clone.\n */\nexport function resolvePath(root: Node, path: number[]): Node {\n let n: Node = root;\n for (const i of path) n = n.childNodes[i]!;\n return n;\n}\n\n/** Build a fixable error message for a ${} slot inside a RAW_TEXT element. */\nfunction rawTextSlotError(rawTagName: string): string {\n const base = `[mado] Dynamic \\${...} inside <${rawTagName}> is not supported`;\n if (rawTagName === \"textarea\" || rawTagName === \"title\") {\n return `${base} — the browser parses it as raw text. Use .value=\\${value} on the element instead, e.g. <${rawTagName} .value=\\${value}></${rawTagName}>.`;\n }\n if (rawTagName === \"style\") {\n return `${base}. Build styles with the css\\`\\` tag (component styles) or a static <style>.`;\n }\n return `${base}. Inline <script> with dynamic content is not supported.`;\n}\n"]}
@@ -25,3 +25,4 @@ export interface InstantiatedTemplate {
25
25
  dispose(): void;
26
26
  _strings: TemplateStringsArray;
27
27
  }
28
+ //# sourceMappingURL=template-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-types.d.ts","sourceRoot":"","sources":["../../../src/html/template-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,gBAAgB,MAAO,OAAO,KAAG,CAAC,IAAI,cAC0B,CAAC;AAE9E;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,EAAE,oBAAoB,CAAC;CAChC"}
@@ -1 +1 @@
1
- {"version":3,"file":"template-types.js","sourceRoot":"","sources":["../../../src/html/template-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAuB,EAAE,CAClE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAoB,CAAC,KAAK,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"template-types.js","sourceRoot":"","sources":["../../../src/html/template-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAU,EAAuB,EAAE,CAClE,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAK,CAAoB,CAAC,KAAK,KAAK,IAAI,CAAC","sourcesContent":["/**\n * Small shared type module extracted from html.ts to avoid a cycle:\n * bindings.ts knows about TemplateResult / InstantiatedTemplate, template.ts\n * instantiates through them, and neither module depends on the other directly\n * (instantiate is passed into bindings as a parameter).\n */\n\nexport interface TemplateResult {\n readonly _mado: true;\n readonly strings: TemplateStringsArray;\n readonly values: readonly unknown[];\n}\n\nexport const isTemplateResult = (v: unknown): v is TemplateResult =>\n typeof v === \"object\" && v !== null && (v as TemplateResult)._mado === true;\n\n/**\n * Ready-to-use template instance: already cloned, bindings attached, nodes\n * extracted. Insert the fragment into the DOM, then call update() when values\n * change and dispose() when removing it.\n *\n * `_strings` lets keyed each decide whether an instance can be reused\n * (same tagged literal) or must be recreated.\n */\nexport interface InstantiatedTemplate {\n fragment: DocumentFragment;\n nodes: Node[];\n update(values: readonly unknown[]): void;\n dispose(): void;\n _strings: TemplateStringsArray;\n}\n"]}
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * Only the glue lives here: parser and bindings are in neighbour files.
11
11
  */
12
+ import type { Disposer } from "../signal.js";
12
13
  import type { InstantiatedTemplate, TemplateResult } from "./template-types.js";
13
14
  /**
14
15
  * `html\`<div>${value}</div>\`` → template descriptor.
@@ -42,4 +43,7 @@ export declare function instantiate(result: TemplateResult): InstantiatedTemplat
42
43
  * Container can be either an Element or a ShadowRoot (used
43
44
  * in component() for rendering into a shadow tree).
44
45
  */
45
- export declare function render(result: TemplateResult, container: Element | ShadowRoot): void;
46
+ export declare function render(result: TemplateResult, container: Element | ShadowRoot): Disposer;
47
+ /** Dispose the template currently owned by a render container. */
48
+ export declare function unmount(container: Element | ShadowRoot): void;
49
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/html/template.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAc7C,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAG7B;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAClB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,OAAO,EAAE,GACnB,cAAc,CAEhB;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,GAAG,oBAAoB,CAsDxE;AAOD;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CACpB,MAAM,EAAE,cAAc,EACtB,SAAS,EAAE,OAAO,GAAG,UAAU,GAC9B,QAAQ,CAqDV;AA+DD,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAK7D"}
@@ -12,6 +12,7 @@
12
12
  import { warnOnce } from "../diagnostics.js";
13
13
  import { parseTemplate, resolvePath, } from "./parser.js";
14
14
  import { bindAttr, bindChild, createChildState, disposeChildState, } from "./bindings.js";
15
+ import { _flushDeferredStaticElements } from "../component.js";
15
16
  /**
16
17
  * `html\`<div>${value}</div>\`` → template descriptor.
17
18
  *
@@ -101,29 +102,117 @@ const rendered = new WeakMap();
101
102
  * in component() for rendering into a shadow tree).
102
103
  */
103
104
  export function render(result, container) {
104
- const existing = rendered.get(container);
105
- if (existing && existing.nodes[0]?.parentNode === container) {
105
+ let existing = rendered.get(container);
106
+ if (existing && !isMountedIn(existing, container)) {
107
+ existing.dispose();
108
+ rendered.delete(container);
109
+ existing = undefined;
110
+ }
111
+ if (existing) {
106
112
  if (existing._strings === result.strings) {
107
113
  existing.update(result.values);
108
- return;
114
+ return renderDisposer(container, existing);
109
115
  }
110
116
  existing.dispose();
117
+ rendered.delete(container);
111
118
  }
112
- // `mado bake` writes static first-paint markup into #app and marks the
119
+ // Static snapshots write first-paint markup into #app and mark the
113
120
  // container. That markup is not hydrated: once the client app starts, Mado
114
- // owns the container again and replaces the baked DOM with live bindings.
115
- const isBakedContainer = !existing &&
121
+ // owns the container again and atomically replaces it with live bindings.
122
+ const isStaticContainer = !existing &&
116
123
  "hasAttribute" in container &&
117
- container.hasAttribute("data-mado-baked");
118
- if (isBakedContainer) {
119
- container.replaceChildren();
120
- container.removeAttribute("data-mado-baked");
121
- }
122
- if (!existing && container.childNodes.length > 0) {
124
+ container.hasAttribute("data-mado-static");
125
+ if (!isStaticContainer && !existing && container.childNodes.length > 0) {
123
126
  warnOnce("render-unmanaged-dom", "render() called on a container with existing DOM that was not created by Mado. It will remain alongside the new render output.");
124
127
  }
128
+ // Build the live fragment OFF-DOM first. This guarantees that:
129
+ // - any new Custom Element inside the fragment is parsed and constructed
130
+ // but its connectedCallback() does not fire until insertion,
131
+ // - the old static tree (whose deferred children skipped setup()) is
132
+ // still in the DOM as inert first-paint markup,
133
+ // - we then swap children atomically with replaceChildren(), avoiding
134
+ // any frame where the container is visibly empty.
125
135
  const inst = instantiate(result);
126
- container.appendChild(inst.fragment);
136
+ if (isStaticContainer) {
137
+ const takeoverState = captureTakeoverState(container);
138
+ // Order matters: remove the marker BEFORE inserting the live fragment so
139
+ // newly-connecting Custom Elements no longer see a static ancestor and
140
+ // run setup() exactly once.
141
+ container.removeAttribute("data-mado-static");
142
+ container.replaceChildren(inst.fragment);
143
+ _flushDeferredStaticElements();
144
+ restoreTakeoverState(container, takeoverState);
145
+ }
146
+ else {
147
+ container.appendChild(inst.fragment);
148
+ }
127
149
  rendered.set(container, inst);
150
+ return renderDisposer(container, inst);
151
+ }
152
+ function captureTakeoverState(container) {
153
+ const active = document.activeElement;
154
+ return collectControls(container).map((control) => [
155
+ control.value,
156
+ "checked" in control ? control.checked : undefined,
157
+ control === active,
158
+ "selectionStart" in control ? control.selectionStart : undefined,
159
+ "selectionEnd" in control ? control.selectionEnd : undefined,
160
+ "selectionDirection" in control ? control.selectionDirection : undefined,
161
+ ]);
162
+ }
163
+ function restoreTakeoverState(container, states, attempts = 120) {
164
+ const controls = collectControls(container);
165
+ if (controls.length < states.length && attempts > 0) {
166
+ requestAnimationFrame(() => restoreTakeoverState(container, states, attempts - 1));
167
+ return;
168
+ }
169
+ for (let index = 0; index < states.length; index++) {
170
+ const state = states[index];
171
+ const control = controls[index];
172
+ if (!control)
173
+ continue;
174
+ if (!(control.localName === "input" && control.type === "file")) {
175
+ control.value = state[0];
176
+ }
177
+ if (state[1] !== undefined && "checked" in control)
178
+ control.checked = state[1];
179
+ if (state[2]) {
180
+ control.focus();
181
+ if (state[3] !== undefined && "setSelectionRange" in control) {
182
+ control.setSelectionRange?.(state[3], state[4] ?? null, state[5] ?? undefined);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ function collectControls(root) {
188
+ const controls = [...root.querySelectorAll("input,select,textarea")];
189
+ for (const element of root.querySelectorAll("*")) {
190
+ if (element.shadowRoot)
191
+ controls.push(...collectControls(element.shadowRoot));
192
+ }
193
+ return controls;
194
+ }
195
+ /** Dispose the template currently owned by a render container. */
196
+ export function unmount(container) {
197
+ const instance = rendered.get(container);
198
+ if (!instance)
199
+ return;
200
+ rendered.delete(container);
201
+ instance.dispose();
202
+ }
203
+ function renderDisposer(container, instance) {
204
+ let disposed = false;
205
+ return () => {
206
+ if (disposed)
207
+ return;
208
+ disposed = true;
209
+ if (rendered.get(container) !== instance)
210
+ return;
211
+ unmount(container);
212
+ };
213
+ }
214
+ function isMountedIn(instance, container) {
215
+ return instance.nodes.length === 0 ||
216
+ instance.nodes.every((node) => node.parentNode === container);
128
217
  }
129
218
  //# sourceMappingURL=template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/html/template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/html/template.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Template instantiation + public `html\\`\\`` tag + `render()`.\n *\n * Data flow:\n * html`...` → TemplateResult { strings, values }\n * parseTemplate(strings) → ParsedTemplate { template, bindings } (cached by strings)\n * instantiate(result) → InstantiatedTemplate { fragment, nodes, update, dispose }\n * render(result, host) → clones or reuses instance in host\n *\n * Only the glue lives here: parser and bindings are in neighbour files.\n */\n\nimport type { Disposer } from \"../signal.js\";\nimport { warnOnce } from \"../diagnostics.js\";\nimport {\n parseTemplate,\n resolvePath,\n type AttrBindingSpec,\n} from \"./parser.js\";\nimport {\n bindAttr,\n bindChild,\n createChildState,\n disposeChildState,\n type ChildState,\n} from \"./bindings.js\";\nimport type {\n InstantiatedTemplate,\n TemplateResult,\n} from \"./template-types.js\";\nimport { _flushDeferredStaticElements } from \"../component.js\";\n\n/**\n * `html\\`<div>${value}</div>\\`` → template descriptor.\n *\n * By itself renders and parses NOTHING — this simply captures\n * { strings, values } from the tagged-template literal. The heavy work\n * (parsing + cloning) happens on the first `render()` /\n * `instantiate()` call and is cached by `strings` identity.\n */\nexport function html(\n strings: TemplateStringsArray,\n ...values: unknown[]\n): TemplateResult {\n return { _mado: true, strings, values };\n}\n\n/**\n * Create a ready template instance: clones the pre-parsed template,\n * resolves all BindingSpec → concrete DOM nodes of the clone, binds\n * initial values. The returned object is self-contained: update(values)\n * patches only what actually changed, dispose() cleans up effects\n * and removes nodes from the DOM.\n *\n * Exported (not only used from render()) so that\n * keyed `each` reconciliation can manage instance lifetimes directly.\n */\nexport function instantiate(result: TemplateResult): InstantiatedTemplate {\n const parsed = parseTemplate(result.strings);\n const fragment = parsed.template.content.cloneNode(true) as DocumentFragment;\n\n const disposers: Disposer[] = [];\n const childStates: Map<number, ChildState> = new Map();\n const attrBound: Map<number, { el: Element; spec: AttrBindingSpec }> =\n new Map();\n\n // Resolve all BindingSpec.path → concrete nodes of the cloned\n // fragment. This is done ONCE, in the instance creation phase.\n for (const b of parsed.bindings) {\n if (b.type === \"child\") {\n const parent = resolvePath(fragment, b.path);\n const placeholder = parent.childNodes[b.childIndex] as Comment;\n childStates.set(b.id, createChildState(placeholder));\n } else {\n const el = resolvePath(fragment, b.path) as Element;\n attrBound.set(b.id, { el, spec: b });\n }\n }\n\n const update = (values: readonly unknown[]) => {\n // Before each update unsubscribe from the previous pass's subscriptions.\n // This is needed because one of the values might have been a signal\n // but now is not (or vice versa), and we need a fresh re-subscribe.\n for (const d of disposers.splice(0)) d();\n\n for (const b of parsed.bindings) {\n if (b.type === \"child\") {\n const st = childStates.get(b.id)!;\n bindChild(st, values[b.slot], disposers, instantiate);\n } else {\n const ab = attrBound.get(b.id)!;\n bindAttr(ab.el, ab.spec, values, disposers);\n }\n }\n };\n\n update(result.values);\n\n const nodes = [...fragment.childNodes];\n\n return {\n fragment,\n nodes,\n update,\n dispose() {\n for (const d of disposers.splice(0)) d();\n for (const st of childStates.values()) disposeChildState(st);\n for (const n of nodes) n.parentNode?.removeChild(n);\n },\n _strings: result.strings,\n };\n}\n\n// ---------- Public render ----------\n\n\nconst rendered = new WeakMap<Element | ShadowRoot, InstantiatedTemplate>();\n\n/**\n * Render a TemplateResult into a container.\n *\n * Semantics:\n * - first call → instantiate + appendChild;\n * - repeated call with the same tagged literal (same strings identity) →\n * update(values), DOM is not recreated;\n * - repeated call with a different literal → dispose old + new instantiate.\n *\n * Container can be either an Element or a ShadowRoot (used\n * in component() for rendering into a shadow tree).\n */\nexport function render(\n result: TemplateResult,\n container: Element | ShadowRoot,\n): Disposer {\n let existing = rendered.get(container);\n if (existing && !isMountedIn(existing, container)) {\n existing.dispose();\n rendered.delete(container);\n existing = undefined;\n }\n if (existing) {\n if (existing._strings === result.strings) {\n existing.update(result.values);\n return renderDisposer(container, existing);\n }\n existing.dispose();\n rendered.delete(container);\n }\n\n // Static snapshots write first-paint markup into #app and mark the\n // container. That markup is not hydrated: once the client app starts, Mado\n // owns the container again and atomically replaces it with live bindings.\n const isStaticContainer =\n !existing &&\n \"hasAttribute\" in container &&\n container.hasAttribute(\"data-mado-static\");\n\n if (!isStaticContainer && !existing && container.childNodes.length > 0) {\n warnOnce(\n \"render-unmanaged-dom\",\n \"render() called on a container with existing DOM that was not created by Mado. It will remain alongside the new render output.\",\n );\n }\n\n // Build the live fragment OFF-DOM first. This guarantees that:\n // - any new Custom Element inside the fragment is parsed and constructed\n // but its connectedCallback() does not fire until insertion,\n // - the old static tree (whose deferred children skipped setup()) is\n // still in the DOM as inert first-paint markup,\n // - we then swap children atomically with replaceChildren(), avoiding\n // any frame where the container is visibly empty.\n const inst = instantiate(result);\n if (isStaticContainer) {\n const takeoverState = captureTakeoverState(container);\n // Order matters: remove the marker BEFORE inserting the live fragment so\n // newly-connecting Custom Elements no longer see a static ancestor and\n // run setup() exactly once.\n container.removeAttribute(\"data-mado-static\");\n container.replaceChildren(inst.fragment);\n _flushDeferredStaticElements();\n restoreTakeoverState(container, takeoverState);\n } else {\n container.appendChild(inst.fragment);\n }\n rendered.set(container, inst);\n return renderDisposer(container, inst);\n}\n\ntype Control = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\ntype ControlState = [\n value: string,\n checked: boolean | undefined,\n focused: boolean,\n selectionStart: number | null | undefined,\n selectionEnd: number | null | undefined,\n selectionDirection: \"forward\" | \"backward\" | \"none\" | null | undefined,\n];\n\nfunction captureTakeoverState(container: Element | ShadowRoot): ControlState[] {\n const active = document.activeElement;\n return collectControls(container).map((control) => [\n control.value,\n \"checked\" in control ? control.checked : undefined,\n control === active,\n \"selectionStart\" in control ? control.selectionStart : undefined,\n \"selectionEnd\" in control ? control.selectionEnd : undefined,\n \"selectionDirection\" in control ? control.selectionDirection : undefined,\n ]);\n}\n\nfunction restoreTakeoverState(\n container: Element | ShadowRoot,\n states: ControlState[],\n attempts = 120,\n): void {\n const controls = collectControls(container);\n if (controls.length < states.length && attempts > 0) {\n requestAnimationFrame(() => restoreTakeoverState(container, states, attempts - 1));\n return;\n }\n for (let index = 0; index < states.length; index++) {\n const state = states[index]!;\n const control = controls[index];\n if (!control) continue;\n if (!(control.localName === \"input\" && (control as HTMLInputElement).type === \"file\")) {\n control.value = state[0];\n }\n if (state[1] !== undefined && \"checked\" in control) control.checked = state[1];\n if (state[2]) {\n control.focus();\n if (state[3] !== undefined && \"setSelectionRange\" in control) {\n control.setSelectionRange?.(\n state[3],\n state[4] ?? null,\n state[5] ?? undefined,\n );\n }\n }\n }\n}\n\nfunction collectControls(root: Element | ShadowRoot): Control[] {\n const controls = [...root.querySelectorAll<Control>(\"input,select,textarea\")];\n for (const element of root.querySelectorAll(\"*\")) {\n if (element.shadowRoot) controls.push(...collectControls(element.shadowRoot));\n }\n return controls;\n}\n\n/** Dispose the template currently owned by a render container. */\nexport function unmount(container: Element | ShadowRoot): void {\n const instance = rendered.get(container);\n if (!instance) return;\n rendered.delete(container);\n instance.dispose();\n}\n\nfunction renderDisposer(\n container: Element | ShadowRoot,\n instance: InstantiatedTemplate,\n): Disposer {\n let disposed = false;\n return () => {\n if (disposed) return;\n disposed = true;\n if (rendered.get(container) !== instance) return;\n unmount(container);\n };\n}\n\nfunction isMountedIn(\n instance: InstantiatedTemplate,\n container: Element | ShadowRoot,\n): boolean {\n return instance.nodes.length === 0 ||\n instance.nodes.every((node) => node.parentNode === container);\n}\n"]}
@@ -2,39 +2,42 @@
2
2
  * Mado — public API.
3
3
  *
4
4
  * Import everything from one place:
5
- * import { signal, computed, effect, component, html, router } from '@madojs/mado';
5
+ * import { signal, computed, effect, component, html, router } from "@madojs/mado";
6
6
  *
7
- * In the browser: connected via <script type="importmap">.
8
- * In Node: via `tsconfig.paths` (resolves to "./src/index.ts").
7
+ * Vite is the canonical transport: every official starter, generator
8
+ * and CLI command resolves `@madojs/mado` from `node_modules` through
9
+ * the Vite plugin (`@madojs/mado/vite`). Native ESM consumers (tests,
10
+ * partial-SSR probes) get the same surface area; anything that touches
11
+ * `import.meta.env.BASE_URL` falls back to "/" outside Vite.
9
12
  */
10
13
  export { signal, computed, effect, untracked, batch, flushSync, } from "./signal.js";
11
14
  export type { Signal, Computed, ComputedOptions, Disposer } from "./signal.js";
12
- export { html, render, instantiate } from "./html/template.js";
13
- export { unsafeHTML, ref, classMap, styleMap, isHtmlDirective, } from "./html/bindings.js";
15
+ export { html, render, unmount } from "./html/template.js";
16
+ export { unsafeHTML, ref, classMap, styleMap, } from "./html/bindings.js";
14
17
  export type { TemplateResult } from "./html/template-types.js";
15
18
  export type { HtmlDirective, UnsafeHTMLDirective, RefCallback, RefDirective, ClassMap, ClassMapDirective, StyleMap, StyleMapDirective, } from "./html/bindings.js";
16
- export { each, list } from "./each.js";
19
+ export { each } from "./each.js";
17
20
  export { component } from "./component.js";
18
21
  export type { ComponentContext, ComponentOptions, SetupFn, StyleInput, } from "./component.js";
19
- export { css, cssVars, adopt, scopeStyles } from "./css.js";
22
+ export { css, cssVars } from "./css.js";
20
23
  export type { CSSResult } from "./css.js";
21
24
  export { router, queryParam, navigate, } from "./router/navigation.js";
22
25
  export { routes, prefetchPath } from "./router/manifest.js";
26
+ export { appBase, routeUrl } from "./router/base.js";
23
27
  export type { RouterApi, QueryParam, QuerySignal, } from "./router/navigation.js";
24
28
  export type { RouteHandler, RouteParams, Routes, RoutesMap, } from "./router/match.js";
25
29
  export type { RoutesOptions } from "./router/manifest.js";
26
- export { page, layout, isPage, isLayoutGroup } from "./page.js";
27
- export type { Page, PageContext, PageData, RouteEntry, LayoutRoutes, HeadMeta, BakeConfig, Guard, GuardResult, } from "./page.js";
30
+ export { page, layout } from "./page.js";
31
+ export type { Page, PageContext, PageData, RouteEntry, LayoutRoutes, HeadMeta, StaticPageConfig, Guard, GuardResult, JsonPrimitive, JsonValue, } from "./page.js";
28
32
  export { applyHead } from "./head.js";
29
33
  export { resource, mutation, invalidate, jsonFetcher, HttpError, } from "./resource.js";
30
34
  export type { Resource, ResourceOptions, Mutation, MutationOptions, } from "./resource.js";
31
35
  export { useForm } from "./forms.js";
32
- export type { FormApi, FormValue, FormValues, FormErrors, FieldValidator, AsyncFieldValidator, FieldSchema, FieldArrayApi, Schema, UseFormOptions, } from "./forms.js";
36
+ export type { FormApi, FormValue, FormValues, FormErrors, FormTouched, FormValidator, FormValidationContext, UseFormOptions, } from "./forms.js";
33
37
  export { createContext, provide, inject } from "./context.js";
34
38
  export type { Context } from "./context.js";
35
39
  export { persisted } from "./persisted.js";
36
40
  export type { PersistedOptions, PersistedSignal } from "./persisted.js";
37
- export { lazy } from "./lazy.js";
38
- export type { LazyOptions } from "./lazy.js";
39
41
  export { getCurrentLifecycle, runInLifecycle, createLifecycle, } from "./lifecycle.js";
40
42
  export type { Lifecycle, LifecycleHandle } from "./lifecycle.js";
43
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG/E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,OAAO,EACP,UAAU,GACX,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAO5D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACV,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACzC,YAAY,EACV,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,KAAK,EACL,WAAW,EACX,aAAa,EACb,SAAS,GACV,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,YAAY,EACV,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC9D,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAOxE,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/src/index.js CHANGED
@@ -2,25 +2,35 @@
2
2
  * Mado — public API.
3
3
  *
4
4
  * Import everything from one place:
5
- * import { signal, computed, effect, component, html, router } from '@madojs/mado';
5
+ * import { signal, computed, effect, component, html, router } from "@madojs/mado";
6
6
  *
7
- * In the browser: connected via <script type="importmap">.
8
- * In Node: via `tsconfig.paths` (resolves to "./src/index.ts").
7
+ * Vite is the canonical transport: every official starter, generator
8
+ * and CLI command resolves `@madojs/mado` from `node_modules` through
9
+ * the Vite plugin (`@madojs/mado/vite`). Native ESM consumers (tests,
10
+ * partial-SSR probes) get the same surface area; anything that touches
11
+ * `import.meta.env.BASE_URL` falls back to "/" outside Vite.
9
12
  */
10
13
  // --- core ---
11
14
  export { signal, computed, effect, untracked, batch, flushSync, } from "./signal.js";
12
15
  // --- rendering ---
13
- export { html, render, instantiate } from "./html/template.js";
14
- export { unsafeHTML, ref, classMap, styleMap, isHtmlDirective, } from "./html/bindings.js";
15
- export { each, list } from "./each.js";
16
+ export { html, render, unmount } from "./html/template.js";
17
+ export { unsafeHTML, ref, classMap, styleMap, } from "./html/bindings.js";
18
+ export { each } from "./each.js";
16
19
  // --- components ---
17
20
  export { component } from "./component.js";
18
21
  // --- styles ---
19
- export { css, cssVars, adopt, scopeStyles } from "./css.js";
22
+ export { css, cssVars } from "./css.js";
20
23
  // --- routing ---
21
24
  export { router, queryParam, navigate, } from "./router/navigation.js";
22
25
  export { routes, prefetchPath } from "./router/manifest.js";
23
- export { page, layout, isPage, isLayoutGroup } from "./page.js";
26
+ // Application code should use `routeUrl()` exclusively for building
27
+ // internal links. `appBase` is exposed for integrations that need to
28
+ // read the active prefix (e.g. building absolute canonical URLs from a
29
+ // component). `normalizeBase`, `stripBase` and `withBase` are
30
+ // implementation details: they remain unexported until a concrete
31
+ // downstream use case appears.
32
+ export { appBase, routeUrl } from "./router/base.js";
33
+ export { page, layout } from "./page.js";
24
34
  export { applyHead } from "./head.js";
25
35
  // --- data ---
26
36
  export { resource, mutation, invalidate, jsonFetcher, HttpError, } from "./resource.js";
@@ -30,8 +40,6 @@ export { useForm } from "./forms.js";
30
40
  export { createContext, provide, inject } from "./context.js";
31
41
  // --- persistence ---
32
42
  export { persisted } from "./persisted.js";
33
- // --- lazy ---
34
- export { lazy } from "./lazy.js";
35
43
  // --- lifecycle (advanced API) ---
36
44
  //
37
45
  // Normally you don't need this: inside component() the lifecycle is created
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAe;AACf,OAAO,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,oBAAoB;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACL,UAAU,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEvC,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C,iBAAiB;AACjB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5D,kBAAkB;AAClB,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAc5D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAahE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,eAAe;AACf,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAQvB,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAcrC,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG9D,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,eAAe;AACf,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,mCAAmC;AACnC,EAAE;AACF,4EAA4E;AAC5E,8DAA8D;AAC9D,2DAA2D;AAC3D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAe;AACf,OAAO,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,SAAS,EACT,KAAK,EACL,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,oBAAoB;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAa5B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C,iBAAiB;AACjB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,kBAAkB;AAClB,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,GACT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5D,oEAAoE;AACpE,qEAAqE;AACrE,uEAAuE;AACvE,8DAA8D;AAC9D,kEAAkE;AAClE,+BAA+B;AAC/B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAcrD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAezC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,eAAe;AACf,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAQvB,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAYrC,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG9D,sBAAsB;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,mCAAmC;AACnC,EAAE;AACF,4EAA4E;AAC5E,8DAA8D;AAC9D,2DAA2D;AAC3D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Mado — public API.\n *\n * Import everything from one place:\n * import { signal, computed, effect, component, html, router } from \"@madojs/mado\";\n *\n * Vite is the canonical transport: every official starter, generator\n * and CLI command resolves `@madojs/mado` from `node_modules` through\n * the Vite plugin (`@madojs/mado/vite`). Native ESM consumers (tests,\n * partial-SSR probes) get the same surface area; anything that touches\n * `import.meta.env.BASE_URL` falls back to \"/\" outside Vite.\n */\n\n// --- core ---\nexport {\n signal,\n computed,\n effect,\n untracked,\n batch,\n flushSync,\n} from \"./signal.js\";\nexport type { Signal, Computed, ComputedOptions, Disposer } from \"./signal.js\";\n\n// --- rendering ---\nexport { html, render, unmount } from \"./html/template.js\";\nexport {\n unsafeHTML,\n ref,\n classMap,\n styleMap,\n} from \"./html/bindings.js\";\nexport type { TemplateResult } from \"./html/template-types.js\";\nexport type {\n HtmlDirective,\n UnsafeHTMLDirective,\n RefCallback,\n RefDirective,\n ClassMap,\n ClassMapDirective,\n StyleMap,\n StyleMapDirective,\n} from \"./html/bindings.js\";\n\nexport { each } from \"./each.js\";\n\n// --- components ---\nexport { component } from \"./component.js\";\nexport type {\n ComponentContext,\n ComponentOptions,\n SetupFn,\n StyleInput,\n} from \"./component.js\";\n\n// --- styles ---\nexport { css, cssVars } from \"./css.js\";\nexport type { CSSResult } from \"./css.js\";\n\n// --- routing ---\nexport {\n router,\n queryParam,\n navigate,\n} from \"./router/navigation.js\";\nexport { routes, prefetchPath } from \"./router/manifest.js\";\n// Application code should use `routeUrl()` exclusively for building\n// internal links. `appBase` is exposed for integrations that need to\n// read the active prefix (e.g. building absolute canonical URLs from a\n// component). `normalizeBase`, `stripBase` and `withBase` are\n// implementation details: they remain unexported until a concrete\n// downstream use case appears.\nexport { appBase, routeUrl } from \"./router/base.js\";\nexport type {\n RouterApi,\n QueryParam,\n QuerySignal,\n} from \"./router/navigation.js\";\nexport type {\n RouteHandler,\n RouteParams,\n Routes,\n RoutesMap,\n} from \"./router/match.js\";\nexport type { RoutesOptions } from \"./router/manifest.js\";\n\nexport { page, layout } from \"./page.js\";\nexport type {\n Page,\n PageContext,\n PageData,\n RouteEntry,\n LayoutRoutes,\n HeadMeta,\n StaticPageConfig,\n Guard,\n GuardResult,\n JsonPrimitive,\n JsonValue,\n} from \"./page.js\";\n\nexport { applyHead } from \"./head.js\";\n\n// --- data ---\nexport {\n resource,\n mutation,\n invalidate,\n jsonFetcher,\n HttpError,\n} from \"./resource.js\";\nexport type {\n Resource,\n ResourceOptions,\n Mutation,\n MutationOptions,\n} from \"./resource.js\";\n\n// --- forms ---\nexport { useForm } from \"./forms.js\";\nexport type {\n FormApi,\n FormValue,\n FormValues,\n FormErrors,\n FormTouched,\n FormValidator,\n FormValidationContext,\n UseFormOptions,\n} from \"./forms.js\";\n\n// --- DI ---\nexport { createContext, provide, inject } from \"./context.js\";\nexport type { Context } from \"./context.js\";\n\n// --- persistence ---\nexport { persisted } from \"./persisted.js\";\nexport type { PersistedOptions, PersistedSignal } from \"./persisted.js\";\n\n// --- lifecycle (advanced API) ---\n//\n// Normally you don't need this: inside component() the lifecycle is created\n// automatically. Only needed if you want to use resource() or\n// other helpers outside a component and still get cleanup.\nexport {\n getCurrentLifecycle,\n runInLifecycle,\n createLifecycle,\n} from \"./lifecycle.js\";\nexport type { Lifecycle, LifecycleHandle } from \"./lifecycle.js\";\n"]}
@@ -0,0 +1,3 @@
1
+ /** Serialize JSON for an inline script text context without allowing `</script>`. */
2
+ export declare function serializeJsonForScript(value: unknown): string;
3
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAW7D"}
@@ -0,0 +1,14 @@
1
+ /** Serialize JSON for an inline script text context without allowing `</script>`. */
2
+ export function serializeJsonForScript(value) {
3
+ const json = JSON.stringify(value);
4
+ if (json === undefined) {
5
+ throw new TypeError("value cannot be serialized as JSON");
6
+ }
7
+ return json
8
+ .replace(/</g, "\\u003C")
9
+ .replace(/>/g, "\\u003E")
10
+ .replace(/&/g, "\\u0026")
11
+ .replace(/\u2028/g, "\\u2028")
12
+ .replace(/\u2029/g, "\\u2029");
13
+ }
14
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/json.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC;SACxB,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;SAC7B,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/** Serialize JSON for an inline script text context without allowing `</script>`. */\nexport function serializeJsonForScript(value: unknown): string {\n const json = JSON.stringify(value);\n if (json === undefined) {\n throw new TypeError(\"value cannot be serialized as JSON\");\n }\n return json\n .replace(/</g, \"\\\\u003C\")\n .replace(/>/g, \"\\\\u003E\")\n .replace(/&/g, \"\\\\u0026\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n"]}
@@ -43,3 +43,4 @@ export interface LifecycleHandle extends Lifecycle {
43
43
  dispose(): void;
44
44
  }
45
45
  export declare function createLifecycle(): LifecycleHandle;
46
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,WAAW,SAAS;IACxB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC/B;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,GAAG,IAAI,CAEtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ/D;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,eAAe,IAAI,eAAe,CAmCjD"}
@@ -20,6 +20,7 @@
20
20
  * if (lc) lc.onDispose(() => abort.abort());
21
21
  * else console.warn('[mado] resource() outside component — cleanup must be manual');
22
22
  */
23
+ import { reportError } from "./diagnostics.js";
23
24
  let current = null;
24
25
  /**
25
26
  * Return the currently active lifecycle, or null if code runs
@@ -57,7 +58,7 @@ export function createLifecycle() {
57
58
  }
58
59
  catch (err) {
59
60
  // eslint-disable-next-line no-console
60
- console.error("[mado] cleanup threw:", err);
61
+ reportError("lifecycle", "cleanup", "cleanup threw", err);
61
62
  }
62
63
  return;
63
64
  }
@@ -74,7 +75,7 @@ export function createLifecycle() {
74
75
  }
75
76
  catch (err) {
76
77
  // eslint-disable-next-line no-console
77
- console.error("[mado] cleanup threw:", err);
78
+ reportError("lifecycle", "cleanup", "cleanup threw", err);
78
79
  }
79
80
  }
80
81
  disposers.length = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,IAAI,OAAO,GAAqB,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,EAAa,EAAE,EAAW;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC;IACrB,OAAO,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,SAAS,CAAC,EAAE;YACV,oEAAoE;YACpE,qEAAqE;YACrE,wEAAwE;YACxE,wDAAwD;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,EAAE,EAAE,CAAC;gBACP,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO;YACT,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,qCAAqC;YACrC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;gBAClB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAO/C,IAAI,OAAO,GAAqB,IAAI,CAAC;AAErC;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAI,EAAa,EAAE,EAAW;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC;IACrB,OAAO,GAAG,EAAE,CAAC;IACb,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;AACH,CAAC;AAUD,MAAM,UAAU,eAAe;IAC7B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,SAAS,CAAC,EAAE;YACV,oEAAoE;YACpE,qEAAqE;YACrE,wEAAwE;YACxE,wDAAwD;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC;oBACH,EAAE,EAAE,CAAC;gBACP,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC;gBACD,OAAO;YACT,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,qCAAqC;YACrC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,IAAI,CAAC;oBACH,SAAS,CAAC,CAAC,CAAE,EAAE,CAAC;gBAClB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,sCAAsC;oBACtC,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YACD,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Lifecycle context for auto-cleanup of resources inside a component.\n *\n * Core idea: when a component-setup runs, we push the current\n * \"lifecycle\" — an object with onDispose() — onto a module-local stack.\n * Any function like resource() that creates long-lived subscriptions\n * (timers, listeners, network subscriptions) can call getCurrentLifecycle()\n * and register its own cleanup.\n *\n * This avoids leaks on component unmount — without explicitly threading\n * ComponentContext into every helper.\n *\n * Usage:\n *\n * // in component.ts\n * runInLifecycle(myLifecycle, () => setup(ctx));\n *\n * // in resource.ts\n * const lc = getCurrentLifecycle();\n * if (lc) lc.onDispose(() => abort.abort());\n * else console.warn('[mado] resource() outside component — cleanup must be manual');\n */\n\nimport type { Disposer } from \"./signal.js\";\nimport { reportError } from \"./diagnostics.js\";\n\nexport interface Lifecycle {\n /** Register a cleanup function. Called when the lifecycle is disposed. */\n onDispose(fn: Disposer): void;\n}\n\nlet current: Lifecycle | null = null;\n\n/**\n * Return the currently active lifecycle, or null if code runs\n * outside a component setup.\n */\nexport function getCurrentLifecycle(): Lifecycle | null {\n return current;\n}\n\n/**\n * Execute fn with the given lifecycle set. Supports nesting:\n * the previous lifecycle is restored after fn returns (including exceptions).\n */\nexport function runInLifecycle<T>(lc: Lifecycle, fn: () => T): T {\n const prev = current;\n current = lc;\n try {\n return fn();\n } finally {\n current = prev;\n }\n}\n\n/**\n * Create a new lifecycle. Returns the Lifecycle interface and a\n * dispose() method that runs all registered cleanup callbacks.\n */\nexport interface LifecycleHandle extends Lifecycle {\n dispose(): void;\n}\n\nexport function createLifecycle(): LifecycleHandle {\n const disposers: Disposer[] = [];\n let disposed = false;\n return {\n onDispose(fn) {\n // If the lifecycle is already disposed, run the cleanup immediately\n // rather than dropping it silently. Async page code that registers a\n // cleanup after navigation (e.g. in a resolved promise) still gets torn\n // down. Matches Solid/Vue. (FABLE_REPORT.md finding #9)\n if (disposed) {\n try {\n fn();\n } catch (err) {\n // eslint-disable-next-line no-console\n reportError(\"lifecycle\", \"cleanup\", \"cleanup threw\", err);\n }\n return;\n }\n disposers.push(fn);\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n // reverse order — LIFO, like a stack\n for (let i = disposers.length - 1; i >= 0; i--) {\n try {\n disposers[i]!();\n } catch (err) {\n // eslint-disable-next-line no-console\n reportError(\"lifecycle\", \"cleanup\", \"cleanup threw\", err);\n }\n }\n disposers.length = 0;\n },\n };\n}\n"]}