@ecopages/radiant 0.3.0-alpha.8 → 0.3.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (213) hide show
  1. package/dist/README.md +315 -0
  2. package/dist/client/app-bootstrap.d.ts +19 -0
  3. package/dist/client/app-bootstrap.js +3 -0
  4. package/dist/client/app-bootstrap.js.map +10 -0
  5. package/dist/context/decorators/consume-context.js +2 -2
  6. package/dist/context/decorators/consume-context.js.map +4 -4
  7. package/dist/context/decorators/context-selector.js +2 -2
  8. package/dist/context/decorators/context-selector.js.map +8 -7
  9. package/dist/context/decorators/legacy/consume-context.js +2 -2
  10. package/dist/context/decorators/legacy/consume-context.js.map +4 -4
  11. package/dist/context/decorators/legacy/context-selector-field.js +2 -2
  12. package/dist/context/decorators/legacy/context-selector-field.js.map +4 -4
  13. package/dist/context/decorators/legacy/context-selector.js +2 -2
  14. package/dist/context/decorators/legacy/context-selector.js.map +4 -4
  15. package/dist/context/decorators/legacy/provide-context.js +2 -2
  16. package/dist/context/decorators/legacy/provide-context.js.map +4 -4
  17. package/dist/context/decorators/on-context-update.js +2 -2
  18. package/dist/context/decorators/on-context-update.js.map +4 -4
  19. package/dist/context/decorators/provide-context.js +2 -2
  20. package/dist/context/decorators/provide-context.js.map +4 -4
  21. package/dist/context/decorators/standard-legacy-dispatch.d.ts +6 -0
  22. package/dist/context/decorators/standard-legacy-dispatch.js +3 -0
  23. package/dist/context/decorators/standard-legacy-dispatch.js.map +10 -0
  24. package/dist/context/index.js +2 -2
  25. package/dist/context/index.js.map +11 -10
  26. package/dist/controller-registry.js +2 -2
  27. package/dist/controller-registry.js.map +3 -3
  28. package/dist/core/event-subscription-registry.d.ts +16 -0
  29. package/dist/core/event-subscription-registry.js +3 -0
  30. package/dist/core/event-subscription-registry.js.map +10 -0
  31. package/dist/core/host-ssr-registry.d.ts +13 -0
  32. package/dist/core/host-ssr-registry.js +3 -0
  33. package/dist/core/host-ssr-registry.js.map +10 -0
  34. package/dist/core/hydration-capable-host.d.ts +8 -0
  35. package/dist/core/hydration-capable-host.js +3 -0
  36. package/dist/core/hydration-capable-host.js.map +10 -0
  37. package/dist/core/radiant-controller.d.ts +36 -15
  38. package/dist/core/radiant-controller.js +2 -2
  39. package/dist/core/radiant-controller.js.map +13 -6
  40. package/dist/core/{radiant-component-ssr.d.ts → radiant-element-ssr-host.d.ts} +16 -16
  41. package/dist/core/radiant-element-ssr-host.js +3 -0
  42. package/dist/core/radiant-element-ssr-host.js.map +10 -0
  43. package/dist/core/radiant-element-ssr-registry.d.ts +18 -0
  44. package/dist/core/radiant-element-ssr-registry.js +3 -0
  45. package/dist/core/radiant-element-ssr-registry.js.map +10 -0
  46. package/dist/core/radiant-element.d.ts +38 -138
  47. package/dist/core/radiant-element.js +2 -2
  48. package/dist/core/radiant-element.js.map +21 -10
  49. package/dist/core/reactive-host.d.ts +3 -16
  50. package/dist/core/reactive-host.js +2 -2
  51. package/dist/core/reactive-host.js.map +7 -4
  52. package/dist/core/reactive-jsx-value.d.ts +2 -1
  53. package/dist/core/reactive-jsx-value.js.map +2 -2
  54. package/dist/core/reactive-prop-core.d.ts +44 -0
  55. package/dist/core/reactive-prop-core.js +3 -0
  56. package/dist/core/reactive-prop-core.js.map +11 -0
  57. package/dist/core/reactive-prop-metadata.d.ts +1 -1
  58. package/dist/core/reactive-prop-metadata.js +2 -2
  59. package/dist/core/reactive-prop-metadata.js.map +2 -2
  60. package/dist/core/reactive-property-state.d.ts +17 -0
  61. package/dist/core/reactive-property-state.js +3 -0
  62. package/dist/core/reactive-property-state.js.map +12 -0
  63. package/dist/core/reactivity-adapter.d.ts +8 -0
  64. package/dist/core/reactivity-adapter.js +3 -0
  65. package/dist/core/reactivity-adapter.js.map +12 -0
  66. package/dist/core/reactivity-contract.d.ts +39 -0
  67. package/dist/core/reactivity-contract.js +2 -0
  68. package/dist/core/reactivity-contract.js.map +9 -0
  69. package/dist/core/reactivity-runtime.d.ts +18 -0
  70. package/dist/core/reactivity-runtime.js +3 -0
  71. package/dist/core/reactivity-runtime.js.map +11 -0
  72. package/dist/core/reactivity-signals.d.ts +10 -0
  73. package/dist/core/reactivity-signals.js +3 -0
  74. package/dist/core/reactivity-signals.js.map +10 -0
  75. package/dist/core/render-runtime.d.ts +28 -0
  76. package/dist/core/render-runtime.js +3 -0
  77. package/dist/core/render-runtime.js.map +16 -0
  78. package/dist/core/render-scheduler.d.ts +22 -0
  79. package/dist/core/render-scheduler.js +3 -0
  80. package/dist/core/render-scheduler.js.map +10 -0
  81. package/dist/core/slot-projection-runtime.js +2 -2
  82. package/dist/core/slot-projection-runtime.js.map +3 -3
  83. package/dist/decorators/attr.js +2 -2
  84. package/dist/decorators/attr.js.map +6 -5
  85. package/dist/decorators/controller.js +2 -2
  86. package/dist/decorators/controller.js.map +3 -3
  87. package/dist/decorators/event.js +2 -2
  88. package/dist/decorators/event.js.map +3 -3
  89. package/dist/decorators/legacy/attr.js +2 -2
  90. package/dist/decorators/legacy/attr.js.map +6 -5
  91. package/dist/decorators/legacy/event.js +2 -2
  92. package/dist/decorators/legacy/event.js.map +3 -3
  93. package/dist/decorators/legacy/host-readiness.d.ts +8 -0
  94. package/dist/decorators/legacy/host-readiness.js +3 -0
  95. package/dist/decorators/legacy/host-readiness.js.map +11 -0
  96. package/dist/decorators/legacy/instance-initializers.d.ts +16 -0
  97. package/dist/decorators/legacy/instance-initializers.js +2 -2
  98. package/dist/decorators/legacy/instance-initializers.js.map +3 -3
  99. package/dist/decorators/legacy/on-event.js +2 -2
  100. package/dist/decorators/legacy/on-event.js.map +6 -5
  101. package/dist/decorators/legacy/on-updated.d.ts +1 -1
  102. package/dist/decorators/legacy/on-updated.js +2 -2
  103. package/dist/decorators/legacy/on-updated.js.map +4 -4
  104. package/dist/decorators/legacy/query-slot.js +2 -2
  105. package/dist/decorators/legacy/query-slot.js.map +5 -5
  106. package/dist/decorators/legacy/query.js +2 -2
  107. package/dist/decorators/legacy/query.js.map +3 -3
  108. package/dist/decorators/legacy/reactive-field.js +2 -2
  109. package/dist/decorators/legacy/reactive-field.js.map +3 -3
  110. package/dist/decorators/legacy/reactive-prop.d.ts +1 -1
  111. package/dist/decorators/legacy/reactive-prop.js +2 -2
  112. package/dist/decorators/legacy/reactive-prop.js.map +7 -6
  113. package/dist/decorators/legacy/signal.d.ts +1 -1
  114. package/dist/decorators/legacy/signal.js +2 -2
  115. package/dist/decorators/legacy/signal.js.map +6 -5
  116. package/dist/decorators/on-event.js +2 -2
  117. package/dist/decorators/on-event.js.map +6 -5
  118. package/dist/decorators/on-updated.js +2 -2
  119. package/dist/decorators/on-updated.js.map +4 -4
  120. package/dist/decorators/prop.d.ts +1 -1
  121. package/dist/decorators/prop.js +2 -2
  122. package/dist/decorators/prop.js.map +9 -8
  123. package/dist/decorators/query-slot.js +2 -2
  124. package/dist/decorators/query-slot.js.map +6 -6
  125. package/dist/decorators/query.js +2 -2
  126. package/dist/decorators/query.js.map +3 -3
  127. package/dist/decorators/shared/reactive-attr.d.ts +1 -1
  128. package/dist/decorators/shared/reactive-attr.js +2 -2
  129. package/dist/decorators/shared/reactive-attr.js.map +5 -4
  130. package/dist/decorators/signal.js +2 -2
  131. package/dist/decorators/signal.js.map +7 -6
  132. package/dist/decorators/standard/attr.js +2 -2
  133. package/dist/decorators/standard/attr.js.map +5 -4
  134. package/dist/decorators/standard/on-event.js +2 -2
  135. package/dist/decorators/standard/on-event.js.map +5 -4
  136. package/dist/decorators/standard/query-slot.d.ts +0 -1
  137. package/dist/decorators/standard/query-slot.js +2 -2
  138. package/dist/decorators/standard/query-slot.js.map +4 -4
  139. package/dist/decorators/standard/reactive-field.js +2 -2
  140. package/dist/decorators/standard/reactive-field.js.map +3 -3
  141. package/dist/decorators/standard/reactive-prop.d.ts +1 -1
  142. package/dist/decorators/standard/reactive-prop.js +2 -2
  143. package/dist/decorators/standard/reactive-prop.js.map +6 -5
  144. package/dist/decorators/standard/signal.d.ts +1 -1
  145. package/dist/decorators/standard/signal.js +2 -2
  146. package/dist/decorators/standard/signal.js.map +5 -4
  147. package/dist/decorators/state.js +2 -2
  148. package/dist/decorators/state.js.map +4 -4
  149. package/dist/helpers/create-event-listener.js +2 -2
  150. package/dist/helpers/create-event-listener.js.map +5 -4
  151. package/dist/helpers/create-query-slot.d.ts +0 -1
  152. package/dist/helpers/create-query-slot.js +2 -2
  153. package/dist/helpers/create-query-slot.js.map +3 -3
  154. package/dist/helpers/index.js +2 -2
  155. package/dist/helpers/index.js.map +6 -5
  156. package/dist/index.js +2 -2
  157. package/dist/index.js.map +37 -25
  158. package/dist/package.json +209 -0
  159. package/dist/server/host-attribute-serialization.d.ts +46 -0
  160. package/dist/server/host-attribute-serialization.js +3 -0
  161. package/dist/server/host-attribute-serialization.js.map +12 -0
  162. package/dist/server/host-script-composition.d.ts +42 -0
  163. package/dist/server/host-script-composition.js +3 -0
  164. package/dist/server/host-script-composition.js.map +10 -0
  165. package/dist/server/install-light-dom-shim.js +2 -2
  166. package/dist/server/install-light-dom-shim.js.map +3 -3
  167. package/dist/server/internal-radiant-host.d.ts +2 -0
  168. package/dist/server/internal-radiant-host.js +3 -0
  169. package/dist/server/internal-radiant-host.js.map +9 -0
  170. package/dist/server/light-dom-shim.d.ts +9 -0
  171. package/dist/server/light-dom-shim.js +2 -2
  172. package/dist/server/light-dom-shim.js.map +3 -3
  173. package/dist/server/radiant-element-ssr-bridge.d.ts +21 -0
  174. package/dist/server/radiant-element-ssr-bridge.js +3 -0
  175. package/dist/server/radiant-element-ssr-bridge.js.map +24 -0
  176. package/dist/server/radiant-element-ssr-extractor.d.ts +2 -0
  177. package/dist/server/radiant-element-ssr-extractor.js +3 -0
  178. package/dist/server/radiant-element-ssr-extractor.js.map +12 -0
  179. package/dist/server/radiant-element-ssr-service.d.ts +13 -0
  180. package/dist/server/radiant-element-ssr-service.js +3 -0
  181. package/dist/server/radiant-element-ssr-service.js.map +22 -0
  182. package/dist/server/radiant-element-ssr.d.ts +1 -0
  183. package/dist/server/radiant-element-ssr.js +3 -0
  184. package/dist/server/radiant-element-ssr.js.map +24 -0
  185. package/dist/server/render-component.d.ts +3 -9
  186. package/dist/server/render-component.js +2 -2
  187. package/dist/server/render-component.js.map +17 -9
  188. package/dist/server/render-controller.js +2 -2
  189. package/dist/server/render-controller.js.map +19 -11
  190. package/dist/server/render-fragment.d.ts +7 -0
  191. package/dist/server/render-fragment.js +3 -0
  192. package/dist/server/render-fragment.js.map +10 -0
  193. package/dist/server/slot-projection-html.js +2 -2
  194. package/dist/server/slot-projection-html.js.map +3 -3
  195. package/dist/tools/escape-css-identifier.d.ts +1 -0
  196. package/dist/tools/escape-css-identifier.js +3 -0
  197. package/dist/tools/escape-css-identifier.js.map +10 -0
  198. package/dist/tools/index.d.ts +1 -0
  199. package/dist/tools/index.js +2 -2
  200. package/dist/tools/index.js.map +4 -3
  201. package/dist/utils/escape-html-attribute.d.ts +2 -0
  202. package/dist/utils/escape-html-attribute.js +3 -0
  203. package/dist/utils/escape-html-attribute.js.map +10 -0
  204. package/package.json +12 -5
  205. package/dist/core/radiant-component-ssr-registry.d.ts +0 -54
  206. package/dist/core/radiant-component-ssr-registry.js +0 -3
  207. package/dist/core/radiant-component-ssr-registry.js.map +0 -10
  208. package/dist/core/radiant-component-ssr.js +0 -3
  209. package/dist/core/radiant-component-ssr.js.map +0 -14
  210. package/dist/server/radiant-component-ssr-runtime.d.ts +0 -9
  211. package/dist/server/radiant-component-ssr-runtime.js +0 -3
  212. package/dist/server/radiant-component-ssr-runtime.js.map +0 -17
  213. package/size-budget.json +0 -25
