@takazudo/zfb 3.1.0 → 3.2.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.
- package/dist/config.d.ts +28 -3
- package/dist/config.js +23 -12
- package/dist/config.js.map +1 -1
- package/dist/content.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js.map +1 -1
- package/dist/island-boundary.d.ts +2 -2
- package/dist/island-boundary.js +4 -2
- package/dist/island-boundary.js.map +1 -1
- package/dist/island.d.ts +8 -4
- package/dist/island.js +1 -1
- package/dist/island.js.map +1 -1
- package/dist/jsx-types.d.ts +1 -1
- package/dist/jsx-types.js.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/slugify.js.map +1 -1
- package/dist/zudo-react/description.d.ts +18 -0
- package/dist/zudo-react/description.js +41 -0
- package/dist/zudo-react/description.js.map +1 -1
- package/dist/zudo-react/dom-bindings.d.ts +2 -1
- package/dist/zudo-react/dom-bindings.js +16 -22
- package/dist/zudo-react/dom-bindings.js.map +1 -1
- package/dist/zudo-react/forms.js.map +1 -1
- package/dist/zudo-react/hydrate.js +20 -30
- package/dist/zudo-react/hydrate.js.map +1 -1
- package/dist/zudo-react/index.d.ts +2 -1
- package/dist/zudo-react/index.js.map +1 -1
- package/dist/zudo-react/jsx-dev-runtime.d.ts +2 -6
- package/dist/zudo-react/jsx-dev-runtime.js +3 -3
- package/dist/zudo-react/jsx-dev-runtime.js.map +1 -1
- package/dist/zudo-react/jsx-runtime.js +2 -2
- package/dist/zudo-react/jsx-runtime.js.map +1 -1
- package/dist/zudo-react/jsx-types.d.ts +59 -23
- package/dist/zudo-react/jsx-types.js.map +1 -1
- package/dist/zudo-react/props-transport.d.ts +2 -0
- package/dist/zudo-react/props-transport.js +42 -14
- package/dist/zudo-react/props-transport.js.map +1 -1
- package/dist/zudo-react/raw-html.d.ts +1 -0
- package/dist/zudo-react/raw-html.js +120 -0
- package/dist/zudo-react/raw-html.js.map +1 -0
- package/dist/zudo-react/reactive.js.map +1 -1
- package/dist/zudo-react/render-html.d.ts +11 -1
- package/dist/zudo-react/render-html.js +83 -56
- package/dist/zudo-react/render-html.js.map +1 -1
- package/dist/zudo-react/root.js +24 -1
- package/dist/zudo-react/root.js.map +1 -1
- package/dist/zudo-react/server.d.ts +2 -0
- package/dist/zudo-react/server.js.map +1 -1
- package/dist/zudo-react/style.d.ts +10 -0
- package/dist/zudo-react/style.js +525 -0
- package/dist/zudo-react/style.js.map +1 -0
- package/dist/zudo-react/testing.d.ts +27 -0
- package/dist/zudo-react/testing.js +117 -0
- package/dist/zudo-react/testing.js.map +1 -0
- package/dist/zudo-react/vocabulary.d.ts +7 -0
- package/dist/zudo-react/vocabulary.js +64 -5
- package/dist/zudo-react/vocabulary.js.map +1 -1
- package/package.json +16 -10
|
@@ -1,3 +1,13 @@
|
|
|
1
|
-
import { type Child } from "./description.js";
|
|
1
|
+
import { type Child, type DescriptionSite } from "./description.js";
|
|
2
2
|
import type { RenderOptions } from "./server.js";
|
|
3
|
+
export interface RenderDiagnostic {
|
|
4
|
+
readonly code: string;
|
|
5
|
+
readonly path: string;
|
|
6
|
+
readonly component: string;
|
|
7
|
+
readonly spelling?: {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly suggestion?: string;
|
|
10
|
+
};
|
|
11
|
+
readonly site?: DescriptionSite;
|
|
12
|
+
}
|
|
3
13
|
export declare function renderHtml(node: Child, options: RenderOptions): string;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { serializeStyle } from "./style.js";
|
|
2
|
+
import { Fragment, descriptionSite, isDescription, } from "./description.js";
|
|
2
3
|
import { escapeAttribute, escapeText } from "./escape.js";
|
|
4
|
+
import { rawHtmlReserved } from "./raw-html.js";
|
|
3
5
|
import { readSnapshot } from "./reactive.js";
|
|
4
6
|
import { createScope, withScope } from "./scope.js";
|
|
5
|
-
import {
|
|
7
|
+
import { emptyChildren, normalizeProps } from "./props-transport.js";
|
|
6
8
|
import { islandRootType } from "./island-root-type.js";
|
|
7
9
|
import { isShowType, isForType, showProps, forProps, keyed, keyPayload, view, } from "./structure.js";
|
|
8
|
-
import { booleanAttrs, commonAttrs, dialectSuggestion, formProps, htmlAttrs, htmlTags, isDialectProp, reactiveModelSuggestion, svgAttrs, svgTags, voidTags, } from "./vocabulary.js";
|
|
10
|
+
import { attributeError, attributeText, booleanAttrs, commonAttrs, dialectSuggestion, emptyIframeChildren, formProps, htmlAttrs, htmlTags, isDialectProp, reactiveModelSuggestion, svgAttrs, svgTags, voidTags, } from "./vocabulary.js";
|
|
9
11
|
const words = (value) => new Set(value.split(" "));
|
|
10
12
|
const reserved = words("key ref children rawHtml");
|
|
11
13
|
const sensitive = words("noscript xmp iframe noembed noframes plaintext");
|
|
@@ -17,8 +19,19 @@ const tableChildren = {
|
|
|
17
19
|
tr: words("td th"),
|
|
18
20
|
colgroup: words("col"),
|
|
19
21
|
};
|
|
20
|
-
function fail(code, context, detail) {
|
|
21
|
-
|
|
22
|
+
function fail(code, context, detail, spelling) {
|
|
23
|
+
const component = context.identity?.component ?? "static render";
|
|
24
|
+
const site = context.node && descriptionSite(context.node);
|
|
25
|
+
const diagnostic = {
|
|
26
|
+
code,
|
|
27
|
+
path: context.path,
|
|
28
|
+
component,
|
|
29
|
+
...(spelling && { spelling }),
|
|
30
|
+
...(site && { site }),
|
|
31
|
+
};
|
|
32
|
+
throw Object.assign(new TypeError(`${code}: ${detail} at ${context.path} in ${component}`), {
|
|
33
|
+
diagnostic,
|
|
34
|
+
});
|
|
22
35
|
}
|
|
23
36
|
function reactive(value) {
|
|
24
37
|
return (typeof value === "object" &&
|
|
@@ -62,24 +75,14 @@ function renderText(value, context) {
|
|
|
62
75
|
fail("ZR_CHILD", context, `invalid scalar ${typeof value}`);
|
|
63
76
|
}
|
|
64
77
|
function style(value, context) {
|
|
65
|
-
|
|
66
|
-
return value;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
let result = "";
|
|
73
|
-
for (const [name, entry] of Object.entries(value)) {
|
|
74
|
-
if (!/^(--[a-zA-Z0-9_-]+|[a-z][a-z0-9-]*)$/.test(name) || /[A-Z]/.test(name))
|
|
75
|
-
fail("ZR_STYLE", context, `invalid property ${name}`);
|
|
76
|
-
if (entry == null)
|
|
77
|
-
continue;
|
|
78
|
-
if (typeof entry !== "string" && !(typeof entry === "number" && Number.isFinite(entry)))
|
|
79
|
-
fail("ZR_STYLE", context, `invalid value for ${name}`);
|
|
80
|
-
result += `${name}:${entry};`;
|
|
78
|
+
try {
|
|
79
|
+
return serializeStyle(value);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (error instanceof TypeError)
|
|
83
|
+
fail("ZR_STYLE", context, error.message.replace(/^ZR_STYLE: /, ""));
|
|
84
|
+
throw error;
|
|
81
85
|
}
|
|
82
|
-
return result;
|
|
83
86
|
}
|
|
84
87
|
function attributes(tag, props, context, namespace, custom) {
|
|
85
88
|
let output = "";
|
|
@@ -90,7 +93,7 @@ function attributes(tag, props, context, namespace, custom) {
|
|
|
90
93
|
continue;
|
|
91
94
|
if (isDialectProp(name, namespace, custom)) {
|
|
92
95
|
const suggestion = dialectSuggestion(name, namespace, custom);
|
|
93
|
-
fail("ZR_PROP_DIALECT", context, `${tag}.${name}${suggestion ? ` (use \`${suggestion}\` instead of \`${name}\`)` : ""}
|
|
96
|
+
fail("ZR_PROP_DIALECT", context, `${tag}.${name}${suggestion ? ` (use \`${suggestion}\` instead of \`${name}\`)` : ""}`, suggestion ? { name, suggestion } : { name });
|
|
94
97
|
}
|
|
95
98
|
if (name.startsWith("on:")) {
|
|
96
99
|
if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))
|
|
@@ -116,35 +119,28 @@ function attributes(tag, props, context, namespace, custom) {
|
|
|
116
119
|
const suggestion = reactiveModelSuggestion(tag, name, String(read(props.type) ?? "text"), custom);
|
|
117
120
|
fail("ZR_MODEL_UNSUPPORTED", context, `${tag}.${name} requires ${suggestion ?? "a static value"}`);
|
|
118
121
|
}
|
|
122
|
+
if (/^on[a-z]/.test(name) && typeof value === "function")
|
|
123
|
+
fail("ZR_PROP_DIALECT", context, `${tag}.${name} must use on:${name.slice(2)}`, {
|
|
124
|
+
name,
|
|
125
|
+
suggestion: `on:${name.slice(2)}`,
|
|
126
|
+
});
|
|
127
|
+
const error = attributeError(name, value, custom);
|
|
128
|
+
if (error)
|
|
129
|
+
fail("ZR_ATTRIBUTE", context, `${tag}.${name} ${error}`);
|
|
119
130
|
if (value == null)
|
|
120
131
|
continue;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
output += ` style="${escapeAttribute(style(value, context))}"`;
|
|
127
|
-
else if (booleanAttrs.has(name)) {
|
|
128
|
-
if (typeof value !== "boolean")
|
|
129
|
-
fail("ZR_ATTRIBUTE", context, `${tag}.${name} requires a boolean`);
|
|
130
|
-
if (value)
|
|
131
|
-
output += ` ${name}`;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
if (typeof value !== "string" &&
|
|
135
|
-
typeof value !== "boolean" &&
|
|
136
|
-
!(typeof value === "number" && Number.isFinite(value)))
|
|
137
|
-
fail("ZR_ATTRIBUTE", context, `${tag}.${name} requires a scalar`);
|
|
138
|
-
if (typeof value === "boolean" && !name.startsWith("aria-") && !name.startsWith("data-"))
|
|
139
|
-
fail("ZR_ATTRIBUTE", context, `${tag}.${name} requires a string`);
|
|
140
|
-
if (/^on[a-z]/.test(name) && typeof value !== "string")
|
|
141
|
-
fail("ZR_ATTRIBUTE", context, `${tag}.${name} requires a string`);
|
|
142
|
-
output += ` ${name}="${escapeAttribute(String(value))}"`;
|
|
143
|
-
}
|
|
132
|
+
const text = name === "style" ? style(value, context) : attributeText(name, value);
|
|
133
|
+
if (text === null)
|
|
134
|
+
continue;
|
|
135
|
+
output +=
|
|
136
|
+
booleanAttrs.has(name) && value === true ? ` ${name}` : ` ${name}="${escapeAttribute(text)}"`;
|
|
144
137
|
}
|
|
145
138
|
return output;
|
|
146
139
|
}
|
|
147
140
|
function restricted(value, context, namespace, parent) {
|
|
141
|
+
return tracked(value, context, () => restrictedValue(value, context, namespace, parent));
|
|
142
|
+
}
|
|
143
|
+
function restrictedValue(value, context, namespace, parent) {
|
|
148
144
|
if (value == null || typeof value === "boolean")
|
|
149
145
|
return "";
|
|
150
146
|
if (Array.isArray(value))
|
|
@@ -169,7 +165,7 @@ function element(description, context, namespace, parent) {
|
|
|
169
165
|
const childNamespace = tag === "foreignObject" ? "html" : elementNamespace;
|
|
170
166
|
if (elementNamespace === "svg" ? !svgTags.has(tag) : !custom && !htmlTags.has(tag))
|
|
171
167
|
fail("ZR_TAG", context, tag);
|
|
172
|
-
if (context.identity && (tag === "template" || sensitive.has(tag)))
|
|
168
|
+
if (context.identity && (tag === "template" || (tag !== "iframe" && sensitive.has(tag))))
|
|
173
169
|
fail("ZR_PARSER_CONTEXT", context, tag);
|
|
174
170
|
if (parent in tableChildren && !tableChildren[parent]?.has(tag))
|
|
175
171
|
fail("ZR_PARSER_CONTEXT", context, `${parent} > ${tag}`);
|
|
@@ -184,6 +180,12 @@ function element(description, context, namespace, parent) {
|
|
|
184
180
|
: `form:${context.nextFormId++}`;
|
|
185
181
|
const source = description.props;
|
|
186
182
|
const props = { ...source };
|
|
183
|
+
if (tag === "iframe") {
|
|
184
|
+
if (Object.hasOwn(props, "rawHtml"))
|
|
185
|
+
fail("ZR_RAW_HTML", context, "iframe forbids rawHtml");
|
|
186
|
+
if (!emptyIframeChildren(props.children))
|
|
187
|
+
fail("ZR_PARSER_CONTEXT", context, "iframe requires empty children");
|
|
188
|
+
}
|
|
187
189
|
const hasValue = source.modelValue !== undefined;
|
|
188
190
|
const hasChecked = source.modelChecked !== undefined;
|
|
189
191
|
if ((hasValue && hasChecked) ||
|
|
@@ -311,7 +313,7 @@ function element(description, context, namespace, parent) {
|
|
|
311
313
|
const payload = read(raw);
|
|
312
314
|
if (typeof payload !== "string")
|
|
313
315
|
fail("ZR_RAW_HTML", context, `${tag} requires string rawHtml`);
|
|
314
|
-
if (
|
|
316
|
+
if (rawHtmlReserved(payload, tag))
|
|
315
317
|
fail("ZR_RAW_HTML", context, "reserved boundary in rawHtml");
|
|
316
318
|
if ((tag === "script" && /<\/script/i.test(payload)) ||
|
|
317
319
|
(tag === "style" && /<\/style/i.test(payload)))
|
|
@@ -324,6 +326,9 @@ function element(description, context, namespace, parent) {
|
|
|
324
326
|
fail("ZR_MODEL_VALUE", context, "textarea requires string");
|
|
325
327
|
content = `${value.startsWith("\n") ? "\n" : ""}${escapeText(value)}`;
|
|
326
328
|
}
|
|
329
|
+
else if (tag === "iframe") {
|
|
330
|
+
// The shell has no owned children; srcdoc belongs to the browser's foreign document.
|
|
331
|
+
}
|
|
327
332
|
else if (tag === "script" || tag === "style") {
|
|
328
333
|
if (hasChildren)
|
|
329
334
|
fail("ZR_RAW_HTML", context, `${tag} requires rawHtml`);
|
|
@@ -364,7 +369,22 @@ function element(description, context, namespace, parent) {
|
|
|
364
369
|
context.formId = previousFormId;
|
|
365
370
|
return `<${tag}${attrs}>${voidTags.has(tag) ? "" : `${content}</${tag}>`}`;
|
|
366
371
|
}
|
|
372
|
+
// A failure is attributed only to the value being rendered: a description's own site,
|
|
373
|
+
// or no site at all for scalars, promises and other non-description children.
|
|
374
|
+
function tracked(value, context, fn) {
|
|
375
|
+
const prior = context.node;
|
|
376
|
+
context.node = isDescription(value) ? value : undefined;
|
|
377
|
+
try {
|
|
378
|
+
return fn();
|
|
379
|
+
}
|
|
380
|
+
finally {
|
|
381
|
+
context.node = prior;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
367
384
|
function render(value, context, namespace, parent) {
|
|
385
|
+
return tracked(value, context, () => renderValue(value, context, namespace, parent));
|
|
386
|
+
}
|
|
387
|
+
function renderValue(value, context, namespace, parent) {
|
|
368
388
|
if (value == null || typeof value === "boolean")
|
|
369
389
|
return "";
|
|
370
390
|
if (Array.isArray(value))
|
|
@@ -453,9 +473,6 @@ function render(value, context, namespace, parent) {
|
|
|
453
473
|
context.scope = prior;
|
|
454
474
|
}
|
|
455
475
|
}
|
|
456
|
-
function empty(value) {
|
|
457
|
-
return (value == null || typeof value === "boolean" || (Array.isArray(value) && value.every(empty)));
|
|
458
|
-
}
|
|
459
476
|
function island(description, context, namespace, parent) {
|
|
460
477
|
if (context.boundary)
|
|
461
478
|
fail("ZR_NESTED_ISLAND", context, "nested island");
|
|
@@ -470,13 +487,13 @@ function island(description, context, namespace, parent) {
|
|
|
470
487
|
const component = child.type.displayName ?? child.type.name;
|
|
471
488
|
if (component !== options.identity.component)
|
|
472
489
|
fail("ZR_ISLAND_IDENTITY", context, `expected ${options.identity.component}, got ${component}`);
|
|
473
|
-
if (Object.hasOwn(child.props, "children") && !
|
|
490
|
+
if (Object.hasOwn(child.props, "children") && !emptyChildren(child.props.children))
|
|
474
491
|
fail("ZR_ISLAND_CHILD", context, "nonempty children");
|
|
475
|
-
|
|
476
|
-
delete props.children;
|
|
492
|
+
let props;
|
|
477
493
|
let payload;
|
|
478
494
|
try {
|
|
479
|
-
|
|
495
|
+
props = normalizeProps(child.props);
|
|
496
|
+
payload = JSON.stringify(props);
|
|
480
497
|
}
|
|
481
498
|
catch (error) {
|
|
482
499
|
throw new TypeError(`ZR_ISLAND_PROPS ${component}: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -486,8 +503,18 @@ function island(description, context, namespace, parent) {
|
|
|
486
503
|
(when === "media" && !options.media?.trim()) ||
|
|
487
504
|
(when !== "media" && options.media !== undefined))
|
|
488
505
|
fail("ZR_ISLAND_WHEN", context, when);
|
|
506
|
+
if (options.persist !== undefined &&
|
|
507
|
+
(typeof options.persist !== "string" ||
|
|
508
|
+
!options.persist.trim() ||
|
|
509
|
+
options.persist !== options.persist.trim() ||
|
|
510
|
+
/[\u0000-\u001f\u007f]/.test(options.persist)))
|
|
511
|
+
fail("ZR_ISLAND_PERSIST", context, "persist must be a nonempty string without surrounding whitespace or control characters");
|
|
512
|
+
if (options.persistProps !== undefined && typeof options.persistProps !== "boolean")
|
|
513
|
+
fail("ZR_ISLAND_PERSIST", context, "persistProps must be a boolean");
|
|
514
|
+
if (options.persistProps !== undefined && options.persist === undefined)
|
|
515
|
+
fail("ZR_ISLAND_PERSIST", context, "persistProps requires persist");
|
|
489
516
|
const marker = options.skipSsr ? "data-zfb-island-skip-ssr" : "data-zfb-island";
|
|
490
|
-
const attrs = ` ${marker}="${escapeAttribute(options.identity.component)}" data-when="${when}"${when === "media" ? ` data-media="${escapeAttribute(options.media)}"` : ""} data-zfb-transport="json/1" data-zfb-protocol="zudo-react/1" data-zfb-build="${escapeAttribute(options.identity.build)}" data-props="${escapeAttribute(payload)}"`;
|
|
517
|
+
const attrs = ` ${marker}="${escapeAttribute(options.identity.component)}" data-when="${when}"${when === "media" ? ` data-media="${escapeAttribute(options.media)}"` : ""} data-zfb-transport="json/1" data-zfb-protocol="zudo-react/1" data-zfb-build="${escapeAttribute(options.identity.build)}" data-props="${escapeAttribute(payload)}"${options.persist === undefined ? "" : ` data-zfb-transition-persist="${escapeAttribute(options.persist)}"`}${options.persistProps === true ? ' data-zfb-transition-persist-props="true"' : ""}`;
|
|
491
518
|
const local = {
|
|
492
519
|
radioGroups: new Map(),
|
|
493
520
|
radioNames: new Map(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-html.js","sourceRoot":"","sources":["../../src/zudo-react/render-html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAgC,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACL,UAAU,EACV,IAAI,GACL,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,QAAQ,EACR,aAAa,EACb,uBAAuB,EACvB,QAAQ,EACR,OAAO,EAEP,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACnD,MAAM,SAAS,GAAG,KAAK,CAAC,gDAAgD,CAAC,CAAC;AAC1E,MAAM,aAAa,GAAgC;IACjD,KAAK,EAAE,KAAK,CAAC,oCAAoC,CAAC;IAClD,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;IAClB,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;IAClB,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC;CACvB,CAAC;AAkBF,SAAS,IAAI,CAAC,IAAY,EAAE,OAAgB,EAAE,MAAc;IAC1D,MAAM,IAAI,SAAS,CACjB,GAAG,IAAI,KAAK,MAAM,OAAO,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,QAAQ,EAAE,SAAS,IAAI,eAAe,EAAE,CAC7F,CAAC;AACJ,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,gBAAgB,IAAI,KAAK;QACzB,KAAK,CAAC,cAAc,KAAK,wBAAwB,CAClD,CAAC;AACJ,CAAC;AACD,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC;AACD,SAAS,MAAM,CAAC,OAAgB,EAAE,IAAY,EAAE,OAAqB;IACnE,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,OAAO,EAAE,CAAC;IACxC,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC1B,OAAO,YAAY,EAAE,IAAI,IAAI,MAAM,OAAO,EAAE,aAAa,EAAE,KAAK,CAAC;AACnE,CAAC;AACD,SAAS,EAAE,CAAI,OAAgB,EAAE,IAAY,EAAE,EAAW;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IACzB,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;IACrB,CAAC;AACH,CAAC;AACD,SAAS,QAAQ,CAAC,KAAc,EAAE,OAAgB,EAAE,SAAoB,EAAE,MAAc;IACtF,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAC1E;aACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC;AACD,SAAS,UAAU,CAAC,KAAc,EAAE,OAAgB;IAClD,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpF,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,kBAAkB,OAAO,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC;AACD,SAAS,KAAK,CAAC,KAAc,EAAE,OAAgB;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS;QAEjD,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,uCAAuC,CAAC,CAAC;IACrE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1E,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAC;QACxD,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrF,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,UAAU,CACjB,GAAW,EACX,KAAwC,EACxC,OAAgB,EAChB,SAAoB,EACpB,MAAe;IAEf,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACjC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,IAAI,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YAC9D,IAAI,CACF,iBAAiB,EACjB,OAAO,EACP,GAAG,GAAG,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,UAAU,mBAAmB,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CACvF,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC;gBACxD,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,OAAO,QAAQ,KAAK,UAAU;gBAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;YACnF,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,MAAM,IAAI,KAAK;gBAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QACD,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QAChG,IACE,CAAC,MAAM;YACP,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YACtB,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjE,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAExB,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,MAAM,UAAU,GAAG,uBAAuB,CACxC,GAAG,EACH,IAAI,EACJ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,EAClC,MAAM,CACP,CAAC;YACF,IAAI,CACF,sBAAsB,EACtB,OAAO,EACP,GAAG,GAAG,IAAI,IAAI,aAAa,UAAU,IAAI,gBAAgB,EAAE,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,UAAU;YACtD,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,gBAAgB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ;YACrC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,CAAC;QACpE,IAAI,IAAI,KAAK,OAAO;YAAE,MAAM,IAAI,WAAW,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC;aAChF,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,OAAO,KAAK,KAAK,SAAS;gBAC5B,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,qBAAqB,CAAC,CAAC;YACrE,IAAI,KAAK;gBAAE,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IACE,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,KAAK,KAAK,SAAS;gBAC1B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAEtD,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,CAAC;YACpE,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACtF,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,CAAC;YACpE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACpD,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,IAAI,oBAAoB,CAAC,CAAC;YACpE,MAAM,IAAI,IAAI,IAAI,KAAK,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,UAAU,CACjB,KAAc,EACd,OAAgB,EAChB,SAAoB,EACpB,MAAc;IAEd,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,KAAK;aACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAC9E;aACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,IAAI,MAAM,IAAI,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;YACjD,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;QACvD,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ;QAC3C,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,uBAAuB,CAAC,CAAC;IACvE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QACzD,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,8BAA8B,CAAC,CAAC;IAC9E,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AACD,SAAS,OAAO,CACd,WAAwB,EACxB,OAAgB,EAChB,SAAoB,EACpB,MAAc;IAEd,MAAM,GAAG,GAAG,WAAW,CAAC,IAAc,CAAC;IACvC,MAAM,MAAM,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,gBAAgB,GAAG,GAAG,KAAK,KAAK,IAAI,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,cAAc,GAAG,GAAG,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAC3E,IAAI,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QAChF,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/B,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;QAC7D,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3D,IACE,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,CAAC;QAC/D,CAAC,MAAM,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,CAAC;QAE3C,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;IAC3D,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IACtC,IAAI,GAAG,KAAK,MAAM;QAChB,OAAO,CAAC,MAAM;YACZ,OAAO,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,QAAQ;gBACtC,CAAC,CAAC,MAAM,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC9B,CAAC,CAAC,QAAQ,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;IACjC,MAAM,KAAK,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC;IACjD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;IACrD,IACE,CAAC,QAAQ,IAAI,UAAU,CAAC;QACxB,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;QACjE,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC;QACrE,CAAC,QAAQ;YACP,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS;gBAChC,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC;QAC7D,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QAErF,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;YACrD,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,YAAY,IAAI,QAAQ,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,OAAO,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,GAAG,OAAO,QAAQ,CAAC,GAAG,KAAK,UAAU,CAAC;gBAC9C,MAAM;YACR,CAAC;YACD,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAChB,CAAC,QAAQ;YACT,CAAC,CAAC,gBAAgB,IAAI,KAAK,CAAC;YAC5B,KAAK,CAAC,cAAc,KAAK,wBAAwB;YAEjD,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS;QAClE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,GAAG,mBAAmB,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;IAChD,IACE,QAAQ;QACR,CAAC,CACC,GAAG,KAAK,UAAU;YAClB,GAAG,KAAK,QAAQ;YAChB,CAAC,GAAG,KAAK,OAAO;gBACd,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CACtF;QAED,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,GAAG,SAAS,SAAS,GAAG,CAAC,CAAC;IACrE,IAAI,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,SAAS,KAAK,UAAU,CAAC;QAC9D,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,IACE,MAAM,CAAC,YAAY,KAAK,SAAS;QACjC,CAAC,CAAC,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,CAAC;QAE5D,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,IACE,MAAM,CAAC,YAAY,KAAK,SAAS;QACjC,GAAG,KAAK,OAAO;QACf,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAE1E,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,GAAG,SAAS,SAAS,GAAG,CAAC,CAAC;IACrE,IACE,MAAM,CAAC,cAAc,KAAK,SAAS;QACnC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,OAAO,CAAC;YAC1E,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,UAAU;YACnD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;QACrE,IAAI,QAAQ,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBACrF,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,sCAAsC,CAAC,CAAC;YAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ;gBACnD,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,+BAA+B,CAAC,CAAC;YACnE,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACpF,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,SAAS,IAAI,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK,IAAI,KAAK,KAAK,MAAM,CAAC,UAAU;gBACtC,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,uCAAuC,CAAC,CAAC;YAC9E,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACzD,IACE,KAAK;gBACL,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAEtF,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;YAC5E,IAAI,KAAK;gBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;gBAEzC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE;oBACzC,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI;oBACJ,KAAK,EAAE,QAAQ;oBACf,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;iBACjC,CAAC,CAAC;YACL,KAAK,CAAC,OAAO,GAAG,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC3B,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,qCAAqC,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;QAC/D,OAAO,CAAC,UAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;YAC/B,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,yCAAyC,CAAC,CAAC;QAChF,KAAK,CAAC,QAAQ,GAAG,KAAK,KAAK,OAAO,CAAC,WAAW,CAAC;QAC/C,IAAI,KAAK,CAAC,QAAQ;YAAE,OAAO,CAAC,aAAa,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,iBAAiB,IAAI,KAAK,IAAI,0BAA0B,IAAI,KAAK,CAAC;QACzF,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,IACE,GAAG,KAAK,QAAQ;QAChB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI;QAC7B,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;QAEnE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;IAC1B,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACrD,IAAI,GAAG,KAAK,SAAS,IAAI,WAAW;QAClC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,2BAA2B,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,KAAK,SAAS,CAAC;QACzD,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACzC,IACE,GAAG,KAAK,SAAS;QACjB,CAAC,gBAAgB,KAAK,KAAK;YACzB,GAAG,KAAK,UAAU;YAClB,GAAG,KAAK,OAAO;YACf,GAAG,KAAK,QAAQ;YAChB,GAAG,KAAK,QAAQ,CAAC;QAEnB,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,UAAU,IAAI,WAAW,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC;QACtF,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1C,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC;YACxD,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,0BAA0B,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,0BAA0B,CAAC,CAAC;QAChG,IAAI,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC;YAChE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,8BAA8B,CAAC,CAAC;QAC/D,IACE,CAAC,GAAG,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC,GAAG,KAAK,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAE9C,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,CAAC;QAC5D,OAAO,GAAG,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;IAChG,CAAC;SAAM,IAAI,GAAG,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,EAAE,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC3F,OAAO,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACxE,CAAC;SAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QAC/C,IAAI,WAAW;YAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,mBAAmB,CAAC,CAAC;IAC3E,CAAC;SAAM,IACL,GAAG,KAAK,OAAO;QACf,GAAG,KAAK,QAAQ;QAChB,GAAG,KAAK,UAAU;QAClB,GAAG,KAAK,QAAQ;QAChB,GAAG,IAAI,aAAa,EACpB,CAAC;QACD,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,EAAE,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC;YAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YACzC,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;YAC/B,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;gBACnE,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC;oBAC7B,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,wBAAwB,KAAK,EAAE,CAAC,CAAC;YACrE,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC;gBAC/B,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC7B,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC;YACrC,CAAC;QACH,CAAC;;YAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAC5E,CAAC;;QAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IACxE,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC9F,OAAO,GAAG,KAAK,OAAO,EAAE,CAAC;IAC3B,OAAO,CAAC,MAAM,GAAG,cAAc,CAAC;IAChC,OAAO,IAAI,GAAG,GAAG,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,GAAG,GAAG,EAAE,CAAC;AAC7E,CAAC;AACD,SAAS,MAAM,CAAC,KAAc,EAAE,OAAgB,EAAE,SAAoB,EAAE,MAAc;IACpF,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACtB,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACzF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK;QAChE,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC;IACnE,IAAK,KAAK,CAAC,IAAmC,KAAK,cAAc;QAC/D,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QACzB,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAChG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,IACE,MAAM,IAAI,aAAa;YACvB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEzF,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YACrB,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU;YACpC,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,CAAC;YAEtE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,oCAAoC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,4BAA4B,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE;YACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC3D,IAAI,CAAC,OAAO;gBAAE,OAAO,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/E,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IACE,MAAM,IAAI,aAAa;YACvB,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAEzF,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;QACvC,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YACrB,OAAO,KAAK,CAAC,EAAE,KAAK,UAAU;YAC9B,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU;YAEpC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,sCAAsC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAC/B,KAAK;aACF,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC;gBACH,OAAO,MAAM,CAAC,OAAO,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CAC3D,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CACpB,MAAM,CACJ,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACnD,OAAO,EACP,SAAS,EACT,MAAM,CACP,CACF,CACF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CACZ,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE;YAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9D,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM;gBAC1D,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACtD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACxB,CAAC;AACH,CAAC;AACD,SAAS,KAAK,CAAC,KAAc;IAC3B,OAAO,CACL,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAC5F,CAAC;AACJ,CAAC;AACD,SAAS,MAAM,CACb,WAAwB,EACxB,OAAgB,EAChB,SAAoB,EACpB,MAAc;IAEd,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACzE,IAAI,SAAS,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,aAAa,IAAI,MAAM,KAAK,QAAQ;QAC1F,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAwB,CAAC;IAC3D,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU;QAC3D,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,iCAAiC,CAAC,CAAC;IACtE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;QAC1D,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,0BAA0B,CAAC,CAAC;IAClE,MAAM,SAAS,GACZ,KAAK,CAAC,IAAqD,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9F,IAAI,SAAS,KAAK,OAAO,CAAC,QAAQ,CAAC,SAAS;QAC1C,IAAI,CAAC,oBAAoB,EAAE,OAAO,EAAE,YAAY,OAAO,CAAC,QAAQ,CAAC,SAAS,SAAS,SAAS,EAAE,CAAC,CAAC;IAClG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxE,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,QAAQ,CAAC;IACtB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,SAAS,CACjB,mBAAmB,SAAS,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1F,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;IACpC,IACE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACpD,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAC5C,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC;QAEjD,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAChF,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,IAAI,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,eAAe,CAAC,OAAO,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,iFAAiF,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC;IAC/U,MAAM,KAAK,GAAY;QACrB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ;QACxD,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;QAC7B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;QACrD,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtD,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,OAAO,KAAK,IAAI,OAAO,QAAQ,CAAC;AACzC,CAAC;AACD,SAAS,mBAAmB,CAAC,OAAgB;IAC3C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE;QAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;YACzD,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,uBAAuB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;AAC5E,CAAC;AACD,MAAM,UAAU,UAAU,CAAC,IAAW,EAAE,OAAsB;IAC5D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC/E,MAAM,OAAO,GAAY;QACvB,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC,MAAM;QACxB,QAAQ,EAAE,OAAO,CAAC,MAAM,KAAK,SAAS;QACtC,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,MAAM;KACb,CAAC;IACF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC/C,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,OAAO,EAAE,CAAC;IACjB,CAAC;AACH,CAAC","sourcesContent":["import { Fragment, isDescription, type Child, type Description } from \"./description.js\";\nimport { escapeAttribute, escapeText } from \"./escape.js\";\nimport type { IslandIdentity } from \"./index.js\";\nimport { readSnapshot } from \"./reactive.js\";\nimport type { ReadonlySignal } from \"./reactive-types.js\";\nimport { createScope, withScope, type RuntimeScope } from \"./scope.js\";\nimport { serializeProps } from \"./props-transport.js\";\nimport { islandRootType } from \"./island-root-type.js\";\nimport type { IslandOptions, RenderOptions } from \"./server.js\";\nimport {\n isShowType,\n isForType,\n showProps,\n forProps,\n keyed,\n keyPayload,\n view,\n} from \"./structure.js\";\nimport {\n booleanAttrs,\n commonAttrs,\n dialectSuggestion,\n formProps,\n htmlAttrs,\n htmlTags,\n isDialectProp,\n reactiveModelSuggestion,\n svgAttrs,\n svgTags,\n type Namespace,\n voidTags,\n} from \"./vocabulary.js\";\n\nconst words = (value: string) => new Set(value.split(\" \"));\nconst reserved = words(\"key ref children rawHtml\");\nconst sensitive = words(\"noscript xmp iframe noembed noframes plaintext\");\nconst tableChildren: Record<string, Set<string>> = {\n table: words(\"caption colgroup thead tbody tfoot\"),\n thead: words(\"tr\"),\n tbody: words(\"tr\"),\n tfoot: words(\"tr\"),\n tr: words(\"td th\"),\n colgroup: words(\"col\"),\n};\ninterface Context {\n identity: IslandIdentity | undefined;\n boundary: boolean;\n next: number;\n scope: RuntimeScope;\n path: string;\n selectValue?: string | undefined;\n selectSeen?: Set<string> | undefined;\n selectMatches?: number | undefined;\n radioGroups: Map<\n unknown,\n { name: string; form: string; value: string | null; options: Set<string> }\n >;\n radioNames: Map<string, unknown>;\n formId: string;\n nextFormId: number;\n}\nfunction fail(code: string, context: Context, detail: string): never {\n throw new TypeError(\n `${code}: ${detail} at ${context.path} in ${context.identity?.component ?? \"static render\"}`,\n );\n}\nfunction reactive(value: unknown): value is ReadonlySignal<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$$zudoReactive\" in value &&\n value.$$zudoReactive === \"zudo-react.reactive.v1\"\n );\n}\nfunction read(value: unknown): unknown {\n return reactive(value) ? readSnapshot(value) : value;\n}\nfunction region(context: Context, kind: string, content: () => string): string {\n if (!context.identity) return content();\n const id = context.next++;\n return `<!--zr:1:${id}:${kind}-->${content()}<!--/zr:1:${id}-->`;\n}\nfunction at<T>(context: Context, part: string, fn: () => T): T {\n const old = context.path;\n context.path += part;\n try {\n return fn();\n } finally {\n context.path = old;\n }\n}\nfunction children(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => render(item, context, namespace, parent)),\n )\n .join(\"\");\n return render(value, context, namespace, parent);\n}\nfunction renderText(value: unknown, context: Context): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value)))\n return escapeText(String(value));\n fail(\"ZR_CHILD\", context, `invalid scalar ${typeof value}`);\n}\nfunction style(value: unknown, context: Context): string {\n if (typeof value === \"string\") return value;\n if (\n value === null ||\n typeof value !== \"object\" ||\n Array.isArray(value) ||\n Object.getPrototypeOf(value) !== Object.prototype\n )\n fail(\"ZR_STYLE\", context, \"style must be a string or flat object\");\n let result = \"\";\n for (const [name, entry] of Object.entries(value)) {\n if (!/^(--[a-zA-Z0-9_-]+|[a-z][a-z0-9-]*)$/.test(name) || /[A-Z]/.test(name))\n fail(\"ZR_STYLE\", context, `invalid property ${name}`);\n if (entry == null) continue;\n if (typeof entry !== \"string\" && !(typeof entry === \"number\" && Number.isFinite(entry)))\n fail(\"ZR_STYLE\", context, `invalid value for ${name}`);\n result += `${name}:${entry};`;\n }\n return result;\n}\nfunction attributes(\n tag: string,\n props: Readonly<Record<string, unknown>>,\n context: Context,\n namespace: Namespace,\n custom: boolean,\n): string {\n let output = \"\";\n for (const [name, original] of Object.entries(props)) {\n if (reserved.has(name)) continue;\n if (formProps.has(name)) continue;\n if (isDialectProp(name, namespace, custom)) {\n const suggestion = dialectSuggestion(name, namespace, custom);\n fail(\n \"ZR_PROP_DIALECT\",\n context,\n `${tag}.${name}${suggestion ? ` (use \\`${suggestion}\\` instead of \\`${name}\\`)` : \"\"}`,\n );\n }\n if (name.startsWith(\"on:\")) {\n if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))\n fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n if (typeof original !== \"function\") fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n const inline = `on${name.slice(3).replace(/:capture$/, \"\")}`;\n if (inline in props) fail(\"ZR_LISTENER_CONFLICT\", context, `${tag}.${inline}`);\n continue;\n }\n if (!/^[A-Za-z_:][A-Za-z0-9_:.-]*$/.test(name)) fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n if (\n !custom &&\n !commonAttrs.has(name) &&\n !(namespace === \"svg\" ? svgAttrs.has(name) : htmlAttrs.has(name)) &&\n !/^data-[\\w.-]+$/.test(name) &&\n !/^aria-[\\w.-]+$/.test(name) &&\n !/^on[a-z]+$/.test(name)\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n const value = read(original);\n if ((name === \"value\" || name === \"checked\") && reactive(original)) {\n const suggestion = reactiveModelSuggestion(\n tag,\n name,\n String(read(props.type) ?? \"text\"),\n custom,\n );\n fail(\n \"ZR_MODEL_UNSUPPORTED\",\n context,\n `${tag}.${name} requires ${suggestion ?? \"a static value\"}`,\n );\n }\n if (value == null) continue;\n if (/^on[a-z]/.test(name) && typeof value === \"function\")\n fail(\"ZR_PROP_DIALECT\", context, `${tag}.${name} must use on:${name.slice(2)}`);\n if (custom && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (name === \"style\") output += ` style=\"${escapeAttribute(style(value, context))}\"`;\n else if (booleanAttrs.has(name)) {\n if (typeof value !== \"boolean\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a boolean`);\n if (value) output += ` ${name}`;\n } else {\n if (\n typeof value !== \"string\" &&\n typeof value !== \"boolean\" &&\n !(typeof value === \"number\" && Number.isFinite(value))\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a scalar`);\n if (typeof value === \"boolean\" && !name.startsWith(\"aria-\") && !name.startsWith(\"data-\"))\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n if (/^on[a-z]/.test(name) && typeof value !== \"string\")\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} requires a string`);\n output += ` ${name}=\"${escapeAttribute(String(value))}\"`;\n }\n }\n return output;\n}\nfunction restricted(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => restricted(item, context, namespace, parent)),\n )\n .join(\"\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (parent in tableChildren && String(value).trim())\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} text`);\n return renderText(value, context);\n }\n if (parent === \"title\" || parent === \"option\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires static text`);\n if (!isDescription(value) || typeof value.type !== \"string\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires intrinsic children`);\n return element(value, context, namespace, parent);\n}\nfunction element(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n const tag = description.type as string;\n const custom = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/.test(tag);\n const elementNamespace = tag === \"svg\" || namespace === \"svg\" ? \"svg\" : \"html\";\n const childNamespace = tag === \"foreignObject\" ? \"html\" : elementNamespace;\n if (elementNamespace === \"svg\" ? !svgTags.has(tag) : !custom && !htmlTags.has(tag))\n fail(\"ZR_TAG\", context, tag);\n if (context.identity && (tag === \"template\" || sensitive.has(tag)))\n fail(\"ZR_PARSER_CONTEXT\", context, tag);\n if (parent in tableChildren && !tableChildren[parent]?.has(tag))\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n if (\n (parent === \"select\" && tag !== \"option\" && tag !== \"optgroup\") ||\n (parent === \"optgroup\" && tag !== \"option\")\n )\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n const previousFormId = context.formId;\n if (tag === \"form\")\n context.formId =\n typeof description.props.id === \"string\"\n ? `id:${description.props.id}`\n : `form:${context.nextFormId++}`;\n const source = description.props;\n const props: Record<string, unknown> = { ...source };\n const hasValue = source.modelValue !== undefined;\n const hasChecked = source.modelChecked !== undefined;\n if (\n (hasValue && hasChecked) ||\n (source.defaultValue !== undefined && source.value !== undefined) ||\n (source.defaultChecked !== undefined && source.checked !== undefined) ||\n (hasValue &&\n (source.defaultValue !== undefined ||\n (source.type !== \"radio\" && source.value !== undefined))) ||\n (hasChecked && (source.defaultChecked !== undefined || source.checked !== undefined))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n if (hasValue || hasChecked) {\n for (const name of [\"type\", \"multiple\", \"name\", \"form\"])\n if (reactive(source[name])) fail(\"ZR_MODEL_UNSUPPORTED\", context, `reactive ${name} shape`);\n const model = hasValue ? source.modelValue : source.modelChecked;\n let prototype = model;\n let writable = false;\n while (prototype && typeof prototype === \"object\") {\n const property = Object.getOwnPropertyDescriptor(prototype, \"value\");\n if (property) {\n writable = typeof property.set === \"function\";\n break;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n if (\n !reactive(model) ||\n !writable ||\n !(\"$$zudoWritable\" in model) ||\n model.$$zudoWritable !== \"zudo-react.writable.v1\"\n )\n fail(\"ZR_MODEL_READONLY\", context, tag);\n }\n if ((hasValue || hasChecked) && source.contenteditable !== undefined)\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[contenteditable]`);\n const inputType = String(source.type ?? \"text\");\n if (\n hasValue &&\n !(\n tag === \"textarea\" ||\n tag === \"select\" ||\n (tag === \"input\" &&\n [\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\", \"radio\"].includes(inputType))\n )\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (hasChecked && !(tag === \"input\" && inputType === \"checkbox\"))\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n !(tag === \"textarea\" || tag === \"select\" || tag === \"input\")\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n tag === \"input\" &&\n ![\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\"].includes(inputType)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (\n source.defaultChecked !== undefined &&\n !(tag === \"input\" && [\"checkbox\", \"radio\"].includes(inputType))\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (tag === \"input\") {\n if (source.defaultValue !== undefined || (hasValue && inputType !== \"radio\"))\n props.value = read(source.modelValue ?? source.defaultValue);\n if (source.defaultChecked !== undefined || hasChecked)\n props.checked = read(source.modelChecked ?? source.defaultChecked);\n if (hasValue && inputType === \"radio\") {\n if (typeof source.name !== \"string\" || !source.name || typeof source.value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"radio requires static name and value\");\n const selected = read(source.modelValue);\n if (selected !== null && typeof selected !== \"string\")\n fail(\"ZR_MODEL_VALUE\", context, \"radio requires string or null\");\n const form = typeof source.form === \"string\" ? `id:${source.form}` : context.formId;\n const key = `${source.name}\\u0000${form}`;\n const owner = context.radioNames.get(key);\n if (owner && owner !== source.modelValue)\n fail(\"ZR_MODEL_CONFLICT\", context, \"same-name radios use different models\");\n context.radioNames.set(key, source.modelValue);\n const group = context.radioGroups.get(source.modelValue);\n if (\n group &&\n (group.name !== source.name || group.form !== form || group.options.has(source.value))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, \"radio membership or duplicate value\");\n if (group) group.options.add(source.value);\n else\n context.radioGroups.set(source.modelValue, {\n name: source.name,\n form,\n value: selected,\n options: new Set([source.value]),\n });\n props.checked = selected === source.value;\n }\n }\n if (tag === \"option\" && context.selectValue !== undefined) {\n const value = source.value;\n if (typeof value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select option requires static value\");\n if (context.selectSeen!.has(value))\n fail(\"ZR_MODEL_CONFLICT\", context, \"duplicate option value\");\n context.selectSeen!.add(value);\n if (source.selected !== undefined)\n fail(\"ZR_MODEL_CONFLICT\", context, \"select-level value with option selected\");\n props.selected = value === context.selectValue;\n if (props.selected) context.selectMatches = (context.selectMatches ?? 0) + 1;\n }\n if (context.boundary && (\"data-zfb-island\" in props || \"data-zfb-island-skip-ssr\" in props))\n fail(\"ZR_NESTED_ISLAND\", context, tag);\n if (\n tag === \"select\" &&\n read(props.multiple) === true &&\n (context.identity || hasValue || source.defaultValue !== undefined)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select[multiple]\");\n const attrs = attributes(tag, props, context, elementNamespace, custom);\n const raw = props.rawHtml;\n const hasChildren = Object.hasOwn(props, \"children\");\n if (raw !== undefined && hasChildren)\n fail(\"ZR_RAW_HTML\", context, `${tag} has children and rawHtml`);\n if (voidTags.has(tag) && (hasChildren || raw !== undefined))\n fail(\"ZR_VOID_CHILDREN\", context, tag);\n if (\n raw !== undefined &&\n (elementNamespace === \"svg\" ||\n tag === \"textarea\" ||\n tag === \"title\" ||\n tag === \"select\" ||\n tag === \"option\")\n )\n fail(\"ZR_RAW_HTML\", context, tag);\n if (tag === \"textarea\" && hasChildren && (hasValue || source.defaultValue !== undefined))\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n let content = \"\";\n if (raw !== undefined) {\n if ((tag === \"script\" || tag === \"style\") && reactive(raw))\n fail(\"ZR_RAW_HTML\", context, `${tag} requires static rawHtml`);\n const payload = read(raw);\n if (typeof payload !== \"string\") fail(\"ZR_RAW_HTML\", context, `${tag} requires string rawHtml`);\n if (/<!--\\/?zr:1:|data-zfb-island(?:-skip-ssr)?\\s*=/.test(payload))\n fail(\"ZR_RAW_HTML\", context, \"reserved boundary in rawHtml\");\n if (\n (tag === \"script\" && /<\\/script/i.test(payload)) ||\n (tag === \"style\" && /<\\/style/i.test(payload))\n )\n fail(\"ZR_RAW_HTML\", context, `closing ${tag} in rawHtml`);\n content = tag === \"script\" || tag === \"style\" ? payload : region(context, \"h\", () => payload);\n } else if (tag === \"textarea\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"textarea requires string\");\n content = `${value.startsWith(\"\\n\") ? \"\\n\" : \"\"}${escapeText(value)}`;\n } else if (tag === \"script\" || tag === \"style\") {\n if (hasChildren) fail(\"ZR_RAW_HTML\", context, `${tag} requires rawHtml`);\n } else if (\n tag === \"title\" ||\n tag === \"option\" ||\n tag === \"optgroup\" ||\n tag === \"select\" ||\n tag in tableChildren\n ) {\n if (tag === \"select\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"select requires string\");\n const oldValue = context.selectValue;\n const oldSeen = context.selectSeen;\n const oldMatches = context.selectMatches;\n context.selectValue = value;\n context.selectSeen = new Set();\n context.selectMatches = 0;\n try {\n content = restricted(props.children, context, childNamespace, tag);\n if (context.selectMatches !== 1)\n fail(\"ZR_MODEL_VALUE\", context, `select has no option ${value}`);\n } finally {\n context.selectValue = oldValue;\n context.selectSeen = oldSeen;\n context.selectMatches = oldMatches;\n }\n } else content = restricted(props.children, context, childNamespace, tag);\n } else content = children(props.children, context, childNamespace, tag);\n if (tag === \"pre\" && raw === undefined && (content.startsWith(\"\\n\") || content.startsWith(\"\\r\")))\n content = `\\n${content}`;\n context.formId = previousFormId;\n return `<${tag}${attrs}>${voidTags.has(tag) ? \"\" : `${content}</${tag}>`}`;\n}\nfunction render(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return region(context, \"f\", () => children(value, context, namespace, parent));\n if (reactive(value)) return region(context, \"t\", () => renderText(read(value), context));\n if (typeof value === \"string\" || typeof value === \"number\") return renderText(value, context);\n if (typeof value === \"object\" && value !== null && \"then\" in value)\n fail(\"ZR_ASYNC_COMPONENT\", context, \"promise child\");\n if (!isDescription(value)) fail(\"ZR_CHILD\", context, typeof value);\n if ((value.type as symbol | typeof value.type) === islandRootType)\n return island(value, context, namespace, parent);\n if (value.type === Fragment)\n return region(context, \"f\", () => children(value.props.children, context, namespace, parent));\n if (isShowType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = showProps(value);\n if (\n !reactive(props.when) ||\n typeof props.children !== \"function\" ||\n (props.fallback !== undefined && typeof props.fallback !== \"function\")\n )\n fail(\"ZR_CHILD\", context, \"Show requires signal and factories\");\n const selected = read(props.when);\n if (typeof selected !== \"boolean\") fail(\"ZR_CHILD\", context, \"Show.when requires boolean\");\n return region(context, `s:${selected ? 1 : 0}`, () => {\n const factory = selected ? props.children : props.fallback;\n if (!factory) return \"\";\n const scope = context.scope.child(\"Show\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return withScope(scope, () => render(factory(), context, namespace, parent));\n } finally {\n context.scope = previous;\n }\n });\n }\n if (isForType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = forProps<unknown>(value);\n if (\n !reactive(props.each) ||\n typeof props.by !== \"function\" ||\n typeof props.children !== \"function\"\n )\n fail(\"ZR_CHILD\", context, \"For requires signal, key and factory\");\n const items = read(props.each);\n if (!Array.isArray(items)) fail(\"ZR_CHILD\", context, \"For.each requires array\");\n const keys = keyed(items, props.by, context.path);\n return region(context, \"l\", () =>\n items\n .map((item, index) => {\n const scope = context.scope.child(\"For\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return region(context, `i:${keyPayload(keys[index]!)}`, () =>\n withScope(scope, () =>\n render(\n props.children(view(item).value, view(index).value),\n context,\n namespace,\n parent,\n ),\n ),\n );\n } finally {\n context.scope = previous;\n }\n })\n .join(\"\"),\n );\n }\n if (typeof value.type === \"string\") return element(value, context, namespace, parent);\n const component = value.type;\n const scope = context.scope.child(component.name || \"Anonymous\");\n const prior = context.scope;\n context.scope = scope;\n try {\n return region(context, \"c\", () => {\n const output = withScope(scope, () => component(value.props));\n if (output && typeof output === \"object\" && \"then\" in output)\n fail(\"ZR_ASYNC_COMPONENT\", context, component.name);\n return render(output, context, namespace, parent);\n });\n } finally {\n context.scope = prior;\n }\n}\nfunction empty(value: unknown): boolean {\n return (\n value == null || typeof value === \"boolean\" || (Array.isArray(value) && value.every(empty))\n );\n}\nfunction island(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (context.boundary) fail(\"ZR_NESTED_ISLAND\", context, \"nested island\");\n if (namespace !== \"html\" || parent === \"p\" || parent in tableChildren || parent === \"select\")\n fail(\"ZR_PARSER_CONTEXT\", context, \"island wrapper\");\n const child = description.props.child;\n const options = description.props.options as IslandOptions;\n if (!isDescription(child) || typeof child.type !== \"function\")\n fail(\"ZR_ISLAND_CHILD\", context, \"one function component required\");\n if (!options?.identity?.component || !options.identity.build)\n fail(\"ZR_ISLAND_IDENTITY\", context, \"component/build required\");\n const component =\n (child.type as typeof child.type & { displayName?: string }).displayName ?? child.type.name;\n if (component !== options.identity.component)\n fail(\"ZR_ISLAND_IDENTITY\", context, `expected ${options.identity.component}, got ${component}`);\n if (Object.hasOwn(child.props, \"children\") && !empty(child.props.children))\n fail(\"ZR_ISLAND_CHILD\", context, \"nonempty children\");\n const props = { ...child.props };\n delete props.children;\n let payload: string;\n try {\n payload = serializeProps(props);\n } catch (error) {\n throw new TypeError(\n `ZR_ISLAND_PROPS ${component}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n const when = options.when ?? \"load\";\n if (\n ![\"load\", \"idle\", \"visible\", \"media\"].includes(when) ||\n (when === \"media\" && !options.media?.trim()) ||\n (when !== \"media\" && options.media !== undefined)\n )\n fail(\"ZR_ISLAND_WHEN\", context, when);\n const marker = options.skipSsr ? \"data-zfb-island-skip-ssr\" : \"data-zfb-island\";\n const attrs = ` ${marker}=\"${escapeAttribute(options.identity.component)}\" data-when=\"${when}\"${when === \"media\" ? ` data-media=\"${escapeAttribute(options.media!)}\"` : \"\"} data-zfb-transport=\"json/1\" data-zfb-protocol=\"zudo-react/1\" data-zfb-build=\"${escapeAttribute(options.identity.build)}\" data-props=\"${escapeAttribute(payload)}\"`;\n const local: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.skipSsr ? undefined : options.identity,\n boundary: true,\n next: 0,\n scope: context.scope,\n path: context.path,\n };\n const content = options.skipSsr\n ? children(options.fallback, local, namespace, \"div\")\n : render({ ...child, props }, local, \"html\", \"div\");\n validateRadioGroups(local);\n return `<div${attrs}>${content}</div>`;\n}\nfunction validateRadioGroups(context: Context): void {\n for (const group of context.radioGroups.values())\n if (group.value !== null && !group.options.has(group.value))\n fail(\"ZR_MODEL_VALUE\", context, `radio has no option ${group.value}`);\n}\nexport function renderHtml(node: Child, options: RenderOptions): string {\n const root = createScope({ component: options.island?.component ?? \"<root>\" });\n const context: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.island,\n boundary: options.island !== undefined,\n next: 0,\n scope: root,\n path: \"root\",\n };\n try {\n const html = render(node, context, \"html\", \"\");\n validateRadioGroups(context);\n return html;\n } finally {\n root.dispose();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render-html.js","sourceRoot":"","sources":["../../src/zudo-react/render-html.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeStyle } from \"./style.js\";\nimport {\n Fragment,\n descriptionSite,\n isDescription,\n type Child,\n type Description,\n type DescriptionSite,\n} from \"./description.js\";\nimport { escapeAttribute, escapeText } from \"./escape.js\";\nimport { rawHtmlReserved } from \"./raw-html.js\";\nimport type { IslandIdentity } from \"./index.js\";\nimport { readSnapshot } from \"./reactive.js\";\nimport type { ReadonlySignal } from \"./reactive-types.js\";\nimport { createScope, withScope, type RuntimeScope } from \"./scope.js\";\nimport { emptyChildren, normalizeProps } from \"./props-transport.js\";\nimport { islandRootType } from \"./island-root-type.js\";\nimport type { IslandOptions, RenderOptions } from \"./server.js\";\nimport {\n isShowType,\n isForType,\n showProps,\n forProps,\n keyed,\n keyPayload,\n view,\n} from \"./structure.js\";\nimport {\n attributeError,\n attributeText,\n booleanAttrs,\n commonAttrs,\n dialectSuggestion,\n emptyIframeChildren,\n formProps,\n htmlAttrs,\n htmlTags,\n isDialectProp,\n reactiveModelSuggestion,\n svgAttrs,\n svgTags,\n type Namespace,\n voidTags,\n} from \"./vocabulary.js\";\n\nconst words = (value: string) => new Set(value.split(\" \"));\nconst reserved = words(\"key ref children rawHtml\");\nconst sensitive = words(\"noscript xmp iframe noembed noframes plaintext\");\nconst tableChildren: Record<string, Set<string>> = {\n table: words(\"caption colgroup thead tbody tfoot\"),\n thead: words(\"tr\"),\n tbody: words(\"tr\"),\n tfoot: words(\"tr\"),\n tr: words(\"td th\"),\n colgroup: words(\"col\"),\n};\ninterface Context {\n identity: IslandIdentity | undefined;\n boundary: boolean;\n next: number;\n scope: RuntimeScope;\n path: string;\n node?: Description | undefined;\n selectValue?: string | undefined;\n selectSeen?: Set<string> | undefined;\n selectMatches?: number | undefined;\n radioGroups: Map<\n unknown,\n { name: string; form: string; value: string | null; options: Set<string> }\n >;\n radioNames: Map<string, unknown>;\n formId: string;\n nextFormId: number;\n}\nexport interface RenderDiagnostic {\n readonly code: string;\n readonly path: string;\n readonly component: string;\n readonly spelling?: { readonly name: string; readonly suggestion?: string };\n readonly site?: DescriptionSite;\n}\nfunction fail(\n code: string,\n context: Context,\n detail: string,\n spelling?: RenderDiagnostic[\"spelling\"],\n): never {\n const component = context.identity?.component ?? \"static render\";\n const site = context.node && descriptionSite(context.node);\n const diagnostic: RenderDiagnostic = {\n code,\n path: context.path,\n component,\n ...(spelling && { spelling }),\n ...(site && { site }),\n };\n throw Object.assign(new TypeError(`${code}: ${detail} at ${context.path} in ${component}`), {\n diagnostic,\n });\n}\nfunction reactive(value: unknown): value is ReadonlySignal<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"$$zudoReactive\" in value &&\n value.$$zudoReactive === \"zudo-react.reactive.v1\"\n );\n}\nfunction read(value: unknown): unknown {\n return reactive(value) ? readSnapshot(value) : value;\n}\nfunction region(context: Context, kind: string, content: () => string): string {\n if (!context.identity) return content();\n const id = context.next++;\n return `<!--zr:1:${id}:${kind}-->${content()}<!--/zr:1:${id}-->`;\n}\nfunction at<T>(context: Context, part: string, fn: () => T): T {\n const old = context.path;\n context.path += part;\n try {\n return fn();\n } finally {\n context.path = old;\n }\n}\nfunction children(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => render(item, context, namespace, parent)),\n )\n .join(\"\");\n return render(value, context, namespace, parent);\n}\nfunction renderText(value: unknown, context: Context): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (typeof value === \"string\" || (typeof value === \"number\" && Number.isFinite(value)))\n return escapeText(String(value));\n fail(\"ZR_CHILD\", context, `invalid scalar ${typeof value}`);\n}\nfunction style(value: unknown, context: Context): string {\n try {\n return serializeStyle(value);\n } catch (error) {\n if (error instanceof TypeError)\n fail(\"ZR_STYLE\", context, error.message.replace(/^ZR_STYLE: /, \"\"));\n throw error;\n }\n}\nfunction attributes(\n tag: string,\n props: Readonly<Record<string, unknown>>,\n context: Context,\n namespace: Namespace,\n custom: boolean,\n): string {\n let output = \"\";\n for (const [name, original] of Object.entries(props)) {\n if (reserved.has(name)) continue;\n if (formProps.has(name)) continue;\n if (isDialectProp(name, namespace, custom)) {\n const suggestion = dialectSuggestion(name, namespace, custom);\n fail(\n \"ZR_PROP_DIALECT\",\n context,\n `${tag}.${name}${suggestion ? ` (use \\`${suggestion}\\` instead of \\`${name}\\`)` : \"\"}`,\n suggestion ? { name, suggestion } : { name },\n );\n }\n if (name.startsWith(\"on:\")) {\n if (!/^on:[A-Za-z][A-Za-z0-9_-]*(?::capture)?$/.test(name))\n fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n if (typeof original !== \"function\") fail(\"ZR_LISTENER\", context, `${tag}.${name}`);\n const inline = `on${name.slice(3).replace(/:capture$/, \"\")}`;\n if (inline in props) fail(\"ZR_LISTENER_CONFLICT\", context, `${tag}.${inline}`);\n continue;\n }\n if (!/^[A-Za-z_:][A-Za-z0-9_:.-]*$/.test(name)) fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n if (\n !custom &&\n !commonAttrs.has(name) &&\n !(namespace === \"svg\" ? svgAttrs.has(name) : htmlAttrs.has(name)) &&\n !/^data-[\\w.-]+$/.test(name) &&\n !/^aria-[\\w.-]+$/.test(name) &&\n !/^on[a-z]+$/.test(name)\n )\n fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name}`);\n const value = read(original);\n if ((name === \"value\" || name === \"checked\") && reactive(original)) {\n const suggestion = reactiveModelSuggestion(\n tag,\n name,\n String(read(props.type) ?? \"text\"),\n custom,\n );\n fail(\n \"ZR_MODEL_UNSUPPORTED\",\n context,\n `${tag}.${name} requires ${suggestion ?? \"a static value\"}`,\n );\n }\n if (/^on[a-z]/.test(name) && typeof value === \"function\")\n fail(\"ZR_PROP_DIALECT\", context, `${tag}.${name} must use on:${name.slice(2)}`, {\n name,\n suggestion: `on:${name.slice(2)}`,\n });\n const error = attributeError(name, value, custom);\n if (error) fail(\"ZR_ATTRIBUTE\", context, `${tag}.${name} ${error}`);\n if (value == null) continue;\n const text = name === \"style\" ? style(value, context) : attributeText(name, value);\n if (text === null) continue;\n output +=\n booleanAttrs.has(name) && value === true ? ` ${name}` : ` ${name}=\"${escapeAttribute(text)}\"`;\n }\n return output;\n}\nfunction restricted(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n return tracked(value, context, () => restrictedValue(value, context, namespace, parent));\n}\nfunction restrictedValue(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return value\n .map((item, index) =>\n at(context, `[${index}]`, () => restricted(item, context, namespace, parent)),\n )\n .join(\"\");\n if (typeof value === \"string\" || typeof value === \"number\") {\n if (parent in tableChildren && String(value).trim())\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} text`);\n return renderText(value, context);\n }\n if (parent === \"title\" || parent === \"option\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires static text`);\n if (!isDescription(value) || typeof value.type !== \"string\")\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} requires intrinsic children`);\n return element(value, context, namespace, parent);\n}\nfunction element(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n const tag = description.type as string;\n const custom = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)+$/.test(tag);\n const elementNamespace = tag === \"svg\" || namespace === \"svg\" ? \"svg\" : \"html\";\n const childNamespace = tag === \"foreignObject\" ? \"html\" : elementNamespace;\n if (elementNamespace === \"svg\" ? !svgTags.has(tag) : !custom && !htmlTags.has(tag))\n fail(\"ZR_TAG\", context, tag);\n if (context.identity && (tag === \"template\" || (tag !== \"iframe\" && sensitive.has(tag))))\n fail(\"ZR_PARSER_CONTEXT\", context, tag);\n if (parent in tableChildren && !tableChildren[parent]?.has(tag))\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n if (\n (parent === \"select\" && tag !== \"option\" && tag !== \"optgroup\") ||\n (parent === \"optgroup\" && tag !== \"option\")\n )\n fail(\"ZR_PARSER_CONTEXT\", context, `${parent} > ${tag}`);\n const previousFormId = context.formId;\n if (tag === \"form\")\n context.formId =\n typeof description.props.id === \"string\"\n ? `id:${description.props.id}`\n : `form:${context.nextFormId++}`;\n const source = description.props;\n const props: Record<string, unknown> = { ...source };\n if (tag === \"iframe\") {\n if (Object.hasOwn(props, \"rawHtml\")) fail(\"ZR_RAW_HTML\", context, \"iframe forbids rawHtml\");\n if (!emptyIframeChildren(props.children))\n fail(\"ZR_PARSER_CONTEXT\", context, \"iframe requires empty children\");\n }\n const hasValue = source.modelValue !== undefined;\n const hasChecked = source.modelChecked !== undefined;\n if (\n (hasValue && hasChecked) ||\n (source.defaultValue !== undefined && source.value !== undefined) ||\n (source.defaultChecked !== undefined && source.checked !== undefined) ||\n (hasValue &&\n (source.defaultValue !== undefined ||\n (source.type !== \"radio\" && source.value !== undefined))) ||\n (hasChecked && (source.defaultChecked !== undefined || source.checked !== undefined))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n if (hasValue || hasChecked) {\n for (const name of [\"type\", \"multiple\", \"name\", \"form\"])\n if (reactive(source[name])) fail(\"ZR_MODEL_UNSUPPORTED\", context, `reactive ${name} shape`);\n const model = hasValue ? source.modelValue : source.modelChecked;\n let prototype = model;\n let writable = false;\n while (prototype && typeof prototype === \"object\") {\n const property = Object.getOwnPropertyDescriptor(prototype, \"value\");\n if (property) {\n writable = typeof property.set === \"function\";\n break;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n if (\n !reactive(model) ||\n !writable ||\n !(\"$$zudoWritable\" in model) ||\n model.$$zudoWritable !== \"zudo-react.writable.v1\"\n )\n fail(\"ZR_MODEL_READONLY\", context, tag);\n }\n if ((hasValue || hasChecked) && source.contenteditable !== undefined)\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[contenteditable]`);\n const inputType = String(source.type ?? \"text\");\n if (\n hasValue &&\n !(\n tag === \"textarea\" ||\n tag === \"select\" ||\n (tag === \"input\" &&\n [\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\", \"radio\"].includes(inputType))\n )\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (hasChecked && !(tag === \"input\" && inputType === \"checkbox\"))\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n !(tag === \"textarea\" || tag === \"select\" || tag === \"input\")\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (\n source.defaultValue !== undefined &&\n tag === \"input\" &&\n ![\"text\", \"search\", \"email\", \"url\", \"tel\", \"password\"].includes(inputType)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, `${tag}[type=${inputType}]`);\n if (\n source.defaultChecked !== undefined &&\n !(tag === \"input\" && [\"checkbox\", \"radio\"].includes(inputType))\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, tag);\n if (tag === \"input\") {\n if (source.defaultValue !== undefined || (hasValue && inputType !== \"radio\"))\n props.value = read(source.modelValue ?? source.defaultValue);\n if (source.defaultChecked !== undefined || hasChecked)\n props.checked = read(source.modelChecked ?? source.defaultChecked);\n if (hasValue && inputType === \"radio\") {\n if (typeof source.name !== \"string\" || !source.name || typeof source.value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"radio requires static name and value\");\n const selected = read(source.modelValue);\n if (selected !== null && typeof selected !== \"string\")\n fail(\"ZR_MODEL_VALUE\", context, \"radio requires string or null\");\n const form = typeof source.form === \"string\" ? `id:${source.form}` : context.formId;\n const key = `${source.name}\\u0000${form}`;\n const owner = context.radioNames.get(key);\n if (owner && owner !== source.modelValue)\n fail(\"ZR_MODEL_CONFLICT\", context, \"same-name radios use different models\");\n context.radioNames.set(key, source.modelValue);\n const group = context.radioGroups.get(source.modelValue);\n if (\n group &&\n (group.name !== source.name || group.form !== form || group.options.has(source.value))\n )\n fail(\"ZR_MODEL_CONFLICT\", context, \"radio membership or duplicate value\");\n if (group) group.options.add(source.value);\n else\n context.radioGroups.set(source.modelValue, {\n name: source.name,\n form,\n value: selected,\n options: new Set([source.value]),\n });\n props.checked = selected === source.value;\n }\n }\n if (tag === \"option\" && context.selectValue !== undefined) {\n const value = source.value;\n if (typeof value !== \"string\")\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select option requires static value\");\n if (context.selectSeen!.has(value))\n fail(\"ZR_MODEL_CONFLICT\", context, \"duplicate option value\");\n context.selectSeen!.add(value);\n if (source.selected !== undefined)\n fail(\"ZR_MODEL_CONFLICT\", context, \"select-level value with option selected\");\n props.selected = value === context.selectValue;\n if (props.selected) context.selectMatches = (context.selectMatches ?? 0) + 1;\n }\n if (context.boundary && (\"data-zfb-island\" in props || \"data-zfb-island-skip-ssr\" in props))\n fail(\"ZR_NESTED_ISLAND\", context, tag);\n if (\n tag === \"select\" &&\n read(props.multiple) === true &&\n (context.identity || hasValue || source.defaultValue !== undefined)\n )\n fail(\"ZR_MODEL_UNSUPPORTED\", context, \"select[multiple]\");\n const attrs = attributes(tag, props, context, elementNamespace, custom);\n const raw = props.rawHtml;\n const hasChildren = Object.hasOwn(props, \"children\");\n if (raw !== undefined && hasChildren)\n fail(\"ZR_RAW_HTML\", context, `${tag} has children and rawHtml`);\n if (voidTags.has(tag) && (hasChildren || raw !== undefined))\n fail(\"ZR_VOID_CHILDREN\", context, tag);\n if (\n raw !== undefined &&\n (elementNamespace === \"svg\" ||\n tag === \"textarea\" ||\n tag === \"title\" ||\n tag === \"select\" ||\n tag === \"option\")\n )\n fail(\"ZR_RAW_HTML\", context, tag);\n if (tag === \"textarea\" && hasChildren && (hasValue || source.defaultValue !== undefined))\n fail(\"ZR_MODEL_CONFLICT\", context, tag);\n let content = \"\";\n if (raw !== undefined) {\n if ((tag === \"script\" || tag === \"style\") && reactive(raw))\n fail(\"ZR_RAW_HTML\", context, `${tag} requires static rawHtml`);\n const payload = read(raw);\n if (typeof payload !== \"string\") fail(\"ZR_RAW_HTML\", context, `${tag} requires string rawHtml`);\n if (rawHtmlReserved(payload, tag)) fail(\"ZR_RAW_HTML\", context, \"reserved boundary in rawHtml\");\n if (\n (tag === \"script\" && /<\\/script/i.test(payload)) ||\n (tag === \"style\" && /<\\/style/i.test(payload))\n )\n fail(\"ZR_RAW_HTML\", context, `closing ${tag} in rawHtml`);\n content = tag === \"script\" || tag === \"style\" ? payload : region(context, \"h\", () => payload);\n } else if (tag === \"textarea\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"textarea requires string\");\n content = `${value.startsWith(\"\\n\") ? \"\\n\" : \"\"}${escapeText(value)}`;\n } else if (tag === \"iframe\") {\n // The shell has no owned children; srcdoc belongs to the browser's foreign document.\n } else if (tag === \"script\" || tag === \"style\") {\n if (hasChildren) fail(\"ZR_RAW_HTML\", context, `${tag} requires rawHtml`);\n } else if (\n tag === \"title\" ||\n tag === \"option\" ||\n tag === \"optgroup\" ||\n tag === \"select\" ||\n tag in tableChildren\n ) {\n if (tag === \"select\" && (hasValue || source.defaultValue !== undefined)) {\n const value = read(source.modelValue ?? source.defaultValue);\n if (typeof value !== \"string\") fail(\"ZR_MODEL_VALUE\", context, \"select requires string\");\n const oldValue = context.selectValue;\n const oldSeen = context.selectSeen;\n const oldMatches = context.selectMatches;\n context.selectValue = value;\n context.selectSeen = new Set();\n context.selectMatches = 0;\n try {\n content = restricted(props.children, context, childNamespace, tag);\n if (context.selectMatches !== 1)\n fail(\"ZR_MODEL_VALUE\", context, `select has no option ${value}`);\n } finally {\n context.selectValue = oldValue;\n context.selectSeen = oldSeen;\n context.selectMatches = oldMatches;\n }\n } else content = restricted(props.children, context, childNamespace, tag);\n } else content = children(props.children, context, childNamespace, tag);\n if (tag === \"pre\" && raw === undefined && (content.startsWith(\"\\n\") || content.startsWith(\"\\r\")))\n content = `\\n${content}`;\n context.formId = previousFormId;\n return `<${tag}${attrs}>${voidTags.has(tag) ? \"\" : `${content}</${tag}>`}`;\n}\n// A failure is attributed only to the value being rendered: a description's own site,\n// or no site at all for scalars, promises and other non-description children.\nfunction tracked<T>(value: unknown, context: Context, fn: () => T): T {\n const prior = context.node;\n context.node = isDescription(value) ? value : undefined;\n try {\n return fn();\n } finally {\n context.node = prior;\n }\n}\nfunction render(value: unknown, context: Context, namespace: Namespace, parent: string): string {\n return tracked(value, context, () => renderValue(value, context, namespace, parent));\n}\nfunction renderValue(\n value: unknown,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (value == null || typeof value === \"boolean\") return \"\";\n if (Array.isArray(value))\n return region(context, \"f\", () => children(value, context, namespace, parent));\n if (reactive(value)) return region(context, \"t\", () => renderText(read(value), context));\n if (typeof value === \"string\" || typeof value === \"number\") return renderText(value, context);\n if (typeof value === \"object\" && value !== null && \"then\" in value)\n fail(\"ZR_ASYNC_COMPONENT\", context, \"promise child\");\n if (!isDescription(value)) fail(\"ZR_CHILD\", context, typeof value);\n if ((value.type as symbol | typeof value.type) === islandRootType)\n return island(value, context, namespace, parent);\n if (value.type === Fragment)\n return region(context, \"f\", () => children(value.props.children, context, namespace, parent));\n if (isShowType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = showProps(value);\n if (\n !reactive(props.when) ||\n typeof props.children !== \"function\" ||\n (props.fallback !== undefined && typeof props.fallback !== \"function\")\n )\n fail(\"ZR_CHILD\", context, \"Show requires signal and factories\");\n const selected = read(props.when);\n if (typeof selected !== \"boolean\") fail(\"ZR_CHILD\", context, \"Show.when requires boolean\");\n return region(context, `s:${selected ? 1 : 0}`, () => {\n const factory = selected ? props.children : props.fallback;\n if (!factory) return \"\";\n const scope = context.scope.child(\"Show\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return withScope(scope, () => render(factory(), context, namespace, parent));\n } finally {\n context.scope = previous;\n }\n });\n }\n if (isForType(value.type)) {\n if (\n parent in tableChildren ||\n [\"select\", \"optgroup\", \"option\", \"title\", \"textarea\", \"script\", \"style\"].includes(parent)\n )\n fail(\"ZR_PARSER_CONTEXT\", context, parent);\n const props = forProps<unknown>(value);\n if (\n !reactive(props.each) ||\n typeof props.by !== \"function\" ||\n typeof props.children !== \"function\"\n )\n fail(\"ZR_CHILD\", context, \"For requires signal, key and factory\");\n const items = read(props.each);\n if (!Array.isArray(items)) fail(\"ZR_CHILD\", context, \"For.each requires array\");\n const keys = keyed(items, props.by, context.path);\n return region(context, \"l\", () =>\n items\n .map((item, index) => {\n const scope = context.scope.child(\"For\");\n const previous = context.scope;\n context.scope = scope;\n try {\n return region(context, `i:${keyPayload(keys[index]!)}`, () =>\n withScope(scope, () =>\n render(\n props.children(view(item).value, view(index).value),\n context,\n namespace,\n parent,\n ),\n ),\n );\n } finally {\n context.scope = previous;\n }\n })\n .join(\"\"),\n );\n }\n if (typeof value.type === \"string\") return element(value, context, namespace, parent);\n const component = value.type;\n const scope = context.scope.child(component.name || \"Anonymous\");\n const prior = context.scope;\n context.scope = scope;\n try {\n return region(context, \"c\", () => {\n const output = withScope(scope, () => component(value.props));\n if (output && typeof output === \"object\" && \"then\" in output)\n fail(\"ZR_ASYNC_COMPONENT\", context, component.name);\n return render(output, context, namespace, parent);\n });\n } finally {\n context.scope = prior;\n }\n}\nfunction island(\n description: Description,\n context: Context,\n namespace: Namespace,\n parent: string,\n): string {\n if (context.boundary) fail(\"ZR_NESTED_ISLAND\", context, \"nested island\");\n if (namespace !== \"html\" || parent === \"p\" || parent in tableChildren || parent === \"select\")\n fail(\"ZR_PARSER_CONTEXT\", context, \"island wrapper\");\n const child = description.props.child;\n const options = description.props.options as IslandOptions;\n if (!isDescription(child) || typeof child.type !== \"function\")\n fail(\"ZR_ISLAND_CHILD\", context, \"one function component required\");\n if (!options?.identity?.component || !options.identity.build)\n fail(\"ZR_ISLAND_IDENTITY\", context, \"component/build required\");\n const component =\n (child.type as typeof child.type & { displayName?: string }).displayName ?? child.type.name;\n if (component !== options.identity.component)\n fail(\"ZR_ISLAND_IDENTITY\", context, `expected ${options.identity.component}, got ${component}`);\n if (Object.hasOwn(child.props, \"children\") && !emptyChildren(child.props.children))\n fail(\"ZR_ISLAND_CHILD\", context, \"nonempty children\");\n let props: Record<string, unknown>;\n let payload: string;\n try {\n props = normalizeProps(child.props);\n payload = JSON.stringify(props);\n } catch (error) {\n throw new TypeError(\n `ZR_ISLAND_PROPS ${component}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n const when = options.when ?? \"load\";\n if (\n ![\"load\", \"idle\", \"visible\", \"media\"].includes(when) ||\n (when === \"media\" && !options.media?.trim()) ||\n (when !== \"media\" && options.media !== undefined)\n )\n fail(\"ZR_ISLAND_WHEN\", context, when);\n if (\n options.persist !== undefined &&\n (typeof options.persist !== \"string\" ||\n !options.persist.trim() ||\n options.persist !== options.persist.trim() ||\n /[\\u0000-\\u001f\\u007f]/.test(options.persist))\n )\n fail(\n \"ZR_ISLAND_PERSIST\",\n context,\n \"persist must be a nonempty string without surrounding whitespace or control characters\",\n );\n if (options.persistProps !== undefined && typeof options.persistProps !== \"boolean\")\n fail(\"ZR_ISLAND_PERSIST\", context, \"persistProps must be a boolean\");\n if (options.persistProps !== undefined && options.persist === undefined)\n fail(\"ZR_ISLAND_PERSIST\", context, \"persistProps requires persist\");\n const marker = options.skipSsr ? \"data-zfb-island-skip-ssr\" : \"data-zfb-island\";\n const attrs = ` ${marker}=\"${escapeAttribute(options.identity.component)}\" data-when=\"${when}\"${when === \"media\" ? ` data-media=\"${escapeAttribute(options.media!)}\"` : \"\"} data-zfb-transport=\"json/1\" data-zfb-protocol=\"zudo-react/1\" data-zfb-build=\"${escapeAttribute(options.identity.build)}\" data-props=\"${escapeAttribute(payload)}\"${options.persist === undefined ? \"\" : ` data-zfb-transition-persist=\"${escapeAttribute(options.persist)}\"`}${options.persistProps === true ? ' data-zfb-transition-persist-props=\"true\"' : \"\"}`;\n const local: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.skipSsr ? undefined : options.identity,\n boundary: true,\n next: 0,\n scope: context.scope,\n path: context.path,\n };\n const content = options.skipSsr\n ? children(options.fallback, local, namespace, \"div\")\n : render({ ...child, props }, local, \"html\", \"div\");\n validateRadioGroups(local);\n return `<div${attrs}>${content}</div>`;\n}\nfunction validateRadioGroups(context: Context): void {\n for (const group of context.radioGroups.values())\n if (group.value !== null && !group.options.has(group.value))\n fail(\"ZR_MODEL_VALUE\", context, `radio has no option ${group.value}`);\n}\nexport function renderHtml(node: Child, options: RenderOptions): string {\n const root = createScope({ component: options.island?.component ?? \"<root>\" });\n const context: Context = {\n radioGroups: new Map(),\n radioNames: new Map(),\n formId: \"\",\n nextFormId: 0,\n identity: options.island,\n boundary: options.island !== undefined,\n next: 0,\n scope: root,\n path: \"root\",\n };\n try {\n const html = render(node, context, \"html\", \"\");\n validateRadioGroups(context);\n return html;\n } finally {\n root.dispose();\n }\n}\n"]}
|
package/dist/zudo-react/root.js
CHANGED
|
@@ -2,9 +2,32 @@ export const ROOT_KEY = Symbol.for("@takazudo/zfb/zudo-react/root-v1");
|
|
|
2
2
|
export function storedRoot(container) {
|
|
3
3
|
return container[ROOT_KEY];
|
|
4
4
|
}
|
|
5
|
+
const phaseMessages = {
|
|
6
|
+
setup: "root setup failed",
|
|
7
|
+
preflight: "root validation failed",
|
|
8
|
+
commit: "root commit failed",
|
|
9
|
+
activation: "activation failed",
|
|
10
|
+
update: "reactive update failed",
|
|
11
|
+
cleanup: "cleanup failed",
|
|
12
|
+
};
|
|
13
|
+
function diagnosticLine(value) {
|
|
14
|
+
// Only runtime-shaped identifiers and DOM paths belong on the searchable line.
|
|
15
|
+
// The structured object retains the full details for inspection.
|
|
16
|
+
const code = /^ZR_[A-Z0-9_]+$/.test(value.code) ? value.code : "ZR_UNKNOWN";
|
|
17
|
+
const phase = Object.hasOwn(phaseMessages, value.phase) ? value.phase : "setup";
|
|
18
|
+
const component = /^[A-Za-z_$][\w$.-]*$/.test(value.component) ? value.component : "[component]";
|
|
19
|
+
const path = /^\/[a-z][a-z0-9-]*:nth-child\(\d+\)(?:\/[a-z#][a-z0-9#-]*(?::nth-child\(\d+\))?(?:\[\d+\])?)*$/.test(value.path)
|
|
20
|
+
? value.path
|
|
21
|
+
: "[path]";
|
|
22
|
+
const message = code === "ZR_HYDRATION_MISMATCH" ? "hydration mismatch" : phaseMessages[phase];
|
|
23
|
+
return `[zudo-react] ${code} ${phase} ${component} ${path}: ${message}`;
|
|
24
|
+
}
|
|
5
25
|
export function report(options, diagnostic) {
|
|
6
26
|
try {
|
|
7
|
-
(options.report
|
|
27
|
+
if (options.report)
|
|
28
|
+
options.report(diagnostic);
|
|
29
|
+
else
|
|
30
|
+
console.error(diagnosticLine(diagnostic), diagnostic);
|
|
8
31
|
}
|
|
9
32
|
catch (error) {
|
|
10
33
|
console.error(error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/zudo-react/root.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAEvE,MAAM,UAAU,UAAU,CAAC,SAAkB;IAC3C,OAAQ,SAAyB,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AACD,MAAM,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"root.js","sourceRoot":"","sources":["../../src/zudo-react/root.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Diagnostic, IslandIdentity, Reporter } from \"./index.js\";\nimport type { RuntimeScope } from \"./scope.js\";\n\nexport interface RootOptions {\n identity: IslandIdentity;\n signal?: AbortSignal | undefined;\n report?: Reporter | undefined;\n}\nexport interface RootHandle {\n readonly protocol: \"zudo-react/1\";\n readonly identity: IslandIdentity;\n readonly disposed: boolean;\n dispose(): void;\n unmount(): void;\n}\nexport const ROOT_KEY = Symbol.for(\"@takazudo/zfb/zudo-react/root-v1\");\ntype RootElement = Element & { [ROOT_KEY]?: RootHandle };\nexport function storedRoot(container: Element): RootHandle | undefined {\n return (container as RootElement)[ROOT_KEY];\n}\nconst phaseMessages: Record<Diagnostic[\"phase\"], string> = {\n setup: \"root setup failed\",\n preflight: \"root validation failed\",\n commit: \"root commit failed\",\n activation: \"activation failed\",\n update: \"reactive update failed\",\n cleanup: \"cleanup failed\",\n};\n\nfunction diagnosticLine(value: Diagnostic): string {\n // Only runtime-shaped identifiers and DOM paths belong on the searchable line.\n // The structured object retains the full details for inspection.\n const code = /^ZR_[A-Z0-9_]+$/.test(value.code) ? value.code : \"ZR_UNKNOWN\";\n const phase = Object.hasOwn(phaseMessages, value.phase) ? value.phase : \"setup\";\n const component = /^[A-Za-z_$][\\w$.-]*$/.test(value.component) ? value.component : \"[component]\";\n const path =\n /^\\/[a-z][a-z0-9-]*:nth-child\\(\\d+\\)(?:\\/[a-z#][a-z0-9#-]*(?::nth-child\\(\\d+\\))?(?:\\[\\d+\\])?)*$/.test(\n value.path,\n )\n ? value.path\n : \"[path]\";\n const message = code === \"ZR_HYDRATION_MISMATCH\" ? \"hydration mismatch\" : phaseMessages[phase];\n return `[zudo-react] ${code} ${phase} ${component} ${path}: ${message}`;\n}\n\nexport function report(options: RootOptions, diagnostic: Diagnostic): void {\n try {\n if (options.report) options.report(diagnostic);\n else console.error(diagnosticLine(diagnostic), diagnostic);\n } catch (error) {\n console.error(error);\n }\n}\nexport function diagnostic(\n options: RootOptions,\n code: string,\n phase: Diagnostic[\"phase\"],\n path: string,\n expected: string,\n actual: string,\n stack: readonly string[] = [options.identity.component],\n): Diagnostic {\n return {\n code,\n phase,\n component: stack.at(-1) ?? options.identity.component,\n componentStack: stack,\n path,\n expected,\n actual,\n protocol: \"zudo-react/1\",\n build: options.identity.build,\n };\n}\nexport function rootPath(element: Element): string {\n const parts: string[] = [];\n for (let node: Element | null = element; node; node = node.parentElement) {\n const index = node.parentElement\n ? Array.prototype.indexOf.call(node.parentElement.children, node) + 1\n : 1;\n parts.unshift(`${node.localName}:nth-child(${index})`);\n }\n return `/${parts.join(\"/\")}`;\n}\nexport function createRoot(\n container: Element,\n options: RootOptions,\n scope: RuntimeScope,\n cleanups: Array<() => void>,\n owned: readonly Node[],\n): RootHandle {\n let disposed = false;\n let removed = false;\n const handle: RootHandle = {\n protocol: \"zudo-react/1\",\n identity: options.identity,\n get disposed() {\n return disposed;\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n for (const cleanup of [...cleanups].reverse()) {\n try {\n cleanup();\n } catch (error) {\n report(\n options,\n diagnostic(\n options,\n \"ZR_CLEANUP_ERROR\",\n \"cleanup\",\n rootPath(container),\n \"cleanup\",\n String(error),\n ),\n );\n }\n }\n scope.dispose();\n },\n unmount() {\n handle.dispose();\n if (removed || storedRoot(container) !== handle) return;\n removed = true;\n for (const node of owned) if (node.parentNode === container) container.removeChild(node);\n if (storedRoot(container) === handle) delete (container as RootElement)[ROOT_KEY];\n },\n };\n (container as RootElement)[ROOT_KEY] = handle;\n return handle;\n}\n"]}
|
|
@@ -10,6 +10,8 @@ export interface IslandOptions {
|
|
|
10
10
|
media?: string | undefined;
|
|
11
11
|
skipSsr?: boolean | undefined;
|
|
12
12
|
fallback?: Child;
|
|
13
|
+
persist?: string | undefined;
|
|
14
|
+
persistProps?: boolean | undefined;
|
|
13
15
|
}
|
|
14
16
|
export declare function islandRoot(child: Description, options: IslandOptions): Description;
|
|
15
17
|
export declare function renderToString(node: Child, options?: RenderOptions): string;
|