@widgentic/designer 0.1.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/action-designer.d.ts +35 -0
  4. package/dist/action-designer.d.ts.map +1 -0
  5. package/dist/action-designer.js +294 -0
  6. package/dist/action-designer.js.map +1 -0
  7. package/dist/action-editor.d.ts +49 -0
  8. package/dist/action-editor.d.ts.map +1 -0
  9. package/dist/action-editor.js +515 -0
  10. package/dist/action-editor.js.map +1 -0
  11. package/dist/browser/widgentic-designer.js +433 -0
  12. package/dist/browser/widgentic-designer.js.map +7 -0
  13. package/dist/browser.d.ts +2 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +12 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/dom.d.ts +37 -0
  18. package/dist/dom.d.ts.map +1 -0
  19. package/dist/dom.js +387 -0
  20. package/dist/dom.js.map +1 -0
  21. package/dist/element.d.ts +12 -0
  22. package/dist/element.d.ts.map +1 -0
  23. package/dist/element.js +131 -0
  24. package/dist/element.js.map +1 -0
  25. package/dist/highlight.d.ts +30 -0
  26. package/dist/highlight.d.ts.map +1 -0
  27. package/dist/highlight.js +123 -0
  28. package/dist/highlight.js.map +1 -0
  29. package/dist/index.d.ts +30 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +21 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/internal.d.ts +6 -0
  34. package/dist/internal.d.ts.map +1 -0
  35. package/dist/internal.js +10 -0
  36. package/dist/internal.js.map +1 -0
  37. package/dist/io.d.ts +32 -0
  38. package/dist/io.d.ts.map +1 -0
  39. package/dist/io.js +155 -0
  40. package/dist/io.js.map +1 -0
  41. package/dist/json-tree-editor.d.ts +8 -0
  42. package/dist/json-tree-editor.d.ts.map +1 -0
  43. package/dist/json-tree-editor.js +186 -0
  44. package/dist/json-tree-editor.js.map +1 -0
  45. package/dist/panels.d.ts +13 -0
  46. package/dist/panels.d.ts.map +1 -0
  47. package/dist/panels.js +414 -0
  48. package/dist/panels.js.map +1 -0
  49. package/dist/preview.d.ts +40 -0
  50. package/dist/preview.d.ts.map +1 -0
  51. package/dist/preview.js +138 -0
  52. package/dist/preview.js.map +1 -0
  53. package/dist/record-editor.d.ts +11 -0
  54. package/dist/record-editor.d.ts.map +1 -0
  55. package/dist/record-editor.js +70 -0
  56. package/dist/record-editor.js.map +1 -0
  57. package/dist/schema-builder.d.ts +8 -0
  58. package/dist/schema-builder.d.ts.map +1 -0
  59. package/dist/schema-builder.js +235 -0
  60. package/dist/schema-builder.js.map +1 -0
  61. package/dist/schema-designer.d.ts +33 -0
  62. package/dist/schema-designer.d.ts.map +1 -0
  63. package/dist/schema-designer.js +251 -0
  64. package/dist/schema-designer.js.map +1 -0
  65. package/dist/schema-form.d.ts +8 -0
  66. package/dist/schema-form.d.ts.map +1 -0
  67. package/dist/schema-form.js +181 -0
  68. package/dist/schema-form.js.map +1 -0
  69. package/dist/schema-paths.d.ts +18 -0
  70. package/dist/schema-paths.d.ts.map +1 -0
  71. package/dist/schema-paths.js +75 -0
  72. package/dist/schema-paths.js.map +1 -0
  73. package/dist/seed.d.ts +18 -0
  74. package/dist/seed.d.ts.map +1 -0
  75. package/dist/seed.js +299 -0
  76. package/dist/seed.js.map +1 -0
  77. package/dist/shell.d.ts +59 -0
  78. package/dist/shell.d.ts.map +1 -0
  79. package/dist/shell.js +102 -0
  80. package/dist/shell.js.map +1 -0
  81. package/dist/store.d.ts +44 -0
  82. package/dist/store.d.ts.map +1 -0
  83. package/dist/store.js +71 -0
  84. package/dist/store.js.map +1 -0
  85. package/dist/styles-editor.d.ts +8 -0
  86. package/dist/styles-editor.d.ts.map +1 -0
  87. package/dist/styles-editor.js +100 -0
  88. package/dist/styles-editor.js.map +1 -0
  89. package/dist/template-panel.d.ts +19 -0
  90. package/dist/template-panel.d.ts.map +1 -0
  91. package/dist/template-panel.js +585 -0
  92. package/dist/template-panel.js.map +1 -0
  93. package/dist/theme-designer.d.ts +35 -0
  94. package/dist/theme-designer.d.ts.map +1 -0
  95. package/dist/theme-designer.js +336 -0
  96. package/dist/theme-designer.js.map +1 -0
  97. package/dist/theme-panel.d.ts +20 -0
  98. package/dist/theme-panel.d.ts.map +1 -0
  99. package/dist/theme-panel.js +96 -0
  100. package/dist/theme-panel.js.map +1 -0
  101. package/dist/validate.d.ts +57 -0
  102. package/dist/validate.d.ts.map +1 -0
  103. package/dist/validate.js +131 -0
  104. package/dist/validate.js.map +1 -0
  105. package/package.json +49 -0
