@ecopages/radiant 0.3.0-beta.0 → 0.3.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (578) hide show
  1. package/README.md +5 -5
  2. package/client/app-bootstrap.js +3 -0
  3. package/{dist/client → client}/app-bootstrap.js.map +2 -2
  4. package/client/hydrator.js +3 -0
  5. package/{dist/client → client}/hydrator.js.map +2 -2
  6. package/client/install-hydrator.js +3 -0
  7. package/{dist/client → client}/install-hydrator.js.map +2 -2
  8. package/context/context-consumer-bootstrap.js +3 -0
  9. package/{dist/context → context}/context-consumer-bootstrap.js.map +4 -4
  10. package/context/context-consumer-runtime.js +3 -0
  11. package/context/context-consumer-runtime.js.map +12 -0
  12. package/context/context-host.js +3 -0
  13. package/{dist/context → context}/context-host.js.map +2 -2
  14. package/context/context-provider.js +3 -0
  15. package/{dist/context → context}/context-provider.js.map +3 -3
  16. package/context/context-ssr-bridge.js +3 -0
  17. package/{dist/context → context}/context-ssr-bridge.js.map +2 -2
  18. package/context/create-context.js +3 -0
  19. package/{dist/context → context}/create-context.js.map +2 -2
  20. package/context/decorators/consume-context.js +3 -0
  21. package/{dist/context → context}/decorators/consume-context.js.map +5 -5
  22. package/context/decorators/context-selection-delivery.js +3 -0
  23. package/{dist/context → context}/decorators/context-selection-delivery.js.map +2 -2
  24. package/context/decorators/context-selector.js +3 -0
  25. package/{dist/context → context}/decorators/context-selector.js.map +6 -6
  26. package/context/decorators/legacy/consume-context.js +3 -0
  27. package/context/decorators/legacy/consume-context.js.map +16 -0
  28. package/context/decorators/legacy/context-selector-field.js +3 -0
  29. package/context/decorators/legacy/context-selector-field.js.map +17 -0
  30. package/context/decorators/legacy/context-selector.js +3 -0
  31. package/context/decorators/legacy/context-selector.js.map +17 -0
  32. package/context/decorators/legacy/provide-context.js +3 -0
  33. package/{dist/context → context}/decorators/legacy/provide-context.js.map +4 -4
  34. package/context/decorators/on-context-update.js +3 -0
  35. package/{dist/context → context}/decorators/on-context-update.js.map +5 -5
  36. package/context/decorators/provide-context.js +3 -0
  37. package/{dist/context → context}/decorators/provide-context.js.map +4 -4
  38. package/context/decorators/standard/consume-context.js +3 -0
  39. package/{dist/context → context}/decorators/standard/consume-context.js.map +4 -4
  40. package/context/decorators/standard/context-selector-field.js +3 -0
  41. package/{dist/context → context}/decorators/standard/context-selector-field.js.map +4 -4
  42. package/context/decorators/standard/context-selector.js +3 -0
  43. package/{dist/context → context}/decorators/standard/context-selector.js.map +4 -4
  44. package/context/decorators/standard/provide-context.js +3 -0
  45. package/{dist/context → context}/decorators/standard/provide-context.js.map +3 -3
  46. package/context/decorators/standard-legacy-dispatch.js +3 -0
  47. package/context/decorators/standard-legacy-dispatch.js.map +10 -0
  48. package/context/events.js +3 -0
  49. package/context/events.js.map +10 -0
  50. package/context/hydration-script.js +3 -0
  51. package/{dist/context → context}/hydration-script.js.map +2 -2
  52. package/context/index.js +3 -0
  53. package/{dist/context → context}/index.js.map +6 -6
  54. package/controller-registry.js +3 -0
  55. package/{dist/controller-registry.js.map → controller-registry.js.map} +3 -3
  56. package/core/controller-metadata.js +3 -0
  57. package/{dist/core → core}/controller-metadata.js.map +2 -2
  58. package/core/custom-element-metadata.js +3 -0
  59. package/{dist/core → core}/custom-element-metadata.js.map +2 -2
  60. package/core/event-subscription-registry.js +3 -0
  61. package/{dist/core → core}/event-subscription-registry.js.map +2 -2
  62. package/core/host-ssr-registry.js +3 -0
  63. package/{dist/core → core}/host-ssr-registry.js.map +2 -2
  64. package/core/hydration-capable-host.js +3 -0
  65. package/{dist/core → core}/hydration-capable-host.js.map +2 -2
  66. package/core/hydration-codec.js +3 -0
  67. package/{dist/core → core}/hydration-codec.js.map +2 -2
  68. package/{dist/core → core}/radiant-controller.d.ts +7 -5
  69. package/core/radiant-controller.js +3 -0
  70. package/core/radiant-controller.js.map +21 -0
  71. package/core/radiant-element-ssr-host.js +3 -0
  72. package/{dist/core → core}/radiant-element-ssr-host.js.map +2 -2
  73. package/{dist/core → core}/radiant-element-ssr-registry.d.ts +4 -2
  74. package/core/radiant-element-ssr-registry.js +3 -0
  75. package/core/radiant-element-ssr-registry.js.map +10 -0
  76. package/{dist/core → core}/radiant-element.d.ts +18 -15
  77. package/core/radiant-element.js +3 -0
  78. package/core/radiant-element.js.map +31 -0
  79. package/core/radiant-hydrator-state.js +3 -0
  80. package/{dist/core → core}/radiant-hydrator-state.js.map +2 -2
  81. package/core/reactive-binding-adapter.d.ts +10 -0
  82. package/core/reactive-binding-adapter.js +3 -0
  83. package/core/reactive-binding-adapter.js.map +10 -0
  84. package/core/reactive-host.d.ts +138 -0
  85. package/core/reactive-host.js +3 -0
  86. package/core/reactive-host.js.map +13 -0
  87. package/{dist/core → core}/reactive-jsx-value.d.ts +2 -2
  88. package/core/reactive-jsx-value.js +3 -0
  89. package/core/reactive-jsx-value.js.map +10 -0
  90. package/{dist/core → core}/reactive-prop-core.d.ts +6 -11
  91. package/core/reactive-prop-core.js +3 -0
  92. package/{dist/core → core}/reactive-prop-core.js.map +3 -3
  93. package/core/reactive-prop-metadata.js +3 -0
  94. package/{dist/core → core}/reactive-prop-metadata.js.map +2 -2
  95. package/{dist/core → core}/reactive-property-state.d.ts +5 -2
  96. package/core/reactive-property-state.js +3 -0
  97. package/core/reactive-property-state.js.map +12 -0
  98. package/core/reactivity-adapter.js +3 -0
  99. package/core/reactivity-adapter.js.map +12 -0
  100. package/{dist/core → core}/reactivity-contract.d.ts +14 -0
  101. package/core/reactivity-runtime.js +3 -0
  102. package/core/reactivity-runtime.js.map +11 -0
  103. package/core/reactivity-signals.js +3 -0
  104. package/core/reactivity-signals.js.map +10 -0
  105. package/core/render-runtime.js +3 -0
  106. package/{dist/core → core}/render-runtime.js.map +3 -3
  107. package/core/render-scheduler.js +3 -0
  108. package/{dist/core → core}/render-scheduler.js.map +2 -2
  109. package/core/slot-projection-runtime.js +3 -0
  110. package/{dist/core → core}/slot-projection-runtime.js.map +2 -2
  111. package/core/ssr-preparation.js +3 -0
  112. package/{dist/core → core}/ssr-preparation.js.map +2 -2
  113. package/decorators/attr.js +3 -0
  114. package/decorators/attr.js.map +18 -0
  115. package/decorators/bound.js +3 -0
  116. package/{dist/decorators → decorators}/bound.js.map +2 -2
  117. package/decorators/bridge.js +3 -0
  118. package/{dist/decorators → decorators}/bridge.js.map +2 -2
  119. package/decorators/controller.js +3 -0
  120. package/{dist/decorators → decorators}/controller.js.map +3 -3
  121. package/decorators/custom-element.js +3 -0
  122. package/{dist/decorators → decorators}/custom-element.js.map +2 -2
  123. package/decorators/debounce.js +3 -0
  124. package/{dist/decorators → decorators}/debounce.js.map +2 -2
  125. package/decorators/event.js +3 -0
  126. package/{dist/decorators → decorators}/event.js.map +3 -3
  127. package/decorators/legacy/attr.js +3 -0
  128. package/decorators/legacy/attr.js.map +15 -0
  129. package/decorators/legacy/bound.js +3 -0
  130. package/{dist/decorators → decorators}/legacy/bound.js.map +2 -2
  131. package/decorators/legacy/custom-element.js +3 -0
  132. package/{dist/decorators → decorators}/legacy/custom-element.js.map +2 -2
  133. package/decorators/legacy/debounce.js +3 -0
  134. package/{dist/decorators → decorators}/legacy/debounce.js.map +2 -2
  135. package/decorators/legacy/event.js +3 -0
  136. package/decorators/legacy/event.js.map +13 -0
  137. package/decorators/legacy/host-readiness.js +3 -0
  138. package/decorators/legacy/host-readiness.js.map +11 -0
  139. package/{dist/decorators → decorators}/legacy/instance-initializers.d.ts +4 -2
  140. package/decorators/legacy/instance-initializers.js +3 -0
  141. package/decorators/legacy/instance-initializers.js.map +10 -0
  142. package/decorators/legacy/member-bootstrap.d.ts +10 -0
  143. package/decorators/legacy/member-bootstrap.js +3 -0
  144. package/decorators/legacy/member-bootstrap.js.map +10 -0
  145. package/decorators/legacy/on-event.js +3 -0
  146. package/{dist/decorators → decorators}/legacy/on-event.js.map +3 -3
  147. package/decorators/legacy/on-updated.js +3 -0
  148. package/decorators/legacy/on-updated.js.map +11 -0
  149. package/decorators/legacy/query-slot.js +3 -0
  150. package/decorators/legacy/query-slot.js.map +13 -0
  151. package/decorators/legacy/query.js +3 -0
  152. package/decorators/legacy/query.js.map +12 -0
  153. package/decorators/legacy/reactive-field.js +3 -0
  154. package/decorators/legacy/reactive-field.js.map +13 -0
  155. package/{dist/decorators → decorators}/legacy/reactive-prop.d.ts +0 -1
  156. package/decorators/legacy/reactive-prop.js +3 -0
  157. package/decorators/legacy/reactive-prop.js.map +15 -0
  158. package/decorators/legacy/signal.js +3 -0
  159. package/decorators/legacy/signal.js.map +17 -0
  160. package/decorators/on-event.js +3 -0
  161. package/{dist/decorators → decorators}/on-event.js.map +3 -3
  162. package/decorators/on-updated.js +3 -0
  163. package/{dist/decorators → decorators}/on-updated.js.map +3 -3
  164. package/{dist/decorators → decorators}/prop.d.ts +4 -5
  165. package/decorators/prop.js +3 -0
  166. package/decorators/prop.js.map +18 -0
  167. package/decorators/query-slot.js +3 -0
  168. package/{dist/decorators → decorators}/query-slot.js.map +3 -3
  169. package/decorators/query.js +3 -0
  170. package/{dist/decorators → decorators}/query.js.map +3 -3
  171. package/decorators/shared/auto-bind.d.ts +7 -0
  172. package/decorators/shared/auto-bind.js +3 -0
  173. package/decorators/shared/auto-bind.js.map +10 -0
  174. package/decorators/shared/reactive-attr.js +3 -0
  175. package/decorators/shared/reactive-attr.js.map +13 -0
  176. package/decorators/signal.js +3 -0
  177. package/decorators/signal.js.map +19 -0
  178. package/decorators/standard/attr.js +3 -0
  179. package/decorators/standard/attr.js.map +14 -0
  180. package/decorators/standard/bound.js +3 -0
  181. package/{dist/decorators → decorators}/standard/bound.js.map +2 -2
  182. package/decorators/standard/custom-element.js +3 -0
  183. package/{dist/decorators → decorators}/standard/custom-element.js.map +2 -2
  184. package/decorators/standard/debounce.js +3 -0
  185. package/{dist/decorators → decorators}/standard/debounce.js.map +2 -2
  186. package/decorators/standard/event.js +3 -0
  187. package/{dist/decorators → decorators}/standard/event.js.map +2 -2
  188. package/decorators/standard/on-event.js +3 -0
  189. package/{dist/decorators → decorators}/standard/on-event.js.map +2 -2
  190. package/decorators/standard/on-updated.js +3 -0
  191. package/{dist/decorators → decorators}/standard/on-updated.js.map +2 -2
  192. package/decorators/standard/query-slot.js +3 -0
  193. package/{dist/decorators → decorators}/standard/query-slot.js.map +2 -2
  194. package/decorators/standard/query.js +3 -0
  195. package/{dist/decorators → decorators}/standard/query.js.map +2 -2
  196. package/decorators/standard/reactive-field.js +3 -0
  197. package/decorators/standard/reactive-field.js.map +11 -0
  198. package/decorators/standard/reactive-prop.js +3 -0
  199. package/{dist/decorators → decorators}/standard/reactive-prop.js.map +4 -4
  200. package/decorators/standard/signal.js +3 -0
  201. package/decorators/standard/signal.js.map +16 -0
  202. package/{dist/decorators → decorators}/state.d.ts +3 -2
  203. package/decorators/state.js +3 -0
  204. package/decorators/state.js.map +16 -0
  205. package/helpers/create-event-listener.js +3 -0
  206. package/{dist/helpers → helpers}/create-event-listener.js.map +2 -2
  207. package/helpers/create-event.js +3 -0
  208. package/{dist/helpers → helpers}/create-event.js.map +2 -2
  209. package/helpers/create-query-slot.js +3 -0
  210. package/{dist/helpers → helpers}/create-query-slot.js.map +2 -2
  211. package/helpers/create-query.js +3 -0
  212. package/{dist/helpers → helpers}/create-query.js.map +2 -2
  213. package/helpers/debounce.js +3 -0
  214. package/{dist/helpers → helpers}/debounce.js.map +2 -2
  215. package/helpers/index.js +3 -0
  216. package/{dist/helpers → helpers}/index.js.map +2 -2
  217. package/index.js +3 -0
  218. package/index.js.map +86 -0
  219. package/package.json +99 -129
  220. package/server/context-ssr.js +3 -0
  221. package/{dist/server → server}/context-ssr.js.map +2 -2
  222. package/server/host-attribute-serialization.js +3 -0
  223. package/{dist/server → server}/host-attribute-serialization.js.map +5 -5
  224. package/server/host-script-composition.js +3 -0
  225. package/{dist/server → server}/host-script-composition.js.map +2 -2
  226. package/server/html-parser.js +3 -0
  227. package/{dist/server → server}/html-parser.js.map +2 -2
  228. package/server/install-light-dom-shim.js +3 -0
  229. package/server/install-light-dom-shim.js.map +17 -0
  230. package/server/internal-radiant-host.js +3 -0
  231. package/{dist/server → server}/internal-radiant-host.js.map +1 -1
  232. package/server/light-dom-shim.d.ts +2 -0
  233. package/server/light-dom-shim.js +3 -0
  234. package/server/light-dom-shim.js.map +16 -0
  235. package/server/minimal-dom/document.d.ts +17 -0
  236. package/server/minimal-dom/document.js +3 -0
  237. package/server/minimal-dom/document.js.map +14 -0
  238. package/server/minimal-dom/html.d.ts +7 -0
  239. package/server/minimal-dom/html.js +3 -0
  240. package/server/minimal-dom/html.js.map +13 -0
  241. package/{dist/server/light-dom-shim.d.ts → server/minimal-dom/install.d.ts} +1 -4
  242. package/server/minimal-dom/install.js +3 -0
  243. package/server/minimal-dom/install.js.map +16 -0
  244. package/server/minimal-dom/nodes.d.ts +78 -0
  245. package/server/project-root.js +3 -0
  246. package/{dist/server → server}/project-root.js.map +2 -2
  247. package/server/radiant-element-ssr-bridge.js +3 -0
  248. package/{dist/server → server}/radiant-element-ssr-bridge.js.map +9 -9
  249. package/server/radiant-element-ssr-extractor.js +3 -0
  250. package/{dist/server → server}/radiant-element-ssr-extractor.js.map +3 -3
  251. package/server/radiant-element-ssr-service.js +3 -0
  252. package/{dist/server → server}/radiant-element-ssr-service.js.map +8 -8
  253. package/server/radiant-element-ssr.js +3 -0
  254. package/{dist/server → server}/radiant-element-ssr.js.map +9 -9
  255. package/{dist/server → server}/render-component.d.ts +1 -1
  256. package/server/render-component.js +3 -0
  257. package/server/render-component.js.map +32 -0
  258. package/server/render-controller.js +3 -0
  259. package/server/render-controller.js.map +35 -0
  260. package/server/render-fragment.js +3 -0
  261. package/server/render-fragment.js.map +10 -0
  262. package/server/slot-projection-html.js +3 -0
  263. package/{dist/server → server}/slot-projection-html.js.map +4 -4
  264. package/signals/host-resource.js +3 -0
  265. package/{dist/signals → signals}/host-resource.js.map +2 -2
  266. package/{dist/signals → signals}/host-signal.d.ts +2 -1
  267. package/signals/host-signal.js +3 -0
  268. package/signals/host-signal.js.map +13 -0
  269. package/signals/hydration-script.js +3 -0
  270. package/{dist/signals → signals}/hydration-script.js.map +2 -2
  271. package/tools/escape-css-identifier.js +3 -0
  272. package/{dist/tools → tools}/escape-css-identifier.js.map +2 -2
  273. package/tools/escape-script-json.js +3 -0
  274. package/{dist/tools → tools}/escape-script-json.js.map +2 -2
  275. package/tools/event-emitter.js +3 -0
  276. package/{dist/tools → tools}/event-emitter.js.map +2 -2
  277. package/tools/index.js +3 -0
  278. package/{dist/tools → tools}/index.js.map +2 -2
  279. package/tools/render-jsx-template.js +3 -0
  280. package/{dist/tools → tools}/render-jsx-template.js.map +2 -2
  281. package/types.js +3 -0
  282. package/{dist/types.js.map → types.js.map} +2 -2
  283. package/utils/attribute-utils.js +3 -0
  284. package/{dist/utils → utils}/attribute-utils.js.map +2 -2
  285. package/utils/escape-html-attribute.js +3 -0
  286. package/{dist/utils → utils}/escape-html-attribute.js.map +2 -2
  287. package/utils/index.js +3 -0
  288. package/{dist/utils → utils}/index.js.map +2 -2
  289. package/dist/LICENSE +0 -21
  290. package/dist/README.md +0 -315
  291. package/dist/client/app-bootstrap.js +0 -3
  292. package/dist/client/hydrator.js +0 -3
  293. package/dist/client/install-hydrator.js +0 -3
  294. package/dist/context/context-consumer-bootstrap.js +0 -3
  295. package/dist/context/context-consumer-runtime.js +0 -3
  296. package/dist/context/context-consumer-runtime.js.map +0 -12
  297. package/dist/context/context-host.js +0 -3
  298. package/dist/context/context-provider.js +0 -3
  299. package/dist/context/context-ssr-bridge.js +0 -3
  300. package/dist/context/create-context.js +0 -3
  301. package/dist/context/decorators/consume-context.js +0 -3
  302. package/dist/context/decorators/context-selection-delivery.js +0 -3
  303. package/dist/context/decorators/context-selector.js +0 -3
  304. package/dist/context/decorators/legacy/consume-context.js +0 -3
  305. package/dist/context/decorators/legacy/consume-context.js.map +0 -16
  306. package/dist/context/decorators/legacy/context-selector-field.js +0 -3
  307. package/dist/context/decorators/legacy/context-selector-field.js.map +0 -17
  308. package/dist/context/decorators/legacy/context-selector.js +0 -3
  309. package/dist/context/decorators/legacy/context-selector.js.map +0 -17
  310. package/dist/context/decorators/legacy/provide-context.js +0 -3
  311. package/dist/context/decorators/on-context-update.js +0 -3
  312. package/dist/context/decorators/provide-context.js +0 -3
  313. package/dist/context/decorators/standard/consume-context.js +0 -3
  314. package/dist/context/decorators/standard/context-selector-field.js +0 -3
  315. package/dist/context/decorators/standard/context-selector.js +0 -3
  316. package/dist/context/decorators/standard/provide-context.js +0 -3
  317. package/dist/context/decorators/standard-legacy-dispatch.js +0 -3
  318. package/dist/context/decorators/standard-legacy-dispatch.js.map +0 -10
  319. package/dist/context/events.js +0 -3
  320. package/dist/context/events.js.map +0 -10
  321. package/dist/context/hydration-script.js +0 -3
  322. package/dist/context/index.js +0 -3
  323. package/dist/controller-registry.js +0 -3
  324. package/dist/core/controller-metadata.js +0 -3
  325. package/dist/core/custom-element-metadata.js +0 -3
  326. package/dist/core/event-subscription-registry.js +0 -3
  327. package/dist/core/host-ssr-registry.js +0 -3
  328. package/dist/core/hydration-capable-host.js +0 -3
  329. package/dist/core/hydration-codec.js +0 -3
  330. package/dist/core/radiant-controller.js +0 -3
  331. package/dist/core/radiant-controller.js.map +0 -20
  332. package/dist/core/radiant-element-ssr-host.js +0 -3
  333. package/dist/core/radiant-element-ssr-registry.js +0 -3
  334. package/dist/core/radiant-element-ssr-registry.js.map +0 -10
  335. package/dist/core/radiant-element.js +0 -3
  336. package/dist/core/radiant-element.js.map +0 -30
  337. package/dist/core/radiant-hydrator-state.js +0 -3
  338. package/dist/core/reactive-host.d.ts +0 -124
  339. package/dist/core/reactive-host.js +0 -3
  340. package/dist/core/reactive-host.js.map +0 -13
  341. package/dist/core/reactive-jsx-value.js +0 -3
  342. package/dist/core/reactive-jsx-value.js.map +0 -10
  343. package/dist/core/reactive-prop-core.js +0 -3
  344. package/dist/core/reactive-prop-metadata.js +0 -3
  345. package/dist/core/reactive-property-state.js +0 -3
  346. package/dist/core/reactive-property-state.js.map +0 -12
  347. package/dist/core/reactivity-adapter.js +0 -3
  348. package/dist/core/reactivity-adapter.js.map +0 -12
  349. package/dist/core/reactivity-runtime.js +0 -3
  350. package/dist/core/reactivity-runtime.js.map +0 -11
  351. package/dist/core/reactivity-signals.js +0 -3
  352. package/dist/core/reactivity-signals.js.map +0 -10
  353. package/dist/core/render-runtime.js +0 -3
  354. package/dist/core/render-scheduler.js +0 -3
  355. package/dist/core/slot-projection-runtime.js +0 -3
  356. package/dist/core/ssr-preparation.js +0 -3
  357. package/dist/decorators/attr.js +0 -3
  358. package/dist/decorators/attr.js.map +0 -17
  359. package/dist/decorators/bound.js +0 -3
  360. package/dist/decorators/bridge.js +0 -3
  361. package/dist/decorators/controller.js +0 -3
  362. package/dist/decorators/custom-element.js +0 -3
  363. package/dist/decorators/debounce.js +0 -3
  364. package/dist/decorators/event.js +0 -3
  365. package/dist/decorators/legacy/attr.js +0 -3
  366. package/dist/decorators/legacy/attr.js.map +0 -14
  367. package/dist/decorators/legacy/bound.js +0 -3
  368. package/dist/decorators/legacy/custom-element.js +0 -3
  369. package/dist/decorators/legacy/debounce.js +0 -3
  370. package/dist/decorators/legacy/event.js +0 -3
  371. package/dist/decorators/legacy/event.js.map +0 -13
  372. package/dist/decorators/legacy/host-readiness.js +0 -3
  373. package/dist/decorators/legacy/host-readiness.js.map +0 -11
  374. package/dist/decorators/legacy/instance-initializers.js +0 -3
  375. package/dist/decorators/legacy/instance-initializers.js.map +0 -10
  376. package/dist/decorators/legacy/on-event.js +0 -3
  377. package/dist/decorators/legacy/on-updated.js +0 -3
  378. package/dist/decorators/legacy/on-updated.js.map +0 -11
  379. package/dist/decorators/legacy/query-slot.js +0 -3
  380. package/dist/decorators/legacy/query-slot.js.map +0 -13
  381. package/dist/decorators/legacy/query.js +0 -3
  382. package/dist/decorators/legacy/query.js.map +0 -12
  383. package/dist/decorators/legacy/reactive-field.js +0 -3
  384. package/dist/decorators/legacy/reactive-field.js.map +0 -11
  385. package/dist/decorators/legacy/reactive-prop.js +0 -3
  386. package/dist/decorators/legacy/reactive-prop.js.map +0 -14
  387. package/dist/decorators/legacy/signal.js +0 -3
  388. package/dist/decorators/legacy/signal.js.map +0 -16
  389. package/dist/decorators/on-event.js +0 -3
  390. package/dist/decorators/on-updated.js +0 -3
  391. package/dist/decorators/prop.js +0 -3
  392. package/dist/decorators/prop.js.map +0 -17
  393. package/dist/decorators/query-slot.js +0 -3
  394. package/dist/decorators/query.js +0 -3
  395. package/dist/decorators/shared/reactive-attr.js +0 -3
  396. package/dist/decorators/shared/reactive-attr.js.map +0 -12
  397. package/dist/decorators/signal.js +0 -3
  398. package/dist/decorators/signal.js.map +0 -18
  399. package/dist/decorators/standard/attr.js +0 -3
  400. package/dist/decorators/standard/attr.js.map +0 -13
  401. package/dist/decorators/standard/bound.js +0 -3
  402. package/dist/decorators/standard/custom-element.js +0 -3
  403. package/dist/decorators/standard/debounce.js +0 -3
  404. package/dist/decorators/standard/event.js +0 -3
  405. package/dist/decorators/standard/on-event.js +0 -3
  406. package/dist/decorators/standard/on-updated.js +0 -3
  407. package/dist/decorators/standard/query-slot.js +0 -3
  408. package/dist/decorators/standard/query.js +0 -3
  409. package/dist/decorators/standard/reactive-field.js +0 -3
  410. package/dist/decorators/standard/reactive-field.js.map +0 -10
  411. package/dist/decorators/standard/reactive-prop.js +0 -3
  412. package/dist/decorators/standard/signal.js +0 -3
  413. package/dist/decorators/standard/signal.js.map +0 -15
  414. package/dist/decorators/state.js +0 -3
  415. package/dist/decorators/state.js.map +0 -14
  416. package/dist/helpers/create-event-listener.js +0 -3
  417. package/dist/helpers/create-event.js +0 -3
  418. package/dist/helpers/create-query-slot.js +0 -3
  419. package/dist/helpers/create-query.js +0 -3
  420. package/dist/helpers/debounce.js +0 -3
  421. package/dist/helpers/index.js +0 -3
  422. package/dist/index.js +0 -3
  423. package/dist/index.js.map +0 -83
  424. package/dist/package.json +0 -209
  425. package/dist/server/context-ssr.js +0 -3
  426. package/dist/server/host-attribute-serialization.js +0 -3
  427. package/dist/server/host-script-composition.js +0 -3
  428. package/dist/server/html-parser.js +0 -3
  429. package/dist/server/install-light-dom-shim.js +0 -3
  430. package/dist/server/install-light-dom-shim.js.map +0 -12
  431. package/dist/server/internal-radiant-host.js +0 -3
  432. package/dist/server/light-dom-shim.js +0 -3
  433. package/dist/server/light-dom-shim.js.map +0 -11
  434. package/dist/server/project-root.js +0 -3
  435. package/dist/server/radiant-element-ssr-bridge.js +0 -3
  436. package/dist/server/radiant-element-ssr-extractor.js +0 -3
  437. package/dist/server/radiant-element-ssr-service.js +0 -3
  438. package/dist/server/radiant-element-ssr.js +0 -3
  439. package/dist/server/render-component.js +0 -3
  440. package/dist/server/render-component.js.map +0 -28
  441. package/dist/server/render-controller.js +0 -3
  442. package/dist/server/render-controller.js.map +0 -31
  443. package/dist/server/render-fragment.js +0 -3
  444. package/dist/server/render-fragment.js.map +0 -10
  445. package/dist/server/slot-projection-html.js +0 -3
  446. package/dist/signals/host-resource.js +0 -3
  447. package/dist/signals/host-signal.js +0 -3
  448. package/dist/signals/host-signal.js.map +0 -13
  449. package/dist/signals/hydration-script.js +0 -3
  450. package/dist/tools/escape-css-identifier.js +0 -3
  451. package/dist/tools/escape-script-json.js +0 -3
  452. package/dist/tools/event-emitter.js +0 -3
  453. package/dist/tools/index.js +0 -3
  454. package/dist/tools/render-jsx-template.js +0 -3
  455. package/dist/types.js +0 -3
  456. package/dist/utils/attribute-utils.js +0 -3
  457. package/dist/utils/escape-html-attribute.js +0 -3
  458. package/dist/utils/index.js +0 -3
  459. /package/{dist/client → client}/app-bootstrap.d.ts +0 -0
  460. /package/{dist/client → client}/hydrator.d.ts +0 -0
  461. /package/{dist/client → client}/install-hydrator.d.ts +0 -0
  462. /package/{dist/context → context}/context-consumer-bootstrap.d.ts +0 -0
  463. /package/{dist/context → context}/context-consumer-runtime.d.ts +0 -0
  464. /package/{dist/context → context}/context-host.d.ts +0 -0
  465. /package/{dist/context → context}/context-provider.d.ts +0 -0
  466. /package/{dist/context → context}/context-ssr-bridge.d.ts +0 -0
  467. /package/{dist/context → context}/create-context.d.ts +0 -0
  468. /package/{dist/context → context}/decorators/consume-context.d.ts +0 -0
  469. /package/{dist/context → context}/decorators/context-selection-delivery.d.ts +0 -0
  470. /package/{dist/context → context}/decorators/context-selector.d.ts +0 -0
  471. /package/{dist/context → context}/decorators/legacy/consume-context.d.ts +0 -0
  472. /package/{dist/context → context}/decorators/legacy/context-selector-field.d.ts +0 -0
  473. /package/{dist/context → context}/decorators/legacy/context-selector.d.ts +0 -0
  474. /package/{dist/context → context}/decorators/legacy/provide-context.d.ts +0 -0
  475. /package/{dist/context → context}/decorators/on-context-update.d.ts +0 -0
  476. /package/{dist/context → context}/decorators/provide-context.d.ts +0 -0
  477. /package/{dist/context → context}/decorators/standard/consume-context.d.ts +0 -0
  478. /package/{dist/context → context}/decorators/standard/context-selector-field.d.ts +0 -0
  479. /package/{dist/context → context}/decorators/standard/context-selector.d.ts +0 -0
  480. /package/{dist/context → context}/decorators/standard/provide-context.d.ts +0 -0
  481. /package/{dist/context → context}/decorators/standard-legacy-dispatch.d.ts +0 -0
  482. /package/{dist/context → context}/events.d.ts +0 -0
  483. /package/{dist/context → context}/hydration-script.d.ts +0 -0
  484. /package/{dist/context → context}/index.d.ts +0 -0
  485. /package/{dist/context → context}/types.d.ts +0 -0
  486. /package/{dist/context → context}/types.js +0 -0
  487. /package/{dist/context → context}/types.js.map +0 -0
  488. /package/{dist/controller-registry.d.ts → controller-registry.d.ts} +0 -0
  489. /package/{dist/core → core}/controller-metadata.d.ts +0 -0
  490. /package/{dist/core → core}/custom-element-metadata.d.ts +0 -0
  491. /package/{dist/core → core}/event-subscription-registry.d.ts +0 -0
  492. /package/{dist/core → core}/host-ssr-registry.d.ts +0 -0
  493. /package/{dist/core → core}/hydration-capable-host.d.ts +0 -0
  494. /package/{dist/core → core}/hydration-codec.d.ts +0 -0
  495. /package/{dist/core → core}/radiant-element-ssr-host.d.ts +0 -0
  496. /package/{dist/core → core}/radiant-hydrator-state.d.ts +0 -0
  497. /package/{dist/core → core}/reactive-prop-metadata.d.ts +0 -0
  498. /package/{dist/core → core}/reactivity-adapter.d.ts +0 -0
  499. /package/{dist/core → core}/reactivity-contract.js +0 -0
  500. /package/{dist/core → core}/reactivity-contract.js.map +0 -0
  501. /package/{dist/core → core}/reactivity-runtime.d.ts +0 -0
  502. /package/{dist/core → core}/reactivity-signals.d.ts +0 -0
  503. /package/{dist/core → core}/render-runtime.d.ts +0 -0
  504. /package/{dist/core → core}/render-scheduler.d.ts +0 -0
  505. /package/{dist/core → core}/slot-projection-runtime.d.ts +0 -0
  506. /package/{dist/core → core}/ssr-hydration-binding.d.ts +0 -0
  507. /package/{dist/core → core}/ssr-hydration-binding.js +0 -0
  508. /package/{dist/core → core}/ssr-hydration-binding.js.map +0 -0
  509. /package/{dist/core → core}/ssr-preparation.d.ts +0 -0
  510. /package/{dist/decorators → decorators}/attr.d.ts +0 -0
  511. /package/{dist/decorators → decorators}/bound.d.ts +0 -0
  512. /package/{dist/decorators → decorators}/bridge.d.ts +0 -0
  513. /package/{dist/decorators → decorators}/controller.d.ts +0 -0
  514. /package/{dist/decorators → decorators}/custom-element.d.ts +0 -0
  515. /package/{dist/decorators → decorators}/debounce.d.ts +0 -0
  516. /package/{dist/decorators → decorators}/event.d.ts +0 -0
  517. /package/{dist/decorators → decorators}/legacy/attr.d.ts +0 -0
  518. /package/{dist/decorators → decorators}/legacy/bound.d.ts +0 -0
  519. /package/{dist/decorators → decorators}/legacy/custom-element.d.ts +0 -0
  520. /package/{dist/decorators → decorators}/legacy/debounce.d.ts +0 -0
  521. /package/{dist/decorators → decorators}/legacy/event.d.ts +0 -0
  522. /package/{dist/decorators → decorators}/legacy/host-readiness.d.ts +0 -0
  523. /package/{dist/decorators → decorators}/legacy/on-event.d.ts +0 -0
  524. /package/{dist/decorators → decorators}/legacy/on-updated.d.ts +0 -0
  525. /package/{dist/decorators → decorators}/legacy/query-slot.d.ts +0 -0
  526. /package/{dist/decorators → decorators}/legacy/query.d.ts +0 -0
  527. /package/{dist/decorators → decorators}/legacy/reactive-field.d.ts +0 -0
  528. /package/{dist/decorators → decorators}/legacy/signal.d.ts +0 -0
  529. /package/{dist/decorators → decorators}/on-event.d.ts +0 -0
  530. /package/{dist/decorators → decorators}/on-updated.d.ts +0 -0
  531. /package/{dist/decorators → decorators}/query-slot.d.ts +0 -0
  532. /package/{dist/decorators → decorators}/query.d.ts +0 -0
  533. /package/{dist/decorators → decorators}/shared/reactive-attr.d.ts +0 -0
  534. /package/{dist/decorators → decorators}/signal.d.ts +0 -0
  535. /package/{dist/decorators → decorators}/standard/attr.d.ts +0 -0
  536. /package/{dist/decorators → decorators}/standard/bound.d.ts +0 -0
  537. /package/{dist/decorators → decorators}/standard/custom-element.d.ts +0 -0
  538. /package/{dist/decorators → decorators}/standard/debounce.d.ts +0 -0
  539. /package/{dist/decorators → decorators}/standard/event.d.ts +0 -0
  540. /package/{dist/decorators → decorators}/standard/on-event.d.ts +0 -0
  541. /package/{dist/decorators → decorators}/standard/on-updated.d.ts +0 -0
  542. /package/{dist/decorators → decorators}/standard/query-slot.d.ts +0 -0
  543. /package/{dist/decorators → decorators}/standard/query.d.ts +0 -0
  544. /package/{dist/decorators → decorators}/standard/reactive-field.d.ts +0 -0
  545. /package/{dist/decorators → decorators}/standard/reactive-prop.d.ts +0 -0
  546. /package/{dist/decorators → decorators}/standard/signal.d.ts +0 -0
  547. /package/{dist/helpers → helpers}/create-event-listener.d.ts +0 -0
  548. /package/{dist/helpers → helpers}/create-event.d.ts +0 -0
  549. /package/{dist/helpers → helpers}/create-query-slot.d.ts +0 -0
  550. /package/{dist/helpers → helpers}/create-query.d.ts +0 -0
  551. /package/{dist/helpers → helpers}/debounce.d.ts +0 -0
  552. /package/{dist/helpers → helpers}/index.d.ts +0 -0
  553. /package/{dist/index.d.ts → index.d.ts} +0 -0
  554. /package/{dist/server → server}/context-ssr.d.ts +0 -0
  555. /package/{dist/server → server}/host-attribute-serialization.d.ts +0 -0
  556. /package/{dist/server → server}/host-script-composition.d.ts +0 -0
  557. /package/{dist/server → server}/html-parser.d.ts +0 -0
  558. /package/{dist/server → server}/install-light-dom-shim.d.ts +0 -0
  559. /package/{dist/server → server}/internal-radiant-host.d.ts +0 -0
  560. /package/{dist/server → server}/project-root.d.ts +0 -0
  561. /package/{dist/server → server}/radiant-element-ssr-bridge.d.ts +0 -0
  562. /package/{dist/server → server}/radiant-element-ssr-extractor.d.ts +0 -0
  563. /package/{dist/server → server}/radiant-element-ssr-service.d.ts +0 -0
  564. /package/{dist/server → server}/radiant-element-ssr.d.ts +0 -0
  565. /package/{dist/server → server}/render-controller.d.ts +0 -0
  566. /package/{dist/server → server}/render-fragment.d.ts +0 -0
  567. /package/{dist/server → server}/slot-projection-html.d.ts +0 -0
  568. /package/{dist/signals → signals}/host-resource.d.ts +0 -0
  569. /package/{dist/signals → signals}/hydration-script.d.ts +0 -0
  570. /package/{dist/tools → tools}/escape-css-identifier.d.ts +0 -0
  571. /package/{dist/tools → tools}/escape-script-json.d.ts +0 -0
  572. /package/{dist/tools → tools}/event-emitter.d.ts +0 -0
  573. /package/{dist/tools → tools}/index.d.ts +0 -0
  574. /package/{dist/tools → tools}/render-jsx-template.d.ts +0 -0
  575. /package/{dist/types.d.ts → types.d.ts} +0 -0
  576. /package/{dist/utils → utils}/attribute-utils.d.ts +0 -0
  577. /package/{dist/utils → utils}/escape-html-attribute.d.ts +0 -0
  578. /package/{dist/utils → utils}/index.d.ts +0 -0
