@mzebley/mark-down 1.2.0 → 1.2.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/dist/angular/index.d.ts +18 -0
- package/dist/angular/index.js +58 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/browser.js +580 -0
- package/dist/browser.js.map +1 -0
- package/{src/snippet-client.ts → dist/chunk-35YHML5Z.js} +97 -174
- package/dist/chunk-35YHML5Z.js.map +1 -0
- package/dist/chunk-BRKEJJFQ.js +17 -0
- package/dist/chunk-BRKEJJFQ.js.map +1 -0
- package/dist/chunk-GWLMADTU.js +19 -0
- package/dist/chunk-GWLMADTU.js.map +1 -0
- package/{src/front-matter.ts → dist/chunk-MWZFQXNW.js} +48 -39
- package/dist/chunk-MWZFQXNW.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/inline.d.ts +8 -0
- package/{src/inline.ts → dist/inline.js} +19 -34
- package/dist/inline.js.map +1 -0
- package/dist/mark-down-inline.umd.js +8486 -0
- package/dist/mark-down-inline.umd.js.map +1 -0
- package/dist/slug.d.ts +3 -0
- package/dist/slug.js +8 -0
- package/dist/slug.js.map +1 -0
- package/dist/snippet-client-CiQX2Zcn.d.ts +63 -0
- package/package.json +12 -6
- package/src/angular/index.ts +0 -47
- package/src/browser.ts +0 -141
- package/src/errors.ts +0 -19
- package/src/index.ts +0 -5
- package/src/markdown.ts +0 -11
- package/src/slug.ts +0 -21
- package/src/types.ts +0 -49
- package/tsconfig.json +0 -7
- package/tsup.config.ts +0 -59
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
var SnippetNotFoundError = class extends Error {
|
|
3
|
+
constructor(slug) {
|
|
4
|
+
super(`Snippet with slug '${slug}' was not found in the manifest.`);
|
|
5
|
+
this.name = "SnippetNotFoundError";
|
|
6
|
+
this.slug = slug;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
var ManifestLoadError = class extends Error {
|
|
10
|
+
constructor(message, cause) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "ManifestLoadError";
|
|
13
|
+
this.cause = cause instanceof Error ? cause : cause ? new Error(String(cause)) : void 0;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
// src/front-matter.ts
|
|
18
|
+
import { parse as parseYaml } from "yaml";
|
|
19
|
+
var FRONT_MATTER_PATTERN = /^(?:\uFEFF)?[ \t\r\n]*---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n?/;
|
|
20
|
+
function parseFrontMatter(raw) {
|
|
16
21
|
const match = FRONT_MATTER_PATTERN.exec(raw);
|
|
17
22
|
if (!match) {
|
|
18
23
|
return { content: raw, meta: {}, extra: {}, hasFrontMatter: false };
|
|
19
24
|
}
|
|
20
|
-
|
|
21
25
|
const yamlSection = match[1];
|
|
22
|
-
let data
|
|
26
|
+
let data;
|
|
23
27
|
try {
|
|
24
28
|
data = parseYaml(yamlSection) ?? {};
|
|
25
29
|
} catch (error) {
|
|
26
30
|
throw new ManifestLoadError("Failed to parse snippet front-matter.", error);
|
|
27
31
|
}
|
|
28
|
-
|
|
29
32
|
if (!isRecord(data)) {
|
|
30
33
|
return { content: raw.slice(match[0].length), meta: {}, extra: {}, hasFrontMatter: true };
|
|
31
34
|
}
|
|
32
|
-
|
|
33
35
|
const { known, extra } = splitFrontMatter(data);
|
|
34
|
-
|
|
35
36
|
return {
|
|
36
37
|
content: raw.slice(match[0].length),
|
|
37
38
|
meta: known.meta,
|
|
@@ -40,18 +41,14 @@ export function parseFrontMatter(raw: string): FrontMatterResult {
|
|
|
40
41
|
hasFrontMatter: true
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const meta: Partial<SnippetMeta> = {};
|
|
48
|
-
const extra: Record<string, unknown> = {};
|
|
49
|
-
let slug: string | undefined;
|
|
50
|
-
|
|
44
|
+
function splitFrontMatter(data) {
|
|
45
|
+
const meta = {};
|
|
46
|
+
const extra = {};
|
|
47
|
+
let slug;
|
|
51
48
|
for (const [key, value] of Object.entries(data)) {
|
|
52
49
|
switch (key) {
|
|
53
50
|
case "slug":
|
|
54
|
-
slug = typeof value === "string" ? value :
|
|
51
|
+
slug = typeof value === "string" ? value : void 0;
|
|
55
52
|
break;
|
|
56
53
|
case "title":
|
|
57
54
|
if (typeof value === "string") {
|
|
@@ -86,26 +83,38 @@ function splitFrontMatter(
|
|
|
86
83
|
break;
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
|
-
|
|
90
86
|
return { known: { meta, slug }, extra };
|
|
91
87
|
}
|
|
92
|
-
|
|
93
|
-
function normalizeTags(value: unknown): string[] | undefined {
|
|
88
|
+
function normalizeTags(value) {
|
|
94
89
|
if (!value) {
|
|
95
|
-
return
|
|
90
|
+
return void 0;
|
|
96
91
|
}
|
|
97
92
|
if (Array.isArray(value)) {
|
|
98
93
|
return value.map((item) => String(item));
|
|
99
94
|
}
|
|
100
95
|
if (typeof value === "string") {
|
|
101
|
-
return value
|
|
102
|
-
.split(",")
|
|
103
|
-
.map((tag) => tag.trim())
|
|
104
|
-
.filter(Boolean);
|
|
96
|
+
return value.split(",").map((tag) => tag.trim()).filter(Boolean);
|
|
105
97
|
}
|
|
106
|
-
return
|
|
98
|
+
return void 0;
|
|
107
99
|
}
|
|
108
|
-
|
|
109
|
-
function isRecord(candidate: unknown): candidate is Record<string, unknown> {
|
|
100
|
+
function isRecord(candidate) {
|
|
110
101
|
return Boolean(candidate) && typeof candidate === "object" && !Array.isArray(candidate);
|
|
111
102
|
}
|
|
103
|
+
|
|
104
|
+
// src/markdown.ts
|
|
105
|
+
import { marked } from "marked";
|
|
106
|
+
function renderMarkdown(markdown) {
|
|
107
|
+
const html = marked.parse(markdown);
|
|
108
|
+
if (typeof html === "string") {
|
|
109
|
+
return html;
|
|
110
|
+
}
|
|
111
|
+
throw new Error("renderMarkdown unexpectedly returned a Promise");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export {
|
|
115
|
+
SnippetNotFoundError,
|
|
116
|
+
ManifestLoadError,
|
|
117
|
+
parseFrontMatter,
|
|
118
|
+
renderMarkdown
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=chunk-MWZFQXNW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/front-matter.ts","../src/markdown.ts"],"sourcesContent":["export class SnippetNotFoundError extends Error {\n readonly slug: string;\n\n constructor(slug: string) {\n super(`Snippet with slug '${slug}' was not found in the manifest.`);\n this.name = \"SnippetNotFoundError\";\n this.slug = slug;\n }\n}\n\nexport class ManifestLoadError extends Error {\n readonly cause?: unknown;\n\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"ManifestLoadError\";\n this.cause = cause instanceof Error ? cause : cause ? new Error(String(cause)) : undefined;\n }\n}\n","import { parse as parseYaml } from \"yaml\";\nimport { ManifestLoadError } from \"./errors\";\nimport type { SnippetMeta } from \"./types\";\n\nexport interface FrontMatterResult {\n content: string;\n meta: Partial<SnippetMeta>;\n extra: Record<string, unknown>;\n slug?: string;\n hasFrontMatter: boolean;\n}\n\nconst FRONT_MATTER_PATTERN = /^(?:\\uFEFF)?[ \\t\\r\\n]*---\\s*\\r?\\n([\\s\\S]*?)\\r?\\n---\\s*\\r?\\n?/;\n\nexport function parseFrontMatter(raw: string): FrontMatterResult {\n const match = FRONT_MATTER_PATTERN.exec(raw);\n if (!match) {\n return { content: raw, meta: {}, extra: {}, hasFrontMatter: false };\n }\n\n const yamlSection = match[1];\n let data: unknown;\n try {\n data = parseYaml(yamlSection) ?? {};\n } catch (error) {\n throw new ManifestLoadError(\"Failed to parse snippet front-matter.\", error);\n }\n\n if (!isRecord(data)) {\n return { content: raw.slice(match[0].length), meta: {}, extra: {}, hasFrontMatter: true };\n }\n\n const { known, extra } = splitFrontMatter(data);\n\n return {\n content: raw.slice(match[0].length),\n meta: known.meta,\n extra,\n slug: known.slug,\n hasFrontMatter: true\n };\n}\n\nfunction splitFrontMatter(\n data: Record<string, unknown>\n): { known: { meta: Partial<SnippetMeta>; slug?: string }; extra: Record<string, unknown> } {\n const meta: Partial<SnippetMeta> = {};\n const extra: Record<string, unknown> = {};\n let slug: string | undefined;\n\n for (const [key, value] of Object.entries(data)) {\n switch (key) {\n case \"slug\":\n slug = typeof value === \"string\" ? value : undefined;\n break;\n case \"title\":\n if (typeof value === \"string\") {\n meta.title = value;\n }\n break;\n case \"type\":\n if (typeof value === \"string\") {\n meta.type = value;\n }\n break;\n case \"order\":\n if (typeof value === \"number\") {\n meta.order = value;\n }\n break;\n case \"tags\":\n meta.tags = normalizeTags(value);\n break;\n case \"group\":\n if (typeof value === \"string\" || value === null) {\n meta.group = value;\n }\n break;\n case \"draft\":\n if (typeof value === \"boolean\") {\n meta.draft = value;\n }\n break;\n default:\n extra[key] = value;\n break;\n }\n }\n\n return { known: { meta, slug }, extra };\n}\n\nfunction normalizeTags(value: unknown): string[] | undefined {\n if (!value) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n if (typeof value === \"string\") {\n return value\n .split(\",\")\n .map((tag) => tag.trim())\n .filter(Boolean);\n }\n return undefined;\n}\n\nfunction isRecord(candidate: unknown): candidate is Record<string, unknown> {\n return Boolean(candidate) && typeof candidate === \"object\" && !Array.isArray(candidate);\n}\n","import { marked } from \"marked\";\n\nexport function renderMarkdown(markdown: string): string {\n const html = marked.parse(markdown);\n\n if (typeof html === \"string\") {\n return html;\n }\n\n throw new Error(\"renderMarkdown unexpectedly returned a Promise\");\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { S as SnippetMeta } from './snippet-client-CiQX2Zcn.js';
|
|
2
|
+
export { M as ManifestSource, R as ResponseLike, a as Snippet, f as SnippetClient, e as SnippetClientOptions, d as SnippetFetcher, c as SnippetFetcherResult, b as SnippetSearchFilter } from './snippet-client-CiQX2Zcn.js';
|
|
3
|
+
export { normalizeSlug } from './slug.js';
|
|
4
|
+
|
|
5
|
+
declare class SnippetNotFoundError extends Error {
|
|
6
|
+
readonly slug: string;
|
|
7
|
+
constructor(slug: string);
|
|
8
|
+
}
|
|
9
|
+
declare class ManifestLoadError extends Error {
|
|
10
|
+
readonly cause?: unknown;
|
|
11
|
+
constructor(message: string, cause?: unknown);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface FrontMatterResult {
|
|
15
|
+
content: string;
|
|
16
|
+
meta: Partial<SnippetMeta>;
|
|
17
|
+
extra: Record<string, unknown>;
|
|
18
|
+
slug?: string;
|
|
19
|
+
hasFrontMatter: boolean;
|
|
20
|
+
}
|
|
21
|
+
declare function parseFrontMatter(raw: string): FrontMatterResult;
|
|
22
|
+
|
|
23
|
+
declare function renderMarkdown(markdown: string): string;
|
|
24
|
+
|
|
25
|
+
export { ManifestLoadError, SnippetMeta, SnippetNotFoundError, parseFrontMatter, renderMarkdown };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SnippetClient
|
|
3
|
+
} from "./chunk-35YHML5Z.js";
|
|
4
|
+
import {
|
|
5
|
+
normalizeSlug
|
|
6
|
+
} from "./chunk-GWLMADTU.js";
|
|
7
|
+
import {
|
|
8
|
+
ManifestLoadError,
|
|
9
|
+
SnippetNotFoundError,
|
|
10
|
+
parseFrontMatter,
|
|
11
|
+
renderMarkdown
|
|
12
|
+
} from "./chunk-MWZFQXNW.js";
|
|
13
|
+
import "./chunk-BRKEJJFQ.js";
|
|
14
|
+
export {
|
|
15
|
+
ManifestLoadError,
|
|
16
|
+
SnippetClient,
|
|
17
|
+
SnippetNotFoundError,
|
|
18
|
+
normalizeSlug,
|
|
19
|
+
parseFrontMatter,
|
|
20
|
+
renderMarkdown
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/inline.d.ts
ADDED
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const DEFAULT_SELECTOR = "[data-markdown]";
|
|
11
|
-
|
|
12
|
-
export function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void {
|
|
1
|
+
import {
|
|
2
|
+
parseFrontMatter,
|
|
3
|
+
renderMarkdown
|
|
4
|
+
} from "./chunk-MWZFQXNW.js";
|
|
5
|
+
import "./chunk-BRKEJJFQ.js";
|
|
6
|
+
|
|
7
|
+
// src/inline.ts
|
|
8
|
+
var DEFAULT_SELECTOR = "[data-markdown]";
|
|
9
|
+
function enhanceInlineMarkdown(options = {}) {
|
|
13
10
|
if (typeof document === "undefined") {
|
|
14
11
|
return;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
13
|
const selector = options.selector ?? DEFAULT_SELECTOR;
|
|
18
14
|
const processFrontMatter = options.processFrontMatter !== false;
|
|
19
15
|
const applyMetaToDom = options.applyMetaToDom !== false;
|
|
20
|
-
|
|
21
|
-
const elements = Array.from(document.querySelectorAll<HTMLElement>(selector));
|
|
16
|
+
const elements = Array.from(document.querySelectorAll(selector));
|
|
22
17
|
for (const element of elements) {
|
|
23
18
|
if (element.dataset.markdownProcessed === "true") {
|
|
24
19
|
continue;
|
|
@@ -26,55 +21,45 @@ export function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void
|
|
|
26
21
|
processElement(element, { processFrontMatter, applyMetaToDom });
|
|
27
22
|
}
|
|
28
23
|
}
|
|
29
|
-
|
|
30
|
-
function processElement(
|
|
31
|
-
element: HTMLElement,
|
|
32
|
-
options: { processFrontMatter: boolean; applyMetaToDom: boolean }
|
|
33
|
-
): void {
|
|
24
|
+
function processElement(element, options) {
|
|
34
25
|
const raw = element.textContent ?? "";
|
|
35
|
-
let frontMatter
|
|
36
|
-
|
|
26
|
+
let frontMatter;
|
|
37
27
|
if (options.processFrontMatter) {
|
|
38
28
|
try {
|
|
39
29
|
frontMatter = parseFrontMatter(raw);
|
|
40
30
|
} catch (error) {
|
|
41
|
-
console.warn("[mark
|
|
42
|
-
frontMatter =
|
|
31
|
+
console.warn("[mark\u2193 inline] Failed to parse front matter for element:", error);
|
|
32
|
+
frontMatter = void 0;
|
|
43
33
|
}
|
|
44
34
|
}
|
|
45
|
-
|
|
46
35
|
const body = frontMatter?.content ?? raw;
|
|
47
36
|
const html = renderMarkdown(body);
|
|
48
|
-
|
|
49
37
|
element.innerHTML = html;
|
|
50
38
|
element.dataset.markdownProcessed = "true";
|
|
51
|
-
|
|
52
39
|
if (options.applyMetaToDom && frontMatter?.hasFrontMatter) {
|
|
53
40
|
applyMetaAttributes(element, frontMatter);
|
|
54
41
|
}
|
|
55
42
|
}
|
|
56
|
-
|
|
57
|
-
function applyMetaAttributes(element: HTMLElement, frontMatter: FrontMatterResult): void {
|
|
43
|
+
function applyMetaAttributes(element, frontMatter) {
|
|
58
44
|
const { slug, meta, extra } = frontMatter;
|
|
59
|
-
|
|
60
45
|
if (slug) {
|
|
61
46
|
if (!element.id) {
|
|
62
47
|
element.id = slug;
|
|
63
48
|
}
|
|
64
49
|
element.dataset.slug = slug;
|
|
65
50
|
}
|
|
66
|
-
|
|
67
51
|
if (meta.title) {
|
|
68
52
|
element.dataset.title = meta.title;
|
|
69
53
|
}
|
|
70
|
-
|
|
71
54
|
if (meta.tags?.length) {
|
|
72
55
|
element.dataset.tags = meta.tags.join(",");
|
|
73
56
|
}
|
|
74
|
-
|
|
75
57
|
const variant = typeof extra.variant === "string" ? extra.variant.trim() : "";
|
|
76
58
|
if (variant) {
|
|
77
59
|
element.classList.add(`md-block--${variant}`);
|
|
78
60
|
}
|
|
79
|
-
|
|
80
61
|
}
|
|
62
|
+
export {
|
|
63
|
+
enhanceInlineMarkdown
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=inline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/inline.ts"],"sourcesContent":["import { parseFrontMatter, type FrontMatterResult } from \"./front-matter\";\nimport { renderMarkdown } from \"./markdown\";\n\nexport interface InlineMarkdownOptions {\n selector?: string;\n processFrontMatter?: boolean;\n applyMetaToDom?: boolean;\n}\n\nconst DEFAULT_SELECTOR = \"[data-markdown]\";\n\nexport function enhanceInlineMarkdown(options: InlineMarkdownOptions = {}): void {\n if (typeof document === \"undefined\") {\n return;\n }\n\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const processFrontMatter = options.processFrontMatter !== false;\n const applyMetaToDom = options.applyMetaToDom !== false;\n\n const elements = Array.from(document.querySelectorAll<HTMLElement>(selector));\n for (const element of elements) {\n if (element.dataset.markdownProcessed === \"true\") {\n continue;\n }\n processElement(element, { processFrontMatter, applyMetaToDom });\n }\n}\n\nfunction processElement(\n element: HTMLElement,\n options: { processFrontMatter: boolean; applyMetaToDom: boolean }\n): void {\n const raw = element.textContent ?? \"\";\n let frontMatter: FrontMatterResult | undefined;\n\n if (options.processFrontMatter) {\n try {\n frontMatter = parseFrontMatter(raw);\n } catch (error) {\n console.warn(\"[mark↓ inline] Failed to parse front matter for element:\", error);\n frontMatter = undefined;\n }\n }\n\n const body = frontMatter?.content ?? raw;\n const html = renderMarkdown(body);\n\n element.innerHTML = html;\n element.dataset.markdownProcessed = \"true\";\n\n if (options.applyMetaToDom && frontMatter?.hasFrontMatter) {\n applyMetaAttributes(element, frontMatter);\n }\n}\n\nfunction applyMetaAttributes(element: HTMLElement, frontMatter: FrontMatterResult): void {\n const { slug, meta, extra } = frontMatter;\n\n if (slug) {\n if (!element.id) {\n element.id = slug;\n }\n element.dataset.slug = slug;\n }\n\n if (meta.title) {\n element.dataset.title = meta.title;\n }\n\n if (meta.tags?.length) {\n element.dataset.tags = meta.tags.join(\",\");\n }\n\n const variant = typeof extra.variant === \"string\" ? extra.variant.trim() : \"\";\n if (variant) {\n element.classList.add(`md-block--${variant}`);\n }\n\n}\n"],"mappings":";;;;;;;AASA,IAAM,mBAAmB;AAElB,SAAS,sBAAsB,UAAiC,CAAC,GAAS;AAC/E,MAAI,OAAO,aAAa,aAAa;AACnC;AAAA,EACF;AAEA,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,qBAAqB,QAAQ,uBAAuB;AAC1D,QAAM,iBAAiB,QAAQ,mBAAmB;AAElD,QAAM,WAAW,MAAM,KAAK,SAAS,iBAA8B,QAAQ,CAAC;AAC5E,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,QAAQ,sBAAsB,QAAQ;AAChD;AAAA,IACF;AACA,mBAAe,SAAS,EAAE,oBAAoB,eAAe,CAAC;AAAA,EAChE;AACF;AAEA,SAAS,eACP,SACA,SACM;AACN,QAAM,MAAM,QAAQ,eAAe;AACnC,MAAI;AAEJ,MAAI,QAAQ,oBAAoB;AAC9B,QAAI;AACF,oBAAc,iBAAiB,GAAG;AAAA,IACpC,SAAS,OAAO;AACd,cAAQ,KAAK,iEAA4D,KAAK;AAC9E,oBAAc;AAAA,IAChB;AAAA,EACF;AAEA,QAAM,OAAO,aAAa,WAAW;AACrC,QAAM,OAAO,eAAe,IAAI;AAEhC,UAAQ,YAAY;AACpB,UAAQ,QAAQ,oBAAoB;AAEpC,MAAI,QAAQ,kBAAkB,aAAa,gBAAgB;AACzD,wBAAoB,SAAS,WAAW;AAAA,EAC1C;AACF;AAEA,SAAS,oBAAoB,SAAsB,aAAsC;AACvF,QAAM,EAAE,MAAM,MAAM,MAAM,IAAI;AAE9B,MAAI,MAAM;AACR,QAAI,CAAC,QAAQ,IAAI;AACf,cAAQ,KAAK;AAAA,IACf;AACA,YAAQ,QAAQ,OAAO;AAAA,EACzB;AAEA,MAAI,KAAK,OAAO;AACd,YAAQ,QAAQ,QAAQ,KAAK;AAAA,EAC/B;AAEA,MAAI,KAAK,MAAM,QAAQ;AACrB,YAAQ,QAAQ,OAAO,KAAK,KAAK,KAAK,GAAG;AAAA,EAC3C;AAEA,QAAM,UAAU,OAAO,MAAM,YAAY,WAAW,MAAM,QAAQ,KAAK,IAAI;AAC3E,MAAI,SAAS;AACX,YAAQ,UAAU,IAAI,aAAa,OAAO,EAAE;AAAA,EAC9C;AAEF;","names":[]}
|