@refrakt-md/editor 0.7.0 → 0.7.2
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/app/dist/assets/{index-CQTW3VDv.js → index--rGC9bba.js} +1 -1
- package/app/dist/assets/{index-BqSCUOm5.js → index-30gAspk8.js} +1 -1
- package/app/dist/assets/{index-DYqwuP7-.js → index-4SP4_AaD.js} +1 -1
- package/app/dist/assets/{index-DRB8YvMM.js → index-BEFUVB_B.js} +1 -1
- package/app/dist/assets/{index-B8gM4RM5.js → index-BZ4adnS0.js} +1 -1
- package/app/dist/assets/{index-DKEx6UO3.js → index-Baf7ZSct.js} +1 -1
- package/app/dist/assets/{index-DuLf75hM.js → index-BwWzfQVn.js} +1 -1
- package/app/dist/assets/{index-BtRwGJ7C.js → index-ByHhigzw.js} +1 -1
- package/app/dist/assets/{index-BxYBD4wU.js → index-C9w1RpYY.js} +1 -1
- package/app/dist/assets/{index-elinREb4.js → index-CI5PewQM.js} +1 -1
- package/app/dist/assets/{index-06CMoKux.js → index-D1WOi3EN.js} +1 -1
- package/app/dist/assets/{index-DODIBnvQ.js → index-D77rckeh.js} +1 -1
- package/app/dist/assets/{index-CYeD2ReX.js → index-DFkteo0w.js} +1 -1
- package/app/dist/assets/{index-YJiP4A__.js → index-DIuFNfTc.js} +1 -1
- package/app/dist/assets/{index-wScN48Pp.js → index-DKnhR16N.js} +1 -1
- package/app/dist/assets/{index-kyp-bYm5.js → index-DvgOtlru.js} +1 -1
- package/app/dist/assets/index-GlUHQ_jL.js +324 -0
- package/app/dist/assets/{index-BOEUpgE6.js → index-kPhFxtn-.js} +1 -1
- package/app/dist/assets/{index-D4gUWKEY.js → index-x67KGOIr.js} +1 -1
- package/app/dist/index.html +1 -1
- package/app/src/lib/api/client.ts +9 -0
- package/app/src/lib/components/BlockCard.svelte +14 -1
- package/app/src/lib/components/BlockEditPanel.svelte +5 -1
- package/app/src/lib/components/BlockEditor.svelte +10 -0
- package/app/src/lib/components/InlineEditor.svelte +4 -3
- package/app/src/lib/components/MarkdownEditor.svelte +1 -1
- package/app/src/lib/components/PreviewPane.svelte +1 -1
- package/app/src/lib/preview/block-renderer.ts +68 -5
- package/dist/community-tags-builder.d.ts +15 -0
- package/dist/community-tags-builder.d.ts.map +1 -0
- package/dist/community-tags-builder.js +66 -0
- package/dist/community-tags-builder.js.map +1 -0
- package/dist/layout-resolver.d.ts +11 -0
- package/dist/layout-resolver.d.ts.map +1 -1
- package/dist/layout-resolver.js +46 -3
- package/dist/layout-resolver.js.map +1 -1
- package/dist/preview-builder.d.ts.map +1 -1
- package/dist/preview-builder.js +11 -3
- package/dist/preview-builder.js.map +1 -1
- package/dist/preview.d.ts +12 -2
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +34 -4
- package/dist/preview.js.map +1 -1
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +59 -8
- package/dist/server.js.map +1 -1
- package/package.json +6 -6
- package/preview-runtime/App.svelte +2 -2
- package/app/dist/assets/index-BYddt_8L.js +0 -324
|
@@ -2,8 +2,11 @@ import Markdoc from '@markdoc/markdoc';
|
|
|
2
2
|
import { tags, nodes, serializeTree } from '@refrakt-md/runes';
|
|
3
3
|
import { createTransform, renderToHtml } from '@refrakt-md/transform';
|
|
4
4
|
import type { ThemeConfig, RendererNode } from '@refrakt-md/transform';
|
|
5
|
+
import type { SerializedTag, AggregatedData } from '@refrakt-md/types';
|
|
5
6
|
import { baseConfig } from '@refrakt-md/runes';
|
|
6
7
|
|
|
8
|
+
type PostTransformFn = (node: SerializedTag, context: { modifiers: Record<string, string>; parentType?: string }) => SerializedTag;
|
|
9
|
+
|
|
7
10
|
/** Runes needing external resources or runtime data — show placeholder in editor */
|
|
8
11
|
const RUNTIME_ONLY_TYPES = new Set([
|
|
9
12
|
'Nav', 'NavGroup', 'NavItem', // needs RfContext.pages
|
|
@@ -12,15 +15,26 @@ const RUNTIME_ONLY_TYPES = new Set([
|
|
|
12
15
|
/**
|
|
13
16
|
* Restore postTransform hooks that were stripped during JSON serialization.
|
|
14
17
|
* The server strips functions from the themeConfig before sending it as JSON;
|
|
15
|
-
* we merge them back from the statically-imported baseConfig
|
|
18
|
+
* we merge them back from the statically-imported baseConfig (core runes)
|
|
19
|
+
* and from the community tags bundle (community runes).
|
|
16
20
|
*/
|
|
17
|
-
function restorePostTransforms(
|
|
21
|
+
function restorePostTransforms(
|
|
22
|
+
config: ThemeConfig,
|
|
23
|
+
communityPostTransforms?: Record<string, PostTransformFn>,
|
|
24
|
+
): ThemeConfig {
|
|
18
25
|
const runes = { ...config.runes };
|
|
19
26
|
for (const [name, rune] of Object.entries(baseConfig.runes)) {
|
|
20
27
|
if (rune.postTransform && runes[name]) {
|
|
21
28
|
runes[name] = { ...runes[name], postTransform: rune.postTransform };
|
|
22
29
|
}
|
|
23
30
|
}
|
|
31
|
+
if (communityPostTransforms) {
|
|
32
|
+
for (const [name, postTransform] of Object.entries(communityPostTransforms)) {
|
|
33
|
+
if (runes[name]) {
|
|
34
|
+
runes[name] = { ...runes[name], postTransform };
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
24
38
|
return { ...config, runes };
|
|
25
39
|
}
|
|
26
40
|
|
|
@@ -36,15 +50,24 @@ export function renderBlockPreview(
|
|
|
36
50
|
source: string,
|
|
37
51
|
themeConfig: ThemeConfig,
|
|
38
52
|
highlightTransform?: ((tree: RendererNode) => RendererNode) | null,
|
|
53
|
+
extraTags?: Record<string, unknown>,
|
|
54
|
+
communityPostTransforms?: Record<string, PostTransformFn>,
|
|
55
|
+
aggregated?: AggregatedData,
|
|
39
56
|
): { html: string; isComponent: boolean } {
|
|
40
57
|
const ast = Markdoc.parse(source);
|
|
41
|
-
const fullConfig = restorePostTransforms(themeConfig);
|
|
58
|
+
const fullConfig = restorePostTransforms(themeConfig, communityPostTransforms);
|
|
59
|
+
const mergedTags = extraTags ? { ...tags, ...extraTags as Record<string, import('@markdoc/markdoc').Schema> } : tags;
|
|
42
60
|
const renderable = Markdoc.transform(ast, {
|
|
43
|
-
tags,
|
|
61
|
+
tags: mergedTags,
|
|
44
62
|
nodes,
|
|
45
63
|
variables: { __source: source, __icons: fullConfig.icons },
|
|
46
64
|
});
|
|
47
|
-
|
|
65
|
+
let serialized = serializeTree(renderable) as RendererNode;
|
|
66
|
+
|
|
67
|
+
// Client-side equivalent of Phase 4: inject design tokens into sandbox nodes
|
|
68
|
+
if (aggregated) {
|
|
69
|
+
serialized = injectSandboxDesignTokens(serialized, aggregated) as RendererNode;
|
|
70
|
+
}
|
|
48
71
|
|
|
49
72
|
// Check if the root rune needs runtime resources (placeholder)
|
|
50
73
|
const isComponent = checkIsRuntimeOnly(serialized);
|
|
@@ -72,3 +95,43 @@ function checkIsRuntimeOnly(node: RendererNode): boolean {
|
|
|
72
95
|
}
|
|
73
96
|
return false;
|
|
74
97
|
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Client-side equivalent of the design package's Phase 4 postProcess.
|
|
101
|
+
* Walks the serialized tree and injects design-tokens meta into Sandbox nodes
|
|
102
|
+
* based on their context attribute and the cached aggregated data.
|
|
103
|
+
*/
|
|
104
|
+
function injectSandboxDesignTokens(node: RendererNode, aggregated: AggregatedData): RendererNode {
|
|
105
|
+
if (node === null || node === undefined) return node;
|
|
106
|
+
if (typeof node === 'string' || typeof node === 'number') return node;
|
|
107
|
+
if (Array.isArray(node)) {
|
|
108
|
+
return node.map(n => injectSandboxDesignTokens(n as RendererNode, aggregated)) as RendererNode;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const tag = node as SerializedTag;
|
|
112
|
+
if (tag.attributes?.typeof === 'Sandbox') {
|
|
113
|
+
const design = aggregated['design'] as { contexts?: Record<string, unknown> } | undefined;
|
|
114
|
+
const contexts = design?.contexts ?? {};
|
|
115
|
+
const contextChild = tag.children?.find(
|
|
116
|
+
c => (c as SerializedTag)?.attributes?.property === 'context',
|
|
117
|
+
) as SerializedTag | undefined;
|
|
118
|
+
const scope = (contextChild?.attributes?.content as string) ?? 'default';
|
|
119
|
+
const tokens = contexts[scope];
|
|
120
|
+
if (tokens) {
|
|
121
|
+
const injected: SerializedTag = {
|
|
122
|
+
$$mdtype: 'Tag',
|
|
123
|
+
name: 'meta',
|
|
124
|
+
attributes: { property: 'design-tokens', content: JSON.stringify(tokens) },
|
|
125
|
+
children: [],
|
|
126
|
+
};
|
|
127
|
+
return { ...tag, children: [...(tag.children ?? []), injected] };
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (tag.children?.length) {
|
|
132
|
+
const newChildren = tag.children.map(c => injectSandboxDesignTokens(c as RendererNode, aggregated));
|
|
133
|
+
return { ...tag, children: newChildren };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return tag;
|
|
137
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface CommunityTagsBuildResult {
|
|
2
|
+
outputPath: string;
|
|
3
|
+
success: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Build a browser-compatible ESM module exporting community rune Markdoc schemas
|
|
7
|
+
* and postTransform functions.
|
|
8
|
+
*
|
|
9
|
+
* Uses esbuild (available via Vite in SvelteKit projects) to bundle all configured
|
|
10
|
+
* community package schemas into a single self-contained file.
|
|
11
|
+
* Falls back gracefully if esbuild is not available.
|
|
12
|
+
* Caches by package name hash — repeat editor starts are instant.
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildCommunityTagsBundle(packageNames: string[], projectRoot: string): Promise<CommunityTagsBuildResult>;
|
|
15
|
+
//# sourceMappingURL=community-tags-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community-tags-builder.d.ts","sourceRoot":"","sources":["../src/community-tags-builder.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,wBAAwB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC7C,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,wBAAwB,CAAC,CAqDnC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
/**
|
|
5
|
+
* Build a browser-compatible ESM module exporting community rune Markdoc schemas
|
|
6
|
+
* and postTransform functions.
|
|
7
|
+
*
|
|
8
|
+
* Uses esbuild (available via Vite in SvelteKit projects) to bundle all configured
|
|
9
|
+
* community package schemas into a single self-contained file.
|
|
10
|
+
* Falls back gracefully if esbuild is not available.
|
|
11
|
+
* Caches by package name hash — repeat editor starts are instant.
|
|
12
|
+
*/
|
|
13
|
+
export async function buildCommunityTagsBundle(packageNames, projectRoot) {
|
|
14
|
+
if (packageNames.length === 0)
|
|
15
|
+
return { outputPath: '', success: false };
|
|
16
|
+
const cacheDir = resolve(import.meta.dirname, '..', '.community-tags-cache');
|
|
17
|
+
const hash = createHash('md5').update(packageNames.slice().sort().join(',')).digest('hex').slice(0, 8);
|
|
18
|
+
const outputPath = resolve(cacheDir, `${hash}.js`);
|
|
19
|
+
if (existsSync(outputPath))
|
|
20
|
+
return { outputPath, success: true };
|
|
21
|
+
// Generate entry: import each package, collect rune schemas and postTransforms
|
|
22
|
+
const imports = packageNames
|
|
23
|
+
.map((name, i) => `import pkg${i} from ${JSON.stringify(name)};`)
|
|
24
|
+
.join('\n');
|
|
25
|
+
const pkgArray = packageNames.map((_, i) => `pkg${i}`).join(', ');
|
|
26
|
+
const entryCode = `
|
|
27
|
+
${imports}
|
|
28
|
+
|
|
29
|
+
const communityTags = {};
|
|
30
|
+
const communityPostTransforms = {};
|
|
31
|
+
for (const pkg of [${pkgArray}]) {
|
|
32
|
+
for (const [name, entry] of Object.entries(pkg.runes ?? {})) {
|
|
33
|
+
if (entry.transform) {
|
|
34
|
+
communityTags[name] = entry.transform;
|
|
35
|
+
for (const alias of (entry.aliases ?? [])) {
|
|
36
|
+
communityTags[alias] = entry.transform;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
for (const [name, runeConfig] of Object.entries(pkg.theme?.runes ?? {})) {
|
|
41
|
+
if (typeof runeConfig.postTransform === 'function') {
|
|
42
|
+
communityPostTransforms[name] = runeConfig.postTransform;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export { communityTags, communityPostTransforms };
|
|
47
|
+
`;
|
|
48
|
+
try {
|
|
49
|
+
const { build } = await import('esbuild');
|
|
50
|
+
mkdirSync(cacheDir, { recursive: true });
|
|
51
|
+
await build({
|
|
52
|
+
stdin: { contents: entryCode, resolveDir: projectRoot, loader: 'js' },
|
|
53
|
+
bundle: true,
|
|
54
|
+
format: 'esm',
|
|
55
|
+
outfile: outputPath,
|
|
56
|
+
platform: 'browser',
|
|
57
|
+
external: ['node:*'],
|
|
58
|
+
});
|
|
59
|
+
return { outputPath, success: true };
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
console.warn('[refrakt] Community tags bundle build failed:', err.message);
|
|
63
|
+
return { outputPath: '', success: false };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=community-tags-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community-tags-builder.js","sourceRoot":"","sources":["../src/community-tags-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOzC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,YAAsB,EACtB,WAAmB;IAEnB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAEzE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;IAEnD,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEjE,+EAA+E;IAC/E,MAAM,OAAO,GAAG,YAAY;SAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG;EACjB,OAAO;;;;qBAIY,QAAQ;;;;;;;;;;;;;;;;CAgB5B,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;YACX,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;YACrE,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,SAAS;YACnB,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,+CAA+C,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QACtF,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;AACF,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { Schema } from '@markdoc/markdoc';
|
|
2
|
+
import type { HookSet } from '@refrakt-md/content';
|
|
2
3
|
import type { ThemeConfig, RendererNode } from '@refrakt-md/transform';
|
|
4
|
+
import type { AggregatedData } from '@refrakt-md/types';
|
|
3
5
|
export interface PagePreviewData {
|
|
4
6
|
renderable: unknown;
|
|
5
7
|
regions: Record<string, {
|
|
@@ -28,8 +30,12 @@ export declare class LayoutResolver {
|
|
|
28
30
|
private tree;
|
|
29
31
|
private router;
|
|
30
32
|
private pagesList;
|
|
33
|
+
private hookSets;
|
|
34
|
+
private aggregated;
|
|
31
35
|
private mergedTags;
|
|
32
36
|
constructor(contentDir: string, themeConfig: ThemeConfig, extraTags?: Record<string, Schema>);
|
|
37
|
+
/** Update the cached aggregated data and hook sets for Phase 4 preview support */
|
|
38
|
+
setAggregated(aggregated: AggregatedData, hookSets: HookSet[]): void;
|
|
33
39
|
/** Build/refresh the ContentTree (call on startup + after file saves) */
|
|
34
40
|
refresh(): Promise<void>;
|
|
35
41
|
/**
|
|
@@ -57,5 +63,10 @@ export declare class LayoutResolver {
|
|
|
57
63
|
private findPageOrSynthetic;
|
|
58
64
|
/** Build the pages list for Nav component link resolution */
|
|
59
65
|
private buildPagesList;
|
|
66
|
+
/**
|
|
67
|
+
* Run Phase 4 postProcess hooks on a pre-serialized Markdoc renderable.
|
|
68
|
+
* Returns the (possibly modified) renderable. Errors degrade silently.
|
|
69
|
+
*/
|
|
70
|
+
private runPostProcess;
|
|
60
71
|
}
|
|
61
72
|
//# sourceMappingURL=layout-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-resolver.d.ts","sourceRoot":"","sources":["../src/layout-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"layout-resolver.d.ts","sourceRoot":"","sources":["../src/layout-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAe,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAqD,MAAM,mBAAmB,CAAC;AAE3G,MAAM,WAAW,eAAe;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAC3E;AAED;;;GAGG;AACH,qBAAa,cAAc;IAUzB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IAVpB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,SAAS,CAA2E;IAC5F,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,UAAU,CAAsB;IAExC,OAAO,CAAC,UAAU,CAAyB;gBAGlC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,WAAW,EAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKnC,kFAAkF;IAClF,aAAa,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAKpE,yEAAyE;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B;;;OAGG;IACH,gBAAgB,CACf,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,EACvD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,GACvD,eAAe;IAiClB;;;OAGG;IACH,sBAAsB,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,EACvD,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,GACvD,eAAe;IAoClB;;;;;;OAMG;IACH,OAAO,CAAC,0BAA0B;IAoClC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuB3B,6DAA6D;IAC7D,OAAO,CAAC,cAAc;IAetB;;;OAGG;IACH,OAAO,CAAC,cAAc;CAyBtB"}
|
package/dist/layout-resolver.js
CHANGED
|
@@ -11,12 +11,19 @@ export class LayoutResolver {
|
|
|
11
11
|
tree = null;
|
|
12
12
|
router = new Router('/');
|
|
13
13
|
pagesList = [];
|
|
14
|
+
hookSets = [];
|
|
15
|
+
aggregated = {};
|
|
14
16
|
mergedTags;
|
|
15
17
|
constructor(contentDir, themeConfig, extraTags) {
|
|
16
18
|
this.contentDir = contentDir;
|
|
17
19
|
this.themeConfig = themeConfig;
|
|
18
20
|
this.mergedTags = extraTags ? { ...tags, ...extraTags } : tags;
|
|
19
21
|
}
|
|
22
|
+
/** Update the cached aggregated data and hook sets for Phase 4 preview support */
|
|
23
|
+
setAggregated(aggregated, hookSets) {
|
|
24
|
+
this.aggregated = aggregated;
|
|
25
|
+
this.hookSets = hookSets;
|
|
26
|
+
}
|
|
20
27
|
/** Build/refresh the ContentTree (call on startup + after file saves) */
|
|
21
28
|
async refresh() {
|
|
22
29
|
this.tree = await ContentTree.fromDirectory(this.contentDir);
|
|
@@ -35,14 +42,15 @@ export class LayoutResolver {
|
|
|
35
42
|
nodes,
|
|
36
43
|
variables: { __source: content, __icons: this.themeConfig.icons },
|
|
37
44
|
});
|
|
38
|
-
|
|
45
|
+
// Phase 4: run postProcess hooks before serialization
|
|
46
|
+
const url = this.router.filePathToUrl(filePath);
|
|
47
|
+
const postProcessed = this.runPostProcess(rendered, url, frontmatter);
|
|
48
|
+
const serialized = serializeTree(postProcessed);
|
|
39
49
|
let transformed = identityTransform(serialized);
|
|
40
50
|
if (highlightTransform)
|
|
41
51
|
transformed = highlightTransform(transformed);
|
|
42
52
|
// Resolve layouts and transform region content
|
|
43
53
|
const regions = this.resolveAndTransformRegions(filePath, identityTransform, highlightTransform);
|
|
44
|
-
// Compute URL for route rule matching
|
|
45
|
-
const url = this.router.filePathToUrl(filePath);
|
|
46
54
|
return {
|
|
47
55
|
renderable: transformed,
|
|
48
56
|
regions,
|
|
@@ -164,5 +172,40 @@ export class LayoutResolver {
|
|
|
164
172
|
}
|
|
165
173
|
return pages;
|
|
166
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Run Phase 4 postProcess hooks on a pre-serialized Markdoc renderable.
|
|
177
|
+
* Returns the (possibly modified) renderable. Errors degrade silently.
|
|
178
|
+
*/
|
|
179
|
+
runPostProcess(renderable, url, frontmatter) {
|
|
180
|
+
if (this.hookSets.length === 0)
|
|
181
|
+
return renderable;
|
|
182
|
+
let page = {
|
|
183
|
+
url,
|
|
184
|
+
title: frontmatter.title ?? '',
|
|
185
|
+
renderable,
|
|
186
|
+
frontmatter,
|
|
187
|
+
headings: [],
|
|
188
|
+
};
|
|
189
|
+
const warnings = [];
|
|
190
|
+
for (const { packageName, hooks } of this.hookSets) {
|
|
191
|
+
if (!hooks.postProcess)
|
|
192
|
+
continue;
|
|
193
|
+
const ctx = makeEditorContext(warnings, packageName, url);
|
|
194
|
+
try {
|
|
195
|
+
page = hooks.postProcess(page, this.aggregated, ctx);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Degrade silently in preview
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return page.renderable;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function makeEditorContext(warnings, packageName, url) {
|
|
205
|
+
return {
|
|
206
|
+
info(message, infoUrl) { warnings.push({ severity: 'info', phase: 'postProcess', packageName, url: infoUrl ?? url, message }); },
|
|
207
|
+
warn(message, warnUrl) { warnings.push({ severity: 'warning', phase: 'postProcess', packageName, url: warnUrl ?? url, message }); },
|
|
208
|
+
error(message, errUrl) { warnings.push({ severity: 'error', phase: 'postProcess', packageName, url: errUrl ?? url, message }); },
|
|
209
|
+
};
|
|
167
210
|
}
|
|
168
211
|
//# sourceMappingURL=layout-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-resolver.js","sourceRoot":"","sources":["../src/layout-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5F,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"layout-resolver.js","sourceRoot":"","sources":["../src/layout-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-builder.d.ts","sourceRoot":"","sources":["../src/preview-builder.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACxC,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"preview-builder.d.ts","sourceRoot":"","sources":["../src/preview-builder.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IAClC,2DAA2D;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACxC,eAAe,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAsD7B"}
|
package/dist/preview-builder.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
-
import { existsSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
4
|
/**
|
|
5
5
|
* Build the preview runtime — a small Svelte app that includes the user's
|
|
@@ -11,7 +11,16 @@ import { createHash } from 'node:crypto';
|
|
|
11
11
|
*/
|
|
12
12
|
export async function buildPreviewRuntime(themeSveltePath) {
|
|
13
13
|
const cacheDir = resolve(import.meta.dirname, '..', '.preview-cache');
|
|
14
|
-
const
|
|
14
|
+
const runtimeDir = resolve(import.meta.dirname, '..', 'preview-runtime');
|
|
15
|
+
// Cache key includes theme path + runtime source content so any source change busts the cache
|
|
16
|
+
const hasher = createHash('md5').update(themeSveltePath);
|
|
17
|
+
for (const file of ['App.svelte', 'index.html']) {
|
|
18
|
+
try {
|
|
19
|
+
hasher.update(readFileSync(resolve(runtimeDir, file)));
|
|
20
|
+
}
|
|
21
|
+
catch { /**/ }
|
|
22
|
+
}
|
|
23
|
+
const hash = hasher.digest('hex').slice(0, 8);
|
|
15
24
|
const outputDir = resolve(cacheDir, hash);
|
|
16
25
|
// Skip rebuild if cache exists
|
|
17
26
|
if (existsSync(resolve(outputDir, 'index.html'))) {
|
|
@@ -21,7 +30,6 @@ export async function buildPreviewRuntime(themeSveltePath) {
|
|
|
21
30
|
// Dynamic imports — these may not be installed at runtime
|
|
22
31
|
const { build } = await import('vite');
|
|
23
32
|
const { svelte } = await import('@sveltejs/vite-plugin-svelte');
|
|
24
|
-
const runtimeDir = resolve(import.meta.dirname, '..', 'preview-runtime');
|
|
25
33
|
if (!existsSync(resolve(runtimeDir, 'index.html'))) {
|
|
26
34
|
console.warn('Preview runtime source files not found');
|
|
27
35
|
return { outputDir: '', success: false };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview-builder.js","sourceRoot":"","sources":["../src/preview-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"preview-builder.js","sourceRoot":"","sources":["../src/preview-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/preview.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
import type { Schema } from '@markdoc/markdoc';
|
|
2
2
|
import type { ThemeConfig, RendererNode } from '@refrakt-md/transform';
|
|
3
|
+
import type { HookSet } from '@refrakt-md/content';
|
|
4
|
+
import type { AggregatedData } from '@refrakt-md/types';
|
|
3
5
|
/**
|
|
4
6
|
* Render a markdown file through the full refrakt.md pipeline,
|
|
5
7
|
* returning a complete HTML document string with theme CSS inlined.
|
|
6
8
|
*/
|
|
7
|
-
export declare function renderPreviewPage(contentDir: string, filePath: string, themeConfig: ThemeConfig, themeCss: string, highlightTransform?: (tree: RendererNode) => RendererNode, extraTags?: Record<string, Schema
|
|
9
|
+
export declare function renderPreviewPage(contentDir: string, filePath: string, themeConfig: ThemeConfig, themeCss: string, highlightTransform?: (tree: RendererNode) => RendererNode, extraTags?: Record<string, Schema>, pipelineOptions?: PreviewPipelineOptions): string;
|
|
10
|
+
export interface PreviewPipelineOptions {
|
|
11
|
+
/** Cached aggregated data from the cross-page pipeline */
|
|
12
|
+
aggregated?: AggregatedData;
|
|
13
|
+
/** HookSets to run as Phase 4 postProcess before serialization */
|
|
14
|
+
hookSets?: HookSet[];
|
|
15
|
+
/** URL of the page being previewed (for postProcess context) */
|
|
16
|
+
url?: string;
|
|
17
|
+
}
|
|
8
18
|
/**
|
|
9
19
|
* Render raw markdown content (not from disk) through the full pipeline.
|
|
10
20
|
* Used for live preview while typing.
|
|
11
21
|
*/
|
|
12
|
-
export declare function renderPreviewContent(raw: string, themeConfig: ThemeConfig, themeCss: string, highlightTransform?: (tree: RendererNode) => RendererNode, extraTags?: Record<string, Schema
|
|
22
|
+
export declare function renderPreviewContent(raw: string, themeConfig: ThemeConfig, themeCss: string, highlightTransform?: (tree: RendererNode) => RendererNode, extraTags?: Record<string, Schema>, pipelineOptions?: PreviewPipelineOptions): string;
|
|
13
23
|
//# sourceMappingURL=preview.d.ts.map
|
package/dist/preview.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAqD,MAAM,mBAAmB,CAAC;AAE3G;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,EACzD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,eAAe,CAAC,EAAE,sBAAsB,GACtC,MAAM,CAIR;AAED,MAAM,WAAW,sBAAsB;IACtC,0DAA0D;IAC1D,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,EACzD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,eAAe,CAAC,EAAE,sBAAsB,GACtC,MAAM,CA6DR"}
|
package/dist/preview.js
CHANGED
|
@@ -8,25 +8,29 @@ import { parseFrontmatter } from '@refrakt-md/content';
|
|
|
8
8
|
* Render a markdown file through the full refrakt.md pipeline,
|
|
9
9
|
* returning a complete HTML document string with theme CSS inlined.
|
|
10
10
|
*/
|
|
11
|
-
export function renderPreviewPage(contentDir, filePath, themeConfig, themeCss, highlightTransform, extraTags) {
|
|
11
|
+
export function renderPreviewPage(contentDir, filePath, themeConfig, themeCss, highlightTransform, extraTags, pipelineOptions) {
|
|
12
12
|
const fullPath = join(contentDir, filePath);
|
|
13
13
|
const raw = readFileSync(fullPath, 'utf-8');
|
|
14
|
-
return renderPreviewContent(raw, themeConfig, themeCss, highlightTransform, extraTags);
|
|
14
|
+
return renderPreviewContent(raw, themeConfig, themeCss, highlightTransform, extraTags, pipelineOptions);
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Render raw markdown content (not from disk) through the full pipeline.
|
|
18
18
|
* Used for live preview while typing.
|
|
19
19
|
*/
|
|
20
|
-
export function renderPreviewContent(raw, themeConfig, themeCss, highlightTransform, extraTags) {
|
|
20
|
+
export function renderPreviewContent(raw, themeConfig, themeCss, highlightTransform, extraTags, pipelineOptions) {
|
|
21
21
|
const { frontmatter, content } = parseFrontmatter(raw);
|
|
22
22
|
// Run the Markdoc pipeline
|
|
23
23
|
const ast = Markdoc.parse(content);
|
|
24
24
|
const mergedTags = extraTags ? { ...tags, ...extraTags } : tags;
|
|
25
|
-
|
|
25
|
+
let renderable = Markdoc.transform(ast, {
|
|
26
26
|
tags: mergedTags,
|
|
27
27
|
nodes,
|
|
28
28
|
variables: { __source: content, __icons: themeConfig.icons },
|
|
29
29
|
});
|
|
30
|
+
// Phase 4: run postProcess hooks before serialization
|
|
31
|
+
if (pipelineOptions?.hookSets?.length && pipelineOptions.aggregated) {
|
|
32
|
+
renderable = runPreviewPostProcess(renderable, pipelineOptions.aggregated, pipelineOptions.hookSets, pipelineOptions.url ?? '/', frontmatter);
|
|
33
|
+
}
|
|
30
34
|
const serialized = serializeTree(renderable);
|
|
31
35
|
// Apply identity transform (BEM classes, structure injection, meta consumption)
|
|
32
36
|
const transform = createTransform(themeConfig);
|
|
@@ -68,4 +72,30 @@ function escapeHtml(s) {
|
|
|
68
72
|
.replace(/>/g, '>')
|
|
69
73
|
.replace(/"/g, '"');
|
|
70
74
|
}
|
|
75
|
+
function runPreviewPostProcess(renderable, aggregated, hookSets, url, frontmatter) {
|
|
76
|
+
let page = {
|
|
77
|
+
url,
|
|
78
|
+
title: frontmatter.title ?? '',
|
|
79
|
+
renderable,
|
|
80
|
+
frontmatter,
|
|
81
|
+
headings: [],
|
|
82
|
+
};
|
|
83
|
+
const warnings = [];
|
|
84
|
+
for (const { packageName, hooks } of hookSets) {
|
|
85
|
+
if (!hooks.postProcess)
|
|
86
|
+
continue;
|
|
87
|
+
const ctx = {
|
|
88
|
+
info(message, u) { warnings.push({ severity: 'info', phase: 'postProcess', packageName, url: u ?? url, message }); },
|
|
89
|
+
warn(message, u) { warnings.push({ severity: 'warning', phase: 'postProcess', packageName, url: u ?? url, message }); },
|
|
90
|
+
error(message, u) { warnings.push({ severity: 'error', phase: 'postProcess', packageName, url: u ?? url, message }); },
|
|
91
|
+
};
|
|
92
|
+
try {
|
|
93
|
+
page = hooks.postProcess(page, aggregated, ctx);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Degrade silently
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return page.renderable;
|
|
100
|
+
}
|
|
71
101
|
//# sourceMappingURL=preview.js.map
|
package/dist/preview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../src/preview.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ThemeConfig } from '@refrakt-md/transform';
|
|
2
|
-
import type { RouteRule } from '@refrakt-md/types';
|
|
2
|
+
import type { RouteRule, RunePackage } from '@refrakt-md/types';
|
|
3
3
|
export interface EditorOptions {
|
|
4
4
|
/** Absolute path to the content directory */
|
|
5
5
|
contentDir: string;
|
|
@@ -21,6 +21,10 @@ export interface EditorOptions {
|
|
|
21
21
|
configPath?: string;
|
|
22
22
|
/** Route rules from refrakt.config.json */
|
|
23
23
|
routeRules?: RouteRule[];
|
|
24
|
+
/** npm package names of community rune packages (used to build client-side tags bundle) */
|
|
25
|
+
packageNames?: string[];
|
|
26
|
+
/** Community rune packages (for cross-page pipeline hooks) */
|
|
27
|
+
packages?: RunePackage[];
|
|
24
28
|
/** Extra Markdoc tags from community packages (merged into preview pipeline) */
|
|
25
29
|
extraTags?: Record<string, import('@markdoc/markdoc').Schema>;
|
|
26
30
|
/** Community rune metadata for the editor palette */
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAkB,MAAM,mBAAmB,CAAC;AAShF,MAAM,WAAW,aAAa;IAC7B,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAC9D,qDAAqD;IACrD,cAAc,CAAC,EAAE,KAAK,CAAC;QACtB,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QACrD,WAAW,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QACvC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QACnF,OAAO,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACH;AAgCD,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAsTvE"}
|