@@ -3,9 +3,9 @@
3
3
  "sources": ["../src/core/controller-metadata.ts", "../src/controller-registry.ts"],
4
4
  "sourcesContent": [
5
5
  "export const CONTROLLER_IDENTIFIER = Symbol.for('@ecopages/radiant.controllerIdentifier');\n\ntype ControllerConstructorWithMetadata = CustomElementConstructor & {\n\t[CONTROLLER_IDENTIFIER]?: string;\n};\n\nexport function setControllerIdentifier(target: CustomElementConstructor, identifier: string): void {\n\t(target as ControllerConstructorWithMetadata)[CONTROLLER_IDENTIFIER] = identifier;\n}\n\nexport function getControllerIdentifier(target: CustomElementConstructor): string | undefined {\n\treturn (target as ControllerConstructorWithMetadata)[CONTROLLER_IDENTIFIER];\n}\n",
6
- "import type { RadiantController } from './core/radiant-controller';\nimport { setControllerIdentifier } from './core/controller-metadata';\n\nexport const CONTROLLER_ATTRIBUTE = 'data-controller';\n\nexport type ControllerConstructor<TController extends RadiantController = RadiantController> = new (\n\thost: Element,\n) => TController;\n\nexport type ControllerRegistrationStrategy = 'keep-current' | 'replace';\n\ntype ControllerRegistryGlobalState = {\n\tactiveRuntimes: Set<ControllerRegistryRuntime>;\n\tcontrollerRegistrationStrategy: ControllerRegistrationStrategy;\n\tcontrollerRegistry: Map<string, ControllerConstructor>;\n};\n\nexport const CONTROLLER_REGISTRY_STATE_KEY = Symbol.for('@ecopages/radiant.controller-registry-state');\n\nfunction getControllerRegistryGlobalState(): ControllerRegistryGlobalState {\n\tconst globalScope = globalThis as typeof globalThis & Record<PropertyKey, unknown>;\n\tconst existingState = globalScope[CONTROLLER_REGISTRY_STATE_KEY];\n\n\tif (existingState) {\n\t\treturn existingState as ControllerRegistryGlobalState;\n\t}\n\n\tconst nextState: ControllerRegistryGlobalState = {\n\t\tactiveRuntimes: new Set<ControllerRegistryRuntime>(),\n\t\tcontrollerRegistrationStrategy: 'keep-current',\n\t\tcontrollerRegistry: new Map<string, ControllerConstructor>(),\n\t};\n\n\tglobalScope[CONTROLLER_REGISTRY_STATE_KEY] = nextState;\n\n\treturn nextState;\n}\n\nconst controllerRegistryState = getControllerRegistryGlobalState();\nconst controllerRegistry = controllerRegistryState.controllerRegistry;\nconst activeRuntimes = controllerRegistryState.activeRuntimes;\n\nexport function parseControllerIdentifiers(element: Element): string[] {\n\tconst value = element.getAttribute(CONTROLLER_ATTRIBUTE);\n\n\tif (!value) {\n\t\treturn [];\n\t}\n\n\treturn value\n\t\t.split(/\\s+/)\n\t\t.map((identifier) => identifier.trim())\n\t\t.filter((identifier) => identifier.length > 0);\n}\n\nexport function visitControllerElements(root: ParentNode, visit: (element: Element) => void): void {\n\tif (root instanceof Element && root.hasAttribute(CONTROLLER_ATTRIBUTE)) {\n\t\tvisit(root);\n\t}\n\n\tfor (const element of Array.from(root.querySelectorAll(`[${CONTROLLER_ATTRIBUTE}]`))) {\n\t\tvisit(element);\n\t}\n}\n\nexport class ControllerRegistryRuntime {\n\tprivate readonly controllersByElement = new Map<Element, Map<string, RadiantController>>();\n\tprivate observer?: MutationObserver;\n\tprivate stopped = false;\n\n\tconstructor(private readonly root: ParentNode = document) {\n\t\tthis.start();\n\t}\n\n\tpublic stop(): void {\n\t\tif (this.stopped) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stopped = true;\n\t\tthis.observer?.disconnect();\n\t\tthis.observer = undefined;\n\n\t\tfor (const [element, controllers] of this.controllersByElement) {\n\t\t\tfor (const [identifier] of controllers) {\n\t\t\t\tthis.disconnectController(element, identifier);\n\t\t\t}\n\t\t}\n\n\t\tactiveRuntimes.delete(this);\n\t}\n\n\tpublic reconcileRegisteredController(identifier: string): void {\n\t\tvisitControllerElements(this.root, (element) => {\n\t\t\tif (!parseControllerIdentifiers(element).includes(identifier)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.connectController(element, identifier);\n\t\t});\n\t}\n\n\tpublic replaceRegisteredController(identifier: string): void {\n\t\tfor (const [element, controllers] of Array.from(this.controllersByElement.entries())) {\n\t\t\tif (!controllers.has(identifier)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.disconnectController(element, identifier);\n\t\t}\n\n\t\tthis.reconcileRegisteredController(identifier);\n\t}\n\n\tprivate start(): void {\n\t\tvisitControllerElements(this.root, (element) => {\n\t\t\tthis.reconcileElement(element);\n\t\t});\n\n\t\tif (typeof MutationObserver === 'undefined') {\n\t\t\tactiveRuntimes.add(this);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.observer = new MutationObserver((records) => {\n\t\t\tfor (const record of records) {\n\t\t\t\tif (record.type === 'attributes' && record.target instanceof Element) {\n\t\t\t\t\tthis.reconcileElement(record.target);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (const removedNode of Array.from(record.removedNodes)) {\n\t\t\t\t\tif (!(removedNode instanceof Element)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvisitControllerElements(removedNode, (element) => {\n\t\t\t\t\t\tthis.disconnectElementControllers(element);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const addedNode of Array.from(record.addedNodes)) {\n\t\t\t\t\tif (!(addedNode instanceof Element)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvisitControllerElements(addedNode, (element) => {\n\t\t\t\t\t\tthis.reconcileElement(element);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst observerRoot = this.root instanceof Document ? this.root.documentElement : this.root;\n\n\t\tthis.observer.observe(observerRoot, {\n\t\t\tattributeFilter: [CONTROLLER_ATTRIBUTE],\n\t\t\tattributes: true,\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\n\t\tactiveRuntimes.add(this);\n\t}\n\n\tprivate reconcileElement(element: Element): void {\n\t\tconst nextIdentifiers = new Set(parseControllerIdentifiers(element));\n\t\tconst currentControllers = this.controllersByElement.get(element);\n\n\t\tif (currentControllers) {\n\t\t\tfor (const identifier of currentControllers.keys()) {\n\t\t\t\tif (!nextIdentifiers.has(identifier)) {\n\t\t\t\t\tthis.disconnectController(element, identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const identifier of nextIdentifiers) {\n\t\t\tthis.connectController(element, identifier);\n\t\t}\n\t}\n\n\tprivate connectController(element: Element, identifier: string): void {\n\t\tconst controllerConstructor = controllerRegistry.get(identifier);\n\n\t\tif (!controllerConstructor) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\tcontrollers = new Map();\n\t\t\tthis.controllersByElement.set(element, controllers);\n\t\t}\n\n\t\tif (controllers.has(identifier)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = new controllerConstructor(element);\n\t\tcontrollers.set(identifier, controller);\n\t\tcontroller.connect();\n\t}\n\n\tprivate disconnectController(element: Element, identifier: string): void {\n\t\tconst controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = controllers.get(identifier);\n\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontroller.disconnect();\n\t\tcontrollers.delete(identifier);\n\n\t\tif (controllers.size === 0) {\n\t\t\tthis.controllersByElement.delete(element);\n\t\t}\n\t}\n\n\tprivate disconnectElementControllers(element: Element): void {\n\t\tconst controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const identifier of Array.from(controllers.keys())) {\n\t\t\tthis.disconnectController(element, identifier);\n\t\t}\n\t}\n}\n\nexport function registerController<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tconst existingController = controllerRegistry.get(identifier);\n\n\tif (existingController) {\n\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\tconsole.warn(\n\t\t\t\t`[radiant] Controller \"${identifier}\" is already registered. Keeping the existing constructor.`,\n\t\t\t);\n\t\t}\n\n\t\treturn existingController as TConstructor;\n\t}\n\n\tsetControllerIdentifier(controller as unknown as CustomElementConstructor, identifier);\n\tcontrollerRegistry.set(identifier, controller);\n\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.reconcileRegisteredController(identifier);\n\t}\n\n\treturn controller;\n}\n\nexport function hasRegisteredController(identifier: string): boolean {\n\treturn controllerRegistry.has(identifier);\n}\n\n/**\n * Returns the registered controller constructor for an identifier, if one is available.\n *\n * This is primarily used by SSR adapters that need to render controller-owned\n * authored hosts before the browser registry attaches controllers at runtime.\n */\nexport function resolveRegisteredController(identifier: string): ControllerConstructor | undefined {\n\treturn controllerRegistry.get(identifier);\n}\n\nexport function replaceController<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tconst existingController = controllerRegistry.get(identifier);\n\n\tif (existingController === controller) {\n\t\treturn controller;\n\t}\n\n\tsetControllerIdentifier(controller as unknown as CustomElementConstructor, identifier);\n\tcontrollerRegistry.set(identifier, controller);\n\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.replaceRegisteredController(identifier);\n\t}\n\n\treturn controller;\n}\n\nexport function setControllerRegistrationStrategy(strategy: ControllerRegistrationStrategy): void {\n\tcontrollerRegistryState.controllerRegistrationStrategy = strategy;\n}\n\nexport function enableControllerReplacementForHmr(): void {\n\tsetControllerRegistrationStrategy('replace');\n}\n\nexport function disableControllerReplacementForHmr(): void {\n\tsetControllerRegistrationStrategy('keep-current');\n}\n\nexport function registerControllerWithConfiguredStrategy<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tif (controllerRegistryState.controllerRegistrationStrategy === 'replace') {\n\t\treturn replaceController(identifier, controller);\n\t}\n\n\treturn registerController(identifier, controller);\n}\n\nexport function startControllers(root: ParentNode = document): ControllerRegistryRuntime {\n\treturn new ControllerRegistryRuntime(root);\n}\n\nexport function stopControllers(): void {\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.stop();\n\t}\n}\n"
6
+ "import type { RadiantController } from './core/radiant-controller';\nimport { setControllerIdentifier } from './core/controller-metadata';\n\nexport const CONTROLLER_ATTRIBUTE = 'data-controller';\n\nexport type ControllerConstructor<TController extends RadiantController = RadiantController> = new (\n\thost: Element,\n) => TController;\n\nexport type ControllerRegistrationStrategy = 'keep-current' | 'replace';\n\ntype ControllerRegistryGlobalState = {\n\tactiveRuntimes: Set<ControllerRegistryRuntime>;\n\tcontrollerRegistrationStrategy: ControllerRegistrationStrategy;\n\tcontrollerRegistry: Map<string, ControllerConstructor>;\n};\n\nexport const CONTROLLER_REGISTRY_STATE_KEY = Symbol.for('@ecopages/radiant.controller-registry-state');\n\nfunction getControllerRegistryGlobalState(): ControllerRegistryGlobalState {\n\tconst globalScope = globalThis as typeof globalThis & Record<PropertyKey, unknown>;\n\tconst existingState = globalScope[CONTROLLER_REGISTRY_STATE_KEY];\n\n\tif (existingState) {\n\t\treturn existingState as ControllerRegistryGlobalState;\n\t}\n\n\tconst nextState: ControllerRegistryGlobalState = {\n\t\tactiveRuntimes: new Set<ControllerRegistryRuntime>(),\n\t\tcontrollerRegistrationStrategy: 'keep-current',\n\t\tcontrollerRegistry: new Map<string, ControllerConstructor>(),\n\t};\n\n\tglobalScope[CONTROLLER_REGISTRY_STATE_KEY] = nextState;\n\n\treturn nextState;\n}\n\nconst controllerRegistryState = getControllerRegistryGlobalState();\nconst controllerRegistry = controllerRegistryState.controllerRegistry;\nconst activeRuntimes = controllerRegistryState.activeRuntimes;\n\nexport function parseControllerIdentifiers(element: Element): string[] {\n\tconst value = element.getAttribute(CONTROLLER_ATTRIBUTE);\n\n\tif (!value) {\n\t\treturn [];\n\t}\n\n\treturn value\n\t\t.split(/\\s+/)\n\t\t.map((identifier) => identifier.trim())\n\t\t.filter((identifier) => identifier.length > 0);\n}\n\nexport function visitControllerElements(root: ParentNode, visit: (element: Element) => void): void {\n\tif (root instanceof Element && root.hasAttribute(CONTROLLER_ATTRIBUTE)) {\n\t\tvisit(root);\n\t}\n\n\tfor (const element of Array.from(root.querySelectorAll(`[${CONTROLLER_ATTRIBUTE}]`))) {\n\t\tvisit(element);\n\t}\n}\n\nexport class ControllerRegistryRuntime {\n\tprivate readonly controllersByElement = new Map<Element, Map<string, RadiantController>>();\n\tprivate observer?: MutationObserver;\n\tprivate stopped = false;\n\n\tconstructor(private readonly root: ParentNode = document) {\n\t\tthis.start();\n\t}\n\n\tpublic stop(): void {\n\t\tif (this.stopped) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.stopped = true;\n\t\tthis.observer?.disconnect();\n\t\tthis.observer = undefined;\n\n\t\tfor (const [element, controllers] of this.controllersByElement) {\n\t\t\tfor (const [identifier] of controllers) {\n\t\t\t\tthis.disconnectController(element, identifier);\n\t\t\t}\n\t\t}\n\n\t\tactiveRuntimes.delete(this);\n\t}\n\n\tpublic reconcileRegisteredController(identifier: string): void {\n\t\tvisitControllerElements(this.root, (element) => {\n\t\t\tif (!parseControllerIdentifiers(element).includes(identifier)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.connectController(element, identifier);\n\t\t});\n\t}\n\n\tpublic replaceRegisteredController(identifier: string): void {\n\t\tfor (const [element, controllers] of Array.from(this.controllersByElement.entries())) {\n\t\t\tif (!controllers.has(identifier)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis.disconnectController(element, identifier);\n\t\t}\n\n\t\tthis.reconcileRegisteredController(identifier);\n\t}\n\n\tprivate start(): void {\n\t\tvisitControllerElements(this.root, (element) => {\n\t\t\tthis.reconcileElement(element);\n\t\t});\n\n\t\tif (typeof MutationObserver === 'undefined') {\n\t\t\tactiveRuntimes.add(this);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.observer = new MutationObserver((records) => {\n\t\t\tfor (const record of records) {\n\t\t\t\tif (record.type === 'attributes' && record.target instanceof Element) {\n\t\t\t\t\tthis.reconcileElement(record.target);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (const removedNode of Array.from(record.removedNodes)) {\n\t\t\t\t\tif (!(removedNode instanceof Element)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvisitControllerElements(removedNode, (element) => {\n\t\t\t\t\t\tthis.disconnectElementControllers(element);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tfor (const addedNode of Array.from(record.addedNodes)) {\n\t\t\t\t\tif (!(addedNode instanceof Element)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tvisitControllerElements(addedNode, (element) => {\n\t\t\t\t\t\tthis.reconcileElement(element);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst observerRoot = this.root instanceof Document ? this.root.documentElement : this.root;\n\n\t\tthis.observer.observe(observerRoot, {\n\t\t\tattributeFilter: [CONTROLLER_ATTRIBUTE],\n\t\t\tattributes: true,\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\n\t\tactiveRuntimes.add(this);\n\t}\n\n\tprivate reconcileElement(element: Element): void {\n\t\tconst nextIdentifiers = new Set(parseControllerIdentifiers(element));\n\t\tconst currentControllers = this.controllersByElement.get(element);\n\n\t\tif (currentControllers) {\n\t\t\tfor (const identifier of currentControllers.keys()) {\n\t\t\t\tif (!nextIdentifiers.has(identifier)) {\n\t\t\t\t\tthis.disconnectController(element, identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const identifier of nextIdentifiers) {\n\t\t\tthis.connectController(element, identifier);\n\t\t}\n\t}\n\n\tprivate connectController(element: Element, identifier: string): void {\n\t\tconst controllerConstructor = controllerRegistry.get(identifier);\n\n\t\tif (!controllerConstructor) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\tcontrollers = new Map();\n\t\t\tthis.controllersByElement.set(element, controllers);\n\t\t}\n\n\t\tif (controllers.has(identifier)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = new controllerConstructor(element);\n\t\tcontrollers.set(identifier, controller);\n\t\tcontroller.connect();\n\t}\n\n\tprivate disconnectController(element: Element, identifier: string): void {\n\t\tconst controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst controller = controllers.get(identifier);\n\n\t\tif (!controller) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontroller.disconnect();\n\t\tcontrollers.delete(identifier);\n\n\t\tif (controllers.size === 0) {\n\t\t\tthis.controllersByElement.delete(element);\n\t\t}\n\t}\n\n\tprivate disconnectElementControllers(element: Element): void {\n\t\tconst controllers = this.controllersByElement.get(element);\n\n\t\tif (!controllers) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const identifier of Array.from(controllers.keys())) {\n\t\t\tthis.disconnectController(element, identifier);\n\t\t}\n\t}\n}\n\nexport function registerController<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tconst existingController = controllerRegistry.get(identifier);\n\n\tif (existingController) {\n\t\treturn existingController as TConstructor;\n\t}\n\n\tsetControllerIdentifier(controller as unknown as CustomElementConstructor, identifier);\n\tcontrollerRegistry.set(identifier, controller);\n\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.reconcileRegisteredController(identifier);\n\t}\n\n\treturn controller;\n}\n\nexport function hasRegisteredController(identifier: string): boolean {\n\treturn controllerRegistry.has(identifier);\n}\n\n/**\n * Returns the registered controller constructor for an identifier, if one is available.\n *\n * This is primarily used by SSR adapters that need to render controller-owned\n * authored hosts before the browser registry attaches controllers at runtime.\n */\nexport function resolveRegisteredController(identifier: string): ControllerConstructor | undefined {\n\treturn controllerRegistry.get(identifier);\n}\n\nexport function replaceController<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tconst existingController = controllerRegistry.get(identifier);\n\n\tif (existingController === controller) {\n\t\treturn controller;\n\t}\n\n\tsetControllerIdentifier(controller as unknown as CustomElementConstructor, identifier);\n\tcontrollerRegistry.set(identifier, controller);\n\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.replaceRegisteredController(identifier);\n\t}\n\n\treturn controller;\n}\n\nexport function setControllerRegistrationStrategy(strategy: ControllerRegistrationStrategy): void {\n\tcontrollerRegistryState.controllerRegistrationStrategy = strategy;\n}\n\nexport function enableControllerReplacementForHmr(): void {\n\tsetControllerRegistrationStrategy('replace');\n}\n\nexport function disableControllerReplacementForHmr(): void {\n\tsetControllerRegistrationStrategy('keep-current');\n}\n\nexport function registerControllerWithConfiguredStrategy<\n\tTController extends RadiantController,\n\tTConstructor extends ControllerConstructor<TController>,\n>(identifier: string, controller: TConstructor): TConstructor {\n\tif (controllerRegistryState.controllerRegistrationStrategy === 'replace') {\n\t\treturn replaceController(identifier, controller);\n\t}\n\n\treturn registerController(identifier, controller);\n}\n\nexport function startControllers(root: ParentNode = document): ControllerRegistryRuntime {\n\treturn new ControllerRegistryRuntime(root);\n}\n\nexport function stopControllers(): void {\n\tfor (const runtime of Array.from(activeRuntimes)) {\n\t\truntime.stop();\n\t}\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "5C90E10144D8831664756E2164756E21",
8
+ "mappings": "i0BAAO,IAAM,EAAwB,OAAO,IAAI,wCAAwC,EAMjF,SAAS,CAAuB,CAAC,EAAkC,EAA0B,CAClG,EAA6C,GAAyB,EAGjE,SAAS,CAAuB,CAAC,EAAsD,CAC7F,OAAQ,EAA6C,GCR/C,IAAM,EAAuB,kBAcvB,EAAgC,OAAO,IAAI,6CAA6C,EAErG,SAAS,CAAgC,EAAkC,CAC1E,IAAM,EAAc,WACd,EAAgB,EAAY,GAElC,GAAI,EACH,OAAO,EAGR,IAAM,EAA2C,CAChD,eAAgB,IAAI,IACpB,+BAAgC,eAChC,mBAAoB,IAAI,GACzB,EAIA,OAFA,EAAY,GAAiC,EAEtC,EAGR,IAAM,EAA0B,EAAiC,EAC3D,EAAqB,EAAwB,mBAC7C,EAAiB,EAAwB,eAExC,SAAS,CAA0B,CAAC,EAA4B,CACtE,IAAM,EAAQ,EAAQ,aAAa,CAAoB,EAEvD,GAAI,CAAC,EACJ,MAAO,CAAC,EAGT,OAAO,EACL,MAAM,KAAK,EACX,IAAI,CAAC,IAAe,EAAW,KAAK,CAAC,EACrC,OAAO,CAAC,IAAe,EAAW,OAAS,CAAC,EAGxC,SAAS,CAAuB,CAAC,EAAkB,EAAyC,CAClG,GAAI,aAAgB,SAAW,EAAK,aAAa,CAAoB,EACpE,EAAM,CAAI,EAGX,QAAW,KAAW,MAAM,KAAK,EAAK,iBAAiB,IAAI,IAAuB,CAAC,EAClF,EAAM,CAAO,EAIR,MAAM,CAA0B,CAKT,KAJZ,qBAAuB,IAAI,IACpC,SACA,QAAU,GAElB,WAAW,CAAkB,EAAmB,SAAU,CAA7B,YAC5B,KAAK,MAAM,EAGL,IAAI,EAAS,CACnB,GAAI,KAAK,QACR,OAGD,KAAK,QAAU,GACf,KAAK,UAAU,WAAW,EAC1B,KAAK,SAAW,OAEhB,QAAY,EAAS,KAAgB,KAAK,qBACzC,QAAY,KAAe,EAC1B,KAAK,qBAAqB,EAAS,CAAU,EAI/C,EAAe,OAAO,IAAI,EAGpB,6BAA6B,CAAC,EAA0B,CAC9D,EAAwB,KAAK,KAAM,CAAC,IAAY,CAC/C,GAAI,CAAC,EAA2B,CAAO,EAAE,SAAS,CAAU,EAC3D,OAGD,KAAK,kBAAkB,EAAS,CAAU,EAC1C,EAGK,2BAA2B,CAAC,EAA0B,CAC5D,QAAY,EAAS,KAAgB,MAAM,KAAK,KAAK,qBAAqB,QAAQ,CAAC,EAAG,CACrF,GAAI,CAAC,EAAY,IAAI,CAAU,EAC9B,SAGD,KAAK,qBAAqB,EAAS,CAAU,EAG9C,KAAK,8BAA8B,CAAU,EAGtC,KAAK,EAAS,CAKrB,GAJA,EAAwB,KAAK,KAAM,CAAC,IAAY,CAC/C,KAAK,iBAAiB,CAAO,EAC7B,EAEG,OAAO,iBAAqB,IAAa,CAC5C,EAAe,IAAI,IAAI,EACvB,OAGD,KAAK,SAAW,IAAI,iBAAiB,CAAC,IAAY,CACjD,QAAW,KAAU,EAAS,CAC7B,GAAI,EAAO,OAAS,cAAgB,EAAO,kBAAkB,QAAS,CACrE,KAAK,iBAAiB,EAAO,MAAM,EACnC,SAGD,QAAW,KAAe,MAAM,KAAK,EAAO,YAAY,EAAG,CAC1D,GAAI,EAAE,aAAuB,SAC5B,SAGD,EAAwB,EAAa,CAAC,IAAY,CACjD,KAAK,6BAA6B,CAAO,EACzC,EAGF,QAAW,KAAa,MAAM,KAAK,EAAO,UAAU,EAAG,CACtD,GAAI,EAAE,aAAqB,SAC1B,SAGD,EAAwB,EAAW,CAAC,IAAY,CAC/C,KAAK,iBAAiB,CAAO,EAC7B,IAGH,EAED,IAAM,EAAe,KAAK,gBAAgB,SAAW,KAAK,KAAK,gBAAkB,KAAK,KAEtF,KAAK,SAAS,QAAQ,EAAc,CACnC,gBAAiB,CAAC,CAAoB,EACtC,WAAY,GACZ,UAAW,GACX,QAAS,EACV,CAAC,EAED,EAAe,IAAI,IAAI,EAGhB,gBAAgB,CAAC,EAAwB,CAChD,IAAM,EAAkB,IAAI,IAAI,EAA2B,CAAO,CAAC,EAC7D,EAAqB,KAAK,qBAAqB,IAAI,CAAO,EAEhE,GAAI,GACH,QAAW,KAAc,EAAmB,KAAK,EAChD,GAAI,CAAC,EAAgB,IAAI,CAAU,EAClC,KAAK,qBAAqB,EAAS,CAAU,EAKhD,QAAW,KAAc,EACxB,KAAK,kBAAkB,EAAS,CAAU,EAIpC,iBAAiB,CAAC,EAAkB,EAA0B,CACrE,IAAM,EAAwB,EAAmB,IAAI,CAAU,EAE/D,GAAI,CAAC,EACJ,OAGD,IAAI,EAAc,KAAK,qBAAqB,IAAI,CAAO,EAEvD,GAAI,CAAC,EACJ,EAAc,IAAI,IAClB,KAAK,qBAAqB,IAAI,EAAS,CAAW,EAGnD,GAAI,EAAY,IAAI,CAAU,EAC7B,OAGD,IAAM,EAAa,IAAI,EAAsB,CAAO,EACpD,EAAY,IAAI,EAAY,CAAU,EACtC,EAAW,QAAQ,EAGZ,oBAAoB,CAAC,EAAkB,EAA0B,CACxE,IAAM,EAAc,KAAK,qBAAqB,IAAI,CAAO,EAEzD,GAAI,CAAC,EACJ,OAGD,IAAM,EAAa,EAAY,IAAI,CAAU,EAE7C,GAAI,CAAC,EACJ,OAMD,GAHA,EAAW,WAAW,EACtB,EAAY,OAAO,CAAU,EAEzB,EAAY,OAAS,EACxB,KAAK,qBAAqB,OAAO,CAAO,EAIlC,4BAA4B,CAAC,EAAwB,CAC5D,IAAM,EAAc,KAAK,qBAAqB,IAAI,CAAO,EAEzD,GAAI,CAAC,EACJ,OAGD,QAAW,KAAc,MAAM,KAAK,EAAY,KAAK,CAAC,EACrD,KAAK,qBAAqB,EAAS,CAAU,EAGhD,CAEO,SAAS,CAGf,CAAC,EAAoB,EAAwC,CAC7D,IAAM,EAAqB,EAAmB,IAAI,CAAU,EAE5D,GAAI,EACH,OAAO,EAGR,EAAwB,EAAmD,CAAU,EACrF,EAAmB,IAAI,EAAY,CAAU,EAE7C,QAAW,KAAW,MAAM,KAAK,CAAc,EAC9C,EAAQ,8BAA8B,CAAU,EAGjD,OAAO,EAGD,SAAS,CAAuB,CAAC,EAA6B,CACpE,OAAO,EAAmB,IAAI,CAAU,EASlC,SAAS,CAA2B,CAAC,EAAuD,CAClG,OAAO,EAAmB,IAAI,CAAU,EAGlC,SAAS,CAGf,CAAC,EAAoB,EAAwC,CAG7D,GAF2B,EAAmB,IAAI,CAAU,IAEjC,EAC1B,OAAO,EAGR,EAAwB,EAAmD,CAAU,EACrF,EAAmB,IAAI,EAAY,CAAU,EAE7C,QAAW,KAAW,MAAM,KAAK,CAAc,EAC9C,EAAQ,4BAA4B,CAAU,EAG/C,OAAO,EAGD,SAAS,CAAiC,CAAC,EAAgD,CACjG,EAAwB,+BAAiC,EAGnD,SAAS,CAAiC,EAAS,CACzD,EAAkC,SAAS,EAGrC,SAAS,CAAkC,EAAS,CAC1D,EAAkC,cAAc,EAG1C,SAAS,CAGf,CAAC,EAAoB,EAAwC,CAC7D,GAAI,EAAwB,iCAAmC,UAC9D,OAAO,EAAkB,EAAY,CAAU,EAGhD,OAAO,EAAmB,EAAY,CAAU,EAG1C,SAAS,CAAgB,CAAC,EAAmB,SAAqC,CACxF,OAAO,IAAI,EAA0B,CAAI,EAGnC,SAAS,CAAe,EAAS,CACvC,QAAW,KAAW,MAAM,KAAK,CAAc,EAC9C,EAAQ,KAAK",
9
+ "debugId": "DF4DC8021290670C64756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:n,getOwnPropertyNames:l,getOwnPropertyDescriptor:C}=Object,a=Object.prototype.hasOwnProperty;function u(t){return this[t]}var E=(t)=>{var o=(i??=new WeakMap).get(t),r;if(o)return o;if(o=n({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function"){for(var e of l(t))if(!a.call(o,e))n(o,e,{get:u.bind(t,e),enumerable:!(r=C(t,e))||r.enumerable})}return i.set(t,o),o},i;var c=(t)=>t;function d(t,o){this[t]=c.bind(null,o)}var I=(t,o)=>{for(var r in o)n(t,r,{get:o[r],enumerable:!0,configurable:!0,set:d.bind(o,r)})};var f=(t,o)=>()=>(t&&(o=t(t=0)),o);var m=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(o,r)=>(typeof require<"u"?require:o)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var s=Symbol.for("@ecopages/radiant.controllerIdentifier");function g(t,o){t[s]=o}function p(t){return t[s]}export{g as setControllerIdentifier,p as getControllerIdentifier,s as CONTROLLER_IDENTIFIER};
2
+
3
+ //# debugId=8131C5E3849C941064756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "export const CONTROLLER_IDENTIFIER = Symbol.for('@ecopages/radiant.controllerIdentifier');\n\ntype ControllerConstructorWithMetadata = CustomElementConstructor & {\n\t[CONTROLLER_IDENTIFIER]?: string;\n};\n\nexport function setControllerIdentifier(target: CustomElementConstructor, identifier: string): void {\n\t(target as ControllerConstructorWithMetadata)[CONTROLLER_IDENTIFIER] = identifier;\n}\n\nexport function getControllerIdentifier(target: CustomElementConstructor): string | undefined {\n\treturn (target as ControllerConstructorWithMetadata)[CONTROLLER_IDENTIFIER];\n}\n"
6
6
  ],