@@ -0,0 +1,131 @@
1
+ /**
2
+ * The designer's derive step: run widgentic's pure validators over the
3
+ * draft and shape their structured errors into per-panel diagnostics.
4
+ * Everything here goes through public package entries — the designer owns
5
+ * no validation logic of its own.
6
+ */
7
+ import { isPlainObject } from "@widgentic/core";
8
+ import { createCatalog, validateDataAgainstSchema, widgetStylesToCss } from "@widgentic/core";
9
+ import { collectActionRefs, parsePath, validateTemplate } from "@widgentic/core";
10
+ import { validateLoadBinding } from "@widgentic/core";
11
+ import { validateTheme } from "@widgentic/core";
12
+ /**
13
+ * The schema validation actually runs against: the inline one, or the
14
+ * referenced shared one resolved from the supplied list — the same join
15
+ * the server's composition performs.
16
+ */
17
+ export function effectiveDataSchema(draft, schemas = []) {
18
+ const ref = draft.descriptor?.dataSchemaRef;
19
+ if (typeof ref === "string") {
20
+ return schemas.find((entry) => entry.name === ref)?.schema;
21
+ }
22
+ const inline = draft.descriptor?.dataSchema;
23
+ return isPlainObject(inline) ? inline : undefined;
24
+ }
25
+ const BASE_KINDS = new Set(createCatalog().kinds());
26
+ /**
27
+ * Detect style entries the renderer would skip, using only the public
28
+ * generator: a probe that produces no CSS was filtered by the safety
29
+ * guards. Selector and per-declaration issues are reported separately.
30
+ */
31
+ function auditStyles(styles) {
32
+ if (!isPlainObject(styles))
33
+ return [];
34
+ const issues = [];
35
+ for (const [selector, declarations] of Object.entries(styles)) {
36
+ if (widgetStylesToCss({ [selector]: { color: "red" } }) === "") {
37
+ issues.push({
38
+ selector,
39
+ message: "Selector would be skipped — every comma-separated part must target a .wg- class and avoid ;{}<>@\\."
40
+ });
41
+ continue;
42
+ }
43
+ if (!isPlainObject(declarations)) {
44
+ issues.push({ selector, message: "Declarations must be a property → value map." });
45
+ continue;
46
+ }
47
+ for (const [property, value] of Object.entries(declarations)) {
48
+ if (typeof value !== "string" ||
49
+ widgetStylesToCss({ ".wg-probe": { [property]: value } }) === "") {
50
+ issues.push({
51
+ selector,
52
+ property,
53
+ message: "Declaration would be skipped — unsafe property name or value (no url(), expression(), or ;{}<>@\\)."
54
+ });
55
+ }
56
+ }
57
+ }
58
+ return issues;
59
+ }
60
+ /** Run every validator; total — never throws on any draft shape. */
61
+ export function deriveDiagnostics(draft, options = {}) {
62
+ const diagnostics = { styles: [], previewable: false };
63
+ if (typeof draft.kind !== "string" || draft.kind.trim().length === 0) {
64
+ diagnostics.kind = "Kind must be a non-empty id.";
65
+ }
66
+ else if (BASE_KINDS.has(draft.kind)) {
67
+ diagnostics.kind = `'${draft.kind}' is a built-in kind — pick a distinct id.`;
68
+ }
69
+ const template = validateTemplate(draft.template);
70
+ if (!template.ok) {
71
+ const issue = {
72
+ code: template.error.code,
73
+ message: template.error.message
74
+ };
75
+ const path = template.error.path;
76
+ if (typeof path === "string")
77
+ issue.path = path;
78
+ diagnostics.template = issue;
79
+ }
80
+ // Shared-schema refs resolve here exactly as the server's composition
81
+ // resolves them, so diagnostics match what the store will enforce.
82
+ const ref = draft.descriptor?.dataSchemaRef;
83
+ if (typeof ref === "string") {
84
+ if (draft.descriptor?.dataSchema !== undefined) {
85
+ diagnostics.schemaRef =
86
+ "A descriptor carries 'dataSchema' OR 'dataSchemaRef', never both.";
87
+ }
88
+ else if ((options.schemas ?? []).every((entry) => entry.name !== ref)) {
89
+ diagnostics.schemaRef = `References unknown schema '${ref}' — it is not among the supplied shared schemas.`;
90
+ }
91
+ }
92
+ const schema = effectiveDataSchema(draft, options.schemas ?? []);
93
+ if (isPlainObject(schema)) {
94
+ if (draft.descriptor.dataExample !== undefined) {
95
+ const error = validateDataAgainstSchema(schema, draft.descriptor.dataExample);
96
+ if (error)
97
+ diagnostics.example = error;
98
+ }
99
+ if (draft.sampleData !== undefined) {
100
+ const error = validateDataAgainstSchema(schema, draft.sampleData);
101
+ if (error)
102
+ diagnostics.sample = error;
103
+ }
104
+ }
105
+ diagnostics.styles = auditStyles(draft.descriptor?.styles);
106
+ if (draft.load !== undefined) {
107
+ const problem = validateLoadBinding(draft.load, "load", {
108
+ isPath: (value) => parsePath(value) !== undefined
109
+ });
110
+ if (problem)
111
+ diagnostics.load = `${problem.message} (at ${problem.path})`;
112
+ }
113
+ if (options.actions !== undefined) {
114
+ const known = new Set(options.actions.map((action) => action.name));
115
+ const unknown = collectActionRefs(draft.template, draft.load).filter((ref) => !known.has(ref));
116
+ if (unknown.length > 0) {
117
+ diagnostics.actionRefs = `References unknown shared action${unknown.length === 1 ? "" : "s"} ${unknown
118
+ .map((ref) => `'${ref}'`)
119
+ .join(", ")} — bound elements will render disabled.`;
120
+ }
121
+ }
122
+ if (draft.theme !== undefined) {
123
+ const theme = validateTheme(draft.theme);
124
+ if (!theme.ok)
125
+ diagnostics.theme = theme.error;
126
+ }
127
+ diagnostics.previewable =
128
+ diagnostics.kind === undefined && diagnostics.template === undefined;
129
+ return diagnostics;
130
+ }
131
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@widgentic/designer",
3
+ "version": "0.1.0",
4
+ "description": "Hostable widgentic designers: widget, theme, schema and action designers as functions and custom elements, plus a single-file browser bundle.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./browser": {
13
+ "types": "./dist/browser.d.ts",
14
+ "default": "./dist/browser/widgentic-designer.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE"
21
+ ],
22
+ "sideEffects": false,
23
+ "engines": {
24
+ "node": ">=22"
25
+ },
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/widgentic/widgentic.git",
29
+ "directory": "packages/designer"
30
+ },
31
+ "homepage": "https://widgentic.dev",
32
+ "keywords": [
33
+ "widgentic",
34
+ "widgets",
35
+ "mcp",
36
+ "agents"
37
+ ],
38
+ "publishConfig": {
39
+ "access": "public",
40
+ "provenance": true
41
+ },
42
+ "scripts": {
43
+ "build": "tsc -p tsconfig.build.json && node scripts/bundle.mjs",
44
+ "clean": "rm -rf dist"
45
+ },
46
+ "dependencies": {
47
+ "@widgentic/core": "^0.1.0"
48
+ }
49
+ }