@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.
- package/LICENSE +21 -0
- package/README.md +27 -0
- package/dist/action-designer.d.ts +35 -0
- package/dist/action-designer.d.ts.map +1 -0
- package/dist/action-designer.js +294 -0
- package/dist/action-designer.js.map +1 -0
- package/dist/action-editor.d.ts +49 -0
- package/dist/action-editor.d.ts.map +1 -0
- package/dist/action-editor.js +515 -0
- package/dist/action-editor.js.map +1 -0
- package/dist/browser/widgentic-designer.js +433 -0
- package/dist/browser/widgentic-designer.js.map +7 -0
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +12 -0
- package/dist/browser.js.map +1 -0
- package/dist/dom.d.ts +37 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +387 -0
- package/dist/dom.js.map +1 -0
- package/dist/element.d.ts +12 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +131 -0
- package/dist/element.js.map +1 -0
- package/dist/highlight.d.ts +30 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +123 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +6 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +10 -0
- package/dist/internal.js.map +1 -0
- package/dist/io.d.ts +32 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +155 -0
- package/dist/io.js.map +1 -0
- package/dist/json-tree-editor.d.ts +8 -0
- package/dist/json-tree-editor.d.ts.map +1 -0
- package/dist/json-tree-editor.js +186 -0
- package/dist/json-tree-editor.js.map +1 -0
- package/dist/panels.d.ts +13 -0
- package/dist/panels.d.ts.map +1 -0
- package/dist/panels.js +414 -0
- package/dist/panels.js.map +1 -0
- package/dist/preview.d.ts +40 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +138 -0
- package/dist/preview.js.map +1 -0
- package/dist/record-editor.d.ts +11 -0
- package/dist/record-editor.d.ts.map +1 -0
- package/dist/record-editor.js +70 -0
- package/dist/record-editor.js.map +1 -0
- package/dist/schema-builder.d.ts +8 -0
- package/dist/schema-builder.d.ts.map +1 -0
- package/dist/schema-builder.js +235 -0
- package/dist/schema-builder.js.map +1 -0
- package/dist/schema-designer.d.ts +33 -0
- package/dist/schema-designer.d.ts.map +1 -0
- package/dist/schema-designer.js +251 -0
- package/dist/schema-designer.js.map +1 -0
- package/dist/schema-form.d.ts +8 -0
- package/dist/schema-form.d.ts.map +1 -0
- package/dist/schema-form.js +181 -0
- package/dist/schema-form.js.map +1 -0
- package/dist/schema-paths.d.ts +18 -0
- package/dist/schema-paths.d.ts.map +1 -0
- package/dist/schema-paths.js +75 -0
- package/dist/schema-paths.js.map +1 -0
- package/dist/seed.d.ts +18 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +299 -0
- package/dist/seed.js.map +1 -0
- package/dist/shell.d.ts +59 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +102 -0
- package/dist/shell.js.map +1 -0
- package/dist/store.d.ts +44 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +71 -0
- package/dist/store.js.map +1 -0
- package/dist/styles-editor.d.ts +8 -0
- package/dist/styles-editor.d.ts.map +1 -0
- package/dist/styles-editor.js +100 -0
- package/dist/styles-editor.js.map +1 -0
- package/dist/template-panel.d.ts +19 -0
- package/dist/template-panel.d.ts.map +1 -0
- package/dist/template-panel.js +585 -0
- package/dist/template-panel.js.map +1 -0
- package/dist/theme-designer.d.ts +35 -0
- package/dist/theme-designer.d.ts.map +1 -0
- package/dist/theme-designer.js +336 -0
- package/dist/theme-designer.js.map +1 -0
- package/dist/theme-panel.d.ts +20 -0
- package/dist/theme-panel.d.ts.map +1 -0
- package/dist/theme-panel.js +96 -0
- package/dist/theme-panel.js.map +1 -0
- package/dist/validate.d.ts +57 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +131 -0
- package/dist/validate.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured editor for the descriptor's styles — selector rows with
|
|
3
|
+
* their declaration rows, under the template tree's flat discipline.
|
|
4
|
+
* The value is `Record<selector, Record<property, value>>` (strings
|
|
5
|
+
* only), so the tree enforces the exact shape the server's style guards
|
|
6
|
+
* expect; anything looser belongs in the JSON tab.
|
|
7
|
+
*/
|
|
8
|
+
import { isPlainObject } from "@widgentic/core";
|
|
9
|
+
import { h } from "./dom.js";
|
|
10
|
+
export function createStylesEditor(initial, onChange) {
|
|
11
|
+
let current = initial;
|
|
12
|
+
const element = h("div", { class: "wgd-styles" });
|
|
13
|
+
function commit(next) {
|
|
14
|
+
// An emptied record means "no styles" — the descriptor drops the key.
|
|
15
|
+
current = Object.keys(next).length > 0 ? next : undefined;
|
|
16
|
+
onChange(current);
|
|
17
|
+
render();
|
|
18
|
+
}
|
|
19
|
+
function changeInput(value, placeholder, className, onCommit) {
|
|
20
|
+
const input = h("input", {
|
|
21
|
+
type: "text",
|
|
22
|
+
class: className,
|
|
23
|
+
placeholder,
|
|
24
|
+
spellcheck: "false"
|
|
25
|
+
});
|
|
26
|
+
input.value = value;
|
|
27
|
+
input.addEventListener("change", () => onCommit(input.value));
|
|
28
|
+
return input;
|
|
29
|
+
}
|
|
30
|
+
function renderSelector(selector, declarations, styles) {
|
|
31
|
+
const rename = changeInput(selector, ".wg-selector", "wgd-input wgd-st-selector", (next) => {
|
|
32
|
+
const entries = Object.entries(styles).map(([k, v]) => k === selector ? [next, v] : [k, v]);
|
|
33
|
+
commit(Object.fromEntries(entries));
|
|
34
|
+
});
|
|
35
|
+
const addDecl = h("button", { class: "wgd-icon", type: "button", title: "Add declaration" }, ["+"]);
|
|
36
|
+
addDecl.addEventListener("click", () => {
|
|
37
|
+
commit({ ...styles, [selector]: { ...declarations, "": "" } });
|
|
38
|
+
});
|
|
39
|
+
const removeSelector = h("button", { class: "wgd-icon", type: "button", title: "Remove selector" }, ["✕"]);
|
|
40
|
+
removeSelector.addEventListener("click", () => {
|
|
41
|
+
const { [selector]: _gone, ...rest } = styles;
|
|
42
|
+
commit(rest);
|
|
43
|
+
});
|
|
44
|
+
const declRows = Object.entries(declarations).map(([property, value]) => {
|
|
45
|
+
const propInput = changeInput(property, "property", "wgd-input wgd-st-prop", (next) => {
|
|
46
|
+
const entries = Object.entries(declarations).map(([k, v]) => k === property ? [next, v] : [k, v]);
|
|
47
|
+
commit({ ...styles, [selector]: Object.fromEntries(entries) });
|
|
48
|
+
});
|
|
49
|
+
const valueInput = changeInput(value, "value (no url(...), no ;)", "wgd-input wgd-st-value", (next) => {
|
|
50
|
+
commit({
|
|
51
|
+
...styles,
|
|
52
|
+
[selector]: { ...declarations, [property]: next }
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
const removeDecl = h("button", { class: "wgd-icon", type: "button", title: "Remove declaration" }, ["✕"]);
|
|
56
|
+
removeDecl.addEventListener("click", () => {
|
|
57
|
+
const { [property]: _gone, ...rest } = declarations;
|
|
58
|
+
commit({ ...styles, [selector]: rest });
|
|
59
|
+
});
|
|
60
|
+
return h("div", { class: "wgd-st-decl" }, [
|
|
61
|
+
propInput,
|
|
62
|
+
h("span", { class: "wgd-st-colon" }, [":"]),
|
|
63
|
+
valueInput,
|
|
64
|
+
removeDecl
|
|
65
|
+
]);
|
|
66
|
+
});
|
|
67
|
+
return h("div", { class: "wgd-st-rule" }, [
|
|
68
|
+
h("div", { class: "wgd-st-row" }, [
|
|
69
|
+
rename,
|
|
70
|
+
h("span", { class: "wgd-node-icons" }, [addDecl, removeSelector])
|
|
71
|
+
]),
|
|
72
|
+
h("div", { class: "wgd-st-decls" }, declRows)
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
function render() {
|
|
76
|
+
const styles = current ?? {};
|
|
77
|
+
const addSelector = h("button", { class: "wgd-button wgd-add wgd-st-add", type: "button" }, ["+ selector"]);
|
|
78
|
+
addSelector.addEventListener("click", () => {
|
|
79
|
+
let name = ".wg-";
|
|
80
|
+
for (let i = 1; name in styles; i++)
|
|
81
|
+
name = `.wg-${i}`;
|
|
82
|
+
commit({ ...styles, [name]: {} });
|
|
83
|
+
});
|
|
84
|
+
element.replaceChildren(...Object.entries(styles).map(([selector, declarations]) => renderSelector(selector, isPlainObject(declarations)
|
|
85
|
+
? declarations
|
|
86
|
+
: {}, styles)), h("div", { class: "wgd-toolbar" }, [addSelector]));
|
|
87
|
+
}
|
|
88
|
+
render();
|
|
89
|
+
return {
|
|
90
|
+
element,
|
|
91
|
+
getValue: () => current,
|
|
92
|
+
setValue(styles) {
|
|
93
|
+
if (element.contains(document.activeElement))
|
|
94
|
+
return;
|
|
95
|
+
current = styles;
|
|
96
|
+
render();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=styles-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-editor.js","sourceRoot":"","sources":["../src/styles-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { StoredAction } from "@widgentic/core";
|
|
2
|
+
import type { SchemaEntry } from "./schema-designer.js";
|
|
3
|
+
import type { DraftStore, WidgetDraft } from "./store.js";
|
|
4
|
+
import type { DesignerDiagnostics } from "./validate.js";
|
|
5
|
+
/** What element bindings can reach: shared actions, secrets, schemas. */
|
|
6
|
+
export interface TemplateActionContext {
|
|
7
|
+
actions: StoredAction[];
|
|
8
|
+
secretNames: string[];
|
|
9
|
+
schemas: SchemaEntry[];
|
|
10
|
+
}
|
|
11
|
+
export interface TemplatePanelOptions {
|
|
12
|
+
actionContext?: TemplateActionContext;
|
|
13
|
+
}
|
|
14
|
+
export declare function mountTemplatePanel(store: DraftStore, refreshers: ((draft: WidgetDraft) => void)[], options?: TemplatePanelOptions): {
|
|
15
|
+
element: HTMLElement;
|
|
16
|
+
refresh(draft: WidgetDraft, diagnostics: DesignerDiagnostics): void;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=template-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-panel.d.ts","sourceRoot":"","sources":["../src/template-panel.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMxD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AA+GzD,yEAAyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,qBAAqB,CAAC;CACvC;AAUD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC,EAAE,EAC5C,OAAO,GAAE,oBAAyB,GACjC;IACD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpE,OAAO,IAAI,IAAI,CAAC;CACjB,CAiqBA"}
|