7
- "mappings": "2PAAO,IAAM,EAAwB,OAAO,IAAI,wCAAwC,EAMjF,SAAS,CAAuB,CAAC,EAAkC,EAA0B,CAClG,EAA6C,GAAyB,EAGjE,SAAS,CAAuB,CAAC,EAAsD,CAC7F,OAAQ,EAA6C",
8
- "debugId": "240DEA62DF81F58264756E2164756E21",
7
+ "mappings": "i0BAAO,IAAM,EAAwB,OAAO,IAAI,wCAAwC,EAMjF,SAAS,CAAuB,CAAC,EAAkC,EAA0B,CAClG,EAA6C,GAAyB,EAGjE,SAAS,CAAuB,CAAC,EAAsD,CAC7F,OAAQ,EAA6C",
8
+ "debugId": "8131C5E3849C941064756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:x,getOwnPropertyNames:B,getOwnPropertyDescriptor:D}=Object,F=Object.prototype.hasOwnProperty;function H(b){return this[b]}var K=(b)=>{var j=(y??=new WeakMap).get(b),k;if(j)return j;if(j=x({},"__esModule",{value:!0}),b&&typeof b==="object"||typeof b==="function"){for(var q of B(b))if(!F.call(j,q))x(j,q,{get:H.bind(b,q),enumerable:!(k=D(b,q))||k.enumerable})}return y.set(b,j),j},y;var I=(b)=>b;function J(b,j){this[b]=I.bind(null,j)}var P=(b,j)=>{for(var k in j)x(b,k,{get:j[k],enumerable:!0,configurable:!0,set:J.bind(j,k)})};var Q=(b,j)=>()=>(b&&(j=b(b=0)),j);var V=((b)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(b,{get:(j,k)=>(typeof require<"u"?require:j)[k]}):b)(function(b){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+b+'" is not supported')});var z=Symbol.for("@ecopages/radiant.customElementTagName");function X(b,j){b[z]=j}function Y(b){return b[z]}export{X as setCustomElementTagName,Y as getCustomElementTagName,z as CUSTOM_ELEMENT_TAG_NAME};
2
+
3
+ //# debugId=164A70D4F4462DDB64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "export const CUSTOM_ELEMENT_TAG_NAME = Symbol.for('@ecopages/radiant.customElementTagName');\n\ntype CustomElementConstructorWithMetadata = CustomElementConstructor & {\n\t[CUSTOM_ELEMENT_TAG_NAME]?: string;\n};\n\n/**\n * Sets the custom element tag name for a given constructor.\n * This is used internally to associate a class with its custom element tag, which is necessary for features like hydration and SSR support.\n * @param target The constructor of the custom element.\n * @param tagName The tag name to associate with the custom element.\n */\nexport function setCustomElementTagName(target: CustomElementConstructor, tagName: string): void {\n\t(target as CustomElementConstructorWithMetadata)[CUSTOM_ELEMENT_TAG_NAME] = tagName;\n}\n\n/**\n * Retrieves the custom element tag name associated with a given constructor.\n * @param target The constructor of the custom element.\n * @returns The tag name associated with the custom element, or `undefined` if not set.\n */\nexport function getCustomElementTagName(target: CustomElementConstructor): string | undefined {\n\treturn (target as CustomElementConstructorWithMetadata)[CUSTOM_ELEMENT_TAG_NAME];\n}\n"
6
6
  ],
7
- "mappings": "2PAAO,IAAM,EAA0B,OAAO,IAAI,wCAAwC,EAYnF,SAAS,CAAuB,CAAC,EAAkC,EAAuB,CAC/F,EAAgD,GAA2B,EAQtE,SAAS,CAAuB,CAAC,EAAsD,CAC7F,OAAQ,EAAgD",
8
- "debugId": "6FF28EF8DF0051FA64756E2164756E21",
7
+ "mappings": "i0BAAO,IAAM,EAA0B,OAAO,IAAI,wCAAwC,EAYnF,SAAS,CAAuB,CAAC,EAAkC,EAAuB,CAC/F,EAAgD,GAA2B,EAQtE,SAAS,CAAuB,CAAC,EAAsD,CAC7F,OAAQ,EAAgD",
8
+ "debugId": "164A70D4F4462DDB64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:r,getOwnPropertyNames:p,getOwnPropertyDescriptor:a}=Object,l=Object.prototype.hasOwnProperty;function u(t){return this[t]}var g=(t)=>{var e=(c??=new WeakMap).get(t),s;if(e)return e;if(e=r({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function"){for(var i of p(t))if(!l.call(e,i))r(e,i,{get:u.bind(t,i),enumerable:!(s=a(t,i))||s.enumerable})}return c.set(t,e),e},c;var b=(t)=>t;function v(t,e){this[t]=b.bind(null,e)}var h=(t,e)=>{for(var s in e)r(t,s,{get:e[s],enumerable:!0,configurable:!0,set:v.bind(e,s)})};var d=(t,e)=>()=>(t&&(e=t(t=0)),e);var y=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,s)=>(typeof require<"u"?require:e)[s]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});class E{getInteractionTarget;getListenerContext;subscriptions=new Map;constructor(t,e){this.getInteractionTarget=t;this.getListenerContext=e}subscribe(t){let e=this.getInteractionTarget(),s=this.getListenerContext(),i=(n)=>{if(n.target&&n.target.matches(t.selector))t.listener.call(s,n)},o=`${t.type}:${t.selector}`;return e.addEventListener(t.type,i,t.options),this.subscriptions.set(o,{...t,listener:i,target:e}),()=>{this.unsubscribe(o)}}hasEventSubscription(t){return this.subscriptions.has(t)}removeAll(){for(let t of this.subscriptions.values())t.target.removeEventListener(t.type,t.listener,t.options);this.subscriptions.clear()}unsubscribe(t){let e=this.subscriptions.get(t);if(e)e.target.removeEventListener(e.type,e.listener,e.options),this.subscriptions.delete(t)}}export{E as EventSubscriptionRegistry};
2
+
3
+ //# debugId=85F32B6FBC16A75D64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "export type ElementEventListenerConfig = {\n\tselector: string;\n\ttype: string;\n\tlistener: EventListener;\n\toptions?: AddEventListenerOptions;\n};\n\ntype RadiantElementEventSubscription = ElementEventListenerConfig & {\n\ttarget: EventTarget;\n};\n\nexport class EventSubscriptionRegistry {\n\tprivate readonly subscriptions = new Map<string, RadiantElementEventSubscription>();\n\n\tconstructor(\n\t\tprivate readonly getInteractionTarget: () => EventTarget,\n\t\tprivate readonly getListenerContext: () => object,\n\t) {}\n\n\tpublic subscribe(eventConfig: ElementEventListenerConfig): () => void {\n\t\tconst interactionTarget = this.getInteractionTarget();\n\t\tconst listenerContext = this.getListenerContext();\n\t\tconst delegatedListener = (delegatedEvent: Event) => {\n\t\t\tif (delegatedEvent.target && (delegatedEvent.target as Element).matches(eventConfig.selector)) {\n\t\t\t\teventConfig.listener.call(listenerContext, delegatedEvent);\n\t\t\t}\n\t\t};\n\t\tconst subscriptionId = `${eventConfig.type}:${eventConfig.selector}`;\n\t\tinteractionTarget.addEventListener(eventConfig.type, delegatedListener, eventConfig.options);\n\t\tthis.subscriptions.set(subscriptionId, {\n\t\t\t...eventConfig,\n\t\t\tlistener: delegatedListener,\n\t\t\ttarget: interactionTarget,\n\t\t});\n\n\t\treturn () => {\n\t\t\tthis.unsubscribe(subscriptionId);\n\t\t};\n\t}\n\n\tpublic hasEventSubscription(subscriptionId: string): boolean {\n\t\treturn this.subscriptions.has(subscriptionId);\n\t}\n\n\tpublic removeAll(): void {\n\t\tfor (const eventSubscription of this.subscriptions.values()) {\n\t\t\teventSubscription.target.removeEventListener(\n\t\t\t\teventSubscription.type,\n\t\t\t\teventSubscription.listener,\n\t\t\t\teventSubscription.options,\n\t\t\t);\n\t\t}\n\t\tthis.subscriptions.clear();\n\t}\n\n\tprivate unsubscribe(id: string): void {\n\t\tconst eventSubscription = this.subscriptions.get(id);\n\t\tif (eventSubscription) {\n\t\t\teventSubscription.target.removeEventListener(\n\t\t\t\teventSubscription.type,\n\t\t\t\teventSubscription.listener,\n\t\t\t\teventSubscription.options,\n\t\t\t);\n\t\t\tthis.subscriptions.delete(id);\n\t\t}\n\t}\n}\n"
6
6
  ],
