@nextwebwg/htmlkit 1.0.0-alpha.40 → 1.0.0-alpha.41
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/README.md +21 -12
- package/components/breadcrumbs.html +9 -0
- package/components/{navigation.html → nav.html} +2 -2
- package/components/pager.html +13 -0
- package/dist/application.d.ts +10 -2
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +148 -45
- package/dist/application.js.map +1 -1
- package/dist/browser.d.ts +3 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +23 -22
- package/dist/browser.js.map +1 -1
- package/dist/build.d.ts +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +25 -10
- package/dist/build.js.map +1 -1
- package/dist/bundle-worker.js +2 -1
- package/dist/bundle-worker.js.map +1 -1
- package/dist/client.d.ts +32 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +322 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -1
- package/dist/config.js.map +1 -1
- package/dist/document.d.ts +30 -2
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +41 -6
- package/dist/document.js.map +1 -1
- package/dist/head.d.ts.map +1 -1
- package/dist/head.js +7 -5
- package/dist/head.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/resource.d.ts +11 -5
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +32 -12
- package/dist/resource.js.map +1 -1
- package/dist/routes.d.ts +12 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +135 -41
- package/dist/routes.js.map +1 -1
- package/dist/serve.d.ts +2 -2
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +48 -30
- package/dist/serve.js.map +1 -1
- package/dist/types.d.ts +82 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/browser.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
1
2
|
import { fileURLToPath } from "node:url";
|
|
2
3
|
import { existsSync } from "node:fs";
|
|
3
4
|
import { normalizePath } from "vite";
|
|
@@ -6,11 +7,16 @@ const packagedRuntime = fileURLToPath(import.meta.resolve("@nextwebwg/html-next/
|
|
|
6
7
|
const sourceRuntime = packagedRuntime.replace(/[/\\]dist[/\\]runtime\.js$/, "/src/runtime.ts");
|
|
7
8
|
// Workspace source execution can test the same entry before packages have been built.
|
|
8
9
|
const runtime = import.meta.url.endsWith(".ts") && existsSync(sourceRuntime) ? sourceRuntime : packagedRuntime;
|
|
10
|
+
const client = fileURLToPath(new URL(import.meta.url.endsWith(".ts") ? "./client.ts" : "./client.js", import.meta.url));
|
|
9
11
|
export function stylesheetSources(components) {
|
|
10
12
|
const sources = new Map();
|
|
11
13
|
const shared = collectSharedStylesheets(components.map(component => component.definition));
|
|
12
14
|
if (shared.length > 0) {
|
|
13
|
-
|
|
15
|
+
// One stylesheet holds the page's whole graph, so it is named for the graph: pages that share a
|
|
16
|
+
// first component (their layout) would otherwise overwrite each other's styles.
|
|
17
|
+
const files = components.map(component => component.definition.source.file);
|
|
18
|
+
const graph = createHash("sha256").update(files.join("\0")).digest("hex").slice(0, 16);
|
|
19
|
+
sources.set(`${normalizePath(fileURLToPath(files[0]))}.${graph}.htmlkit-shared.css`, compileComponentGraphStylesForBuild(components.map(component => component.definition)));
|
|
14
20
|
return sources;
|
|
15
21
|
}
|
|
16
22
|
for (const component of components) {
|
|
@@ -21,8 +27,9 @@ export function stylesheetSources(components) {
|
|
|
21
27
|
}
|
|
22
28
|
return sources;
|
|
23
29
|
}
|
|
24
|
-
/** HTML Next owns adoption, observation, reads, controllers, and teardown. */
|
|
25
|
-
export function browserSource(components,
|
|
30
|
+
/** HTML Next owns adoption, observation, reads, controllers, and teardown; client.ts shares them across pages. */
|
|
31
|
+
export function browserSource(components, options, css = []) {
|
|
32
|
+
const { base } = options;
|
|
26
33
|
const controlled = components.filter(component => component.controller !== undefined);
|
|
27
34
|
const definitions = components.map(({ definition }) => ({ ...definition, stylesheets: undefined, css: definition.css || definition.stylesheets?.length ? "/* external stylesheet */" : "",
|
|
28
35
|
source: { file: `${definition.contract.tag}.html` } }));
|
|
@@ -46,38 +53,32 @@ export function browserSource(components, base) {
|
|
|
46
53
|
return declaration;
|
|
47
54
|
});
|
|
48
55
|
}
|
|
49
|
-
|
|
56
|
+
const functions = "registerComponentDefinitions, observeDocument, getComponentHost, adoptRenderedProps, lowerDocument, serializeRenderedForm, replaceProjectedNode";
|
|
57
|
+
return `import { ${functions} } from ${JSON.stringify(runtime)};
|
|
58
|
+
import { page } from ${JSON.stringify(client)};
|
|
59
|
+
${css.map(file => `import ${JSON.stringify(normalizePath(file))};`).join("\n")}
|
|
50
60
|
${[...stylesheetSources(components).keys()].map(id => `import ${JSON.stringify(id)};`).join("\n")}
|
|
51
61
|
${reads.map((read, i) => `import read${i} from ${JSON.stringify(read.asset + "?url&no-inline")};`).join("\n")}
|
|
52
62
|
${controlled.map((component, index) => `import * as controller${index} from ${JSON.stringify(component.controller)};`).join("\n")}
|
|
53
|
-
const controllers = { ${controlled.map((component, index) => `${JSON.stringify(component.definition.contract.tag)}: controller${index}`).join(",")} };
|
|
54
|
-
const styleStates = ${JSON.stringify(Object.fromEntries(components.map(component => [component.definition.contract.tag, component.styles.stateNames])))};
|
|
55
63
|
const definitions = ${JSON.stringify(definitions)};
|
|
56
64
|
${reads.map((read, i) => `definitions[${read.definition}].declarations[${read.declaration}].source = read${i} + ${JSON.stringify(read.suffix)};`).join("\n")}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const controller = controllers[definition.contract.tag];
|
|
61
|
-
if (!controller) return;
|
|
62
|
-
if (typeof controller.default !== 'function') throw new Error('Controller for ' + definition.contract.tag + ' must export a default function');
|
|
63
|
-
const host = getComponentHost(element);
|
|
64
|
-
if (initialized.has(host)) return;
|
|
65
|
-
initialized.add(host);
|
|
66
|
-
return controller.default(host);
|
|
67
|
-
} });
|
|
68
|
-
document.dispatchEvent(new Event('htmlkit:ready'));
|
|
65
|
+
page({ ${functions} }, ${JSON.stringify(options)}, definitions,
|
|
66
|
+
{ ${controlled.map((component, index) => `${JSON.stringify(component.definition.contract.tag)}: controller${index}`).join(",")} },
|
|
67
|
+
${JSON.stringify(Object.fromEntries(components.map(component => [component.definition.contract.tag, component.styles.stateNames])))});
|
|
69
68
|
`;
|
|
70
69
|
}
|
|
71
70
|
export function browserPlugin(sources, inputs) {
|
|
72
71
|
return {
|
|
73
72
|
name: "htmlkit-browser",
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
73
|
+
// Vite adds ?direct when a document <link> requests a stylesheet; keep the query for its CSS plugin.
|
|
74
|
+
resolveId(id) { const path = id.split("?")[0]; if (sources.has(path))
|
|
75
|
+
return path.endsWith(".css") ? id : `\0${id}`; },
|
|
76
|
+
load(id) { return sources.get((id.startsWith("\0") ? id.slice(1) : id).split("?")[0]); },
|
|
77
77
|
generateBundle() {
|
|
78
|
+
// Virtual stylesheets keep their ids for Vite's CSS plugin; report only source files.
|
|
78
79
|
if (inputs !== undefined)
|
|
79
80
|
for (const id of this.getModuleIds())
|
|
80
|
-
if (!id.startsWith("\0"))
|
|
81
|
+
if (!id.startsWith("\0") && !sources.has(id.split("?")[0]))
|
|
81
82
|
inputs.add(id);
|
|
82
83
|
},
|
|
83
84
|
};
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAe,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/build.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ApplicationOptions, BuildResult } from "./types.js";
|
|
2
|
-
export declare function buildApplication(
|
|
2
|
+
export declare function buildApplication(input?: ApplicationOptions): Promise<BuildResult>;
|
|
3
3
|
//# sourceMappingURL=build.d.ts.map
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6BlE,wBAAsB,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA6BlE,wBAAsB,gBAAgB,CAAC,KAAK,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuF3F"}
|
package/dist/build.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { lstat, mkdir, mkdtemp, readFile, readdir, realpath, rename, rm, writeFile, copyFile } from "node:fs/promises";
|
|
2
2
|
import { basename, dirname, join, resolve } from "node:path";
|
|
3
|
-
import { createApplication } from "./application.js";
|
|
3
|
+
import { createApplication, headScripts, notFoundPage } from "./application.js";
|
|
4
4
|
import { browserSource, stylesheetSources } from "./browser.js";
|
|
5
5
|
import { bundleBrowser } from "./bundle.js";
|
|
6
|
-
import { configure, HtmlKitError, within } from "./config.js";
|
|
7
|
-
import { documentHTML,
|
|
6
|
+
import { configure, globalStylesheets, HtmlKitError, withPlugins, within } from "./config.js";
|
|
7
|
+
import { documentHTML, pagePayload, payloadPath } from "./document.js";
|
|
8
8
|
import { matchRoute } from "./routes.js";
|
|
9
9
|
async function exists(path) {
|
|
10
10
|
try {
|
|
@@ -47,7 +47,8 @@ async function canonicalDestination(path) {
|
|
|
47
47
|
return join(await canonicalDestination(dirname(path)), basename(path));
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
export async function buildApplication(
|
|
50
|
+
export async function buildApplication(input = {}) {
|
|
51
|
+
const options = await withPlugins(input);
|
|
51
52
|
const config = configure(options);
|
|
52
53
|
const root = await realpath(config.root);
|
|
53
54
|
const destination = await canonicalDestination(config.outDir);
|
|
@@ -83,11 +84,18 @@ export async function buildApplication(options = {}) {
|
|
|
83
84
|
for (const pathname of routes) {
|
|
84
85
|
const page = await application.render(pathname);
|
|
85
86
|
pages.push(page);
|
|
86
|
-
sources.set(`virtual:htmlkit/page-${pages.length - 1}`, browserSource(page.components, config.base));
|
|
87
|
+
sources.set(`virtual:htmlkit/page-${pages.length - 1}`, browserSource(page.components, { base: config.base, prefetch: config.prefetch, manifest: config.base + "_htmlkit/manifest.json" }, globalStylesheets(options, config.root)));
|
|
87
88
|
for (const [id, css] of stylesheetSources(page.components))
|
|
88
89
|
sources.set(id, css);
|
|
89
90
|
}
|
|
90
91
|
const browserInputs = await bundleBrowser({ root: config.root, base: config.base, outDir: stage, sources });
|
|
92
|
+
for (const [path, file] of application.files) {
|
|
93
|
+
const target = join(stage, path);
|
|
94
|
+
if (await exists(target))
|
|
95
|
+
throw new HtmlKitError(`Generated file collision at ${path}.`, file);
|
|
96
|
+
await mkdir(dirname(target), { recursive: true });
|
|
97
|
+
await copyFile(file, target);
|
|
98
|
+
}
|
|
91
99
|
const manifest = JSON.parse(await readFile(join(stage, "_htmlkit/vite-manifest.json"), "utf8"));
|
|
92
100
|
const bundles = new Map(Object.values(manifest).filter(chunk => chunk.isEntry).map(chunk => [chunk.name, chunk]));
|
|
93
101
|
const delivery = [];
|
|
@@ -100,7 +108,6 @@ export async function buildApplication(options = {}) {
|
|
|
100
108
|
if (entry === undefined)
|
|
101
109
|
throw new HtmlKitError(`Missing browser bundle for ${page.pathname}.`);
|
|
102
110
|
const route = matchRoute(application.routes, page.pathname, config.base).route;
|
|
103
|
-
delivery.push({ pathname: page.pathname, pageName: route.pageName, browserModule: config.base + entry.file });
|
|
104
111
|
// Vite's manifest includes CSS from the entry and its shared static imports.
|
|
105
112
|
const styles = new Set();
|
|
106
113
|
const seen = new Set();
|
|
@@ -109,7 +116,7 @@ export async function buildApplication(options = {}) {
|
|
|
109
116
|
return;
|
|
110
117
|
seen.add(chunk);
|
|
111
118
|
for (const css of chunk.css ?? [])
|
|
112
|
-
styles.add(css);
|
|
119
|
+
styles.add(config.base + css);
|
|
113
120
|
for (const id of chunk.imports ?? []) {
|
|
114
121
|
const imported = manifest[id];
|
|
115
122
|
if (imported !== undefined)
|
|
@@ -117,15 +124,23 @@ export async function buildApplication(options = {}) {
|
|
|
117
124
|
}
|
|
118
125
|
};
|
|
119
126
|
collect(entry);
|
|
120
|
-
|
|
121
|
-
|
|
127
|
+
// Shared chunks, which links on screen may prefetch; the entry holds the page's own content.
|
|
128
|
+
const chunks = [...seen].filter(chunk => chunk !== entry).map(chunk => config.base + chunk.file);
|
|
129
|
+
delivery.push({ pathname: page.pathname, pageName: route.pageName, browserModule: config.base + entry.file, chunks });
|
|
130
|
+
const assets = { styles: [...styles], modules: [config.base + entry.file] };
|
|
122
131
|
await mkdir(dirname(path), { recursive: true });
|
|
123
132
|
await writeFile(path, documentHTML(page.body, page.head, assets));
|
|
133
|
+
const payload = pagePayload(page, assets);
|
|
134
|
+
if (payload !== undefined) {
|
|
135
|
+
const file = join(stage, decodeURIComponent(payloadPath(config.base, page.pathname).slice(config.base.length)));
|
|
136
|
+
await mkdir(dirname(file), { recursive: true });
|
|
137
|
+
await writeFile(file, JSON.stringify(payload));
|
|
138
|
+
}
|
|
124
139
|
}
|
|
125
140
|
await rm(join(stage, "_htmlkit/vite-manifest.json"));
|
|
126
141
|
if (await exists(join(stage, "404.html")))
|
|
127
142
|
throw new HtmlKitError("Public asset collision: 404.html is generated.");
|
|
128
|
-
await writeFile(join(stage, "404.html"),
|
|
143
|
+
await writeFile(join(stage, "404.html"), notFoundPage(await headScripts(options, config.root)).html);
|
|
129
144
|
await writeFile(join(stage, "_htmlkit/manifest.json"), JSON.stringify({ version: 1, base: config.base, routes, pages: delivery }, null, 2) + "\n");
|
|
130
145
|
const previous = await exists(config.outDir);
|
|
131
146
|
if (previous)
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG7D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACrD,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACrE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,MAAc;IACtD,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;QAAE,OAAO;IAClC,IAAI,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,2CAA2C,EAAE,MAAM,CAAC,CAAC;IACxH,KAAK,MAAM,IAAI,IAAI,MAAM,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,cAAc,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,2CAA2C,EAAE,IAAI,CAAC,CAAC;QACrG,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;aACxF,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAAC,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;IACtG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,IAAY;IAC9C,IAAI,CAAC;QAAC,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACpC,OAAO,KAAK,EAAE,CAAC;QACb,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,KAAK,CAAC;QACpE,OAAO,IAAI,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAK,GAAuB,EAAE;IACnE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACnM,MAAM,IAAI,YAAY,CAAC,qDAAqD,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,YAAY,CAAC,6BAA6B,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrJ,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC;QAC7I,MAAM,IAAI,YAAY,CAAC,wEAAwE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClH,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACrD,6FAA6F;IAC7F,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QAAC,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAAC,CAAC;IAC/E,OAAO,KAAK,EAAE,CAAC;QAAC,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;IACzD,MAAM,MAAM,GAAG,KAAK,GAAG,WAAW,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,mDAAmD,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAClH,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,oEAAoE,CAAC,CAAC;QACxI,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,EACnF,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,GAAG,wBAAwB,EAAE,EAAE,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChJ,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5G,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACjC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,YAAY,CAAC,+BAA+B,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/F,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,CAAC,EAAE,MAAM,CAAC,CAAa,CAAC;QAC5G,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAClH,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YACpG,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,YAAY,CAAC,qCAAqC,IAAI,CAAC,QAAQ,GAAG,EAAE,IAAI,CAAC,CAAC;YAC5G,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,IAAI,YAAY,CAAC,8BAA8B,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAChG,MAAM,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAE,CAAC,KAAK,CAAC;YAChF,6EAA6E;YAC7E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAiB,CAAC;YACtC,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAQ,EAAE;gBAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,OAAO;gBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAChB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE;oBAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBACjE,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oBAAC,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAAC,IAAI,QAAQ,KAAK,SAAS;wBAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;YACzH,CAAC,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,CAAC;YACf,6FAA6F;YAC7F,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YACjG,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACtH,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5E,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,MAAM,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAChH,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC;QACrD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAAE,MAAM,IAAI,YAAY,CAAC,gDAAgD,CAAC,CAAC;QACpH,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,MAAM,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrG,MAAM,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,wBAAwB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACnJ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC;YAAC,MAAM,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QAC3C,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,QAAQ;gBAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;QACjF,IAAI,QAAQ;YAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YAAC,MAAM,WAAW,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;gBAC1B,CAAC;YAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
package/dist/bundle-worker.js
CHANGED
|
@@ -2,10 +2,11 @@ import { parentPort, workerData } from "node:worker_threads";
|
|
|
2
2
|
import { build } from "vite";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { browserPlugin } from "./browser.js";
|
|
5
|
+
import { rootAlias } from "./config.js";
|
|
5
6
|
const options = workerData;
|
|
6
7
|
try {
|
|
7
8
|
const inputs = new Set();
|
|
8
|
-
await build({ root: options.root, configFile: false, mode: "production", base: options.base, publicDir: join(options.root, "public"),
|
|
9
|
+
await build({ root: options.root, configFile: false, mode: "production", base: options.base, publicDir: join(options.root, "public"), resolve: { alias: rootAlias(options.root) },
|
|
9
10
|
logLevel: "silent", plugins: [browserPlugin(options.sources, inputs)],
|
|
10
11
|
build: { outDir: options.outDir, emptyOutDir: false, copyPublicDir: false, assetsDir: "_htmlkit", target: "es2022", manifest: "_htmlkit/vite-manifest.json", modulePreload: false,
|
|
11
12
|
rolldownOptions: { input: Object.fromEntries([...options.sources.keys()].filter(id => id.startsWith("virtual:htmlkit/")).map((id, i) => [`page-${i}`, id])),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../src/bundle-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"bundle-worker.js","sourceRoot":"","sources":["../src/bundle-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,OAAO,GAAG,UAA0B,CAAC;AAC3C,IAAI,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QAC/K,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,6BAA6B,EAAE,aAAa,EAAE,KAAK;YAC/K,eAAe,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBACzJ,MAAM,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,cAAc,EAAE,2BAA2B,EAAE,cAAc,EAAE,iCAAiC,EAAE,EAAE,EAAE;KAChK,CAAC,CAAC;IACH,yGAAyG;IACzG,UAAW,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1D,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,yGAAyG;IACzG,UAAW,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAC7F,CAAC;QAAS,CAAC;IAAC,UAAW,CAAC,KAAK,EAAE,CAAC;AAAC,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTMLKit's browser side, shared by every page module in a document. Each page module registers
|
|
3
|
+
* its components here; the first one starts HTML Next's document observation and client
|
|
4
|
+
* navigation. A navigation loads the next page's module and payload, renders its layers with HTML
|
|
5
|
+
* Next as the server does, and swaps only the layers that changed. Anything the payload cannot
|
|
6
|
+
* render falls back to the page's static HTML. docs/client-navigation.md records the design.
|
|
7
|
+
*/
|
|
8
|
+
import type { ComponentDefinition } from "@nextwebwg/html-next";
|
|
9
|
+
import type { adoptRenderedProps, ComponentHost, getComponentHost, lowerDocument, observeDocument, registerComponentDefinitions, replaceProjectedNode, serializeRenderedForm } from "@nextwebwg/html-next/runtime";
|
|
10
|
+
export interface Runtime {
|
|
11
|
+
readonly registerComponentDefinitions: typeof registerComponentDefinitions;
|
|
12
|
+
readonly observeDocument: typeof observeDocument;
|
|
13
|
+
readonly getComponentHost: typeof getComponentHost;
|
|
14
|
+
readonly adoptRenderedProps: typeof adoptRenderedProps;
|
|
15
|
+
readonly lowerDocument: typeof lowerDocument;
|
|
16
|
+
readonly serializeRenderedForm: typeof serializeRenderedForm;
|
|
17
|
+
readonly replaceProjectedNode: typeof replaceProjectedNode;
|
|
18
|
+
}
|
|
19
|
+
export interface ClientOptions {
|
|
20
|
+
readonly base: string;
|
|
21
|
+
readonly prefetch: Prefetch;
|
|
22
|
+
/** The build's deployment manifest, which lists each page's shared chunks. Development has none. */
|
|
23
|
+
readonly manifest?: string;
|
|
24
|
+
}
|
|
25
|
+
type Prefetch = "interaction" | "visible" | "none";
|
|
26
|
+
type Controller = {
|
|
27
|
+
readonly default: (host: ComponentHost) => void | (() => void);
|
|
28
|
+
};
|
|
29
|
+
/** Each page module calls this once, when it is first imported. */
|
|
30
|
+
export declare function page(runtime: Runtime, options: ClientOptions, pageDefinitions: readonly ComponentDefinition[], pageControllers: Readonly<Record<string, Controller>>, pageStyleStates: Readonly<Record<string, readonly string[]>>): void;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,4BAA4B,EAC7H,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,4BAA4B,EAAE,OAAO,4BAA4B,CAAC;IAC3E,QAAQ,CAAC,eAAe,EAAE,OAAO,eAAe,CAAC;IACjD,QAAQ,CAAC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IACnD,QAAQ,CAAC,kBAAkB,EAAE,OAAO,kBAAkB,CAAC;IACvD,QAAQ,CAAC,aAAa,EAAE,OAAO,aAAa,CAAC;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,OAAO,qBAAqB,CAAC;IAC7D,QAAQ,CAAC,oBAAoB,EAAE,OAAO,oBAAoB,CAAC;CAC5D;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AACD,KAAK,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,CAAC;AACnD,KAAK,UAAU,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;CAAE,CAAC;AAkBrF,mEAAmE;AACnE,wBAAgB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,mBAAmB,EAAE,EAC5G,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,IAAI,CA0B3H"}
|