@ecopages/radiant 0.3.0-alpha.9 → 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 (206) 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 +35 -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 +27 -141
  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 +4 -4
  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 +4 -4
  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.map +2 -2
  135. package/dist/decorators/standard/query-slot.d.ts +0 -1
  136. package/dist/decorators/standard/query-slot.js +2 -2
  137. package/dist/decorators/standard/query-slot.js.map +4 -4
  138. package/dist/decorators/standard/reactive-field.js +2 -2
  139. package/dist/decorators/standard/reactive-field.js.map +3 -3
  140. package/dist/decorators/standard/reactive-prop.d.ts +1 -1
  141. package/dist/decorators/standard/reactive-prop.js +2 -2
  142. package/dist/decorators/standard/reactive-prop.js.map +6 -5
  143. package/dist/decorators/standard/signal.d.ts +1 -1
  144. package/dist/decorators/standard/signal.js +2 -2
  145. package/dist/decorators/standard/signal.js.map +5 -4
  146. package/dist/decorators/state.js +2 -2
  147. package/dist/decorators/state.js.map +4 -4
  148. package/dist/helpers/create-event-listener.js.map +2 -2
  149. package/dist/helpers/create-query-slot.d.ts +0 -1
  150. package/dist/helpers/create-query-slot.js +2 -2
  151. package/dist/helpers/create-query-slot.js.map +3 -3
  152. package/dist/helpers/index.js +2 -2
  153. package/dist/helpers/index.js.map +4 -4
  154. package/dist/index.js +2 -2
  155. package/dist/index.js.map +36 -25
  156. package/dist/package.json +209 -0
  157. package/dist/server/host-attribute-serialization.d.ts +46 -0
  158. package/dist/server/host-attribute-serialization.js +3 -0
  159. package/dist/server/host-attribute-serialization.js.map +12 -0
  160. package/dist/server/host-script-composition.d.ts +42 -0
  161. package/dist/server/host-script-composition.js +3 -0
  162. package/dist/server/host-script-composition.js.map +10 -0
  163. package/dist/server/install-light-dom-shim.js +2 -2
  164. package/dist/server/install-light-dom-shim.js.map +3 -3
  165. package/dist/server/internal-radiant-host.d.ts +2 -0
  166. package/dist/server/internal-radiant-host.js +3 -0
  167. package/dist/server/internal-radiant-host.js.map +9 -0
  168. package/dist/server/light-dom-shim.js +2 -2
  169. package/dist/server/light-dom-shim.js.map +3 -3
  170. package/dist/server/radiant-element-ssr-bridge.d.ts +21 -0
  171. package/dist/server/radiant-element-ssr-bridge.js +3 -0
  172. package/dist/server/radiant-element-ssr-bridge.js.map +24 -0
  173. package/dist/server/radiant-element-ssr-extractor.d.ts +2 -0
  174. package/dist/server/radiant-element-ssr-extractor.js +3 -0
  175. package/dist/server/radiant-element-ssr-extractor.js.map +12 -0
  176. package/dist/server/radiant-element-ssr-service.d.ts +13 -0
  177. package/dist/server/radiant-element-ssr-service.js +3 -0
  178. package/dist/server/radiant-element-ssr-service.js.map +22 -0
  179. package/dist/server/radiant-element-ssr.d.ts +1 -0
  180. package/dist/server/radiant-element-ssr.js +3 -0
  181. package/dist/server/radiant-element-ssr.js.map +24 -0
  182. package/dist/server/render-component.d.ts +3 -9
  183. package/dist/server/render-component.js +2 -2
  184. package/dist/server/render-component.js.map +17 -9
  185. package/dist/server/render-controller.js +2 -2
  186. package/dist/server/render-controller.js.map +19 -11
  187. package/dist/server/render-fragment.d.ts +7 -0
  188. package/dist/server/render-fragment.js +3 -0
  189. package/dist/server/render-fragment.js.map +10 -0
  190. package/dist/server/slot-projection-html.js +2 -2
  191. package/dist/server/slot-projection-html.js.map +3 -3
  192. package/dist/tools/escape-css-identifier.js.map +2 -2
  193. package/dist/tools/index.js.map +2 -2
  194. package/dist/utils/escape-html-attribute.d.ts +2 -0
  195. package/dist/utils/escape-html-attribute.js +3 -0
  196. package/dist/utils/escape-html-attribute.js.map +10 -0
  197. package/package.json +12 -5
  198. package/dist/core/radiant-component-ssr-registry.d.ts +0 -54
  199. package/dist/core/radiant-component-ssr-registry.js +0 -3
  200. package/dist/core/radiant-component-ssr-registry.js.map +0 -10
  201. package/dist/core/radiant-component-ssr.js +0 -3
  202. package/dist/core/radiant-component-ssr.js.map +0 -14
  203. package/dist/server/radiant-component-ssr-runtime.d.ts +0 -9
  204. package/dist/server/radiant-component-ssr-runtime.js +0 -3
  205. package/dist/server/radiant-component-ssr-runtime.js.map +0 -17
  206. 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,11 +1,12 @@
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;
@@ -24,79 +25,7 @@ export type RadiantElementEventListener = {
24
25
  listener: EventListener;
25
26
  options?: AddEventListenerOptions;
26
27
  };
