@assemblyline-agents/openui 3.0.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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +72 -0
  3. package/dist/CORMORANT-GARAMOND-OFL.txt +93 -0
  4. package/dist/OUTFIT-OFL.txt +93 -0
  5. package/dist/artifact.d.ts +31 -0
  6. package/dist/artifact.d.ts.map +1 -0
  7. package/dist/artifact.js +79 -0
  8. package/dist/artifact.js.map +1 -0
  9. package/dist/config.d.ts +60 -0
  10. package/dist/config.d.ts.map +1 -0
  11. package/dist/config.js +203 -0
  12. package/dist/config.js.map +1 -0
  13. package/dist/index.d.ts +10 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +10 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/library.d.ts +9 -0
  18. package/dist/library.d.ts.map +1 -0
  19. package/dist/library.js +109 -0
  20. package/dist/library.js.map +1 -0
  21. package/dist/openui-browser.js +629 -0
  22. package/dist/openui-styles.css +1 -0
  23. package/dist/render.d.ts +3 -0
  24. package/dist/render.d.ts.map +1 -0
  25. package/dist/render.js +229 -0
  26. package/dist/render.js.map +1 -0
  27. package/dist/report-library.d.ts +2 -0
  28. package/dist/report-library.d.ts.map +1 -0
  29. package/dist/report-library.js +224 -0
  30. package/dist/report-library.js.map +1 -0
  31. package/dist/responsive-stack.d.ts +35 -0
  32. package/dist/responsive-stack.d.ts.map +1 -0
  33. package/dist/responsive-stack.js +58 -0
  34. package/dist/responsive-stack.js.map +1 -0
  35. package/dist/standard-pack.d.ts +4 -0
  36. package/dist/standard-pack.d.ts.map +1 -0
  37. package/dist/standard-pack.js +10 -0
  38. package/dist/standard-pack.js.map +1 -0
  39. package/dist/tools.d.ts +33 -0
  40. package/dist/tools.d.ts.map +1 -0
  41. package/dist/tools.js +350 -0
  42. package/dist/tools.js.map +1 -0
  43. package/package.json +60 -0
  44. package/skills/openui-artifacts/SKILL.md +40 -0