7
- "mappings": "2PAWO,MAAM,CAA0B,CAIpB,qBACA,mBAJD,cAAgB,IAAI,IAErC,WAAW,CACO,EACA,EAChB,CAFgB,4BACA,0BAGX,SAAS,CAAC,EAAqD,CACrE,IAAM,EAAoB,KAAK,qBAAqB,EAC9C,EAAkB,KAAK,mBAAmB,EAC1C,EAAoB,CAAC,IAA0B,CACpD,GAAI,EAAe,QAAW,EAAe,OAAmB,QAAQ,EAAY,QAAQ,EAC3F,EAAY,SAAS,KAAK,EAAiB,CAAc,GAGrD,EAAiB,GAAG,EAAY,QAAQ,EAAY,WAQ1D,OAPA,EAAkB,iBAAiB,EAAY,KAAM,EAAmB,EAAY,OAAO,EAC3F,KAAK,cAAc,IAAI,EAAgB,IACnC,EACH,SAAU,EACV,OAAQ,CACT,CAAC,EAEM,IAAM,CACZ,KAAK,YAAY,CAAc,GAI1B,oBAAoB,CAAC,EAAiC,CAC5D,OAAO,KAAK,cAAc,IAAI,CAAc,EAGtC,SAAS,EAAS,CACxB,QAAW,KAAqB,KAAK,cAAc,OAAO,EACzD,EAAkB,OAAO,oBACxB,EAAkB,KAClB,EAAkB,SAClB,EAAkB,OACnB,EAED,KAAK,cAAc,MAAM,EAGlB,WAAW,CAAC,EAAkB,CACrC,IAAM,EAAoB,KAAK,cAAc,IAAI,CAAE,EACnD,GAAI,EACH,EAAkB,OAAO,oBACxB,EAAkB,KAClB,EAAkB,SAClB,EAAkB,OACnB,EACA,KAAK,cAAc,OAAO,CAAE,EAG/B",
8
- "debugId": "792A64344D1F852F64756E2164756E21",
7
+ "mappings": "i0BAWO,MAAM,CAA0B,CAIpB,qBACA,mBAJD,cAAgB,IAAI,IAErC,WAAW,CACO,EACA,EAChB,CAFgB,4BACA,0BAGX,SAAS,CAAC,EAAqD,CACrE,IAAM,EAAoB,KAAK,qBAAqB,EAC9C,EAAkB,KAAK,mBAAmB,EAC1C,EAAoB,CAAC,IAA0B,CACpD,GAAI,EAAe,QAAW,EAAe,OAAmB,QAAQ,EAAY,QAAQ,EAC3F,EAAY,SAAS,KAAK,EAAiB,CAAc,GAGrD,EAAiB,GAAG,EAAY,QAAQ,EAAY,WAQ1D,OAPA,EAAkB,iBAAiB,EAAY,KAAM,EAAmB,EAAY,OAAO,EAC3F,KAAK,cAAc,IAAI,EAAgB,IACnC,EACH,SAAU,EACV,OAAQ,CACT,CAAC,EAEM,IAAM,CACZ,KAAK,YAAY,CAAc,GAI1B,oBAAoB,CAAC,EAAiC,CAC5D,OAAO,KAAK,cAAc,IAAI,CAAc,EAGtC,SAAS,EAAS,CACxB,QAAW,KAAqB,KAAK,cAAc,OAAO,EACzD,EAAkB,OAAO,oBACxB,EAAkB,KAClB,EAAkB,SAClB,EAAkB,OACnB,EAED,KAAK,cAAc,MAAM,EAGlB,WAAW,CAAC,EAAkB,CACrC,IAAM,EAAoB,KAAK,cAAc,IAAI,CAAE,EACnD,GAAI,EACH,EAAkB,OAAO,oBACxB,EAAkB,KAClB,EAAkB,SAClB,EAAkB,OACnB,EACA,KAAK,cAAc,OAAO,CAAE,EAG/B",
8
+ "debugId": "85F32B6FBC16A75D64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:q,getOwnPropertyNames:w,getOwnPropertyDescriptor:x}=Object,z=Object.prototype.hasOwnProperty;function A(c){return this[c]}var E=(c)=>{var j=(u??=new WeakMap).get(c),k;if(j)return j;if(j=q({},"__esModule",{value:!0}),c&&typeof c==="object"||typeof c==="function"){for(var l of w(c))if(!z.call(j,l))q(j,l,{get:A.bind(c,l),enumerable:!(k=x(c,l))||k.enumerable})}return u.set(c,j),j},u;var B=(c)=>c;function C(c,j){this[c]=B.bind(null,j)}var F=(c,j)=>{for(var k in j)q(c,k,{get:j[k],enumerable:!0,configurable:!0,set:C.bind(j,k)})};var G=(c,j)=>()=>(c&&(j=c(c=0)),j);var H=((c)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(c,{get:(j,k)=>(typeof require<"u"?require:j)[k]}):c)(function(c){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+c+'" is not supported')});class D{contextProviders=new Map;hydrationBindings=new Map;registerContextProvider(c,j){this.contextProviders.set(c,j),this.hydrationBindings.set(c,j)}registerHydrationBinding(c,j){this.hydrationBindings.set(c,j)}getContextProviders(){return[...this.contextProviders.values()]}getHydrationBindings(){return[...this.hydrationBindings.values()]}}export{D as HostSsrRegistry};
2
+
3
+ //# debugId=92E8D912D35D26AA64756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { SsrSerializableContextProvider } from '../context/context-provider';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\n\n/**\n * Shared SSR provider and hydration binding storage for Radiant hosts.\n */\nexport class HostSsrRegistry {\n\tprivate readonly contextProviders = new Map<string, SsrSerializableContextProvider>();\n\tprivate readonly hydrationBindings = new Map<string, SsrSerializableHydrationBinding>();\n\n\tpublic registerContextProvider(name: string, provider: SsrSerializableContextProvider): void {\n\t\tthis.contextProviders.set(name, provider);\n\t\tthis.hydrationBindings.set(name, provider);\n\t}\n\n\tpublic registerHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void {\n\t\tthis.hydrationBindings.set(name, binding);\n\t}\n\n\tpublic getContextProviders(): SsrSerializableContextProvider[] {\n\t\treturn [...this.contextProviders.values()];\n\t}\n\n\tpublic getHydrationBindings(): SsrSerializableHydrationBinding[] {\n\t\treturn [...this.hydrationBindings.values()];\n\t}\n}\n"
6
6
  ],
7
- "mappings": "2PAMO,MAAM,CAAgB,CACX,iBAAmB,IAAI,IACvB,kBAAoB,IAAI,IAElC,uBAAuB,CAAC,EAAc,EAAgD,CAC5F,KAAK,iBAAiB,IAAI,EAAM,CAAQ,EACxC,KAAK,kBAAkB,IAAI,EAAM,CAAQ,EAGnC,wBAAwB,CAAC,EAAc,EAAgD,CAC7F,KAAK,kBAAkB,IAAI,EAAM,CAAO,EAGlC,mBAAmB,EAAqC,CAC9D,MAAO,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAGnC,oBAAoB,EAAsC,CAChE,MAAO,CAAC,GAAG,KAAK,kBAAkB,OAAO,CAAC,EAE5C",
8
- "debugId": "D2A45C7D307D9F8E64756E2164756E21",
7
+ "mappings": "i0BAMO,MAAM,CAAgB,CACX,iBAAmB,IAAI,IACvB,kBAAoB,IAAI,IAElC,uBAAuB,CAAC,EAAc,EAAgD,CAC5F,KAAK,iBAAiB,IAAI,EAAM,CAAQ,EACxC,KAAK,kBAAkB,IAAI,EAAM,CAAQ,EAGnC,wBAAwB,CAAC,EAAc,EAAgD,CAC7F,KAAK,kBAAkB,IAAI,EAAM,CAAO,EAGlC,mBAAmB,EAAqC,CAC9D,MAAO,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAGnC,oBAAoB,EAAsC,CAChE,MAAO,CAAC,GAAG,KAAK,kBAAkB,OAAO,CAAC,EAE5C",
8
+ "debugId": "92E8D912D35D26AA64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:p,getOwnPropertyNames:u,getOwnPropertyDescriptor:v}=Object,w=Object.prototype.hasOwnProperty;function x(f){return this[f]}var B=(f)=>{var j=(q??=new WeakMap).get(f),l;if(j)return j;if(j=p({},"__esModule",{value:!0}),f&&typeof f==="object"||typeof f==="function"){for(var m of u(f))if(!w.call(j,m))p(j,m,{get:x.bind(f,m),enumerable:!(l=v(f,m))||l.enumerable})}return q.set(f,j),j},q;var z=(f)=>f;function A(f,j){this[f]=z.bind(null,j)}var C=(f,j)=>{for(var l in j)p(f,l,{get:j[l],enumerable:!0,configurable:!0,set:A.bind(j,l)})};var D=(f,j)=>()=>(f&&(j=f(f=0)),j);var E=((f)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(f,{get:(j,l)=>(typeof require<"u"?require:j)[l]}):f)(function(f){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+f+'" is not supported')});function G(f){return typeof f.registerHydrationBinding==="function"}export{G as isHydrationCapableHost};
2
+
3
+ //# debugId=58940929363732F764756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\n\n/**\n * Hosts that can register keyed SSR hydration bindings.\n */\nexport interface HydrationCapableHost {\n\tregisterHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void;\n}\n\nexport function isHydrationCapableHost(host: object): host is HydrationCapableHost {\n\treturn typeof (host as HydrationCapableHost).registerHydrationBinding === 'function';\n}\n"
6
6
  ],
7
- "mappings": "2PASO,SAAS,CAAsB,CAAC,EAA4C,CAClF,OAAO,OAAQ,EAA8B,2BAA6B",
8
- "debugId": "6355AB11EDFD913D64756E2164756E21",
7
+ "mappings": "i0BASO,SAAS,CAAsB,CAAC,EAA4C,CAClF,OAAO,OAAQ,EAA8B,2BAA6B",
8
+ "debugId": "58940929363732F764756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:q,getOwnPropertyNames:F,getOwnPropertyDescriptor:S}=Object,W=Object.prototype.hasOwnProperty;function P(g){return this[g]}var v=(g)=>{var u=(X??=new WeakMap).get(g),z;if(u)return u;if(u=q({},"__esModule",{value:!0}),g&&typeof g==="object"||typeof g==="function"){for(var J of F(g))if(!W.call(u,J))q(u,J,{get:P.bind(g,J),enumerable:!(z=S(g,J))||z.enumerable})}return X.set(g,u),u},X;var x=(g)=>g;function C(g,u){this[g]=x.bind(null,u)}var b=(g,u)=>{for(var z in u)q(g,z,{get:u[z],enumerable:!0,configurable:!0,set:C.bind(u,z)})};var B=(g,u)=>()=>(g&&(u=g(g=0)),u);var D=((g)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(g,{get:(u,z)=>(typeof require<"u"?require:u)[z]}):g)(function(g){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+g+'" is not supported')});function Z(g){return g.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var G="data-hydration",j="data-hydration-type",w="data-hydration-key";function H(g){let u=g.hydrationKey?` ${w}="${f(g.hydrationKey)}"`:"";return`<script type="application/json" ${G} ${j}="${g.type}"${u}>${g.serializedValue}</script>`}function K(g){return Z(g)}function N(g,u){let z=g.textContent;if(!z)return u;try{return JSON.parse(z)}catch{if(typeof console<"u")console.warn(`[@ecopages/radiant] Failed to parse hydration payload from <script ${G}>:`,z.slice(0,120));return u}}function E(g,u,z){let J=g.children;if(!J||J.length===0){let L=g.childNodes;if(!L||L.length===0)return null;for(let M=0;M<L.length;M+=1){let Q=L[M];if(Q.nodeType!==1)continue;let V=Q;if($(V,u,z))return V}return null}for(let L=0;L<J.length;L+=1)if($(J[L],u,z))return J[L];return null}function $(g,u,z){if(g.tagName!=="SCRIPT"||!g.hasAttribute(G)||g.getAttribute(j)!==u)return!1;if(z!==void 0)return g.getAttribute(w)===z;return!g.hasAttribute(w)}function f(g){return g.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}export{N as parseHydrationPayload,E as findHydrationScript,K as escapeHydrationJson,H as createHydrationScriptTag,j as HYDRATION_TYPE_ATTRIBUTE,w as HYDRATION_KEY_ATTRIBUTE,G as HYDRATION_ATTRIBUTE};
2
+
3
+ //# debugId=C1039E59C4B6659664756E2164756E21
@@ -5,7 +5,7 @@
5
5
  "/**\n * Escapes serialized JSON so it remains safe when embedded inside an HTML\n * `<script>` tag.\n */\nexport function escapeScriptJson(value: string): string {\n\treturn value\n\t\t.replace(/&/g, '\\\\u0026')\n\t\t.replace(/</g, '\\\\u003c')\n\t\t.replace(/>/g, '\\\\u003e')\n\t\t.replace(/\\u2028/g, '\\\\u2028')\n\t\t.replace(/\\u2029/g, '\\\\u2029');\n}\n",
6
6
  "import { escapeScriptJson } from '../tools/escape-script-json';\n\n/** Attribute marker used to identify hydration payloads inside a host. */\nexport const HYDRATION_ATTRIBUTE = 'data-hydration';\n/** Discriminator that scopes a hydration payload to a specific feature. */\nexport const HYDRATION_TYPE_ATTRIBUTE = 'data-hydration-type';\n/** Optional key that scopes a hydration payload to a specific decorated field. */\nexport const HYDRATION_KEY_ATTRIBUTE = 'data-hydration-key';\n\nexport type HydrationPayloadType = 'signal' | 'context';\n\ntype HydrationScriptHost = {\n\tchildren?: ArrayLike<Element> | undefined;\n\tchildNodes?: ArrayLike<{ nodeType: number }> | undefined;\n};\n\n/** Creates a `<script type=\"application/json\">` tag for a hydration payload. */\nexport function createHydrationScriptTag(options: {\n\ttype: HydrationPayloadType;\n\thydrationKey?: string;\n\tserializedValue: string;\n}): string {\n\tconst keyAttribute = options.hydrationKey\n\t\t? ` ${HYDRATION_KEY_ATTRIBUTE}=\"${escapeHtmlAttribute(options.hydrationKey)}\"`\n\t\t: '';\n\n\treturn `<script type=\"application/json\" ${HYDRATION_ATTRIBUTE} ${HYDRATION_TYPE_ATTRIBUTE}=\"${options.type}\"${keyAttribute}>${options.serializedValue}</script>`;\n}\n\n/** Escapes serialized JSON so it remains safe inside an HTML script tag. */\nexport function escapeHydrationJson(value: string): string {\n\treturn escapeScriptJson(value);\n}\n\n/** Parses JSON from a hydration script element, returning the fallback on failure. */\nexport function parseHydrationPayload<T>(element: Element, fallback: T): T {\n\tconst textContent = element.textContent;\n\n\tif (!textContent) {\n\t\treturn fallback;\n\t}\n\n\ttry {\n\t\treturn JSON.parse(textContent) as T;\n\t} catch {\n\t\tif (typeof console !== 'undefined') {\n\t\t\tconsole.warn(\n\t\t\t\t`[@ecopages/radiant] Failed to parse hydration payload from <script ${HYDRATION_ATTRIBUTE}>:`,\n\t\t\t\ttextContent.slice(0, 120),\n\t\t\t);\n\t\t}\n\t\treturn fallback;\n\t}\n}\n\n/**\n * Finds a hydration script element inside a host by type and optional key.\n *\n * When a key is provided, looks for an exact `data-hydration-key` match.\n * Otherwise, returns the first unkeyed script matching the type.\n */\nexport function findHydrationScript(\n\thost: HydrationScriptHost,\n\ttype: HydrationPayloadType,\n\thydrationKey?: string,\n): Element | null {\n\tconst children = host.children;\n\n\tif (!children || children.length === 0) {\n\t\tconst childNodes = (host as Partial<{ childNodes: ArrayLike<{ nodeType: number }> }>).childNodes;\n\n\t\tif (!childNodes || childNodes.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tfor (let i = 0; i < childNodes.length; i += 1) {\n\t\t\tconst node = childNodes[i]!;\n\n\t\t\tif (node.nodeType !== 1) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst element = node as unknown as Element;\n\n\t\t\tif (matchesHydrationScript(element, type, hydrationKey)) {\n\t\t\t\treturn element;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfor (let i = 0; i < children.length; i += 1) {\n\t\tif (matchesHydrationScript(children[i]!, type, hydrationKey)) {\n\t\t\treturn children[i]!;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction matchesHydrationScript(element: Element, type: HydrationPayloadType, hydrationKey?: string): boolean {\n\tif (\n\t\telement.tagName !== 'SCRIPT' ||\n\t\t!element.hasAttribute(HYDRATION_ATTRIBUTE) ||\n\t\telement.getAttribute(HYDRATION_TYPE_ATTRIBUTE) !== type\n\t) {\n\t\treturn false;\n\t}\n\n\tif (hydrationKey !== undefined) {\n\t\treturn element.getAttribute(HYDRATION_KEY_ATTRIBUTE) === hydrationKey;\n\t}\n\n\treturn !element.hasAttribute(HYDRATION_KEY_ATTRIBUTE);\n}\n\nfunction escapeHtmlAttribute(value: string): string {\n\treturn value.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n"
7
7
  ],
8
- "mappings": "2PAIO,SAAS,CAAgB,CAAC,EAAuB,CACvD,OAAO,EACL,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,UAAW,SAAS,EAC5B,QAAQ,UAAW,SAAS,ECPxB,IAAM,EAAsB,iBAEtB,EAA2B,sBAE3B,EAA0B,qBAUhC,SAAS,CAAwB,CAAC,EAI9B,CACV,IAAM,EAAe,EAAQ,aAC1B,IAAI,MAA4B,EAAoB,EAAQ,YAAY,KACxE,GAEH,MAAO,mCAAmC,KAAuB,MAA6B,EAAQ,QAAQ,KAAgB,EAAQ,2BAIhI,SAAS,CAAmB,CAAC,EAAuB,CAC1D,OAAO,EAAiB,CAAK,EAIvB,SAAS,CAAwB,CAAC,EAAkB,EAAgB,CAC1E,IAAM,EAAc,EAAQ,YAE5B,GAAI,CAAC,EACJ,OAAO,EAGR,GAAI,CACH,OAAO,KAAK,MAAM,CAAW,EAC5B,KAAM,CACP,GAAI,OAAO,QAAY,IACtB,QAAQ,KACP,sEAAsE,MACtE,EAAY,MAAM,EAAG,GAAG,CACzB,EAED,OAAO,GAUF,SAAS,CAAmB,CAClC,EACA,EACA,EACiB,CACjB,IAAM,EAAW,EAAK,SAEtB,GAAI,CAAC,GAAY,EAAS,SAAW,EAAG,CACvC,IAAM,EAAc,EAAkE,WAEtF,GAAI,CAAC,GAAc,EAAW,SAAW,EACxC,OAAO,KAGR,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,GAAK,EAAG,CAC9C,IAAM,EAAO,EAAW,GAExB,GAAI,EAAK,WAAa,EACrB,SAGD,IAAM,EAAU,EAEhB,GAAI,EAAuB,EAAS,EAAM,CAAY,EACrD,OAAO,EAIT,OAAO,KAGR,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,GAAK,EACzC,GAAI,EAAuB,EAAS,GAAK,EAAM,CAAY,EAC1D,OAAO,EAAS,GAIlB,OAAO,KAGR,SAAS,CAAsB,CAAC,EAAkB,EAA4B,EAAgC,CAC7G,GACC,EAAQ,UAAY,UACpB,CAAC,EAAQ,aAAa,CAAmB,GACzC,EAAQ,aAAa,CAAwB,IAAM,EAEnD,MAAO,GAGR,GAAI,IAAiB,OACpB,OAAO,EAAQ,aAAa,CAAuB,IAAM,EAG1D,MAAO,CAAC,EAAQ,aAAa,CAAuB,EAGrD,SAAS,CAAmB,CAAC,EAAuB,CACnD,OAAO,EAAM,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,QAAQ,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM",
9
- "debugId": "ADF85B332FA3E82264756E2164756E21",
8
+ "mappings": "i0BAIO,SAAS,CAAgB,CAAC,EAAuB,CACvD,OAAO,EACL,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,KAAM,SAAS,EACvB,QAAQ,UAAW,SAAS,EAC5B,QAAQ,UAAW,SAAS,ECPxB,IAAM,EAAsB,iBAEtB,EAA2B,sBAE3B,EAA0B,qBAUhC,SAAS,CAAwB,CAAC,EAI9B,CACV,IAAM,EAAe,EAAQ,aAC1B,IAAI,MAA4B,EAAoB,EAAQ,YAAY,KACxE,GAEH,MAAO,mCAAmC,KAAuB,MAA6B,EAAQ,QAAQ,KAAgB,EAAQ,2BAIhI,SAAS,CAAmB,CAAC,EAAuB,CAC1D,OAAO,EAAiB,CAAK,EAIvB,SAAS,CAAwB,CAAC,EAAkB,EAAgB,CAC1E,IAAM,EAAc,EAAQ,YAE5B,GAAI,CAAC,EACJ,OAAO,EAGR,GAAI,CACH,OAAO,KAAK,MAAM,CAAW,EAC5B,KAAM,CACP,GAAI,OAAO,QAAY,IACtB,QAAQ,KACP,sEAAsE,MACtE,EAAY,MAAM,EAAG,GAAG,CACzB,EAED,OAAO,GAUF,SAAS,CAAmB,CAClC,EACA,EACA,EACiB,CACjB,IAAM,EAAW,EAAK,SAEtB,GAAI,CAAC,GAAY,EAAS,SAAW,EAAG,CACvC,IAAM,EAAc,EAAkE,WAEtF,GAAI,CAAC,GAAc,EAAW,SAAW,EACxC,OAAO,KAGR,QAAS,EAAI,EAAG,EAAI,EAAW,OAAQ,GAAK,EAAG,CAC9C,IAAM,EAAO,EAAW,GAExB,GAAI,EAAK,WAAa,EACrB,SAGD,IAAM,EAAU,EAEhB,GAAI,EAAuB,EAAS,EAAM,CAAY,EACrD,OAAO,EAIT,OAAO,KAGR,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,GAAK,EACzC,GAAI,EAAuB,EAAS,GAAK,EAAM,CAAY,EAC1D,OAAO,EAAS,GAIlB,OAAO,KAGR,SAAS,CAAsB,CAAC,EAAkB,EAA4B,EAAgC,CAC7G,GACC,EAAQ,UAAY,UACpB,CAAC,EAAQ,aAAa,CAAmB,GACzC,EAAQ,aAAa,CAAwB,IAAM,EAEnD,MAAO,GAGR,GAAI,IAAiB,OACpB,OAAO,EAAQ,aAAa,CAAuB,IAAM,EAG1D,MAAO,CAAC,EAAQ,aAAa,CAAuB,EAGrD,SAAS,CAAmB,CAAC,EAAuB,CACnD,OAAO,EAAM,QAAQ,KAAM,OAAO,EAAE,QAAQ,KAAM,QAAQ,EAAE,QAAQ,KAAM,MAAM,EAAE,QAAQ,KAAM,MAAM",
9
+ "debugId": "C1039E59C4B6659664756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,7 +1,8 @@
1
- import { type JsxRenderable, type SubscribableJsxValue } from '@ecopages/jsx';
1
+ import { type JsxRenderable, type SubscribableJsxValueWithAccess } from '@ecopages/jsx';
2
2
  import type { SsrSerializableContextProvider } from '../context/context-provider';
3
3
  import type { UnknownContext } from '../context/types';
4
4
  import { type ReactiveHostLike } from './reactive-host';
5
+ import type { ReactiveState } from './reactivity-contract';
5
6
  import type { ReactiveBindingOption, ReactivePropertyOptions, ReactiveBindingValue, ReactiveBindings, ReactiveFieldOptions } from './reactive-prop-core';
6
7
  import type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';
7
8
  type StringPropertyKey<Value> = Extract<keyof Value, string>;
@@ -72,11 +73,11 @@ export declare class RadiantController<Bindings extends object = {}> implements
72
73
  /**
73
74
  * Returns a subscribable JSX binding for a selected reactive member.
74
75
  */
75
- bind<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
76
+ bind<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
76
77
  /**
77
78
  * Returns the cached binding object for a selected reactive member.
78
79
  */
79
- getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
80
+ getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
80
81
  /**
81
82
  * Defines a reactive field directly on the controller instance.
82
83
  */
@@ -126,8 +127,9 @@ export declare class RadiantController<Bindings extends object = {}> implements
126
127
  getSsrHydrationBindings(): SsrSerializableHydrationBinding[];
127
128
  registerCleanupCallback(callback: () => void): void;
128
129
  registerConnectedCallback(callback: () => void): void;
129
- registerReactiveDependencyReader(property: string, read: () => unknown): void;
130
- trackReactiveRead(property: string): void;
130
+ createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;
131
+ registerReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void;
132
+ getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;
131
133
  addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
132
134
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
133
135
  dispatchEvent(event: Event): boolean;