27
- /**
28
- * Represents a property metadata object.
29
- */
30
- export interface ReactiveProperty<T = unknown> {
31
- type: AttributeTypeConstant;
32
- value?: T;
33
- initialValue?: T;
34
- name: string;
35
- attribute: string;
36
- converter: {
37
- fromAttribute: (value: string) => ReadAttributeValueReturnType;
38
- toAttribute: (value: any) => WriteAttributeValueReturnType;
39
- };
40
- }
41
- /**
42
- * Represents the options for a reactive property.
43
- */
44
- export type ReactivePropertyOptions<T> = {
45
- type: AttributeTypeConstant;
46
- reflect?: boolean;
47
- attribute?: string;
48
- defaultValue?: T;
49
- /**
50
- * Exposes a JSX binding companion for the reactive property.
51
- *
52
- * - `true` creates a `$propertyName` accessor.
53
- * - a string creates a custom accessor with that name.
54
- * - `undefined` defers to the host default.
55
- *
56
- * The generated accessor returns a subscribable JSX child value so JSX can
57
- * patch only the affected child part when the property changes.
58
- */
59
- bind?: boolean | string;
60
- };
61
- export type ReactiveBindingOption = boolean | string;
62
- export type ReactiveFieldOptions = {
63
- /**
64
- * Exposes a JSX binding companion for the reactive field.
65
- *
66
- * - `true` creates a `$fieldName` accessor.
67
- * - a string creates a custom accessor with that name.
68
- * - `undefined` defers to the host default.
69
- */
70
- bind?: ReactiveBindingOption;
71
- };
72
- export type ReactiveField<T = unknown> = {
73
- name: string;
74
- value: T;
75
- initialValue: T;
76
- };
77
28
  type StringPropertyKey<Value> = Extract<keyof Value, string>;
78
- /**
79
- * Value type produced by a JSX binding for a selected reactive member.
80
- *
81
- * Bindings preserve the original property type when it is already renderable by
82
- * the Ecopages JSX runtime. For non-renderable values, the binding falls back
83
- * to the broader `JsxRenderable` contract consumed by the renderer.
84
- */
85
- export type ReactiveBindingValue<Host extends object, Property extends StringPropertyKey<Host>> = Host[Property] extends JsxRenderable ? Host[Property] : JsxRenderable;
86
- /**
87
- * Namespace of cached JSX bindings keyed by the explicit bindable shape.
88
- *
89
- * Radiant exposes this namespace twice on every host:
90
- *
91
- * - `host.bindings.key` for the explicit form
92
- * - `host.$.key` for the short form
93
- *
94
- * Both aliases resolve through the same cached binding objects as
95
- * `host.bind('key')`.
96
- */
97
- export type ReactiveBindings<Bindings extends object> = {
98
- readonly [Property in StringPropertyKey<Bindings>]: SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
99
- };
100
29
  /**
101
30
  * Represents an interface for a Radiant element.
102
31
  * @typeParam Bindings - Explicit internal bindable shape used to type `bind()` and `getReactiveBinding()`.
@@ -131,7 +60,7 @@ export interface IRadiantElement<Bindings extends object = {}> {
131
60
  *
132
61
  * @returns A cleanup function that unregisters the callback.
133
62
  */
