@hyperframes/core 0.6.17 → 0.6.19
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/compiler/htmlBundler.d.ts.map +1 -1
- package/dist/compiler/htmlBundler.js +102 -116
- package/dist/compiler/htmlBundler.js.map +1 -1
- package/dist/compiler/index.d.ts +1 -0
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +2 -0
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/inlineSubCompositions.d.ts +96 -0
- package/dist/compiler/inlineSubCompositions.d.ts.map +1 -0
- package/dist/compiler/inlineSubCompositions.js +183 -0
- package/dist/compiler/inlineSubCompositions.js.map +1 -0
- package/dist/generated/runtime-inline.js +1 -1
- package/dist/generated/runtime-inline.js.map +1 -1
- package/dist/hyperframe.manifest.json +1 -1
- package/dist/hyperframe.runtime.iife.js +1 -1
- package/dist/hyperframe.runtime.mjs +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared sub-composition inlining logic.
|
|
3
|
+
*
|
|
4
|
+
* Both the core bundler (preview) and the producer compiler (render) need to
|
|
5
|
+
* inline sub-composition HTML referenced via `data-composition-src`. This
|
|
6
|
+
* module is the single source of truth for that transformation, eliminating
|
|
7
|
+
* divergence that previously caused bugs (e.g. producer not setting
|
|
8
|
+
* `data-composition-file`).
|
|
9
|
+
*/
|
|
10
|
+
import { rewriteAssetPaths, rewriteCssAssetUrls, rewriteInlineStyleAssetUrls, } from "./rewriteSubCompPaths";
|
|
11
|
+
import { scopeCssToComposition, wrapScopedCompositionScript } from "./compositionScoping";
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Default helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
function defaultBuildScopeSelector(compId) {
|
|
16
|
+
const escaped = compId.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
17
|
+
return `[data-composition-id="${escaped}"]`;
|
|
18
|
+
}
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Core implementation
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/**
|
|
23
|
+
* Inline sub-compositions into a document. For each host element in `hosts`:
|
|
24
|
+
*
|
|
25
|
+
* 1. Resolve the sub-composition HTML via `options.resolveHtml`
|
|
26
|
+
* 2. Parse it, find `<template>` or `<body>` content
|
|
27
|
+
* 3. Find the inner `[data-composition-id]` root
|
|
28
|
+
* 4. Extract `<style>` elements, scope CSS, collect them
|
|
29
|
+
* 5. Extract `<script>` elements, wrap inline scripts, collect them
|
|
30
|
+
* 6. Collect external script `src` URLs for deduplication
|
|
31
|
+
* 7. Rewrite asset paths (and optionally inline-style asset URLs)
|
|
32
|
+
* 8. Copy dimension attrs from inner root to host if missing
|
|
33
|
+
* 9. Set `data-composition-file` on host
|
|
34
|
+
* 10. Remove `data-composition-src` from host
|
|
35
|
+
* 11. Inject the content into the host element
|
|
36
|
+
*/
|
|
37
|
+
export function inlineSubCompositions(document, hosts, options) {
|
|
38
|
+
const { resolveHtml, parseHtml, hostIdentityMap, rewriteInlineStyles = false, flattenInnerRoot, readVariableDefaults, parseHostVariables, buildScopeSelector = defaultBuildScopeSelector, scriptErrorLabel = "[HyperFrames] composition script error:", onMissingComposition, } = options;
|
|
39
|
+
const styles = [];
|
|
40
|
+
const scripts = [];
|
|
41
|
+
const externalScriptSrcs = [];
|
|
42
|
+
const variablesByComp = {};
|
|
43
|
+
for (const hostEl of hosts) {
|
|
44
|
+
const src = hostEl.getAttribute("data-composition-src");
|
|
45
|
+
if (!src)
|
|
46
|
+
continue;
|
|
47
|
+
const compHtml = resolveHtml(src);
|
|
48
|
+
if (compHtml == null) {
|
|
49
|
+
if (onMissingComposition) {
|
|
50
|
+
onMissingComposition(src);
|
|
51
|
+
}
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const compDoc = parseHtml(compHtml);
|
|
55
|
+
// Determine composition IDs
|
|
56
|
+
let compId;
|
|
57
|
+
let runtimeCompId;
|
|
58
|
+
if (hostIdentityMap) {
|
|
59
|
+
const identity = hostIdentityMap.get(hostEl);
|
|
60
|
+
compId = identity?.authoredCompositionId || null;
|
|
61
|
+
runtimeCompId = identity?.runtimeCompositionId || compId || "";
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
compId = hostEl.getAttribute("data-composition-id") || null;
|
|
65
|
+
runtimeCompId = compId || "";
|
|
66
|
+
}
|
|
67
|
+
// Find content: prefer <template>, fall back to <body>
|
|
68
|
+
const contentRoot = compDoc.querySelector("template");
|
|
69
|
+
const contentHtml = contentRoot ? contentRoot.innerHTML || "" : compDoc.body?.innerHTML || "";
|
|
70
|
+
const contentDoc = parseHtml(contentHtml);
|
|
71
|
+
// Find the inner composition root
|
|
72
|
+
const innerRoot = compId
|
|
73
|
+
? contentDoc.querySelector(`[data-composition-id="${compId}"]`)
|
|
74
|
+
: contentDoc.querySelector("[data-composition-id]");
|
|
75
|
+
const inferredCompId = innerRoot?.getAttribute("data-composition-id")?.trim() || "";
|
|
76
|
+
const authoredRootId = innerRoot?.getAttribute("id")?.trim() || null;
|
|
77
|
+
const scopeCompId = compId || inferredCompId;
|
|
78
|
+
const runtimeScope = runtimeCompId ? buildScopeSelector(runtimeCompId) : "";
|
|
79
|
+
// Variable merging (bundler feature)
|
|
80
|
+
if (readVariableDefaults && parseHostVariables && runtimeCompId) {
|
|
81
|
+
const mergedVariables = {
|
|
82
|
+
...readVariableDefaults(compDoc.documentElement),
|
|
83
|
+
...parseHostVariables(hostEl),
|
|
84
|
+
};
|
|
85
|
+
if (Object.keys(mergedVariables).length > 0) {
|
|
86
|
+
variablesByComp[runtimeCompId] = mergedVariables;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// When a sub-composition is a full HTML document (no <template>), styles
|
|
90
|
+
// and scripts in <head> are not part of contentDoc (which only has body
|
|
91
|
+
// content). Extract them so backgrounds, positioning, fonts, and library
|
|
92
|
+
// scripts (e.g. GSAP CDN) are not silently dropped.
|
|
93
|
+
if (!contentRoot && compDoc.head) {
|
|
94
|
+
for (const s of [...compDoc.head.querySelectorAll("style")]) {
|
|
95
|
+
const css = rewriteCssAssetUrls(s.textContent || "", src);
|
|
96
|
+
styles.push(scopeCompId
|
|
97
|
+
? scopeCssToComposition(css, scopeCompId, runtimeScope || undefined, authoredRootId)
|
|
98
|
+
: css);
|
|
99
|
+
}
|
|
100
|
+
for (const s of [...compDoc.head.querySelectorAll("script")]) {
|
|
101
|
+
const externalSrc = (s.getAttribute("src") || "").trim();
|
|
102
|
+
if (externalSrc && !externalScriptSrcs.includes(externalSrc)) {
|
|
103
|
+
externalScriptSrcs.push(externalSrc);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Extract styles from content
|
|
108
|
+
for (const s of [...contentDoc.querySelectorAll("style")]) {
|
|
109
|
+
const css = rewriteCssAssetUrls(s.textContent || "", src);
|
|
110
|
+
styles.push(scopeCompId
|
|
111
|
+
? scopeCssToComposition(css, scopeCompId, runtimeScope || undefined, authoredRootId)
|
|
112
|
+
: css);
|
|
113
|
+
s.remove();
|
|
114
|
+
}
|
|
115
|
+
// Extract scripts from content
|
|
116
|
+
for (const s of [...contentDoc.querySelectorAll("script")]) {
|
|
117
|
+
const externalSrc = (s.getAttribute("src") || "").trim();
|
|
118
|
+
if (externalSrc) {
|
|
119
|
+
if (!externalScriptSrcs.includes(externalSrc)) {
|
|
120
|
+
externalScriptSrcs.push(externalSrc);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
scripts.push(scopeCompId
|
|
125
|
+
? wrapScopedCompositionScript(s.textContent || "", scopeCompId, scriptErrorLabel, runtimeScope || undefined, runtimeCompId || scopeCompId, authoredRootId)
|
|
126
|
+
: `(function(){ try { ${s.textContent || ""} } catch (_err) { console.error(${JSON.stringify(scriptErrorLabel)}, _err); } })();`);
|
|
127
|
+
}
|
|
128
|
+
s.remove();
|
|
129
|
+
}
|
|
130
|
+
// Rewrite relative asset paths before inlining so ../foo.svg from
|
|
131
|
+
// compositions/ resolves correctly when the content moves to root.
|
|
132
|
+
const assetEls = innerRoot
|
|
133
|
+
? innerRoot.querySelectorAll("[src], [href]")
|
|
134
|
+
: contentDoc.querySelectorAll("[src], [href]");
|
|
135
|
+
rewriteAssetPaths(assetEls, src, (el, attr) => el.getAttribute(attr), (el, attr, val) => {
|
|
136
|
+
el.setAttribute(attr, val);
|
|
137
|
+
});
|
|
138
|
+
if (rewriteInlineStyles) {
|
|
139
|
+
const styledEls = innerRoot
|
|
140
|
+
? innerRoot.querySelectorAll("[style]")
|
|
141
|
+
: contentDoc.querySelectorAll("[style]");
|
|
142
|
+
rewriteInlineStyleAssetUrls(styledEls, src, (el) => el.getAttribute("style"), (el, val) => {
|
|
143
|
+
el.setAttribute("style", val);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// Copy dimension attributes from inner root to host if missing
|
|
147
|
+
if (innerRoot) {
|
|
148
|
+
const innerW = innerRoot.getAttribute("data-width");
|
|
149
|
+
const innerH = innerRoot.getAttribute("data-height");
|
|
150
|
+
if (innerW && !hostEl.getAttribute("data-width"))
|
|
151
|
+
hostEl.setAttribute("data-width", innerW);
|
|
152
|
+
if (innerH && !hostEl.getAttribute("data-height")) {
|
|
153
|
+
hostEl.setAttribute("data-height", innerH);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Inject content into the host element
|
|
157
|
+
if (innerRoot) {
|
|
158
|
+
innerRoot.setAttribute("data-composition-file", src);
|
|
159
|
+
for (const child of [...innerRoot.querySelectorAll("style, script")])
|
|
160
|
+
child.remove();
|
|
161
|
+
if (flattenInnerRoot) {
|
|
162
|
+
const prepared = flattenInnerRoot(innerRoot);
|
|
163
|
+
hostEl.innerHTML = prepared.outerHTML || "";
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
hostEl.innerHTML = compId ? innerRoot.innerHTML || "" : innerRoot.outerHTML || "";
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
for (const child of [...contentDoc.querySelectorAll("style, script")])
|
|
171
|
+
child.remove();
|
|
172
|
+
// linkedom fragment parsing: when content is `<div data-composition-id="X">...</div>`,
|
|
173
|
+
// the div becomes documentElement and body is empty. Fall back to documentElement.outerHTML
|
|
174
|
+
// to preserve the composition wrapper.
|
|
175
|
+
const bodyHtml = contentDoc.body?.innerHTML || "";
|
|
176
|
+
hostEl.innerHTML = bodyHtml || contentDoc.documentElement?.outerHTML || "";
|
|
177
|
+
}
|
|
178
|
+
hostEl.setAttribute("data-composition-file", src);
|
|
179
|
+
hostEl.removeAttribute("data-composition-src");
|
|
180
|
+
}
|
|
181
|
+
return { styles, scripts, externalScriptSrcs, variablesByComp };
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=inlineSubCompositions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineSubCompositions.js","sourceRoot":"","sources":["../../src/compiler/inlineSubCompositions.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAuF1F,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnE,OAAO,yBAAyB,OAAO,IAAI,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CACnC,QAAkB,EAClB,KAAgB,EAChB,OAAqC;IAErC,MAAM,EACJ,WAAW,EACX,SAAS,EACT,eAAe,EACf,mBAAmB,GAAG,KAAK,EAC3B,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GAAG,yBAAyB,EAC9C,gBAAgB,GAAG,yCAAyC,EAC5D,oBAAoB,GACrB,GAAG,OAAO,CAAC;IAEZ,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,eAAe,GAA4C,EAAE,CAAC;IAEpE,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,oBAAoB,EAAE,CAAC;gBACzB,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpC,4BAA4B;QAC5B,IAAI,MAAqB,CAAC;QAC1B,IAAI,aAAqB,CAAC;QAC1B,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,GAAG,QAAQ,EAAE,qBAAqB,IAAI,IAAI,CAAC;YACjD,aAAa,GAAG,QAAQ,EAAE,oBAAoB,IAAI,MAAM,IAAI,EAAE,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC;YAC5D,aAAa,GAAG,MAAM,IAAI,EAAE,CAAC;QAC/B,CAAC;QAED,uDAAuD;QACvD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAC9F,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QAE1C,kCAAkC;QAClC,MAAM,SAAS,GAAG,MAAM;YACtB,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,yBAAyB,MAAM,IAAI,CAAC;YAC/D,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACtD,MAAM,cAAc,GAAG,SAAS,EAAE,YAAY,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpF,MAAM,cAAc,GAAG,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QACrE,MAAM,WAAW,GAAG,MAAM,IAAI,cAAc,CAAC;QAC7C,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,qCAAqC;QACrC,IAAI,oBAAoB,IAAI,kBAAkB,IAAI,aAAa,EAAE,CAAC;YAChE,MAAM,eAAe,GAAG;gBACtB,GAAG,oBAAoB,CAAC,OAAO,CAAC,eAAe,CAAC;gBAChD,GAAG,kBAAkB,CAAC,MAAM,CAAC;aAC9B,CAAC;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5C,eAAe,CAAC,aAAa,CAAC,GAAG,eAAe,CAAC;YACnD,CAAC;QACH,CAAC;QAED,yEAAyE;QACzE,wEAAwE;QACxE,yEAAyE;QACzE,oDAAoD;QACpD,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAC5D,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC1D,MAAM,CAAC,IAAI,CACT,WAAW;oBACT,CAAC,CAAC,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,IAAI,SAAS,EAAE,cAAc,CAAC;oBACpF,CAAC,CAAC,GAAG,CACR,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzD,IAAI,WAAW,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC7D,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC1D,MAAM,GAAG,GAAG,mBAAmB,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CACT,WAAW;gBACT,CAAC,CAAC,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,IAAI,SAAS,EAAE,cAAc,CAAC;gBACpF,CAAC,CAAC,GAAG,CACR,CAAC;YACF,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,CAAC;QAED,+BAA+B;QAC/B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9C,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CACV,WAAW;oBACT,CAAC,CAAC,2BAA2B,CACzB,CAAC,CAAC,WAAW,IAAI,EAAE,EACnB,WAAW,EACX,gBAAgB,EAChB,YAAY,IAAI,SAAS,EACzB,aAAa,IAAI,WAAW,EAC5B,cAAc,CACf;oBACH,CAAC,CAAC,sBAAsB,CAAC,CAAC,WAAW,IAAI,EAAE,mCAAmC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,kBAAkB,CACnI,CAAC;YACJ,CAAC;YACD,CAAC,CAAC,MAAM,EAAE,CAAC;QACb,CAAC;QAED,kEAAkE;QAClE,mEAAmE;QACnE,MAAM,QAAQ,GAAG,SAAS;YACxB,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC;YAC7C,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QACjD,iBAAiB,CACf,QAAQ,EACR,GAAG,EACH,CAAC,EAAW,EAAE,IAAY,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EACpD,CAAC,EAAW,EAAE,IAAY,EAAE,GAAW,EAAE,EAAE;YACzC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC,CACF,CAAC;QAEF,IAAI,mBAAmB,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,SAAS;gBACzB,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBACvC,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC3C,2BAA2B,CACzB,SAAS,EACT,GAAG,EACH,CAAC,EAAW,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,EACzC,CAAC,EAAW,EAAE,GAAW,EAAE,EAAE;gBAC3B,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,CAAC,CACF,CAAC;QACJ,CAAC;QAED,+DAA+D;QAC/D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,CAAC;gBAAE,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC5F,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,YAAY,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YACrD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACrF,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC;YACpF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACtF,uFAAuF;YACvF,4FAA4F;YAC5F,uCAAuC;YACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;YAClD,MAAM,CAAC,SAAS,GAAG,QAAQ,IAAI,UAAU,CAAC,eAAe,EAAE,SAAS,IAAI,EAAE,CAAC;QAC7E,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;AAClE,CAAC"}
|