@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.
Files changed (217) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/LICENSE +21 -0
  3. package/README.md +340 -0
  4. package/dist/actions/client.d.ts +98 -0
  5. package/dist/actions/client.d.ts.map +1 -0
  6. package/dist/actions/client.js +188 -0
  7. package/dist/actions/client.js.map +1 -0
  8. package/dist/actions/index.d.ts +6 -0
  9. package/dist/actions/index.d.ts.map +1 -0
  10. package/dist/actions/index.js +3 -0
  11. package/dist/actions/index.js.map +1 -0
  12. package/dist/actions/mcp.d.ts +37 -0
  13. package/dist/actions/mcp.d.ts.map +1 -0
  14. package/dist/actions/mcp.js +64 -0
  15. package/dist/actions/mcp.js.map +1 -0
  16. package/dist/actions/types.d.ts +16 -0
  17. package/dist/actions/types.d.ts.map +1 -0
  18. package/dist/actions/types.js +8 -0
  19. package/dist/actions/types.js.map +1 -0
  20. package/dist/app.d.ts +65 -0
  21. package/dist/app.d.ts.map +1 -0
  22. package/dist/app.js +120 -0
  23. package/dist/app.js.map +1 -0
  24. package/dist/auto/chart.d.ts +36 -0
  25. package/dist/auto/chart.d.ts.map +1 -0
  26. package/dist/auto/chart.js +50 -0
  27. package/dist/auto/chart.js.map +1 -0
  28. package/dist/auto/comparison.d.ts +32 -0
  29. package/dist/auto/comparison.d.ts.map +1 -0
  30. package/dist/auto/comparison.js +66 -0
  31. package/dist/auto/comparison.js.map +1 -0
  32. package/dist/auto/form.d.ts +50 -0
  33. package/dist/auto/form.d.ts.map +1 -0
  34. package/dist/auto/form.js +68 -0
  35. package/dist/auto/form.js.map +1 -0
  36. package/dist/auto/index.d.ts +84 -0
  37. package/dist/auto/index.d.ts.map +1 -0
  38. package/dist/auto/index.js +240 -0
  39. package/dist/auto/index.js.map +1 -0
  40. package/dist/auto/metrics.d.ts +44 -0
  41. package/dist/auto/metrics.d.ts.map +1 -0
  42. package/dist/auto/metrics.js +55 -0
  43. package/dist/auto/metrics.js.map +1 -0
  44. package/dist/auto/progress.d.ts +38 -0
  45. package/dist/auto/progress.d.ts.map +1 -0
  46. package/dist/auto/progress.js +72 -0
  47. package/dist/auto/progress.js.map +1 -0
  48. package/dist/auto/timeline.d.ts +41 -0
  49. package/dist/auto/timeline.d.ts.map +1 -0
  50. package/dist/auto/timeline.js +72 -0
  51. package/dist/auto/timeline.js.map +1 -0
  52. package/dist/components/alert/index.d.ts +14 -0
  53. package/dist/components/alert/index.d.ts.map +1 -0
  54. package/dist/components/alert/index.js +31 -0
  55. package/dist/components/alert/index.js.map +1 -0
  56. package/dist/components/card/index.d.ts +12 -0
  57. package/dist/components/card/index.d.ts.map +1 -0
  58. package/dist/components/card/index.js +33 -0
  59. package/dist/components/card/index.js.map +1 -0
  60. package/dist/components/charts/index.d.ts +57 -0
  61. package/dist/components/charts/index.d.ts.map +1 -0
  62. package/dist/components/charts/index.js +91 -0
  63. package/dist/components/charts/index.js.map +1 -0
  64. package/dist/components/control/index.d.ts +48 -0
  65. package/dist/components/control/index.d.ts.map +1 -0
  66. package/dist/components/control/index.js +47 -0
  67. package/dist/components/control/index.js.map +1 -0
  68. package/dist/components/data/index.d.ts +53 -0
  69. package/dist/components/data/index.d.ts.map +1 -0
  70. package/dist/components/data/index.js +88 -0
  71. package/dist/components/data/index.js.map +1 -0
  72. package/dist/components/form/index.d.ts +103 -0
  73. package/dist/components/form/index.d.ts.map +1 -0
  74. package/dist/components/form/index.js +247 -0
  75. package/dist/components/form/index.js.map +1 -0
  76. package/dist/components/interactive/index.d.ts +33 -0
  77. package/dist/components/interactive/index.d.ts.map +1 -0
  78. package/dist/components/interactive/index.js +59 -0
  79. package/dist/components/interactive/index.js.map +1 -0
  80. package/dist/components/layout/index.d.ts +61 -0
  81. package/dist/components/layout/index.d.ts.map +1 -0
  82. package/dist/components/layout/index.js +86 -0
  83. package/dist/components/layout/index.js.map +1 -0
  84. package/dist/components/media/index.d.ts +17 -0
  85. package/dist/components/media/index.d.ts.map +1 -0
  86. package/dist/components/media/index.js +41 -0
  87. package/dist/components/media/index.js.map +1 -0
  88. package/dist/components/table/index.d.ts +28 -0
  89. package/dist/components/table/index.d.ts.map +1 -0
  90. package/dist/components/table/index.js +56 -0
  91. package/dist/components/table/index.js.map +1 -0
  92. package/dist/components/typography/index.d.ts +34 -0
  93. package/dist/components/typography/index.d.ts.map +1 -0
  94. package/dist/components/typography/index.js +93 -0
  95. package/dist/components/typography/index.js.map +1 -0
  96. package/dist/core/component.d.ts +67 -0
  97. package/dist/core/component.d.ts.map +1 -0
  98. package/dist/core/component.js +122 -0
  99. package/dist/core/component.js.map +1 -0
  100. package/dist/core/index.d.ts +5 -0
  101. package/dist/core/index.d.ts.map +1 -0
  102. package/dist/core/index.js +3 -0
  103. package/dist/core/index.js.map +1 -0
  104. package/dist/core/validate.d.ts +30 -0
  105. package/dist/core/validate.d.ts.map +1 -0
  106. package/dist/core/validate.js +178 -0
  107. package/dist/core/validate.js.map +1 -0
  108. package/dist/index.d.ts +48 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +48 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/mcp/display.d.ts +102 -0
  113. package/dist/mcp/display.d.ts.map +1 -0
  114. package/dist/mcp/display.js +124 -0
  115. package/dist/mcp/display.js.map +1 -0
  116. package/dist/mcp/index.d.ts +7 -0
  117. package/dist/mcp/index.d.ts.map +1 -0
  118. package/dist/mcp/index.js +5 -0
  119. package/dist/mcp/index.js.map +1 -0
  120. package/dist/mcp/types.d.ts +35 -0
  121. package/dist/mcp/types.d.ts.map +1 -0
  122. package/dist/mcp/types.js +8 -0
  123. package/dist/mcp/types.js.map +1 -0
  124. package/dist/renderer/actions.d.ts +36 -0
  125. package/dist/renderer/actions.d.ts.map +1 -0
  126. package/dist/renderer/actions.js +296 -0
  127. package/dist/renderer/actions.js.map +1 -0
  128. package/dist/renderer/app.d.ts +87 -0
  129. package/dist/renderer/app.d.ts.map +1 -0
  130. package/dist/renderer/app.js +166 -0
  131. package/dist/renderer/app.js.map +1 -0
  132. package/dist/renderer/bridge.d.ts +91 -0
  133. package/dist/renderer/bridge.d.ts.map +1 -0
  134. package/dist/renderer/bridge.js +302 -0
  135. package/dist/renderer/bridge.js.map +1 -0
  136. package/dist/renderer/components/alert.d.ts +5 -0
  137. package/dist/renderer/components/alert.d.ts.map +1 -0
  138. package/dist/renderer/components/alert.js +44 -0
  139. package/dist/renderer/components/alert.js.map +1 -0
  140. package/dist/renderer/components/card.d.ts +5 -0
  141. package/dist/renderer/components/card.d.ts.map +1 -0
  142. package/dist/renderer/components/card.js +38 -0
  143. package/dist/renderer/components/card.js.map +1 -0
  144. package/dist/renderer/components/charts.d.ts +8 -0
  145. package/dist/renderer/components/charts.d.ts.map +1 -0
  146. package/dist/renderer/components/charts.js +232 -0
  147. package/dist/renderer/components/charts.js.map +1 -0
  148. package/dist/renderer/components/control.d.ts +5 -0
  149. package/dist/renderer/components/control.d.ts.map +1 -0
  150. package/dist/renderer/components/control.js +140 -0
  151. package/dist/renderer/components/control.js.map +1 -0
  152. package/dist/renderer/components/data.d.ts +5 -0
  153. package/dist/renderer/components/data.d.ts.map +1 -0
  154. package/dist/renderer/components/data.js +268 -0
  155. package/dist/renderer/components/data.js.map +1 -0
  156. package/dist/renderer/components/form.d.ts +5 -0
  157. package/dist/renderer/components/form.d.ts.map +1 -0
  158. package/dist/renderer/components/form.js +523 -0
  159. package/dist/renderer/components/form.js.map +1 -0
  160. package/dist/renderer/components/index.d.ts +5 -0
  161. package/dist/renderer/components/index.d.ts.map +1 -0
  162. package/dist/renderer/components/index.js +32 -0
  163. package/dist/renderer/components/index.js.map +1 -0
  164. package/dist/renderer/components/interactive.d.ts +5 -0
  165. package/dist/renderer/components/interactive.d.ts.map +1 -0
  166. package/dist/renderer/components/interactive.js +324 -0
  167. package/dist/renderer/components/interactive.js.map +1 -0
  168. package/dist/renderer/components/layout.d.ts +5 -0
  169. package/dist/renderer/components/layout.d.ts.map +1 -0
  170. package/dist/renderer/components/layout.js +113 -0
  171. package/dist/renderer/components/layout.js.map +1 -0
  172. package/dist/renderer/components/media.d.ts +5 -0
  173. package/dist/renderer/components/media.d.ts.map +1 -0
  174. package/dist/renderer/components/media.js +132 -0
  175. package/dist/renderer/components/media.js.map +1 -0
  176. package/dist/renderer/components/table.d.ts +5 -0
  177. package/dist/renderer/components/table.d.ts.map +1 -0
  178. package/dist/renderer/components/table.js +101 -0
  179. package/dist/renderer/components/table.js.map +1 -0
  180. package/dist/renderer/components/typography.d.ts +5 -0
  181. package/dist/renderer/components/typography.d.ts.map +1 -0
  182. package/dist/renderer/components/typography.js +90 -0
  183. package/dist/renderer/components/typography.js.map +1 -0
  184. package/dist/renderer/engine.d.ts +53 -0
  185. package/dist/renderer/engine.d.ts.map +1 -0
  186. package/dist/renderer/engine.js +112 -0
  187. package/dist/renderer/engine.js.map +1 -0
  188. package/dist/renderer/index.d.ts +94 -0
  189. package/dist/renderer/index.d.ts.map +1 -0
  190. package/dist/renderer/index.js +215 -0
  191. package/dist/renderer/index.js.map +1 -0
  192. package/dist/renderer/rx.d.ts +37 -0
  193. package/dist/renderer/rx.d.ts.map +1 -0
  194. package/dist/renderer/rx.js +360 -0
  195. package/dist/renderer/rx.js.map +1 -0
  196. package/dist/renderer/state.d.ts +34 -0
  197. package/dist/renderer/state.d.ts.map +1 -0
  198. package/dist/renderer/state.js +132 -0
  199. package/dist/renderer/state.js.map +1 -0
  200. package/dist/renderer/theme.d.ts +13 -0
  201. package/dist/renderer/theme.d.ts.map +1 -0
  202. package/dist/renderer/theme.js +69 -0
  203. package/dist/renderer/theme.js.map +1 -0
  204. package/dist/renderer/transport.d.ts +22 -0
  205. package/dist/renderer/transport.d.ts.map +1 -0
  206. package/dist/renderer/transport.js +69 -0
  207. package/dist/renderer/transport.js.map +1 -0
  208. package/dist/renderer.min.js +83 -0
  209. package/dist/rx/index.d.ts +2 -0
  210. package/dist/rx/index.d.ts.map +1 -0
  211. package/dist/rx/index.js +2 -0
  212. package/dist/rx/index.js.map +1 -0
  213. package/dist/rx/rx.d.ts +81 -0
  214. package/dist/rx/rx.d.ts.map +1 -0
  215. package/dist/rx/rx.js +196 -0
  216. package/dist/rx/rx.js.map +1 -0
  217. package/package.json +84 -0
