@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
@@ -0,0 +1,138 @@
1
+ import type { SubscribableJsxValueWithAccess } from '@ecopages/jsx';
2
+ import type { ReactiveState } from './reactivity-contract';
3
+ import type { ReactiveAccessorDefinition, ReactiveBindingOption, ReactiveBindingValue, ReactiveBindings, ReactiveFieldOptions } from './reactive-prop-core';
4
+ type StringPropertyKey<Value> = Extract<keyof Value, string>;
5
+ /**
6
+ * Shared reactive-host contract consumed by decorators and host adapters.
7
+ *
8
+ * `RadiantElement` and `RadiantController` both implement this surface so the
9
+ * decorator layer can define fields, bindings, and context reactions without
10
+ * depending on a specific host class.
11
+ */
12
+ export interface ReactiveHostLike<Bindings extends object = {}> {
13
+ readonly bindings: ReactiveBindings<Bindings>;
14
+ readonly $: ReactiveBindings<Bindings>;
15
+ bind<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
16
+ getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
17
+ getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;
18
+ createReactiveField<T>(propertyName: string, initialValue: T, options?: ReactiveFieldOptions): void;
19
+ createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;
20
+ registerReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void;
21
+ defineReactiveBinding(property: string, bind?: ReactiveBindingOption): void;
22
+ notifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;
23
+ registerCleanupCallback(callback: () => void): void;
24
+ registerConnectedCallback(callback: () => void): void;
25
+ registerUpdateCallback(property: string, update: () => void): () => void;
26
+ }
27
+ /**
28
+ * Shared reactivity engine used by both `RadiantElement` and
29
+ * `RadiantController`.
30
+ *
31
+ * Every reactive host member owns a single signals-backed `ReactiveState`
32
+ * (a `State` for fields/props/attributes, or a user `signal()` for the signal
33
+ * decorator). The jsx binding, `onUpdated` callbacks, and `ReactiveComputed`
34
+ * tracking all read that one state directly, so there is no parallel
35
+ * notification bus or dependency shim.
36
+ *
37
+ * Host-specific concerns such as attribute reflection, render lifecycles, and
38
+ * custom-element APIs stay in the outer host classes.
39
+ */
40
+ export declare class ReactiveHost<Host extends object, Bindings extends object = {}> {
41
+ private readonly host;
42
+ private readonly access;
43
+ private readonly shouldAutoBind;
44
+ readonly bindings: ReactiveBindings<Bindings>;
45
+ readonly $: ReactiveBindings<Bindings>;
46
+ private reactiveMembers;
47
+ private jsxBindings;
48
+ /** `onUpdated` callbacks keyed by property; values are signal unsubscribe disposers when subscribed. */
49
+ private updateCallbacks;
50
+ private onConnectedCallbacks;
51
+ private onDisconnectedCallback;
52
+ constructor(host: Host, access: ReactiveHostAccess<Host>, shouldAutoBind: () => boolean);
53
+ /**
54
+ * Runs all connection callbacks registered by decorators or host adapters.
55
+ */
56
+ connectHost(): void;
57
+ /**
58
+ * Runs all cleanup callbacks registered for host disconnect.
59
+ */
60
+ disconnectHost(): void;
61
+ /**
62
+ * Registers a callback that should run on host disconnect.
63
+ */
64
+ registerCleanupCallback(callback: () => void): void;
65
+ /**
66
+ * Registers a callback that should run whenever the host connects.
67
+ */
68
+ registerConnectedCallback(callback: () => void): void;
69
+ /**
70
+ * Fires the `onUpdated` callbacks registered for a member.
71
+ *
72
+ * This is the only remaining use of the update-callback bus: an initial
73
+ * emit for members that want one (currently `@prop`). Change notifications
74
+ * flow through the member `State`'s own subscription, not through here.
75
+ */
76
+ notifyUpdate(changedProperty: string, _oldValue: unknown, _value: unknown): void;
77
+ /**
78
+ * Returns the member state registered under `propertyName`, if any.
79
+ */
80
+ getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;
81
+ /**
82
+ * Creates a new reactive member state and registers it under `propertyName`.
83
+ */
84
+ createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;
85
+ /**
86
+ * Registers an externally-owned reactive member state (used by the
87
+ * `signal()` decorator, whose state is a user-provided signals `Signal`).
88
+ */
89
+ registerReactiveMember<T>(propertyName: string, signal: ReactiveState<T>): void;
90
+ /**
91
+ * Stores the member state and subscribes any `onUpdated` callbacks that were
92
+ * registered before the member existed (decorator initializer ordering).
93
+ */
94
+ private registerMember;
95
+ /**
96
+ * Subscribes an `onUpdated` callback to the member state if the member is
97
+ * already registered and not yet subscribed.
98
+ */
99
+ private subscribeCallback;
100
+ /**
101
+ * Returns the jsx binding for a named reactive member.
102
+ *
103
+ * The binding is adapted from the member `State` once and cached so derived
104
+ * transforms (`map`, member access) share a stable source identity.
105
+ */
106
+ getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
107
+ /**
108
+ * Registers an `onUpdated`-style callback for a named reactive member.
109
+ *
110
+ * Change notifications flow through the member `State`'s own subscription
111
+ * (D1). The callback is also kept in the update-callback bus so an initial
112
+ * emit (currently `@prop`) can still reach it once after definition.
113
+ */
114
+ registerUpdateCallback(property: string, update: () => void): () => void;
115
+ /**
116
+ * Defines a stable binding companion property such as `$count` on the host or
117
+ * its chosen binding target.
118
+ */
119
+ defineReactiveBinding(property: string, bind?: ReactiveBindingOption): void;
120
+ /**
121
+ * Defines a reactive getter/setter pair on the host backed by a member
122
+ * `State`, and wires it into the jsx binding namespace.
123
+ */
124
+ defineReactiveAccessor<T>(propertyName: string, options: ReactiveAccessorDefinition<T>): void;
125
+ /**
126
+ * Defines a controller- or element-local reactive field with optional JSX
127
+ * binding exposure.
128
+ */
129
+ createReactiveField<T>(propertyName: string, initialValue: T, options?: ReactiveFieldOptions): void;
130
+ private createReactiveBindingNamespace;
131
+ }
132
+ type ReactiveHostAccess<Host extends object> = {
133
+ defineProperty(target: object, property: string, descriptor: PropertyDescriptor): void;
134
+ getBindingTarget?(host: Host): object;
135
+ hasProperty(host: Host, property: string): boolean;
136
+ readProperty(host: Host, property: string): unknown;
137
+ };
138
+ export {};
@@ -0,0 +1,3 @@
1
+ var{defineProperty:H,getOwnPropertyNames:Y,getOwnPropertyDescriptor:Z}=Object,_=Object.prototype.hasOwnProperty;function $(q){return this[q]}var T=(q)=>{var z=(L??=new WeakMap).get(q),E;if(z)return z;if(z=H({},"__esModule",{value:!0}),q&&typeof q==="object"||typeof q==="function"){for(var F of Y(q))if(!_.call(z,F))H(z,F,{get:$.bind(q,F),enumerable:!(E=Z(q,F))||E.enumerable})}return L.set(q,z),z},L;var A=(q)=>q;function B(q,z){this[q]=A.bind(null,z)}var w=(q,z)=>{for(var E in z)H(q,E,{get:z[E],enumerable:!0,configurable:!0,set:B.bind(z,E)})};var P=(q,z)=>()=>(q&&(z=q(q=0)),z);var x=((q)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(q,{get:(z,E)=>(typeof require<"u"?require:z)[E]}):q)(function(q){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+q+'" is not supported')});import{Computed as I,state as K,subtle as X,trackDependency as j}from"@ecopages/signals";function C(q){return q}function M(q){return q}var O={trackDependency(q){j(C(q))},createComputed(q){return new I(q)},createWatcher(q){let z=new X.Watcher(q);return{watch(E){z.watch(M(E))},unwatch(E){z.unwatch(M(E))}}},createState(q){return K(q)}};var Q=O;function U(){return Q}function v(q){Q=q}import{createSubscribableJsxValue as J}from"@ecopages/jsx";function W(q){return J({getValue:()=>q.get(),subscribe:(z)=>q.subscribe(z)})}class D{host;access;shouldAutoBind;bindings;$;reactiveMembers=new Map;jsxBindings=new Map;updateCallbacks=new Map;onConnectedCallbacks=[];onDisconnectedCallback=[];constructor(q,z,E){this.host=q;this.access=z;this.shouldAutoBind=E;let F=this.createReactiveBindingNamespace();this.bindings=F,this.$=F}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,z,E){let F=this.updateCallbacks.get(q);if(!F)return;for(let G of[...F.keys()])G()}getReactiveMember(q){return this.reactiveMembers.get(q)}createReactiveMember(q,z){let E=U().createState(z);return this.registerMember(q,E),E}registerReactiveMember(q,z){this.registerMember(q,z)}registerMember(q,z){this.reactiveMembers.set(q,z),this.jsxBindings.delete(q);let E=this.updateCallbacks.get(q);if(E)for(let F of E.keys())this.subscribeCallback(q,F)}subscribeCallback(q,z){let E=this.updateCallbacks.get(q),F=this.reactiveMembers.get(q);if(!E||!F||E.get(z))return;let G=F.subscribe(()=>z());E.set(z,G)}getReactiveBinding(q){let z=q,E=this.jsxBindings.get(z);if(E)return E;let F=this.reactiveMembers.get(z);if(!F)throw Error(`No reactive binding registered for "${String(q)}".`);let G=W(F);return this.jsxBindings.set(z,G),G}registerUpdateCallback(q,z){let E=this.updateCallbacks.get(q);if(!E)E=new Map,this.updateCallbacks.set(q,E);return E.set(z,void 0),this.subscribeCallback(q,z),()=>{let F=this.updateCallbacks.get(q);if(F?.get(z)?.(),F?.delete(z),F&&F.size===0)this.updateCallbacks.delete(q)}}defineReactiveBinding(q,z=!0){let E=typeof z==="string"?z:z?`$${q}`:void 0,F=this.access.getBindingTarget?.(this.host)??this.host;if(!E||this.access.hasProperty(this.host,E))return;this.access.defineProperty(F,E,{get:()=>this.getReactiveBinding(q),enumerable:!1,configurable:!0})}defineReactiveAccessor(q,z){let E=z.bind??this.shouldAutoBind();this.defineReactiveBinding(q,E),this.access.defineProperty(this.host,q,{get:()=>z.signal.get(),set:(F)=>{z.signal.set(F),z.onSet?.(F)},enumerable:!0,configurable:!0})}createReactiveField(q,z,E={}){let F=this.reactiveMembers.get(q),G=F??this.createReactiveMember(q,z);if(F&&z!==void 0)G.set(z);if(this.defineReactiveAccessor(q,{bind:E.bind,signal:G}),!E.suppressInitialNotify)this.notifyUpdate(q,void 0,G.get())}createReactiveBindingNamespace(){return new Proxy(Object.create(null),{get:(q,z)=>{if(typeof z!=="string")return;return this.getReactiveBinding(z)}})}}export{D as ReactiveHost};
2
+
3
+ //# debugId=53E17F94ECFFB8D264756E2164756E21
@@ -0,0 +1,13 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/reactivity-signals.ts", "../src/core/reactivity-runtime.ts", "../src/core/reactive-binding-adapter.ts", "../src/core/reactive-host.ts"],
4
+ "sourcesContent": [
5
+ "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",
6
+ "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",
7
+ "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",
8
+ "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"
9
+ ],
10
+ "mappings": "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",
11
+ "debugId": "53E17F94ECFFB8D264756E2164756E21",
12
+ "names": []
13
+ }
@@ -1,4 +1,4 @@
1
- import type { SubscribableJsxValue } from '@ecopages/jsx';
1
+ import type { SubscribableJsxValueWithAccess } from '@ecopages/jsx';
2
2
  import type { RadiantElement } from './radiant-element';