@@ -0,0 +1,3 @@
1
+ var{defineProperty:$,getOwnPropertyNames:m,getOwnPropertyDescriptor:g}=Object,c=Object.prototype.hasOwnProperty;function d(q){return this[q]}var Fq=(q)=>{var E=(O??=new WeakMap).get(q),G;if(E)return E;if(E=$({},"__esModule",{value:!0}),q&&typeof q==="object"||typeof q==="function"){for(var M of m(q))if(!c.call(E,M))$(E,M,{get:d.bind(q,M),enumerable:!(G=g(q,M))||G.enumerable})}return O.set(q,E),E},O;var y=(q)=>q;function u(q,E){this[q]=y.bind(null,E)}var Wq=(q,E)=>{for(var G in E)$(q,G,{get:E[G],enumerable:!0,configurable:!0,set:u.bind(E,G)})};var Dq=(q,E)=>()=>(q&&(E=q(q=0)),E);var Hq=((q)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(q,{get:(E,G)=>(typeof require<"u"?require:E)[G]}):q)(function(q){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+q+'" is not supported')});class U{contextProviders=new Map;hydrationBindings=new Map;registerContextProvider(q,E){this.contextProviders.set(q,E),this.hydrationBindings.set(q,E)}registerHydrationBinding(q,E){this.hydrationBindings.set(q,E)}getContextProviders(){return[...this.contextProviders.values()]}getHydrationBindings(){return[...this.hydrationBindings.values()]}}var B=Symbol.for("@ecopages/radiant.legacy-instance-initializers"),J=Symbol.for("@ecopages/radiant.legacy-post-construction-initializers"),s=Symbol.for("@ecopages/radiant.legacy-executed-post-construction-initializers");function Jq(q,E){L(q,B,E)}function Kq(q,E){L(q,J,E)}function K(q){o(q,B)}function X(q,E){let G=q;l(q,E,G[s]??=new Set)}function L(q,E,G){let M=q,Q=Object.prototype.hasOwnProperty.call(M,E)?M[E]:void 0;if(Array.isArray(Q)){Q.push(G);return}Object.defineProperty(M,E,{value:[G]})}function o(q,E){n(q,(G)=>{let M=G[E];if(!Array.isArray(M))return;for(let Q of M)Q(q)})}function l(q,E,G){for(let M of j(q)){let Q=M[J];if(!Array.isArray(Q))continue;for(let Y of Q){if(G.has(Y))continue;Y(q,E),G.add(Y)}}}function j(q){let E=[],G=Object.getPrototypeOf(q);while(G&&G!==Object.prototype)E.unshift(G),G=Object.getPrototypeOf(G);return E}function n(q,E){for(let G of j(q))E(G)}function F(q,E){switch(E){case"construct":K(q);break;case"connect":X(q,"connect");break;case"ssr":X(q,"ssr");break}}function C(q){switch(q){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function p(q){switch(typeof q){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(q))return"array";if(Object.prototype.toString.call(q)==="[object Object]")return"object"}function W(q){switch(q){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function i(q){try{return JSON.parse(q)}catch{throw TypeError("Invalid JSON string")}}var r={array(q){let E=i(q);if(!Array.isArray(E))throw TypeError(`Expected an array but got a value of type "${typeof E}"`);return E},boolean(q){return!(q==="0"||String(q).toLowerCase()==="false")},number(q){return Number(q.replace(/_/g,""))},object(q){let E=JSON.parse(q);if(E===null||typeof E!=="object"||Array.isArray(E))throw TypeError(`expected value of type "object" but instead got value "${q}" of type "${p(E)}"`);return E},string(q){return q}},A={default:T,array:I,object:I};function I(q){return JSON.stringify(q)}function T(q){return`${q}`}function _(q,E){let G=C(E);if(!G)throw TypeError(`[radiant-element] Unknown type "${E}"`);return r[G](q)}function x(q,E){let G=C(E);if(!G)throw TypeError(`[radiant-element] Unknown type "${E}"`);return(A[G]??A.default??T)(q)}function a(q){return typeof q==="boolean"}function t(q){return typeof q==="number"}function e(q){return typeof q==="string"}function qq(q){return Array.isArray(q)}function Eq(q){return typeof q==="object"&&!Array.isArray(q)&&q!==null}function P(q,E){switch(q){case Boolean:return a(E);case Number:return t(E);case String:return e(E);case Array:return qq(E);case Object:return Eq(E);default:return!1}}var Iq=(q,E,G,M)=>{if(E===Boolean){let Y=q.getAttribute(G);if(Y===null)return M;return Y===""?!0:_(Y,E)}let Q=q.getAttribute(G);return Q!==null?_(Q,E):M??W(E)};function S(q,E){if(E!==void 0&&!P(q,E))throw Error(`defaultValue does not match the expected type for ${q.name}`)}function xq(q,E,G,M){return{type:G,name:q,initialValue:M,attribute:E,converter:{fromAttribute:(Q)=>_(Q,G),toAttribute:(Q)=>x(Q,G)}}}import{Computed as Gq,state as Mq,subtle as Qq,trackDependency as Yq}from"@ecopages/signals";function Zq(q){return q}function z(q){return q}var w={trackDependency(q){Yq(Zq(q))},createComputed(q){return new Gq(q)},createWatcher(q){let E=new Qq.Watcher(q);return{watch(G){E.watch(z(G))},unwatch(G){E.unwatch(z(G))}}},createState(q){return Mq(q)}};var R=w;function Z(){return R}function _q(q){R=q}function Nq(q){Z().trackDependency(q)}function k(q){return Z().createComputed(q)}function N(q){return Z().createWatcher(q)}class D{options;needsRender=!1;isRendering=!1;isRenderScheduled=!1;constructor(q){this.options=q}get rendering(){return this.isRendering}get pending(){return this.needsRender}markPending(){this.needsRender=!0}clearPending(){this.needsRender=!1}requestUpdate(){if(this.needsRender=!0,this.isRenderScheduled)return;this.isRenderScheduled=!0,queueMicrotask(()=>{if(this.isRenderScheduled=!1,!this.needsRender)return;this.flush()})}flush(){if(!this.options.canFlush())return;while(this.needsRender&&this.options.canFlush())this.needsRender=!1,this.runCommit()}runExclusive(q){this.isRendering=!0;try{return q()}finally{this.isRendering=!1}}runCommit(){this.isRendering=!0;try{this.options.commit()}finally{this.isRendering=!1}}}import{createSubscribableJsxValue as $q}from"@ecopages/jsx";function f(q){return $q({getValue:()=>q.get(),subscribe:(E)=>q.subscribe(E)})}class H{host;access;shouldAutoBind;bindings;$;reactiveMembers=new Map;jsxBindings=new Map;updateCallbacks=new Map;onConnectedCallbacks=[];onDisconnectedCallback=[];constructor(q,E,G){this.host=q;this.access=E;this.shouldAutoBind=G;let M=this.createReactiveBindingNamespace();this.bindings=M,this.$=M}connectHost(){for(let q of this.onConnectedCallbacks)q()}disconnectHost(){for(let q of this.onDisconnectedCallback)q()}registerCleanupCallback(q){this.onDisconnectedCallback.push(q)}registerConnectedCallback(q){this.onConnectedCallbacks.push(q)}notifyUpdate(q,E,G){let M=this.updateCallbacks.get(q);if(!M)return;for(let Q of[...M.keys()])Q()}getReactiveMember(q){return this.reactiveMembers.get(q)}createReactiveMember(q,E){let G=Z().createState(E);return this.registerMember(q,G),G}registerReactiveMember(q,E){this.registerMember(q,E)}registerMember(q,E){this.reactiveMembers.set(q,E),this.jsxBindings.delete(q);let G=this.updateCallbacks.get(q);if(G)for(let M of G.keys())this.subscribeCallback(q,M)}subscribeCallback(q,E){let G=this.updateCallbacks.get(q),M=this.reactiveMembers.get(q);if(!G||!M||G.get(E))return;let Q=M.subscribe(()=>E());G.set(E,Q)}getReactiveBinding(q){let E=q,G=this.jsxBindings.get(E);if(G)return G;let M=this.reactiveMembers.get(E);if(!M)throw Error(`No reactive binding registered for "${String(q)}".`);let Q=f(M);return this.jsxBindings.set(E,Q),Q}registerUpdateCallback(q,E){let G=this.updateCallbacks.get(q);if(!G)G=new Map,this.updateCallbacks.set(q,G);return G.set(E,void 0),this.subscribeCallback(q,E),()=>{let M=this.updateCallbacks.get(q);if(M?.get(E)?.(),M?.delete(E),M&&M.size===0)this.updateCallbacks.delete(q)}}defineReactiveBinding(q,E=!0){let G=typeof E==="string"?E:E?`$${q}`:void 0,M=this.access.getBindingTarget?.(this.host)??this.host;if(!G||this.access.hasProperty(this.host,G))return;this.access.defineProperty(M,G,{get:()=>this.getReactiveBinding(q),enumerable:!1,configurable:!0})}defineReactiveAccessor(q,E){let G=E.bind??this.shouldAutoBind();this.defineReactiveBinding(q,G),this.access.defineProperty(this.host,q,{get:()=>E.signal.get(),set:(M)=>{E.signal.set(M),E.onSet?.(M)},enumerable:!0,configurable:!0})}createReactiveField(q,E,G={}){let M=this.reactiveMembers.get(q),Q=M??this.createReactiveMember(q,E);if(M&&E!==void 0)Q.set(E);if(this.defineReactiveAccessor(q,{bind:G.bind,signal:Q}),!G.suppressInitialNotify)this.notifyUpdate(q,void 0,Q.get())}createReactiveBindingNamespace(){return new Proxy(Object.create(null),{get:(q,E)=>{if(typeof E!=="string")return;return this.getReactiveBinding(E)}})}}import{render as Uq}from"@ecopages/jsx";class V{host;element;bindings;$;reactiveHost;connected=!1;renderScheduler;isSsrLifecycle=!1;hostSsrRegistry=new U;renderSignal;renderWatcher=N(()=>{this.requestUpdate()});constructor(q){this.host=q,this.element=q,this.reactiveHost=new H(this,{defineProperty:(E,G,M)=>Object.defineProperty(E,G,M),hasProperty:(E,G)=>(G in E),readProperty:(E,G)=>E[G]},()=>this.shouldAutoBindReactiveMembers()),this.bindings=this.reactiveHost.bindings,this.$=this.reactiveHost.$,this.renderScheduler=new D({canFlush:()=>this.connected&&!this.renderScheduler.rendering,commit:()=>{let E=this.getRenderTarget();if(!E)return;Uq(this.resolveTrackedRenderOutput(),E)}}),F(this,"construct")}connect(){if(F(this,"connect"),this.connected=!0,this.reactiveHost.connectHost(),this.shouldRunRenderLifecycle())this.update()}runWithSsrLifecycle(q){this.isSsrLifecycle=!0;try{return q()}finally{this.isSsrLifecycle=!1}}disconnect(){this.connected=!1,this.disconnectRenderWatcher(),this.reactiveHost.disconnectHost()}get isConnected(){return this.connected}render(){return null}requestUpdate(){if(!this.shouldRunRenderLifecycle())return;this.renderScheduler.requestUpdate()}update(){if(!this.shouldRunRenderLifecycle())return;if(!this.getRenderTarget())return;this.renderScheduler.markPending(),this.renderScheduler.flush()}bind(q){return this.reactiveHost.getReactiveBinding(q)}getReactiveBinding(q){return this.reactiveHost.getReactiveBinding(q)}createReactiveField(q,E,G={}){this.reactiveHost.createReactiveField(q,E,G)}createReactiveProp(q,E){let{type:G,defaultValue:M,bind:Q}=E;S(G,M);let Y=new h(this.host,this,q),v=Y.getInitialValue()??M??W(G),b=this.reactiveHost.createReactiveMember(q,v);this.reactiveHost.defineReactiveAccessor(q,{bind:Q,signal:b}),Y.install(),this.registerCleanupCallback(()=>{Y.restore()})}defineReactiveBinding(q,E=!0){this.reactiveHost.defineReactiveBinding(q,E)}notifyUpdate(q,E,G){this.reactiveHost.notifyUpdate(q,E,G)}registerUpdateCallback(q,E){return this.reactiveHost.registerUpdateCallback(q,E)}connectedContextCallback(q){}registerContextProvider(q,E){this.hostSsrRegistry.registerContextProvider(q,E)}registerHydrationBinding(q,E){this.hostSsrRegistry.registerHydrationBinding(q,E)}getSsrContextProviders(){return this.hostSsrRegistry.getContextProviders()}getSsrHydrationBindings(){return this.hostSsrRegistry.getHydrationBindings()}registerCleanupCallback(q){this.reactiveHost.registerCleanupCallback(q)}registerConnectedCallback(q){this.reactiveHost.registerConnectedCallback(q)}createReactiveMember(q,E){return this.reactiveHost.createReactiveMember(q,E)}registerReactiveMember(q,E){this.reactiveHost.registerReactiveMember(q,E)}getReactiveMember(q){return this.reactiveHost.getReactiveMember(q)}addEventListener(q,E,G){this.host.addEventListener(q,E,G)}removeEventListener(q,E,G){this.host.removeEventListener(q,E,G)}dispatchEvent(q){return this.host.dispatchEvent(q)}getRef(q,E=!1){let G=`[data-ref="${q}"]`;if(E)return Array.from(this.host.querySelectorAll(G));return this.host.querySelector(G)??null}shouldAutoBindReactiveMembers(){return!0}shouldRunRenderLifecycle(){return!this.isSsrLifecycle&&this.render!==V.prototype.render}getRenderTarget(){return this.host instanceof HTMLElement?this.host:null}disconnectRenderWatcher(){if(!this.renderSignal)return;this.renderWatcher.unwatch(this.renderSignal),this.renderSignal=void 0}resolveTrackedRenderOutput(){let q=k(()=>this.render()),E=q.get();if(!this.connected)return E;if(this.renderSignal)this.renderWatcher.unwatch(this.renderSignal);return this.renderSignal=q,this.renderWatcher.watch(q),E}}class h{host;controller;propertyName;ownDescriptor;constructor(q,E,G){this.host=q;this.controller=E;this.propertyName=G;this.ownDescriptor=Object.getOwnPropertyDescriptor(this.host,this.propertyName)}getInitialValue(){return Reflect.get(this.host,this.propertyName)}install(){Object.defineProperty(this.host,this.propertyName,{get:()=>Reflect.get(this.controller,this.propertyName),set:(q)=>{Reflect.set(this.controller,this.propertyName,q)},enumerable:this.ownDescriptor?.enumerable??!0,configurable:!0})}restore(){let q=Reflect.get(this.controller,this.propertyName);if(this.ownDescriptor){if(Object.defineProperty(this.host,this.propertyName,this.ownDescriptor),"value"in this.ownDescriptor&&this.ownDescriptor.writable)Reflect.set(this.host,this.propertyName,q);return}Reflect.deleteProperty(this.host,this.propertyName);try{Reflect.set(this.host,this.propertyName,q)}catch{Object.defineProperty(this.host,this.propertyName,{value:q,writable:!0,enumerable:!0,configurable:!0})}}}export{V as RadiantController};
2
+
3
+ //# debugId=3DB3D3D210C581D064756E2164756E21
@@ -0,0 +1,21 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/host-ssr-registry.ts", "../src/decorators/legacy/instance-initializers.ts", "../src/decorators/legacy/host-readiness.ts", "../src/utils/attribute-utils.ts", "../src/core/reactive-prop-core.ts", "../src/core/reactivity-signals.ts", "../src/core/reactivity-runtime.ts", "../src/core/reactivity-adapter.ts", "../src/core/render-scheduler.ts", "../src/core/reactive-binding-adapter.ts", "../src/core/reactive-host.ts", "../src/core/radiant-controller.ts"],
4
+ "sourcesContent": [
5
+ "import type { SsrSerializableContextProvider } from '../context/context-provider';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\n\n/**\n * Shared SSR provider and hydration binding storage for Radiant hosts.\n */\nexport class HostSsrRegistry {\n\tprivate readonly contextProviders = new Map<string, SsrSerializableContextProvider>();\n\tprivate readonly hydrationBindings = new Map<string, SsrSerializableHydrationBinding>();\n\n\tpublic registerContextProvider(name: string, provider: SsrSerializableContextProvider): void {\n\t\tthis.contextProviders.set(name, provider);\n\t\tthis.hydrationBindings.set(name, provider);\n\t}\n\n\tpublic registerHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void {\n\t\tthis.hydrationBindings.set(name, binding);\n\t}\n\n\tpublic getContextProviders(): SsrSerializableContextProvider[] {\n\t\treturn [...this.contextProviders.values()];\n\t}\n\n\tpublic getHydrationBindings(): SsrSerializableHydrationBinding[] {\n\t\treturn [...this.hydrationBindings.values()];\n\t}\n}\n",
6
+ "export type LegacyPostConstructionPhase = 'connect' | 'ssr';\n\ntype LegacyInstanceInitializer<T extends object = object> = (instance: T) => void;\ntype LegacyPostConstructionInitializer<T extends object = object> = (\n\tinstance: T,\n\tphase: LegacyPostConstructionPhase,\n) => void;\n\nconst LEGACY_INSTANCE_INITIALIZERS = Symbol.for('@ecopages/radiant.legacy-instance-initializers');\nconst LEGACY_POST_CONSTRUCTION_INITIALIZERS = Symbol.for('@ecopages/radiant.legacy-post-construction-initializers');\nconst LEGACY_EXECUTED_POST_CONSTRUCTION_INITIALIZERS = Symbol.for(\n\t'@ecopages/radiant.legacy-executed-post-construction-initializers',\n);\n\n/**\n * Registers per-instance initialization work for a legacy decorator.\n *\n * Legacy decorators execute against the prototype, so any initialization that\n * needs the concrete element instance must be deferred until construction time.\n */\nexport function registerLegacyInstanceInitializer<T extends object>(\n\tproto: T,\n\tinitializer: LegacyInstanceInitializer<T>,\n): void {\n\tregisterInitializer(proto, LEGACY_INSTANCE_INITIALIZERS, initializer);\n}\n\n/**\n * Registers post-construction work for a legacy decorator.\n *\n * This phase exists for decorators that eagerly write instance fields. With\n * legacy decorators plus `useDefineForClassFields`, subclass field definition\n * can overwrite values written during the base-class constructor.\n */\nexport function registerLegacyPostConstructionInitializer<T extends object>(\n\tproto: T,\n\tinitializer: LegacyPostConstructionInitializer<T>,\n): void {\n\tregisterInitializer(proto, LEGACY_POST_CONSTRUCTION_INITIALIZERS, initializer);\n}\n\n/**\n * Runs all legacy decorator initializers for a newly constructed element.\n *\n * Initializers are collected from the prototype chain and executed from base to\n * derived class so inherited setup remains stable.\n */\nexport function runLegacyInstanceInitializers<T extends object>(instance: T): void {\n\trunLegacyInitializers(instance, LEGACY_INSTANCE_INITIALIZERS);\n}\n\n/**\n * Runs legacy decorator setup that must happen after subclass field\n * initialization has completed.\n *\n * Each initializer runs at most once per instance even if multiple lifecycle\n * entrypoints call this helper.\n */\nexport function runLegacyPostConstructionInitializers<T extends object>(\n\tinstance: T,\n\tphase: LegacyPostConstructionPhase,\n): void {\n\tconst target = instance as Record<PropertyKey, unknown>;\n\n\trunLegacyPostConstructionInitializersOnPrototypeChain(\n\t\tinstance,\n\t\tphase,\n\t\t(target[LEGACY_EXECUTED_POST_CONSTRUCTION_INITIALIZERS] ??= new Set()) as Set<\n\t\t\tLegacyPostConstructionInitializer<T>\n\t\t>,\n\t);\n}\n\nfunction registerInitializer<T extends object>(\n\tproto: T,\n\tkey: symbol,\n\tinitializer: LegacyInstanceInitializer<T> | LegacyPostConstructionInitializer<T>,\n): void {\n\tconst target = proto as Record<PropertyKey, unknown>;\n\tconst ownInitializers = Object.prototype.hasOwnProperty.call(target, key) ? target[key] : undefined;\n\n\tif (Array.isArray(ownInitializers)) {\n\t\townInitializers.push(initializer);\n\t\treturn;\n\t}\n\n\tObject.defineProperty(target, key, {\n\t\tvalue: [initializer],\n\t});\n}\n\nfunction runLegacyInitializers<T extends object>(instance: T, key: symbol): void {\n\twalkPrototypeChain(instance, (prototype) => {\n\t\tconst initializers = (prototype as Record<PropertyKey, unknown>)[key] as\n\t\t\tLegacyInstanceInitializer<T>[] | undefined;\n\n\t\tif (!Array.isArray(initializers)) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const initializer of initializers) {\n\t\t\tinitializer(instance);\n\t\t}\n\t});\n}\n\nfunction runLegacyPostConstructionInitializersOnPrototypeChain<T extends object>(\n\tinstance: T,\n\tphase: LegacyPostConstructionPhase,\n\texecutedInitializers: Set<LegacyPostConstructionInitializer<T>>,\n): void {\n\tfor (const prototype of collectPrototypeChain(instance)) {\n\t\tconst initializers = (prototype as Record<PropertyKey, unknown>)[LEGACY_POST_CONSTRUCTION_INITIALIZERS] as\n\t\t\tLegacyPostConstructionInitializer<T>[] | undefined;\n\n\t\tif (!Array.isArray(initializers)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tfor (const initializer of initializers) {\n\t\t\tif (executedInitializers.has(initializer)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tinitializer(instance, phase);\n\t\t\texecutedInitializers.add(initializer);\n\t\t}\n\t}\n}\n\nfunction collectPrototypeChain<T extends object>(instance: T): object[] {\n\tconst prototypes: object[] = [];\n\tlet prototype: object | null = Object.getPrototypeOf(instance);\n\n\twhile (prototype && prototype !== Object.prototype) {\n\t\tprototypes.unshift(prototype);\n\t\tprototype = Object.getPrototypeOf(prototype);\n\t}\n\n\treturn prototypes;\n}\n\nfunction walkPrototypeChain<T extends object>(instance: T, visit: (prototype: object) => void): void {\n\tfor (const prototype of collectPrototypeChain(instance)) {\n\t\tvisit(prototype);\n\t}\n}\n",
7
+ "import { runLegacyInstanceInitializers, runLegacyPostConstructionInitializers } from './instance-initializers';\n\nexport type LegacyHostReadinessPhase = 'construct' | 'connect' | 'ssr';\n\n/**\n * Runs legacy decorator initialization for the requested lifecycle phase.\n *\n * Post-construction work is idempotent — multiple calls with `connect` or `ssr`\n * only execute each registered initializer once per instance.\n */\nexport function ensureLegacyHostReady<T extends object>(host: T, phase: LegacyHostReadinessPhase): void {\n\tswitch (phase) {\n\t\tcase 'construct':\n\t\t\trunLegacyInstanceInitializers(host);\n\t\t\tbreak;\n\t\tcase 'connect':\n\t\t\trunLegacyPostConstructionInitializers(host, 'connect');\n\t\t\tbreak;\n\t\tcase 'ssr':\n\t\t\trunLegacyPostConstructionInitializers(host, 'ssr');\n\t\t\tbreak;\n\t}\n}\n",
8
+ "import type { RadiantElement } from '../core/radiant-element';\n\nexport type AttributeTypeConstant = typeof Array | typeof Boolean | typeof Number | typeof Object | typeof String;\n\nexport type AttributeTypeDefault = Array<unknown> | boolean | number | Record<string, unknown> | string;\n\n/**\n * Parses the given attribute type constant and returns its corresponding string representation.\n *\n * @param constant - The attribute type constant to parse.\n * @returns The string representation of the attribute type constant.\n */\nexport function parseAttributeTypeConstant(constant?: AttributeTypeConstant) {\n\tswitch (constant) {\n\t\tcase Array:\n\t\t\treturn 'array';\n\t\tcase Boolean:\n\t\t\treturn 'boolean';\n\t\tcase Number:\n\t\t\treturn 'number';\n\t\tcase Object:\n\t\t\treturn 'object';\n\t\tcase String:\n\t\t\treturn 'string';\n\t}\n}\n\n/**\n * Parses the attribute type default value and returns its type as a string.\n *\n * @param defaultValue - The default value of the attribute type.\n * @returns The type of the default value as a string.\n */\nexport function parseAttributeTypeDefault(defaultValue?: AttributeTypeDefault) {\n\tswitch (typeof defaultValue) {\n\t\tcase 'boolean':\n\t\t\treturn 'boolean';\n\t\tcase 'number':\n\t\t\treturn 'number';\n\t\tcase 'string':\n\t\t\treturn 'string';\n\t}\n\n\tif (Array.isArray(defaultValue)) return 'array';\n\tif (Object.prototype.toString.call(defaultValue) === '[object Object]') return 'object';\n}\n\n/**\n * Returns the default value for a given attribute type.\n *\n * @param type - The attribute type constant.\n * @returns The default value for the specified attribute type.\n */\nexport function defaultValueForType(type: AttributeTypeConstant): unknown {\n\tswitch (type) {\n\t\tcase Number:\n\t\t\treturn 0;\n\t\tcase String:\n\t\t\treturn '';\n\t\tcase Boolean:\n\t\t\treturn false;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\ntype Reader = (value: string) => number | string | boolean | object | unknown[];\n\n/**\n * Utility function to parse a JSON string safely\n */\nfunction parseJSON<T>(value: string): T {\n\ttry {\n\t\treturn JSON.parse(value);\n\t} catch {\n\t\tthrow new TypeError('Invalid JSON string');\n\t}\n}\n\n/**\n * Object that maps attribute types to reader functions.\n * @type {Object.<string, Reader>}\n */\nconst readers: { [type: string]: Reader } = {\n\tarray(value: string): unknown[] {\n\t\tconst array = parseJSON<unknown[]>(value);\n\t\tif (!Array.isArray(array)) {\n\t\t\tthrow new TypeError(`Expected an array but got a value of type \"${typeof array}\"`);\n\t\t}\n\t\treturn array;\n\t},\n\n\tboolean(value: string): boolean {\n\t\treturn !(value === '0' || String(value).toLowerCase() === 'false');\n\t},\n\n\tnumber(value: string): number {\n\t\tconst number = Number(value.replace(/_/g, ''));\n\t\treturn number;\n\t},\n\n\tobject(value: string): object {\n\t\tconst object = JSON.parse(value);\n\t\tif (object === null || typeof object !== 'object' || Array.isArray(object)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseAttributeTypeDefault(\n\t\t\t\t\tobject,\n\t\t\t\t)}\"`,\n\t\t\t);\n\t\t}\n\t\treturn object;\n\t},\n\n\tstring(value: string): string {\n\t\treturn value;\n\t},\n};\n\ntype Writer = (value: unknown) => string;\n\n/**\n * Object that maps attribute types to writer functions.\n * @type {Object.<string, Writer>}\n */\nconst writers: { [type: string]: Writer } = {\n\tdefault: writeString,\n\tarray: writeJSON,\n\tobject: writeJSON,\n};\n\nfunction writeJSON(value: unknown) {\n\treturn JSON.stringify(value);\n}\n\nfunction writeString(value: unknown) {\n\treturn `${value}`;\n}\n\n/**\n * Reads the attribute value based on the provided type.\n * @param value - The attribute value to be read.\n * @param type - The type of the attribute.\n * @returns The parsed attribute value.\n * @throws {TypeError} If the provided type is unknown.\n */\nexport function readAttributeValue(value: string, type: AttributeTypeConstant) {\n\tconst readerType = parseAttributeTypeConstant(type);\n\tif (!readerType) throw new TypeError(`[radiant-element] Unknown type \"${type}\"`);\n\treturn readers[readerType]!(value);\n}\n\nexport type ReadAttributeValueReturnType = ReturnType<typeof readAttributeValue>;\n\n/**\n * Writes the attribute value based on the provided type.\n *\n * @param value - The value to be written.\n * @param type - The type of the attribute.\n * @returns The written attribute value.\n * @throws {TypeError} If the provided type is unknown.\n */\nexport function writeAttributeValue(value: unknown, type: AttributeTypeConstant) {\n\tconst writerType = parseAttributeTypeConstant(type);\n\tif (!writerType) throw new TypeError(`[radiant-element] Unknown type \"${type}\"`);\n\tconst writer: Writer = writers[writerType] ?? writers.default ?? writeString;\n\treturn writer(value);\n}\n\nexport type WriteAttributeValueReturnType = ReturnType<typeof writeAttributeValue>;\n\n/*\n * Type guard functions for each type in AttributeTypeConstant\n */\nfunction isBoolean(value: unknown): value is boolean {\n\treturn typeof value === 'boolean';\n}\n\nfunction isNumber(value: unknown): value is number {\n\treturn typeof value === 'number';\n}\n\nfunction isString(value: unknown): value is string {\n\treturn typeof value === 'string';\n}\n\nfunction isArray(value: unknown): value is Array<unknown> {\n\treturn Array.isArray(value);\n}\n\nfunction isObject(value: unknown): value is object {\n\treturn typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\n\n/*\n * Check function to ensure defaultValue matches the type\n */\nexport function isValueOfType(type: AttributeTypeConstant, defaultValue: unknown): boolean {\n\tswitch (type) {\n\t\tcase Boolean:\n\t\t\treturn isBoolean(defaultValue);\n\t\tcase Number:\n\t\t\treturn isNumber(defaultValue);\n\t\tcase String:\n\t\t\treturn isString(defaultValue);\n\t\tcase Array:\n\t\t\treturn isArray(defaultValue);\n\t\tcase Object:\n\t\t\treturn isObject(defaultValue);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nexport const getInitialValue = (\n\ttarget: RadiantElement,\n\ttype: AttributeTypeConstant,\n\tattributeKey: string,\n\tdefaultValue: unknown,\n) => {\n\tif (type === Boolean) {\n\t\tconst attributeValue = target.getAttribute(attributeKey);\n\t\tif (attributeValue === null) {\n\t\t\treturn defaultValue;\n\t\t}\n\n\t\treturn attributeValue === '' ? true : readAttributeValue(attributeValue, type);\n\t}\n\n\tconst attributeValue = target.getAttribute(attributeKey);\n\treturn attributeValue !== null\n\t\t? readAttributeValue(attributeValue, type)\n\t\t: (defaultValue ?? (defaultValueForType(type) as typeof defaultValue));\n};\n",
9
+ "import type { JsxBindingSourceValue, JsxRenderable, SubscribableJsxValueWithAccess } from '@ecopages/jsx';\nimport type { ReactiveState } from './reactivity-contract';\nimport {\n\ttype AttributeTypeConstant,\n\ttype ReadAttributeValueReturnType,\n\ttype WriteAttributeValueReturnType,\n\tisValueOfType,\n\treadAttributeValue,\n\twriteAttributeValue,\n} from '../utils/attribute-utils';\n\ntype StringPropertyKey<Value> = Extract<keyof Value, string>;\n\nexport interface ReactiveProperty<T = unknown> {\n\ttype: AttributeTypeConstant;\n\tinitialValue?: T;\n\tname: string;\n\tattribute: string;\n\tconverter: {\n\t\tfromAttribute: (value: string) => ReadAttributeValueReturnType;\n\t\ttoAttribute: (value: any) => WriteAttributeValueReturnType;\n\t};\n}\n\nexport type ReactivePropertyOptions<T> = {\n\ttype: AttributeTypeConstant;\n\treflect?: boolean;\n\tattribute?: string;\n\tdefaultValue?: T;\n\tbind?: boolean | string;\n};\n\nexport type ReactiveBindingOption = boolean | string;\n\nexport type ReactiveFieldOptions = {\n\tbind?: ReactiveBindingOption;\n\t/** When true, skip the initial notifyUpdate emitted while defining the field. */\n\tsuppressInitialNotify?: boolean;\n};\n\nexport type ReactiveBindingValue<\n\tHost extends object,\n\tProperty extends StringPropertyKey<Host>,\n> = Host[Property] extends JsxBindingSourceValue ? Host[Property] : JsxRenderable;\n\nexport type ReactiveBindings<Bindings extends object> = {\n\treadonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValueWithAccess<\n\t\tReactiveBindingValue<Bindings, Property>\n\t>;\n};\n\nexport type ReactiveAccessorDefinition<T> = {\n\tbind?: ReactiveBindingOption;\n\tsignal: ReactiveState<T>;\n\tonSet?: (value: T) => void;\n};\n\nexport function validateReactivePropertyDefault(type: AttributeTypeConstant, defaultValue: unknown): void {\n\tif (defaultValue !== undefined && !isValueOfType(type, defaultValue)) {\n\t\tthrow new Error(`defaultValue does not match the expected type for ${type.name}`);\n\t}\n}\n\nexport function createReactivePropertyMapping<T>(\n\tpropertyName: string,\n\tattributeKey: string,\n\ttype: AttributeTypeConstant,\n\tinitialValue: T | undefined,\n): ReactiveProperty<T> {\n\treturn {\n\t\ttype,\n\t\tname: propertyName,\n\t\tinitialValue,\n\t\tattribute: attributeKey,\n\t\tconverter: {\n\t\t\tfromAttribute: (value) => readAttributeValue(value, type),\n\t\t\ttoAttribute: (value) => writeAttributeValue(value, type),\n\t\t},\n\t};\n}\n",
10
+ "import {\n\tComputed as SignalsComputed,\n\tstate as signalsState,\n\tsubtle,\n\ttrackDependency,\n\ttype DependencyNode as SignalsDependencyNode,\n} from '@ecopages/signals';\nimport type {\n\tReactiveComputed,\n\tReactiveDependencyNode,\n\tReactiveRuntime,\n\tReactiveState,\n\tReactiveWatcher,\n} from './reactivity-contract';\n\nfunction asSignalsDependencyNode(node: ReactiveDependencyNode): SignalsDependencyNode {\n\treturn node as SignalsDependencyNode;\n}\n\nfunction asSignalsComputed(signal: ReactiveComputed<unknown>): SignalsComputed<unknown> {\n\treturn signal as SignalsComputed<unknown>;\n}\n\n/**\n * Default Signals-backed implementation of Radiant's internal reactivity\n * runtime contract.\n *\n * This is the only core module that imports `@ecopages/signals` directly. The\n * rest of core consumes the narrower runtime contract through the adapter and\n * runtime holder modules.\n */\nexport const signalsReactiveRuntime: ReactiveRuntime = {\n\ttrackDependency(node) {\n\t\ttrackDependency(asSignalsDependencyNode(node));\n\t},\n\tcreateComputed<T>(read: () => T): ReactiveComputed<T> {\n\t\treturn new SignalsComputed(read);\n\t},\n\tcreateWatcher(notify: () => void): ReactiveWatcher {\n\t\tconst watcher = new subtle.Watcher(notify);\n\n\t\treturn {\n\t\t\twatch(signal) {\n\t\t\t\twatcher.watch(asSignalsComputed(signal));\n\t\t\t},\n\t\t\tunwatch(signal) {\n\t\t\t\twatcher.unwatch(asSignalsComputed(signal));\n\t\t\t},\n\t\t};\n\t},\n\tcreateState<T>(initial: T): ReactiveState<T> {\n\t\treturn signalsState(initial) as unknown as ReactiveState<T>;\n\t},\n};\n",
11
+ "import type { ReactiveRuntime } from './reactivity-contract';\nimport { signalsReactiveRuntime } from './reactivity-signals';\n\nlet activeReactiveRuntime: ReactiveRuntime = signalsReactiveRuntime;\n\n/**\n * Returns the currently active internal reactivity runtime.\n *\n * The current implementation still defaults to the Signals-backed runtime, so\n * importing this module preserves today's behavior. A stricter optional-runtime\n * architecture would move that default installation into an explicit bootstrap\n * step instead of this eager default.\n */\nexport function getReactiveRuntime(): ReactiveRuntime {\n\treturn activeReactiveRuntime;\n}\n\n/**\n * Replaces the active internal reactivity runtime used by Radiant core.\n *\n * This is an internal seam for alternate runtime experiments and tests. It does\n * not yet make Signals optional at module-load time because this module still\n * imports the default Signals-backed runtime eagerly.\n */\nexport function setReactiveRuntime(runtime: ReactiveRuntime): void {\n\tactiveReactiveRuntime = runtime;\n}\n",
12
+ "import { getReactiveRuntime } from './reactivity-runtime';\nexport type {\n\tReactiveComputed,\n\tReactiveDependencyNode,\n\tReactiveRuntime,\n\tReactiveSubscriber,\n\tReactiveWatcher,\n} from './reactivity-contract';\nexport { setReactiveRuntime } from './reactivity-runtime';\n\n/** Tracks one dependency-node read against the active internal reactivity runtime. */\nexport function trackReactiveDependency(node: import('./reactivity-contract').ReactiveDependencyNode): void {\n\tgetReactiveRuntime().trackDependency(node);\n}\n\n/** Creates a computed value using the currently selected internal reactivity runtime. */\nexport function createReactiveComputed<T>(read: () => T): import('./reactivity-contract').ReactiveComputed<T> {\n\treturn getReactiveRuntime().createComputed(read);\n}\n\n/** Creates a watcher using the currently selected internal reactivity runtime. */\nexport function createReactiveWatcher(notify: () => void): import('./reactivity-contract').ReactiveWatcher {\n\treturn getReactiveRuntime().createWatcher(notify);\n}\n",
13
+ "export type RenderSchedulerOptions = {\n\tcanFlush: () => boolean;\n\tcommit: () => void;\n};\n\n/**\n * Coalesces microtask-scheduled render commits for reactive hosts.\n */\nexport class RenderScheduler {\n\tprivate needsRender = false;\n\tprivate isRendering = false;\n\tprivate isRenderScheduled = false;\n\n\tconstructor(private readonly options: RenderSchedulerOptions) {}\n\n\tpublic get rendering(): boolean {\n\t\treturn this.isRendering;\n\t}\n\n\tpublic get pending(): boolean {\n\t\treturn this.needsRender;\n\t}\n\n\tpublic markPending(): void {\n\t\tthis.needsRender = true;\n\t}\n\n\tpublic clearPending(): void {\n\t\tthis.needsRender = false;\n\t}\n\n\tpublic requestUpdate(): void {\n\t\tthis.needsRender = true;\n\n\t\tif (this.isRenderScheduled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isRenderScheduled = true;\n\n\t\tqueueMicrotask(() => {\n\t\t\tthis.isRenderScheduled = false;\n\n\t\t\tif (!this.needsRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.flush();\n\t\t});\n\t}\n\n\tpublic flush(): void {\n\t\tif (!this.options.canFlush()) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (this.needsRender && this.options.canFlush()) {\n\t\t\tthis.needsRender = false;\n\t\t\tthis.runCommit();\n\t\t}\n\t}\n\n\tpublic runExclusive<T>(work: () => T): T {\n\t\tthis.isRendering = true;\n\n\t\ttry {\n\t\t\treturn work();\n\t\t} finally {\n\t\t\tthis.isRendering = false;\n\t\t}\n\t}\n\n\tprivate runCommit(): void {\n\t\tthis.isRendering = true;\n\n\t\ttry {\n\t\t\tthis.options.commit();\n\t\t} finally {\n\t\t\tthis.isRendering = false;\n\t\t}\n\t}\n}\n",
14
+ "import {\n\tcreateSubscribableJsxValue,\n\ttype JsxBindingSourceValue,\n\ttype SubscribableJsxValueWithAccess,\n} from '@ecopages/jsx';\nimport type { ReactiveState } from './reactivity-contract';\n\n/**\n * Adapts a host member {@link ReactiveState} into the jsx binding shape.\n *\n * Kept in a dedicated module so `reactive-host.ts` stays free of direct\n * `@ecopages/jsx` imports while bindings still expose `getValue`, `subscribe`,\n * and `map` for derived child updates.\n */\nexport function adaptReactiveStateToJsxBinding<Value extends JsxBindingSourceValue>(\n\tstate: ReactiveState<Value>,\n): SubscribableJsxValueWithAccess<Value> {\n\treturn createSubscribableJsxValue({\n\t\tgetValue: () => state.get(),\n\t\tsubscribe: (notify) => state.subscribe(notify),\n\t});\n}\n",
15
+ "import type { JsxBindingSourceValue, SubscribableJsxValueWithAccess } from '@ecopages/jsx';\nimport { adaptReactiveStateToJsxBinding } from './reactive-binding-adapter';\nimport { getReactiveRuntime } from './reactivity-runtime';\nimport type { ReactiveState } from './reactivity-contract';\nimport type {\n\tReactiveAccessorDefinition,\n\tReactiveBindingOption,\n\tReactiveBindingValue,\n\tReactiveBindings,\n\tReactiveFieldOptions,\n} from './reactive-prop-core';\n\ntype StringPropertyKey<Value> = Extract<keyof Value, string>;\n\n/**\n * Shared reactive-host contract consumed by decorators and host adapters.\n *\n * `RadiantElement` and `RadiantController` both implement this surface so the\n * decorator layer can define fields, bindings, and context reactions without\n * depending on a specific host class.\n */\nexport interface ReactiveHostLike<Bindings extends object = {}> {\n\treadonly bindings: ReactiveBindings<Bindings>;\n\treadonly $: ReactiveBindings<Bindings>;\n\tbind<Property extends StringPropertyKey<Bindings>>(\n\t\tproperty: Property,\n\t): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;\n\tgetReactiveBinding<Property extends StringPropertyKey<Bindings>>(\n\t\tproperty: Property,\n\t): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;\n\tgetReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;\n\tcreateReactiveField<T>(propertyName: string, initialValue: T, options?: ReactiveFieldOptions): void;\n\tcreateReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;\n\tregisterReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void;\n\tdefineReactiveBinding(property: string, bind?: ReactiveBindingOption): void;\n\tnotifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;\n\tregisterCleanupCallback(callback: () => void): void;\n\tregisterConnectedCallback(callback: () => void): void;\n\tregisterUpdateCallback(property: string, update: () => void): () => void;\n}\n\n/**\n * Shared reactivity engine used by both `RadiantElement` and\n * `RadiantController`.\n *\n * Every reactive host member owns a single signals-backed `ReactiveState`\n * (a `State` for fields/props/attributes, or a user `signal()` for the signal\n * decorator). The jsx binding, `onUpdated` callbacks, and `ReactiveComputed`\n * tracking all read that one state directly, so there is no parallel\n * notification bus or dependency shim.\n *\n * Host-specific concerns such as attribute reflection, render lifecycles, and\n * custom-element APIs stay in the outer host classes.\n */\nexport class ReactiveHost<Host extends object, Bindings extends object = {}> {\n\tpublic readonly bindings: ReactiveBindings<Bindings>;\n\tpublic readonly $: ReactiveBindings<Bindings>;\n\n\tprivate reactiveMembers = new Map<string, ReactiveState<unknown>>();\n\tprivate jsxBindings = new Map<string, SubscribableJsxValueWithAccess<JsxBindingSourceValue>>();\n\t/** `onUpdated` callbacks keyed by property; values are signal unsubscribe disposers when subscribed. */\n\tprivate updateCallbacks = new Map<string, Map<() => void, (() => void) | undefined>>();\n\tprivate onConnectedCallbacks: (() => void)[] = [];\n\tprivate onDisconnectedCallback: (() => void)[] = [];\n\n\tconstructor(\n\t\tprivate readonly host: Host,\n\t\tprivate readonly access: ReactiveHostAccess<Host>,\n\t\tprivate readonly shouldAutoBind: () => boolean,\n\t) {\n\t\tconst bindingNamespace = this.createReactiveBindingNamespace();\n\t\tthis.bindings = bindingNamespace;\n\t\tthis.$ = bindingNamespace;\n\t}\n\n\t/**\n\t * Runs all connection callbacks registered by decorators or host adapters.\n\t */\n\tpublic connectHost(): void {\n\t\tfor (const callback of this.onConnectedCallbacks) {\n\t\t\tcallback();\n\t\t}\n\t}\n\n\t/**\n\t * Runs all cleanup callbacks registered for host disconnect.\n\t */\n\tpublic disconnectHost(): void {\n\t\tfor (const cleanup of this.onDisconnectedCallback) {\n\t\t\tcleanup();\n\t\t}\n\t}\n\n\t/**\n\t * Registers a callback that should run on host disconnect.\n\t */\n\tpublic registerCleanupCallback(callback: () => void): void {\n\t\tthis.onDisconnectedCallback.push(callback);\n\t}\n\n\t/**\n\t * Registers a callback that should run whenever the host connects.\n\t */\n\tpublic registerConnectedCallback(callback: () => void): void {\n\t\tthis.onConnectedCallbacks.push(callback);\n\t}\n\n\t/**\n\t * Fires the `onUpdated` callbacks registered for a member.\n\t *\n\t * This is the only remaining use of the update-callback bus: an initial\n\t * emit for members that want one (currently `@prop`). Change notifications\n\t * flow through the member `State`'s own subscription, not through here.\n\t */\n\tpublic notifyUpdate(changedProperty: string, _oldValue: unknown, _value: unknown): void {\n\t\tconst callbacks = this.updateCallbacks.get(changedProperty);\n\n\t\tif (!callbacks) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const update of [...callbacks.keys()]) {\n\t\t\tupdate();\n\t\t}\n\t}\n\n\t/**\n\t * Returns the member state registered under `propertyName`, if any.\n\t */\n\tpublic getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined {\n\t\treturn this.reactiveMembers.get(propertyName) as ReactiveState<T> | undefined;\n\t}\n\n\t/**\n\t * Creates a new reactive member state and registers it under `propertyName`.\n\t */\n\tpublic createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T> {\n\t\tconst signal = getReactiveRuntime().createState(initialValue) as ReactiveState<T>;\n\t\tthis.registerMember(propertyName, signal as ReactiveState<unknown>);\n\t\treturn signal;\n\t}\n\n\t/**\n\t * Registers an externally-owned reactive member state (used by the\n\t * `signal()` decorator, whose state is a user-provided signals `Signal`).\n\t */\n\tpublic registerReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void {\n\t\tthis.registerMember(propertyName, signal as ReactiveState<unknown>);\n\t}\n\n\t/**\n\t * Stores the member state and subscribes any `onUpdated` callbacks that were\n\t * registered before the member existed (decorator initializer ordering).\n\t */\n\tprivate registerMember(propertyName: string, signal: ReactiveState<unknown>): void {\n\t\tthis.reactiveMembers.set(propertyName, signal);\n\t\tthis.jsxBindings.delete(propertyName);\n\n\t\tconst callbacks = this.updateCallbacks.get(propertyName);\n\n\t\tif (callbacks) {\n\t\t\tfor (const update of callbacks.keys()) {\n\t\t\t\tthis.subscribeCallback(propertyName, update);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Subscribes an `onUpdated` callback to the member state if the member is\n\t * already registered and not yet subscribed.\n\t */\n\tprivate subscribeCallback(propertyName: string, update: () => void): void {\n\t\tconst callbacks = this.updateCallbacks.get(propertyName);\n\t\tconst signal = this.reactiveMembers.get(propertyName);\n\n\t\tif (!callbacks || !signal || callbacks.get(update)) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst unsubscribe = signal.subscribe(() => update());\n\t\tcallbacks.set(update, unsubscribe);\n\t}\n\n\t/**\n\t * Returns the jsx binding for a named reactive member.\n\t *\n\t * The binding is adapted from the member `State` once and cached so derived\n\t * transforms (`map`, member access) share a stable source identity.\n\t */\n\tpublic getReactiveBinding<Property extends StringPropertyKey<Bindings>>(\n\t\tproperty: Property,\n\t): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>> {\n\t\tconst key = property as string;\n\t\tconst cached = this.jsxBindings.get(key);\n\n\t\tif (cached) {\n\t\t\treturn cached as SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;\n\t\t}\n\n\t\tconst signal = this.reactiveMembers.get(key);\n\n\t\tif (!signal) {\n\t\t\tthrow new Error(`No reactive binding registered for \"${String(property)}\".`);\n\t\t}\n\n\t\tconst binding = adaptReactiveStateToJsxBinding(\n\t\t\tsignal as ReactiveState<ReactiveBindingValue<Bindings, Property>>,\n\t\t);\n\n\t\tthis.jsxBindings.set(key, binding);\n\t\treturn binding;\n\t}\n\n\t/**\n\t * Registers an `onUpdated`-style callback for a named reactive member.\n\t *\n\t * Change notifications flow through the member `State`'s own subscription\n\t * (D1). The callback is also kept in the update-callback bus so an initial\n\t * emit (currently `@prop`) can still reach it once after definition.\n\t */\n\tpublic registerUpdateCallback(property: string, update: () => void): () => void {\n\t\tlet callbacks = this.updateCallbacks.get(property);\n\n\t\tif (!callbacks) {\n\t\t\tcallbacks = new Map();\n\t\t\tthis.updateCallbacks.set(property, callbacks);\n\t\t}\n\n\t\tcallbacks.set(update, undefined);\n\t\tthis.subscribeCallback(property, update);\n\n\t\treturn () => {\n\t\t\tconst perProperty = this.updateCallbacks.get(property);\n\t\t\tperProperty?.get(update)?.();\n\t\t\tperProperty?.delete(update);\n\n\t\t\tif (perProperty && perProperty.size === 0) {\n\t\t\t\tthis.updateCallbacks.delete(property);\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * Defines a stable binding companion property such as `$count` on the host or\n\t * its chosen binding target.\n\t */\n\tpublic defineReactiveBinding(property: string, bind: ReactiveBindingOption = true): void {\n\t\tconst bindingPropertyName = typeof bind === 'string' ? bind : bind ? `$${property}` : undefined;\n\t\tconst bindingTarget = this.access.getBindingTarget?.(this.host) ?? this.host;\n\n\t\tif (!bindingPropertyName || this.access.hasProperty(this.host, bindingPropertyName)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.access.defineProperty(bindingTarget, bindingPropertyName, {\n\t\t\tget: () => this.getReactiveBinding(property as StringPropertyKey<Bindings>),\n\t\t\tenumerable: false,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\n\t/**\n\t * Defines a reactive getter/setter pair on the host backed by a member\n\t * `State`, and wires it into the jsx binding namespace.\n\t */\n\tpublic defineReactiveAccessor<T>(propertyName: string, options: ReactiveAccessorDefinition<T>): void {\n\t\tconst bind = options.bind ?? this.shouldAutoBind();\n\n\t\tthis.defineReactiveBinding(propertyName, bind);\n\n\t\tthis.access.defineProperty(this.host, propertyName, {\n\t\t\tget: () => options.signal.get(),\n\t\t\tset: (newValue: T) => {\n\t\t\t\toptions.signal.set(newValue);\n\t\t\t\toptions.onSet?.(newValue);\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\n\t/**\n\t * Defines a controller- or element-local reactive field with optional JSX\n\t * binding exposure.\n\t */\n\tpublic createReactiveField<T>(propertyName: string, initialValue: T, options: ReactiveFieldOptions = {}): void {\n\t\tconst existing = this.reactiveMembers.get(propertyName) as ReactiveState<T> | undefined;\n\t\tconst signal = existing ?? this.createReactiveMember(propertyName, initialValue);\n\n\t\tif (existing && initialValue !== undefined) {\n\t\t\tsignal.set(initialValue);\n\t\t}\n\n\t\tthis.defineReactiveAccessor(propertyName, { bind: options.bind, signal });\n\n\t\tif (!options.suppressInitialNotify) {\n\t\t\tthis.notifyUpdate(propertyName, undefined, signal.get());\n\t\t}\n\t}\n\n\tprivate createReactiveBindingNamespace(): ReactiveBindings<Bindings> {\n\t\treturn new Proxy(Object.create(null) as ReactiveBindings<Bindings>, {\n\t\t\tget: (_target, property) => {\n\t\t\t\tif (typeof property !== 'string') {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn this.getReactiveBinding(property as StringPropertyKey<Bindings>);\n\t\t\t},\n\t\t}) as ReactiveBindings<Bindings>;\n\t}\n}\n\ntype ReactiveHostAccess<Host extends object> = {\n\tdefineProperty(target: object, property: string, descriptor: PropertyDescriptor): void;\n\tgetBindingTarget?(host: Host): object;\n\thasProperty(host: Host, property: string): boolean;\n\treadProperty(host: Host, property: string): unknown;\n};\n",
16
+ "import { render as renderJsx, type JsxRenderable, type SubscribableJsxValueWithAccess } from '@ecopages/jsx';\nimport { createReactiveComputed, createReactiveWatcher, type ReactiveComputed } from './reactivity-adapter';\nimport type { SsrSerializableContextProvider } from '../context/context-provider';\nimport type { UnknownContext } from '../context/types';\nimport { ensureLegacyHostReady } from '../decorators/legacy/host-readiness';\nimport { ReactiveHost, type ReactiveHostLike } from './reactive-host';\nimport type { ReactiveState } from './reactivity-contract';\nimport type {\n\tReactiveBindingOption,\n\tReactivePropertyOptions,\n\tReactiveBindingValue,\n\tReactiveBindings,\n\tReactiveFieldOptions,\n} from './reactive-prop-core';\nimport { HostSsrRegistry } from './host-ssr-registry';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\nimport { RenderScheduler } from './render-scheduler';\nimport { defaultValueForType } from '../utils/attribute-utils';\nimport { validateReactivePropertyDefault } from './reactive-prop-core';\n\ntype StringPropertyKey<Value> = Extract<keyof Value, string>;\n\n/**\n * Attaches Radiant reactivity to an existing DOM element without defining a\n * custom element.\n *\n * `RadiantController` is the controller-host counterpart to `RadiantElement`.\n * It can enhance authored DOM, or it can take over the host's inner DOM by\n * overriding `render()`.\n *\n * When used with the controller registry, the attached host is typically an\n * element carrying `data-controller=\"...\"`.\n *\n * @typeParam Bindings - Explicit internal bindable shape. Include only the\n * reactive keys that JSX bindings should accept.\n */\nexport class RadiantController<Bindings extends object = {}> implements ReactiveHostLike<Bindings> {\n\tpublic readonly host: Element;\n\tpublic readonly element: Element;\n\tpublic readonly bindings: ReactiveBindings<Bindings>;\n\tpublic readonly $: ReactiveBindings<Bindings>;\n\n\tprivate readonly reactiveHost: ReactiveHost<this, Bindings>;\n\tprivate connected = false;\n\tprivate readonly renderScheduler: RenderScheduler;\n\tprivate isSsrLifecycle = false;\n\tprivate readonly hostSsrRegistry = new HostSsrRegistry();\n\tprivate renderSignal?: ReactiveComputed<JsxRenderable>;\n\tprivate readonly renderWatcher = createReactiveWatcher(() => {\n\t\tthis.requestUpdate();\n\t});\n\n\tconstructor(host: Element) {\n\t\tthis.host = host;\n\t\tthis.element = host;\n\t\tthis.reactiveHost = new ReactiveHost<this, Bindings>(\n\t\t\tthis,\n\t\t\t{\n\t\t\t\tdefineProperty: (target, property, descriptor) => Object.defineProperty(target, property, descriptor),\n\t\t\t\thasProperty: (target, property) => property in target,\n\t\t\t\treadProperty: (target, property) => (target as Record<string, unknown>)[property],\n\t\t\t},\n\t\t\t() => this.shouldAutoBindReactiveMembers(),\n\t\t);\n\t\tthis.bindings = this.reactiveHost.bindings;\n\t\tthis.$ = this.reactiveHost.$;\n\t\tthis.renderScheduler = new RenderScheduler({\n\t\t\tcanFlush: () => this.connected && !this.renderScheduler.rendering,\n\t\t\tcommit: () => {\n\t\t\t\tconst renderTarget = this.getRenderTarget();\n\n\t\t\t\tif (!renderTarget) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\trenderJsx(this.resolveTrackedRenderOutput(), renderTarget);\n\t\t\t},\n\t\t});\n\t\tensureLegacyHostReady(this, 'construct');\n\t}\n\n\t/**\n\t * Connects the controller to its host and starts reactive subscriptions.\n\t *\n\t * If the controller owns a render lifecycle by overriding `render()`, the\n\t * first update runs immediately after connection.\n\t */\n\tpublic connect(): void {\n\t\tensureLegacyHostReady(this, 'connect');\n\t\tthis.connected = true;\n\t\tthis.reactiveHost.connectHost();\n\n\t\tif (this.shouldRunRenderLifecycle()) {\n\t\t\tthis.update();\n\t\t}\n\t}\n\n\t/**\n\t * Runs controller lifecycle work in SSR mode so `connect()` skips the client\n\t * render/update path even when subclasses override it.\n\t */\n\tpublic runWithSsrLifecycle<T>(work: () => T): T {\n\t\tthis.isSsrLifecycle = true;\n\n\t\ttry {\n\t\t\treturn work();\n\t\t} finally {\n\t\t\tthis.isSsrLifecycle = false;\n\t\t}\n\t}\n\n\t/**\n\t * Disconnects the controller from its host and tears down reactive work.\n\t */\n\tpublic disconnect(): void {\n\t\tthis.connected = false;\n\t\tthis.disconnectRenderWatcher();\n\t\tthis.reactiveHost.disconnectHost();\n\t}\n\n\tpublic get isConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\t/**\n\t * Returns the JSX tree rendered into the attached host.\n\t *\n\t * The base implementation renders nothing. Override this method when the\n\t * controller should own the host's inner DOM instead of only enhancing\n\t * authored markup.\n\t */\n\tpublic render(): JsxRenderable {\n\t\treturn null;\n\t}\n\n\t/**\n\t * Schedules a render pass for render-owning controllers.\n\t *\n\t * Multiple calls in the same microtask are coalesced into a single update.\n\t */\n\tpublic requestUpdate(): void {\n\t\tif (!this.shouldRunRenderLifecycle()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderScheduler.requestUpdate();\n\t}\n\n\t/**\n\t * Flushes the current render output into the attached host element.\n\t *\n\t * This is a no-op unless the controller overrides `render()`.\n\t */\n\tpublic update(): void {\n\t\tif (!this.shouldRunRenderLifecycle()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.getRenderTarget()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderScheduler.markPending();\n\t\tthis.renderScheduler.flush();\n\t}\n\n\t/**\n\t * Returns a subscribable JSX binding for a selected reactive member.\n\t */\n\tpublic bind<Property extends StringPropertyKey<Bindings>>(\n\t\tproperty: Property,\n\t): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>> {\n\t\treturn this.reactiveHost.getReactiveBinding(property);\n\t}\n\n\t/**\n\t * Returns the cached binding object for a selected reactive member.\n\t */\n\tpublic getReactiveBinding<Property extends StringPropertyKey<Bindings>>(\n\t\tproperty: Property,\n\t): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>> {\n\t\treturn this.reactiveHost.getReactiveBinding(property);\n\t}\n\n\t/**\n\t * Defines a reactive field directly on the controller instance.\n\t */\n\tpublic createReactiveField<T>(propertyName: string, initialValue: T, options: ReactiveFieldOptions = {}): void {\n\t\tthis.reactiveHost.createReactiveField(propertyName, initialValue, options);\n\t}\n\n\t/**\n\t * Defines a controller prop backed by the attached host element's property\n\t * channel instead of attribute serialization.\n\t *\n\t * This gives controller-based integrations the same reactive field surface as\n\t * `@prop(...)` on `RadiantElement`, while allowing external code to assign\n\t * structured values such as arrays or objects directly on `controller.host`.\n\t */\n\tpublic createReactiveProp<T = unknown>(propertyName: string, options: ReactivePropertyOptions<T>): void {\n\t\tconst { type, defaultValue, bind } = options;\n\n\t\tvalidateReactivePropertyDefault(type, defaultValue);\n\n\t\tconst hostPropertyBridge = new ControllerHostPropertyBridge<T>(this.host, this, propertyName);\n\t\tconst initialHostValue = hostPropertyBridge.getInitialValue();\n\t\tconst initialValue = (initialHostValue ?? defaultValue ?? defaultValueForType(type)) as T;\n\n\t\tconst signal = this.reactiveHost.createReactiveMember(propertyName, initialValue);\n\n\t\tthis.reactiveHost.defineReactiveAccessor(propertyName, { bind, signal });\n\n\t\thostPropertyBridge.install();\n\n\t\tthis.registerCleanupCallback(() => {\n\t\t\thostPropertyBridge.restore();\n\t\t});\n\t}\n\n\t/**\n\t * Defines a JSX binding companion such as `$count` for a reactive member.\n\t */\n\tpublic defineReactiveBinding(property: string, bind: ReactiveBindingOption = true): void {\n\t\tthis.reactiveHost.defineReactiveBinding(property, bind);\n\t}\n\n\tpublic notifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void {\n\t\tthis.reactiveHost.notifyUpdate(changedProperty, oldValue, value);\n\t}\n\n\tpublic registerUpdateCallback(property: string, update: () => void): () => void {\n\t\treturn this.reactiveHost.registerUpdateCallback(property, update);\n\t}\n\n\t/**\n\t * Notifies context decorators that a provider or consumer for `contextName`\n\t * finished connecting on this controller host.\n\t *\n\t * Controllers currently rely on the shared client-side context event flow, so\n\t * the base implementation does not need extra bookkeeping here.\n\t */\n\tpublic connectedContextCallback(_contextName: UnknownContext): void {}\n\n\t/**\n\t * Registers a decorated context provider on the controller host.\n\t *\n\t * Controller providers participate in the same client-side event-based context\n\t * flow as `RadiantElement` providers. During SSR, the registered providers are\n\t * also exposed to descendant consumers and hydration payload collection.\n\t */\n\tpublic registerContextProvider(name: string, provider: SsrSerializableContextProvider): void {\n\t\tthis.hostSsrRegistry.registerContextProvider(name, provider);\n\t}\n\n\t/**\n\t * Registers a keyed SSR hydration binding for the controller host.\n\t */\n\tpublic registerHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void {\n\t\tthis.hostSsrRegistry.registerHydrationBinding(name, binding);\n\t}\n\n\t/**\n\t * Returns SSR-visible context providers registered on this controller.\n\t */\n\tpublic getSsrContextProviders(): SsrSerializableContextProvider[] {\n\t\treturn this.hostSsrRegistry.getContextProviders();\n\t}\n\n\t/**\n\t * Returns keyed hydration payload producers registered on this controller.\n\t */\n\tpublic getSsrHydrationBindings(): SsrSerializableHydrationBinding[] {\n\t\treturn this.hostSsrRegistry.getHydrationBindings();\n\t}\n\n\tpublic registerCleanupCallback(callback: () => void): void {\n\t\tthis.reactiveHost.registerCleanupCallback(callback);\n\t}\n\n\tpublic registerConnectedCallback(callback: () => void): void {\n\t\tthis.reactiveHost.registerConnectedCallback(callback);\n\t}\n\n\tpublic createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T> {\n\t\treturn this.reactiveHost.createReactiveMember(propertyName, initialValue);\n\t}\n\n\tpublic registerReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void {\n\t\tthis.reactiveHost.registerReactiveMember(propertyName, signal);\n\t}\n\n\tpublic getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined {\n\t\treturn this.reactiveHost.getReactiveMember(propertyName);\n\t}\n\n\tpublic addEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject,\n\t\toptions?: boolean | AddEventListenerOptions,\n\t): void {\n\t\tthis.host.addEventListener(type, listener, options);\n\t}\n\n\tpublic removeEventListener(\n\t\ttype: string,\n\t\tlistener: EventListenerOrEventListenerObject,\n\t\toptions?: boolean | EventListenerOptions,\n\t): void {\n\t\tthis.host.removeEventListener(type, listener, options);\n\t}\n\n\tpublic dispatchEvent(event: Event): boolean {\n\t\treturn this.host.dispatchEvent(event);\n\t}\n\n\t/**\n\t * Finds one or more elements inside the attached host by `data-ref`.\n\t *\n\t * Prefer `@query(...)` for stable, decorator-backed refs and use `getRef(...)`\n\t * for one-off lookups.\n\t */\n\tpublic getRef<T extends Element = Element>(ref: string, all: true): T[];\n\tpublic getRef<T extends Element = Element>(ref: string, all?: false): T | null;\n\tpublic getRef<T extends Element = Element>(ref: string, all = false): T | T[] | null {\n\t\tconst selector = `[data-ref=\"${ref}\"]`;\n\n\t\tif (all) {\n\t\t\treturn Array.from(this.host.querySelectorAll(selector)) as T[];\n\t\t}\n\n\t\treturn (this.host.querySelector(selector) as T) ?? null;\n\t}\n\n\tprotected shouldAutoBindReactiveMembers(): boolean {\n\t\treturn true;\n\t}\n\n\tprotected shouldRunRenderLifecycle(): boolean {\n\t\treturn !this.isSsrLifecycle && this.render !== RadiantController.prototype.render;\n\t}\n\n\tprivate getRenderTarget(): HTMLElement | null {\n\t\treturn this.host instanceof HTMLElement ? this.host : null;\n\t}\n\n\tprivate disconnectRenderWatcher(): void {\n\t\tif (!this.renderSignal) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.renderWatcher.unwatch(this.renderSignal);\n\t\tthis.renderSignal = undefined;\n\t}\n\n\tprivate resolveTrackedRenderOutput(): JsxRenderable {\n\t\tconst nextRenderSignal = createReactiveComputed(() => this.render());\n\t\tconst output = nextRenderSignal.get();\n\n\t\tif (!this.connected) {\n\t\t\treturn output;\n\t\t}\n\n\t\tif (this.renderSignal) {\n\t\t\tthis.renderWatcher.unwatch(this.renderSignal);\n\t\t}\n\n\t\tthis.renderSignal = nextRenderSignal;\n\t\tthis.renderWatcher.watch(nextRenderSignal);\n\t\treturn output;\n\t}\n}\n\nclass ControllerHostPropertyBridge<T> {\n\tprivate readonly ownDescriptor: PropertyDescriptor | undefined;\n\n\tconstructor(\n\t\tprivate readonly host: Element,\n\t\tprivate readonly controller: object,\n\t\tprivate readonly propertyName: string,\n\t) {\n\t\tthis.ownDescriptor = Object.getOwnPropertyDescriptor(this.host, this.propertyName);\n\t}\n\n\tpublic getInitialValue(): T | undefined {\n\t\treturn Reflect.get(this.host, this.propertyName) as T | undefined;\n\t}\n\n\tpublic install(): void {\n\t\tObject.defineProperty(this.host, this.propertyName, {\n\t\t\tget: () => Reflect.get(this.controller, this.propertyName),\n\t\t\tset: (newValue: T) => {\n\t\t\t\tReflect.set(this.controller, this.propertyName, newValue);\n\t\t\t},\n\t\t\tenumerable: this.ownDescriptor?.enumerable ?? true,\n\t\t\tconfigurable: true,\n\t\t});\n\t}\n\n\tpublic restore(): void {\n\t\tconst finalValue = Reflect.get(this.controller, this.propertyName);\n\n\t\tif (this.ownDescriptor) {\n\t\t\tObject.defineProperty(this.host, this.propertyName, this.ownDescriptor);\n\n\t\t\tif ('value' in this.ownDescriptor && this.ownDescriptor.writable) {\n\t\t\t\tReflect.set(this.host, this.propertyName, finalValue);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tReflect.deleteProperty(this.host, this.propertyName);\n\n\t\ttry {\n\t\t\tReflect.set(this.host, this.propertyName, finalValue);\n\t\t} catch {\n\t\t\tObject.defineProperty(this.host, this.propertyName, {\n\t\t\t\tvalue: finalValue,\n\t\t\t\twritable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true,\n\t\t\t});\n\t\t}\n\t}\n}\n"
17
+ ],
18
+ "mappings": "q0BAMO,MAAM,CAAgB,CACX,iBAAmB,IAAI,IACvB,kBAAoB,IAAI,IAElC,uBAAuB,CAAC,EAAc,EAAgD,CAC5F,KAAK,iBAAiB,IAAI,EAAM,CAAQ,EACxC,KAAK,kBAAkB,IAAI,EAAM,CAAQ,EAGnC,wBAAwB,CAAC,EAAc,EAAgD,CAC7F,KAAK,kBAAkB,IAAI,EAAM,CAAO,EAGlC,mBAAmB,EAAqC,CAC9D,MAAO,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAGnC,oBAAoB,EAAsC,CAChE,MAAO,CAAC,GAAG,KAAK,kBAAkB,OAAO,CAAC,EAE5C,CClBA,IAAM,EAA+B,OAAO,IAAI,gDAAgD,EAC1F,EAAwC,OAAO,IAAI,yDAAyD,EAC5G,EAAiD,OAAO,IAC7D,kEACD,EAQO,SAAS,EAAmD,CAClE,EACA,EACO,CACP,EAAoB,EAAO,EAA8B,CAAW,EAU9D,SAAS,EAA2D,CAC1E,EACA,EACO,CACP,EAAoB,EAAO,EAAuC,CAAW,EASvE,SAAS,CAA+C,CAAC,EAAmB,CAClF,EAAsB,EAAU,CAA4B,EAUtD,SAAS,CAAuD,CACtE,EACA,EACO,CACP,IAAM,EAAS,EAEf,EACC,EACA,EACC,EAAO,KAAoD,IAAI,GAGjE,EAGD,SAAS,CAAqC,CAC7C,EACA,EACA,EACO,CACP,IAAM,EAAS,EACT,EAAkB,OAAO,UAAU,eAAe,KAAK,EAAQ,CAAG,EAAI,EAAO,GAAO,OAE1F,GAAI,MAAM,QAAQ,CAAe,EAAG,CACnC,EAAgB,KAAK,CAAW,EAChC,OAGD,OAAO,eAAe,EAAQ,EAAK,CAClC,MAAO,CAAC,CAAW,CACpB,CAAC,EAGF,SAAS,CAAuC,CAAC,EAAa,EAAmB,CAChF,EAAmB,EAAU,CAAC,IAAc,CAC3C,IAAM,EAAgB,EAA2C,GAGjE,GAAI,CAAC,MAAM,QAAQ,CAAY,EAC9B,OAGD,QAAW,KAAe,EACzB,EAAY,CAAQ,EAErB,EAGF,SAAS,CAAuE,CAC/E,EACA,EACA,EACO,CACP,QAAW,KAAa,EAAsB,CAAQ,EAAG,CACxD,IAAM,EAAgB,EAA2C,GAGjE,GAAI,CAAC,MAAM,QAAQ,CAAY,EAC9B,SAGD,QAAW,KAAe,EAAc,CACvC,GAAI,EAAqB,IAAI,CAAW,EACvC,SAGD,EAAY,EAAU,CAAK,EAC3B,EAAqB,IAAI,CAAW,IAKvC,SAAS,CAAuC,CAAC,EAAuB,CACvE,IAAM,EAAuB,CAAC,EAC1B,EAA2B,OAAO,eAAe,CAAQ,EAE7D,MAAO,GAAa,IAAc,OAAO,UACxC,EAAW,QAAQ,CAAS,EAC5B,EAAY,OAAO,eAAe,CAAS,EAG5C,OAAO,EAGR,SAAS,CAAoC,CAAC,EAAa,EAA0C,CACpG,QAAW,KAAa,EAAsB,CAAQ,EACrD,EAAM,CAAS,ECtIV,SAAS,CAAuC,CAAC,EAAS,EAAuC,CACvG,OAAQ,OACF,YACJ,EAA8B,CAAI,EAClC,UACI,UACJ,EAAsC,EAAM,SAAS,EACrD,UACI,MACJ,EAAsC,EAAM,KAAK,EACjD,OCRI,SAAS,CAA0B,CAAC,EAAkC,CAC5E,OAAQ,QACF,MACJ,MAAO,aACH,QACJ,MAAO,eACH,OACJ,MAAO,cACH,OACJ,MAAO,cACH,OACJ,MAAO,UAUH,SAAS,CAAyB,CAAC,EAAqC,CAC9E,OAAQ,OAAO,OACT,UACJ,MAAO,cACH,SACJ,MAAO,aACH,SACJ,MAAO,SAGT,GAAI,MAAM,QAAQ,CAAY,EAAG,MAAO,QACxC,GAAI,OAAO,UAAU,SAAS,KAAK,CAAY,IAAM,kBAAmB,MAAO,SASzE,SAAS,CAAmB,CAAC,EAAsC,CACzE,OAAQ,QACF,OACJ,MAAO,QACH,OACJ,MAAO,QACH,QACJ,MAAO,WAEP,OAAO,MASV,SAAS,CAAY,CAAC,EAAkB,CACvC,GAAI,CACH,OAAO,KAAK,MAAM,CAAK,EACtB,KAAM,CACP,MAAU,UAAU,qBAAqB,GAQ3C,IAAM,EAAsC,CAC3C,KAAK,CAAC,EAA0B,CAC/B,IAAM,EAAQ,EAAqB,CAAK,EACxC,GAAI,CAAC,MAAM,QAAQ,CAAK,EACvB,MAAU,UAAU,8CAA8C,OAAO,IAAQ,EAElF,OAAO,GAGR,OAAO,CAAC,EAAwB,CAC/B,MAAO,EAAE,IAAU,KAAO,OAAO,CAAK,EAAE,YAAY,IAAM,UAG3D,MAAM,CAAC,EAAuB,CAE7B,OADe,OAAO,EAAM,QAAQ,KAAM,EAAE,CAAC,GAI9C,MAAM,CAAC,EAAuB,CAC7B,IAAM,EAAS,KAAK,MAAM,CAAK,EAC/B,GAAI,IAAW,MAAQ,OAAO,IAAW,UAAY,MAAM,QAAQ,CAAM,EACxE,MAAU,UACT,0DAA0D,eAAmB,EAC5E,CACD,IACD,EAED,OAAO,GAGR,MAAM,CAAC,EAAuB,CAC7B,OAAO,EAET,EAQM,EAAsC,CAC3C,QAAS,EACT,MAAO,EACP,OAAQ,CACT,EAEA,SAAS,CAAS,CAAC,EAAgB,CAClC,OAAO,KAAK,UAAU,CAAK,EAG5B,SAAS,CAAW,CAAC,EAAgB,CACpC,MAAO,GAAG,IAUJ,SAAS,CAAkB,CAAC,EAAe,EAA6B,CAC9E,IAAM,EAAa,EAA2B,CAAI,EAClD,GAAI,CAAC,EAAY,MAAU,UAAU,mCAAmC,IAAO,EAC/E,OAAO,EAAQ,GAAa,CAAK,EAa3B,SAAS,CAAmB,CAAC,EAAgB,EAA6B,CAChF,IAAM,EAAa,EAA2B,CAAI,EAClD,GAAI,CAAC,EAAY,MAAU,UAAU,mCAAmC,IAAO,EAE/E,OADuB,EAAQ,IAAe,EAAQ,SAAW,GACnD,CAAK,EAQpB,SAAS,CAAS,CAAC,EAAkC,CACpD,OAAO,OAAO,IAAU,UAGzB,SAAS,CAAQ,CAAC,EAAiC,CAClD,OAAO,OAAO,IAAU,SAGzB,SAAS,CAAQ,CAAC,EAAiC,CAClD,OAAO,OAAO,IAAU,SAGzB,SAAS,EAAO,CAAC,EAAyC,CACzD,OAAO,MAAM,QAAQ,CAAK,EAG3B,SAAS,EAAQ,CAAC,EAAiC,CAClD,OAAO,OAAO,IAAU,UAAY,CAAC,MAAM,QAAQ,CAAK,GAAK,IAAU,KAMjE,SAAS,CAAa,CAAC,EAA6B,EAAgC,CAC1F,OAAQ,QACF,QACJ,OAAO,EAAU,CAAY,OACzB,OACJ,OAAO,EAAS,CAAY,OACxB,OACJ,OAAO,EAAS,CAAY,OACxB,MACJ,OAAO,GAAQ,CAAY,OACvB,OACJ,OAAO,GAAS,CAAY,UAE5B,MAAO,IAIH,IAAM,GAAkB,CAC9B,EACA,EACA,EACA,IACI,CACJ,GAAI,IAAS,QAAS,CACrB,IAAM,EAAiB,EAAO,aAAa,CAAY,EACvD,GAAI,IAAmB,KACtB,OAAO,EAGR,OAAO,IAAmB,GAAK,GAAO,EAAmB,EAAgB,CAAI,EAG9E,IAAM,EAAiB,EAAO,aAAa,CAAY,EACvD,OAAO,IAAmB,KACvB,EAAmB,EAAgB,CAAI,EACtC,GAAiB,EAAoB,CAAI,GC9KvC,SAAS,CAA+B,CAAC,EAA6B,EAA6B,CACzG,GAAI,IAAiB,QAAa,CAAC,EAAc,EAAM,CAAY,EAClE,MAAU,MAAM,qDAAqD,EAAK,MAAM,EAI3E,SAAS,EAAgC,CAC/C,EACA,EACA,EACA,EACsB,CACtB,MAAO,CACN,OACA,KAAM,EACN,eACA,UAAW,EACX,UAAW,CACV,cAAe,CAAC,IAAU,EAAmB,EAAO,CAAI,EACxD,YAAa,CAAC,IAAU,EAAoB,EAAO,CAAI,CACxD,CACD,EC9ED,mBACC,YACA,aACA,sBACA,2BAWD,SAAS,EAAuB,CAAC,EAAqD,CACrF,OAAO,EAGR,SAAS,CAAiB,CAAC,EAA6D,CACvF,OAAO,EAWD,IAAM,EAA0C,CACtD,eAAe,CAAC,EAAM,CACrB,GAAgB,GAAwB,CAAI,CAAC,GAE9C,cAAiB,CAAC,EAAoC,CACrD,OAAO,IAAI,GAAgB,CAAI,GAEhC,aAAa,CAAC,EAAqC,CAClD,IAAM,EAAU,IAAI,GAAO,QAAQ,CAAM,EAEzC,MAAO,CACN,KAAK,CAAC,EAAQ,CACb,EAAQ,MAAM,EAAkB,CAAM,CAAC,GAExC,OAAO,CAAC,EAAQ,CACf,EAAQ,QAAQ,EAAkB,CAAM,CAAC,EAE3C,GAED,WAAc,CAAC,EAA8B,CAC5C,OAAO,GAAa,CAAO,EAE7B,EClDA,IAAI,EAAyC,EAUtC,SAAS,CAAkB,EAAoB,CACrD,OAAO,EAUD,SAAS,EAAkB,CAAC,EAAgC,CAClE,EAAwB,ECdlB,SAAS,EAAuB,CAAC,EAAoE,CAC3G,EAAmB,EAAE,gBAAgB,CAAI,EAInC,SAAS,CAAyB,CAAC,EAAoE,CAC7G,OAAO,EAAmB,EAAE,eAAe,CAAI,EAIzC,SAAS,CAAqB,CAAC,EAAqE,CAC1G,OAAO,EAAmB,EAAE,cAAc,CAAM,ECd1C,MAAM,CAAgB,CAKC,QAJrB,YAAc,GACd,YAAc,GACd,kBAAoB,GAE5B,WAAW,CAAkB,EAAiC,CAAjC,kBAElB,UAAS,EAAY,CAC/B,OAAO,KAAK,eAGF,QAAO,EAAY,CAC7B,OAAO,KAAK,YAGN,WAAW,EAAS,CAC1B,KAAK,YAAc,GAGb,YAAY,EAAS,CAC3B,KAAK,YAAc,GAGb,aAAa,EAAS,CAG5B,GAFA,KAAK,YAAc,GAEf,KAAK,kBACR,OAGD,KAAK,kBAAoB,GAEzB,eAAe,IAAM,CAGpB,GAFA,KAAK,kBAAoB,GAErB,CAAC,KAAK,YACT,OAGD,KAAK,MAAM,EACX,EAGK,KAAK,EAAS,CACpB,GAAI,CAAC,KAAK,QAAQ,SAAS,EAC1B,OAGD,MAAO,KAAK,aAAe,KAAK,QAAQ,SAAS,EAChD,KAAK,YAAc,GACnB,KAAK,UAAU,EAIV,YAAe,CAAC,EAAkB,CACxC,KAAK,YAAc,GAEnB,GAAI,CACH,OAAO,EAAK,SACX,CACD,KAAK,YAAc,IAIb,SAAS,EAAS,CACzB,KAAK,YAAc,GAEnB,GAAI,CACH,KAAK,QAAQ,OAAO,SACnB,CACD,KAAK,YAAc,IAGtB,CCjFA,qCACC,uBAaM,SAAS,CAAmE,CAClF,EACwC,CACxC,OAAO,GAA2B,CACjC,SAAU,IAAM,EAAM,IAAI,EAC1B,UAAW,CAAC,IAAW,EAAM,UAAU,CAAM,CAC9C,CAAC,ECkCK,MAAM,CAAgE,CAY1D,KACA,OACA,eAbF,SACA,EAER,gBAAkB,IAAI,IACtB,YAAc,IAAI,IAElB,gBAAkB,IAAI,IACtB,qBAAuC,CAAC,EACxC,uBAAyC,CAAC,EAElD,WAAW,CACO,EACA,EACA,EAChB,CAHgB,YACA,cACA,sBAEjB,IAAM,EAAmB,KAAK,+BAA+B,EAC7D,KAAK,SAAW,EAChB,KAAK,EAAI,EAMH,WAAW,EAAS,CAC1B,QAAW,KAAY,KAAK,qBAC3B,EAAS,EAOJ,cAAc,EAAS,CAC7B,QAAW,KAAW,KAAK,uBAC1B,EAAQ,EAOH,uBAAuB,CAAC,EAA4B,CAC1D,KAAK,uBAAuB,KAAK,CAAQ,EAMnC,yBAAyB,CAAC,EAA4B,CAC5D,KAAK,qBAAqB,KAAK,CAAQ,EAUjC,YAAY,CAAC,EAAyB,EAAoB,EAAuB,CACvF,IAAM,EAAY,KAAK,gBAAgB,IAAI,CAAe,EAE1D,GAAI,CAAC,EACJ,OAGD,QAAW,IAAU,CAAC,GAAG,EAAU,KAAK,CAAC,EACxC,EAAO,EAOF,iBAA8B,CAAC,EAAoD,CACzF,OAAO,KAAK,gBAAgB,IAAI,CAAY,EAMtC,oBAAuB,CAAC,EAAsB,EAAmC,CACvF,IAAM,EAAS,EAAmB,EAAE,YAAY,CAAY,EAE5D,OADA,KAAK,eAAe,EAAc,CAAgC,EAC3D,EAOD,sBAAyB,CAAC,EAAsB,EAAgC,CACtF,KAAK,eAAe,EAAc,CAAgC,EAO3D,cAAc,CAAC,EAAsB,EAAsC,CAClF,KAAK,gBAAgB,IAAI,EAAc,CAAM,EAC7C,KAAK,YAAY,OAAO,CAAY,EAEpC,IAAM,EAAY,KAAK,gBAAgB,IAAI,CAAY,EAEvD,GAAI,EACH,QAAW,KAAU,EAAU,KAAK,EACnC,KAAK,kBAAkB,EAAc,CAAM,EAStC,iBAAiB,CAAC,EAAsB,EAA0B,CACzE,IAAM,EAAY,KAAK,gBAAgB,IAAI,CAAY,EACjD,EAAS,KAAK,gBAAgB,IAAI,CAAY,EAEpD,GAAI,CAAC,GAAa,CAAC,GAAU,EAAU,IAAI,CAAM,EAChD,OAGD,IAAM,EAAc,EAAO,UAAU,IAAM,EAAO,CAAC,EACnD,EAAU,IAAI,EAAQ,CAAW,EAS3B,kBAAgE,CACtE,EAC2E,CAC3E,IAAM,EAAM,EACN,EAAS,KAAK,YAAY,IAAI,CAAG,EAEvC,GAAI,EACH,OAAO,EAGR,IAAM,EAAS,KAAK,gBAAgB,IAAI,CAAG,EAE3C,GAAI,CAAC,EACJ,MAAU,MAAM,uCAAuC,OAAO,CAAQ,KAAK,EAG5E,IAAM,EAAU,EACf,CACD,EAGA,OADA,KAAK,YAAY,IAAI,EAAK,CAAO,EAC1B,EAUD,sBAAsB,CAAC,EAAkB,EAAgC,CAC/E,IAAI,EAAY,KAAK,gBAAgB,IAAI,CAAQ,EAEjD,GAAI,CAAC,EACJ,EAAY,IAAI,IAChB,KAAK,gBAAgB,IAAI,EAAU,CAAS,EAM7C,OAHA,EAAU,IAAI,EAAQ,MAAS,EAC/B,KAAK,kBAAkB,EAAU,CAAM,EAEhC,IAAM,CACZ,IAAM,EAAc,KAAK,gBAAgB,IAAI,CAAQ,EAIrD,GAHA,GAAa,IAAI,CAAM,IAAI,EAC3B,GAAa,OAAO,CAAM,EAEtB,GAAe,EAAY,OAAS,EACvC,KAAK,gBAAgB,OAAO,CAAQ,GAShC,qBAAqB,CAAC,EAAkB,EAA8B,GAAY,CACxF,IAAM,EAAsB,OAAO,IAAS,SAAW,EAAO,EAAO,IAAI,IAAa,OAChF,EAAgB,KAAK,OAAO,mBAAmB,KAAK,IAAI,GAAK,KAAK,KAExE,GAAI,CAAC,GAAuB,KAAK,OAAO,YAAY,KAAK,KAAM,CAAmB,EACjF,OAGD,KAAK,OAAO,eAAe,EAAe,EAAqB,CAC9D,IAAK,IAAM,KAAK,mBAAmB,CAAuC,EAC1E,WAAY,GACZ,aAAc,EACf,CAAC,EAOK,sBAAyB,CAAC,EAAsB,EAA8C,CACpG,IAAM,EAAO,EAAQ,MAAQ,KAAK,eAAe,EAEjD,KAAK,sBAAsB,EAAc,CAAI,EAE7C,KAAK,OAAO,eAAe,KAAK,KAAM,EAAc,CACnD,IAAK,IAAM,EAAQ,OAAO,IAAI,EAC9B,IAAK,CAAC,IAAgB,CACrB,EAAQ,OAAO,IAAI,CAAQ,EAC3B,EAAQ,QAAQ,CAAQ,GAEzB,WAAY,GACZ,aAAc,EACf,CAAC,EAOK,mBAAsB,CAAC,EAAsB,EAAiB,EAAgC,CAAC,EAAS,CAC9G,IAAM,EAAW,KAAK,gBAAgB,IAAI,CAAY,EAChD,EAAS,GAAY,KAAK,qBAAqB,EAAc,CAAY,EAE/E,GAAI,GAAY,IAAiB,OAChC,EAAO,IAAI,CAAY,EAKxB,GAFA,KAAK,uBAAuB,EAAc,CAAE,KAAM,EAAQ,KAAM,QAAO,CAAC,EAEpE,CAAC,EAAQ,sBACZ,KAAK,aAAa,EAAc,OAAW,EAAO,IAAI,CAAC,EAIjD,8BAA8B,EAA+B,CACpE,OAAO,IAAI,MAAM,OAAO,OAAO,IAAI,EAAiC,CACnE,IAAK,CAAC,EAAS,IAAa,CAC3B,GAAI,OAAO,IAAa,SACvB,OAGD,OAAO,KAAK,mBAAmB,CAAuC,EAExE,CAAC,EAEH,CCvTA,iBAAS,uBAoCF,MAAM,CAAsF,CAClF,KACA,QACA,SACA,EAEC,aACT,UAAY,GACH,gBACT,eAAiB,GACR,gBAAkB,IAAI,EAC/B,aACS,cAAgB,EAAsB,IAAM,CAC5D,KAAK,cAAc,EACnB,EAED,WAAW,CAAC,EAAe,CAC1B,KAAK,KAAO,EACZ,KAAK,QAAU,EACf,KAAK,aAAe,IAAI,EACvB,KACA,CACC,eAAgB,CAAC,EAAQ,EAAU,IAAe,OAAO,eAAe,EAAQ,EAAU,CAAU,EACpG,YAAa,CAAC,EAAQ,KAAa,KAAY,GAC/C,aAAc,CAAC,EAAQ,IAAc,EAAmC,EACzE,EACA,IAAM,KAAK,8BAA8B,CAC1C,EACA,KAAK,SAAW,KAAK,aAAa,SAClC,KAAK,EAAI,KAAK,aAAa,EAC3B,KAAK,gBAAkB,IAAI,EAAgB,CAC1C,SAAU,IAAM,KAAK,WAAa,CAAC,KAAK,gBAAgB,UACxD,OAAQ,IAAM,CACb,IAAM,EAAe,KAAK,gBAAgB,EAE1C,GAAI,CAAC,EACJ,OAGD,GAAU,KAAK,2BAA2B,EAAG,CAAY,EAE3D,CAAC,EACD,EAAsB,KAAM,WAAW,EASjC,OAAO,EAAS,CAKtB,GAJA,EAAsB,KAAM,SAAS,EACrC,KAAK,UAAY,GACjB,KAAK,aAAa,YAAY,EAE1B,KAAK,yBAAyB,EACjC,KAAK,OAAO,EAQP,mBAAsB,CAAC,EAAkB,CAC/C,KAAK,eAAiB,GAEtB,GAAI,CACH,OAAO,EAAK,SACX,CACD,KAAK,eAAiB,IAOjB,UAAU,EAAS,CACzB,KAAK,UAAY,GACjB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,eAAe,KAGvB,YAAW,EAAY,CACjC,OAAO,KAAK,UAUN,MAAM,EAAkB,CAC9B,OAAO,KAQD,aAAa,EAAS,CAC5B,GAAI,CAAC,KAAK,yBAAyB,EAClC,OAGD,KAAK,gBAAgB,cAAc,EAQ7B,MAAM,EAAS,CACrB,GAAI,CAAC,KAAK,yBAAyB,EAClC,OAGD,GAAI,CAAC,KAAK,gBAAgB,EACzB,OAGD,KAAK,gBAAgB,YAAY,EACjC,KAAK,gBAAgB,MAAM,EAMrB,IAAkD,CACxD,EAC2E,CAC3E,OAAO,KAAK,aAAa,mBAAmB,CAAQ,EAM9C,kBAAgE,CACtE,EAC2E,CAC3E,OAAO,KAAK,aAAa,mBAAmB,CAAQ,EAM9C,mBAAsB,CAAC,EAAsB,EAAiB,EAAgC,CAAC,EAAS,CAC9G,KAAK,aAAa,oBAAoB,EAAc,EAAc,CAAO,EAWnE,kBAA+B,CAAC,EAAsB,EAA2C,CACvG,IAAQ,OAAM,eAAc,QAAS,EAErC,EAAgC,EAAM,CAAY,EAElD,IAAM,EAAqB,IAAI,EAAgC,KAAK,KAAM,KAAM,CAAY,EAEtF,EADmB,EAAmB,gBAAgB,GAClB,GAAgB,EAAoB,CAAI,EAE5E,EAAS,KAAK,aAAa,qBAAqB,EAAc,CAAY,EAEhF,KAAK,aAAa,uBAAuB,EAAc,CAAE,OAAM,QAAO,CAAC,EAEvE,EAAmB,QAAQ,EAE3B,KAAK,wBAAwB,IAAM,CAClC,EAAmB,QAAQ,EAC3B,EAMK,qBAAqB,CAAC,EAAkB,EAA8B,GAAY,CACxF,KAAK,aAAa,sBAAsB,EAAU,CAAI,EAGhD,YAAY,CAAC,EAAyB,EAAmB,EAAsB,CACrF,KAAK,aAAa,aAAa,EAAiB,EAAU,CAAK,EAGzD,sBAAsB,CAAC,EAAkB,EAAgC,CAC/E,OAAO,KAAK,aAAa,uBAAuB,EAAU,CAAM,EAU1D,wBAAwB,CAAC,EAAoC,EAS7D,uBAAuB,CAAC,EAAc,EAAgD,CAC5F,KAAK,gBAAgB,wBAAwB,EAAM,CAAQ,EAMrD,wBAAwB,CAAC,EAAc,EAAgD,CAC7F,KAAK,gBAAgB,yBAAyB,EAAM,CAAO,EAMrD,sBAAsB,EAAqC,CACjE,OAAO,KAAK,gBAAgB,oBAAoB,EAM1C,uBAAuB,EAAsC,CACnE,OAAO,KAAK,gBAAgB,qBAAqB,EAG3C,uBAAuB,CAAC,EAA4B,CAC1D,KAAK,aAAa,wBAAwB,CAAQ,EAG5C,yBAAyB,CAAC,EAA4B,CAC5D,KAAK,aAAa,0BAA0B,CAAQ,EAG9C,oBAAuB,CAAC,EAAsB,EAAmC,CACvF,OAAO,KAAK,aAAa,qBAAqB,EAAc,CAAY,EAGlE,sBAAyB,CAAC,EAAsB,EAAgC,CACtF,KAAK,aAAa,uBAAuB,EAAc,CAAM,EAGvD,iBAA8B,CAAC,EAAoD,CACzF,OAAO,KAAK,aAAa,kBAAkB,CAAY,EAGjD,gBAAgB,CACtB,EACA,EACA,EACO,CACP,KAAK,KAAK,iBAAiB,EAAM,EAAU,CAAO,EAG5C,mBAAmB,CACzB,EACA,EACA,EACO,CACP,KAAK,KAAK,oBAAoB,EAAM,EAAU,CAAO,EAG/C,aAAa,CAAC,EAAuB,CAC3C,OAAO,KAAK,KAAK,cAAc,CAAK,EAW9B,MAAmC,CAAC,EAAa,EAAM,GAAuB,CACpF,IAAM,EAAW,cAAc,MAE/B,GAAI,EACH,OAAO,MAAM,KAAK,KAAK,KAAK,iBAAiB,CAAQ,CAAC,EAGvD,OAAQ,KAAK,KAAK,cAAc,CAAQ,GAAW,KAG1C,6BAA6B,EAAY,CAClD,MAAO,GAGE,wBAAwB,EAAY,CAC7C,MAAO,CAAC,KAAK,gBAAkB,KAAK,SAAW,EAAkB,UAAU,OAGpE,eAAe,EAAuB,CAC7C,OAAO,KAAK,gBAAgB,YAAc,KAAK,KAAO,KAG/C,uBAAuB,EAAS,CACvC,GAAI,CAAC,KAAK,aACT,OAGD,KAAK,cAAc,QAAQ,KAAK,YAAY,EAC5C,KAAK,aAAe,OAGb,0BAA0B,EAAkB,CACnD,IAAM,EAAmB,EAAuB,IAAM,KAAK,OAAO,CAAC,EAC7D,EAAS,EAAiB,IAAI,EAEpC,GAAI,CAAC,KAAK,UACT,OAAO,EAGR,GAAI,KAAK,aACR,KAAK,cAAc,QAAQ,KAAK,YAAY,EAK7C,OAFA,KAAK,aAAe,EACpB,KAAK,cAAc,MAAM,CAAgB,EAClC,EAET,CAEA,MAAM,CAAgC,CAInB,KACA,WACA,aALD,cAEjB,WAAW,CACO,EACA,EACA,EAChB,CAHgB,YACA,kBACA,oBAEjB,KAAK,cAAgB,OAAO,yBAAyB,KAAK,KAAM,KAAK,YAAY,EAG3E,eAAe,EAAkB,CACvC,OAAO,QAAQ,IAAI,KAAK,KAAM,KAAK,YAAY,EAGzC,OAAO,EAAS,CACtB,OAAO,eAAe,KAAK,KAAM,KAAK,aAAc,CACnD,IAAK,IAAM,QAAQ,IAAI,KAAK,WAAY,KAAK,YAAY,EACzD,IAAK,CAAC,IAAgB,CACrB,QAAQ,IAAI,KAAK,WAAY,KAAK,aAAc,CAAQ,GAEzD,WAAY,KAAK,eAAe,YAAc,GAC9C,aAAc,EACf,CAAC,EAGK,OAAO,EAAS,CACtB,IAAM,EAAa,QAAQ,IAAI,KAAK,WAAY,KAAK,YAAY,EAEjE,GAAI,KAAK,cAAe,CAGvB,GAFA,OAAO,eAAe,KAAK,KAAM,KAAK,aAAc,KAAK,aAAa,EAElE,UAAW,KAAK,eAAiB,KAAK,cAAc,SACvD,QAAQ,IAAI,KAAK,KAAM,KAAK,aAAc,CAAU,EAGrD,OAGD,QAAQ,eAAe,KAAK,KAAM,KAAK,YAAY,EAEnD,GAAI,CACH,QAAQ,IAAI,KAAK,KAAM,KAAK,aAAc,CAAU,EACnD,KAAM,CACP,OAAO,eAAe,KAAK,KAAM,KAAK,aAAc,CACnD,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACf,CAAC,GAGJ",
19
+ "debugId": "3DB3D3D210C581D064756E2164756E21",
20
+ "names": []
21
+ }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:w,getOwnPropertyNames:A,getOwnPropertyDescriptor:B}=Object,C=Object.prototype.hasOwnProperty;function D(g){return this[g]}var J=(g)=>{var j=(x??=new WeakMap).get(g),k;if(j)return j;if(j=w({},"__esModule",{value:!0}),g&&typeof g==="object"||typeof g==="function"){for(var q of A(g))if(!C.call(j,q))w(j,q,{get:D.bind(g,q),enumerable:!(k=B(g,q))||k.enumerable})}return x.set(g,j),j},x;var E=(g)=>g;function F(g,j){this[g]=E.bind(null,j)}var K=(g,j)=>{for(var k in j)w(g,k,{get:j[k],enumerable:!0,configurable:!0,set:F.bind(j,k)})};var L=(g,j)=>()=>(g&&(j=g(g=0)),j);var M=((g)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(g,{get:(j,k)=>(typeof require<"u"?require:j)[k]}):g)(function(g){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+g+'" is not supported')});function O(g){if(G(g))return g;return}function G(g){return typeof g.constructor==="function"&&typeof g.getAttribute==="function"&&typeof g.getAttributeNames==="function"&&typeof g.getAuthoredHydrationScriptMarkup==="function"&&typeof g.getContextProviders==="function"&&typeof g.getHydrationBindings==="function"&&typeof g.getReactiveProperties==="function"&&typeof g.getSlotProjectionScriptTag==="function"&&typeof g.resolveTrackedRenderOutput==="function"&&typeof g.renderViewToString==="function"}export{O as resolveRadiantElementSsrHostSource,G as isInternalRadiantSsrHost};
2
+
3
+ //# debugId=1715AE3ABAF06A6664756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { JsxRenderable } from '@ecopages/jsx';\nimport type { RenderToStringOptions } from '@ecopages/jsx/server';\nimport type { SsrSerializableContextProvider } from '../context/context-provider';\nimport type { ReactiveProperty } from './reactive-prop-core';\nimport type { ReactivePropDefinition } from './reactive-prop-metadata';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\n\n/**\n * Unified SSR host shape shared by core resolution and server serialization.\n */\nexport type InternalRadiantSsrHost = {\n\tconstructor: CustomElementConstructor;\n\tgetAttribute(name: string): string | null;\n\tgetAttributeNames(): string[];\n\tgetAuthoredHydrationScriptMarkup?: () => string | undefined;\n\tgetContextProviders: () => SsrSerializableContextProvider[];\n\tgetHydrationBindings: () => SsrSerializableHydrationBinding[];\n\tgetReactiveProperties: () => ReactiveProperty[];\n\tgetReactivePropDefinitions: () => ReactivePropDefinition[];\n\tgetPropertyValue: (name: string) => unknown;\n\tgetSlotProjectionScriptTag?: () => string | undefined;\n\tresolveTrackedRenderOutput: () => { containsSlots: boolean; value: JsxRenderable };\n\trenderViewToString: (options?: RenderToStringOptions) => string;\n};\n\nexport type RadiantElementSsrHostSource = InternalRadiantSsrHost;\n\nexport function resolveRadiantElementSsrHostSource(component: object): InternalRadiantSsrHost | undefined {\n\tif (isInternalRadiantSsrHost(component)) {\n\t\treturn component;\n\t}\n\n\treturn undefined;\n}\n\nexport function isInternalRadiantSsrHost(component: object): component is InternalRadiantSsrHost {\n\treturn (\n\t\ttypeof component.constructor === 'function' &&\n\t\ttypeof (component as { getAttribute?: unknown }).getAttribute === 'function' &&\n\t\ttypeof (component as { getAttributeNames?: unknown }).getAttributeNames === 'function' &&\n\t\ttypeof (component as { getAuthoredHydrationScriptMarkup?: unknown }).getAuthoredHydrationScriptMarkup ===\n\t\t\t'function' &&\n\t\ttypeof (component as { getContextProviders?: unknown }).getContextProviders === 'function' &&\n\t\ttypeof (component as { getHydrationBindings?: unknown }).getHydrationBindings === 'function' &&\n\t\ttypeof (component as { getReactiveProperties?: unknown }).getReactiveProperties === 'function' &&\n\t\ttypeof (component as { getSlotProjectionScriptTag?: unknown }).getSlotProjectionScriptTag === 'function' &&\n\t\ttypeof (component as { resolveTrackedRenderOutput?: unknown }).resolveTrackedRenderOutput === 'function' &&\n\t\ttypeof (component as { renderViewToString?: unknown }).renderViewToString === 'function'\n\t);\n}\n"
6
6
  ],