134
- registerUpdateCallback(property: string, update: (...rest: any[]) => any): () => void;
63
+ registerUpdateCallback(property: string, update: () => void): () => void;
135
64
  /**
136
65
  * Returns a subscribable JSX child binding for a reactive property or field.
137
66
  *
@@ -238,22 +167,12 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
238
167
  readonly bindings: ReactiveBindings<Bindings>;
239
168
  readonly $: ReactiveBindings<Bindings>;
240
169
  private readonly reactiveHost;
170
+ private readonly reactivePropertyState;
171
+ private readonly eventSubscriptionRegistry;
241
172
  /**
242
- * A map of property metadata objects, it contains useful information about the properties configured via decorators.
243
- */
244
- private reactiveProperties;
245
- /**
246
- * Registered context providers keyed by decorated property name.
173
+ * Registered context providers and hydration bindings for SSR.
247
174
  */
248
- private contextProviders;
249
- /**
250
- * Registered keyed hydration payload producers appended to SSR host output.
251
- */
252
- private hydrationBindings;
253
- /**
254
- * A map of event subscriptions used to manage event listeners on the Radiant element.
255
- */
256
- private eventSubscriptions;
175
+ private readonly hostSsrRegistry;
257
176
  /**
258
177
  * A map for event emitters
259
178
  */
@@ -262,37 +181,15 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
262
181
  * A flag indicating whether the element has been connected to the DOM.
263
182
  */
264
183
  private elementReady;
265
- private isRendering;
266
184
  private isFirstConnectPending;
267
- private isRenderScheduled;
268
- private needsRender;
269
- /**
270
- * Snapshot of own-property values that existed before Radiant installs the
271
- * reactive accessors for declared props.
272
- *
273
- * "Pre-upgrade" refers to the custom-element upgrade window where user code,
274
- * SSR boot code, or another framework assigns `element.someProp = value`
275
- * before the browser has finished constructing the final custom-element class
276
- * instance with its accessors in place.
277
- *
278
- * Those early assignments land as plain own properties on the element. If we
279
- * define a reactive accessor later without first capturing them, the accessor
280
- * would either miss the assigned value or remain shadowed by the own property.
281
- * `createReactiveProp()` consumes this snapshot so the early value becomes the
282
- * prop's initial reactive state.
283
- */
284
- private readonly preUpgradePropertyValues;
285
- private projectedSlotContent;
286
- private renderSignal?;
287
- private readonly renderWatcher;
288
- private slotProjectionObserver?;
289
- private slotProjectionVersion;
185
+ private readonly renderScheduler;
186
+ private renderRuntime?;
290
187
  constructor();
188
+ get slotProjectionVersion(): number;
291
189
  connectedCallback(): void;
292
190
  connectedContextCallback(_contextName: UnknownContext): void;
293
191
  disconnectedCallback(): void;
294
192
  notifyUpdate(changedProperty: string, oldValue: unknown, value: unknown): void;
295
- private transformAttributeValue;
296
193
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
297
194
  /**
298
195
  * Renders a trusted HTML template string into the specified target element.
@@ -309,19 +206,19 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
309
206
  sanitize?: (html: string) => string;
310
207
  }): void;
311
208
  render(): JsxRenderable;
312
- renderToString(options?: RenderToStringOptions): string;
313
- renderHost(): JsxRenderable;
314
- renderHostToString(options?: RenderToStringOptions): string;
209
+ getReactivePropDefinitions(): ReactivePropDefinition[];
210
+ getPropertyValue(name: string): unknown;
211
+ renderViewToString(options?: RenderToStringOptions): string;
315
212
  hydrate(): void;
316
213
  requestUpdate(): void;
317
214
  update(): void;
318
215
  registerReactiveProperty(config: ReactiveProperty): void;
319
- protected getReactiveProperties(): ReactiveProperty[];
216
+ getReactiveProperties(): ReactiveProperty[];
320
217
  registerReactiveDependencyReader(property: string, read: () => unknown): void;
321
218
  registerContextProvider(name: string, provider: SsrSerializableContextProvider): void;
322
219
  registerHydrationBinding(name: string, binding: SsrSerializableHydrationBinding): void;
323
- protected getContextProviders(): SsrSerializableContextProvider[];
324
- protected getHydrationBindings(): SsrSerializableHydrationBinding[];
220
+ getContextProviders(): SsrSerializableContextProvider[];
221
+ getHydrationBindings(): SsrSerializableHydrationBinding[];
325
222
  /**
326
223
  * Flushes any deferred SSR-only preparation work before the host is
327
224
  * serialized.
@@ -344,17 +241,14 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
344
241
  protected shouldRunRenderLifecycle(): boolean;
345
242
  /** Returns the DOM root used by client-side render and hydrate work. */
346
243
  protected getRenderTarget(): RadiantRenderTarget;
