@craft-ts/component 0.7.0-beta.13

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 (190) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +36 -0
  3. package/src/index.d.ts +40 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +38 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/a11y-control.d.ts +58 -0
  8. package/src/lib/a11y-control.d.ts.map +1 -0
  9. package/src/lib/a11y-control.js +74 -0
  10. package/src/lib/a11y-control.js.map +1 -0
  11. package/src/lib/a11y.d.ts +87 -0
  12. package/src/lib/a11y.d.ts.map +1 -0
  13. package/src/lib/a11y.js +96 -0
  14. package/src/lib/a11y.js.map +1 -0
  15. package/src/lib/ai/ai-context-menu.d.ts +140 -0
  16. package/src/lib/ai/ai-context-menu.d.ts.map +1 -0
  17. package/src/lib/ai/ai-context-menu.js +66 -0
  18. package/src/lib/ai/ai-context-menu.js.map +1 -0
  19. package/src/lib/ai/ai-send-dialog.d.ts +1263 -0
  20. package/src/lib/ai/ai-send-dialog.d.ts.map +1 -0
  21. package/src/lib/ai/ai-send-dialog.js +288 -0
  22. package/src/lib/ai/ai-send-dialog.js.map +1 -0
  23. package/src/lib/ai/send-context-to-ai.d.ts +29 -0
  24. package/src/lib/ai/send-context-to-ai.d.ts.map +1 -0
  25. package/src/lib/ai/send-context-to-ai.js +127 -0
  26. package/src/lib/ai/send-context-to-ai.js.map +1 -0
  27. package/src/lib/assert-defined-input.d.ts +26 -0
  28. package/src/lib/assert-defined-input.d.ts.map +1 -0
  29. package/src/lib/assert-defined-input.js +47 -0
  30. package/src/lib/assert-defined-input.js.map +1 -0
  31. package/src/lib/block.d.ts +36 -0
  32. package/src/lib/block.d.ts.map +1 -0
  33. package/src/lib/block.js +55 -0
  34. package/src/lib/block.js.map +1 -0
  35. package/src/lib/bootstrap.d.ts +32 -0
  36. package/src/lib/bootstrap.d.ts.map +1 -0
  37. package/src/lib/bootstrap.js +60 -0
  38. package/src/lib/bootstrap.js.map +1 -0
  39. package/src/lib/bridge.d.ts +56 -0
  40. package/src/lib/bridge.d.ts.map +1 -0
  41. package/src/lib/bridge.js +81 -0
  42. package/src/lib/bridge.js.map +1 -0
  43. package/src/lib/component.d.ts +46 -0
  44. package/src/lib/component.d.ts.map +1 -0
  45. package/src/lib/component.js +118 -0
  46. package/src/lib/component.js.map +1 -0
  47. package/src/lib/composition.d.ts +17 -0
  48. package/src/lib/composition.d.ts.map +1 -0
  49. package/src/lib/composition.js +28 -0
  50. package/src/lib/composition.js.map +1 -0
  51. package/src/lib/craft-defaults.d.ts +2 -0
  52. package/src/lib/craft-defaults.d.ts.map +1 -0
  53. package/src/lib/craft-defaults.js +41 -0
  54. package/src/lib/craft-defaults.js.map +1 -0
  55. package/src/lib/craft-host-tokens.d.ts +6 -0
  56. package/src/lib/craft-host-tokens.d.ts.map +1 -0
  57. package/src/lib/craft-host-tokens.js +7 -0
  58. package/src/lib/craft-host-tokens.js.map +1 -0
  59. package/src/lib/craft-router-outlet.d.ts +15 -0
  60. package/src/lib/craft-router-outlet.d.ts.map +1 -0
  61. package/src/lib/craft-router-outlet.js +10 -0
  62. package/src/lib/craft-router-outlet.js.map +1 -0
  63. package/src/lib/css-vars.d.ts +31 -0
  64. package/src/lib/css-vars.d.ts.map +1 -0
  65. package/src/lib/css-vars.js +43 -0
  66. package/src/lib/css-vars.js.map +1 -0
  67. package/src/lib/css-vars.type.d.ts +151 -0
  68. package/src/lib/css-vars.type.d.ts.map +1 -0
  69. package/src/lib/css-vars.type.js +1 -0
  70. package/src/lib/css-vars.type.js.map +1 -0
  71. package/src/lib/defer.d.ts +31 -0
  72. package/src/lib/defer.d.ts.map +1 -0
  73. package/src/lib/defer.js +19 -0
  74. package/src/lib/defer.js.map +1 -0
  75. package/src/lib/directive.d.ts +9 -0
  76. package/src/lib/directive.d.ts.map +1 -0
  77. package/src/lib/directive.js +31 -0
  78. package/src/lib/directive.js.map +1 -0
  79. package/src/lib/each-scheduling.d.ts +59 -0
  80. package/src/lib/each-scheduling.d.ts.map +1 -0
  81. package/src/lib/each-scheduling.js +120 -0
  82. package/src/lib/each-scheduling.js.map +1 -0
  83. package/src/lib/each.d.ts +29 -0
  84. package/src/lib/each.d.ts.map +1 -0
  85. package/src/lib/each.js +23 -0
  86. package/src/lib/each.js.map +1 -0
  87. package/src/lib/factory-runtime.d.ts +5 -0
  88. package/src/lib/factory-runtime.d.ts.map +1 -0
  89. package/src/lib/factory-runtime.js +26 -0
  90. package/src/lib/factory-runtime.js.map +1 -0
  91. package/src/lib/field-exception-block.d.ts +96 -0
  92. package/src/lib/field-exception-block.d.ts.map +1 -0
  93. package/src/lib/field-exception-block.js +44 -0
  94. package/src/lib/field-exception-block.js.map +1 -0
  95. package/src/lib/host-runtime.d.ts +60 -0
  96. package/src/lib/host-runtime.d.ts.map +1 -0
  97. package/src/lib/host-runtime.js +16 -0
  98. package/src/lib/host-runtime.js.map +1 -0
  99. package/src/lib/hydrate.d.ts +15 -0
  100. package/src/lib/hydrate.d.ts.map +1 -0
  101. package/src/lib/hydrate.js +79 -0
  102. package/src/lib/hydrate.js.map +1 -0
  103. package/src/lib/hyperscript.d.ts +148 -0
  104. package/src/lib/hyperscript.d.ts.map +1 -0
  105. package/src/lib/hyperscript.js +96 -0
  106. package/src/lib/hyperscript.js.map +1 -0
  107. package/src/lib/if-block.d.ts +8 -0
  108. package/src/lib/if-block.d.ts.map +1 -0
  109. package/src/lib/if-block.js +16 -0
  110. package/src/lib/if-block.js.map +1 -0
  111. package/src/lib/locator.d.ts +170 -0
  112. package/src/lib/locator.d.ts.map +1 -0
  113. package/src/lib/locator.js +151 -0
  114. package/src/lib/locator.js.map +1 -0
  115. package/src/lib/match-block.d.ts +38 -0
  116. package/src/lib/match-block.d.ts.map +1 -0
  117. package/src/lib/match-block.js +29 -0
  118. package/src/lib/match-block.js.map +1 -0
  119. package/src/lib/pending-block.d.ts +125 -0
  120. package/src/lib/pending-block.d.ts.map +1 -0
  121. package/src/lib/pending-block.js +48 -0
  122. package/src/lib/pending-block.js.map +1 -0
  123. package/src/lib/project.d.ts +19 -0
  124. package/src/lib/project.d.ts.map +1 -0
  125. package/src/lib/project.js +56 -0
  126. package/src/lib/project.js.map +1 -0
  127. package/src/lib/render/hydration-metadata.d.ts +3 -0
  128. package/src/lib/render/hydration-metadata.d.ts.map +1 -0
  129. package/src/lib/render/hydration-metadata.js +8 -0
  130. package/src/lib/render/hydration-metadata.js.map +1 -0
  131. package/src/lib/render/hydration.d.ts +24 -0
  132. package/src/lib/render/hydration.d.ts.map +1 -0
  133. package/src/lib/render/hydration.js +181 -0
  134. package/src/lib/render/hydration.js.map +1 -0
  135. package/src/lib/render/interpreter.d.ts +32 -0
  136. package/src/lib/render/interpreter.d.ts.map +1 -0
  137. package/src/lib/render/interpreter.js +3588 -0
  138. package/src/lib/render/interpreter.js.map +1 -0
  139. package/src/lib/render/server-style-collector.d.ts +6 -0
  140. package/src/lib/render/server-style-collector.d.ts.map +1 -0
  141. package/src/lib/render/server-style-collector.js +23 -0
  142. package/src/lib/render/server-style-collector.js.map +1 -0
  143. package/src/lib/render/ssr-coordinator.d.ts +20 -0
  144. package/src/lib/render/ssr-coordinator.d.ts.map +1 -0
  145. package/src/lib/render/ssr-coordinator.js +99 -0
  146. package/src/lib/render/ssr-coordinator.js.map +1 -0
  147. package/src/lib/render/string-dom.d.ts +9 -0
  148. package/src/lib/render/string-dom.d.ts.map +1 -0
  149. package/src/lib/render/string-dom.js +377 -0
  150. package/src/lib/render/string-dom.js.map +1 -0
  151. package/src/lib/render/style-registry.d.ts +14 -0
  152. package/src/lib/render/style-registry.d.ts.map +1 -0
  153. package/src/lib/render/style-registry.js +79 -0
  154. package/src/lib/render/style-registry.js.map +1 -0
  155. package/src/lib/render/style-scope.d.ts +30 -0
  156. package/src/lib/render/style-scope.d.ts.map +1 -0
  157. package/src/lib/render/style-scope.js +261 -0
  158. package/src/lib/render/style-scope.js.map +1 -0
  159. package/src/lib/render/vnode.d.ts +330 -0
  160. package/src/lib/render/vnode.d.ts.map +1 -0
  161. package/src/lib/render/vnode.js +293 -0
  162. package/src/lib/render/vnode.js.map +1 -0
  163. package/src/lib/server-render.d.ts +34 -0
  164. package/src/lib/server-render.d.ts.map +1 -0
  165. package/src/lib/server-render.js +84 -0
  166. package/src/lib/server-render.js.map +1 -0
  167. package/src/lib/start.d.ts +13 -0
  168. package/src/lib/start.d.ts.map +1 -0
  169. package/src/lib/start.js +20 -0
  170. package/src/lib/start.js.map +1 -0
  171. package/src/lib/template-contract.d.ts +347 -0
  172. package/src/lib/template-contract.d.ts.map +1 -0
  173. package/src/lib/template-contract.js +1 -0
  174. package/src/lib/template-contract.js.map +1 -0
  175. package/src/lib/template.d.ts +11 -0
  176. package/src/lib/template.d.ts.map +1 -0
  177. package/src/lib/template.js +21 -0
  178. package/src/lib/template.js.map +1 -0
  179. package/src/lib/testing.d.ts +157 -0
  180. package/src/lib/testing.d.ts.map +1 -0
  181. package/src/lib/testing.js +416 -0
  182. package/src/lib/testing.js.map +1 -0
  183. package/src/lib/types.d.ts +442 -0
  184. package/src/lib/types.d.ts.map +1 -0
  185. package/src/lib/types.js +22 -0
  186. package/src/lib/types.js.map +1 -0
  187. package/testing/public-api.d.ts +3 -0
  188. package/testing/public-api.d.ts.map +1 -0
  189. package/testing/public-api.js +3 -0
  190. package/testing/public-api.js.map +1 -0