7
- "mappings": "2PA2BO,SAAS,CAAkC,CAAC,EAAuD,CACzG,GAAI,EAAyB,CAAS,EACrC,OAAO,EAGR,OAGM,SAAS,CAAwB,CAAC,EAAwD,CAChG,OACC,OAAO,EAAU,cAAgB,YACjC,OAAQ,EAAyC,eAAiB,YAClE,OAAQ,EAA8C,oBAAsB,YAC5E,OAAQ,EAA6D,mCACpE,YACD,OAAQ,EAAgD,sBAAwB,YAChF,OAAQ,EAAiD,uBAAyB,YAClF,OAAQ,EAAkD,wBAA0B,YACpF,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAA+C,qBAAuB",
8
- "debugId": "DE2A04B3C3EC62F264756E2164756E21",
7
+ "mappings": "i0BA2BO,SAAS,CAAkC,CAAC,EAAuD,CACzG,GAAI,EAAyB,CAAS,EACrC,OAAO,EAGR,OAGM,SAAS,CAAwB,CAAC,EAAwD,CAChG,OACC,OAAO,EAAU,cAAgB,YACjC,OAAQ,EAAyC,eAAiB,YAClE,OAAQ,EAA8C,oBAAsB,YAC5E,OAAQ,EAA6D,mCACpE,YACD,OAAQ,EAAgD,sBAAwB,YAChF,OAAQ,EAAiD,uBAAyB,YAClF,OAAQ,EAAkD,wBAA0B,YACpF,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAA+C,qBAAuB",
8
+ "debugId": "1715AE3ABAF06A6664756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -5,8 +5,10 @@ export type RadiantElementRenderBridge = {
5
5
  renderHost?: () => JsxRenderable;