347
- protected getHostSsrAttributes(): Record<string, string>;
348
- protected resolveSsrRenderBridge(): RadiantElementRenderBridge;
349
- registerUpdateCallback(property: string, update: (...rest: any[]) => any): () => void;
244
+ registerUpdateCallback(property: string, update: () => void): () => void;
350
245
  getReactiveBinding<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
351
246
  bind<Property extends StringPropertyKey<Bindings>>(property: Property): SubscribableJsxValue<ReactiveBindingValue<Bindings, Property>>;
352
247
  defineReactiveBinding(property: string, bind?: ReactiveBindingOption): void;
353
248
  trackReactiveRead(property: string): void;
354
249
  subscribeEvents(events: RadiantElementEventListener[]): Array<() => void>;
250
+ hasEventSubscription(subscriptionId: string): boolean;
355
251
  subscribeEvent(eventConfig: RadiantElementEventListener): () => void;
356
- private unsubscribeEvent;
357
- private removeAllSubscribedEvents;
358
252
  /**
359
253
  * Registers a callback that runs on every future disconnect.
360
254
  */
@@ -381,20 +275,12 @@ export declare class RadiantElement<Bindings extends object = {}> extends Radian
381
275
  * writes survive into the reactive lifecycle.
382
276
  */
383
277
  createReactiveProp<T = unknown>(propertyName: string, options: ReactivePropertyOptions<T>): void;
384
- private ensureSlotProjectionState;
385
- private getHostChildNodeCount;
386
- private getSlotProjectionScriptTag;
387
- private getAuthoredHydrationScriptMarkup;
388
- private handleSlotProjectionMutations;
389
- private addProjectedSlotNode;
390
- private removeProjectedSlotNode;
391
- private observeSlotProjection;
392
- private disconnectSlotProjectionObserver;
393
- private disconnectRenderWatcher;
394
- private resolveTrackedRenderOutput;
395
- private resolveRenderOutput;
396
- private getEventSubscriptionTarget;
397
- private getQueryRoot;
398
- private assertSupportsHostSsrRendering;
278
+ getSlotProjectionScriptTag(): string | undefined;
279
+ getAuthoredHydrationScriptMarkup(): string | undefined;
280
+ resolveTrackedRenderOutput(): {
281
+ containsSlots: boolean;
282
+ value: JsxRenderable;
283
+ };
284
+ private getOrCreateRenderRuntime;
285
+ private resolveRenderSurface;
399
286
  }