@@ -0,0 +1,6 @@
1
+ export type CraftServerStyleCollector = Readonly<{
2
+ acquire(key: string, css: string, order: number): () => void;
3
+ cssText(): string;
4
+ }>;
5
+ export declare function createServerStyleCollector(): CraftServerStyleCollector;
6
+ //# sourceMappingURL=server-style-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-style-collector.d.ts","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/server-style-collector.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,OAAO,IAAI,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,wBAAgB,0BAA0B,IAAI,yBAAyB,CAsBtE"}
@@ -0,0 +1,23 @@
1
+ export function createServerStyleCollector() {
2
+ const entries = new Map();
3
+ return {
4
+ acquire(key, css, order) {
5
+ const current = entries.get(key);
6
+ if (current)
7
+ current.refs += 1;
8
+ else
9
+ entries.set(key, { css, order, refs: 1 });
10
+ return () => {
11
+ const entry = entries.get(key);
12
+ if (!entry)
13
+ return;
14
+ entry.refs = Math.max(0, entry.refs - 1);
15
+ };
16
+ },
17
+ cssText: () => [...entries.values()]
18
+ .sort((left, right) => left.order - right.order)
19
+ .map((entry) => entry.css)
20
+ .join('\n'),
21
+ };
22
+ }
23
+ //# sourceMappingURL=server-style-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-style-collector.js","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/server-style-collector.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,0BAA0B;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAGpB,CAAC;IACJ,OAAO;QACL,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK;YACrB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,OAAO;gBAAE,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;;gBAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,EAAE;gBACV,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK;oBAAE,OAAO;gBACnB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CACZ,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;aAClB,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;aAC/C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;aACzB,IAAI,CAAC,IAAI,CAAC;KAChB,CAAC;AACJ,CAAC","sourcesContent":["export type CraftServerStyleCollector = Readonly<{\n acquire(key: string, css: string, order: number): () => void;\n cssText(): string;\n}>;\n\nexport function createServerStyleCollector(): CraftServerStyleCollector {\n const entries = new Map<\n string,\n { readonly css: string; readonly order: number; refs: number }\n >();\n return {\n acquire(key, css, order) {\n const current = entries.get(key);\n if (current) current.refs += 1;\n else entries.set(key, { css, order, refs: 1 });\n return () => {\n const entry = entries.get(key);\n if (!entry) return;\n entry.refs = Math.max(0, entry.refs - 1);\n };\n },\n cssText: () =>\n [...entries.values()]\n .sort((left, right) => left.order - right.order)\n .map((entry) => entry.css)\n .join('\\n'),\n };\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { type SsrMode, type CraftSsrRuntime } from '@craft-ts/core';
2
+ export declare class CraftSsrCoordinator implements CraftSsrRuntime {
3
+ private readonly pending;
4
+ private readonly listeners;
5
+ private failure;
6
+ private readonly decideResource;
7
+ constructor(decideResource?: (source: string, mode: SsrMode) => void);
8
+ suspend(token: object, source: string, mode: SsrMode | undefined, options?: Readonly<{
9
+ route?: string;
10
+ timeoutMs?: number;
11
+ }>): void;
12
+ resume(token: object): void;
13
+ track(source: string, work: PromiseLike<unknown>): void;
14
+ unhandled(source: string, route?: string): never;
15
+ untilSettled(timeoutMs: number, signal?: AbortSignal): Promise<void>;
16
+ sources(): readonly string[];
17
+ private throwFailure;
18
+ private nextChange;
19
+ }
20
+ //# sourceMappingURL=ssr-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-coordinator.d.ts","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/ssr-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGpB;IACJ,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAEjB;gBAEF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI;IAIpE,OAAO,CACL,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,OAAO,GAAE,QAAQ,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAM,GAC7D,IAAI;IAiBP,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,IAAI;IAYvD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK;IAI1C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAa1E,OAAO,IAAI,SAAS,MAAM,EAAE;IAM5B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,UAAU;CA2BnB"}
@@ -0,0 +1,99 @@
1
+ import { CraftSsrTimeoutError, CraftUnhandledSsrResolutionError, } from '@craft-ts/core';
2
+ export class CraftSsrCoordinator {
3
+ pending = new Map();
4
+ listeners = new Set();
5
+ failure;
6
+ decideResource;
7
+ constructor(decideResource) {
8
+ this.decideResource = decideResource;
9
+ }
10
+ suspend(token, source, mode, options = {}) {
11
+ if (mode === undefined) {
12
+ throw new CraftUnhandledSsrResolutionError(source, options.route);
13
+ }
14
+ this.decideResource?.(source, mode);
15
+ if (mode !== 'block')
16
+ return;
17
+ const timeoutMs = options.timeoutMs;
18
+ const timer = timeoutMs !== undefined
19
+ ? setTimeout(() => {
20
+ this.failure ??= new CraftSsrTimeoutError(timeoutMs, [source]);
21
+ this.resume(token);
22
+ }, timeoutMs)
23
+ : undefined;
24
+ this.pending.set(token, { source, ...(timer ? { timer } : {}) });
25
+ }
26
+ resume(token) {
27
+ const entry = this.pending.get(token);
28
+ if (!entry)
29
+ return;
30
+ if (entry.timer)
31
+ clearTimeout(entry.timer);
32
+ this.pending.delete(token);
33
+ for (const listener of [...this.listeners])
34
+ listener();
35
+ }
36
+ track(source, work) {
37
+ const token = {};
38
+ this.pending.set(token, { source });
39
+ Promise.resolve(work).then(() => this.resume(token), (error) => {
40
+ this.failure ??= error;
41
+ this.resume(token);
42
+ });
43
+ }
44
+ unhandled(source, route) {
45
+ throw new CraftUnhandledSsrResolutionError(source, route);
46
+ }
47
+ async untilSettled(timeoutMs, signal) {
48
+ const startedAt = Date.now();
49
+ while (this.pending.size > 0) {
50
+ this.throwFailure();
51
+ const remaining = timeoutMs - (Date.now() - startedAt);
52
+ if (remaining <= 0) {
53
+ throw new CraftSsrTimeoutError(timeoutMs, this.sources());
54
+ }
55
+ await this.nextChange(remaining, signal);
56
+ }
57
+ this.throwFailure();
58
+ }
59
+ sources() {
60
+ return [
61
+ ...new Set([...this.pending.values()].map((entry) => entry.source)),
62
+ ];
63
+ }
64
+ throwFailure() {
65
+ if (this.failure === undefined)
66
+ return;
67
+ const failure = this.failure;
68
+ this.failure = undefined;
69
+ throw failure;
70
+ }
71
+ nextChange(timeoutMs, signal) {
72
+ return new Promise((resolve, reject) => {
73
+ const done = () => {
74
+ cleanup();
75
+ resolve();
76
+ };
77
+ const aborted = () => {
78
+ cleanup();
79
+ reject(signal?.reason ?? new DOMException('Aborted', 'AbortError'));
80
+ };
81
+ const timer = setTimeout(() => {
82
+ cleanup();
83
+ reject(new CraftSsrTimeoutError(timeoutMs, this.sources()));
84
+ }, timeoutMs);
85
+ const cleanup = () => {
86
+ clearTimeout(timer);
87
+ this.listeners.delete(done);
88
+ signal?.removeEventListener('abort', aborted);
89
+ };
90
+ if (signal?.aborted) {
91
+ aborted();
92
+ return;
93
+ }
94
+ this.listeners.add(done);
95
+ signal?.addEventListener('abort', aborted, { once: true });
96
+ });
97
+ }
98
+ }
99
+ //# sourceMappingURL=ssr-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr-coordinator.js","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/ssr-coordinator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CraftSsrTimeoutError,\n CraftUnhandledSsrResolutionError,\n type SsrMode,\n type CraftSsrRuntime,\n} from '@craft-ts/core';\n\nexport class CraftSsrCoordinator implements CraftSsrRuntime {\n private readonly pending = new Map<\n object,\n { readonly source: string; readonly timer?: ReturnType<typeof setTimeout> }\n >();\n private readonly listeners = new Set<() => void>();\n private failure: unknown;\n private readonly decideResource:\n | ((source: string, mode: SsrMode) => void)\n | undefined;\n\n constructor(decideResource?: (source: string, mode: SsrMode) => void) {\n this.decideResource = decideResource;\n }\n\n suspend(\n token: object,\n source: string,\n mode: SsrMode | undefined,\n options: Readonly<{ route?: string; timeoutMs?: number }> = {},\n ): void {\n if (mode === undefined) {\n throw new CraftUnhandledSsrResolutionError(source, options.route);\n }\n this.decideResource?.(source, mode);\n if (mode !== 'block') return;\n const timeoutMs = options.timeoutMs;\n const timer =\n timeoutMs !== undefined\n ? setTimeout(() => {\n this.failure ??= new CraftSsrTimeoutError(timeoutMs, [source]);\n this.resume(token);\n }, timeoutMs)\n : undefined;\n this.pending.set(token, { source, ...(timer ? { timer } : {}) });\n }\n\n resume(token: object): void {\n const entry = this.pending.get(token);\n if (!entry) return;\n if (entry.timer) clearTimeout(entry.timer);\n this.pending.delete(token);\n for (const listener of [...this.listeners]) listener();\n }\n\n track(source: string, work: PromiseLike<unknown>): void {\n const token = {};\n this.pending.set(token, { source });\n Promise.resolve(work).then(\n () => this.resume(token),\n (error) => {\n this.failure ??= error;\n this.resume(token);\n },\n );\n }\n\n unhandled(source: string, route?: string): never {\n throw new CraftUnhandledSsrResolutionError(source, route);\n }\n\n async untilSettled(timeoutMs: number, signal?: AbortSignal): Promise<void> {\n const startedAt = Date.now();\n while (this.pending.size > 0) {\n this.throwFailure();\n const remaining = timeoutMs - (Date.now() - startedAt);\n if (remaining <= 0) {\n throw new CraftSsrTimeoutError(timeoutMs, this.sources());\n }\n await this.nextChange(remaining, signal);\n }\n this.throwFailure();\n }\n\n sources(): readonly string[] {\n return [\n ...new Set([...this.pending.values()].map((entry) => entry.source)),\n ];\n }\n\n private throwFailure(): void {\n if (this.failure === undefined) return;\n const failure = this.failure;\n this.failure = undefined;\n throw failure;\n }\n\n private nextChange(timeoutMs: number, signal?: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const done = () => {\n cleanup();\n resolve();\n };\n const aborted = () => {\n cleanup();\n reject(signal?.reason ?? new DOMException('Aborted', 'AbortError'));\n };\n const timer = setTimeout(() => {\n cleanup();\n reject(new CraftSsrTimeoutError(timeoutMs, this.sources()));\n }, timeoutMs);\n const cleanup = () => {\n clearTimeout(timer);\n this.listeners.delete(done);\n signal?.removeEventListener('abort', aborted);\n };\n if (signal?.aborted) {\n aborted();\n return;\n }\n this.listeners.add(done);\n signal?.addEventListener('abort', aborted, { once: true });\n });\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { CraftDomAdapter } from '@craft-ts/core';
2
+ export type StringDom = Readonly<{
3
+ document: Document;
4
+ adapter: CraftDomAdapter;
5
+ createHost(tag?: string): Element;
6
+ serialize(node: Node): string;
7
+ }>;
8
+ export declare function createStringDomAdapter(): StringDom;
9
+ //# sourceMappingURL=string-dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-dom.d.ts","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/string-dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA6QtD,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,eAAe,CAAC;IACzB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;CAC/B,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,IAAI,SAAS,CAoClD"}
@@ -0,0 +1,377 @@
1
+ import { hydrationKeyOf } from './hydration-metadata';
2
+ class StringNode {
3
+ parentNode = null;
4
+ ownerDocument;
5
+ constructor(ownerDocument) {
6
+ this.ownerDocument = ownerDocument;
7
+ }
8
+ get parentElement() {
9
+ return this.parentNode?.nodeType === 1
10
+ ? this.parentNode
11
+ : null;
12
+ }
13
+ get nextSibling() {
14
+ if (!this.parentNode)
15
+ return null;
16
+ const index = this.parentNode.childNodes.indexOf(this);
17
+ return this.parentNode.childNodes[index + 1] ?? null;
18
+ }
19
+ get previousSibling() {
20
+ if (!this.parentNode)
21
+ return null;
22
+ const index = this.parentNode.childNodes.indexOf(this);
23
+ return index > 0 ? this.parentNode.childNodes[index - 1] : null;
24
+ }
25
+ getRootNode() {
26
+ return this.parentNode?.getRootNode() ?? this;
27
+ }
28
+ remove() {
29
+ this.parentNode?.removeChild(this);
30
+ }
31
+ }
32
+ class StringParentNode extends StringNode {
33
+ childNodes = [];
34
+ nodeType = 11;
35
+ get firstChild() {
36
+ return this.childNodes[0] ?? null;
37
+ }
38
+ get lastChild() {
39
+ return this.childNodes[this.childNodes.length - 1] ?? null;
40
+ }
41
+ appendChild(child) {
42
+ return this.insertBefore(child, null);
43
+ }
44
+ insertBefore(child, before) {
45
+ if (child === before)
46
+ return child;
47
+ child.parentNode?.removeChild(child);
48
+ if (child.nodeType === 11) {
49
+ for (const nested of [
50
+ ...child.childNodes,
51
+ ]) {
52
+ this.insertBefore(nested, before);
53
+ }
54
+ return child;
55
+ }
56
+ const index = before === null
57
+ ? this.childNodes.length
58
+ : this.childNodes.indexOf(before);
59
+ if (index < 0)
60
+ throw new Error('String DOM insertBefore anchor is not a child.');
61
+ this.childNodes.splice(index, 0, child);
62
+ child.parentNode = this;
63
+ return child;
64
+ }
65
+ removeChild(child) {
66
+ const index = this.childNodes.indexOf(child);
67
+ if (index < 0)
68
+ throw new Error('String DOM removeChild target is not a child.');
69
+ this.childNodes.splice(index, 1);
70
+ child.parentNode = null;
71
+ return child;
72
+ }
73
+ contains(node) {
74
+ if (node === this)
75
+ return true;
76
+ return this.childNodes.some((child) => child === node ||
77
+ (child instanceof StringParentNode && child.contains(node)));
78
+ }
79
+ get textContent() {
80
+ return this.childNodes.map((child) => child.textContent).join('');
81
+ }
82
+ set textContent(value) {
83
+ for (const child of this.childNodes)
84
+ child.parentNode = null;
85
+ this.childNodes.length = 0;
86
+ if (value)
87
+ this.appendChild(this.ownerDocument.createTextNode(value));
88
+ }
89
+ }
90
+ class StringText extends StringNode {
91
+ nodeType = 3;
92
+ nodeValue;
93
+ constructor(ownerDocument, value) {
94
+ super(ownerDocument);
95
+ this.nodeValue = value;
96
+ }
97
+ get textContent() {
98
+ return this.nodeValue;
99
+ }
100
+ set textContent(value) {
101
+ this.nodeValue = value ?? '';
102
+ }
103
+ }
104
+ class StringComment extends StringNode {
105
+ nodeType = 8;
106
+ data;
107
+ constructor(ownerDocument, value) {
108
+ super(ownerDocument);
109
+ this.data = value;
110
+ }
111
+ get textContent() {
112
+ return this.data;
113
+ }
114
+ set textContent(value) {
115
+ this.data = value ?? '';
116
+ }
117
+ }
118
+ class StringDocumentFragment extends StringParentNode {
119
+ nodeType = 11;
120
+ }
121
+ class StringElement extends StringParentNode {
122
+ nodeType = 1;
123
+ attributes = new Map();
124
+ tagName;
125
+ localName;
126
+ style;
127
+ value = '';
128
+ checked = false;
129
+ disabled = false;
130
+ multiple = false;
131
+ selected = false;
132
+ open = false;
133
+ constructor(ownerDocument, tag) {
134
+ super(ownerDocument);
135
+ this.localName = tag.toLowerCase();
136
+ this.tagName = this.localName.toUpperCase();
137
+ this.style = createStyleDeclaration((css) => {
138
+ if (css)
139
+ this.attributes.set('style', css);
140
+ else
141
+ this.attributes.delete('style');
142
+ });
143
+ }
144
+ setAttribute(name, value) {
145
+ this.attributes.set(name, String(value));
146
+ }
147
+ getAttribute(name) {
148
+ return this.attributes.get(name) ?? null;
149
+ }
150
+ hasAttribute(name) {
151
+ return this.attributes.has(name);
152
+ }
153
+ removeAttribute(name) {
154
+ this.attributes.delete(name);
155
+ }
156
+ addEventListener() {
157
+ return undefined;
158
+ }
159
+ removeEventListener() {
160
+ return undefined;
161
+ }
162
+ focus() {
163
+ return undefined;
164
+ }
165
+ showModal() {
166
+ this.open = true;
167
+ this.setAttribute('open', '');
168
+ }
169
+ close() {
170
+ this.open = false;
171
+ this.removeAttribute('open');
172
+ }
173
+ querySelector(selector) {
174
+ return this.querySelectorAll(selector)[0] ?? null;
175
+ }
176
+ querySelectorAll(selector) {
177
+ const result = [];
178
+ const visit = (parent) => {
179
+ for (const child of parent.childNodes) {
180
+ if (child instanceof StringElement) {
181
+ if (matchesSelector(child, selector))
182
+ result.push(child);
183
+ visit(child);
184
+ }
185
+ }
186
+ };
187
+ visit(this);
188
+ return result;
189
+ }
190
+ }
191
+ class StringDocument extends StringParentNode {
192
+ nodeType = 9;
193
+ ownerDocument;
194
+ defaultView = undefined;
195
+ activeElement = null;
196
+ title = '';
197
+ cookie = '';
198
+ visibilityState = 'visible';
199
+ documentElement;
200
+ head;
201
+ body;
202
+ constructor() {
203
+ // The document is its own creation context in this deliberately small DOM.
204
+ super(undefined);
205
+ this.ownerDocument = this;
206
+ this.documentElement = new StringElement(this, 'html');
207
+ this.head = new StringElement(this, 'head');
208
+ this.body = new StringElement(this, 'body');
209
+ this.documentElement.appendChild(this.head);
210
+ this.documentElement.appendChild(this.body);
211
+ }
212
+ hasFocus() {
213
+ return false;
214
+ }
215
+ createElement(tag) {
216
+ return new StringElement(this, tag);
217
+ }
218
+ createTextNode(value) {
219
+ return new StringText(this, value);
220
+ }
221
+ createComment(value) {
222
+ return new StringComment(this, value);
223
+ }
224
+ createDocumentFragment() {
225
+ return new StringDocumentFragment(this);
226
+ }
227
+ }
228
+ export function createStringDomAdapter() {
229
+ const document = new StringDocument();
230
+ const adapter = {
231
+ createElement: (tag) => document.createElement(tag),
232
+ createText: (value) => document.createTextNode(value),
233
+ createComment: (value) => document.createComment(value),
234
+ createFragment: () => document.createDocumentFragment(),
235
+ appendChild: (parent, child) => asParent(parent).appendChild(child),
236
+ insertBefore: (parent, child, before) => asParent(parent).insertBefore(child, before),
237
+ removeChild: (parent, child) => asParent(parent).removeChild(child),
238
+ setAttribute: (element, name, value) => element.setAttribute(name, value),
239
+ removeAttribute: (element, name) => element.removeAttribute(name),
240
+ setProperty: (element, name, value) => setStringProperty(element, name, value),
241
+ setValue: (node, value) => {
242
+ node.nodeValue = value;
243
+ },
244
+ listen: () => () => undefined,
245
+ };
246
+ return {
247
+ document: document,
248
+ adapter,
249
+ createHost: (tag = 'craft-root') => document.createElement(tag),
250
+ serialize: (node) => serializeNode(node),
251
+ };
252
+ }
253
+ function asParent(node) {
254
+ return node;
255
+ }
256
+ function setStringProperty(element, name, value) {
257
+ Reflect.set(element, name, value);
258
+ const attribute = name === 'htmlFor' ? 'for' : name;
259
+ if (typeof value === 'boolean') {
260
+ if (value)
261
+ element.setAttribute(attribute, '');
262
+ else
263
+ element.removeAttribute(attribute);
264
+ }
265
+ else if (value === null || value === undefined || value === false) {
266
+ element.removeAttribute(attribute);
267
+ }
268
+ else {
269
+ element.setAttribute(attribute, String(value));
270
+ }
271
+ }
272
+ function createStyleDeclaration(update) {
273
+ const values = new Map();
274
+ const sync = () => update([...values].map(([key, value]) => `${key}: ${value}`).join('; '));
275
+ const target = {
276
+ setProperty(name, value) {
277
+ if (value === null || value === '')
278
+ values.delete(name);
279
+ else
280
+ values.set(name, String(value));
281
+ sync();
282
+ },
283
+ removeProperty(name) {
284
+ const previous = values.get(name) ?? '';
285
+ values.delete(name);
286
+ sync();
287
+ return previous;
288
+ },
289
+ getPropertyValue(name) {
290
+ return values.get(name) ?? '';
291
+ },
292
+ };
293
+ return new Proxy(target, {
294
+ get(current, property, receiver) {
295
+ if (typeof property === 'string' && values.has(property)) {
296
+ return values.get(property);
297
+ }
298
+ return Reflect.get(current, property, receiver);
299
+ },
300
+ set(current, property, value, receiver) {
301
+ if (typeof property === 'string' && !(property in current)) {
302
+ if (value === null || value === undefined || value === '') {
303
+ values.delete(property);
304
+ }
305
+ else {
306
+ values.set(property, String(value));
307
+ }
308
+ sync();
309
+ return true;
310
+ }
311
+ return Reflect.set(current, property, value, receiver);
312
+ },
313
+ });
314
+ }
315
+ function matchesSelector(element, selector) {
316
+ const [tag, className] = selector.split('.', 2);
317
+ if (tag && tag !== '*' && element.localName !== tag.toLowerCase())
318
+ return false;
319
+ if (!className)
320
+ return true;
321
+ return (element.getAttribute('class') ?? '').split(/\s+/).includes(className);
322
+ }
323
+ const VOID_ELEMENTS = new Set([
324
+ 'area',
325
+ 'base',
326
+ 'br',
327
+ 'col',
328
+ 'embed',
329
+ 'hr',
330
+ 'img',
331
+ 'input',
332
+ 'link',
333
+ 'meta',
334
+ 'param',
335
+ 'source',
336
+ 'track',
337
+ 'wbr',
338
+ ]);
339
+ function serializeNode(node) {
340
+ if (node instanceof StringText) {
341
+ const text = escapeText(node.nodeValue);
342
+ const key = hydrationKeyOf(node);
343
+ return key
344
+ ? `<!--craft-text:start|hk:${escapeComment(key)}-->${text}<!--craft-text:end|hk:${escapeComment(key)}-->`
345
+ : text;
346
+ }
347
+ if (node instanceof StringComment) {
348
+ return `<!--${escapeComment(node.data)}-->`;
349
+ }
350
+ if (node instanceof StringElement) {
351
+ const attributes = [...node.attributes]
352
+ .sort(([left], [right]) => left.localeCompare(right))
353
+ .map(([name, value]) => value === '' ? ` ${name}` : ` ${name}="${escapeAttribute(value)}"`)
354
+ .join('');
355
+ const open = `<${node.localName}${attributes}>`;
356
+ if (VOID_ELEMENTS.has(node.localName))
357
+ return open;
358
+ return `${open}${node.childNodes.map(serializeNode).join('')}</${node.localName}>`;
359
+ }
360
+ if (node instanceof StringParentNode) {
361
+ return node.childNodes.map(serializeNode).join('');
362
+ }
363
+ return '';
364
+ }
365
+ function escapeText(value) {
366
+ return value
367
+ .replaceAll('&', '&amp;')
368
+ .replaceAll('<', '&lt;')
369
+ .replaceAll('>', '&gt;');
370
+ }
371
+ function escapeAttribute(value) {
372
+ return escapeText(value).replaceAll('"', '&quot;');
373
+ }
374
+ function escapeComment(value) {
375
+ return value.replaceAll('--', '- -');
376
+ }
377
+ //# sourceMappingURL=string-dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-dom.js","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/string-dom.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CraftDomAdapter } from '@craft-ts/core';\nimport { hydrationKeyOf } from './hydration-metadata';\n\nabstract class StringNode {\n abstract readonly nodeType: number;\n parentNode: StringParentNode | null = null;\n readonly ownerDocument: StringDocument;\n\n protected constructor(ownerDocument: StringDocument) {\n this.ownerDocument = ownerDocument;\n }\n\n get parentElement(): StringElement | null {\n return this.parentNode?.nodeType === 1\n ? (this.parentNode as unknown as StringElement)\n : null;\n }\n\n get nextSibling(): StringNode | null {\n if (!this.parentNode) return null;\n const index = this.parentNode.childNodes.indexOf(this);\n return this.parentNode.childNodes[index + 1] ?? null;\n }\n\n get previousSibling(): StringNode | null {\n if (!this.parentNode) return null;\n const index = this.parentNode.childNodes.indexOf(this);\n return index > 0 ? this.parentNode.childNodes[index - 1] : null;\n }\n\n getRootNode(): StringNode {\n return this.parentNode?.getRootNode() ?? this;\n }\n\n remove(): void {\n this.parentNode?.removeChild(this);\n }\n\n abstract get textContent(): string;\n abstract set textContent(value: string | null);\n}\n\nclass StringParentNode extends StringNode {\n readonly childNodes: StringNode[] = [];\n readonly nodeType: number = 11;\n\n get firstChild(): StringNode | null {\n return this.childNodes[0] ?? null;\n }\n\n get lastChild(): StringNode | null {\n return this.childNodes[this.childNodes.length - 1] ?? null;\n }\n\n appendChild<T extends StringNode>(child: T): T {\n return this.insertBefore(child, null);\n }\n\n insertBefore<T extends StringNode>(child: T, before: StringNode | null): T {\n if (child === before) return child;\n child.parentNode?.removeChild(child);\n if (child.nodeType === 11) {\n for (const nested of [\n ...(child as unknown as StringParentNode).childNodes,\n ]) {\n this.insertBefore(nested, before);\n }\n return child;\n }\n const index =\n before === null\n ? this.childNodes.length\n : this.childNodes.indexOf(before);\n if (index < 0)\n throw new Error('String DOM insertBefore anchor is not a child.');\n this.childNodes.splice(index, 0, child);\n child.parentNode = this;\n return child;\n }\n\n removeChild<T extends StringNode>(child: T): T {\n const index = this.childNodes.indexOf(child);\n if (index < 0)\n throw new Error('String DOM removeChild target is not a child.');\n this.childNodes.splice(index, 1);\n child.parentNode = null;\n return child;\n }\n\n contains(node: StringNode): boolean {\n if (node === this) return true;\n return this.childNodes.some(\n (child) =>\n child === node ||\n (child instanceof StringParentNode && child.contains(node)),\n );\n }\n\n get textContent(): string {\n return this.childNodes.map((child) => child.textContent).join('');\n }\n\n set textContent(value: string | null) {\n for (const child of this.childNodes) child.parentNode = null;\n this.childNodes.length = 0;\n if (value) this.appendChild(this.ownerDocument.createTextNode(value));\n }\n}\n\nclass StringText extends StringNode {\n readonly nodeType = 3;\n nodeValue: string;\n\n constructor(ownerDocument: StringDocument, value: string) {\n super(ownerDocument);\n this.nodeValue = value;\n }\n\n get textContent(): string {\n return this.nodeValue;\n }\n\n set textContent(value: string | null) {\n this.nodeValue = value ?? '';\n }\n}\n\nclass StringComment extends StringNode {\n readonly nodeType = 8;\n data: string;\n\n constructor(ownerDocument: StringDocument, value: string) {\n super(ownerDocument);\n this.data = value;\n }\n\n get textContent(): string {\n return this.data;\n }\n\n set textContent(value: string | null) {\n this.data = value ?? '';\n }\n}\n\nclass StringDocumentFragment extends StringParentNode {\n override readonly nodeType: number = 11;\n}\n\nclass StringElement extends StringParentNode {\n override readonly nodeType: number = 1;\n readonly attributes = new Map<string, string>();\n readonly tagName: string;\n readonly localName: string;\n readonly style: CSSStyleDeclaration;\n value: unknown = '';\n checked = false;\n disabled = false;\n multiple = false;\n selected = false;\n open = false;\n\n constructor(ownerDocument: StringDocument, tag: string) {\n super(ownerDocument);\n this.localName = tag.toLowerCase();\n this.tagName = this.localName.toUpperCase();\n this.style = createStyleDeclaration((css) => {\n if (css) this.attributes.set('style', css);\n else this.attributes.delete('style');\n });\n }\n\n setAttribute(name: string, value: string): void {\n this.attributes.set(name, String(value));\n }\n\n getAttribute(name: string): string | null {\n return this.attributes.get(name) ?? null;\n }\n\n hasAttribute(name: string): boolean {\n return this.attributes.has(name);\n }\n\n removeAttribute(name: string): void {\n this.attributes.delete(name);\n }\n\n addEventListener(): void {\n return undefined;\n }\n removeEventListener(): void {\n return undefined;\n }\n focus(): void {\n return undefined;\n }\n showModal(): void {\n this.open = true;\n this.setAttribute('open', '');\n }\n close(): void {\n this.open = false;\n this.removeAttribute('open');\n }\n\n querySelector(selector: string): StringElement | null {\n return this.querySelectorAll(selector)[0] ?? null;\n }\n\n querySelectorAll(selector: string): StringElement[] {\n const result: StringElement[] = [];\n const visit = (parent: StringParentNode) => {\n for (const child of parent.childNodes) {\n if (child instanceof StringElement) {\n if (matchesSelector(child, selector)) result.push(child);\n visit(child);\n }\n }\n };\n visit(this);\n return result;\n }\n}\n\nclass StringDocument extends StringParentNode {\n override readonly nodeType: number = 9;\n override readonly ownerDocument: StringDocument;\n readonly defaultView = undefined;\n activeElement: StringElement | null = null;\n title = '';\n cookie = '';\n readonly visibilityState = 'visible';\n readonly documentElement: StringElement;\n readonly head: StringElement;\n readonly body: StringElement;\n\n constructor() {\n // The document is its own creation context in this deliberately small DOM.\n super(undefined as unknown as StringDocument);\n this.ownerDocument = this;\n this.documentElement = new StringElement(this, 'html');\n this.head = new StringElement(this, 'head');\n this.body = new StringElement(this, 'body');\n this.documentElement.appendChild(this.head);\n this.documentElement.appendChild(this.body);\n }\n\n hasFocus(): boolean {\n return false;\n }\n\n createElement(tag: string): StringElement {\n return new StringElement(this, tag);\n }\n\n createTextNode(value: string): StringText {\n return new StringText(this, value);\n }\n\n createComment(value: string): StringComment {\n return new StringComment(this, value);\n }\n\n createDocumentFragment(): StringDocumentFragment {\n return new StringDocumentFragment(this);\n }\n}\n\nexport type StringDom = Readonly<{\n document: Document;\n adapter: CraftDomAdapter;\n createHost(tag?: string): Element;\n serialize(node: Node): string;\n}>;\n\nexport function createStringDomAdapter(): StringDom {\n const document = new StringDocument();\n const adapter: CraftDomAdapter = {\n createElement: (tag) => document.createElement(tag) as unknown as Element,\n createText: (value) => document.createTextNode(value) as unknown as Text,\n createComment: (value) =>\n document.createComment(value) as unknown as Comment,\n createFragment: () =>\n document.createDocumentFragment() as unknown as DocumentFragment,\n appendChild: (parent, child) =>\n asParent(parent).appendChild(child as unknown as StringNode),\n insertBefore: (parent, child, before) =>\n asParent(parent).insertBefore(\n child as unknown as StringNode,\n before as unknown as StringNode | null,\n ),\n removeChild: (parent, child) =>\n asParent(parent).removeChild(child as unknown as StringNode),\n setAttribute: (element, name, value) =>\n (element as unknown as StringElement).setAttribute(name, value),\n removeAttribute: (element, name) =>\n (element as unknown as StringElement).removeAttribute(name),\n setProperty: (element, name, value) =>\n setStringProperty(element as unknown as StringElement, name, value),\n setValue: (node, value) => {\n (node as unknown as StringText).nodeValue = value;\n },\n listen: () => () => undefined,\n };\n return {\n document: document as unknown as Document,\n adapter,\n createHost: (tag = 'craft-root') =>\n document.createElement(tag) as unknown as Element,\n serialize: (node) => serializeNode(node as unknown as StringNode),\n };\n}\n\nfunction asParent(node: Node): StringParentNode {\n return node as unknown as StringParentNode;\n}\n\nfunction setStringProperty(\n element: StringElement,\n name: string,\n value: unknown,\n): void {\n Reflect.set(element, name, value);\n const attribute = name === 'htmlFor' ? 'for' : name;\n if (typeof value === 'boolean') {\n if (value) element.setAttribute(attribute, '');\n else element.removeAttribute(attribute);\n } else if (value === null || value === undefined || value === false) {\n element.removeAttribute(attribute);\n } else {\n element.setAttribute(attribute, String(value));\n }\n}\n\nfunction createStyleDeclaration(\n update: (css: string) => void,\n): CSSStyleDeclaration {\n const values = new Map<string, string>();\n const sync = () =>\n update([...values].map(([key, value]) => `${key}: ${value}`).join('; '));\n const target = {\n setProperty(name: string, value: string | null): void {\n if (value === null || value === '') values.delete(name);\n else values.set(name, String(value));\n sync();\n },\n removeProperty(name: string): string {\n const previous = values.get(name) ?? '';\n values.delete(name);\n sync();\n return previous;\n },\n getPropertyValue(name: string): string {\n return values.get(name) ?? '';\n },\n };\n return new Proxy(target, {\n get(current, property, receiver) {\n if (typeof property === 'string' && values.has(property)) {\n return values.get(property);\n }\n return Reflect.get(current, property, receiver);\n },\n set(current, property, value, receiver) {\n if (typeof property === 'string' && !(property in current)) {\n if (value === null || value === undefined || value === '') {\n values.delete(property);\n } else {\n values.set(property, String(value));\n }\n sync();\n return true;\n }\n return Reflect.set(current, property, value, receiver);\n },\n }) as unknown as CSSStyleDeclaration;\n}\n\nfunction matchesSelector(element: StringElement, selector: string): boolean {\n const [tag, className] = selector.split('.', 2);\n if (tag && tag !== '*' && element.localName !== tag.toLowerCase())\n return false;\n if (!className) return true;\n return (element.getAttribute('class') ?? '').split(/\\s+/).includes(className);\n}\n\nconst VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nfunction serializeNode(node: StringNode): string {\n if (node instanceof StringText) {\n const text = escapeText(node.nodeValue);\n const key = hydrationKeyOf(node);\n return key\n ? `<!--craft-text:start|hk:${escapeComment(key)}-->${text}<!--craft-text:end|hk:${escapeComment(key)}-->`\n : text;\n }\n if (node instanceof StringComment) {\n return `<!--${escapeComment(node.data)}-->`;\n }\n if (node instanceof StringElement) {\n const attributes = [...node.attributes]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([name, value]) =>\n value === '' ? ` ${name}` : ` ${name}=\"${escapeAttribute(value)}\"`,\n )\n .join('');\n const open = `<${node.localName}${attributes}>`;\n if (VOID_ELEMENTS.has(node.localName)) return open;\n return `${open}${node.childNodes.map(serializeNode).join('')}</${node.localName}>`;\n }\n if (node instanceof StringParentNode) {\n return node.childNodes.map(serializeNode).join('');\n }\n return '';\n}\n\nfunction escapeText(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;');\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeText(value).replaceAll('\"', '&quot;');\n}\n\nfunction escapeComment(value: string): string {\n return value.replaceAll('--', '- -');\n}\n"]}
@@ -0,0 +1,14 @@
1
+ import { type GetDeps } from '@craft-ts/core';
2
+ type StyleRoot = Document | ShadowRoot;
3
+ export type CraftStyleRegistry = {
4
+ acquire(root: StyleRoot, key: string, css: string, order: number): () => void;
5
+ };
6
+ export declare function createCraftStyleRegistry(): CraftStyleRegistry;
7
+ export declare const CRAFT_STYLE_REGISTRY: import("@craft-ts/core").CraftToken<CraftStyleRegistry>;
8
+ export declare const ɵfallbackCraftStyleRegistry: CraftStyleRegistry;
9
+ export type GenDeps_CraftStyleRegistry = GetDeps<{
10
+ deps: {};
11
+ provided: {};
12
+ }>;
13
+ export {};
14
+ //# sourceMappingURL=style-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-registry.d.ts","sourceRoot":"","sources":["../../../../../../libs/component/src/lib/render/style-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE1D,KAAK,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAgBvC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;CAC/E,CAAC;AAEF,wBAAgB,wBAAwB,IAAI,kBAAkB,CAiF7D;AAED,eAAO,MAAM,oBAAoB,yDACqB,CAAC;AAEvD,eAAO,MAAM,2BAA2B,oBAA6B,CAAC;AAEtE,MAAM,MAAM,0BAA0B,GAAG,OAAO,CAAC;IAC/C,IAAI,EAAE,EAAE,CAAC;IACT,QAAQ,EAAE,EAAE,CAAC;CACd,CAAC,CAAC"}