@@ -0,0 +1,215 @@
1
+ /**
2
+ * PrefabRenderer — Main entry point for the browser renderer.
3
+ *
4
+ * Usage (CDN — new API):
5
+ * ```html
6
+ * <script src="https://cdn.jsdelivr.net/npm/@maxhealth.tech/prefab/dist/renderer.min.js"></script>
7
+ * <script>
8
+ * const ui = await prefab.app();
9
+ * ui.onToolInput((args) => {
10
+ * ui.render('#root', chart({ data: args.data }));
11
+ * });
12
+ * </script>
13
+ * ```
14
+ *
15
+ * Usage (CDN — legacy):
16
+ * ```html
17
+ * <script src="https://cdn.jsdelivr.net/npm/@maxhealth.tech/prefab/dist/renderer.min.js"></script>
18
+ * <script>
19
+ * PrefabRenderer.mount(document.getElementById('root'), data);
20
+ * </script>
21
+ * ```
22
+ *
23
+ * Or as ESM:
24
+ * ```ts
25
+ * import { PrefabRenderer, app } from '@maxhealth.tech/prefab/renderer'
26
+ * const ui = await app()
27
+ * ```
28
+ */
29
+ import { Store } from './state.js';
30
+ import { renderNode } from './engine.js';
31
+ import { registerAllComponents } from './components/index.js';
32
+ import { applyTheme, applyKeyBindings } from './theme.js';
33
+ import { dispatchActions, clearAllIntervals } from './actions.js';
34
+ import { createHttpTransport, createNoopTransport } from './transport.js';
35
+ import { app } from './app.js';
36
+ import { Bridge, isIframe } from './bridge.js';
37
+ // Re-export new APIs
38
+ export { app } from './app.js';
39
+ export { Bridge, isIframe, applyHostTheme } from './bridge.js';
40
+ // ── PrefabRenderer ───────────────────────────────────────────────────────────
41
+ export const PrefabRenderer = {
42
+ /**
43
+ * Mount a prefab UI into a DOM element.
44
+ *
45
+ * @param root - The DOM element to render into.
46
+ * @param data - The $prefab wire format JSON.
47
+ * @param options - Optional transport and toast handler.
48
+ * @returns A MountedApp handle for updates and cleanup.
49
+ */
50
+ mount(root, data, options) {
51
+ // Register all built-in components (idempotent)
52
+ registerAllComponents();
53
+ // Initialize state store
54
+ const store = new Store(data.state);
55
+ // Set up transport
56
+ let transport;
57
+ if (options?.transport && 'callTool' in options.transport) {
58
+ transport = options.transport;
59
+ }
60
+ else if (options?.transport) {
61
+ transport = createHttpTransport(options.transport);
62
+ }
63
+ else {
64
+ transport = createNoopTransport();
65
+ }
66
+ // Toast handler with fallback
67
+ const onToast = options?.onToast ?? defaultToastHandler;
68
+ // Build render context
69
+ const ctx = {
70
+ store,
71
+ scope: {},
72
+ transport,
73
+ rerender: () => render(),
74
+ onToast,
75
+ defs: data.defs,
76
+ };
77
+ // Apply theme
78
+ applyTheme(root, data.theme);
79
+ // Inject stylesheets
80
+ const styleEls = [];
81
+ if (data.stylesheets) {
82
+ for (const css of data.stylesheets) {
83
+ const style = document.createElement('style');
84
+ style.textContent = css;
85
+ style.dataset.prefab = 'injected';
86
+ document.head.appendChild(style);
87
+ styleEls.push(style);
88
+ }
89
+ }
90
+ // Keyboard bindings
91
+ let cleanupKeys;
92
+ if (data.keyBindings) {
93
+ cleanupKeys = applyKeyBindings(data.keyBindings, async (actions) => {
94
+ await dispatchActions(actions, {
95
+ store,
96
+ transport,
97
+ scope: {},
98
+ rerender: () => render(),
99
+ onToast,
100
+ });
101
+ });
102
+ }
103
+ // Render function
104
+ function render() {
105
+ root.innerHTML = '';
106
+ const dom = renderNode(data.view, ctx);
107
+ root.appendChild(dom);
108
+ }
109
+ // Initial render
110
+ render();
111
+ // Run onMount from the view root (if present)
112
+ // Already handled by renderNode via queueMicrotask
113
+ return {
114
+ rerender: () => render(),
115
+ update(updateData) {
116
+ store.merge(updateData.update.state);
117
+ render();
118
+ },
119
+ store,
120
+ destroy() {
121
+ cleanupKeys?.();
122
+ clearAllIntervals();
123
+ for (const s of styleEls)
124
+ s.remove();
125
+ root.innerHTML = '';
126
+ },
127
+ };
128
+ },
129
+ /**
130
+ * Check if data is a prefab wire format.
131
+ */
132
+ isPrefabData(data) {
133
+ return data != null && typeof data === 'object' && '$prefab' in data;
134
+ },
135
+ /**
136
+ * Check if data is a prefab state update.
137
+ */
138
+ isPrefabUpdate(data) {
139
+ return (data != null &&
140
+ typeof data === 'object' &&
141
+ '$prefab' in data &&
142
+ 'update' in data);
143
+ },
144
+ };
145
+ // ── Default toast ────────────────────────────────────────────────────────────
146
+ function defaultToastHandler(toast) {
147
+ if (typeof document === 'undefined')
148
+ return;
149
+ const container = getOrCreateToastContainer();
150
+ const toastEl = document.createElement('div');
151
+ toastEl.className = 'pf-toast';
152
+ toastEl.setAttribute('data-variant', toast.variant ?? 'default');
153
+ toastEl.style.padding = '12px 16px';
154
+ toastEl.style.borderRadius = '8px';
155
+ toastEl.style.backgroundColor = 'var(--card, #fff)';
156
+ toastEl.style.border = '1px solid var(--border, #e5e7eb)';
157
+ toastEl.style.boxShadow = '0 4px 12px rgb(0 0 0 / 0.15)';
158
+ toastEl.style.marginBottom = '8px';
159
+ toastEl.style.transition = 'opacity 0.3s ease';
160
+ const msg = document.createElement('div');
161
+ msg.textContent = toast.message;
162
+ msg.style.fontWeight = '500';
163
+ toastEl.appendChild(msg);
164
+ if (toast.description) {
165
+ const desc = document.createElement('div');
166
+ desc.textContent = toast.description;
167
+ desc.style.fontSize = '14px';
168
+ desc.style.color = 'var(--muted-foreground, #6b7280)';
169
+ toastEl.appendChild(desc);
170
+ }
171
+ container.appendChild(toastEl);
172
+ const duration = toast.duration ?? 4000;
173
+ setTimeout(() => {
174
+ toastEl.style.opacity = '0';
175
+ setTimeout(() => toastEl.remove(), 300);
176
+ }, duration);
177
+ }
178
+ function getOrCreateToastContainer() {
179
+ const id = 'prefab-toast-container';
180
+ let container = document.getElementById(id);
181
+ if (!container) {
182
+ container = document.createElement('div');
183
+ container.id = id;
184
+ container.style.position = 'fixed';
185
+ container.style.bottom = '16px';
186
+ container.style.right = '16px';
187
+ container.style.zIndex = '9999';
188
+ container.style.maxWidth = '400px';
189
+ document.body.appendChild(container);
190
+ }
191
+ return container;
192
+ }
193
+ // ── Auto-mount from window.__PREFAB_DATA__ ───────────────────────────────────
194
+ if (typeof window !== 'undefined') {
195
+ // Expose as window.PrefabRenderer (legacy) and window.prefab (new API)
196
+ const w = window;
197
+ w.PrefabRenderer = PrefabRenderer;
198
+ w.prefab = {
199
+ app,
200
+ mount: PrefabRenderer.mount.bind(PrefabRenderer),
201
+ isPrefabData: PrefabRenderer.isPrefabData.bind(PrefabRenderer),
202
+ isPrefabUpdate: PrefabRenderer.isPrefabUpdate.bind(PrefabRenderer),
203
+ Bridge,
204
+ isIframe,
205
+ };
206
+ // Auto-mount if data is available
207
+ const prefabData = w.__PREFAB_DATA__;
208
+ if (prefabData != null) {
209
+ const root = document.getElementById('prefab-root');
210
+ if (root) {
211
+ PrefabRenderer.mount(root, prefabData);
212
+ }
213
+ }
214
+ }
215
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Rx expression evaluator — parse and evaluate {{ expr }} at runtime.
3
+ *
4
+ * Handles:
5
+ * - State references: {{ count }}, {{ user.name }}
6
+ * - Arithmetic: {{ count + 1 }}, {{ price * quantity }}
7
+ * - Comparisons: {{ count > 0 }}, {{ status === 'active' }}
8
+ * - Ternary: {{ active ? 'Yes' : 'No' }}
9
+ * - Logical: {{ a && b }}, {{ !loading }}
10
+ * - Pipe filters: {{ price | currency:'USD' }}, {{ name | upper }}
11
+ * - Built-in vars: $item, $index, $event, $error, $result, $state
12
+ */
13
+ import type { Store } from './state.js';
14
+ /** Scope for expression evaluation (loop variables, event data, etc.) */
15
+ export interface EvalScope {
16
+ $item?: unknown;
17
+ $index?: number;
18
+ $event?: unknown;
19
+ $error?: unknown;
20
+ $result?: unknown;
21
+ [key: string]: unknown;
22
+ }
23
+ /**
24
+ * Check if a string contains {{ }} expressions.
25
+ */
26
+ export declare function isRxExpression(value: unknown): value is string;
27
+ /**
28
+ * Evaluate a string that may contain {{ expr }} templates.
29
+ * If the entire string is a single {{ expr }}, returns the raw value (not stringified).
30
+ * If mixed with text, interpolates as string.
31
+ */
32
+ export declare function evaluateTemplate(template: string, store: Store, scope?: EvalScope): unknown;
33
+ /**
34
+ * Evaluate a raw expression string (without {{ }}).
35
+ */
36
+ export declare function evaluateExpression(expr: string, store: Store, scope?: EvalScope): unknown;
37
+ //# sourceMappingURL=rx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../../src/renderer/rx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAID;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAaT;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAYT"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Rx expression evaluator — parse and evaluate {{ expr }} at runtime.
3
+ *
4
+ * Handles:
5
+ * - State references: {{ count }}, {{ user.name }}
6
+ * - Arithmetic: {{ count + 1 }}, {{ price * quantity }}
7
+ * - Comparisons: {{ count > 0 }}, {{ status === 'active' }}
8
+ * - Ternary: {{ active ? 'Yes' : 'No' }}
9
+ * - Logical: {{ a && b }}, {{ !loading }}
10
+ * - Pipe filters: {{ price | currency:'USD' }}, {{ name | upper }}
11
+ * - Built-in vars: $item, $index, $event, $error, $result, $state
12
+ */
13
+ const RX_PATTERN = /\{\{\s*(.+?)\s*\}\}/g;
14
+ /**
15
+ * Check if a string contains {{ }} expressions.
16
+ */
17
+ export function isRxExpression(value) {
18
+ return typeof value === 'string' && value.includes('{{') && value.includes('}}');
19
+ }
20
+ /**
21
+ * Evaluate a string that may contain {{ expr }} templates.
22
+ * If the entire string is a single {{ expr }}, returns the raw value (not stringified).
23
+ * If mixed with text, interpolates as string.
24
+ */
25
+ export function evaluateTemplate(template, store, scope) {
26
+ // Fast path: entire string is a single expression
27
+ const trimmed = template.trim();
28
+ if (trimmed.startsWith('{{') && trimmed.endsWith('}}') && countOccurrences(trimmed, '{{') === 1) {
29
+ const expr = trimmed.slice(2, -2).trim();
30
+ return evaluateExpression(expr, store, scope);
31
+ }
32
+ // Mixed template: interpolate all {{ }} blocks as strings
33
+ return template.replace(RX_PATTERN, (_, expr) => {
34
+ const val = evaluateExpression(expr.trim(), store, scope);
35
+ return val == null ? '' : String(val);
36
+ });
37
+ }
38
+ /**
39
+ * Evaluate a raw expression string (without {{ }}).
40
+ */
41
+ export function evaluateExpression(expr, store, scope) {
42
+ // Handle pipe filters: split on | that's not inside quotes
43
+ const [baseExpr, ...pipes] = splitPipes(expr);
44
+ let value = evaluateCore(baseExpr.trim(), store, scope);
45
+ // Apply pipe filters
46
+ for (const pipe of pipes) {
47
+ value = applyFilter(pipe.trim(), value);
48
+ }
49
+ return value;
50
+ }
51
+ // ── Core expression evaluator ────────────────────────────────────────────────
52
+ function evaluateCore(expr, store, scope) {
53
+ // Ternary: a ? b : c
54
+ const ternaryIdx = findTernary(expr);
55
+ if (ternaryIdx >= 0) {
56
+ const condition = expr.slice(0, ternaryIdx).trim();
57
+ const rest = expr.slice(ternaryIdx + 1);
58
+ const colonIdx = findColon(rest);
59
+ if (colonIdx >= 0) {
60
+ const ifTrue = rest.slice(0, colonIdx).trim();
61
+ const ifFalse = rest.slice(colonIdx + 1).trim();
62
+ const condResult = evaluateCore(condition, store, scope);
63
+ return condResult !== null && condResult !== undefined && condResult !== false && condResult !== 0 && condResult !== ''
64
+ ? evaluateCore(ifTrue, store, scope)
65
+ : evaluateCore(ifFalse, store, scope);
66
+ }
67
+ }
68
+ // Logical OR: a || b
69
+ const orIdx = expr.indexOf('||');
70
+ if (orIdx >= 0) {
71
+ const left = evaluateCore(expr.slice(0, orIdx).trim(), store, scope);
72
+ return left !== null && left !== undefined && left !== false && left !== 0 && left !== ''
73
+ ? left
74
+ : evaluateCore(expr.slice(orIdx + 2).trim(), store, scope);
75
+ }
76
+ // Logical AND: a && b
77
+ const andIdx = expr.indexOf('&&');
78
+ if (andIdx >= 0) {
79
+ const left = evaluateCore(expr.slice(0, andIdx).trim(), store, scope);
80
+ if (left === null || left === undefined || left === false || left === 0 || left === '')
81
+ return left;
82
+ return evaluateCore(expr.slice(andIdx + 2).trim(), store, scope);
83
+ }
84
+ // Comparisons
85
+ for (const [op, fn] of COMPARISONS) {
86
+ const idx = expr.indexOf(op);
87
+ if (idx >= 0) {
88
+ const left = evaluateCore(expr.slice(0, idx).trim(), store, scope);
89
+ const right = evaluateCore(expr.slice(idx + op.length).trim(), store, scope);
90
+ return fn(left, right);
91
+ }
92
+ }
93
+ // Negation: !expr
94
+ if (expr.startsWith('!')) {
95
+ const negResult = evaluateCore(expr.slice(1).trim(), store, scope);
96
+ return negResult === null || negResult === undefined || negResult === false || negResult === 0 || negResult === '';
97
+ }
98
+ // Arithmetic: +, -, *, /, %
99
+ for (const [op, fn] of ARITHMETIC) {
100
+ const idx = findArithOp(expr, op);
101
+ if (idx >= 0) {
102
+ const left = evaluateCore(expr.slice(0, idx).trim(), store, scope);
103
+ const right = evaluateCore(expr.slice(idx + op.length).trim(), store, scope);
104
+ return fn(Number(left), Number(right));
105
+ }
106
+ }
107
+ // Literal values
108
+ if (expr === 'true')
109
+ return true;
110
+ if (expr === 'false')
111
+ return false;
112
+ if (expr === 'null' || expr === 'undefined')
113
+ return null;
114
+ if (/^-?\d+(\.\d+)?$/.test(expr))
115
+ return Number(expr);
116
+ if ((expr.startsWith("'") && expr.endsWith("'")) || (expr.startsWith('"') && expr.endsWith('"'))) {
117
+ return expr.slice(1, -1);
118
+ }
119
+ // Scope variables ($item, $index, etc.)
120
+ if (scope && expr.startsWith('$')) {
121
+ const dotIdx = expr.indexOf('.');
122
+ if (dotIdx >= 0) {
123
+ const varName = expr.slice(0, dotIdx);
124
+ const rest = expr.slice(dotIdx + 1);
125
+ const base = scope[varName];
126
+ return resolveDeep(base, rest);
127
+ }
128
+ return scope[expr];
129
+ }
130
+ // State reference (dot-path)
131
+ if (scope) {
132
+ // Check scope first for overrides
133
+ const topKey = expr.split('.')[0];
134
+ if (topKey in scope) {
135
+ return resolveDeep(scope[topKey], expr.includes('.') ? expr.slice(topKey.length + 1) : '');
136
+ }
137
+ }
138
+ return store.get(expr);
139
+ }
140
+ // ── Pipe filters ─────────────────────────────────────────────────────────────
141
+ function applyFilter(filterStr, value) {
142
+ const colonIdx = filterStr.indexOf(':');
143
+ const name = colonIdx >= 0 ? filterStr.slice(0, colonIdx).trim() : filterStr;
144
+ const argStr = colonIdx >= 0 ? filterStr.slice(colonIdx + 1).trim() : undefined;
145
+ const arg = argStr ? parseLiteral(argStr) : undefined;
146
+ switch (name) {
147
+ case 'length':
148
+ return Array.isArray(value) ? value.length : typeof value === 'string' ? value.length : 0;
149
+ case 'upper':
150
+ return typeof value === 'string' ? value.toUpperCase() : value;
151
+ case 'lower':
152
+ return typeof value === 'string' ? value.toLowerCase() : value;
153
+ case 'truncate':
154
+ if (typeof value === 'string' && typeof arg === 'number')
155
+ return value.slice(0, arg);
156
+ return value;
157
+ case 'join':
158
+ return Array.isArray(value) ? value.join(typeof arg === 'string' ? arg : ', ') : value;
159
+ case 'first':
160
+ return Array.isArray(value) ? value[0] : value;
161
+ case 'last':
162
+ return Array.isArray(value) ? value[value.length - 1] : value;
163
+ case 'abs':
164
+ return Math.abs(Number(value));
165
+ case 'round':
166
+ return typeof arg === 'number' ? Number(Number(value).toFixed(arg)) : Math.round(Number(value));
167
+ case 'number':
168
+ return typeof arg === 'number' ? Number(Number(value).toFixed(arg)) : Number(value);
169
+ case 'currency': {
170
+ const code = typeof arg === 'string' ? arg : 'USD';
171
+ try {
172
+ return new Intl.NumberFormat('en-US', { style: 'currency', currency: code }).format(Number(value));
173
+ }
174
+ catch {
175
+ return value;
176
+ }
177
+ }
178
+ case 'percent':
179
+ return typeof arg === 'number'
180
+ ? `${(Number(value) * 100).toFixed(arg)}%`
181
+ : `${Math.round(Number(value) * 100)}%`;
182
+ case 'compact': {
183
+ const digits = typeof arg === 'number' ? arg : 1;
184
+ try {
185
+ return new Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: digits }).format(Number(value));
186
+ }
187
+ catch {
188
+ return value;
189
+ }
190
+ }
191
+ case 'date':
192
+ try {
193
+ return new Date(value).toLocaleDateString();
194
+ }
195
+ catch {
196
+ return value;
197
+ }
198
+ case 'time':
199
+ try {
200
+ return new Date(value).toLocaleTimeString();
201
+ }
202
+ catch {
203
+ return value;
204
+ }
205
+ case 'datetime':
206
+ try {
207
+ return new Date(value).toLocaleString();
208
+ }
209
+ catch {
210
+ return value;
211
+ }
212
+ case 'pluralize': {
213
+ const n = Number(value);
214
+ const word = typeof arg === 'string' ? arg : '';
215
+ return n === 1 ? word : `${word}s`;
216
+ }
217
+ case 'default':
218
+ return value == null || value === '' ? arg : value;
219
+ case 'selectattr':
220
+ return Array.isArray(value) && typeof arg === 'string'
221
+ ? value.filter(item => item != null && typeof item === 'object' && Boolean(item[arg]))
222
+ : value;
223
+ case 'rejectattr':
224
+ return Array.isArray(value) && typeof arg === 'string'
225
+ ? value.filter(item => {
226
+ if (item == null || typeof item !== 'object')
227
+ return false;
228
+ const attr = item[arg];
229
+ return attr == null || attr === false || attr === 0 || attr === '';
230
+ })
231
+ : value;
232
+ default:
233
+ return value;
234
+ }
235
+ }
236
+ // ── Helpers ──────────────────────────────────────────────────────────────────
237
+ const COMPARISONS = [
238
+ ['!==', (a, b) => a !== b],
239
+ ['===', (a, b) => a === b],
240
+ ['>=', (a, b) => Number(a) >= Number(b)],
241
+ ['<=', (a, b) => Number(a) <= Number(b)],
242
+ ['>', (a, b) => Number(a) > Number(b)],
243
+ ['<', (a, b) => Number(a) < Number(b)],
244
+ ];
245
+ const ARITHMETIC = [
246
+ [' + ', (a, b) => a + b],
247
+ [' - ', (a, b) => a - b],
248
+ [' * ', (a, b) => a * b],
249
+ [' / ', (a, b) => b !== 0 ? a / b : 0],
250
+ [' % ', (a, b) => a % b],
251
+ ];
252
+ function findArithOp(expr, op) {
253
+ // Find operator not inside quotes
254
+ let inQuote = null;
255
+ for (let i = 0; i < expr.length; i++) {
256
+ const ch = expr[i];
257
+ if (ch === "'" || ch === '"') {
258
+ inQuote = inQuote === ch ? null : (inQuote ?? ch);
259
+ }
260
+ if (!inQuote && expr.slice(i, i + op.length) === op)
261
+ return i;
262
+ }
263
+ return -1;
264
+ }
265
+ function findTernary(expr) {
266
+ let depth = 0;
267
+ let inQuote = null;
268
+ for (let i = 0; i < expr.length; i++) {
269
+ const ch = expr[i];
270
+ if (ch === "'" || ch === '"') {
271
+ inQuote = inQuote === ch ? null : (inQuote ?? ch);
272
+ }
273
+ if (!inQuote) {
274
+ if (ch === '(')
275
+ depth++;
276
+ else if (ch === ')')
277
+ depth--;
278
+ else if (ch === '?' && depth === 0)
279
+ return i;
280
+ }
281
+ }
282
+ return -1;
283
+ }
284
+ function findColon(expr) {
285
+ let depth = 0;
286
+ let inQuote = null;
287
+ for (let i = 0; i < expr.length; i++) {
288
+ const ch = expr[i];
289
+ if (ch === "'" || ch === '"') {
290
+ inQuote = inQuote === ch ? null : (inQuote ?? ch);
291
+ }
292
+ if (!inQuote) {
293
+ if (ch === '?' || ch === '(')
294
+ depth++;
295
+ else if (ch === ')')
296
+ depth--;
297
+ else if (ch === ':' && depth === 0)
298
+ return i;
299
+ }
300
+ }
301
+ return -1;
302
+ }
303
+ function splitPipes(expr) {
304
+ const parts = [];
305
+ let current = '';
306
+ let inQuote = null;
307
+ for (let i = 0; i < expr.length; i++) {
308
+ const ch = expr[i];
309
+ if (ch === "'" || ch === '"') {
310
+ inQuote = inQuote === ch ? null : (inQuote ?? ch);
311
+ }
312
+ if (ch === '|' && !inQuote) {
313
+ // Skip || (logical OR) — not a pipe
314
+ if (expr[i + 1] === '|') {
315
+ current += '||';
316
+ i++; // consume second |
317
+ }
318
+ else {
319
+ parts.push(current);
320
+ current = '';
321
+ }
322
+ }
323
+ else {
324
+ current += ch;
325
+ }
326
+ }
327
+ parts.push(current);
328
+ return parts;
329
+ }
330
+ function parseLiteral(s) {
331
+ const trimmed = s.replace(/^['"]|['"]$/g, '');
332
+ if (trimmed === 'true')
333
+ return true;
334
+ if (trimmed === 'false')
335
+ return false;
336
+ const n = Number(trimmed);
337
+ return isNaN(n) ? trimmed : n;
338
+ }
339
+ function resolveDeep(obj, path) {
340
+ if (!path)
341
+ return obj;
342
+ const parts = path.split('.');
343
+ let current = obj;
344
+ for (const part of parts) {
345
+ if (current == null || typeof current !== 'object')
346
+ return undefined;
347
+ current = current[part];
348
+ }
349
+ return current;
350
+ }
351
+ function countOccurrences(s, sub) {
352
+ let count = 0;
353
+ let idx = 0;
354
+ while ((idx = s.indexOf(sub, idx)) !== -1) {
355
+ count++;
356
+ idx += sub.length;
357
+ }
358
+ return count;
359
+ }
360
+ //# sourceMappingURL=rx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rx.js","sourceRoot":"","sources":["../../src/renderer/rx.ts"],"names":[],"mappings":"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"}