@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,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@oddkin/workbench/examples` — authored examples, defined once and reused by Workbench,
|
|
3
|
+
* documentation, browser tests, Theme Studio, and agents (ADR 0021). DOM-free: importing
|
|
4
|
+
* this entry never touches the DOM; fixtures run only inside preview frames and tests.
|
|
5
|
+
*/
|
|
6
|
+
import type { Scope } from '@oddkin/core';
|
|
7
|
+
import { type WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
8
|
+
export type { WorkbenchDiagnostic } from '../internal/diagnostics.js';
|
|
9
|
+
type DataKeys<E> = {
|
|
10
|
+
[K in keyof E]-?: E[K] extends (...args: never[]) => unknown ? never : K;
|
|
11
|
+
}[keyof E];
|
|
12
|
+
/** Public data properties of an element type, excluding those every `HTMLElement` has. */
|
|
13
|
+
export type ElementProps<E> = Partial<Pick<E, Exclude<DataKeys<E>, keyof HTMLElement>>>;
|
|
14
|
+
/** The element type for a tag: from `HTMLElementTagNameMap` when registered there. */
|
|
15
|
+
export type ElementFor<T extends string> = T extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[T] : HTMLElement & {
|
|
16
|
+
[property: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
export interface ExampleFixtureContext<E extends Element = Element> {
|
|
19
|
+
/** Owns listeners, timers, and effects; disposed when the preview or test ends. */
|
|
20
|
+
readonly scope: Scope;
|
|
21
|
+
/** The example's element, already created with its props, attributes, and slots. */
|
|
22
|
+
readonly element: E;
|
|
23
|
+
/** Render more content into the preview root; returns its first element. */
|
|
24
|
+
mount(content: unknown): Element;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Marks an example as a common mistake. It is never offered as a preset or recommendation; it
|
|
28
|
+
* explains what goes wrong, names the diagnostic `validateUsage` reports for it, and points at
|
|
29
|
+
* the correct example in the same set.
|
|
30
|
+
*/
|
|
31
|
+
export interface IncorrectUsage {
|
|
32
|
+
readonly explanation: string;
|
|
33
|
+
/** Diagnostic code `validateUsage` reports, e.g. `usage.attribute.propertyOnly`. */
|
|
34
|
+
readonly diagnostic: string;
|
|
35
|
+
/** Name of the correct example in the same set. */
|
|
36
|
+
readonly correct: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ExampleDefinition<E extends Element = HTMLElement> {
|
|
39
|
+
readonly label?: string;
|
|
40
|
+
/** Property values, checked against the element type (TypeScript) or metadata (checkExamples). */
|
|
41
|
+
readonly props?: ElementProps<E>;
|
|
42
|
+
readonly attributes?: Readonly<Record<string, string | null>>;
|
|
43
|
+
/** Plain-text slot content keyed by slot name; `default` is the default slot. */
|
|
44
|
+
readonly slots?: Readonly<Record<string, string>>;
|
|
45
|
+
readonly previewRoles?: readonly string[];
|
|
46
|
+
/** Offered as a preset on the component page. */
|
|
47
|
+
readonly preset?: boolean;
|
|
48
|
+
readonly recommended?: boolean;
|
|
49
|
+
readonly guidance?: string;
|
|
50
|
+
/** A common mistake, explained (see `IncorrectUsage`). */
|
|
51
|
+
readonly incorrect?: IncorrectUsage;
|
|
52
|
+
/** Owned setup code; runs only in preview frames and tests. */
|
|
53
|
+
readonly fixture?: (context: ExampleFixtureContext<E>) => void | Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
export interface ExampleSet<E extends Element = HTMLElement> {
|
|
56
|
+
readonly component: string;
|
|
57
|
+
readonly examples: Readonly<Record<string, ExampleDefinition<E>>>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Define the examples for one component. With TypeScript and a registered tag
|
|
61
|
+
* (`HTMLElementTagNameMap`), unknown property keys and wrong value types are compile errors.
|
|
62
|
+
*/
|
|
63
|
+
export declare function defineExamples<T extends string>(tag: T, examples: Readonly<Record<string, ExampleDefinition<ElementFor<T>>>>): ExampleSet<ElementFor<T>>;
|
|
64
|
+
export declare const EXAMPLES_SCHEMA = "https://oddkin.dev/schemas/examples/v1.json";
|
|
65
|
+
/** The serializable layer (`examples.v1`); fixtures appear only as `hasFixture`. */
|
|
66
|
+
export interface ExamplesJSON {
|
|
67
|
+
readonly schema: typeof EXAMPLES_SCHEMA;
|
|
68
|
+
readonly component: string;
|
|
69
|
+
readonly examples: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
70
|
+
}
|
|
71
|
+
export declare function toExamplesJSON<E extends Element>(set: ExampleSet<E>): ExamplesJSON;
|
|
72
|
+
/** Example id shared with metadata, docs content, and agents: `example:<tag>/<name>`. */
|
|
73
|
+
export declare const exampleId: (tag: string, name: string) => string;
|
|
74
|
+
/** The parts of a component contract that examples are checked against (e.g. from CEM). */
|
|
75
|
+
export interface ExampleContract {
|
|
76
|
+
readonly properties?: readonly string[];
|
|
77
|
+
readonly slots?: readonly string[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check names and, when a contract is given, property keys and slot names. Plain JavaScript
|
|
81
|
+
* authors get the same checks TypeScript gives at compile time.
|
|
82
|
+
*/
|
|
83
|
+
export declare function checkExamples<E extends Element>(set: ExampleSet<E>, contract?: ExampleContract): WorkbenchDiagnostic[];
|
|
84
|
+
/** What `validateUsage` checks examples against: the published contract of the element. */
|
|
85
|
+
export interface UsageContract {
|
|
86
|
+
/** Public writable properties; `attribute` is absent for property-only ones (`.items`). */
|
|
87
|
+
readonly properties: readonly {
|
|
88
|
+
name: string;
|
|
89
|
+
type?: string | undefined;
|
|
90
|
+
attribute?: string | undefined;
|
|
91
|
+
}[];
|
|
92
|
+
readonly slots: readonly string[];
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Diagnostics for how each example uses the element, from its published contract: rich data
|
|
96
|
+
* written as an attribute, `"false"` on a boolean attribute, values outside an enum, unknown
|
|
97
|
+
* attributes, and unknown slots. Correct examples produce none; an incorrect example produces
|
|
98
|
+
* the diagnostic it declares.
|
|
99
|
+
*/
|
|
100
|
+
export declare function validateUsage<E extends Element>(set: ExampleSet<E>, contract: UsageContract): WorkbenchDiagnostic[];
|
|
101
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { DiagnosticList } from '../internal/diagnostics.js';
|
|
2
|
+
/**
|
|
3
|
+
* Define the examples for one component. With TypeScript and a registered tag
|
|
4
|
+
* (`HTMLElementTagNameMap`), unknown property keys and wrong value types are compile errors.
|
|
5
|
+
*/
|
|
6
|
+
export function defineExamples(tag, examples) {
|
|
7
|
+
return Object.freeze({ component: tag, examples: Object.freeze({ ...examples }) });
|
|
8
|
+
}
|
|
9
|
+
export const EXAMPLES_SCHEMA = 'https://oddkin.dev/schemas/examples/v1.json';
|
|
10
|
+
export function toExamplesJSON(set) {
|
|
11
|
+
const examples = {};
|
|
12
|
+
for (const [name, example] of Object.entries(set.examples)) {
|
|
13
|
+
const { fixture, ...rest } = example;
|
|
14
|
+
examples[name] = {
|
|
15
|
+
...JSON.parse(JSON.stringify(rest)),
|
|
16
|
+
...(fixture ? { hasFixture: true } : {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return { schema: EXAMPLES_SCHEMA, component: set.component, examples };
|
|
20
|
+
}
|
|
21
|
+
/** Example id shared with metadata, docs content, and agents: `example:<tag>/<name>`. */
|
|
22
|
+
export const exampleId = (tag, name) => `example:${tag}/${name}`;
|
|
23
|
+
const TAG = /^[a-z][a-z0-9]*(-[a-z0-9]+)+$/;
|
|
24
|
+
const NAME = /^[a-zA-Z][a-zA-Z0-9-]*$/;
|
|
25
|
+
/**
|
|
26
|
+
* Check names and, when a contract is given, property keys and slot names. Plain JavaScript
|
|
27
|
+
* authors get the same checks TypeScript gives at compile time.
|
|
28
|
+
*/
|
|
29
|
+
export function checkExamples(set, contract) {
|
|
30
|
+
const out = new DiagnosticList();
|
|
31
|
+
if (!TAG.test(set.component)) {
|
|
32
|
+
out.error('examples.component.invalid', `"${set.component}" is not a valid custom element name.`, '/component');
|
|
33
|
+
}
|
|
34
|
+
const properties = contract?.properties ? new Set(contract.properties) : undefined;
|
|
35
|
+
const slots = contract?.slots ? new Set(contract.slots.map((s) => s || 'default')) : undefined;
|
|
36
|
+
for (const [name, example] of Object.entries(set.examples)) {
|
|
37
|
+
const path = `/examples/${name}`;
|
|
38
|
+
if (!NAME.test(name)) {
|
|
39
|
+
out.error('examples.name.invalid', `Example name "${name}" must start with a letter and use letters, digits, and hyphens.`, path);
|
|
40
|
+
}
|
|
41
|
+
// An incorrect example breaks the contract on purpose; validateUsage reports how.
|
|
42
|
+
const checked = example.incorrect ? {} : example;
|
|
43
|
+
for (const key of Object.keys(checked.props ?? {})) {
|
|
44
|
+
if (properties && !properties.has(key)) {
|
|
45
|
+
out.error('examples.prop.unknown', `<${set.component}> has no public property "${key}" (example "${name}").`, `${path}/props/${key}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const slot of Object.keys(checked.slots ?? {})) {
|
|
49
|
+
if (slots && !slots.has(slot)) {
|
|
50
|
+
out.error('examples.slot.unknown', `<${set.component}> declares no slot "${slot}" (example "${name}").`, `${path}/slots/${slot}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const incorrect = example.incorrect;
|
|
54
|
+
if (incorrect) {
|
|
55
|
+
const correct = set.examples[incorrect.correct];
|
|
56
|
+
if (!correct || correct.incorrect)
|
|
57
|
+
out.error('examples.incorrect.correct', `Incorrect example "${name}" must name a correct example of <${set.component}>, not "${incorrect.correct}".`, `${path}/incorrect/correct`);
|
|
58
|
+
if (!incorrect.explanation.trim() || !/^[a-z]+(\.[a-zA-Z-]+)+$/.test(incorrect.diagnostic))
|
|
59
|
+
out.error('examples.incorrect.explanation', `Incorrect example "${name}" needs an explanation and a diagnostic code.`, `${path}/incorrect`);
|
|
60
|
+
if (example.preset || example.recommended || example.previewRoles?.length)
|
|
61
|
+
out.error('examples.incorrect.recommended', `Incorrect example "${name}" cannot be a preset, a recommendation, or a preview role.`, path);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return out.items;
|
|
65
|
+
}
|
|
66
|
+
// Attributes every element accepts.
|
|
67
|
+
const GLOBAL_ATTRIBUTE = /^(?:id|class|style|slot|part|lang|dir|title|hidden|inert|tabindex|role|autofocus|exportparts|data-.+|aria-.+)$/;
|
|
68
|
+
const unionOf = (type) => type && /^"[^"]*"( \| "[^"]*")*$/.test(type)
|
|
69
|
+
? [...type.matchAll(/"([^"]*)"/g)].map((m) => m[1])
|
|
70
|
+
: undefined;
|
|
71
|
+
/**
|
|
72
|
+
* Diagnostics for how each example uses the element, from its published contract: rich data
|
|
73
|
+
* written as an attribute, `"false"` on a boolean attribute, values outside an enum, unknown
|
|
74
|
+
* attributes, and unknown slots. Correct examples produce none; an incorrect example produces
|
|
75
|
+
* the diagnostic it declares.
|
|
76
|
+
*/
|
|
77
|
+
export function validateUsage(set, contract) {
|
|
78
|
+
const out = new DiagnosticList();
|
|
79
|
+
const byAttribute = new Map(contract.properties.filter((p) => p.attribute).map((p) => [p.attribute, p]));
|
|
80
|
+
const slots = new Set(contract.slots.map((s) => s || 'default'));
|
|
81
|
+
const tag = set.component;
|
|
82
|
+
for (const [name, example] of Object.entries(set.examples)) {
|
|
83
|
+
const path = `/examples/${name}`;
|
|
84
|
+
for (const [attribute, value] of Object.entries(example.attributes ?? {})) {
|
|
85
|
+
const at = `${path}/attributes/${attribute}`;
|
|
86
|
+
const property = byAttribute.get(attribute);
|
|
87
|
+
const named = contract.properties.find((p) => p.name === attribute);
|
|
88
|
+
if (!property && named && !named.attribute)
|
|
89
|
+
out.error('usage.attribute.propertyOnly', `<${tag}> reads "${attribute}" only as a property; set .${attribute} with a value, not an attribute string.`, at);
|
|
90
|
+
else if (!property && !GLOBAL_ATTRIBUTE.test(attribute))
|
|
91
|
+
out.error('usage.attribute.unknown', `<${tag}> has no attribute "${attribute}"${named ? `; use "${named.attribute}"` : ''}.`, at);
|
|
92
|
+
else if (property?.type === 'boolean' && value === 'false')
|
|
93
|
+
out.error('usage.boolean.false', `[${attribute}="false"] still turns ${property.name} on: the attribute's presence means true. Remove the attribute instead.`, at);
|
|
94
|
+
else {
|
|
95
|
+
const allowed = unionOf(property?.type);
|
|
96
|
+
if (value !== null && allowed && !allowed.includes(value))
|
|
97
|
+
out.error('usage.attribute.value', `<${tag}> ${attribute}="${value}" is not one of ${allowed.join(', ')}; the default is used.`, at);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
for (const slot of Object.keys(example.slots ?? {}))
|
|
101
|
+
if (!slots.has(slot))
|
|
102
|
+
out.error('usage.slot.unknown', `<${tag}> declares no slot "${slot}"; the content is not shown.`, `${path}/slots/${slot}`);
|
|
103
|
+
}
|
|
104
|
+
return out.items;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/examples/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type JsonValue } from '../protocol/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* A plain-JSON summary of an event detail: cycles, DOM nodes, functions, `Map`/`Set`, errors,
|
|
4
|
+
* and class instances are described rather than transferred, and the result is size-capped.
|
|
5
|
+
*/
|
|
6
|
+
export declare function summarizeDetail(value: unknown): JsonValue;
|
|
7
|
+
/** Install the runtime on a frame's own Window. Exported for controlled browser tests. */
|
|
8
|
+
export declare function installFrameRuntime(win?: Window): void;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frame/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAYL,KAAK,SAAS,EACf,MAAM,sBAAsB,CAAC;AAsN9B;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAuDzD;AA4GD,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAe,GAAG,IAAI,CAmG9D"}
|