3
3
  import type { ReactiveBindingValue } from './reactive-prop-core';
4
4
  /**
@@ -8,4 +8,4 @@ import type { ReactiveBindingValue } from './reactive-prop-core';
8
8
  * update callbacks on the client so the mounted child range can patch directly
9
9
  * when the selected property changes.
10
10
  */
11
- export declare function bindReactiveValue<Bindings extends object, Host extends RadiantElement<Bindings>, Property extends Extract<keyof Bindings, string>>(host: Host, property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
11
+ export declare function bindReactiveValue<Bindings extends object, Host extends RadiantElement<Bindings>, Property extends Extract<keyof Bindings, string>>(host: Host, property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
@@ -0,0 +1,3 @@
1
+ var{defineProperty:A,getOwnPropertyNames:D,getOwnPropertyDescriptor:E}=Object,F=Object.prototype.hasOwnProperty;function G(j){return this[j]}var K=(j)=>{var q=(B??=new WeakMap).get(j),x;if(q)return q;if(q=A({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function"){for(var z of D(j))if(!F.call(q,z))A(q,z,{get:G.bind(j,z),enumerable:!(x=E(j,z))||x.enumerable})}return B.set(j,q),q},B;var H=(j)=>j;function I(j,q){this[j]=H.bind(null,q)}var L=(j,q)=>{for(var x in q)A(j,x,{get:q[x],enumerable:!0,configurable:!0,set:I.bind(q,x)})};var M=(j,q)=>()=>(j&&(q=j(j=0)),q);var N=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(q,x)=>(typeof require<"u"?require:q)[x]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});function P(j,q){return j.bind(q)}export{P as bindReactiveValue};
2
+
3
+ //# debugId=E21C18F98A5461AE64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/reactive-jsx-value.ts"],
4
+ "sourcesContent": [
5
+ "import type { SubscribableJsxValueWithAccess } from '@ecopages/jsx';\nimport type { RadiantElement } from './radiant-element';\nimport type { ReactiveBindingValue } from './reactive-prop-core';\n\n/**\n * Creates a stable JSX child binding backed by a Radiant reactive property or field.\n *\n * The returned value resolves eagerly on the server and subscribes to the host's\n * update callbacks on the client so the mounted child range can patch directly\n * when the selected property changes.\n */\nexport function bindReactiveValue<\n\tBindings extends object,\n\tHost extends RadiantElement<Bindings>,\n\tProperty extends Extract<keyof Bindings, string>,\n>(host: Host, property: Property): SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>> {\n\treturn host.bind(property);\n}\n"
6
+ ],
7
+ "mappings": "i0BAWO,SAAS,CAIf,CAAC,EAAY,EAA8F,CAC3G,OAAO,EAAK,KAAK,CAAQ",
8
+ "debugId": "E21C18F98A5461AE64756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,9 +1,9 @@
1
- import type { JsxRenderable, SubscribableJsxValue } from '@ecopages/jsx';
1
+ import type { JsxBindingSourceValue, JsxRenderable, SubscribableJsxValueWithAccess } from '@ecopages/jsx';
2
+ import type { ReactiveState } from './reactivity-contract';
2
3
  import { type AttributeTypeConstant, type ReadAttributeValueReturnType, type WriteAttributeValueReturnType } from '../utils/attribute-utils';
3
4
  type StringPropertyKey<Value> = Extract<keyof Value, string>;
4
5
  export interface ReactiveProperty<T = unknown> {
5
6
  type: AttributeTypeConstant;
6
- value?: T;
7
7
  initialValue?: T;
8
8
  name: string;
9
9
  attribute: string;
@@ -25,19 +25,14 @@ export type ReactiveFieldOptions = {
25
25
  /** When true, skip the initial notifyUpdate emitted while defining the field. */
26
26
  suppressInitialNotify?: boolean;
27
27
  };
28
- export type ReactiveField<T = unknown> = {
29
- name: string;
30
- value: T;
31
- initialValue: T;
32
- };
33
- export type ReactiveBindingValue<Host extends object, Property extends StringPropertyKey<Host>> = Host[Property] extends JsxRenderable ? Host[Property] : JsxRenderable;
28
+ export type ReactiveBindingValue<Host extends object, Property extends StringPropertyKey<Host>> = Host[Property] extends JsxBindingSourceValue ? Host[Property] : JsxRenderable;
34
29
  export type ReactiveBindings<Bindings extends object> = {
35
- readonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
30
+ readonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValueWithAccess<ReactiveBindingValue<Bindings, Property>>;
36
31
  };
37
32
  export type ReactiveAccessorDefinition<T> = {
38
33
  bind?: ReactiveBindingOption;
39
- getValue: () => T | undefined;
40
- setValue: (value: T) => void;
34
+ signal: ReactiveState<T>;
35
+ onSet?: (value: T) => void;
41
36
  };
42
37
  export declare function validateReactivePropertyDefault(type: AttributeTypeConstant, defaultValue: unknown): void;
43
38
  export declare function createReactivePropertyMapping<T>(propertyName: string, attributeKey: string, type: AttributeTypeConstant, initialValue: T | undefined): ReactiveProperty<T>;
@@ -0,0 +1,3 @@
1
+ var{defineProperty:L,getOwnPropertyNames:_,getOwnPropertyDescriptor:$}=Object,B=Object.prototype.hasOwnProperty;function D(q){return this[q]}var S=(q)=>{var x=(M??=new WeakMap).get(q),z;if(x)return x;if(x=L({},"__esModule",{value:!0}),q&&typeof q==="object"||typeof q==="function"){for(var E of _(q))if(!B.call(x,E))L(x,E,{get:D.bind(q,E),enumerable:!(z=$(q,E))||z.enumerable})}return M.set(q,x),x},M;var F=(q)=>q;function U(q,x){this[q]=F.bind(null,x)}var h=(q,x)=>{for(var z in x)L(q,z,{get:x[z],enumerable:!0,configurable:!0,set:U.bind(x,z)})};var g=(q,x)=>()=>(q&&(x=q(q=0)),x);var A=((q)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(q,{get:(x,z)=>(typeof require<"u"?require:x)[z]}):q)(function(q){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+q+'" is not supported')});function R(q){switch(q){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function W(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 k(q){switch(q){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function C(q){try{return JSON.parse(q)}catch{throw TypeError("Invalid JSON string")}}var J={array(q){let x=C(q);if(!Array.isArray(x))throw TypeError(`Expected an array but got a value of type "${typeof x}"`);return x},boolean(q){return!(q==="0"||String(q).toLowerCase()==="false")},number(q){return Number(q.replace(/_/g,""))},object(q){let x=JSON.parse(q);if(x===null||typeof x!=="object"||Array.isArray(x))throw TypeError(`expected value of type "object" but instead got value "${q}" of type "${W(x)}"`);return x},string(q){return q}},P={default:X,array:Q,object:Q};function Q(q){return JSON.stringify(q)}function X(q){return`${q}`}function H(q,x){let z=R(x);if(!z)throw TypeError(`[radiant-element] Unknown type "${x}"`);return J[z](q)}function Y(q,x){let z=R(x);if(!z)throw TypeError(`[radiant-element] Unknown type "${x}"`);return(P[z]??P.default??X)(q)}function m(q){return typeof q==="boolean"}function O(q){return typeof q==="number"}function j(q){return typeof q==="string"}function K(q){return Array.isArray(q)}function N(q){return typeof q==="object"&&!Array.isArray(q)&&q!==null}function Z(q,x){switch(q){case Boolean:return m(x);case Number:return O(x);case String:return j(x);case Array:return K(x);case Object:return N(x);default:return!1}}var w=(q,x,z,E)=>{if(x===Boolean){let I=q.getAttribute(z);if(I===null)return E;return I===""?!0:H(I,x)}let G=q.getAttribute(z);return G!==null?H(G,x):E??k(x)};function n(q,x){if(x!==void 0&&!Z(q,x))throw Error(`defaultValue does not match the expected type for ${q.name}`)}function s(q,x,z,E){return{type:z,name:q,initialValue:E,attribute:x,converter:{fromAttribute:(G)=>H(G,z),toAttribute:(G)=>Y(G,z)}}}export{n as validateReactivePropertyDefault,s as createReactivePropertyMapping};
2
+
3
+ //# debugId=AC4CE959E109D04864756E2164756E21
@@ -3,9 +3,9 @@
3
3
  "sources": ["../src/utils/attribute-utils.ts", "../src/core/reactive-prop-core.ts"],
4
4
  "sourcesContent": [
5
5
  "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",
6
- "import type { JsxRenderable, SubscribableJsxValue } from '@ecopages/jsx';\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\tvalue?: T;\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 ReactiveField<T = unknown> = {\n\tname: string;\n\tvalue: T;\n\tinitialValue: T;\n};\n\nexport type ReactiveBindingValue<\n\tHost extends object,\n\tProperty extends StringPropertyKey<Host>,\n> = Host[Property] extends JsxRenderable ? Host[Property] : JsxRenderable;\n\nexport type ReactiveBindings<Bindings extends object> = {\n\treadonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;\n};\n\nexport type ReactiveAccessorDefinition<T> = {\n\tbind?: ReactiveBindingOption;\n\tgetValue: () => T | undefined;\n\tsetValue: (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\tvalue: initialValue,\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"
6
+ "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"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "CF2A8590D02D224664756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "AC4CE959E109D04864756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:r,getOwnPropertyNames:p,getOwnPropertyDescriptor:R}=Object,P=Object.prototype.hasOwnProperty;function u(t){return this[t]}var m=(t)=>{var o=(s??=new WeakMap).get(t),e;if(o)return o;if(o=r({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function"){for(var i of p(t))if(!P.call(o,i))r(o,i,{get:u.bind(t,i),enumerable:!(e=R(t,i))||e.enumerable})}return s.set(t,o),o},s;var v=(t)=>t;function f(t,o){this[t]=v.bind(null,o)}var D=(t,o)=>{for(var e in o)r(t,e,{get:o[e],enumerable:!0,configurable:!0,set:f.bind(o,e)})};var I=(t,o)=>()=>(t&&(o=t(t=0)),o);var C=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(o,e)=>(typeof require<"u"?require:o)[e]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var c=Symbol.for("@ecopages/radiant.reactivePropDefinitions");function O(t,o,e){let i=t.constructor,n=i[c]??[];if(n.some((a)=>a.name===o))return;n.push({name:o,options:e}),i[c]=n}function d(t){return(t.constructor[c]??[]).slice()}export{O as registerReactivePropDefinition,d as getReactivePropDefinitions};
2
+
3
+ //# debugId=1E1908DD3909F96364756E2164756E21
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "import type { ReactivePropertyOptions } from './reactive-prop-core';\n\nconst REACTIVE_PROP_DEFINITIONS = Symbol.for('@ecopages/radiant.reactivePropDefinitions');\n\nexport type ReactivePropDefinition = {\n\tname: string;\n\toptions: ReactivePropertyOptions<unknown>;\n};\n\ntype RadiantConstructorWithReactiveProps = CustomElementConstructor & {\n\t[REACTIVE_PROP_DEFINITIONS]?: ReactivePropDefinition[];\n};\n\nexport function registerReactivePropDefinition(\n\ttarget: object,\n\tpropertyName: string,\n\toptions: ReactivePropertyOptions<unknown>,\n): void {\n\tconst constructor = target.constructor as RadiantConstructorWithReactiveProps;\n\tconst definitions = constructor[REACTIVE_PROP_DEFINITIONS] ?? [];\n\n\tif (definitions.some((definition) => definition.name === propertyName)) {\n\t\treturn;\n\t}\n\n\tdefinitions.push({ name: propertyName, options });\n\tconstructor[REACTIVE_PROP_DEFINITIONS] = definitions;\n}\n\nexport function getReactivePropDefinitions(target: object): ReactivePropDefinition[] {\n\treturn ((target.constructor as RadiantConstructorWithReactiveProps)[REACTIVE_PROP_DEFINITIONS] ?? []).slice();\n}\n"
6
6
  ],
7
- "mappings": "2PAEA,IAAM,EAA4B,OAAO,IAAI,2CAA2C,EAWjF,SAAS,CAA8B,CAC7C,EACA,EACA,EACO,CACP,IAAM,EAAc,EAAO,YACrB,EAAc,EAAY,IAA8B,CAAC,EAE/D,GAAI,EAAY,KAAK,CAAC,IAAe,EAAW,OAAS,CAAY,EACpE,OAGD,EAAY,KAAK,CAAE,KAAM,EAAc,SAAQ,CAAC,EAChD,EAAY,GAA6B,EAGnC,SAAS,CAA0B,CAAC,EAA0C,CACpF,OAAS,EAAO,YAAoD,IAA8B,CAAC,GAAG,MAAM",
8
- "debugId": "8922999A64A3455464756E2164756E21",
7
+ "mappings": "i0BAEA,IAAM,EAA4B,OAAO,IAAI,2CAA2C,EAWjF,SAAS,CAA8B,CAC7C,EACA,EACA,EACO,CACP,IAAM,EAAc,EAAO,YACrB,EAAc,EAAY,IAA8B,CAAC,EAE/D,GAAI,EAAY,KAAK,CAAC,IAAe,EAAW,OAAS,CAAY,EACpE,OAGD,EAAY,KAAK,CAAE,KAAM,EAAc,SAAQ,CAAC,EAChD,EAAY,GAA6B,EAGnC,SAAS,CAA0B,CAAC,EAA0C,CACpF,OAAS,EAAO,YAAoD,IAA8B,CAAC,GAAG,MAAM",
8
+ "debugId": "1E1908DD3909F96364756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,7 +1,10 @@
1
1
  import { type ReactiveAccessorDefinition, type ReactiveProperty, type ReactivePropertyOptions } from './reactive-prop-core';
2
- import { type AttributeTypeConstant } from '../utils/attribute-utils';
2
+ import type { ReactiveState } from './reactivity-contract';
3
+ import type { AttributeTypeConstant } from '../utils/attribute-utils';
3
4
  export type ReactivePropertyStateHost = HTMLElement & {
4
5
  notifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;
6
+ createReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;
7
+ getReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;
5
8
  };
6
9
  export declare class ReactivePropertyState {
7
10
  private readonly host;
@@ -11,7 +14,7 @@ export declare class ReactivePropertyState {
11
14
  register(config: ReactiveProperty): void;
12
15
  getAll(): ReactiveProperty[];
13
16
  applyAttributeChange(name: string, oldValue: string | null, newValue: string | null): void;
14
- create<T>(propertyName: string, options: ReactivePropertyOptions<T>, resolveInitialValue: (type: AttributeTypeConstant, attributeKey: string, defaultValue: unknown) => T, defineReactiveAccessor: (propertyName: string, config: ReactiveAccessorDefinition<T>) => void): void;
17
+ create<T>(propertyName: string, options: ReactivePropertyOptions<T>, resolveInitialValue: (type: AttributeTypeConstant, attributeKey: string, defaultValue: unknown) => T, defineReactiveAccessor: (propertyName: string, config: ReactiveAccessorDefinition<T>) => void, createReactiveMember: <U>(propertyName: string, initialValue: U) => ReactiveState<U>): void;
15
18
  private transformAttributeValue;
16
19
  private reflectValue;
17
20
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:T,getOwnPropertyNames:L,getOwnPropertyDescriptor:O}=Object,w=Object.prototype.hasOwnProperty;function z(n){return this[n]}var J=(n)=>{var r=(U??=new WeakMap).get(n),i;if(r)return r;if(r=T({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function"){for(var o of L(n))if(!w.call(r,o))T(r,o,{get:z.bind(n,o),enumerable:!(i=O(n,o))||i.enumerable})}return U.set(n,r),r},U;var C=(n)=>n;function G(n,r){this[n]=C.bind(null,r)}var j=(n,r)=>{for(var i in r)T(n,i,{get:r[i],enumerable:!0,configurable:!0,set:G.bind(r,i)})};var K=(n,r)=>()=>(n&&(r=n(n=0)),r);var v=((n)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(r,i)=>(typeof require<"u"?require:r)[i]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});function k(n){switch(n){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function I(n){switch(typeof n){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray(n))return"array";if(Object.prototype.toString.call(n)==="[object Object]")return"object"}function Q(n){switch(n){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function X(n){try{return JSON.parse(n)}catch{throw TypeError("Invalid JSON string")}}var Y={array(n){let r=X(n);if(!Array.isArray(r))throw TypeError(`Expected an array but got a value of type "${typeof r}"`);return r},boolean(n){return!(n==="0"||String(n).toLowerCase()==="false")},number(n){return Number(n.replace(/_/g,""))},object(n){let r=JSON.parse(n);if(r===null||typeof r!=="object"||Array.isArray(r))throw TypeError(`expected value of type "object" but instead got value "${n}" of type "${I(r)}"`);return r},string(n){return n}},d={default:x,array:A,object:A};function A(n){return JSON.stringify(n)}function x(n){return`${n}`}function R(n,r){let i=k(r);if(!i)throw TypeError(`[radiant-element] Unknown type "${r}"`);return Y[i](n)}function H(n,r){let i=k(r);if(!i)throw TypeError(`[radiant-element] Unknown type "${r}"`);return(d[i]??d.default??x)(n)}function Z(n){return typeof n==="boolean"}function _(n){return typeof n==="number"}function $(n){return typeof n==="string"}function B(n){return Array.isArray(n)}function F(n){return typeof n==="object"&&!Array.isArray(n)&&n!==null}function b(n,r){switch(n){case Boolean:return Z(r);case Number:return _(r);case String:return $(r);case Array:return B(r);case Object:return F(r);default:return!1}}var y=(n,r,i,o)=>{if(r===Boolean){let s=n.getAttribute(i);if(s===null)return o;return s===""?!0:R(s,r)}let t=n.getAttribute(i);return t!==null?R(t,r):o??Q(r)};function D(n,r){if(r!==void 0&&!b(n,r))throw Error(`defaultValue does not match the expected type for ${n.name}`)}function S(n,r,i,o){return{type:i,name:n,initialValue:o,attribute:r,converter:{fromAttribute:(t)=>R(t,i),toAttribute:(t)=>H(t,i)}}}class W{host;properties=new Map;preUpgradePropertyValues=new Map;constructor(n){this.host=n;for(let r of Object.getOwnPropertyNames(n))this.preUpgradePropertyValues.set(r,Reflect.get(n,r))}register(n){this.properties.set(n.name,n)}getAll(){return Array.from(this.properties.values())}applyAttributeChange(n,r,i){let o=this.properties.get(n);if(!o)return;let t=this.transformAttributeValue(i,o);Reflect.set(this.host,o.name,t)}create(n,r,i,o,t){let{type:s,attribute:q,reflect:e,defaultValue:f}=r,g=q??n,P=this.preUpgradePropertyValues.has(n),E=P?this.preUpgradePropertyValues.get(n):void 0;D(s,f);let c=P?E:i(s,g,f);if(this.host.hasAttribute(g)&&(!e||c==null||c===""))this.host.removeAttribute(g);if(P&&Object.prototype.hasOwnProperty.call(this.host,n))Reflect.deleteProperty(this.host,n);let p=S(n,g,s,c);this.register(p);let m=this.host.getReactiveMember(n),M=m??t(n,c);if(m&&c!==void 0)m.set(c);if(o(n,{bind:r.bind,signal:M,onSet:(h)=>this.reflectValue(g,e,p,h)}),c!==void 0)queueMicrotask(()=>{let h=M.get();if(h===void 0)return;this.reflectValue(g,e,p,h),this.host.notifyUpdate(n,void 0,h)})}transformAttributeValue(n,r){return n!==null?r.converter.fromAttribute(n):n}reflectValue(n,r,i,o){if(!r)return;if(o==null||o===""||o===!1){this.host.removeAttribute(n);return}let t=i.converter.toAttribute(o);this.host.setAttribute(n,t)}}export{W as ReactivePropertyState};
2
+
3
+ //# debugId=7BE1D9EBC22CEDBA64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/attribute-utils.ts", "../src/core/reactive-prop-core.ts", "../src/core/reactive-property-state.ts"],
4
+ "sourcesContent": [
5
+ "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",
6
+ "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",
7
+ "import {\n\tcreateReactivePropertyMapping,\n\ttype ReactiveAccessorDefinition,\n\ttype ReactiveProperty,\n\ttype ReactivePropertyOptions,\n\tvalidateReactivePropertyDefault,\n} from './reactive-prop-core';\nimport type { ReactiveState } from './reactivity-contract';\nimport type { AttributeTypeConstant } from '../utils/attribute-utils';\n\nexport type ReactivePropertyStateHost = HTMLElement & {\n\tnotifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;\n\tcreateReactiveMember<T>(propertyName: string, initialValue: T): ReactiveState<T>;\n\tgetReactiveMember<T = unknown>(propertyName: string): ReactiveState<T> | undefined;\n};\n\nexport class ReactivePropertyState {\n\tprivate readonly properties = new Map<string, ReactiveProperty>();\n\tprivate readonly preUpgradePropertyValues = new Map<string, unknown>();\n\n\tconstructor(private readonly host: ReactivePropertyStateHost) {\n\t\tfor (const propertyName of Object.getOwnPropertyNames(host)) {\n\t\t\tthis.preUpgradePropertyValues.set(propertyName, Reflect.get(host, propertyName));\n\t\t}\n\t}\n\n\tpublic register(config: ReactiveProperty): void {\n\t\tthis.properties.set(config.name, config);\n\t}\n\n\tpublic getAll(): ReactiveProperty[] {\n\t\treturn Array.from(this.properties.values());\n\t}\n\n\tpublic applyAttributeChange(name: string, oldValue: string | null, newValue: string | null): void {\n\t\tconst config = this.properties.get(name);\n\n\t\tif (!config) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst transformedValue = this.transformAttributeValue(newValue, config);\n\n\t\tReflect.set(this.host, config.name, transformedValue);\n\t}\n\n\tpublic create<T>(\n\t\tpropertyName: string,\n\t\toptions: ReactivePropertyOptions<T>,\n\t\tresolveInitialValue: (type: AttributeTypeConstant, attributeKey: string, defaultValue: unknown) => T,\n\t\tdefineReactiveAccessor: (propertyName: string, config: ReactiveAccessorDefinition<T>) => void,\n\t\tcreateReactiveMember: <U>(propertyName: string, initialValue: U) => ReactiveState<U>,\n\t): void {\n\t\tconst { type, attribute, reflect, defaultValue } = options;\n\t\tconst attributeKey = attribute ?? propertyName;\n\t\tconst hasPreUpgradeValue = this.preUpgradePropertyValues.has(propertyName);\n\t\tconst preUpgradeValue = hasPreUpgradeValue ? (this.preUpgradePropertyValues.get(propertyName) as T) : undefined;\n\n\t\tvalidateReactivePropertyDefault(type, defaultValue);\n\n\t\tconst initialValue: T | undefined = hasPreUpgradeValue\n\t\t\t? preUpgradeValue\n\t\t\t: resolveInitialValue(type, attributeKey, defaultValue);\n\n\t\tif (this.host.hasAttribute(attributeKey) && (!reflect || initialValue == null || initialValue === '')) {\n\t\t\tthis.host.removeAttribute(attributeKey);\n\t\t}\n\n\t\tif (hasPreUpgradeValue && Object.prototype.hasOwnProperty.call(this.host, propertyName)) {\n\t\t\tReflect.deleteProperty(this.host, propertyName);\n\t\t}\n\n\t\tconst propertyMapping = createReactivePropertyMapping(propertyName, attributeKey, type, initialValue);\n\n\t\tthis.register(propertyMapping);\n\n\t\tconst existingMember = this.host.getReactiveMember<T>(propertyName);\n\t\tconst signal = existingMember ?? createReactiveMember(propertyName, initialValue as T);\n\n\t\tif (existingMember && initialValue !== undefined) {\n\t\t\texistingMember.set(initialValue as T);\n\t\t}\n\n\t\tdefineReactiveAccessor(propertyName, {\n\t\t\tbind: options.bind,\n\t\t\tsignal,\n\t\t\tonSet: (value) => this.reflectValue(attributeKey, reflect, propertyMapping, value),\n\t\t});\n\n\t\tif (initialValue !== undefined) {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tconst currentValue = signal.get();\n\t\t\t\tif (currentValue === undefined) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reflectValue(attributeKey, reflect, propertyMapping, currentValue);\n\t\t\t\tthis.host.notifyUpdate(propertyName, undefined, currentValue);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate transformAttributeValue(value: string | null, config: ReactiveProperty): unknown {\n\t\treturn value !== null ? config.converter.fromAttribute(value) : value;\n\t}\n\n\tprivate reflectValue<T>(\n\t\tattributeKey: string,\n\t\treflect: boolean | undefined,\n\t\tproperty: ReactiveProperty<T>,\n\t\tvalue: T,\n\t): void {\n\t\tif (!reflect) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (value == null || value === '' || value === false) {\n\t\t\tthis.host.removeAttribute(attributeKey);\n\t\t\treturn;\n\t\t}\n\n\t\tconst attributeValue = property.converter.toAttribute(value);\n\t\tthis.host.setAttribute(attributeKey, attributeValue);\n\t}\n}\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "7BE1D9EBC22CEDBA64756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:E,getOwnPropertyNames:K,getOwnPropertyDescriptor:L}=Object,M=Object.prototype.hasOwnProperty;function O(j){return this[j]}var _=(j)=>{var q=(F??=new WeakMap).get(j),z;if(q)return q;if(q=E({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function"){for(var A of K(j))if(!M.call(q,A))E(q,A,{get:O.bind(j,A),enumerable:!(z=L(j,A))||z.enumerable})}return F.set(j,q),q},F;var P=(j)=>j;function Q(j,q){this[j]=P.bind(null,q)}var $=(j,q)=>{for(var z in q)E(j,z,{get:q[z],enumerable:!0,configurable:!0,set:Q.bind(q,z)})};var x=(j,q)=>()=>(j&&(q=j(j=0)),q);var I=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(q,z)=>(typeof require<"u"?require:q)[z]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{Computed as U,state as V,subtle as W,trackDependency as X}from"@ecopages/signals";function Y(j){return j}function G(j){return j}var H={trackDependency(j){X(Y(j))},createComputed(j){return new U(j)},createWatcher(j){let q=new W.Watcher(j);return{watch(z){q.watch(G(z))},unwatch(z){q.unwatch(G(z))}}},createState(j){return V(j)}};var J=H;function B(){return J}function Z(j){J=j}function b(j){B().trackDependency(j)}function S(j){return B().createComputed(j)}function f(j){return B().createWatcher(j)}export{b as trackReactiveDependency,Z as setReactiveRuntime,f as createReactiveWatcher,S as createReactiveComputed};
2
+
3
+ //# debugId=A45FCC28CE752DBB64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/reactivity-signals.ts", "../src/core/reactivity-runtime.ts", "../src/core/reactivity-adapter.ts"],
4
+ "sourcesContent": [
5
+ "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",
6
+ "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",
7
+ "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"
8
+ ],
9
+ "mappings": "i0BAAA,mBACC,WACA,YACA,qBACA,0BAWD,SAAS,CAAuB,CAAC,EAAqD,CACrF,OAAO,EAGR,SAAS,CAAiB,CAAC,EAA6D,CACvF,OAAO,EAWD,IAAM,EAA0C,CACtD,eAAe,CAAC,EAAM,CACrB,EAAgB,EAAwB,CAAI,CAAC,GAE9C,cAAiB,CAAC,EAAoC,CACrD,OAAO,IAAI,EAAgB,CAAI,GAEhC,aAAa,CAAC,EAAqC,CAClD,IAAM,EAAU,IAAI,EAAO,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,EAAa,CAAO,EAE7B,EClDA,IAAI,EAAyC,EAUtC,SAAS,CAAkB,EAAoB,CACrD,OAAO,EAUD,SAAS,CAAkB,CAAC,EAAgC,CAClE,EAAwB,ECdlB,SAAS,CAAuB,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",
10
+ "debugId": "A45FCC28CE752DBB64756E2164756E21",
11
+ "names": []
12
+ }
@@ -16,6 +16,19 @@ export interface ReactiveDependencyNode {
16
16
  export interface ReactiveSubscriber<T> {
17
17
  (value: T): void;
18
18
  }
19
+ /**
20
+ * Writable reactive state owned by Radiant core for a single host member.
21
+ *
22
+ * The shape intentionally mirrors only the capabilities core needs (read,
23
+ * write, imperative subscribe) rather than exposing any concrete Signals types
24
+ * to the rest of the package.
25
+ */
26
+ export interface ReactiveState<T> {
27
+ get(): T;
28
+ set(value: T): void;
29
+ subscribe(notify: (value: T) => void): () => void;
30
+ update?(updater: (value: T) => T): void;
31
+ }
19
32
  /** Read-only computed value consumed by Radiant core render lifecycles. */
20
33
  export interface ReactiveComputed<T> {
21
34
  get(): T;
@@ -36,4 +49,5 @@ export interface ReactiveRuntime {
36
49
  trackDependency(node: ReactiveDependencyNode): void;
37
50
  createComputed<T>(read: () => T): ReactiveComputed<T>;
38
51
  createWatcher(notify: () => void): ReactiveWatcher;
52
+ createState<T>(initial: T): ReactiveState<T>;
39
53
  }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:B,getOwnPropertyNames:J,getOwnPropertyDescriptor:K}=Object,L=Object.prototype.hasOwnProperty;function M(j){return this[j]}var Y=(j)=>{var q=(E??=new WeakMap).get(j),z;if(q)return q;if(q=B({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function"){for(var A of J(j))if(!L.call(q,A))B(q,A,{get:M.bind(j,A),enumerable:!(z=K(j,A))||z.enumerable})}return E.set(j,q),q},E;var O=(j)=>j;function P(j,q){this[j]=O.bind(null,q)}var Z=(j,q)=>{for(var z in q)B(j,z,{get:q[z],enumerable:!0,configurable:!0,set:P.bind(q,z)})};var _=(j,q)=>()=>(j&&(q=j(j=0)),q);var $=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(q,z)=>(typeof require<"u"?require:q)[z]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{Computed as Q,state as U,subtle as V,trackDependency as W}from"@ecopages/signals";function X(j){return j}function F(j){return j}var G={trackDependency(j){W(X(j))},createComputed(j){return new Q(j)},createWatcher(j){let q=new V.Watcher(j);return{watch(z){q.watch(F(z))},unwatch(z){q.unwatch(F(z))}}},createState(j){return U(j)}};var H=G;function C(){return H}function D(j){H=j}export{D as setReactiveRuntime,C as getReactiveRuntime};
2
+
3
+ //# debugId=D1EDAA7B5CAD368D64756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/reactivity-signals.ts", "../src/core/reactivity-runtime.ts"],
4
+ "sourcesContent": [
5
+ "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",
6
+ "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"
7
+ ],
8
+ "mappings": "i0BAAA,mBACC,WACA,YACA,qBACA,0BAWD,SAAS,CAAuB,CAAC,EAAqD,CACrF,OAAO,EAGR,SAAS,CAAiB,CAAC,EAA6D,CACvF,OAAO,EAWD,IAAM,EAA0C,CACtD,eAAe,CAAC,EAAM,CACrB,EAAgB,EAAwB,CAAI,CAAC,GAE9C,cAAiB,CAAC,EAAoC,CACrD,OAAO,IAAI,EAAgB,CAAI,GAEhC,aAAa,CAAC,EAAqC,CAClD,IAAM,EAAU,IAAI,EAAO,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,EAAa,CAAO,EAE7B,EClDA,IAAI,EAAyC,EAUtC,SAAS,CAAkB,EAAoB,CACrD,OAAO,EAUD,SAAS,CAAkB,CAAC,EAAgC,CAClE,EAAwB",
9
+ "debugId": "D1EDAA7B5CAD368D64756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:A,getOwnPropertyNames:F,getOwnPropertyDescriptor:G}=Object,H=Object.prototype.hasOwnProperty;function I(j){return this[j]}var U=(j)=>{var q=(B??=new WeakMap).get(j),x;if(q)return q;if(q=A({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function"){for(var z of F(j))if(!H.call(q,z))A(q,z,{get:I.bind(j,z),enumerable:!(x=G(j,z))||x.enumerable})}return B.set(j,q),q},B;var J=(j)=>j;function K(j,q){this[j]=J.bind(null,q)}var V=(j,q)=>{for(var x in q)A(j,x,{get:q[x],enumerable:!0,configurable:!0,set:K.bind(q,x)})};var W=(j,q)=>()=>(j&&(q=j(j=0)),q);var X=((j)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(j,{get:(q,x)=>(typeof require<"u"?require:q)[x]}):j)(function(j){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});import{Computed as L,state as M,subtle as O,trackDependency as P}from"@ecopages/signals";function Q(j){return j}function E(j){return j}var _={trackDependency(j){P(Q(j))},createComputed(j){return new L(j)},createWatcher(j){let q=new O.Watcher(j);return{watch(x){q.watch(E(x))},unwatch(x){q.unwatch(E(x))}}},createState(j){return M(j)}};export{_ as signalsReactiveRuntime};
2
+
3
+ //# debugId=2B70E090932B069A64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/reactivity-signals.ts"],
4
+ "sourcesContent": [
5
+ "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"
6
+ ],
7
+ "mappings": "i0BAAA,mBACC,WACA,YACA,qBACA,0BAWD,SAAS,CAAuB,CAAC,EAAqD,CACrF,OAAO,EAGR,SAAS,CAAiB,CAAC,EAA6D,CACvF,OAAO,EAWD,IAAM,EAA0C,CACtD,eAAe,CAAC,EAAM,CACrB,EAAgB,EAAwB,CAAI,CAAC,GAE9C,cAAiB,CAAC,EAAoC,CACrD,OAAO,IAAI,EAAgB,CAAI,GAEhC,aAAa,CAAC,EAAqC,CAClD,IAAM,EAAU,IAAI,EAAO,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,EAAa,CAAO,EAE7B",
8
+ "debugId": "2B70E090932B069A64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ var{defineProperty:F,getOwnPropertyNames:g,getOwnPropertyDescriptor:v}=Object,y=Object.prototype.hasOwnProperty;function h(q){return this[q]}var M0=(q)=>{var G=(Y??=new WeakMap).get(q),Q;if(G)return G;if(G=F({},"__esModule",{value:!0}),q&&typeof q==="object"||typeof q==="function"){for(var X of g(q))if(!y.call(G,X))F(G,X,{get:h.bind(q,X),enumerable:!(Q=v(q,X))||Q.enumerable})}return Y.set(q,G),G},Y;var p=(q)=>q;function b(q,G){this[q]=p.bind(null,G)}var z0=(q,G)=>{for(var Q in G)F(q,Q,{get:G[Q],enumerable:!0,configurable:!0,set:b.bind(G,Q)})};var w0=(q,G)=>()=>(q&&(G=q(q=0)),G);var J0=((q)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(q,{get:(G,Q)=>(typeof require<"u"?require:G)[Q]}):q)(function(q){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+q+'" is not supported')});import{Computed as m,state as u,subtle as c,trackDependency as s}from"@ecopages/signals";function i(q){return q}function K(q){return q}var H={trackDependency(q){s(i(q))},createComputed(q){return new m(q)},createWatcher(q){let G=new c.Watcher(q);return{watch(Q){G.watch(K(Q))},unwatch(Q){G.unwatch(K(Q))}}},createState(q){return u(q)}};var x=H;function J(){return x}function d(q){x=q}function Y0(q){J().trackDependency(q)}function E(q){return J().createComputed(q)}function O(q){return J().createWatcher(q)}function _(q){return q.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var M="data-hydration",A="data-hydration-type",B="data-hydration-key";function O0(q){let G=q.hydrationKey?` ${B}="${l(q.hydrationKey)}"`:"";return`<script type="application/json" ${M} ${A}="${q.type}"${G}>${q.serializedValue}</script>`}function _0(q){return _(q)}function k0(q,G){let Q=q.textContent;if(!Q)return G;try{return JSON.parse(Q)}catch{if(typeof console<"u")console.warn(`[@ecopages/radiant] Failed to parse hydration payload from <script ${M}>:`,Q.slice(0,120));return G}}function A0(q,G,Q){let X=q.children;if(!X||X.length===0){let $=q.childNodes;if(!$||$.length===0)return null;for(let Z=0;Z<$.length;Z+=1){let z=$[Z];if(z.nodeType!==1)continue;let D=z;if(k(D,G,Q))return D}return null}for(let $=0;$<X.length;$+=1)if(k(X[$],G,Q))return X[$];return null}function k(q,G,Q){if(q.tagName!=="SCRIPT"||!q.hasAttribute(M)||q.getAttribute(A)!==G)return!1;if(Q!==void 0)return q.getAttribute(B)===Q;return!q.hasAttribute(B)}function l(q){return q.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as o,isKeyedJsxValue as I,isSlotJsxValue as a}from"@ecopages/jsx";var w="",L="data-radiant-slot-projection";function P(q){let G=new Map;for(let Q of Array.from(q.childNodes)){if(e(Q))continue;r(G,t(Q),Q)}return G}function f(q){let G;try{G=JSON.parse(q)}catch{if(typeof console<"u")console.warn("[@ecopages/radiant] Failed to parse slot projection payload:",q.slice(0,120));return new Map}let Q=new Map;for(let[X,$]of Object.entries(G)){if(!Array.isArray($)||$.length===0)continue;Q.set(U(X),$.map((Z)=>o(Z)))}return Q}function N(q){let G=Array.from(q.childNodes).filter((Q)=>T(Q)).map((Q)=>W(Q)??"").filter((Q)=>Q!=="");return G.length>0?G.join(""):void 0}function j(q){let G={};for(let[Q,X]of q.entries()){let $=X.map((Z)=>W(Z)).filter((Z)=>Z!==void 0&&Z!=="");if($.length>0)G[Q]=$}return Object.keys(G).length>0?JSON.stringify(G):void 0}function C(q,G){let Q=!1,X=(Z)=>{if(a(Z))return Q=!0,G0(Z,G,X);if(I(Z))return n(Z,X(Z.value));if(q0(Z))return{_$rType$:1,rootLocalName:Z.rootLocalName,ssrIntrinsicProps:Z.ssrIntrinsicProps,strings:Z.strings,values:Z.values.map((z)=>X(z))};if(V(Z))return Array.from(Z,(z)=>X(z));return Z},$=X(q);return{containsSlots:Q,value:$}}function R(q){for(let G of Array.from(q.childNodes)){if(!S(G))continue;let Q=G.textContent??void 0;return G.parentNode?.removeChild(G),Q}return}function r(q,G,Q){let X=q.get(G);if(X){X.push(Q);return}q.set(G,[Q])}function n(q,G){return{...q,value:G}}function t(q){if(q instanceof Element)return U(q.getAttribute("slot"));return w}function V(q){return typeof q!=="string"&&typeof q==="object"&&q!==null&&Symbol.iterator in q}function S(q){return q instanceof HTMLScriptElement&&q.hasAttribute(L)}function T(q){return q instanceof HTMLScriptElement&&q.hasAttribute(M)}function e(q){return S(q)||T(q)}function q0(q){return typeof q==="object"&&q!==null&&q._$rType$===1&&Array.isArray(q.strings)&&Array.isArray(q.values)}function U(q){return q??w}function W(q){if(q===void 0||q===null||q===!1||q===!0)return;if(typeof Node<"u"&&q instanceof Node){if(q.nodeType===Node.TEXT_NODE)return q.textContent??"";return q.outerHTML??q.textContent??void 0}if(I(q))return W(q.value);if(typeof q==="string"||typeof q==="number"||typeof q==="bigint")return String(q);if(typeof q==="object"&&q!==null&&"outerHTML"in q)return typeof q.outerHTML==="string"?q.outerHTML:q.textContent??void 0;if(V(q))return Array.from(q,(G)=>W(G)??"").join("");return}function G0(q,G,Q){let X=G.get(U(q.name));if(X&&X.length>0)return X.length===1?X[0]:X;if(q.fallback===void 0)return"";return Q(q.fallback)}import{hydrate as Q0,render as X0}from"@ecopages/jsx";class Z0{#q;#G=new Map;#Q;#Z;#X;#$=0;constructor(q){this.#q=q,this.#Z=O(()=>{this.#q.requestUpdate()})}get slotProjectionVersion(){return this.#$}getSlotElements(q){return this.ensureSlotProjectionState(),(this.#G.get(q??w)??[]).filter((G)=>typeof Node<"u"&&G instanceof Element)}getSlotProjectionScriptTag(){this.ensureSlotProjectionState();let q=j(this.#G);if(!q)return;return`<script type="application/json" ${L}>${$0(q)}</script>`}getAuthoredHydrationScriptMarkup(){return N(this.#q)??void 0}hydrate(q){this.disconnectSlotProjectionObserver();try{Q0(this.resolveTrackedRenderOutput().value,q)}finally{this.observeSlotProjection()}}render(q){this.disconnectSlotProjectionObserver();try{X0(this.resolveTrackedRenderOutput().value,q)}finally{this.observeSlotProjection()}}observeSlotProjection(){if(typeof MutationObserver>"u"||this.#X||!this.#q.isConnected)return;this.#X=new MutationObserver((q)=>this.handleSlotProjectionMutations(q)),this.#X.observe(this.#q,{childList:!0})}disconnectSlotProjectionObserver(){this.#X?.disconnect(),this.#X=void 0}disconnectRenderWatcher(){if(!this.#Q)return;this.#Z.unwatch(this.#Q),this.#Q=void 0}resolveTrackedRenderOutput(){let q=E(()=>this.resolveRenderOutput()),G=q.get();if(!this.#q.isConnected)return G;if(this.#Q)this.#Z.unwatch(this.#Q);return this.#Q=q,this.#Z.watch(q),G}dispose(){this.disconnectSlotProjectionObserver(),this.disconnectRenderWatcher()}ensureSlotProjectionState(){if(this.#G.size>0)return;let q=this.#q.isConnected?R(this.#q):void 0;if(typeof q==="string"&&q!==""){this.#G=f(q),this.#$+=1;return}if(this.#q.childNodes.length>0)this.#G=P(this.#q),this.#$+=1}handleSlotProjectionMutations(q){let G=!1;for(let Q of q){for(let X of Array.from(Q.removedNodes))if(this.removeProjectedSlotNode(X))G=!0;for(let X of Array.from(Q.addedNodes)){if(X.parentNode!==this.#q)continue;if(this.addProjectedSlotNode(X))G=!0}}if(G)this.#$+=1,this.#q.requestUpdate()}addProjectedSlotNode(q){if(q instanceof HTMLScriptElement&&(q.hasAttribute(L)||q.hasAttribute(M)))return!1;let G=q instanceof Element?q.getAttribute("slot")??w:w,Q=this.#G.get(G);if(Q){if(Q.includes(q))return!1;return Q.push(q),!0}return this.#G.set(G,[q]),!0}removeProjectedSlotNode(q){for(let[G,Q]of this.#G.entries()){let X=Q.indexOf(q);if(X===-1)continue;if(Q.splice(X,1),Q.length===0)this.#G.delete(G);return!0}return!1}resolveRenderOutput(){return this.ensureSlotProjectionState(),C(this.#q.render(),this.#G)}}function $0(q){return q.replace(/</g,"\\u003c")}export{Z0 as RenderRuntime};
2
+
3
+ //# debugId=32D1F97CC4B4594664756E2164756E21