@oddkin/workbench 0.0.0-stage → 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +36 -2
- package/dist/app/copy.d.ts +43 -0
- package/dist/app/copy.d.ts.map +1 -0
- package/dist/app/copy.js +47 -0
- package/dist/app/copy.js.map +1 -0
- package/dist/app/define.d.ts +3 -0
- package/dist/app/define.d.ts.map +1 -0
- package/dist/app/define.js +10 -0
- package/dist/app/define.js.map +1 -0
- package/dist/app/details.d.ts +22 -0
- package/dist/app/details.d.ts.map +1 -0
- package/dist/app/details.js +16 -0
- package/dist/app/details.js.map +1 -0
- package/dist/app/index.d.ts +12 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +9 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/routes.d.ts +26 -0
- package/dist/app/routes.d.ts.map +1 -0
- package/dist/app/routes.js +94 -0
- package/dist/app/routes.js.map +1 -0
- package/dist/app/search.d.ts +17 -0
- package/dist/app/search.d.ts.map +1 -0
- package/dist/app/search.js +52 -0
- package/dist/app/search.js.map +1 -0
- package/dist/app/shell.d.ts +29 -0
- package/dist/app/shell.d.ts.map +1 -0
- package/dist/app/shell.js +435 -0
- package/dist/app/shell.js.map +1 -0
- package/dist/app/styles.d.ts +2 -0
- package/dist/app/styles.d.ts.map +1 -0
- package/dist/app/styles.js +373 -0
- package/dist/app/styles.js.map +1 -0
- package/dist/app/theme-studio.d.ts +12 -0
- package/dist/app/theme-studio.d.ts.map +1 -0
- package/dist/app/theme-studio.js +14 -0
- package/dist/app/theme-studio.js.map +1 -0
- package/dist/app/views.d.ts +34 -0
- package/dist/app/views.d.ts.map +1 -0
- package/dist/app/views.js +230 -0
- package/dist/app/views.js.map +1 -0
- package/dist/config/index.d.ts +170 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +148 -0
- package/dist/config/index.js.map +1 -0
- package/dist/conformance/button.d.ts +2 -0
- package/dist/conformance/button.d.ts.map +1 -0
- package/dist/conformance/button.js +233 -0
- package/dist/conformance/button.js.map +1 -0
- package/dist/conformance/index.d.ts +107 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +60 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/data/build.d.ts +36 -0
- package/dist/data/build.d.ts.map +1 -0
- package/dist/data/build.js +248 -0
- package/dist/data/build.js.map +1 -0
- package/dist/data/import-map.d.ts +53 -0
- package/dist/data/import-map.d.ts.map +1 -0
- package/dist/data/import-map.js +160 -0
- package/dist/data/import-map.js.map +1 -0
- package/dist/data/index.d.ts +14 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/theme-studio.d.ts +21 -0
- package/dist/data/theme-studio.d.ts.map +1 -0
- package/dist/data/theme-studio.js +116 -0
- package/dist/data/theme-studio.js.map +1 -0
- package/dist/data/types.d.ts +169 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/data/types.js +4 -0
- package/dist/data/types.js.map +1 -0
- package/dist/examples/index.d.ts +101 -0
- package/dist/examples/index.d.ts.map +1 -0
- package/dist/examples/index.js +106 -0
- package/dist/examples/index.js.map +1 -0
- package/dist/frame/index.d.ts +9 -0
- package/dist/frame/index.d.ts.map +1 -0
- package/dist/frame/index.js +468 -0
- package/dist/frame/index.js.map +1 -0
- package/dist/internal/diagnostics.d.ts +17 -0
- package/dist/internal/diagnostics.d.ts.map +1 -0
- package/dist/internal/diagnostics.js +19 -0
- package/dist/internal/diagnostics.js.map +1 -0
- package/dist/node/bin.d.ts +3 -0
- package/dist/node/bin.d.ts.map +1 -0
- package/dist/node/bin.js +12 -0
- package/dist/node/bin.js.map +1 -0
- package/dist/node/cli.d.ts +17 -0
- package/dist/node/cli.d.ts.map +1 -0
- package/dist/node/cli.js +198 -0
- package/dist/node/cli.js.map +1 -0
- package/dist/node/config.d.ts +28 -0
- package/dist/node/config.d.ts.map +1 -0
- package/dist/node/config.js +80 -0
- package/dist/node/config.js.map +1 -0
- package/dist/node/generated.d.ts +19 -0
- package/dist/node/generated.d.ts.map +1 -0
- package/dist/node/generated.js +109 -0
- package/dist/node/generated.js.map +1 -0
- package/dist/node/html.d.ts +35 -0
- package/dist/node/html.d.ts.map +1 -0
- package/dist/node/html.js +51 -0
- package/dist/node/html.js.map +1 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +15 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/inputs.d.ts +24 -0
- package/dist/node/inputs.d.ts.map +1 -0
- package/dist/node/inputs.js +259 -0
- package/dist/node/inputs.js.map +1 -0
- package/dist/node/packages.d.ts +35 -0
- package/dist/node/packages.d.ts.map +1 -0
- package/dist/node/packages.js +87 -0
- package/dist/node/packages.js.map +1 -0
- package/dist/node/preload.d.ts +10 -0
- package/dist/node/preload.d.ts.map +1 -0
- package/dist/node/preload.js +61 -0
- package/dist/node/preload.js.map +1 -0
- package/dist/node/server.d.ts +42 -0
- package/dist/node/server.d.ts.map +1 -0
- package/dist/node/server.js +369 -0
- package/dist/node/server.js.map +1 -0
- package/dist/node/static.d.ts +33 -0
- package/dist/node/static.d.ts.map +1 -0
- package/dist/node/static.js +141 -0
- package/dist/node/static.js.map +1 -0
- package/dist/node/workbench.d.ts +43 -0
- package/dist/node/workbench.d.ts.map +1 -0
- package/dist/node/workbench.js +183 -0
- package/dist/node/workbench.js.map +1 -0
- package/dist/pages/build.d.ts +22 -0
- package/dist/pages/build.d.ts.map +1 -0
- package/dist/pages/build.js +363 -0
- package/dist/pages/build.js.map +1 -0
- package/dist/pages/defaults.d.ts +16 -0
- package/dist/pages/defaults.d.ts.map +1 -0
- package/dist/pages/defaults.js +88 -0
- package/dist/pages/defaults.js.map +1 -0
- package/dist/pages/index.d.ts +14 -0
- package/dist/pages/index.d.ts.map +1 -0
- package/dist/pages/index.js +10 -0
- package/dist/pages/index.js.map +1 -0
- package/dist/pages/navigation.d.ts +48 -0
- package/dist/pages/navigation.d.ts.map +1 -0
- package/dist/pages/navigation.js +83 -0
- package/dist/pages/navigation.js.map +1 -0
- package/dist/pages/types.d.ts +143 -0
- package/dist/pages/types.d.ts.map +1 -0
- package/dist/pages/types.js +3 -0
- package/dist/pages/types.js.map +1 -0
- package/dist/panels/catalog-define.d.ts +3 -0
- package/dist/panels/catalog-define.d.ts.map +1 -0
- package/dist/panels/catalog-define.js +7 -0
- package/dist/panels/catalog-define.js.map +1 -0
- package/dist/panels/catalog.d.ts +33 -0
- package/dist/panels/catalog.d.ts.map +1 -0
- package/dist/panels/catalog.js +54 -0
- package/dist/panels/catalog.js.map +1 -0
- package/dist/panels/component-define.d.ts +3 -0
- package/dist/panels/component-define.d.ts.map +1 -0
- package/dist/panels/component-define.js +6 -0
- package/dist/panels/component-define.js.map +1 -0
- package/dist/panels/component-detail.d.ts +46 -0
- package/dist/panels/component-detail.d.ts.map +1 -0
- package/dist/panels/component-detail.js +1120 -0
- package/dist/panels/component-detail.js.map +1 -0
- package/dist/panels/component.d.ts +17 -0
- package/dist/panels/component.d.ts.map +1 -0
- package/dist/panels/component.js +10 -0
- package/dist/panels/component.js.map +1 -0
- package/dist/panels/foundation-define.d.ts +3 -0
- package/dist/panels/foundation-define.d.ts.map +1 -0
- package/dist/panels/foundation-define.js +6 -0
- package/dist/panels/foundation-define.js.map +1 -0
- package/dist/panels/foundation-detail.d.ts +23 -0
- package/dist/panels/foundation-detail.d.ts.map +1 -0
- package/dist/panels/foundation-detail.js +216 -0
- package/dist/panels/foundation-detail.js.map +1 -0
- package/dist/panels/foundation.d.ts +15 -0
- package/dist/panels/foundation.d.ts.map +1 -0
- package/dist/panels/foundation.js +9 -0
- package/dist/panels/foundation.js.map +1 -0
- package/dist/panels/model.d.ts +173 -0
- package/dist/panels/model.d.ts.map +1 -0
- package/dist/panels/model.js +462 -0
- package/dist/panels/model.js.map +1 -0
- package/dist/panels/styles.d.ts +3 -0
- package/dist/panels/styles.d.ts.map +1 -0
- package/dist/panels/styles.js +316 -0
- package/dist/panels/styles.js.map +1 -0
- package/dist/panels/theme-model.d.ts +49 -0
- package/dist/panels/theme-model.d.ts.map +1 -0
- package/dist/panels/theme-model.js +146 -0
- package/dist/panels/theme-model.js.map +1 -0
- package/dist/panels/theme-studio.d.ts +32 -0
- package/dist/panels/theme-studio.d.ts.map +1 -0
- package/dist/panels/theme-studio.js +312 -0
- package/dist/panels/theme-studio.js.map +1 -0
- package/dist/preview/frame.d.ts +44 -0
- package/dist/preview/frame.d.ts.map +1 -0
- package/dist/preview/frame.js +250 -0
- package/dist/preview/frame.js.map +1 -0
- package/dist/preview/index.d.ts +26 -0
- package/dist/preview/index.d.ts.map +1 -0
- package/dist/preview/index.js +58 -0
- package/dist/preview/index.js.map +1 -0
- package/dist/preview/theme-generation.d.ts +33 -0
- package/dist/preview/theme-generation.d.ts.map +1 -0
- package/dist/preview/theme-generation.js +48 -0
- package/dist/preview/theme-generation.js.map +1 -0
- package/dist/protocol/index.d.ts +207 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +261 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/testing/index.d.ts +47 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +145 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +118 -4
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@oddkin/workbench/conformance` — portable conformance suites (conformance.v1). DOM-free at
|
|
3
|
+
* import: suites are data plus case functions that touch the DOM only when a runner calls them.
|
|
4
|
+
* Contract: docs/architecture/change-impact-and-verification.md §3; ADR 0034.
|
|
5
|
+
*/
|
|
6
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
7
|
+
/** Declared changes an invariant is about. Identity invariants apply only to value changes. */
|
|
8
|
+
export type ChangeKind = 'theme-value' | 'density' | 'programmatic' | 'keyed-reorder' | 'reconnect' | 'invalid-draft';
|
|
9
|
+
/** The subset of a test runner's `expect` that suites use (Vitest and Jest compatible). */
|
|
10
|
+
export interface Matchers {
|
|
11
|
+
toBe(expected: unknown): void;
|
|
12
|
+
toEqual(expected: unknown): void;
|
|
13
|
+
toBeGreaterThan(expected: number): void;
|
|
14
|
+
toContain(expected: unknown): void;
|
|
15
|
+
}
|
|
16
|
+
export type Expect = (actual: unknown, message?: string) => Matchers;
|
|
17
|
+
/** Real user input from the project's browser runner (e.g. Vitest's `userEvent`). */
|
|
18
|
+
export interface UserInput {
|
|
19
|
+
click(element: Element): Promise<unknown>;
|
|
20
|
+
keyboard(text: string): Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
/** Locates documented anatomy roles in an implementation. */
|
|
23
|
+
export interface Adapter {
|
|
24
|
+
/** The element that plays `role` (e.g. `control`), or null if absent. */
|
|
25
|
+
part(host: HTMLElement, role: string): HTMLElement | null;
|
|
26
|
+
/** Resolve once pending updates are committed. */
|
|
27
|
+
settle(host: HTMLElement): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export interface MountOptions {
|
|
30
|
+
readonly attributes?: Readonly<Record<string, string>>;
|
|
31
|
+
readonly content?: string;
|
|
32
|
+
/** Markup to place the element in; `{{element}}` marks its position, e.g. inside a form. */
|
|
33
|
+
readonly within?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ConformanceContext {
|
|
36
|
+
/** Tag name of the implementation under test. */
|
|
37
|
+
readonly tag: string;
|
|
38
|
+
readonly expect: Expect;
|
|
39
|
+
readonly user: UserInput;
|
|
40
|
+
readonly adapter: Adapter;
|
|
41
|
+
/** Mount the implementation in a fresh container owned by this case. */
|
|
42
|
+
mount(options?: MountOptions): Promise<HTMLElement>;
|
|
43
|
+
/** Live counts of owned work (`scopeStats()` from `@oddkin/core/scope`). */
|
|
44
|
+
ownedWork(): Readonly<Record<string, number>>;
|
|
45
|
+
/** Resolve after the current task, letting deferred default actions run. */
|
|
46
|
+
nextTask(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export interface ConformanceCase {
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly title: string;
|
|
51
|
+
readonly kind: 'assertion' | 'invariant';
|
|
52
|
+
/** For invariants: the declared change that must preserve the asserted relationship. */
|
|
53
|
+
readonly change?: ChangeKind;
|
|
54
|
+
readonly run: (context: ConformanceContext) => Promise<void> | void;
|
|
55
|
+
}
|
|
56
|
+
export interface ConformanceSuite {
|
|
57
|
+
/** Stable suite id, e.g. `oddkin.button`. */
|
|
58
|
+
readonly id: string;
|
|
59
|
+
/** Suite version (semver), tied to the contract version range below. */
|
|
60
|
+
readonly version: string;
|
|
61
|
+
/** The foundation contract verified: a component id and the versions it targets. */
|
|
62
|
+
readonly contract: {
|
|
63
|
+
readonly component: string;
|
|
64
|
+
readonly versions: string;
|
|
65
|
+
};
|
|
66
|
+
readonly description?: string;
|
|
67
|
+
/** Public capabilities an implementation must provide. */
|
|
68
|
+
readonly requires: {
|
|
69
|
+
readonly properties?: readonly string[];
|
|
70
|
+
readonly events?: readonly string[];
|
|
71
|
+
readonly slots?: readonly string[];
|
|
72
|
+
readonly anatomy?: readonly string[];
|
|
73
|
+
};
|
|
74
|
+
readonly cases: readonly ConformanceCase[];
|
|
75
|
+
}
|
|
76
|
+
/** Freeze a suite. Use `checkConformance` (or a test) to validate it. */
|
|
77
|
+
export declare function defineConformance(suite: ConformanceSuite): ConformanceSuite;
|
|
78
|
+
/** Structural problems in a suite, as diagnostics with JSON-pointer paths. */
|
|
79
|
+
export declare function checkConformance(suite: ConformanceSuite): WorkbenchDiagnostic[];
|
|
80
|
+
/** The serializable `conformance.v1` description of a suite (no functions). */
|
|
81
|
+
export declare function toConformanceJSON(suite: ConformanceSuite): Record<string, unknown>;
|
|
82
|
+
/** One case outcome. Untested cases are `not-executed`, never `passed`. */
|
|
83
|
+
export interface CaseResult {
|
|
84
|
+
readonly case: string;
|
|
85
|
+
readonly state: 'passed' | 'failed' | 'not-executed';
|
|
86
|
+
readonly message?: string;
|
|
87
|
+
}
|
|
88
|
+
/** A `conformance-result.v1` record: evidence for one implementation, configuration, and browser. */
|
|
89
|
+
export interface ConformanceResult {
|
|
90
|
+
readonly schema: 'https://oddkin.dev/schemas/conformance-result/v1.json';
|
|
91
|
+
readonly suite: {
|
|
92
|
+
readonly id: string;
|
|
93
|
+
readonly version: string;
|
|
94
|
+
};
|
|
95
|
+
readonly implementation: {
|
|
96
|
+
readonly tag: string;
|
|
97
|
+
readonly package?: string;
|
|
98
|
+
readonly definition?: string;
|
|
99
|
+
};
|
|
100
|
+
readonly configuration: Readonly<Record<string, string>>;
|
|
101
|
+
readonly environment: {
|
|
102
|
+
readonly userAgent: string;
|
|
103
|
+
};
|
|
104
|
+
readonly date: string;
|
|
105
|
+
readonly results: readonly CaseResult[];
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@oddkin/workbench/conformance` — portable conformance suites (conformance.v1). DOM-free at
|
|
3
|
+
* import: suites are data plus case functions that touch the DOM only when a runner calls them.
|
|
4
|
+
* Contract: docs/architecture/change-impact-and-verification.md §3; ADR 0034.
|
|
5
|
+
*/
|
|
6
|
+
import { DiagnosticList } from '../internal/diagnostics.js';
|
|
7
|
+
const CHANGES = [
|
|
8
|
+
'theme-value',
|
|
9
|
+
'density',
|
|
10
|
+
'programmatic',
|
|
11
|
+
'keyed-reorder',
|
|
12
|
+
'reconnect',
|
|
13
|
+
'invalid-draft',
|
|
14
|
+
];
|
|
15
|
+
/** Freeze a suite. Use `checkConformance` (or a test) to validate it. */
|
|
16
|
+
export function defineConformance(suite) {
|
|
17
|
+
return Object.freeze({ ...suite, cases: Object.freeze([...suite.cases]) });
|
|
18
|
+
}
|
|
19
|
+
/** Structural problems in a suite, as diagnostics with JSON-pointer paths. */
|
|
20
|
+
export function checkConformance(suite) {
|
|
21
|
+
const out = new DiagnosticList();
|
|
22
|
+
if (!/^[a-z][\w.-]*$/.test(suite.id))
|
|
23
|
+
out.error('conformance.id.invalid', `Suite id "${suite.id}" must be a lowercase id.`, '/id');
|
|
24
|
+
if (!/^\d+\.\d+\.\d+/.test(suite.version))
|
|
25
|
+
out.error('conformance.version.invalid', 'Suite version must be semver.', '/version');
|
|
26
|
+
if (!/^component:[a-z][\w.]*-[\w.-]*$/.test(suite.contract.component))
|
|
27
|
+
out.error('conformance.contract.invalid', 'Use a component id such as "component:odd-button".', '/contract/component');
|
|
28
|
+
if (!suite.cases.length)
|
|
29
|
+
out.error('conformance.cases.empty', 'A suite needs cases.', '/cases');
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
suite.cases.forEach((c, index) => {
|
|
32
|
+
const path = `/cases/${index}`;
|
|
33
|
+
if (seen.has(c.id))
|
|
34
|
+
out.error('conformance.case.duplicate', `Case "${c.id}" repeats.`, path);
|
|
35
|
+
seen.add(c.id);
|
|
36
|
+
if (c.kind === 'invariant' && !(c.change && CHANGES.includes(c.change)))
|
|
37
|
+
out.error('conformance.invariant.change', `Invariant "${c.id}" must name a change.`, path);
|
|
38
|
+
if (c.kind === 'assertion' && c.change)
|
|
39
|
+
out.error('conformance.assertion.change', `Assertion "${c.id}" names a change.`, path);
|
|
40
|
+
});
|
|
41
|
+
return out.items;
|
|
42
|
+
}
|
|
43
|
+
/** The serializable `conformance.v1` description of a suite (no functions). */
|
|
44
|
+
export function toConformanceJSON(suite) {
|
|
45
|
+
return {
|
|
46
|
+
schema: 'https://oddkin.dev/schemas/conformance/v1.json',
|
|
47
|
+
id: suite.id,
|
|
48
|
+
version: suite.version,
|
|
49
|
+
contract: { ...suite.contract },
|
|
50
|
+
...(suite.description ? { description: suite.description } : {}),
|
|
51
|
+
requires: { ...suite.requires },
|
|
52
|
+
cases: suite.cases.map((c) => ({
|
|
53
|
+
id: c.id,
|
|
54
|
+
title: c.title,
|
|
55
|
+
kind: c.kind,
|
|
56
|
+
...(c.change ? { change: c.change } : {}),
|
|
57
|
+
})),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/conformance/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the Workbench data files from analyzer outputs, configuration, authored content, and the
|
|
3
|
+
* token inspection the foundations reference (workbench.md §2.1). Pure and deterministic: the same
|
|
4
|
+
* inputs give the same files, and no build time enters them.
|
|
5
|
+
*/
|
|
6
|
+
import { type DocsContent, type ResolvedWorkbenchConfig, type WorkbenchConfig } from '../config/index.js';
|
|
7
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
8
|
+
import { type ThemeStudioInput } from './theme-studio.js';
|
|
9
|
+
import { type LibraryInput, type PageData, type TokenInspectionLike, type WorkbenchData, type WorkbenchIndex } from './types.js';
|
|
10
|
+
export type { ThemeStudioInput } from './theme-studio.js';
|
|
11
|
+
export interface WorkbenchDataInput {
|
|
12
|
+
readonly config: WorkbenchConfig | ResolvedWorkbenchConfig;
|
|
13
|
+
/** The documented packages, in configuration order. */
|
|
14
|
+
readonly libraries: readonly LibraryInput[];
|
|
15
|
+
/** Authored content (`oddkin.docs.ts`). */
|
|
16
|
+
readonly docs?: DocsContent;
|
|
17
|
+
/** The token inspection the foundations reference (their `generation` source). */
|
|
18
|
+
readonly tokens?: TokenInspectionLike;
|
|
19
|
+
/** Theme Studio's baseline configuration and generator, loaded by dev tooling. */
|
|
20
|
+
readonly theme?: ThemeStudioInput;
|
|
21
|
+
/** Diagnostics from reading these inputs; reported first, with the data's own. */
|
|
22
|
+
readonly diagnostics?: readonly WorkbenchDiagnostic[];
|
|
23
|
+
}
|
|
24
|
+
/** The data file of a page, relative to the index: `pages/components/odd-button.json`. */
|
|
25
|
+
export declare function pageFile(id: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Build the index and the visible pages' data. `data` is undefined only when the configuration
|
|
28
|
+
* is invalid; every other problem is a diagnostic and leaves the affected value unknown.
|
|
29
|
+
*/
|
|
30
|
+
export declare function buildWorkbenchData(input: WorkbenchDataInput): {
|
|
31
|
+
data: WorkbenchData | undefined;
|
|
32
|
+
diagnostics: WorkbenchDiagnostic[];
|
|
33
|
+
};
|
|
34
|
+
/** Serialize a data file: two-space JSON with a final newline, so output is byte-stable. */
|
|
35
|
+
export declare function serializeData(value: WorkbenchIndex | PageData): string;
|
|
36
|
+
//# sourceMappingURL=build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/data/build.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAEL,KAAK,WAAW,EAEhB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGhG,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,uBAAuB,CAAC;IAC3D,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAC5C,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IACtC,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAClC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACvD;AAKD,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE3C;AAsKD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG;IAC7D,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACpC,CAwFA;AAED,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,CAEtE"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the Workbench data files from analyzer outputs, configuration, authored content, and the
|
|
3
|
+
* token inspection the foundations reference (workbench.md §2.1). Pure and deterministic: the same
|
|
4
|
+
* inputs give the same files, and no build time enters them.
|
|
5
|
+
*/
|
|
6
|
+
import { resolveWorkbenchConfig, } from '../config/index.js';
|
|
7
|
+
import { DiagnosticList, isObject } from '../internal/diagnostics.js';
|
|
8
|
+
import { buildPageRegistry } from '../pages/build.js';
|
|
9
|
+
import { FOUNDATIONS } from '../pages/defaults.js';
|
|
10
|
+
import { themeStudioPage } from './theme-studio.js';
|
|
11
|
+
import { DATA_VERSION, INDEX_FORMAT, PAGE_FORMAT, } from './types.js';
|
|
12
|
+
/** Top-level metadata fields that describe one package rather than a record of facts. */
|
|
13
|
+
const PER_PACKAGE = new Set(['schema', 'oddkinVersion', 'library', 'diagnostics']);
|
|
14
|
+
/** The data file of a page, relative to the index: `pages/components/odd-button.json`. */
|
|
15
|
+
export function pageFile(id) {
|
|
16
|
+
return `pages/${id.split('/').map(encodeURIComponent).join('/')}.json`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* One metadata view over several packages. Records (components, examples, foundations, …) are
|
|
20
|
+
* merged by id; the same id with different content in two packages keeps the first and is
|
|
21
|
+
* diagnosed. A prefix shared by every package is kept for page titles.
|
|
22
|
+
*/
|
|
23
|
+
function mergeMetadata(libraries, out) {
|
|
24
|
+
const merged = {};
|
|
25
|
+
const owner = new Map();
|
|
26
|
+
const prefixes = new Set();
|
|
27
|
+
for (const library of libraries) {
|
|
28
|
+
const metadata = library.metadata;
|
|
29
|
+
if (!metadata)
|
|
30
|
+
continue;
|
|
31
|
+
const prefix = metadata['library']?.prefix;
|
|
32
|
+
if (typeof prefix === 'string' && prefix)
|
|
33
|
+
prefixes.add(prefix);
|
|
34
|
+
for (const [field, value] of Object.entries(metadata)) {
|
|
35
|
+
if (PER_PACKAGE.has(field) || !isObject(value))
|
|
36
|
+
continue;
|
|
37
|
+
const target = (merged[field] ??= {});
|
|
38
|
+
for (const [id, entry] of Object.entries(value)) {
|
|
39
|
+
if (!(id in target)) {
|
|
40
|
+
target[id] = entry;
|
|
41
|
+
owner.set(`${field}/${id}`, library.name);
|
|
42
|
+
}
|
|
43
|
+
else if (JSON.stringify(target[id]) !== JSON.stringify(entry)) {
|
|
44
|
+
out.warn('data.metadata.conflict', `${library.name} and ${owner.get(`${field}/${id}`)} both describe ${field} "${id}" differently; the first is used.`, `/${field}/${id}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
...merged,
|
|
51
|
+
...(prefixes.size === 1 ? { library: { prefix: [...prefixes][0] } } : {}),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** Custom-element declarations by tag; the first package that declares a tag wins, as in the registry. */
|
|
55
|
+
function declarations(libraries) {
|
|
56
|
+
const found = new Map();
|
|
57
|
+
for (const library of libraries) {
|
|
58
|
+
for (const module of library.cem?.modules ?? []) {
|
|
59
|
+
for (const declaration of module.declarations ?? []) {
|
|
60
|
+
if (!declaration.customElement || !declaration.tagName || found.has(declaration.tagName))
|
|
61
|
+
continue;
|
|
62
|
+
found.set(declaration.tagName, { declaration, module: module.path, package: library.name });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return found;
|
|
67
|
+
}
|
|
68
|
+
const tokenName = (id) => id.replace(/^token:/, '');
|
|
69
|
+
/** Authored content by page id, with renamed ids resolved through `aliases`. */
|
|
70
|
+
function authoredPages(docs) {
|
|
71
|
+
const byId = new Map();
|
|
72
|
+
for (const [key, content] of Object.entries(docs?.pages ?? {}))
|
|
73
|
+
byId.set(docs?.aliases?.[key] ?? key, content);
|
|
74
|
+
return byId;
|
|
75
|
+
}
|
|
76
|
+
function componentPage(page, declared, metadata, definitions, inspection, content) {
|
|
77
|
+
const tag = declared.declaration.tagName;
|
|
78
|
+
const enrichment = Object.values(metadata.components ?? {}).find((c) => c.tag === tag);
|
|
79
|
+
const authored = definitions.get(tag) ?? {};
|
|
80
|
+
const listed = Object.entries(metadata.examples ?? {}).filter(([, example]) => example.component === `component:${tag}`);
|
|
81
|
+
const named = new Set(listed.map(([, example]) => example.name));
|
|
82
|
+
const examples = [
|
|
83
|
+
...listed.map(([id, example]) => {
|
|
84
|
+
const definition = authored[example.name];
|
|
85
|
+
return { id, ...example, ...(definition ? { definition } : {}) };
|
|
86
|
+
}),
|
|
87
|
+
// Examples the metadata does not list yet (no analyzer run since they were authored).
|
|
88
|
+
...Object.entries(authored)
|
|
89
|
+
.filter(([name]) => !named.has(name))
|
|
90
|
+
.map(([name, definition]) => ({
|
|
91
|
+
id: `example:${tag}/${name}`,
|
|
92
|
+
component: `component:${tag}`,
|
|
93
|
+
name,
|
|
94
|
+
definition,
|
|
95
|
+
})),
|
|
96
|
+
];
|
|
97
|
+
const reads = enrichment?.tokenReads ?? [];
|
|
98
|
+
const seen = new Set();
|
|
99
|
+
const tokens = reads.flatMap((read) => {
|
|
100
|
+
const name = isObject(read) && typeof read['token'] === 'string' ? read['token'] : undefined;
|
|
101
|
+
if (!name || seen.has(name))
|
|
102
|
+
return [];
|
|
103
|
+
seen.add(name);
|
|
104
|
+
return [inspection?.get(name) ?? { name, missing: true }];
|
|
105
|
+
});
|
|
106
|
+
const guidance = content?.sections?.['guidance']?.guidance?.trim();
|
|
107
|
+
const prose = {
|
|
108
|
+
...(content?.useFor?.length ? { useFor: content.useFor } : {}),
|
|
109
|
+
...(content?.notFor?.length ? { notFor: content.notFor } : {}),
|
|
110
|
+
...(guidance ? { guidance } : {}),
|
|
111
|
+
};
|
|
112
|
+
return {
|
|
113
|
+
format: PAGE_FORMAT,
|
|
114
|
+
version: DATA_VERSION,
|
|
115
|
+
id: page.id,
|
|
116
|
+
kind: 'component',
|
|
117
|
+
tag,
|
|
118
|
+
package: declared.package,
|
|
119
|
+
module: declared.module,
|
|
120
|
+
declaration: declared.declaration,
|
|
121
|
+
...(enrichment ? { enrichment: enrichment } : {}),
|
|
122
|
+
examples,
|
|
123
|
+
...(tokens.length ? { tokens } : {}),
|
|
124
|
+
...(Object.keys(prose).length ? { authored: prose } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function foundationPage(page, foundation, inspection, out) {
|
|
128
|
+
const listed = Array.isArray(foundation['tokens']) ? foundation['tokens'] : [];
|
|
129
|
+
const tokens = listed
|
|
130
|
+
.filter((id) => typeof id === 'string')
|
|
131
|
+
.map((id) => {
|
|
132
|
+
const name = tokenName(id);
|
|
133
|
+
const token = inspection?.get(name);
|
|
134
|
+
if (token)
|
|
135
|
+
return token;
|
|
136
|
+
// Without an inspection, one diagnostic covers every page (see buildWorkbenchData).
|
|
137
|
+
if (inspection) {
|
|
138
|
+
out.warn('data.token.missing', `${page.id} lists token "${name}", which the token inspection does not contain; its value is shown as unknown.`, `/pages/${page.id}/tokens/${name}`);
|
|
139
|
+
}
|
|
140
|
+
return { name, missing: true };
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
format: PAGE_FORMAT,
|
|
144
|
+
version: DATA_VERSION,
|
|
145
|
+
id: page.id,
|
|
146
|
+
kind: 'foundation',
|
|
147
|
+
foundation,
|
|
148
|
+
tokens,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build the index and the visible pages' data. `data` is undefined only when the configuration
|
|
153
|
+
* is invalid; every other problem is a diagnostic and leaves the affected value unknown.
|
|
154
|
+
*/
|
|
155
|
+
export function buildWorkbenchData(input) {
|
|
156
|
+
const out = new DiagnosticList();
|
|
157
|
+
const loading = input.diagnostics ?? [];
|
|
158
|
+
const { config, diagnostics: configDiagnostics } = resolveWorkbenchConfig(input.config);
|
|
159
|
+
if (!config)
|
|
160
|
+
return { data: undefined, diagnostics: [...loading, ...configDiagnostics] };
|
|
161
|
+
const metadata = mergeMetadata(input.libraries, out);
|
|
162
|
+
const { registry, diagnostics: registryDiagnostics } = buildPageRegistry({
|
|
163
|
+
config,
|
|
164
|
+
cem: input.libraries.flatMap((library) => (library.cem ? [library.cem] : [])),
|
|
165
|
+
metadata,
|
|
166
|
+
...(input.docs ? { docs: input.docs } : {}),
|
|
167
|
+
});
|
|
168
|
+
// The registry resolves the same configuration again; its diagnostics include the config's.
|
|
169
|
+
out.items.unshift(...loading, ...registryDiagnostics);
|
|
170
|
+
if (!registry)
|
|
171
|
+
return { data: undefined, diagnostics: out.items };
|
|
172
|
+
const declared = declarations(input.libraries);
|
|
173
|
+
const inspection = input.tokens
|
|
174
|
+
? new Map(input.tokens.tokens.map((token) => [token.name, token]))
|
|
175
|
+
: undefined;
|
|
176
|
+
if (!inspection && Object.keys(metadata.foundations ?? {}).length > 0) {
|
|
177
|
+
out.warn('data.tokens.missing', 'Foundations reference tokens, but no token inspection was supplied; their values are shown as unknown.', '/foundations');
|
|
178
|
+
}
|
|
179
|
+
const pages = {};
|
|
180
|
+
const files = {};
|
|
181
|
+
const authored = authoredPages(input.docs);
|
|
182
|
+
const definitions = new Map();
|
|
183
|
+
for (const library of input.libraries)
|
|
184
|
+
for (const set of library.examples ?? []) {
|
|
185
|
+
const tag = set.component.replace(/^component:/, '');
|
|
186
|
+
if (!definitions.has(tag))
|
|
187
|
+
definitions.set(tag, set.examples);
|
|
188
|
+
}
|
|
189
|
+
for (const page of registry.pages) {
|
|
190
|
+
if (!page.visible)
|
|
191
|
+
continue;
|
|
192
|
+
let data;
|
|
193
|
+
if (page.kind === 'component') {
|
|
194
|
+
const entry = declared.get(page.id.slice('components/'.length));
|
|
195
|
+
if (!entry)
|
|
196
|
+
continue;
|
|
197
|
+
data = componentPage(page, entry, metadata, definitions, inspection, authored.get(page.id));
|
|
198
|
+
}
|
|
199
|
+
else if (page.kind === 'foundation') {
|
|
200
|
+
const id = FOUNDATIONS.find((f) => `foundations/${f.slug}` === page.id)?.id;
|
|
201
|
+
const foundation = id ? metadata.foundations?.[`foundation:${id}`] : undefined;
|
|
202
|
+
if (!foundation)
|
|
203
|
+
continue;
|
|
204
|
+
data = foundationPage(page, foundation, inspection, out);
|
|
205
|
+
}
|
|
206
|
+
else if (page.id === 'theme-studio') {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
data = { format: PAGE_FORMAT, version: DATA_VERSION, id: page.id, kind: page.kind };
|
|
211
|
+
}
|
|
212
|
+
pages[page.id] = data;
|
|
213
|
+
files[page.id] = pageFile(page.id);
|
|
214
|
+
}
|
|
215
|
+
const studio = registry.pages.find((page) => page.visible && page.id === 'theme-studio');
|
|
216
|
+
if (studio) {
|
|
217
|
+
const components = Object.values(pages).filter((page) => page.kind === 'component');
|
|
218
|
+
pages[studio.id] = themeStudioPage(studio.id, components, config, input.theme ?? {}, out);
|
|
219
|
+
files[studio.id] = pageFile(studio.id);
|
|
220
|
+
}
|
|
221
|
+
const first = input.libraries[0];
|
|
222
|
+
const index = {
|
|
223
|
+
format: INDEX_FORMAT,
|
|
224
|
+
version: DATA_VERSION,
|
|
225
|
+
branding: {
|
|
226
|
+
name: config.branding.name ?? first?.name ?? 'Workbench',
|
|
227
|
+
...(config.branding.logo ? { logo: config.branding.logo } : {}),
|
|
228
|
+
links: config.branding.links ?? [],
|
|
229
|
+
},
|
|
230
|
+
libraries: input.libraries.map((library) => {
|
|
231
|
+
const prefix = library.metadata?.library?.prefix;
|
|
232
|
+
return {
|
|
233
|
+
name: library.name,
|
|
234
|
+
version: library.version,
|
|
235
|
+
...(typeof prefix === 'string' && prefix ? { prefix } : {}),
|
|
236
|
+
};
|
|
237
|
+
}),
|
|
238
|
+
registry,
|
|
239
|
+
pages: files,
|
|
240
|
+
diagnostics: out.items,
|
|
241
|
+
};
|
|
242
|
+
return { data: { index, pages }, diagnostics: out.items };
|
|
243
|
+
}
|
|
244
|
+
/** Serialize a data file: two-space JSON with a final newline, so output is byte-stable. */
|
|
245
|
+
export function serializeData(value) {
|
|
246
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/data/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import maps from package `exports` (workbench.md §2.1): the shell and each preview frame load
|
|
3
|
+
* published package files as they are, without a bundler, and resolve bare specifiers through an
|
|
4
|
+
* import map generated from the packages in their module graph.
|
|
5
|
+
*/
|
|
6
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
7
|
+
/** The `package.json` fields that decide how a package's modules are addressed. */
|
|
8
|
+
export interface PackageManifest {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly version?: string;
|
|
11
|
+
readonly exports?: unknown;
|
|
12
|
+
readonly main?: string;
|
|
13
|
+
readonly module?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ImportMapOptions {
|
|
16
|
+
/** URL prefix under which every package root is served, as `${base}${name}/`. Ends with `/`. */
|
|
17
|
+
readonly base: string;
|
|
18
|
+
/**
|
|
19
|
+
* Serve each package root as `${base}${name}@${version}/`, so documents that load different
|
|
20
|
+
* copies of one package never share a URL. Default false.
|
|
21
|
+
*/
|
|
22
|
+
readonly versioned?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Active export conditions. Within each conditions object, keys keep their declared priority
|
|
25
|
+
* (as in Node); `default` always applies. Default: development, browser, import.
|
|
26
|
+
*/
|
|
27
|
+
readonly conditions?: readonly string[];
|
|
28
|
+
}
|
|
29
|
+
/** The URL prefix of a package root under `base`. */
|
|
30
|
+
export declare function packageRoot(pkg: PackageManifest, options: Pick<ImportMapOptions, 'base' | 'versioned'>): string;
|
|
31
|
+
export interface ImportMap {
|
|
32
|
+
readonly imports: Readonly<Record<string, string>>;
|
|
33
|
+
}
|
|
34
|
+
/** Development first, so previews and the shell keep their diagnostics. */
|
|
35
|
+
export declare const DEFAULT_CONDITIONS: readonly ['development', 'browser', 'import'];
|
|
36
|
+
/** Resolve one export target: a path, `null` (excluded), or `undefined` (no condition applies). */
|
|
37
|
+
export declare function resolveTarget(target: unknown, conditions: ReadonlySet<string>): string | null | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* The package-relative file (`./dist/x.js`) that an export subpath (`.` or `./x`) resolves to,
|
|
40
|
+
* as Node resolves it: exact keys first, then the pattern with the longest prefix. Without
|
|
41
|
+
* `exports`, every file is reachable and `.` is `module`, `main`, or `./index.js`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function resolveExport(pkg: PackageManifest, subpath: string, conditions?: readonly string[]): string | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* The import map for `packages`, in the order given: a package name seen again (another copy of
|
|
46
|
+
* the same package) is skipped with a diagnostic, since one document can load one copy per
|
|
47
|
+
* specifier. Subpath patterns become prefix mappings when the prefix mapping is exact.
|
|
48
|
+
*/
|
|
49
|
+
export declare function createImportMap(packages: readonly PackageManifest[], options: ImportMapOptions): {
|
|
50
|
+
importMap: ImportMap;
|
|
51
|
+
diagnostics: WorkbenchDiagnostic[];
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=import-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-map.d.ts","sourceRoot":"","sources":["../../src/data/import-map.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEhG,mFAAmF;AACnF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CACzB,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,WAAW,CAAC,GACpD,MAAM,CAIR;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD;AAED,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,YAAI,aAAa,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAEhF,mGAAmG;AACnG,wBAAgB,aAAa,CAC3B,MAAM,EAAE,OAAO,EACf,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,GAAG,IAAI,GAAG,SAAS,CAkB3B;AAiCD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,SAAS,MAAM,EAAuB,GACjD,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,OAAO,EAAE,gBAAgB,GACxB;IAAE,SAAS,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAmE9D"}
|