package/dist/config.js ADDED
@@ -0,0 +1,203 @@
1
+ import { createLibrary } from "@openuidev/lang-core";
2
+ import { openUiStandardComponentPack } from "./standard-pack.js";
3
+ const DEFAULT_BRAND = {
4
+ name: "Assembly Line",
5
+ theme: {}
6
+ };
7
+ export function defineOpenUiConfig(input = {}) {
8
+ if (isResolvedConfig(input))
9
+ return input;
10
+ return resolveOpenUiConfig(input, input.componentPack ?? openUiStandardComponentPack);
11
+ }
12
+ export function snapshotOpenUiConfig(config) {
13
+ return {
14
+ componentPack: componentPackDescriptor(config.componentPack),
15
+ brand: cloneBrand(config.brand),
16
+ allowedComponents: [...config.allowedComponents],
17
+ allowLocalInteractivity: config.allowLocalInteractivity,
18
+ maxDocumentChars: config.maxDocumentChars
19
+ };
20
+ }
21
+ export function hydrateOpenUiConfig(snapshot, componentPack) {
22
+ validateComponentPack(componentPack);
23
+ const descriptor = componentPackDescriptor(componentPack);
24
+ if (snapshot.componentPack.id !== descriptor.id
25
+ || snapshot.componentPack.version !== descriptor.version
26
+ || snapshot.componentPack.root !== descriptor.root) {
27
+ throw new Error("OpenUI artifact requires component pack "
28
+ + snapshot.componentPack.id
29
+ + "@"
30
+ + snapshot.componentPack.version
31
+ + " with root "
32
+ + snapshot.componentPack.root
33
+ + ".");
34
+ }
35
+ return resolveOpenUiConfig({
36
+ componentPack,
37
+ brand: snapshot.brand,
38
+ allowedComponents: snapshot.allowedComponents,
39
+ allowLocalInteractivity: snapshot.allowLocalInteractivity,
40
+ maxDocumentChars: snapshot.maxDocumentChars
41
+ }, componentPack);
42
+ }
43
+ function resolveOpenUiConfig(input, componentPack) {
44
+ validateComponentPack(componentPack);
45
+ const brand = normalizeBrand(input.brand);
46
+ const availableComponents = Object.keys(componentPack.library.components);
47
+ const allowedComponents = input.allowedComponents
48
+ ? [...new Set(input.allowedComponents.map((name) => requiredText(name, "allowedComponents", 120)))]
49
+ : availableComponents;
50
+ const root = componentPack.library.root;
51
+ if (!allowedComponents.includes(root)) {
52
+ throw new Error("OpenUI allowedComponents must include the component pack root " + root + ".");
53
+ }
54
+ for (const component of allowedComponents) {
55
+ if (!componentPack.library.components[component]) {
56
+ throw new Error("Unknown OpenUI component "
57
+ + component
58
+ + " in pack "
59
+ + componentPack.id
60
+ + "@"
61
+ + componentPack.version
62
+ + ".");
63
+ }
64
+ }
65
+ const maxDocumentChars = input.maxDocumentChars ?? 200_000;
66
+ if (!Number.isInteger(maxDocumentChars) || maxDocumentChars < 1_000 || maxDocumentChars > 1_000_000) {
67
+ throw new Error("OpenUI maxDocumentChars must be an integer from 1,000 to 1,000,000.");
68
+ }
69
+ const allowed = new Set(allowedComponents);
70
+ const includeGroupNotes = allowedComponents.length === availableComponents.length;
71
+ const componentGroups = componentPack.library.componentGroups
72
+ ?.map((group) => ({
73
+ name: group.name,
74
+ components: group.components.filter((name) => allowed.has(name)),
75
+ ...(includeGroupNotes && group.notes ? { notes: [...group.notes] } : {})
76
+ }))
77
+ .filter((group) => group.components.length > 0);
78
+ const components = allowedComponents.map((name) => componentPack.library.components[name]);
79
+ const library = createLibrary({
80
+ id: componentPack.id + "@" + componentPack.version + ":" + allowedComponents.join(","),
81
+ root,
82
+ components,
83
+ ...(componentGroups ? { componentGroups } : {})
84
+ });
85
+ return {
86
+ componentPack,
87
+ library,
88
+ brand,
89
+ allowedComponents,
90
+ allowLocalInteractivity: input.allowLocalInteractivity ?? false,
91
+ maxDocumentChars
92
+ };
93
+ }
94
+ function normalizeBrand(input) {
95
+ const brand = {
96
+ name: requiredText(input?.name ?? DEFAULT_BRAND.name, "brand.name", 120),
97
+ theme: normalizeTheme(input?.theme ?? DEFAULT_BRAND.theme)
98
+ };
99
+ if (input?.legalName)
100
+ brand.legalName = requiredText(input.legalName, "brand.legalName", 160);
101
+ if (input?.footer)
102
+ brand.footer = requiredText(input.footer, "brand.footer", 240);
103
+ if (input?.logo)
104
+ brand.logo = validateLogo(input.logo);
105
+ return brand;
106
+ }
107
+ function normalizeTheme(theme) {
108
+ if (!theme || typeof theme !== "object" || Array.isArray(theme)) {
109
+ throw new Error("OpenUI brand.theme must be an OpenUI Theme object.");
110
+ }
111
+ const entries = Object.entries(theme);
112
+ if (entries.length > 200)
113
+ throw new Error("OpenUI brand.theme exceeds 200 tokens.");
114
+ const normalized = {};
115
+ for (const [name, value] of entries) {
116
+ if (!/^[A-Za-z][A-Za-z0-9]{0,80}$/u.test(name)) {
117
+ throw new Error("OpenUI theme token " + name + " is invalid.");
118
+ }
119
+ if (Array.isArray(value)) {
120
+ if (value.length > 32 || value.some((item) => typeof item !== "string")) {
121
+ throw new Error("OpenUI theme palette " + name + " must contain at most 32 CSS values.");
122
+ }
123
+ normalized[name] = value.map((item) => safeCssValue(item, "brand.theme." + name));
124
+ continue;
125
+ }
126
+ if (typeof value !== "string") {
127
+ throw new Error("OpenUI theme token " + name + " must be a string or string array.");
128
+ }
129
+ normalized[name] = safeCssValue(value, "brand.theme." + name);
130
+ }
131
+ return normalized;
132
+ }
133
+ function safeCssValue(value, field) {
134
+ const normalized = requiredText(value, field, 1_000);
135
+ if (/[;{}<>\x60]/u.test(normalized) || /url\s*\(|@import/iu.test(normalized)) {
136
+ throw new Error("OpenUI " + field + " contains unsupported CSS.");
137
+ }
138
+ return normalized;
139
+ }
140
+ function validateComponentPack(componentPack) {
141
+ requiredText(componentPack.id, "componentPack.id", 160);
142
+ requiredText(componentPack.version, "componentPack.version", 80);
143
+ if (!componentPack.library || typeof componentPack.library !== "object") {
144
+ throw new Error("OpenUI componentPack.library is required.");
145
+ }
146
+ if (!componentPack.library.root || !componentPack.library.components[componentPack.library.root]) {
147
+ throw new Error("OpenUI component packs must declare a registered root component.");
148
+ }
149
+ if (typeof componentPack.render !== "function") {
150
+ throw new Error("OpenUI component packs must provide a trusted publication renderer.");
151
+ }
152
+ }
153
+ function componentPackDescriptor(componentPack) {
154
+ return {
155
+ id: componentPack.id,
156
+ version: componentPack.version,
157
+ root: componentPack.library.root
158
+ };
159
+ }
160
+ function validateLogo(logo) {
161
+ const alt = requiredText(logo.alt, "brand.logo.alt", 160);
162
+ const match = /^data:image\/(png|jpeg|webp|svg\+xml);base64,([A-Za-z0-9+/=]+)$/u.exec(logo.dataUri);
163
+ if (!match) {
164
+ throw new Error("OpenUI brand logos must be embedded PNG, JPEG, WebP, or SVG data URIs.");
165
+ }
166
+ if (logo.dataUri.length > 1_500_000) {
167
+ throw new Error("OpenUI brand logo exceeds the 1.5 MB encoded limit.");
168
+ }
169
+ if (match[1] === "svg+xml")
170
+ validateSvgLogo(match[2] ?? "");
171
+ return { dataUri: logo.dataUri, alt };
172
+ }
173
+ function validateSvgLogo(encoded) {
174
+ const source = Buffer.from(encoded, "base64").toString("utf8");
175
+ if (!/<svg\b/iu.test(source)
176
+ || /<script\b|<foreignObject\b|\bon[a-z]+\s*=|\b(?:href|src)\s*=\s*["'](?!#)|url\s*\(/iu.test(source)) {
177
+ throw new Error("OpenUI SVG logos must be self-contained and cannot include scripts, event handlers, foreign objects, or external resources.");
178
+ }
179
+ }
180
+ function cloneBrand(brand) {
181
+ return {
182
+ name: brand.name,
183
+ theme: structuredClone(brand.theme),
184
+ ...(brand.legalName ? { legalName: brand.legalName } : {}),
185
+ ...(brand.logo ? { logo: { ...brand.logo } } : {}),
186
+ ...(brand.footer ? { footer: brand.footer } : {})
187
+ };
188
+ }
189
+ function requiredText(value, field, maxLength) {
190
+ if (typeof value !== "string")
191
+ throw new Error("OpenUI " + field + " must be a string.");
192
+ const normalized = value.trim();
193
+ if (!normalized)
194
+ throw new Error("OpenUI " + field + " cannot be empty.");
195
+ if (normalized.length > maxLength) {
196
+ throw new Error("OpenUI " + field + " exceeds " + maxLength + " characters.");
197
+ }
198
+ return normalized;
199
+ }
200
+ function isResolvedConfig(input) {
201
+ return "library" in input && "componentPack" in input && Array.isArray(input.allowedComponents);
202
+ }
203
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { createLibrary as createOpenUiLibrary, defineComponent as defineOpenUiComponent } from "@openuidev/lang-core";
2
+ export type { ComponentGroup as OpenUiComponentGroup, DefinedComponent as OpenUiDefinedComponent, Library as OpenUiLibrary, LibraryDefinition as OpenUiLibraryDefinition } from "@openuidev/lang-core";
3
+ export type { Theme as OpenUiTheme } from "@openuidev/react-ui";
4
+ export { defineOpenUiConfig, hydrateOpenUiConfig, snapshotOpenUiConfig, type OpenUiBrandProfile, type OpenUiComponentPack, type OpenUiComponentPackDescriptor, type OpenUiConfig, type OpenUiConfigInput, type OpenUiConfigSnapshot, type OpenUiRenderInput } from "./config.js";
5
+ export { openUiGenerationPrompt, parseOpenUiDocument, type ParsedOpenUiDocument } from "./library.js";
6
+ export { renderOpenUiArtifact } from "./render.js";
7
+ export { OPENUI_COMPONENT_NAMES, openUiStandardComponentPack } from "./standard-pack.js";
8
+ export { defineOpenUiCreateTool, defineOpenUiPublishTool, defineOpenUiUpdateTool } from "./tools.js";
9
+ export declare const assemblyLinePlugin: import("@assemblyline-agents/core").PluginModule;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,aAAa,IAAI,mBAAmB,EACpC,eAAe,IAAI,qBAAqB,EACzC,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,cAAc,IAAI,oBAAoB,EACtC,gBAAgB,IAAI,sBAAsB,EAC1C,OAAO,IAAI,aAAa,EACxB,iBAAiB,IAAI,uBAAuB,EAC7C,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EAClC,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,KAAK,oBAAoB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,kBAAkB,kDAAwC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ import { definePlugin, toolPackPluginMetadata } from "@assemblyline-agents/core";
2
+ export { createLibrary as createOpenUiLibrary, defineComponent as defineOpenUiComponent } from "@openuidev/lang-core";
3
+ export { defineOpenUiConfig, hydrateOpenUiConfig, snapshotOpenUiConfig } from "./config.js";
4
+ export { openUiGenerationPrompt, parseOpenUiDocument } from "./library.js";
5
+ export { renderOpenUiArtifact } from "./render.js";
6
+ export { OPENUI_COMPONENT_NAMES, openUiStandardComponentPack } from "./standard-pack.js";
7
+ export { defineOpenUiCreateTool, defineOpenUiPublishTool, defineOpenUiUpdateTool } from "./tools.js";
8
+ const PLUGIN = toolPackPluginMetadata("openui");
9
+ export const assemblyLinePlugin = definePlugin({ toolPacks: [PLUGIN] });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,sBAAsB,EACvB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,aAAa,IAAI,mBAAmB,EACpC,eAAe,IAAI,qBAAqB,EACzC,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EAQrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAE,CAAC;AAEjD,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ElementNode } from "@openuidev/lang-core";
2
+ import type { OpenUiConfig } from "./config.js";
3
+ export interface ParsedOpenUiDocument {
4
+ source: string;
5
+ root: ElementNode;
6
+ }
7
+ export declare function parseOpenUiDocument(sourceInput: string, config: OpenUiConfig): ParsedOpenUiDocument;
8
+ export declare function openUiGenerationPrompt(config: OpenUiConfig): string;
9
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,oBAAoB,CAuCnG;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAwBnE"}
@@ -0,0 +1,109 @@
1
+ import { createParser } from "@openuidev/lang-core";
2
+ export function parseOpenUiDocument(sourceInput, config) {
3
+ const source = sourceInput.trim();
4
+ if (!source)
5
+ throw new Error("OpenUI document cannot be empty.");
6
+ if (source.length > config.maxDocumentChars) {
7
+ throw new Error("OpenUI document exceeds the configured " + config.maxDocumentChars + "-character limit.");
8
+ }
9
+ let result;
10
+ try {
11
+ const parser = createParser(config.library.toJSONSchema(), config.library.root);
12
+ result = parser.parse(source);
13
+ }
14
+ catch (error) {
15
+ const detail = error instanceof Error ? error.message : String(error);
16
+ throw new Error("Invalid OpenUI Lang: " + detail);
17
+ }
18
+ if (!result.root || result.meta.incomplete) {
19
+ throw new Error("Invalid OpenUI Lang: the " + config.library.root + " document is incomplete.");
20
+ }
21
+ if (result.meta.errors.length > 0) {
22
+ throw new Error("Invalid OpenUI Lang: " + result.meta.errors.map((error) => error.message).join("; "));
23
+ }
24
+ if (result.meta.unresolved.length > 0 || result.meta.orphaned.length > 0) {
25
+ throw new Error("Invalid OpenUI Lang: every component must resolve into the " + config.library.root + " root.");
26
+ }
27
+ if (result.queryStatements.length > 0 || result.mutationStatements.length > 0) {
28
+ throw new Error("Published OpenUI artifacts cannot contain queries or mutations.");
29
+ }
30
+ if (!config.allowLocalInteractivity && Object.keys(result.stateDeclarations).length > 0) {
31
+ throw new Error("OpenUI state is disabled by the developer configuration.");
32
+ }
33
+ validateNode(result.root, config, 0, { count: 0 });
34
+ return { source, root: result.root };
35
+ }
36
+ export function openUiGenerationPrompt(config) {
37
+ const interactionRule = config.allowLocalInteractivity
38
+ ? "Local State, bindings, and Actions are allowed. Query and Mutation are never available in published artifacts."
39
+ : "Do not use State, bindings, Action, Query, or Mutation; this profile is static.";
40
+ const prompt = config.library.prompt({
41
+ additionalRules: [
42
+ "Return OpenUI Lang only, never HTML, CSS, JavaScript, or Markdown fences.",
43
+ "The root must be "
44
+ + config.library.root
45
+ + ". Allowed components: "
46
+ + config.allowedComponents.join(", ")
47
+ + ".",
48
+ interactionRule,
49
+ "Use the developer-owned "
50
+ + config.brand.name
51
+ + " theme; never simulate visual styling with HTML or CSS in content strings.",
52
+ "Define child components before the one root component that references them."
53
+ ],
54
+ bindings: config.allowLocalInteractivity,
55
+ toolCalls: false
56
+ });
57
+ const excluded = Object.keys(config.componentPack.library.components)
58
+ .filter((name) => !config.allowedComponents.includes(name));
59
+ return excluded.reduce(removeComponentFromPrompt, prompt);
60
+ }
61
+ function removeComponentFromPrompt(prompt, componentName) {
62
+ const escaped = componentName.replace(/[.*+?^$()|[\]\\]/gu, "\\$&");
63
+ return prompt
64
+ .replace(new RegExp("(^|[|(])\\s*" + escaped + "\\s*\\|\\s*", "gmu"), "$1")
65
+ .replace(new RegExp("\\s*\\|\\s*" + escaped + "(?=\\s*[)|\\]])", "gmu"), "")
66
+ .replace(new RegExp("\\b" + escaped + "\\b", "gu"), "never");
67
+ }
68
+ function validateNode(node, config, depth, budget) {
69
+ budget.count += 1;
70
+ if (budget.count > 500)
71
+ throw new Error("OpenUI document exceeds the 500-component limit.");
72
+ if (depth > 12)
73
+ throw new Error("OpenUI document exceeds the maximum component depth.");
74
+ const component = config.componentPack.library.components[node.typeName];
75
+ if (!component)
76
+ throw new Error("Unknown OpenUI component " + node.typeName + ".");
77
+ if (!config.allowedComponents.includes(node.typeName)) {
78
+ throw new Error("OpenUI component " + node.typeName + " is not allowed by the developer configuration.");
79
+ }
80
+ if (node.hasDynamicProps && !config.allowLocalInteractivity) {
81
+ throw new Error("OpenUI component "
82
+ + node.typeName
83
+ + " contains local state or an action, which this profile disables.");
84
+ }
85
+ visitNestedElements(node.props, (child) => validateNode(child, config, depth + 1, budget));
86
+ }
87
+ function visitNestedElements(value, visit) {
88
+ if (isElementNode(value)) {
89
+ visit(value);
90
+ return;
91
+ }
92
+ if (Array.isArray(value)) {
93
+ for (const item of value)
94
+ visitNestedElements(item, visit);
95
+ return;
96
+ }
97
+ if (!value || typeof value !== "object")
98
+ return;
99
+ for (const nested of Object.values(value)) {
100
+ visitNestedElements(nested, visit);
101
+ }
102
+ }
103
+ function isElementNode(value) {
104
+ if (!value || typeof value !== "object" || Array.isArray(value))
105
+ return false;
106
+ const candidate = value;
107
+ return candidate.type === "element" && typeof candidate.typeName === "string" && Boolean(candidate.props);
108
+ }
109
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}