@@ -1,29 +1,29 @@
1
1
  import type { JsxRenderable } from '@ecopages/jsx';
2
2
  import type { RenderToStringOptions } from '@ecopages/jsx/server';
3
3
  import type { SsrSerializableContextProvider } from '../context/context-provider';
4
- import type { ReactiveProperty } from './radiant-element';
4
+ import type { ReactiveProperty } from './reactive-prop-core';
5
5
  import type { ReactivePropDefinition } from './reactive-prop-metadata';
6
6
  import type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';
7
- type RadiantElementSsrHost = {
7
+ /**
8
+ * Unified SSR host shape shared by core resolution and server serialization.
9
+ */
10
+ export type InternalRadiantSsrHost = {
8
11
  constructor: CustomElementConstructor;
12
+ getAttribute(name: string): string | null;
13
+ getAttributeNames(): string[];
9
14
  getAuthoredHydrationScriptMarkup?: () => string | undefined;
10
15
  getContextProviders: () => SsrSerializableContextProvider[];
11
16
  getHydrationBindings: () => SsrSerializableHydrationBinding[];
12
- getSlotProjectionScriptTag?: () => string | undefined;
13
- renderToString: (options?: RenderToStringOptions) => string;
14
17
  getReactiveProperties: () => ReactiveProperty[];
15
18
  getReactivePropDefinitions: () => ReactivePropDefinition[];
16
19
  getPropertyValue: (name: string) => unknown;
17
- listAttributeNames: () => string[];
18
- getAttributeValue: (name: string) => string | null;
20
+ getSlotProjectionScriptTag?: () => string | undefined;
21
+ resolveTrackedRenderOutput: () => {
22
+ containsSlots: boolean;
23
+ value: JsxRenderable;
24
+ };
25
+ renderViewToString: (options?: RenderToStringOptions) => string;
19
26
  };
20
- export declare class RadiantElementSsrService {
21
- private readonly host;
22
- constructor(host: RadiantElementSsrHost);
23
- renderHost(): JsxRenderable;
24
- renderHostToString(options?: RenderToStringOptions, attributes?: Record<string, string>): string;
25
- private renderHostContent;
26
- getHostAttributes(): Record<string, string>;
27
- private getTagName;
28
- }
29
- export {};
27
+ export type RadiantElementSsrHostSource = InternalRadiantSsrHost;
28
+ export declare function resolveRadiantElementSsrHostSource(component: object): InternalRadiantSsrHost | undefined;
29
+ export declare function isInternalRadiantSsrHost(component: object): component is InternalRadiantSsrHost;
@@ -0,0 +1,3 @@
1
+ var w=((g)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(g,{get:(j,k)=>(typeof require<"u"?require:j)[k]}):g)(function(g){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+g+'" is not supported')});function A(g){if(q(g))return g;return}function q(g){return typeof g.constructor==="function"&&typeof g.getAttribute==="function"&&typeof g.getAttributeNames==="function"&&typeof g.getAuthoredHydrationScriptMarkup==="function"&&typeof g.getContextProviders==="function"&&typeof g.getHydrationBindings==="function"&&typeof g.getReactiveProperties==="function"&&typeof g.getSlotProjectionScriptTag==="function"&&typeof g.resolveTrackedRenderOutput==="function"&&typeof g.renderViewToString==="function"}export{A as resolveRadiantElementSsrHostSource,q as isInternalRadiantSsrHost};
2
+
3
+ //# debugId=DE2A04B3C3EC62F264756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/radiant-element-ssr-host.ts"],
4
+ "sourcesContent": [
5
+ "import type { JsxRenderable } from '@ecopages/jsx';\nimport type { RenderToStringOptions } from '@ecopages/jsx/server';\nimport type { SsrSerializableContextProvider } from '../context/context-provider';\nimport type { ReactiveProperty } from './reactive-prop-core';\nimport type { ReactivePropDefinition } from './reactive-prop-metadata';\nimport type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';\n\n/**\n * Unified SSR host shape shared by core resolution and server serialization.\n */\nexport type InternalRadiantSsrHost = {\n\tconstructor: CustomElementConstructor;\n\tgetAttribute(name: string): string | null;\n\tgetAttributeNames(): string[];\n\tgetAuthoredHydrationScriptMarkup?: () => string | undefined;\n\tgetContextProviders: () => SsrSerializableContextProvider[];\n\tgetHydrationBindings: () => SsrSerializableHydrationBinding[];\n\tgetReactiveProperties: () => ReactiveProperty[];\n\tgetReactivePropDefinitions: () => ReactivePropDefinition[];\n\tgetPropertyValue: (name: string) => unknown;\n\tgetSlotProjectionScriptTag?: () => string | undefined;\n\tresolveTrackedRenderOutput: () => { containsSlots: boolean; value: JsxRenderable };\n\trenderViewToString: (options?: RenderToStringOptions) => string;\n};\n\nexport type RadiantElementSsrHostSource = InternalRadiantSsrHost;\n\nexport function resolveRadiantElementSsrHostSource(component: object): InternalRadiantSsrHost | undefined {\n\tif (isInternalRadiantSsrHost(component)) {\n\t\treturn component;\n\t}\n\n\treturn undefined;\n}\n\nexport function isInternalRadiantSsrHost(component: object): component is InternalRadiantSsrHost {\n\treturn (\n\t\ttypeof component.constructor === 'function' &&\n\t\ttypeof (component as { getAttribute?: unknown }).getAttribute === 'function' &&\n\t\ttypeof (component as { getAttributeNames?: unknown }).getAttributeNames === 'function' &&\n\t\ttypeof (component as { getAuthoredHydrationScriptMarkup?: unknown }).getAuthoredHydrationScriptMarkup ===\n\t\t\t'function' &&\n\t\ttypeof (component as { getContextProviders?: unknown }).getContextProviders === 'function' &&\n\t\ttypeof (component as { getHydrationBindings?: unknown }).getHydrationBindings === 'function' &&\n\t\ttypeof (component as { getReactiveProperties?: unknown }).getReactiveProperties === 'function' &&\n\t\ttypeof (component as { getSlotProjectionScriptTag?: unknown }).getSlotProjectionScriptTag === 'function' &&\n\t\ttypeof (component as { resolveTrackedRenderOutput?: unknown }).resolveTrackedRenderOutput === 'function' &&\n\t\ttypeof (component as { renderViewToString?: unknown }).renderViewToString === 'function'\n\t);\n}\n"
6
+ ],
7
+ "mappings": "2PA2BO,SAAS,CAAkC,CAAC,EAAuD,CACzG,GAAI,EAAyB,CAAS,EACrC,OAAO,EAGR,OAGM,SAAS,CAAwB,CAAC,EAAwD,CAChG,OACC,OAAO,EAAU,cAAgB,YACjC,OAAQ,EAAyC,eAAiB,YAClE,OAAQ,EAA8C,oBAAsB,YAC5E,OAAQ,EAA6D,mCACpE,YACD,OAAQ,EAAgD,sBAAwB,YAChF,OAAQ,EAAiD,uBAAyB,YAClF,OAAQ,EAAkD,wBAA0B,YACpF,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAAuD,6BAA+B,YAC9F,OAAQ,EAA+C,qBAAuB",
8
+ "debugId": "DE2A04B3C3EC62F264756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,18 @@
1
+ import type { JsxRenderable } from '@ecopages/jsx';
2
+ import { type RenderToStringOptions } from '@ecopages/jsx/server';
3
+ import type { InternalRadiantSsrHost } from './radiant-element-ssr-host';
4
+ export type RadiantElementRenderBridge = {
5
+ renderHost?: () => JsxRenderable;
6
+ renderHostToString?: (options?: RenderToStringOptions) => string;
7
+ };
8
+ export type RadiantElementServerRenderSsrCapable = InternalRadiantSsrHost;
9
+ export type RadiantElementTrackedRenderSsrCapable = InternalRadiantSsrHost;
10
+ export type RadiantElementSsrRuntime = {
11
+ getHostAttributes(component: InternalRadiantSsrHost): Record<string, string>;
12
+ renderHost(component: InternalRadiantSsrHost): JsxRenderable;
13
+ renderHostToString(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;
14
+ resolveRenderBridge(component: object): RadiantElementRenderBridge | undefined;
15
+ renderView(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;
16
+ };
17
+ export declare function getRadiantElementSsrRuntime(): RadiantElementSsrRuntime | undefined;
18
+ export declare function withRadiantElementSsrRuntime<T>(runtime: RadiantElementSsrRuntime, render: () => T): T;
@@ -0,0 +1,3 @@
1
+ var y=((b)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(b,{get:(f,k)=>(typeof require<"u"?require:f)[k]}):b)(function(b){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+b+'" is not supported')});import{getActiveSsrScopeValue as q,withActiveSsrScopeValue as x}from"@ecopages/jsx/server";var j=Symbol.for("@ecopages/radiant.element-ssr-runtime");function F(){return q(j)}function G(b,f){return x(j,b,f)}export{G as withRadiantElementSsrRuntime,F as getRadiantElementSsrRuntime};
2
+
3
+ //# debugId=630847364737BB1364756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/radiant-element-ssr-registry.ts"],
4
+ "sourcesContent": [
5
+ "import type { JsxRenderable } from '@ecopages/jsx';\nimport { getActiveSsrScopeValue, type RenderToStringOptions, withActiveSsrScopeValue } from '@ecopages/jsx/server';\nimport type { InternalRadiantSsrHost } from './radiant-element-ssr-host';\n\nexport type RadiantElementRenderBridge = {\n\trenderHost?: () => JsxRenderable;\n\trenderHostToString?: (options?: RenderToStringOptions) => string;\n};\n\nexport type RadiantElementServerRenderSsrCapable = InternalRadiantSsrHost;\n\nexport type RadiantElementTrackedRenderSsrCapable = InternalRadiantSsrHost;\n\nexport type RadiantElementSsrRuntime = {\n\tgetHostAttributes(component: InternalRadiantSsrHost): Record<string, string>;\n\trenderHost(component: InternalRadiantSsrHost): JsxRenderable;\n\trenderHostToString(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;\n\tresolveRenderBridge(component: object): RadiantElementRenderBridge | undefined;\n\trenderView(component: InternalRadiantSsrHost, options?: RenderToStringOptions): string;\n};\n\nconst RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL = Symbol.for('@ecopages/radiant.element-ssr-runtime');\n\nexport function getRadiantElementSsrRuntime(): RadiantElementSsrRuntime | undefined {\n\treturn getActiveSsrScopeValue<RadiantElementSsrRuntime>(RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL);\n}\n\nexport function withRadiantElementSsrRuntime<T>(runtime: RadiantElementSsrRuntime, render: () => T): T {\n\treturn withActiveSsrScopeValue(RADIANT_ELEMENT_SSR_RUNTIME_SYMBOL, runtime, render);\n}\n"
6
+ ],
7
+ "mappings": "2PACA,iCAAS,6BAAoD,6BAoB7D,IAAM,EAAqC,OAAO,IAAI,uCAAuC,EAEtF,SAAS,CAA2B,EAAyC,CACnF,OAAO,EAAiD,CAAkC,EAGpF,SAAS,CAA+B,CAAC,EAAmC,EAAoB,CACtG,OAAO,EAAwB,EAAoC,EAAS,CAAM",
8
+ "debugId": "630847364737BB1364756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,15 +1,17 @@
1
1
  import type { EventEmitter } from '../tools';
2
2
  import { type JsxRenderable, type SubscribableJsxValue } from '@ecopages/jsx';
3
3
  import type { RenderToStringOptions } from '@ecopages/jsx/server';
4
+ import { type ReactivePropDefinition } from './reactive-prop-metadata';
4
5
  import type { SsrSerializableContextProvider } from '../context/context-provider';
5
6
  import type { UnknownContext } from '../context/types';
7
+ import { type ReactiveBindingOption, type ReactiveBindingValue, type ReactiveBindings, type ReactiveFieldOptions, type ReactiveProperty, type ReactivePropertyOptions } from './reactive-prop-core';
6
8
  import type { SsrSerializableHydrationBinding } from './ssr-hydration-binding';
7
- import { type RadiantElementRenderBridge } from './radiant-component-ssr-registry';
8
- import { type AttributeTypeConstant, type ReadAttributeValueReturnType, type WriteAttributeValueReturnType } from '../utils/attribute-utils';
9
+ export type { ReactiveBindingOption, ReactiveBindingValue, ReactiveBindings, ReactiveField, ReactiveFieldOptions, ReactiveProperty, ReactivePropertyOptions, } from './reactive-prop-core';
9
10
  declare const RadiantElementBase: {
10
11
  new (): HTMLElement;
11
12
  prototype: HTMLElement;
12
13
  };
14
+ type RadiantRenderTarget = HTMLElement | ShadowRoot;
13
15
  /**
14
16
  * Possible positions to insert a rendered template.
15
17
  */
@@ -23,79 +25,7 @@ export type RadiantElementEventListener = {
23
25
  listener: EventListener;
24
26
  options?: AddEventListenerOptions;
25
27
  };
26
- /**
27
- * Represents a property metadata object.
28
- */
29
- export interface ReactiveProperty<T = unknown> {
30
- type: AttributeTypeConstant;
31
- value?: T;
32
- initialValue?: T;
33
- name: string;
34
- attribute: string;
35
- converter: {
36
- fromAttribute: (value: string) => ReadAttributeValueReturnType;
37
- toAttribute: (value: any) => WriteAttributeValueReturnType;
38
- };
39
- }
40
- /**
41
- * Represents the options for a reactive property.
42
- */
43
- export type ReactivePropertyOptions<T> = {
44
- type: AttributeTypeConstant;
45
- reflect?: boolean;
46
- attribute?: string;
47
- defaultValue?: T;
48
- /**
49
- * Exposes a JSX binding companion for the reactive property.
50
- *
51
- * - `true` creates a `$propertyName` accessor.
52
- * - a string creates a custom accessor with that name.
53
- * - `undefined` defers to the host default.
54
- *
55
- * The generated accessor returns a subscribable JSX child value so JSX can
56
- * patch only the affected child part when the property changes.
57
- */
58
- bind?: boolean | string;
59
- };
60
- export type ReactiveBindingOption = boolean | string;
61
- export type ReactiveFieldOptions = {
62
- /**
63
- * Exposes a JSX binding companion for the reactive field.
64
- *
65
- * - `true` creates a `$fieldName` accessor.
66
- * - a string creates a custom accessor with that name.
67
- * - `undefined` defers to the host default.
68
- */
69
- bind?: ReactiveBindingOption;
70
- };
71
- export type ReactiveField<T = unknown> = {
72
- name: string;
73
- value: T;
74
- initialValue: T;
75
- };
76
28
  type StringPropertyKey<Value> = Extract<keyof Value, string>;
77
- /**
78
- * Value type produced by a JSX binding for a selected reactive member.
79
- *
80
- * Bindings preserve the original property type when it is already renderable by
81
- * the Ecopages JSX runtime. For non-renderable values, the binding falls back
82
- * to the broader `JsxRenderable` contract consumed by the renderer.
83
- */
84
- export type ReactiveBindingValue<Host extends object, Property extends StringPropertyKey<Host>> = Host[Property] extends JsxRenderable ? Host[Property] : JsxRenderable;
85
- /**
86
- * Namespace of cached JSX bindings keyed by the explicit bindable shape.
87
- *
88
- * Radiant exposes this namespace twice on every host:
89
- *
90
- * - `host.bindings.key` for the explicit form
91
- * - `host.$.key` for the short form
92
- *
93
- * Both aliases resolve through the same cached binding objects as
94
- * `host.bind('key')`.
95
- */
96
- export type ReactiveBindings<Bindings extends object> = {
97
- readonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
98
- };
99
29
  /**
100
30
  * Represents an interface for a Radiant element.
101
31
  * @typeParam Bindings - Explicit internal bindable shape used to type `bind()` and `getReactiveBinding()`.
@@ -130,7 +60,7 @@ export interface IRadiantElement<Bindings extends object = {}> {
130
60
  *
131
61
  * @returns A cleanup function that unregisters the callback.
132
62
  */
133
- registerUpdateCallback(property: string, update: (...rest: any[]) => any): () => void;
63
+ registerUpdateCallback(property: string, update: () => void): () => void;
134
64
  /**
135
65
  * Returns a subscribable JSX child binding for a reactive property or field.
136
66
  *
@@ -226,25 +156,23 @@ export interface IRadiantElement<Bindings extends object = {}> {
226
156
  * @implements IRadiantElement<Bindings>
227
157
  */
228
158
  export declare class RadiantElement<Bindings extends object = {}> extends RadiantElementBase implements IRadiantElement<Bindings> {
159
+ /**
160
+ * Controls where the JSX render lifecycle mounts the component view.
161
+ *
162
+ * Subclasses can override this with `'shadow'` to force an internal open
163
+ * shadow root for client-side rendering. Host SSR helpers remain light-DOM
164
+ * only and throw when shadow render mode is enabled.
165
+ */
166
+ protected readonly renderRootMode: 'light' | 'shadow';
229
167
  readonly bindings: ReactiveBindings<Bindings>;
230
168
  readonly $: ReactiveBindings<Bindings>;
231
169
  private readonly reactiveHost;
170
+ private readonly reactivePropertyState;
171
+ private readonly eventSubscriptionRegistry;
232
172
  /**
233
- * A map of property metadata objects, it contains useful information about the properties configured via decorators.
234
- */
235
- private reactiveProperties;
236
- /**
237
- * Registered context providers keyed by decorated property name.
173
+ * Registered context providers and hydration bindings for SSR.
238
174
  */
239
- private contextProviders;
240
- /**
241
- * Registered keyed hydration payload producers appended to SSR host output.
242
- */
243
- private hydrationBindings;
244
- /**
245
- * A map of event subscriptions used to manage event listeners on the Radiant element.
246
- */
247
- private eventSubscriptions;
175
+ private readonly hostSsrRegistry;
248
176
  /**
249
177
  * A map for event emitters
250
178
  */
@@ -253,37 +181,15 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
253
181
  * A flag indicating whether the element has been connected to the DOM.
254
182
  */
255
183
  private elementReady;
256
- private isRendering;
257
184
  private isFirstConnectPending;
258
- private isRenderScheduled;
259
- private needsRender;
260
- /**
261
- * Snapshot of own-property values that existed before Radiant installs the
262
- * reactive accessors for declared props.
263
- *
264
- * "Pre-upgrade" refers to the custom-element upgrade window where user code,
265
- * SSR boot code, or another framework assigns `element.someProp = value`
266
- * before the browser has finished constructing the final custom-element class
267
- * instance with its accessors in place.
268
- *
269
- * Those early assignments land as plain own properties on the element. If we
270
- * define a reactive accessor later without first capturing them, the accessor
271
- * would either miss the assigned value or remain shadowed by the own property.
272
- * `createReactiveProp()` consumes this snapshot so the early value becomes the
273
- * prop's initial reactive state.
274
- */
275
- private readonly preUpgradePropertyValues;
276
- private projectedSlotContent;
277
- private renderSignal?;
278
- private readonly renderWatcher;
279
- private slotProjectionObserver?;
280
- private slotProjectionVersion;
185
+ private readonly renderScheduler;
186
+ private renderRuntime?;
281
187
  constructor();
188
+ get slotProjectionVersion(): number;
282
189
  connectedCallback(): void;
283
190
  connectedContextCallback(_contextName: UnknownContext): void;
284
191
  disconnectedCallback(): void;
285
192
  notifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;
286
- private transformAttributeValue;
287
193
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
288
194
  /**
289
195
  * Renders a trusted HTML template string into the specified target element.
@@ -300,19 +206,19 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
300
206
  sanitize?: (html: string) => string;
301
207
  }): void;
302
208
  render(): JsxRenderable;
303
- renderToString(options?: RenderToStringOptions): string;
304
- renderHost(): JsxRenderable;
305
- renderHostToString(options?: RenderToStringOptions): string;
209
+ getReactivePropDefinitions(): ReactivePropDefinition[];
210
+ getPropertyValue(name: string): unknown;
211
+ renderViewToString(options?: RenderToStringOptions): string;
306
212
  hydrate(): void;
307
213
  requestUpdate(): void;
308
214
  update(): void;
309
215
  registerReactiveProperty(config: ReactiveProperty): void;
310
- protected getReactiveProperties(): ReactiveProperty[];
216
+ getReactiveProperties(): ReactiveProperty[];
311
217
  registerReactiveDependencyReader(property: string, read: () => unknown): void;
312
218
  registerContextProvider(name: string, provider: SsrSerializableContextProvider): void;
313
219
  registerHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void;
314
- protected getContextProviders(): SsrSerializableContextProvider[];
315
- protected getHydrationBindings(): SsrSerializableHydrationBinding[];
220
+ getContextProviders(): SsrSerializableContextProvider[];
221
+ getHydrationBindings(): SsrSerializableHydrationBinding[];
316
222
  /**
317
223
  * Flushes any deferred SSR-only preparation work before the host is
318
224
  * serialized.
@@ -333,17 +239,16 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
333
239
  */
334
240
  protected shouldAutoBindReactiveMembers(): boolean;
335
241
  protected shouldRunRenderLifecycle(): boolean;
336
- protected getHostSsrAttributes(): Record<string, string>;
337
- protected resolveSsrRenderBridge(): RadiantElementRenderBridge;
338
- registerUpdateCallback(property: string, update: (...rest: any[]) => any): () => void;
242
+ /** Returns the DOM root used by client-side render and hydrate work. */
243
+ protected getRenderTarget(): RadiantRenderTarget;
244
+ registerUpdateCallback(property: string, update: () => void): () => void;
339
245
  getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
340
246
  bind<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
341
247
  defineReactiveBinding(property: string, bind?: ReactiveBindingOption): void;
342
248
  trackReactiveRead(property: string): void;
343
249
  subscribeEvents(events: RadiantElementEventListener[]): Array<() => void>;
250
+ hasEventSubscription(subscriptionId: string): boolean;
344
251
  subscribeEvent(eventConfig: RadiantElementEventListener): () => void;
345
- private unsubscribeEvent;
346
- private removeAllSubscribedEvents;
347
252
  /**
348
253
  * Registers a callback that runs on every future disconnect.
349
254
  */
@@ -370,17 +275,12 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
370
275
  * writes survive into the reactive lifecycle.
371
276
  */
372
277
  createReactiveProp<T = unknown>(propertyName: string, options: ReactivePropertyOptions<T>): void;
373
- private ensureSlotProjectionState;
374
- private getHostChildNodeCount;
375
- private getSlotProjectionScriptTag;
376
- private getAuthoredHydrationScriptMarkup;
377
- private handleSlotProjectionMutations;
378
- private addProjectedSlotNode;
379
- private removeProjectedSlotNode;
380
- private observeSlotProjection;
381
- private disconnectSlotProjectionObserver;
382
- private disconnectRenderWatcher;
383
- private resolveTrackedRenderOutput;
384
- private resolveRenderOutput;
278
+ getSlotProjectionScriptTag(): string | undefined;
279
+ getAuthoredHydrationScriptMarkup(): string | undefined;
280
+ resolveTrackedRenderOutput(): {
281
+ containsSlots: boolean;
282
+ value: JsxRenderable;
283
+ };
284
+ private getOrCreateRenderRuntime;
285
+ private resolveRenderSurface;
385
286
  }
386
- export {};
@@ -1,3 +1,3 @@
1
- var T0=((Q)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(Q,{get:($,W)=>(typeof require<"u"?require:$)[W]}):Q)(function(Q){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+Q+'" is not supported')});var D=Symbol.for("@ecopages/radiant.legacy-instance-initializers");function f0(Q,$){let X=Q[D];if(Array.isArray(X)){X.push($);return}Object.defineProperty(Q,D,{value:[$],configurable:!0})}function _(Q){let $=[],W=Object.getPrototypeOf(Q);while(W&&W!==Object.prototype)$.push(W),W=Object.getPrototypeOf(W);for(let X=$.length-1;X>=0;X-=1){let q=$[X][D];if(!Array.isArray(q))continue;for(let Z of q)Z(Q)}}import{createSubscribableJsxValue as W0}from"@ecopages/jsx";import{trackDependency as C}from"@ecopages/signals";class I{read;subscribers=new Set;watcherListeners=new Set;version=0;constructor(Q){this.read=Q}get(){return C(this),this.read()}subscribe(Q){return this.subscribers.add(Q),()=>{this.subscribers.delete(Q)}}addWatcher(Q){return this.watcherListeners.add(Q),()=>{this.watcherListeners.delete(Q)}}getVersion(){return this.version}notify(Q){this.version+=1;let $;try{this.notifyWatchers()}catch(W){$=W}if(this.publish(Q),$)throw $}publish(Q){for(let $ of this.subscribers)$(Q)}notifyWatchers(){let Q=[];for(let $ of this.watcherListeners)try{$()}catch(W){Q.push(W)}if(Q.length===1)throw Q[0];if(Q.length>1)throw AggregateError(Q,"Multiple reactive dependency notifications failed.")}}function X0(Q){return typeof Q==="object"&&Q!==null&&typeof Q.get==="function"}class w{host;access;shouldAutoBind;bindings;$;reactiveFields=new Map;reactiveDependencies=new Map;reactiveDependencyReaders=new Map;reactiveBindings=new Map;updateCallbacks=new Map;onConnectedCallbacks=[];onDisconnectedCallback=[];constructor(Q,$,W){this.host=Q;this.access=$;this.shouldAutoBind=W;let X=this.createReactiveBindingNamespace();this.bindings=X,this.$=X}connectHost(){for(let Q of this.onConnectedCallbacks)Q()}disconnectHost(){for(let Q of this.onDisconnectedCallback)Q()}notifyUpdate(Q,$,W){if($===W)return;this.reactiveDependencies.get(Q)?.notify(W);let X=this.updateCallbacks.get(Q);if(X)for(let q of X)q()}registerCleanupCallback(Q){this.onDisconnectedCallback.push(Q)}registerConnectedCallback(Q){this.onConnectedCallbacks.push(Q)}registerHydrationBinding(Q,$){}registerReactiveDependencyReader(Q,$){this.reactiveDependencyReaders.set(Q,$)}registerUpdateCallback(Q,$){if(!this.updateCallbacks.has(Q))this.updateCallbacks.set(Q,new Set);let W=this.updateCallbacks.get(Q);return W.add($),()=>{if(W.delete($),W.size===0)this.updateCallbacks.delete(Q)}}getReactiveBinding(Q){let $=this.reactiveBindings.get(Q);if($)return $;let W=W0({getValue:()=>this.readReactiveBindingValue(Q),subscribe:(X)=>this.registerUpdateCallback(Q,()=>{X(this.readReactiveBindingValue(Q))})});return this.reactiveBindings.set(Q,W),W}bind(Q){return this.getReactiveBinding(Q)}defineReactiveBinding(Q,$=!0){let W=typeof $==="string"?$:$?`$${Q}`:void 0,X=this.access.getBindingTarget?.(this.host)??this.host;if(!W||this.access.hasProperty(this.host,W))return;this.access.defineProperty(X,W,{get:()=>this.getReactiveBinding(Q),enumerable:!1,configurable:!0})}trackReactiveRead(Q){C(this.getReactiveDependency(Q))}defineReactiveAccessor(Q,$){let W=$.bind??this.shouldAutoBind();if(this.defineReactiveBinding(Q,W),this.registerReactiveDependencyReader(Q,$.getValue),this.access.defineProperty(this.host,Q,{get:()=>{return this.trackReactiveRead(Q),$.getValue()},set:(X)=>{let q=$.getValue();if(q===X)return;$.setValue(X),this.notifyUpdate(Q,q,X)},enumerable:!0,configurable:!0}),$.notifyInitialValue!==void 0)this.notifyUpdate(Q,void 0,$.notifyInitialValue)}createReactiveField(Q,$,W={}){let X={name:Q,value:$,initialValue:$};this.reactiveFields.set(Q,X),this.defineReactiveAccessor(Q,{bind:W.bind,getValue:()=>this.reactiveFields.get(Q)?.value,setValue:(q)=>{this.reactiveFields.set(Q,{...X,value:q})},notifyInitialValue:$})}createReactiveBindingNamespace(){return new Proxy(Object.create(null),{get:(Q,$)=>{if(typeof $!=="string")return;return this.getReactiveBinding($)}})}getReactiveDependency(Q){let $=this.reactiveDependencies.get(Q);if($)return $;let W=new I(()=>this.readReactiveDependencyValue(Q));return this.reactiveDependencies.set(Q,W),W}readReactiveDependencyValue(Q){let $=this.reactiveDependencyReaders.get(Q);if($)return $();return this.readReactiveBindingValue(Q)}readReactiveBindingValue(Q){let $=this.access.readProperty(this.host,Q);if(X0($))return $.get();return $}}var L=Symbol.for("@ecopages/radiant.ssr-preparation-callbacks"),A=Symbol.for("@ecopages/radiant.ssr-preparation-running");function m0(Q,$){let X=Q[L];if(Array.isArray(X)){X.push($);return}Object.defineProperty(Q,L,{value:[$],configurable:!0})}function S(Q){let $=Q,W=$[L];if(!Array.isArray(W))return;$[A]=!0;try{for(let X of W)X()}finally{delete $[A]}}function R(Q){return Q.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var F="data-hydration",h="data-hydration-type",O="data-hydration-key";function s0(Q){let $=Q.hydrationKey?` ${O}="${q0(Q.hydrationKey)}"`:"";return`<script type="application/json" ${F} ${h}="${Q.type}"${$}>${Q.serializedValue}</script>`}function u0(Q){return R(Q)}function d0(Q,$){let W=Q.textContent;if(!W)return $;try{return JSON.parse(W)}catch{if(typeof console<"u")console.warn(`[@ecopages/radiant] Failed to parse hydration payload from <script ${F}>:`,W.slice(0,120));return $}}function i0(Q,$,W){let X=Q.children;if(!X||X.length===0){let q=Q.childNodes;if(!q||q.length===0)return null;for(let Z=0;Z<q.length;Z+=1){let G=q[Z];if(G.nodeType!==1)continue;let M=G;if(T(M,$,W))return M}return null}for(let q=0;q<X.length;q+=1)if(T(X[q],$,W))return X[q];return null}function T(Q,$,W){if(Q.tagName!=="SCRIPT"||!Q.hasAttribute(F)||Q.getAttribute(h)!==$)return!1;if(W!==void 0)return Q.getAttribute(O)===W;return!Q.hasAttribute(O)}function q0(Q){return Q.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as Z0,isKeyedJsxValue as f,isSlotJsxValue as G0}from"@ecopages/jsx";var z="",H="data-radiant-slot-projection";function g(Q){let $=new Map;for(let W of Array.from(Q.childNodes)){if(z0(W))continue;J0($,M0(W),W)}return $}function N(Q){let $;try{$=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 W=new Map;for(let[X,q]of Object.entries($)){if(!Array.isArray(q)||q.length===0)continue;W.set(P(X),q.map((Z)=>Z0(Z)))}return W}function V(Q){let $=Array.from(Q.childNodes).filter((W)=>s(W)).map((W)=>B(W)??"").filter((W)=>W!=="");return $.length>0?$.join(""):void 0}function v(Q){let $={};for(let[W,X]of Q.entries()){let q=X.map((Z)=>B(Z)).filter((Z)=>Z!==void 0&&Z!=="");if(q.length>0)$[W]=q}return Object.keys($).length>0?JSON.stringify($):void 0}function m(Q,$){let W=!1,X=(Z)=>{if(G0(Z))return W=!0,B0(Z,$,X);if(f(Z))return F0(Z,X(Z.value));if(U0(Z))return{_$rType$:1,rootLocalName:Z.rootLocalName,strings:Z.strings,values:Z.values.map((G)=>X(G))};if(c(Z))return Array.from(Z,(G)=>X(G));return Z},q=X(Q);return{containsSlots:W,value:q}}function b(Q){for(let $ of Array.from(Q.childNodes)){if(!y($))continue;let W=$.textContent??void 0;return $.parentNode?.removeChild($),W}return}function J0(Q,$,W){let X=Q.get($);if(X){X.push(W);return}Q.set($,[W])}function F0(Q,$){return{...Q,value:$}}function M0(Q){if(Q instanceof Element)return P(Q.getAttribute("slot"));return z}function c(Q){return typeof Q!=="string"&&typeof Q==="object"&&Q!==null&&Symbol.iterator in Q}function y(Q){return Q instanceof HTMLScriptElement&&Q.hasAttribute(H)}function s(Q){return Q instanceof HTMLScriptElement&&Q.hasAttribute(F)}function z0(Q){return y(Q)||s(Q)}function U0(Q){return typeof Q==="object"&&Q!==null&&Q._$rType$===1&&Array.isArray(Q.strings)&&Array.isArray(Q.values)}function P(Q){return Q??z}function B(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(f(Q))return B(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(c(Q))return Array.from(Q,($)=>B($)??"").join("");return}function B0(Q,$,W){let X=$.get(P(Q.name));if(X&&X.length>0)return X.length===1?X[0]:X;if(Q.fallback===void 0)return"";return W(Q.fallback)}var E=Symbol.for("@ecopages/radiant.hydrator-installed");function a0(){globalThis[E]=!0}function r0(){delete globalThis[E]}function u(){return globalThis[E]===!0}var d=Symbol.for("@ecopages/radiant.component-ssr-runtime");function i(){return globalThis[d]}function e0(Q){globalThis[d]=Q}function o(Q){switch(Q){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function H0(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 Y0(Q){switch(Q){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function K0(Q){try{return JSON.parse(Q)}catch{throw TypeError("Invalid JSON string")}}var j0={array(Q){let $=K0(Q);if(!Array.isArray($))throw TypeError(`Expected an array but got a value of type "${typeof $}"`);return $},boolean(Q){return!(Q==="0"||String(Q).toLowerCase()==="false")},number(Q){return Number(Q.replace(/_/g,""))},object(Q){let $=JSON.parse(Q);if($===null||typeof $!=="object"||Array.isArray($))throw TypeError(`expected value of type "object" but instead got value "${Q}" of type "${H0($)}"`);return $},string(Q){return Q}},p={default:n,array:l,object:l};function l(Q){return JSON.stringify(Q)}function n(Q){return`${Q}`}function Y(Q,$){let W=o($);if(!W)throw TypeError(`[radiant-element] Unknown type "${$}"`);return j0[W](Q)}function a(Q,$){let W=o($);if(!W)throw TypeError(`[radiant-element] Unknown type "${$}"`);return(p[W]??p.default??n)(Q)}function x0(Q){return typeof Q==="boolean"}function D0(Q){return typeof Q==="number"}function w0(Q){return typeof Q==="string"}function L0(Q){return Array.isArray(Q)}function O0(Q){return typeof Q==="object"&&!Array.isArray(Q)&&Q!==null}function r(Q,$){switch(Q){case Boolean:return x0($);case Number:return D0($);case String:return w0($);case Array:return L0($);case Object:return O0($);default:return!1}}var t=(Q,$,W,X)=>{if($===Boolean){let Z=Q.getAttribute(W);if(Z===null)return X;return Z===""?!0:Y(Z,$)}let q=Q.getAttribute(W);return q!==null?Y(q,$):X??Y0($)};import{hasHydrationMarkers as P0,hydrate as E0,jsx as k0,render as _0}from"@ecopages/jsx";import{Computed as C0,subtle as I0}from"@ecopages/signals";var A0=S0();function S0(){if(typeof HTMLElement<"u")return HTMLElement;throw Error("RadiantElement requires HTMLElement. Install '@ecopages/radiant/server/light-dom-shim' before importing Radiant components in SSR.")}class j extends A0{bindings;$;reactiveHost;reactiveProperties=new Map;contextProviders=new Map;hydrationBindings=new Map;eventSubscriptions=new Map;eventEmitters=new Map;elementReady=!1;isRendering=!1;isFirstConnectPending=!1;isRenderScheduled=!1;needsRender=!1;preUpgradePropertyValues=new Map;projectedSlotContent=new Map;renderSignal;renderWatcher=new I0.Watcher(()=>{this.requestUpdate()});slotProjectionObserver;slotProjectionVersion=0;constructor(){super();for(let Q of Object.getOwnPropertyNames(this))this.preUpgradePropertyValues.set(Q,this[Q]);this.reactiveHost=new w(this,{defineProperty:(Q,$,W)=>Object.defineProperty(Q,$,W),getBindingTarget:(Q)=>Object.getPrototypeOf(Q)??Q,hasProperty:(Q,$)=>($ in Q),readProperty:(Q,$)=>Q[$]},()=>this.shouldAutoBindReactiveMembers()),this.bindings=this.reactiveHost.bindings,this.$=this.reactiveHost.$,_(this)}connectedCallback(){let Q=this.isFirstConnectPending;if(this.elementReady=!0,this.reactiveHost.connectHost(),Q)return;this.isFirstConnectPending=!0,queueMicrotask(()=>{if(this.isFirstConnectPending=!1,!this.isConnected)return;if(!this.shouldRunRenderLifecycle())return;if(this.ensureSlotProjectionState(),this.observeSlotProjection(),e(this)){if(this.needsRender=!1,this.hydrate(),this.needsRender)this.update();return}this.update()})}connectedContextCallback(Q){}disconnectedCallback(){this.disconnectSlotProjectionObserver(),this.disconnectRenderWatcher(),this.removeAllSubscribedEvents(),this.reactiveHost.disconnectHost()}notifyUpdate(Q,$,W){this.reactiveHost.notifyUpdate(Q,$,W)}transformAttributeValue(Q,$){return Q!==null?$?.converter.fromAttribute(Q):Q}attributeChangedCallback(Q,$,W){if($===W||!this.elementReady)return;if(this.reactiveProperties.has(Q)){let X=this.reactiveProperties.get(Q),q=this.transformAttributeValue(W,X),Z=this.transformAttributeValue($,X),G=X?X.attribute:Q;this[G]=q,this.notifyUpdate(Q,Z,q)}}renderTemplate({target:Q=this,template:$,insert:W="replace",sanitize:X}){let q=X?X($):$;switch(W){case"replace":Q.innerHTML=q;break;case"beforeend":Q.insertAdjacentHTML("beforeend",q);break;case"afterbegin":Q.insertAdjacentHTML("afterbegin",q);break;case"beforebegin":Q.insertAdjacentHTML("beforebegin",q);break;case"afterend":Q.insertAdjacentHTML("afterend",q);break}}render(){return k0("slot",{})}renderToString(Q={}){if(!this.shouldRunRenderLifecycle())return this.innerHTML;return this.prepareForSsr(),K().renderView(this,Q)}renderHost(){return K().renderHost(this)}renderHostToString(Q={}){return K().renderHostToString(this,Q)}hydrate(){if(!this.shouldRunRenderLifecycle()||!this.isConnected||this.isRendering)return;this.isRendering=!0,this.disconnectSlotProjectionObserver();try{E0(this.resolveTrackedRenderOutput().value,this)}finally{this.isRendering=!1,this.observeSlotProjection()}}requestUpdate(){if(!this.shouldRunRenderLifecycle())return;if(this.needsRender=!0,this.isRenderScheduled)return;this.isRenderScheduled=!0,queueMicrotask(()=>{if(this.isRenderScheduled=!1,!this.needsRender)return;this.update()})}update(){if(!this.shouldRunRenderLifecycle())return;if(this.needsRender=!0,!this.isConnected||this.isRendering)return;if(this.isFirstConnectPending&&e(this))return;while(this.needsRender&&this.isConnected){this.needsRender=!1,this.isRendering=!0,this.disconnectSlotProjectionObserver();try{_0(this.resolveTrackedRenderOutput().value,this)}finally{this.isRendering=!1,this.observeSlotProjection()}}}registerReactiveProperty(Q){this.reactiveProperties.set(Q.name,Q)}getReactiveProperties(){return Array.from(this.reactiveProperties.values())}registerReactiveDependencyReader(Q,$){this.reactiveHost.registerReactiveDependencyReader(Q,$)}registerContextProvider(Q,$){this.contextProviders.set(Q,$),this.registerHydrationBinding(Q,$)}registerHydrationBinding(Q,$){this.hydrationBindings.set(Q,$)}getContextProviders(){return Array.from(this.contextProviders.values())}getHydrationBindings(){return Array.from(this.hydrationBindings.values())}prepareForSsr(){S(this)}shouldAutoBindReactiveMembers(){return!0}shouldRunRenderLifecycle(){return this.render!==j.prototype.render}getHostSsrAttributes(){return K().getHostAttributes(this)}resolveSsrRenderBridge(){let Q={};if(this.renderHostToString===j.prototype.renderHostToString)Q.renderHostToString=($)=>this.renderHostToString($);if(this.renderHost===j.prototype.renderHost)Q.renderHost=()=>this.renderHost();return Q}registerUpdateCallback(Q,$){return this.reactiveHost.registerUpdateCallback(Q,$)}getReactiveBinding(Q){return this.reactiveHost.getReactiveBinding(Q)}bind(Q){return this.reactiveHost.bind(Q)}defineReactiveBinding(Q,$=!0){this.reactiveHost.defineReactiveBinding(Q,$)}trackReactiveRead(Q){this.reactiveHost.trackReactiveRead(Q)}subscribeEvents(Q){let $=[];for(let W of Q)$.push(this.subscribeEvent(W));return $}subscribeEvent(Q){let $=(X)=>{if(X.target&&X.target.matches(Q.selector))Q.listener.call(this,X)},W=`${Q.type}:${Q.selector}`;return this.addEventListener(Q.type,$,Q.options),this.eventSubscriptions.set(W,{...Q,listener:$}),this.unsubscribeEvent.bind(this,W)}unsubscribeEvent(Q){let $=this.eventSubscriptions.get(Q);if($)this.removeEventListener($.type,$.listener,$.options),this.eventSubscriptions.delete(Q)}removeAllSubscribedEvents(){for(let Q of this.eventSubscriptions.values())this.removeEventListener(Q.type,Q.listener,Q.options);this.eventSubscriptions.clear()}registerCleanupCallback(Q){this.reactiveHost.registerCleanupCallback(Q)}registerConnectedCallback(Q){this.reactiveHost.registerConnectedCallback(Q)}registerEventEmitter(Q,$){this.eventEmitters.set(Q,$)}getRef(Q,$=!1){let W=`[data-ref="${Q}"]`;if($)return Array.from(this.querySelectorAll(W));return this.querySelector(W)??null}getSlotElement(Q){return this.getSlotElements(Q)[0]??null}getSlotElements(Q){return this.ensureSlotProjectionState(),(this.projectedSlotContent.get(Q??z)??[]).filter(($)=>typeof Node<"u"&&$ instanceof Element)}createReactiveField(Q,$,W={}){this.reactiveHost.createReactiveField(Q,$,W)}createReactiveProp(Q,$){let{type:W,attribute:X,reflect:q,defaultValue:Z}=$,G=X??Q,M=this.preUpgradePropertyValues.has(Q),Q0=M?this.preUpgradePropertyValues.get(Q):void 0;if(Z!==void 0&&!r(W,Z))throw Error(`defaultValue does not match the expected type for ${W.name}`);let U=M?Q0:t(this,W,G,Z);if(this.hasAttribute(G)&&(!q||U==null||U===""))this.removeAttribute(G);if(M&&Object.prototype.hasOwnProperty.call(this,Q))Reflect.deleteProperty(this,Q);let x={type:W,name:Q,value:U,initialValue:U,attribute:G,converter:{fromAttribute:(J)=>Y(J,W),toAttribute:(J)=>a(J,W)}};this.registerReactiveProperty(x);let k=(J)=>{if(q)if(J==null||J===""||J===!1)this.removeAttribute(G);else{let $0=x.converter.toAttribute(J);this.setAttribute(G,$0)}};if(this.reactiveHost.defineReactiveAccessor(Q,{bind:$.bind,getValue:()=>this.reactiveProperties.get(Q)?.value,setValue:(J)=>{this.reactiveProperties.set(Q,{...x,value:J}),k(J)}}),U!==void 0)queueMicrotask(()=>{let J=this.reactiveProperties.get(Q)?.value;if(J===void 0)return;k(J),this.notifyUpdate(Q,void 0,J)})}ensureSlotProjectionState(){if(this.projectedSlotContent.size>0)return;let Q=this.isConnected?b(this):void 0;if(typeof Q==="string"&&Q!==""){this.projectedSlotContent=N(Q),this.slotProjectionVersion+=1;return}if(this.getHostChildNodeCount()>0)this.projectedSlotContent=g(this),this.slotProjectionVersion+=1}getHostChildNodeCount(){return"childNodes"in this&&this.childNodes?this.childNodes.length:0}getSlotProjectionScriptTag(){this.ensureSlotProjectionState();let Q=v(this.projectedSlotContent);if(!Q)return;return`<script type="application/json" ${H}>${R0(Q)}</script>`}getAuthoredHydrationScriptMarkup(){let Q=V(this);if(Q)return Q;return}handleSlotProjectionMutations(Q){let $=!1;for(let W of Q){for(let X of Array.from(W.removedNodes))if(this.removeProjectedSlotNode(X))$=!0;for(let X of Array.from(W.addedNodes)){if(X.parentNode!==this)continue;if(this.addProjectedSlotNode(X))$=!0}}if($)this.slotProjectionVersion+=1,this.update()}addProjectedSlotNode(Q){if(Q instanceof HTMLScriptElement&&(Q.hasAttribute(H)||Q.hasAttribute(F)))return!1;let $=Q instanceof Element?Q.getAttribute("slot")??z:z,W=this.projectedSlotContent.get($);if(W){if(W.includes(Q))return!1;return W.push(Q),!0}return this.projectedSlotContent.set($,[Q]),!0}removeProjectedSlotNode(Q){for(let[$,W]of this.projectedSlotContent.entries()){let X=W.indexOf(Q);if(X===-1)continue;if(W.splice(X,1),W.length===0)this.projectedSlotContent.delete($);return!0}return!1}observeSlotProjection(){if(typeof MutationObserver>"u"||this.slotProjectionObserver||!this.isConnected)return;this.slotProjectionObserver=new MutationObserver((Q)=>this.handleSlotProjectionMutations(Q)),this.slotProjectionObserver.observe(this,{childList:!0})}disconnectSlotProjectionObserver(){this.slotProjectionObserver?.disconnect(),this.slotProjectionObserver=void 0}disconnectRenderWatcher(){if(!this.renderSignal)return;this.renderWatcher.unwatch(this.renderSignal),this.renderSignal=void 0}resolveTrackedRenderOutput(){let Q=new C0(()=>this.resolveRenderOutput()),$=Q.get();if(!this.isConnected)return $;if(this.renderSignal)this.renderWatcher.unwatch(this.renderSignal);return this.renderSignal=Q,this.renderWatcher.watch(Q),$}resolveRenderOutput(){return this.ensureSlotProjectionState(),m(this.render(),this.projectedSlotContent)}}function K(){let Q=i();if(!Q)throw Error("Radiant SSR runtime is unavailable. Import `@ecopages/radiant/server/render-component` before using instance SSR methods.");return Q}function e(Q){return u()&&P0(Q)}function R0(Q){return Q.replace(/</g,"\\u003c")}export{j as RadiantElement};
1
+ var X2=(($)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy($,{get:(Q,q)=>(typeof require<"u"?require:Q)[q]}):$)(function($){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+$+'" is not supported')});class K{contextProviders=new Map;hydrationBindings=new Map;registerContextProvider($,Q){this.contextProviders.set($,Q),this.hydrationBindings.set($,Q)}registerHydrationBinding($,Q){this.hydrationBindings.set($,Q)}getContextProviders(){return[...this.contextProviders.values()]}getHydrationBindings(){return[...this.hydrationBindings.values()]}}var O=Symbol.for("@ecopages/radiant.reactivePropDefinitions");function G2($,Q,q){let X=$.constructor,Z=X[O]??[];if(Z.some((W)=>W.name===Q))return;Z.push({name:Q,options:q}),X[O]=Z}function v($){return($.constructor[O]??[]).slice()}var g=Symbol.for("@ecopages/radiant.legacy-instance-initializers"),S=Symbol.for("@ecopages/radiant.legacy-post-construction-initializers"),O0=Symbol.for("@ecopages/radiant.legacy-executed-post-construction-initializers");function F2($,Q){b($,g,Q)}function J2($,Q){b($,S,Q)}function V($){f($,g)}function N($){let Q=$;f($,S,Q[O0]??=new Set)}function b($,Q,q){let X=$,Z=Object.prototype.hasOwnProperty.call(X,Q)?X[Q]:void 0;if(Array.isArray(Z)){Z.push(q);return}Object.defineProperty(X,Q,{value:[q]})}function f($,Q,q,X=Object.getPrototypeOf($)){if(!X||X===Object.prototype)return;f($,Q,q,Object.getPrototypeOf(X));let Z=X[Q];if(!Array.isArray(Z))return;for(let W of Z){if(q?.has(W))continue;W($),q?.add(W)}}function B($,Q){switch(Q){case"construct":V($);break;case"connect":case"ssr":N($);break}}class z{getInteractionTarget;getListenerContext;subscriptions=new Map;constructor($,Q){this.getInteractionTarget=$;this.getListenerContext=Q}subscribe($){let Q=this.getInteractionTarget(),q=this.getListenerContext(),X=(W)=>{if(W.target&&W.target.matches($.selector))$.listener.call(q,W)},Z=`${$.type}:${$.selector}`;return Q.addEventListener($.type,X,$.options),this.subscriptions.set(Z,{...$,listener:X,target:Q}),()=>{this.unsubscribe(Z)}}hasEventSubscription($){return this.subscriptions.has($)}removeAll(){for(let $ of this.subscriptions.values())$.target.removeEventListener($.type,$.listener,$.options);this.subscriptions.clear()}unsubscribe($){let Q=this.subscriptions.get($);if(Q)Q.target.removeEventListener(Q.type,Q.listener,Q.options),this.subscriptions.delete($)}}function c($){switch($){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function f0($){switch(typeof $){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}if(Array.isArray($))return"array";if(Object.prototype.toString.call($)==="[object Object]")return"object"}function z0($){switch($){case Number:return 0;case String:return"";case Boolean:return!1;default:return null}}function j0($){try{return JSON.parse($)}catch{throw TypeError("Invalid JSON string")}}var A0={array($){let Q=j0($);if(!Array.isArray(Q))throw TypeError(`Expected an array but got a value of type "${typeof Q}"`);return Q},boolean($){return!($==="0"||String($).toLowerCase()==="false")},number($){return Number($.replace(/_/g,""))},object($){let Q=JSON.parse($);if(Q===null||typeof Q!=="object"||Array.isArray(Q))throw TypeError(`expected value of type "object" but instead got value "${$}" of type "${f0(Q)}"`);return Q},string($){return $}},s={default:y,array:m,object:m};function m($){return JSON.stringify($)}function y($){return`${$}`}function x($,Q){let q=c(Q);if(!q)throw TypeError(`[radiant-element] Unknown type "${Q}"`);return A0[q]($)}function u($,Q){let q=c(Q);if(!q)throw TypeError(`[radiant-element] Unknown type "${Q}"`);return(s[q]??s.default??y)($)}function _0($){return typeof $==="boolean"}function C0($){return typeof $==="number"}function R0($){return typeof $==="string"}function k0($){return Array.isArray($)}function I0($){return typeof $==="object"&&!Array.isArray($)&&$!==null}function p($,Q){switch($){case Boolean:return _0(Q);case Number:return C0(Q);case String:return R0(Q);case Array:return k0(Q);case Object:return I0(Q);default:return!1}}var i=($,Q,q,X)=>{if(Q===Boolean){let W=$.getAttribute(q);if(W===null)return X;return W===""?!0:x(W,Q)}let Z=$.getAttribute(q);return Z!==null?x(Z,Q):X??z0(Q)};function d($,Q){if(Q!==void 0&&!p($,Q))throw Error(`defaultValue does not match the expected type for ${$.name}`)}function o($,Q,q,X){return{type:q,name:$,value:X,initialValue:X,attribute:Q,converter:{fromAttribute:(Z)=>x(Z,q),toAttribute:(Z)=>u(Z,q)}}}class j{host;properties=new Map;preUpgradePropertyValues=new Map;constructor($){this.host=$;for(let Q of Object.getOwnPropertyNames($))this.preUpgradePropertyValues.set(Q,Reflect.get($,Q))}register($){this.properties.set($.name,$)}getAll(){return Array.from(this.properties.values())}applyAttributeChange($,Q,q){let X=this.properties.get($);if(!X)return;let Z=this.transformAttributeValue(q,X),W=this.transformAttributeValue(Q,X);Reflect.set(this.host,X.attribute,Z),this.host.notifyUpdate($,W,Z)}create($,Q,q,X){let{type:Z,attribute:W,reflect:G,defaultValue:P}=Q,F=W??$,w=this.preUpgradePropertyValues.has($),K0=w?this.preUpgradePropertyValues.get($):void 0;d(Z,P);let E=w?K0:q(Z,F,P);if(this.host.hasAttribute(F)&&(!G||E==null||E===""))this.host.removeAttribute(F);if(w&&Object.prototype.hasOwnProperty.call(this.host,$))Reflect.deleteProperty(this.host,$);let H=o($,F,Z,E);if(this.register(H),X($,{bind:Q.bind,getValue:()=>this.properties.get($)?.value,setValue:(J)=>{this.properties.set($,{...H,value:J}),this.reflectValue(F,G,H,J)}}),E!==void 0)queueMicrotask(()=>{let J=this.properties.get($)?.value;if(J===void 0)return;this.reflectValue(F,G,H,J),this.host.notifyUpdate($,void 0,J)})}transformAttributeValue($,Q){return $!==null?Q.converter.fromAttribute($):$}reflectValue($,Q,q,X){if(!Q)return;if(X==null||X===""||X===!1){this.host.removeAttribute($);return}let Z=q.converter.toAttribute(X);this.host.setAttribute($,Z)}}import{Computed as h0,subtle as T0,trackDependency as v0}from"@ecopages/signals";function g0($){return $}function n($){return $}var l={trackDependency($){v0(g0($))},createComputed($){return new h0($)},createWatcher($){let Q=new T0.Watcher($);return{watch(q){Q.watch(n(q))},unwatch(q){Q.unwatch(n(q))}}}};var t=l;function D(){return t}function S0($){t=$}function A($){D().trackDependency($)}function r($){return D().createComputed($)}function a($){return D().createWatcher($)}function e($){return $.replace(/&/g,"\\u0026").replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}var M="data-hydration",Q0="data-hydration-type",_="data-hydration-key";function R2($){let Q=$.hydrationKey?` ${_}="${V0($.hydrationKey)}"`:"";return`<script type="application/json" ${M} ${Q0}="${$.type}"${Q}>${$.serializedValue}</script>`}function k2($){return e($)}function I2($,Q){let q=$.textContent;if(!q)return Q;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 Q}}function h2($,Q,q){let X=$.children;if(!X||X.length===0){let Z=$.childNodes;if(!Z||Z.length===0)return null;for(let W=0;W<Z.length;W+=1){let G=Z[W];if(G.nodeType!==1)continue;let P=G;if($0(P,Q,q))return P}return null}for(let Z=0;Z<X.length;Z+=1)if($0(X[Z],Q,q))return X[Z];return null}function $0($,Q,q){if($.tagName!=="SCRIPT"||!$.hasAttribute(M)||$.getAttribute(Q0)!==Q)return!1;if(q!==void 0)return $.getAttribute(_)===q;return!$.hasAttribute(_)}function V0($){return $.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as N0,isKeyedJsxValue as q0,isSlotJsxValue as b0}from"@ecopages/jsx";var U="",Y="data-radiant-slot-projection";function X0($){let Q=new Map;for(let q of Array.from($.childNodes)){if(y0(q))continue;s0(Q,c0(q),q)}return Q}function Z0($){let Q;try{Q=JSON.parse($)}catch{if(typeof console<"u")console.warn("[@ecopages/radiant] Failed to parse slot projection payload:",$.slice(0,120));return new Map}let q=new Map;for(let[X,Z]of Object.entries(Q)){if(!Array.isArray(Z)||Z.length===0)continue;q.set(C(X),Z.map((W)=>N0(W)))}return q}function W0($){let Q=Array.from($.childNodes).filter((q)=>P0(q)).map((q)=>L(q)??"").filter((q)=>q!=="");return Q.length>0?Q.join(""):void 0}function G0($){let Q={};for(let[q,X]of $.entries()){let Z=X.map((W)=>L(W)).filter((W)=>W!==void 0&&W!=="");if(Z.length>0)Q[q]=Z}return Object.keys(Q).length>0?JSON.stringify(Q):void 0}function M0($,Q){let q=!1,X=(W)=>{if(b0(W))return q=!0,p0(W,Q,X);if(q0(W))return m0(W,X(W.value));if(u0(W))return{_$rType$:1,rootLocalName:W.rootLocalName,ssrIntrinsicProps:W.ssrIntrinsicProps,strings:W.strings,values:W.values.map((G)=>X(G))};if(J0(W))return Array.from(W,(G)=>X(G));return W},Z=X($);return{containsSlots:q,value:Z}}function F0($){for(let Q of Array.from($.childNodes)){if(!U0(Q))continue;let q=Q.textContent??void 0;return Q.parentNode?.removeChild(Q),q}return}function s0($,Q,q){let X=$.get(Q);if(X){X.push(q);return}$.set(Q,[q])}function m0($,Q){return{...$,value:Q}}function c0($){if($ instanceof Element)return C($.getAttribute("slot"));return U}function J0($){return typeof $!=="string"&&typeof $==="object"&&$!==null&&Symbol.iterator in $}function U0($){return $ instanceof HTMLScriptElement&&$.hasAttribute(Y)}function P0($){return $ instanceof HTMLScriptElement&&$.hasAttribute(M)}function y0($){return U0($)||P0($)}function u0($){return typeof $==="object"&&$!==null&&$._$rType$===1&&Array.isArray($.strings)&&Array.isArray($.values)}function C($){return $??U}function L($){if($===void 0||$===null||$===!1||$===!0)return;if(typeof Node<"u"&&$ instanceof Node){if($.nodeType===Node.TEXT_NODE)return $.textContent??"";return $.outerHTML??$.textContent??void 0}if(q0($))return L($.value);if(typeof $==="string"||typeof $==="number"||typeof $==="bigint")return String($);if(typeof $==="object"&&$!==null&&"outerHTML"in $)return typeof $.outerHTML==="string"?$.outerHTML:$.textContent??void 0;if(J0($))return Array.from($,(Q)=>L(Q)??"").join("");return}function p0($,Q,q){let X=Q.get(C($.name));if(X&&X.length>0)return X.length===1?X[0]:X;if($.fallback===void 0)return"";return q($.fallback)}import{hydrate as i0,render as d0}from"@ecopages/jsx";class R{#$;#Q=new Map;#q;#Z;#X;#W=0;constructor($){this.#$=$,this.#Z=a(()=>{this.#$.requestUpdate()})}get slotProjectionVersion(){return this.#W}getSlotElements($){return this.ensureSlotProjectionState(),(this.#Q.get($??U)??[]).filter((Q)=>typeof Node<"u"&&Q instanceof Element)}getSlotProjectionScriptTag(){this.ensureSlotProjectionState();let $=G0(this.#Q);if(!$)return;return`<script type="application/json" ${Y}>${o0($)}</script>`}getAuthoredHydrationScriptMarkup(){return W0(this.#$)??void 0}hydrate($){this.disconnectSlotProjectionObserver();try{i0(this.resolveTrackedRenderOutput().value,$)}finally{this.observeSlotProjection()}}render($){this.disconnectSlotProjectionObserver();try{d0(this.resolveTrackedRenderOutput().value,$)}finally{this.observeSlotProjection()}}observeSlotProjection(){if(typeof MutationObserver>"u"||this.#X||!this.#$.isConnected)return;this.#X=new MutationObserver(($)=>this.handleSlotProjectionMutations($)),this.#X.observe(this.#$,{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 $=r(()=>this.resolveRenderOutput()),Q=$.get();if(!this.#$.isConnected)return Q;if(this.#q)this.#Z.unwatch(this.#q);return this.#q=$,this.#Z.watch($),Q}dispose(){this.disconnectSlotProjectionObserver(),this.disconnectRenderWatcher()}ensureSlotProjectionState(){if(this.#Q.size>0)return;let $=this.#$.isConnected?F0(this.#$):void 0;if(typeof $==="string"&&$!==""){this.#Q=Z0($),this.#W+=1;return}if(this.#$.childNodes.length>0)this.#Q=X0(this.#$),this.#W+=1}handleSlotProjectionMutations($){let Q=!1;for(let q of $){for(let X of Array.from(q.removedNodes))if(this.removeProjectedSlotNode(X))Q=!0;for(let X of Array.from(q.addedNodes)){if(X.parentNode!==this.#$)continue;if(this.addProjectedSlotNode(X))Q=!0}}if(Q)this.#W+=1,this.#$.requestUpdate()}addProjectedSlotNode($){if($ instanceof HTMLScriptElement&&($.hasAttribute(Y)||$.hasAttribute(M)))return!1;let Q=$ instanceof Element?$.getAttribute("slot")??U:U,q=this.#Q.get(Q);if(q){if(q.includes($))return!1;return q.push($),!0}return this.#Q.set(Q,[$]),!0}removeProjectedSlotNode($){for(let[Q,q]of this.#Q.entries()){let X=q.indexOf($);if(X===-1)continue;if(q.splice(X,1),q.length===0)this.#Q.delete(Q);return!0}return!1}resolveRenderOutput(){return this.ensureSlotProjectionState(),M0(this.#$.render(),this.#Q)}}function o0($){return $.replace(/</g,"\\u003c")}class k{options;needsRender=!1;isRendering=!1;isRenderScheduled=!1;constructor($){this.options=$}get rendering(){return this.isRendering}get pending(){return this.needsRender}markPending(){this.needsRender=!0}clearPending(){this.needsRender=!1}requestUpdate(){if(this.needsRender=!0,this.isRenderScheduled)return;this.isRenderScheduled=!0,queueMicrotask(()=>{if(this.isRenderScheduled=!1,!this.needsRender)return;this.flush()})}flush(){if(!this.options.canFlush())return;while(this.needsRender&&this.options.canFlush())this.needsRender=!1,this.runCommit()}runExclusive($){this.isRendering=!0;try{return $()}finally{this.isRendering=!1}}runCommit(){this.isRendering=!0;try{this.options.commit()}finally{this.isRendering=!1}}}import{createSubscribableJsxValue as n0}from"@ecopages/jsx";class E0{read;subscribers=new Set;watcherListeners=new Set;version=0;constructor($){this.read=$}get(){return A(this),this.read()}subscribe($){return this.subscribers.add($),()=>{this.subscribers.delete($)}}addWatcher($){return this.watcherListeners.add($),()=>{this.watcherListeners.delete($)}}getVersion(){return this.version}notify($){this.version+=1;let Q;try{this.notifyWatchers()}catch(q){Q=q}if(this.publish($),Q)throw Q}publish($){for(let Q of this.subscribers)Q($)}notifyWatchers(){let $=[];for(let Q of this.watcherListeners)try{Q()}catch(q){$.push(q)}if($.length===1)throw $[0];if($.length>1)throw AggregateError($,"Multiple reactive dependency notifications failed.")}}function l0($){return typeof $==="object"&&$!==null&&typeof $.get==="function"}class I{host;access;shouldAutoBind;bindings;$;reactiveFields=new Map;reactiveDependencies=new Map;reactiveDependencyReaders=new Map;reactiveBindings=new Map;updateCallbacks=new Map;onConnectedCallbacks=[];onDisconnectedCallback=[];constructor($,Q,q){this.host=$;this.access=Q;this.shouldAutoBind=q;let X=this.createReactiveBindingNamespace();this.bindings=X,this.$=X}connectHost(){for(let $ of this.onConnectedCallbacks)$()}disconnectHost(){for(let $ of this.onDisconnectedCallback)$()}notifyUpdate($,Q,q){if(Q===q)return;this.reactiveDependencies.get($)?.notify(q);let X=this.updateCallbacks.get($);if(X)for(let Z of X)Z()}registerCleanupCallback($){this.onDisconnectedCallback.push($)}registerConnectedCallback($){this.onConnectedCallbacks.push($)}registerReactiveDependencyReader($,Q){this.reactiveDependencyReaders.set($,Q)}registerUpdateCallback($,Q){if(!this.updateCallbacks.has($))this.updateCallbacks.set($,new Set);let q=this.updateCallbacks.get($);return q.add(Q),()=>{if(q.delete(Q),q.size===0)this.updateCallbacks.delete($)}}getReactiveBinding($){let Q=this.reactiveBindings.get($);if(Q)return Q;let q=n0({getValue:()=>this.readReactiveBindingValue($),subscribe:(X)=>this.registerUpdateCallback($,()=>{X(this.readReactiveBindingValue($))})});return this.reactiveBindings.set($,q),q}defineReactiveBinding($,Q=!0){let q=typeof Q==="string"?Q:Q?`$${$}`:void 0,X=this.access.getBindingTarget?.(this.host)??this.host;if(!q||this.access.hasProperty(this.host,q))return;this.access.defineProperty(X,q,{get:()=>this.getReactiveBinding($),enumerable:!1,configurable:!0})}trackReactiveRead($){A(this.getReactiveDependency($))}defineReactiveAccessor($,Q){let q=Q.bind??this.shouldAutoBind();if(this.defineReactiveBinding($,q),this.registerReactiveDependencyReader($,Q.getValue),this.access.defineProperty(this.host,$,{get:()=>{return this.trackReactiveRead($),Q.getValue()},set:(X)=>{let Z=Q.getValue();if(Z===X)return;Q.setValue(X),this.notifyUpdate($,Z,X)},enumerable:!0,configurable:!0}),Q.notifyInitialValue!==void 0)this.notifyUpdate($,void 0,Q.notifyInitialValue)}createReactiveField($,Q,q={}){let X={name:$,value:Q,initialValue:Q};this.reactiveFields.set($,X),this.defineReactiveAccessor($,{bind:q.bind,getValue:()=>this.reactiveFields.get($)?.value,setValue:(Z)=>{this.reactiveFields.set($,{...X,value:Z})},notifyInitialValue:q.suppressInitialNotify?void 0:Q})}createReactiveBindingNamespace(){return new Proxy(Object.create(null),{get:($,Q)=>{if(typeof Q!=="string")return;return this.getReactiveBinding(Q)}})}getReactiveDependency($){let Q=this.reactiveDependencies.get($);if(Q)return Q;let q=new E0(()=>this.readReactiveDependencyValue($));return this.reactiveDependencies.set($,q),q}readReactiveDependencyValue($){let Q=this.reactiveDependencyReaders.get($);if(Q)return Q();return this.readReactiveBindingValue($)}readReactiveBindingValue($){let Q=this.access.readProperty(this.host,$);if(l0(Q))return Q.get();return Q}}var h=Symbol.for("@ecopages/radiant.ssr-preparation-callbacks"),H0=Symbol.for("@ecopages/radiant.ssr-preparation-running");function i2($,Q){let X=$[h];if(Array.isArray(X)){X.push(Q);return}Object.defineProperty($,h,{value:[Q],configurable:!0})}function B0($){let Q=$,q=Q[h];if(!Array.isArray(q))return;Q[H0]=!0;try{for(let X of q)X()}finally{delete Q[H0]}}var T=Symbol.for("@ecopages/radiant.hydrator-installed");function o2(){globalThis[T]=!0}function n2(){delete globalThis[T]}function x0(){return globalThis[T]===!0}import{getActiveSsrScopeValue as t0,withActiveSsrScopeValue as r0}from"@ecopages/jsx/server";var D0=Symbol.for("@ecopages/radiant.element-ssr-runtime");function L0(){return t0(D0)}function r2($,Q){return r0(D0,$,Q)}import{hasHydrationMarkers as a0,jsx as e0}from"@ecopages/jsx";var $2=Q2();function Q2(){if(typeof HTMLElement<"u")return HTMLElement;throw Error("RadiantElement requires HTMLElement. Install '@ecopages/radiant/server/light-dom-shim' before SSR imports.")}class w0 extends $2{renderRootMode="light";bindings;$;reactiveHost;reactivePropertyState;eventSubscriptionRegistry;hostSsrRegistry=new K;eventEmitters=new Map;elementReady=!1;isFirstConnectPending=!1;renderScheduler;renderRuntime;constructor(){super();this.reactivePropertyState=new j(this),this.eventSubscriptionRegistry=new z(()=>this.resolveRenderSurface().interactionTarget,()=>this),this.renderScheduler=new k({canFlush:()=>this.isConnected&&!this.renderScheduler.rendering&&!(this.isFirstConnectPending&&Y0(this)),commit:()=>{let{renderTarget:$}=this.resolveRenderSurface();this.getOrCreateRenderRuntime().render($)}}),this.reactiveHost=new I(this,{defineProperty:($,Q,q)=>Object.defineProperty($,Q,q),getBindingTarget:($)=>Object.getPrototypeOf($)??$,hasProperty:($,Q)=>(Q in $),readProperty:($,Q)=>$[Q]},()=>this.shouldAutoBindReactiveMembers()),this.bindings=this.reactiveHost.bindings,this.$=this.reactiveHost.$,B(this,"construct")}get slotProjectionVersion(){return this.renderRuntime?.slotProjectionVersion??0}connectedCallback(){B(this,"connect");let $=this.isFirstConnectPending;if(this.elementReady=!0,this.reactiveHost.connectHost(),$)return;this.isFirstConnectPending=!0,queueMicrotask(()=>{if(this.isFirstConnectPending=!1,!this.isConnected)return;if(!this.shouldRunRenderLifecycle())return;if(this.getOrCreateRenderRuntime().observeSlotProjection(),Y0(this)){if(this.renderScheduler.clearPending(),this.hydrate(),this.renderScheduler.pending)this.update();return}this.update()})}connectedContextCallback($){}disconnectedCallback(){this.renderRuntime?.dispose(),this.renderRuntime=void 0,this.eventSubscriptionRegistry.removeAll(),this.reactiveHost.disconnectHost()}notifyUpdate($,Q,q){this.reactiveHost.notifyUpdate($,Q,q)}attributeChangedCallback($,Q,q){if(Q===q||!this.elementReady)return;this.reactivePropertyState.applyAttributeChange($,Q,q)}renderTemplate({target:$=this,template:Q,insert:q="replace",sanitize:X}){let Z=X?X(Q):Q;switch(q){case"replace":$.innerHTML=Z;break;case"beforeend":$.insertAdjacentHTML("beforeend",Z);break;case"afterbegin":$.insertAdjacentHTML("afterbegin",Z);break;case"beforebegin":$.insertAdjacentHTML("beforebegin",Z);break;case"afterend":$.insertAdjacentHTML("afterend",Z);break}}render(){return e0("slot",{})}getReactivePropDefinitions(){return v(this)}getPropertyValue($){return Reflect.get(this,$)}renderViewToString($={}){if(!this.shouldRunRenderLifecycle())return this.innerHTML;return B(this,"ssr"),this.prepareForSsr(),q2().renderView(this,$)}hydrate(){if(!this.shouldRunRenderLifecycle()||!this.isConnected||this.renderScheduler.rendering)return;let{renderTarget:$}=this.resolveRenderSurface(),Q=this.getOrCreateRenderRuntime();this.renderScheduler.runExclusive(()=>{Q.hydrate($)})}requestUpdate(){if(!this.shouldRunRenderLifecycle())return;this.renderScheduler.requestUpdate()}update(){if(!this.shouldRunRenderLifecycle())return;this.renderScheduler.markPending(),this.renderScheduler.flush()}registerReactiveProperty($){this.reactivePropertyState.register($)}getReactiveProperties(){return this.reactivePropertyState.getAll()}registerReactiveDependencyReader($,Q){this.reactiveHost.registerReactiveDependencyReader($,Q)}registerContextProvider($,Q){this.hostSsrRegistry.registerContextProvider($,Q)}registerHydrationBinding($,Q){this.hostSsrRegistry.registerHydrationBinding($,Q)}getContextProviders(){return this.hostSsrRegistry.getContextProviders()}getHydrationBindings(){return this.hostSsrRegistry.getHydrationBindings()}prepareForSsr(){B0(this)}shouldAutoBindReactiveMembers(){return!0}shouldRunRenderLifecycle(){return this.render!==w0.prototype.render}getRenderTarget(){if(this.renderRootMode!=="shadow")return this;if(this.shadowRoot)return this.shadowRoot;if(typeof this.attachShadow!=="function")throw Error("RadiantElement shadow render mode requires attachShadow().");return this.attachShadow({mode:"open"})}registerUpdateCallback($,Q){return this.reactiveHost.registerUpdateCallback($,Q)}getReactiveBinding($){return this.reactiveHost.getReactiveBinding($)}bind($){return this.reactiveHost.getReactiveBinding($)}defineReactiveBinding($,Q=!0){this.reactiveHost.defineReactiveBinding($,Q)}trackReactiveRead($){this.reactiveHost.trackReactiveRead($)}subscribeEvents($){let Q=[];for(let q of $)Q.push(this.subscribeEvent(q));return Q}hasEventSubscription($){return this.eventSubscriptionRegistry.hasEventSubscription($)}subscribeEvent($){return this.eventSubscriptionRegistry.subscribe($)}registerCleanupCallback($){this.reactiveHost.registerCleanupCallback($)}registerConnectedCallback($){this.reactiveHost.registerConnectedCallback($)}registerEventEmitter($,Q){this.eventEmitters.set($,Q)}getRef($,Q=!1){let q=`[data-ref="${$}"]`,{queryRoot:X}=this.resolveRenderSurface();if(Q)return Array.from(X.querySelectorAll(q));return X.querySelector(q)??null}getSlotElement($){return this.getSlotElements($)[0]??null}getSlotElements($){return this.getOrCreateRenderRuntime().getSlotElements($)}createReactiveField($,Q,q={}){this.reactiveHost.createReactiveField($,Q,q)}createReactiveProp($,Q){this.reactivePropertyState.create($,Q,(q,X,Z)=>i(this,q,X,Z),(q,X)=>{this.reactiveHost.defineReactiveAccessor(q,X)})}getSlotProjectionScriptTag(){return this.getOrCreateRenderRuntime().getSlotProjectionScriptTag()}getAuthoredHydrationScriptMarkup(){return this.getOrCreateRenderRuntime().getAuthoredHydrationScriptMarkup()}resolveTrackedRenderOutput(){return this.getOrCreateRenderRuntime().resolveTrackedRenderOutput()}getOrCreateRenderRuntime(){if(this.renderRuntime)return this.renderRuntime;return this.renderRuntime=new R(this),this.renderRuntime}resolveRenderSurface(){let $=this.getRenderTarget(),Q=typeof ShadowRoot<"u"&&$ instanceof ShadowRoot?$:this;return{interactionTarget:Q,queryRoot:Q,renderTarget:$}}}function q2(){let $=L0();if(!$)throw Error("Radiant SSR runtime unavailable. Import `@ecopages/radiant/server/render-component` first.");return $}function Y0($){return x0()&&a0($)}export{w0 as RadiantElement};
2
2
 
3
- //# debugId=909BC4C15E7753E864756E2164756E21
3
+ //# debugId=27FC1B70819ED37F64756E2164756E21