6
6
  renderHostToString?: (options?: RenderToStringOptions) => string;
7
7
  };
8
- export type RadiantElementServerRenderSsrCapable = InternalRadiantSsrHost;
9
- export type RadiantElementTrackedRenderSsrCapable = InternalRadiantSsrHost;
8
+ export type RadiantElementServerRenderSsrCapable = Omit<InternalRadiantSsrHost, 'constructor'> & {
9
+ constructor: Function;
10
+ };
11
+ export type RadiantElementTrackedRenderSsrCapable = RadiantElementServerRenderSsrCapable;
10
12
  export type RadiantElementSsrRuntime = {
11
13
  getHostAttributes(component: InternalRadiantSsrHost): Record<string, string>;
12
14
  renderHost(component: InternalRadiantSsrHost): JsxRenderable;
@@ -0,0 +1,3 @@
1
+ var{defineProperty:q,getOwnPropertyNames:z,getOwnPropertyDescriptor:C}=Object,F=Object.prototype.hasOwnProperty;function G(b){return this[b]}var Q=(b)=>{var f=(x??=new WeakMap).get(b),j;if(f)return f;if(f=q({},"__esModule",{value:!0}),b&&typeof b==="object"||typeof b==="function"){for(var k of z(b))if(!F.call(f,k))q(f,k,{get:G.bind(b,k),enumerable:!(j=C(b,k))||j.enumerable})}return x.set(b,f),f},x;var H=(b)=>b;function J(b,f){this[b]=H.bind(null,f)}var W=(b,f)=>{for(var j in f)q(b,j,{get:f[j],enumerable:!0,configurable:!0,set:J.bind(f,j)})};var X=(b,f)=>()=>(b&&(f=b(b=0)),f);var Z=((b)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(b,{get:(f,j)=>(typeof require<"u"?require:f)[j]}):b)(function(b){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+b+'" is not supported')});import{getActiveSsrScopeValue as K,withActiveSsrScopeValue as P}from"@ecopages/jsx/server";var y=Symbol.for("@ecopages/radiant.element-ssr-runtime");function h(){return K(y)}function w(b,f){return P(y,b,f)}export{w as withRadiantElementSsrRuntime,h as getRadiantElementSsrRuntime};
2
+
3
+ //# debugId=15E2280905A5CEA764756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/radiant-element-ssr-registry.ts"],
4
+ "sourcesContent": [
5
+ "import type { JsxRenderable } from '@ecopages/jsx';\nimport { getActiveSsrScopeValue, type RenderToStringOptions, withActiveSsrScopeValue } from '@ecopages/jsx/server';\nimport type { InternalRadiantSsrHost } from './radiant-element-ssr-host';\n\nexport type RadiantElementRenderBridge = {\n\trenderHost?: () => JsxRenderable;\n\trenderHostToString?: (options?: RenderToStringOptions) => string;\n};\n\nexport type RadiantElementServerRenderSsrCapable = Omit<InternalRadiantSsrHost, 'constructor'> & {\n\tconstructor: Function;\n};\n\nexport type RadiantElementTrackedRenderSsrCapable = RadiantElementServerRenderSsrCapable;\n\nexport type RadiantElementSsrRuntime = {\n\tgetHostAttributes(component: InternalRadiantSsrHost): Record<string, string>;\n\trenderHost(component: InternalRadiantSsrHost): JsxRenderable;\n\trenderHostToString(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;\n\tresolveRenderBridge(component: object): RadiantElementRenderBridge | undefined;\n\trenderView(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;\n};\n\nconst RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL = Symbol.for('@ecopages/radiant.element-ssr-runtime');\n\nexport function getRadiantElementSsrRuntime(): RadiantElementSsrRuntime | undefined {\n\treturn getActiveSsrScopeValue<RadiantElementSsrRuntime>(RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL);\n}\n\nexport function withRadiantElementSsrRuntime<T>(runtime: RadiantElementSsrRuntime, render: () => T): T {\n\treturn withActiveSsrScopeValue(RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL, runtime, render);\n}\n"
6
+ ],
7
+ "mappings": "i0BACA,iCAAS,6BAAoD,6BAsB7D,IAAM,EAAqC,OAAO,IAAI,uCAAuC,EAEtF,SAAS,CAA2B,EAAyC,CACnF,OAAO,EAAiD,CAAkC,EAGpF,SAAS,CAA+B,CAAC,EAAmC,EAAoB,CACtG,OAAO,EAAwB,EAAoC,EAAS,CAAM",
8
+ "debugId": "15E2280905A5CEA764756E2164756E21",
9
+ "names": []
10
+ }