@maxhealth.tech/prefab 0.1.2
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/CHANGELOG.md +51 -0
- package/LICENSE +21 -0
- package/README.md +340 -0
- package/dist/actions/client.d.ts +98 -0
- package/dist/actions/client.d.ts.map +1 -0
- package/dist/actions/client.js +188 -0
- package/dist/actions/client.js.map +1 -0
- package/dist/actions/index.d.ts +6 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +3 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/mcp.d.ts +37 -0
- package/dist/actions/mcp.d.ts.map +1 -0
- package/dist/actions/mcp.js +64 -0
- package/dist/actions/mcp.js.map +1 -0
- package/dist/actions/types.d.ts +16 -0
- package/dist/actions/types.d.ts.map +1 -0
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/app.d.ts +65 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +120 -0
- package/dist/app.js.map +1 -0
- package/dist/auto/chart.d.ts +36 -0
- package/dist/auto/chart.d.ts.map +1 -0
- package/dist/auto/chart.js +50 -0
- package/dist/auto/chart.js.map +1 -0
- package/dist/auto/comparison.d.ts +32 -0
- package/dist/auto/comparison.d.ts.map +1 -0
- package/dist/auto/comparison.js +66 -0
- package/dist/auto/comparison.js.map +1 -0
- package/dist/auto/form.d.ts +50 -0
- package/dist/auto/form.d.ts.map +1 -0
- package/dist/auto/form.js +68 -0
- package/dist/auto/form.js.map +1 -0
- package/dist/auto/index.d.ts +84 -0
- package/dist/auto/index.d.ts.map +1 -0
- package/dist/auto/index.js +240 -0
- package/dist/auto/index.js.map +1 -0
- package/dist/auto/metrics.d.ts +44 -0
- package/dist/auto/metrics.d.ts.map +1 -0
- package/dist/auto/metrics.js +55 -0
- package/dist/auto/metrics.js.map +1 -0
- package/dist/auto/progress.d.ts +38 -0
- package/dist/auto/progress.d.ts.map +1 -0
- package/dist/auto/progress.js +72 -0
- package/dist/auto/progress.js.map +1 -0
- package/dist/auto/timeline.d.ts +41 -0
- package/dist/auto/timeline.d.ts.map +1 -0
- package/dist/auto/timeline.js +72 -0
- package/dist/auto/timeline.js.map +1 -0
- package/dist/components/alert/index.d.ts +14 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +31 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/card/index.d.ts +12 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +33 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/charts/index.d.ts +57 -0
- package/dist/components/charts/index.d.ts.map +1 -0
- package/dist/components/charts/index.js +91 -0
- package/dist/components/charts/index.js.map +1 -0
- package/dist/components/control/index.d.ts +48 -0
- package/dist/components/control/index.d.ts.map +1 -0
- package/dist/components/control/index.js +47 -0
- package/dist/components/control/index.js.map +1 -0
- package/dist/components/data/index.d.ts +53 -0
- package/dist/components/data/index.d.ts.map +1 -0
- package/dist/components/data/index.js +88 -0
- package/dist/components/data/index.js.map +1 -0
- package/dist/components/form/index.d.ts +103 -0
- package/dist/components/form/index.d.ts.map +1 -0
- package/dist/components/form/index.js +247 -0
- package/dist/components/form/index.js.map +1 -0
- package/dist/components/interactive/index.d.ts +33 -0
- package/dist/components/interactive/index.d.ts.map +1 -0
- package/dist/components/interactive/index.js +59 -0
- package/dist/components/interactive/index.js.map +1 -0
- package/dist/components/layout/index.d.ts +61 -0
- package/dist/components/layout/index.d.ts.map +1 -0
- package/dist/components/layout/index.js +86 -0
- package/dist/components/layout/index.js.map +1 -0
- package/dist/components/media/index.d.ts +17 -0
- package/dist/components/media/index.d.ts.map +1 -0
- package/dist/components/media/index.js +41 -0
- package/dist/components/media/index.js.map +1 -0
- package/dist/components/table/index.d.ts +28 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +56 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/typography/index.d.ts +34 -0
- package/dist/components/typography/index.d.ts.map +1 -0
- package/dist/components/typography/index.js +93 -0
- package/dist/components/typography/index.js.map +1 -0
- package/dist/core/component.d.ts +67 -0
- package/dist/core/component.d.ts.map +1 -0
- package/dist/core/component.js +122 -0
- package/dist/core/component.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/validate.d.ts +30 -0
- package/dist/core/validate.d.ts.map +1 -0
- package/dist/core/validate.js +178 -0
- package/dist/core/validate.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/display.d.ts +102 -0
- package/dist/mcp/display.d.ts.map +1 -0
- package/dist/mcp/display.js +124 -0
- package/dist/mcp/display.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +5 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/types.d.ts +35 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +8 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/renderer/actions.d.ts +36 -0
- package/dist/renderer/actions.d.ts.map +1 -0
- package/dist/renderer/actions.js +296 -0
- package/dist/renderer/actions.js.map +1 -0
- package/dist/renderer/app.d.ts +87 -0
- package/dist/renderer/app.d.ts.map +1 -0
- package/dist/renderer/app.js +166 -0
- package/dist/renderer/app.js.map +1 -0
- package/dist/renderer/bridge.d.ts +91 -0
- package/dist/renderer/bridge.d.ts.map +1 -0
- package/dist/renderer/bridge.js +302 -0
- package/dist/renderer/bridge.js.map +1 -0
- package/dist/renderer/components/alert.d.ts +5 -0
- package/dist/renderer/components/alert.d.ts.map +1 -0
- package/dist/renderer/components/alert.js +44 -0
- package/dist/renderer/components/alert.js.map +1 -0
- package/dist/renderer/components/card.d.ts +5 -0
- package/dist/renderer/components/card.d.ts.map +1 -0
- package/dist/renderer/components/card.js +38 -0
- package/dist/renderer/components/card.js.map +1 -0
- package/dist/renderer/components/charts.d.ts +8 -0
- package/dist/renderer/components/charts.d.ts.map +1 -0
- package/dist/renderer/components/charts.js +232 -0
- package/dist/renderer/components/charts.js.map +1 -0
- package/dist/renderer/components/control.d.ts +5 -0
- package/dist/renderer/components/control.d.ts.map +1 -0
- package/dist/renderer/components/control.js +140 -0
- package/dist/renderer/components/control.js.map +1 -0
- package/dist/renderer/components/data.d.ts +5 -0
- package/dist/renderer/components/data.d.ts.map +1 -0
- package/dist/renderer/components/data.js +268 -0
- package/dist/renderer/components/data.js.map +1 -0
- package/dist/renderer/components/form.d.ts +5 -0
- package/dist/renderer/components/form.d.ts.map +1 -0
- package/dist/renderer/components/form.js +523 -0
- package/dist/renderer/components/form.js.map +1 -0
- package/dist/renderer/components/index.d.ts +5 -0
- package/dist/renderer/components/index.d.ts.map +1 -0
- package/dist/renderer/components/index.js +32 -0
- package/dist/renderer/components/index.js.map +1 -0
- package/dist/renderer/components/interactive.d.ts +5 -0
- package/dist/renderer/components/interactive.d.ts.map +1 -0
- package/dist/renderer/components/interactive.js +324 -0
- package/dist/renderer/components/interactive.js.map +1 -0
- package/dist/renderer/components/layout.d.ts +5 -0
- package/dist/renderer/components/layout.d.ts.map +1 -0
- package/dist/renderer/components/layout.js +113 -0
- package/dist/renderer/components/layout.js.map +1 -0
- package/dist/renderer/components/media.d.ts +5 -0
- package/dist/renderer/components/media.d.ts.map +1 -0
- package/dist/renderer/components/media.js +132 -0
- package/dist/renderer/components/media.js.map +1 -0
- package/dist/renderer/components/table.d.ts +5 -0
- package/dist/renderer/components/table.d.ts.map +1 -0
- package/dist/renderer/components/table.js +101 -0
- package/dist/renderer/components/table.js.map +1 -0
- package/dist/renderer/components/typography.d.ts +5 -0
- package/dist/renderer/components/typography.d.ts.map +1 -0
- package/dist/renderer/components/typography.js +90 -0
- package/dist/renderer/components/typography.js.map +1 -0
- package/dist/renderer/engine.d.ts +53 -0
- package/dist/renderer/engine.d.ts.map +1 -0
- package/dist/renderer/engine.js +112 -0
- package/dist/renderer/engine.js.map +1 -0
- package/dist/renderer/index.d.ts +94 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +215 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/rx.d.ts +37 -0
- package/dist/renderer/rx.d.ts.map +1 -0
- package/dist/renderer/rx.js +360 -0
- package/dist/renderer/rx.js.map +1 -0
- package/dist/renderer/state.d.ts +34 -0
- package/dist/renderer/state.d.ts.map +1 -0
- package/dist/renderer/state.js +132 -0
- package/dist/renderer/state.js.map +1 -0
- package/dist/renderer/theme.d.ts +13 -0
- package/dist/renderer/theme.d.ts.map +1 -0
- package/dist/renderer/theme.js +69 -0
- package/dist/renderer/theme.js.map +1 -0
- package/dist/renderer/transport.d.ts +22 -0
- package/dist/renderer/transport.d.ts.map +1 -0
- package/dist/renderer/transport.js +69 -0
- package/dist/renderer/transport.js.map +1 -0
- package/dist/renderer.min.js +83 -0
- package/dist/rx/index.d.ts +2 -0
- package/dist/rx/index.d.ts.map +1 -0
- package/dist/rx/index.js +2 -0
- package/dist/rx/index.js.map +1 -0
- package/dist/rx/rx.d.ts +81 -0
- package/dist/rx/rx.d.ts.map +1 -0
- package/dist/rx/rx.js +196 -0
- package/dist/rx/rx.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reactive state store for the prefab renderer.
|
|
3
|
+
*
|
|
4
|
+
* Stores key-value pairs and notifies subscribers when values change.
|
|
5
|
+
* Supports dot-path access (e.g. "user.name") and array operations.
|
|
6
|
+
*/
|
|
7
|
+
export type Subscriber = () => void;
|
|
8
|
+
export type Unsubscribe = () => void;
|
|
9
|
+
export declare class Store {
|
|
10
|
+
private data;
|
|
11
|
+
private subscribers;
|
|
12
|
+
private globalSubscribers;
|
|
13
|
+
constructor(initial?: Record<string, unknown>);
|
|
14
|
+
/** Get a value by dot-path key */
|
|
15
|
+
get(path: string): unknown;
|
|
16
|
+
/** Get the full state snapshot */
|
|
17
|
+
getAll(): Record<string, unknown>;
|
|
18
|
+
/** Set a value by dot-path key and notify subscribers */
|
|
19
|
+
set(path: string, value: unknown): void;
|
|
20
|
+
/** Toggle a boolean value */
|
|
21
|
+
toggle(path: string): void;
|
|
22
|
+
/** Append a value to an array at path */
|
|
23
|
+
append(path: string, value: unknown, index?: number): void;
|
|
24
|
+
/** Remove an element from an array at path by index or value */
|
|
25
|
+
pop(path: string, indexOrValue: number | string): void;
|
|
26
|
+
/** Merge a partial state object */
|
|
27
|
+
merge(partial: Record<string, unknown>): void;
|
|
28
|
+
/** Subscribe to changes on a specific path */
|
|
29
|
+
subscribe(path: string, fn: Subscriber): Unsubscribe;
|
|
30
|
+
/** Subscribe to any state change */
|
|
31
|
+
subscribeAll(fn: Subscriber): Unsubscribe;
|
|
32
|
+
private notify;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/renderer/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAA;AACnC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,iBAAiB,CAAwB;gBAErC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7C,kCAAkC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,kCAAkC;IAClC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,yDAAyD;IACzD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAKvC,6BAA6B;IAC7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM1B,yCAAyC;IACzC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAc1D,gEAAgE;IAChE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAYtD,mCAAmC;IACnC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAY7C,8CAA8C;IAC9C,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,GAAG,WAAW;IASpD,oCAAoC;IACpC,YAAY,CAAC,EAAE,EAAE,UAAU,GAAG,WAAW;IAKzC,OAAO,CAAC,MAAM;CAUf"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reactive state store for the prefab renderer.
|
|
3
|
+
*
|
|
4
|
+
* Stores key-value pairs and notifies subscribers when values change.
|
|
5
|
+
* Supports dot-path access (e.g. "user.name") and array operations.
|
|
6
|
+
*/
|
|
7
|
+
export class Store {
|
|
8
|
+
data = {};
|
|
9
|
+
subscribers = new Map();
|
|
10
|
+
globalSubscribers = new Set();
|
|
11
|
+
constructor(initial) {
|
|
12
|
+
if (initial)
|
|
13
|
+
this.data = structuredClone(initial);
|
|
14
|
+
}
|
|
15
|
+
/** Get a value by dot-path key */
|
|
16
|
+
get(path) {
|
|
17
|
+
return resolvePath(this.data, path);
|
|
18
|
+
}
|
|
19
|
+
/** Get the full state snapshot */
|
|
20
|
+
getAll() {
|
|
21
|
+
return this.data;
|
|
22
|
+
}
|
|
23
|
+
/** Set a value by dot-path key and notify subscribers */
|
|
24
|
+
set(path, value) {
|
|
25
|
+
setPath(this.data, path, value);
|
|
26
|
+
this.notify(path);
|
|
27
|
+
}
|
|
28
|
+
/** Toggle a boolean value */
|
|
29
|
+
toggle(path) {
|
|
30
|
+
const current = this.get(path);
|
|
31
|
+
const falsy = current == null || current === false || current === 0 || current === '';
|
|
32
|
+
this.set(path, falsy);
|
|
33
|
+
}
|
|
34
|
+
/** Append a value to an array at path */
|
|
35
|
+
append(path, value, index) {
|
|
36
|
+
const arr = this.get(path);
|
|
37
|
+
if (!Array.isArray(arr)) {
|
|
38
|
+
this.set(path, [value]);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if (index !== undefined) {
|
|
42
|
+
arr.splice(index, 0, value);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
arr.push(value);
|
|
46
|
+
}
|
|
47
|
+
this.notify(path);
|
|
48
|
+
}
|
|
49
|
+
/** Remove an element from an array at path by index or value */
|
|
50
|
+
pop(path, indexOrValue) {
|
|
51
|
+
const arr = this.get(path);
|
|
52
|
+
if (!Array.isArray(arr))
|
|
53
|
+
return;
|
|
54
|
+
if (typeof indexOrValue === 'number') {
|
|
55
|
+
arr.splice(indexOrValue, 1);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
const idx = arr.indexOf(indexOrValue);
|
|
59
|
+
if (idx >= 0)
|
|
60
|
+
arr.splice(idx, 1);
|
|
61
|
+
}
|
|
62
|
+
this.notify(path);
|
|
63
|
+
}
|
|
64
|
+
/** Merge a partial state object */
|
|
65
|
+
merge(partial) {
|
|
66
|
+
for (const [key, value] of Object.entries(partial)) {
|
|
67
|
+
setPath(this.data, key, value);
|
|
68
|
+
}
|
|
69
|
+
// Notify all changed keys + global
|
|
70
|
+
for (const key of Object.keys(partial)) {
|
|
71
|
+
const subs = this.subscribers.get(key);
|
|
72
|
+
if (subs)
|
|
73
|
+
subs.forEach(fn => fn());
|
|
74
|
+
}
|
|
75
|
+
this.globalSubscribers.forEach(fn => fn());
|
|
76
|
+
}
|
|
77
|
+
/** Subscribe to changes on a specific path */
|
|
78
|
+
subscribe(path, fn) {
|
|
79
|
+
if (!this.subscribers.has(path)) {
|
|
80
|
+
this.subscribers.set(path, new Set());
|
|
81
|
+
}
|
|
82
|
+
const subs = this.subscribers.get(path);
|
|
83
|
+
subs?.add(fn);
|
|
84
|
+
return () => this.subscribers.get(path)?.delete(fn);
|
|
85
|
+
}
|
|
86
|
+
/** Subscribe to any state change */
|
|
87
|
+
subscribeAll(fn) {
|
|
88
|
+
this.globalSubscribers.add(fn);
|
|
89
|
+
return () => this.globalSubscribers.delete(fn);
|
|
90
|
+
}
|
|
91
|
+
notify(path) {
|
|
92
|
+
// Notify exact key and any parent paths
|
|
93
|
+
const parts = path.split('.');
|
|
94
|
+
for (let i = 1; i <= parts.length; i++) {
|
|
95
|
+
const prefix = parts.slice(0, i).join('.');
|
|
96
|
+
const subs = this.subscribers.get(prefix);
|
|
97
|
+
if (subs)
|
|
98
|
+
subs.forEach(fn => fn());
|
|
99
|
+
}
|
|
100
|
+
this.globalSubscribers.forEach(fn => fn());
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// ── Path utilities ───────────────────────────────────────────────────────────
|
|
104
|
+
function resolvePath(obj, path) {
|
|
105
|
+
const parts = path.split('.');
|
|
106
|
+
let current = obj;
|
|
107
|
+
for (const part of parts) {
|
|
108
|
+
if (current == null || typeof current !== 'object')
|
|
109
|
+
return undefined;
|
|
110
|
+
current = current[part];
|
|
111
|
+
}
|
|
112
|
+
return current;
|
|
113
|
+
}
|
|
114
|
+
/** Keys that must never be traversed in state paths. */
|
|
115
|
+
const BLOCKED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
116
|
+
function setPath(obj, path, value) {
|
|
117
|
+
const parts = path.split('.');
|
|
118
|
+
if (parts.some(p => BLOCKED_KEYS.has(p))) {
|
|
119
|
+
console.warn(`[prefab] Blocked prototype pollution attempt: ${path}`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
let current = obj;
|
|
123
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
124
|
+
const key = parts[i];
|
|
125
|
+
if (current[key] == null || typeof current[key] !== 'object') {
|
|
126
|
+
current[key] = {};
|
|
127
|
+
}
|
|
128
|
+
current = current[key];
|
|
129
|
+
}
|
|
130
|
+
current[parts[parts.length - 1]] = value;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/renderer/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme application — CSS custom properties from theme field.
|
|
3
|
+
*/
|
|
4
|
+
export interface ThemeConfig {
|
|
5
|
+
light?: Record<string, string>;
|
|
6
|
+
dark?: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
export declare function applyTheme(root: HTMLElement, theme?: ThemeConfig): void;
|
|
9
|
+
/**
|
|
10
|
+
* Apply keyboard shortcuts.
|
|
11
|
+
*/
|
|
12
|
+
export declare function applyKeyBindings(bindings: Record<string, unknown> | undefined, dispatch: (actions: unknown) => Promise<void>): (() => void) | undefined;
|
|
13
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/renderer/theme.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAiBD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAuBvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAC5C,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAc1B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme application — CSS custom properties from theme field.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Apply theme CSS custom properties to the root element.
|
|
6
|
+
* Light theme props go on :root, dark on [data-theme="dark"].
|
|
7
|
+
*/
|
|
8
|
+
/** Strip characters that could break out of a CSS property name. */
|
|
9
|
+
function sanitizeCssIdent(key) {
|
|
10
|
+
return key.replace(/[^a-zA-Z0-9_-]/g, '');
|
|
11
|
+
}
|
|
12
|
+
/** Strip characters/patterns that could escape CSS value context. */
|
|
13
|
+
function sanitizeCssValue(value) {
|
|
14
|
+
// Remove braces, semicolons, url()/expression() to prevent injection
|
|
15
|
+
return value.replace(/[{}<>;]/g, '').replace(/\b(url|expression)\s*\(/gi, '');
|
|
16
|
+
}
|
|
17
|
+
export function applyTheme(root, theme) {
|
|
18
|
+
if (!theme)
|
|
19
|
+
return;
|
|
20
|
+
if (theme.light) {
|
|
21
|
+
for (const [key, value] of Object.entries(theme.light)) {
|
|
22
|
+
root.style.setProperty(`--${sanitizeCssIdent(key)}`, sanitizeCssValue(value));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (theme.dark) {
|
|
26
|
+
// Create a style element for dark mode
|
|
27
|
+
const styleId = 'prefab-dark-theme';
|
|
28
|
+
let styleEl = document.getElementById(styleId);
|
|
29
|
+
if (!styleEl) {
|
|
30
|
+
styleEl = document.createElement('style');
|
|
31
|
+
styleEl.id = styleId;
|
|
32
|
+
document.head.appendChild(styleEl);
|
|
33
|
+
}
|
|
34
|
+
const props = Object.entries(theme.dark)
|
|
35
|
+
.map(([key, value]) => ` --${sanitizeCssIdent(key)}: ${sanitizeCssValue(value)};`)
|
|
36
|
+
.join('\n');
|
|
37
|
+
styleEl.textContent = `@media (prefers-color-scheme: dark) {\n :root {\n${props}\n }\n}`;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Apply keyboard shortcuts.
|
|
42
|
+
*/
|
|
43
|
+
export function applyKeyBindings(bindings, dispatch) {
|
|
44
|
+
if (!bindings || typeof document === 'undefined')
|
|
45
|
+
return undefined;
|
|
46
|
+
const handler = (e) => {
|
|
47
|
+
for (const [combo, actions] of Object.entries(bindings)) {
|
|
48
|
+
if (matchCombo(combo, e)) {
|
|
49
|
+
e.preventDefault();
|
|
50
|
+
void dispatch(actions);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
document.addEventListener('keydown', handler);
|
|
55
|
+
return () => document.removeEventListener('keydown', handler);
|
|
56
|
+
}
|
|
57
|
+
function matchCombo(combo, e) {
|
|
58
|
+
const parts = combo.toLowerCase().split('+').map(s => s.trim());
|
|
59
|
+
const key = parts[parts.length - 1];
|
|
60
|
+
const mods = new Set(parts.slice(0, -1));
|
|
61
|
+
if (mods.has('ctrl') !== (e.ctrlKey || e.metaKey))
|
|
62
|
+
return false;
|
|
63
|
+
if (mods.has('shift') !== e.shiftKey)
|
|
64
|
+
return false;
|
|
65
|
+
if (mods.has('alt') !== e.altKey)
|
|
66
|
+
return false;
|
|
67
|
+
return e.key.toLowerCase() === key;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/renderer/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default MCP transport — sends tool calls via HTTP POST.
|
|
3
|
+
*/
|
|
4
|
+
import type { McpTransport } from './actions.js';
|
|
5
|
+
export interface McpTransportOptions {
|
|
6
|
+
/** Base URL for the MCP endpoint. Defaults to window location origin. */
|
|
7
|
+
baseUrl?: string;
|
|
8
|
+
/** Custom headers for MCP requests. */
|
|
9
|
+
headers?: Record<string, string>;
|
|
10
|
+
/** Custom fetch function (for testing). */
|
|
11
|
+
fetch?: typeof globalThis.fetch;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Create an HTTP-based MCP transport.
|
|
15
|
+
*
|
|
16
|
+
* Sends tool calls as POST to `{baseUrl}/mcp/tools/call` with the
|
|
17
|
+
* standard MCP JSON-RPC format.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createHttpTransport(opts?: McpTransportOptions): McpTransport;
|
|
20
|
+
/** No-op transport for standalone rendering without MCP. */
|
|
21
|
+
export declare function createNoopTransport(): McpTransport;
|
|
22
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/renderer/transport.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAiBhD,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAgD5E;AAED,4DAA4D;AAC5D,wBAAgB,mBAAmB,IAAI,YAAY,CAWlD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default MCP transport — sends tool calls via HTTP POST.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Create an HTTP-based MCP transport.
|
|
6
|
+
*
|
|
7
|
+
* Sends tool calls as POST to `{baseUrl}/mcp/tools/call` with the
|
|
8
|
+
* standard MCP JSON-RPC format.
|
|
9
|
+
*/
|
|
10
|
+
export function createHttpTransport(opts) {
|
|
11
|
+
const baseUrl = opts?.baseUrl ?? (typeof window !== 'undefined' ? window.location.origin : '');
|
|
12
|
+
const headers = { 'Content-Type': 'application/json', ...opts?.headers };
|
|
13
|
+
const fetchFn = opts?.fetch ?? globalThis.fetch.bind(globalThis);
|
|
14
|
+
return {
|
|
15
|
+
async callTool(name, args) {
|
|
16
|
+
const response = await fetchFn(`${baseUrl}/mcp/tools/call`, {
|
|
17
|
+
method: 'POST',
|
|
18
|
+
headers,
|
|
19
|
+
body: JSON.stringify({
|
|
20
|
+
jsonrpc: '2.0',
|
|
21
|
+
method: 'tools/call',
|
|
22
|
+
params: { name, arguments: args },
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
if (!response.ok) {
|
|
26
|
+
throw new Error(`MCP tool call failed: ${response.status} ${response.statusText}`);
|
|
27
|
+
}
|
|
28
|
+
const result = await response.json();
|
|
29
|
+
if (result.error) {
|
|
30
|
+
throw new Error(result.error.message ?? 'MCP tool call returned error');
|
|
31
|
+
}
|
|
32
|
+
// Parse prefab content from result
|
|
33
|
+
const content = result.result?.content ?? result.content ?? [];
|
|
34
|
+
for (const block of content) {
|
|
35
|
+
if (block.type === 'text' && block.text !== undefined) {
|
|
36
|
+
try {
|
|
37
|
+
const parsed = JSON.parse(block.text);
|
|
38
|
+
if (typeof parsed === 'object' && parsed !== null && '$prefab' in parsed)
|
|
39
|
+
return parsed;
|
|
40
|
+
}
|
|
41
|
+
catch { /* not JSON, that's ok */ }
|
|
42
|
+
return block.text;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result.result ?? result;
|
|
46
|
+
},
|
|
47
|
+
async sendMessage(message) {
|
|
48
|
+
await fetchFn(`${baseUrl}/mcp/messages`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers,
|
|
51
|
+
body: JSON.stringify({ message }),
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** No-op transport for standalone rendering without MCP. */
|
|
57
|
+
export function createNoopTransport() {
|
|
58
|
+
return {
|
|
59
|
+
callTool(name) {
|
|
60
|
+
console.warn(`[prefab] No MCP transport: callTool('${name}') ignored`);
|
|
61
|
+
return Promise.resolve(null);
|
|
62
|
+
},
|
|
63
|
+
sendMessage(message) {
|
|
64
|
+
console.warn(`[prefab] No MCP transport: sendMessage ignored`, message);
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/renderer/transport.ts"],"names":[],"mappings":"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"}
|