400
- export {};
@@ -1,3 +1,3 @@
1
- var h0=((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 Z=$[X][D];if(!Array.isArray(Z))continue;for(let q of Z)q(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 Z of X)Z()}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 Z=$.getValue();if(Z===X)return;$.setValue(X),this.notifyUpdate(Q,Z,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:(Z)=>{this.reactiveFields.set(Q,{...X,value:Z})},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 v0(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",T="data-hydration-type",O="data-hydration-key";function s0(Q){let $=Q.hydrationKey?` ${O}="${Z0(Q.hydrationKey)}"`:"";return`<script type="application/json" ${F} ${T}="${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 Z=Q.childNodes;if(!Z||Z.length===0)return null;for(let q=0;q<Z.length;q+=1){let G=Z[q];if(G.nodeType!==1)continue;let M=G;if(h(M,$,W))return M}return null}for(let Z=0;Z<X.length;Z+=1)if(h(X[Z],$,W))return X[Z];return null}function h(Q,$,W){if(Q.tagName!=="SCRIPT"||!Q.hasAttribute(F)||Q.getAttribute(T)!==$)return!1;if(W!==void 0)return Q.getAttribute(O)===W;return!Q.hasAttribute(O)}function Z0(Q){return Q.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}import{createMarkupNodeLike as q0,isKeyedJsxValue as f,isSlotJsxValue as G0}from"@ecopages/jsx";var z="",H="data-radiant-slot-projection";function N(Q){let $=new Map;for(let W of Array.from(Q.childNodes)){if(z0(W))continue;J0($,M0(W),W)}return $}function V(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,Z]of Object.entries($)){if(!Array.isArray(Z)||Z.length===0)continue;W.set(P(X),Z.map((q)=>q0(q)))}return W}function g(Q){let $=Array.from(Q.childNodes).filter((W)=>s(W)).map((W)=>B(W)??"").filter((W)=>W!=="");return $.length>0?$.join(""):void 0}function m(Q){let $={};for(let[W,X]of Q.entries()){let Z=X.map((q)=>B(q)).filter((q)=>q!==void 0&&q!=="");if(Z.length>0)$[W]=Z}return Object.keys($).length>0?JSON.stringify($):void 0}function v(Q,$){let W=!1,X=(q)=>{if(G0(q))return W=!0,B0(q,$,X);if(f(q))return F0(q,X(q.value));if(U0(q))return{_$rType$:1,rootLocalName:q.rootLocalName,strings:q.strings,values:q.values.map((G)=>X(G))};if(c(q))return Array.from(q,(G)=>X(G));return q},Z=X(Q);return{containsSlots:W,value:Z}}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 q=Q.getAttribute(W);if(q===null)return X;return q===""?!0:Y(q,$)}let Z=Q.getAttribute(W);return Z!==null?Y(Z,$):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{renderRootMode="light";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),Z=this.transformAttributeValue(W,X),q=this.transformAttributeValue($,X),G=X?X.attribute:Q;this[G]=Z,this.notifyUpdate(Q,q,Z)}}renderTemplate({target:Q=this,template:$,insert:W="replace",sanitize:X}){let Z=X?X($):$;switch(W){case"replace":Q.innerHTML=Z;break;case"beforeend":Q.insertAdjacentHTML("beforeend",Z);break;case"afterbegin":Q.insertAdjacentHTML("afterbegin",Z);break;case"beforebegin":Q.insertAdjacentHTML("beforebegin",Z);break;case"afterend":Q.insertAdjacentHTML("afterend",Z);break}}render(){return k0("slot",{})}renderToString(Q={}){if(!this.shouldRunRenderLifecycle())return this.innerHTML;return this.prepareForSsr(),K().renderView(this,Q)}renderHost(){return this.assertSupportsHostSsrRendering(),K().renderHost(this)}renderHostToString(Q={}){return this.assertSupportsHostSsrRendering(),K().renderHostToString(this,Q)}hydrate(){if(!this.shouldRunRenderLifecycle()||!this.isConnected||this.isRendering)return;let Q=this.getRenderTarget();this.isRendering=!0,this.disconnectSlotProjectionObserver();try{E0(this.resolveTrackedRenderOutput().value,Q)}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;let Q=this.getRenderTarget();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,Q)}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}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"})}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 $=this.getEventSubscriptionTarget(),W=(Z)=>{if(Z.target&&Z.target.matches(Q.selector))Q.listener.call(this,Z)},X=`${Q.type}:${Q.selector}`;return $.addEventListener(Q.type,W,Q.options),this.eventSubscriptions.set(X,{...Q,listener:W,target:$}),this.unsubscribeEvent.bind(this,X)}unsubscribeEvent(Q){let $=this.eventSubscriptions.get(Q);if($)$.target.removeEventListener($.type,$.listener,$.options),this.eventSubscriptions.delete(Q)}removeAllSubscribedEvents(){for(let Q of this.eventSubscriptions.values())Q.target.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}"]`,X=this.getQueryRoot();if($)return Array.from(X.querySelectorAll(W));return X.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:Z,defaultValue:q}=$,G=X??Q,M=this.preUpgradePropertyValues.has(Q),Q0=M?this.preUpgradePropertyValues.get(Q):void 0;if(q!==void 0&&!r(W,q))throw Error(`defaultValue does not match the expected type for ${W.name}`);let U=M?Q0:t(this,W,G,q);if(this.hasAttribute(G)&&(!Z||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(Z)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=V(Q),this.slotProjectionVersion+=1;return}if(this.getHostChildNodeCount()>0)this.projectedSlotContent=N(this),this.slotProjectionVersion+=1}getHostChildNodeCount(){return"childNodes"in this&&this.childNodes?this.childNodes.length:0}getSlotProjectionScriptTag(){this.ensureSlotProjectionState();let Q=m(this.projectedSlotContent);if(!Q)return;return`<script type="application/json" ${H}>${R0(Q)}</script>`}getAuthoredHydrationScriptMarkup(){let Q=g(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(),v(this.render(),this.projectedSlotContent)}getEventSubscriptionTarget(){let Q=this.getRenderTarget();return Q instanceof ShadowRoot?Q:this}getQueryRoot(){let Q=this.getRenderTarget();return Q instanceof ShadowRoot?Q:this}assertSupportsHostSsrRendering(){if(this.renderRootMode==="shadow")throw Error("RadiantElement shadow render mode does not support renderHost() or renderHostToString().")}}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=00E7CEE7F33A213F64756E2164756E21
3
+ //# debugId=27FC1B70819ED37F64756E2164756E21