@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,324 @@
1
+ /**
2
+ * Interactive component renderers — Tabs, Accordion, Dialog, Popover, Tooltip, etc.
3
+ */
4
+ import { registerComponent, renderChildren, renderNode, resolveStr, el } from '../engine.js';
5
+ export function registerInteractiveComponents() {
6
+ registerComponent('Tabs', renderTabs);
7
+ registerComponent('Tab', renderTab);
8
+ registerComponent('Accordion', renderAccordion);
9
+ registerComponent('AccordionItem', renderAccordionItem);
10
+ registerComponent('Dialog', renderDialog);
11
+ registerComponent('Popover', renderPopover);
12
+ registerComponent('Tooltip', renderTooltip);
13
+ registerComponent('HoverCard', renderHoverCard);
14
+ registerComponent('Carousel', renderCarousel);
15
+ }
16
+ function renderTabs(node, ctx) {
17
+ const wrapper = el('div', 'pf-tabs');
18
+ const tabBar = el('div', 'pf-tabs-bar');
19
+ tabBar.setAttribute('role', 'tablist');
20
+ tabBar.style.display = 'flex';
21
+ tabBar.style.gap = '4px';
22
+ tabBar.style.borderBottom = '2px solid var(--border, #e5e7eb)';
23
+ tabBar.style.marginBottom = '12px';
24
+ const panels = [];
25
+ const buttons = [];
26
+ if (node.children) {
27
+ for (let i = 0; i < node.children.length; i++) {
28
+ const tab = node.children[i];
29
+ const tabId = `pf-tab-${Math.random().toString(36).slice(2, 8)}`;
30
+ const panelId = `pf-panel-${Math.random().toString(36).slice(2, 8)}`;
31
+ const btn = document.createElement('button');
32
+ btn.type = 'button';
33
+ btn.className = 'pf-tab-trigger';
34
+ btn.textContent = tab.title ?? `Tab ${i + 1}`;
35
+ btn.setAttribute('role', 'tab');
36
+ btn.setAttribute('aria-selected', i === 0 ? 'true' : 'false');
37
+ btn.setAttribute('aria-controls', panelId);
38
+ btn.id = tabId;
39
+ btn.tabIndex = i === 0 ? 0 : -1;
40
+ btn.style.padding = '8px 16px';
41
+ btn.style.border = 'none';
42
+ btn.style.background = 'none';
43
+ btn.style.cursor = 'pointer';
44
+ btn.style.borderBottom = '2px solid transparent';
45
+ btn.style.marginBottom = '-2px';
46
+ btn.style.fontSize = '14px';
47
+ const panel = el('div', 'pf-tab-panel');
48
+ panel.style.display = i === 0 ? 'block' : 'none';
49
+ panel.setAttribute('role', 'tabpanel');
50
+ panel.setAttribute('aria-labelledby', tabId);
51
+ panel.id = panelId;
52
+ panel.tabIndex = 0;
53
+ renderChildren(tab, panel, ctx);
54
+ btn.addEventListener('click', () => {
55
+ activateTab(i);
56
+ });
57
+ if (i === 0) {
58
+ btn.style.borderBottomColor = 'var(--primary, #3b82f6)';
59
+ btn.style.fontWeight = '600';
60
+ }
61
+ buttons.push(btn);
62
+ panels.push(panel);
63
+ tabBar.appendChild(btn);
64
+ }
65
+ }
66
+ // Shared tab activation
67
+ function activateTab(index) {
68
+ panels.forEach(p => p.style.display = 'none');
69
+ buttons.forEach(b => {
70
+ b.style.borderBottomColor = 'transparent';
71
+ b.style.fontWeight = 'normal';
72
+ b.setAttribute('aria-selected', 'false');
73
+ b.tabIndex = -1;
74
+ });
75
+ panels[index].style.display = 'block';
76
+ buttons[index].style.borderBottomColor = 'var(--primary, #3b82f6)';
77
+ buttons[index].style.fontWeight = '600';
78
+ buttons[index].setAttribute('aria-selected', 'true');
79
+ buttons[index].tabIndex = 0;
80
+ buttons[index].focus();
81
+ }
82
+ // Keyboard navigation (arrow keys)
83
+ tabBar.addEventListener('keydown', (e) => {
84
+ const current = buttons.indexOf(e.target);
85
+ if (current < 0)
86
+ return;
87
+ let next;
88
+ if (e.key === 'ArrowRight')
89
+ next = (current + 1) % buttons.length;
90
+ else if (e.key === 'ArrowLeft')
91
+ next = (current - 1 + buttons.length) % buttons.length;
92
+ else if (e.key === 'Home')
93
+ next = 0;
94
+ else if (e.key === 'End')
95
+ next = buttons.length - 1;
96
+ else
97
+ return;
98
+ e.preventDefault();
99
+ activateTab(next);
100
+ });
101
+ wrapper.appendChild(tabBar);
102
+ for (const panel of panels)
103
+ wrapper.appendChild(panel);
104
+ return wrapper;
105
+ }
106
+ function renderTab(node, ctx) {
107
+ // Tabs handles Tab children directly; standalone fallback
108
+ const e = el('div', 'pf-tab');
109
+ renderChildren(node, e, ctx);
110
+ return e;
111
+ }
112
+ function renderAccordion(node, ctx) {
113
+ const e = el('div', 'pf-accordion');
114
+ renderChildren(node, e, ctx);
115
+ return e;
116
+ }
117
+ function renderAccordionItem(node, ctx) {
118
+ const wrapper = el('div', 'pf-accordion-item');
119
+ wrapper.style.borderBottom = '1px solid var(--border, #e5e7eb)';
120
+ const contentId = `pf-acc-${Math.random().toString(36).slice(2, 8)}`;
121
+ const trigger = document.createElement('button');
122
+ trigger.type = 'button';
123
+ trigger.className = 'pf-accordion-trigger';
124
+ trigger.textContent = node.title ?? '';
125
+ trigger.setAttribute('aria-expanded', 'false');
126
+ trigger.setAttribute('aria-controls', contentId);
127
+ trigger.style.width = '100%';
128
+ trigger.style.textAlign = 'left';
129
+ trigger.style.padding = '12px 0';
130
+ trigger.style.border = 'none';
131
+ trigger.style.background = 'none';
132
+ trigger.style.cursor = 'pointer';
133
+ trigger.style.fontSize = '14px';
134
+ trigger.style.fontWeight = '500';
135
+ const content = el('div', 'pf-accordion-content');
136
+ content.id = contentId;
137
+ content.setAttribute('role', 'region');
138
+ content.setAttribute('aria-labelledby', trigger.id);
139
+ content.style.display = 'none';
140
+ content.style.paddingBottom = '12px';
141
+ renderChildren(node, content, ctx);
142
+ trigger.addEventListener('click', () => {
143
+ const open = content.style.display !== 'none';
144
+ content.style.display = open ? 'none' : 'block';
145
+ trigger.setAttribute('aria-expanded', open ? 'false' : 'true');
146
+ });
147
+ wrapper.appendChild(trigger);
148
+ wrapper.appendChild(content);
149
+ return wrapper;
150
+ }
151
+ function renderDialog(node, ctx) {
152
+ const wrapper = el('div', 'pf-dialog-wrapper');
153
+ // Trigger button
154
+ if (node.trigger != null) {
155
+ const triggerEl = renderNode(node.trigger, ctx);
156
+ triggerEl.addEventListener('click', () => {
157
+ dialog.showModal();
158
+ });
159
+ wrapper.appendChild(triggerEl);
160
+ }
161
+ const dialog = document.createElement('dialog');
162
+ dialog.className = 'pf-dialog';
163
+ dialog.setAttribute('aria-modal', 'true');
164
+ dialog.style.maxWidth = '500px';
165
+ dialog.style.width = '100%';
166
+ dialog.style.border = '1px solid var(--border, #e5e7eb)';
167
+ dialog.style.borderRadius = 'var(--radius, 8px)';
168
+ dialog.style.padding = '24px';
169
+ if (node.title != null) {
170
+ const title = el('h2', 'pf-dialog-title');
171
+ title.textContent = resolveStr(node.title, ctx);
172
+ title.id = `pf-dialog-title-${Math.random().toString(36).slice(2, 8)}`;
173
+ dialog.setAttribute('aria-labelledby', title.id);
174
+ dialog.appendChild(title);
175
+ }
176
+ if (node.description != null) {
177
+ const desc = el('p', 'pf-dialog-desc');
178
+ desc.textContent = resolveStr(node.description, ctx);
179
+ desc.style.color = 'var(--muted-foreground, #6b7280)';
180
+ dialog.appendChild(desc);
181
+ }
182
+ const body = el('div', 'pf-dialog-body');
183
+ renderChildren(node, body, ctx);
184
+ dialog.appendChild(body);
185
+ if (node.dismissible !== false) {
186
+ dialog.addEventListener('click', (e) => {
187
+ if (e.target === dialog)
188
+ dialog.close();
189
+ });
190
+ }
191
+ // Listen for close-overlay events
192
+ document.addEventListener('prefab:close-overlay', () => dialog.close());
193
+ wrapper.appendChild(dialog);
194
+ return wrapper;
195
+ }
196
+ function renderPopover(node, ctx) {
197
+ const wrapper = el('div', 'pf-popover');
198
+ wrapper.style.position = 'relative';
199
+ wrapper.style.display = 'inline-block';
200
+ const content = el('div', 'pf-popover-content');
201
+ content.style.display = 'none';
202
+ content.style.position = 'absolute';
203
+ content.style.zIndex = '50';
204
+ content.style.padding = '12px';
205
+ content.style.border = '1px solid var(--border, #e5e7eb)';
206
+ content.style.borderRadius = 'var(--radius, 8px)';
207
+ content.style.backgroundColor = 'var(--popover, #fff)';
208
+ content.style.boxShadow = '0 4px 6px -1px rgb(0 0 0 / 0.1)';
209
+ if (node.title != null) {
210
+ const title = el('div', 'pf-popover-title');
211
+ title.textContent = resolveStr(node.title, ctx);
212
+ title.style.fontWeight = '600';
213
+ title.style.marginBottom = '4px';
214
+ content.appendChild(title);
215
+ }
216
+ renderChildren(node, content, ctx);
217
+ wrapper.addEventListener('click', () => {
218
+ content.style.display = content.style.display === 'none' ? 'block' : 'none';
219
+ });
220
+ wrapper.appendChild(content);
221
+ return wrapper;
222
+ }
223
+ function renderTooltip(node, ctx) {
224
+ const wrapper = el('div', 'pf-tooltip');
225
+ wrapper.style.position = 'relative';
226
+ wrapper.style.display = 'inline-block';
227
+ const tipId = `pf-tip-${Math.random().toString(36).slice(2, 8)}`;
228
+ const tip = el('div', 'pf-tooltip-content');
229
+ tip.id = tipId;
230
+ tip.setAttribute('role', 'tooltip');
231
+ tip.textContent = resolveStr(node.content ?? '', ctx);
232
+ tip.style.display = 'none';
233
+ tip.style.position = 'absolute';
234
+ tip.style.bottom = '100%';
235
+ tip.style.left = '50%';
236
+ tip.style.transform = 'translateX(-50%)';
237
+ tip.style.padding = '4px 8px';
238
+ tip.style.borderRadius = '4px';
239
+ tip.style.backgroundColor = 'var(--popover, #1f2937)';
240
+ tip.style.color = '#fff';
241
+ tip.style.fontSize = '12px';
242
+ tip.style.whiteSpace = 'nowrap';
243
+ tip.style.zIndex = '50';
244
+ renderChildren(node, wrapper, ctx);
245
+ wrapper.setAttribute('aria-describedby', tipId);
246
+ wrapper.addEventListener('mouseenter', () => { tip.style.display = 'block'; });
247
+ wrapper.addEventListener('mouseleave', () => { tip.style.display = 'none'; });
248
+ wrapper.addEventListener('focus', () => { tip.style.display = 'block'; }, true);
249
+ wrapper.addEventListener('blur', () => { tip.style.display = 'none'; }, true);
250
+ wrapper.appendChild(tip);
251
+ return wrapper;
252
+ }
253
+ function renderHoverCard(node, ctx) {
254
+ // Similar to popover but triggered on hover
255
+ const wrapper = el('div', 'pf-hover-card');
256
+ wrapper.style.position = 'relative';
257
+ wrapper.style.display = 'inline-block';
258
+ const content = el('div', 'pf-hover-card-content');
259
+ content.style.display = 'none';
260
+ content.style.position = 'absolute';
261
+ content.style.zIndex = '50';
262
+ content.style.padding = '16px';
263
+ content.style.border = '1px solid var(--border, #e5e7eb)';
264
+ content.style.borderRadius = 'var(--radius, 8px)';
265
+ content.style.backgroundColor = 'var(--card, #fff)';
266
+ content.style.boxShadow = '0 4px 6px -1px rgb(0 0 0 / 0.1)';
267
+ content.style.minWidth = '200px';
268
+ renderChildren(node, content, ctx);
269
+ wrapper.addEventListener('mouseenter', () => { content.style.display = 'block'; });
270
+ wrapper.addEventListener('mouseleave', () => { content.style.display = 'none'; });
271
+ wrapper.appendChild(content);
272
+ return wrapper;
273
+ }
274
+ function renderCarousel(node, ctx) {
275
+ const wrapper = el('div', 'pf-carousel');
276
+ wrapper.style.position = 'relative';
277
+ wrapper.style.overflow = 'hidden';
278
+ wrapper.setAttribute('role', 'region');
279
+ wrapper.setAttribute('aria-roledescription', 'carousel');
280
+ wrapper.setAttribute('aria-label', resolveStr(node.label ?? 'Carousel', ctx));
281
+ const track = el('div', 'pf-carousel-track');
282
+ track.style.display = 'flex';
283
+ track.style.transition = 'transform 0.3s ease';
284
+ renderChildren(node, track, ctx);
285
+ // Style children as slides
286
+ let current = 0;
287
+ const slideCount = node.children?.length ?? 0;
288
+ const prev = document.createElement('button');
289
+ prev.type = 'button';
290
+ prev.textContent = '‹';
291
+ prev.className = 'pf-carousel-prev';
292
+ prev.setAttribute('aria-label', 'Previous slide');
293
+ prev.style.position = 'absolute';
294
+ prev.style.left = '4px';
295
+ prev.style.top = '50%';
296
+ prev.style.transform = 'translateY(-50%)';
297
+ prev.style.zIndex = '10';
298
+ const next = document.createElement('button');
299
+ next.type = 'button';
300
+ next.textContent = '›';
301
+ next.className = 'pf-carousel-next';
302
+ next.setAttribute('aria-label', 'Next slide');
303
+ next.style.position = 'absolute';
304
+ next.style.right = '4px';
305
+ next.style.top = '50%';
306
+ next.style.transform = 'translateY(-50%)';
307
+ next.style.zIndex = '10';
308
+ const update = () => {
309
+ track.style.transform = `translateX(-${current * 100}%)`;
310
+ };
311
+ prev.addEventListener('click', () => {
312
+ current = Math.max(0, current - 1);
313
+ update();
314
+ });
315
+ next.addEventListener('click', () => {
316
+ current = Math.min(slideCount - 1, current + 1);
317
+ update();
318
+ });
319
+ wrapper.appendChild(track);
320
+ wrapper.appendChild(prev);
321
+ wrapper.appendChild(next);
322
+ return wrapper;
323
+ }
324
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../../src/renderer/components/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Layout component renderers — Column, Row, Grid, Container, Div, Span, etc.
3
+ */
4
+ export declare function registerLayoutComponents(): void;
5
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,wBAAwB,IAAI,IAAI,CAY/C"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Layout component renderers — Column, Row, Grid, Container, Div, Span, etc.
3
+ */
4
+ import { registerComponent, renderChildren, el } from '../engine.js';
5
+ export function registerLayoutComponents() {
6
+ registerComponent('Column', renderColumn);
7
+ registerComponent('Row', renderRow);
8
+ registerComponent('Grid', renderGrid);
9
+ registerComponent('GridItem', renderGridItem);
10
+ registerComponent('Container', renderContainer);
11
+ registerComponent('Div', renderDiv);
12
+ registerComponent('Span', renderSpan);
13
+ registerComponent('Dashboard', renderGrid);
14
+ registerComponent('DashboardItem', renderGridItem);
15
+ registerComponent('Pages', renderPages);
16
+ registerComponent('Page', renderDiv);
17
+ }
18
+ function renderColumn(node, ctx) {
19
+ const e = el('div', 'pf-column');
20
+ e.style.display = 'flex';
21
+ e.style.flexDirection = 'column';
22
+ const gap = extractGap(node);
23
+ if (gap != null)
24
+ e.style.gap = `${gap * 4}px`;
25
+ if (node.align != null)
26
+ e.style.alignItems = mapAlign(node.align);
27
+ if (node.justify != null)
28
+ e.style.justifyContent = mapJustify(node.justify);
29
+ renderChildren(node, e, ctx);
30
+ return e;
31
+ }
32
+ function renderRow(node, ctx) {
33
+ const e = el('div', 'pf-row');
34
+ e.style.display = 'flex';
35
+ e.style.flexDirection = 'row';
36
+ const gap = extractGap(node);
37
+ if (gap != null)
38
+ e.style.gap = `${gap * 4}px`;
39
+ if (node.align != null)
40
+ e.style.alignItems = mapAlign(node.align);
41
+ if (node.justify != null)
42
+ e.style.justifyContent = mapJustify(node.justify);
43
+ if (node.wrap != null)
44
+ e.style.flexWrap = 'wrap';
45
+ renderChildren(node, e, ctx);
46
+ return e;
47
+ }
48
+ function renderGrid(node, ctx) {
49
+ const e = el('div', 'pf-grid');
50
+ e.style.display = 'grid';
51
+ const cols = node.columns ?? 3;
52
+ e.style.gridTemplateColumns = `repeat(${cols}, 1fr)`;
53
+ const gap = extractGap(node);
54
+ if (gap != null)
55
+ e.style.gap = `${gap * 4}px`;
56
+ renderChildren(node, e, ctx);
57
+ return e;
58
+ }
59
+ function renderGridItem(node, ctx) {
60
+ const e = el('div', 'pf-grid-item');
61
+ if (node.colSpan != null)
62
+ e.style.gridColumn = `span ${node.colSpan}`;
63
+ if (node.rowSpan != null)
64
+ e.style.gridRow = `span ${node.rowSpan}`;
65
+ renderChildren(node, e, ctx);
66
+ return e;
67
+ }
68
+ function renderContainer(node, ctx) {
69
+ const e = el('div', 'pf-container');
70
+ e.style.maxWidth = node.maxWidth ?? '1200px';
71
+ e.style.margin = '0 auto';
72
+ if (node.padding != null)
73
+ e.style.padding = `${node.padding * 4}px`;
74
+ renderChildren(node, e, ctx);
75
+ return e;
76
+ }
77
+ function renderDiv(node, ctx) {
78
+ const e = el('div', 'pf-div');
79
+ renderChildren(node, e, ctx);
80
+ return e;
81
+ }
82
+ function renderSpan(node, ctx) {
83
+ const e = el('span', 'pf-span');
84
+ renderChildren(node, e, ctx);
85
+ return e;
86
+ }
87
+ function renderPages(node, ctx) {
88
+ const e = el('div', 'pf-pages');
89
+ renderChildren(node, e, ctx);
90
+ return e;
91
+ }
92
+ // ── Helpers ──────────────────────────────────────────────────────────────────
93
+ const GAP_CLASS_RE = /\bgap-(\d+)\b/;
94
+ /** Extract gap value from node.gap prop or cssClass "gap-N" pattern */
95
+ function extractGap(node) {
96
+ if (node.gap != null)
97
+ return node.gap;
98
+ if (typeof node.cssClass === 'string') {
99
+ const match = GAP_CLASS_RE.exec(node.cssClass);
100
+ if (match)
101
+ return Number(match[1]);
102
+ }
103
+ return null;
104
+ }
105
+ function mapAlign(value) {
106
+ const m = { start: 'flex-start', end: 'flex-end', center: 'center', stretch: 'stretch', baseline: 'baseline' };
107
+ return m[value] ?? value;
108
+ }
109
+ function mapJustify(value) {
110
+ const m = { start: 'flex-start', end: 'flex-end', center: 'center', between: 'space-between', around: 'space-around', evenly: 'space-evenly' };
111
+ return m[value] ?? value;
112
+ }
113
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/renderer/components/layout.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGpE,MAAM,UAAU,wBAAwB;IACtC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACzC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACnC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IAC7C,iBAAiB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;IAC/C,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACnC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,iBAAiB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IAC1C,iBAAiB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAA;IAClD,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACvC,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,IAAmB,EAAE,GAAkB;IAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IAChC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAA;IAChC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,GAAG,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAA;IAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAe,CAAC,CAAA;IAC3E,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAA;IACrF,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,SAAS,CAAC,IAAmB,EAAE,GAAkB;IACxD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC7B,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAA;IAC7B,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,GAAG,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAA;IAC7C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAe,CAAC,CAAA;IAC3E,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,OAAiB,CAAC,CAAA;IACrF,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAA;IAChD,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,UAAU,CAAC,IAAmB,EAAE,GAAkB;IACzD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAC9B,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,MAAM,IAAI,GAAI,IAAI,CAAC,OAA8B,IAAI,CAAC,CAAA;IACtD,CAAC,CAAC,KAAK,CAAC,mBAAmB,GAAG,UAAU,IAAI,QAAQ,CAAA;IACpD,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,GAAG,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,CAAA;IAC7C,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,cAAc,CAAC,IAAmB,EAAE,GAAkB;IAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACnC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,IAAI,CAAC,OAAiB,EAAE,CAAA;IAC/E,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,IAAI,CAAC,OAAiB,EAAE,CAAA;IAC5E,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,eAAe,CAAC,IAAmB,EAAE,GAAkB;IAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;IACnC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAI,IAAI,CAAC,QAA+B,IAAI,QAAQ,CAAA;IACpE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAA;IACzB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;QAAE,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,GAAI,IAAI,CAAC,OAAkB,GAAG,CAAC,IAAI,CAAA;IAC/E,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,SAAS,CAAC,IAAmB,EAAE,GAAkB;IACxD,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC7B,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,UAAU,CAAC,IAAmB,EAAE,GAAkB;IACzD,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAC/B,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB,EAAE,GAAkB;IAC1D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAC/B,cAAc,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IAC5B,OAAO,CAAC,CAAA;AACV,CAAC;AAED,gFAAgF;AAEhF,MAAM,YAAY,GAAG,eAAe,CAAA;AAEpC,uEAAuE;AACvE,SAAS,UAAU,CAAC,IAAmB;IACrC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,GAAa,CAAA;IAC/C,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,KAAK;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,CAAC,GAA2B,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtI,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;AAC1B,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,MAAM,CAAC,GAA2B,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACtK,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;AAC1B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Media component renderers — Image, Audio, Video, Embed, Svg, DropZone, Mermaid
3
+ */
4
+ export declare function registerMediaComponents(): void;
5
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Media component renderers — Image, Audio, Video, Embed, Svg, DropZone, Mermaid
3
+ */
4
+ import { registerComponent, resolveStr, el } from '../engine.js';
5
+ export function registerMediaComponents() {
6
+ registerComponent('Image', renderImage);
7
+ registerComponent('Audio', renderAudio);
8
+ registerComponent('Video', renderVideo);
9
+ registerComponent('Embed', renderEmbed);
10
+ registerComponent('Svg', renderSvg);
11
+ registerComponent('DropZone', renderDropZone);
12
+ registerComponent('Mermaid', renderMermaid);
13
+ }
14
+ function renderImage(node, ctx) {
15
+ const img = document.createElement('img');
16
+ img.className = 'pf-image';
17
+ img.src = resolveStr(node.src, ctx);
18
+ if (node.alt != null)
19
+ img.alt = resolveStr(node.alt, ctx);
20
+ if (node.width != null)
21
+ img.width = node.width;
22
+ if (node.height != null)
23
+ img.height = node.height;
24
+ img.style.maxWidth = '100%';
25
+ return img;
26
+ }
27
+ function renderAudio(node, ctx) {
28
+ const audio = document.createElement('audio');
29
+ audio.className = 'pf-audio';
30
+ audio.src = resolveStr(node.src, ctx);
31
+ audio.controls = true;
32
+ return audio;
33
+ }
34
+ function renderVideo(node, ctx) {
35
+ const video = document.createElement('video');
36
+ video.className = 'pf-video';
37
+ video.src = resolveStr(node.src, ctx);
38
+ video.controls = true;
39
+ if (node.width != null)
40
+ video.width = node.width;
41
+ if (node.height != null)
42
+ video.height = node.height;
43
+ video.style.maxWidth = '100%';
44
+ return video;
45
+ }
46
+ function renderEmbed(node, ctx) {
47
+ const wrapper = el('div', 'pf-embed');
48
+ const iframe = document.createElement('iframe');
49
+ iframe.src = resolveStr(node.src, ctx);
50
+ iframe.style.width = '100%';
51
+ iframe.style.height = node.height != null ? `${node.height}px` : '400px';
52
+ iframe.style.border = 'none';
53
+ iframe.setAttribute('sandbox', 'allow-scripts');
54
+ wrapper.appendChild(iframe);
55
+ return wrapper;
56
+ }
57
+ /** SVG element/attribute allowlist for sanitization. */
58
+ const SVG_ALLOWED_TAGS = new Set([
59
+ 'svg', 'g', 'path', 'rect', 'circle', 'ellipse', 'line', 'polyline',
60
+ 'polygon', 'text', 'tspan', 'textpath', 'defs', 'use', 'symbol',
61
+ 'clippath', 'mask', 'pattern', 'lineargradient', 'radialgradient',
62
+ 'stop', 'filter', 'fegaussianblur', 'feoffset', 'femerge',
63
+ 'femergenode', 'fecolormatrix', 'feblend', 'title', 'desc',
64
+ ]);
65
+ function renderSvg(node, ctx) {
66
+ const wrapper = el('div', 'pf-svg');
67
+ const content = resolveStr(node.content, ctx);
68
+ if (!content.includes('<svg'))
69
+ return wrapper;
70
+ // Parse via DOMParser to avoid innerHTML XSS
71
+ const doc = new DOMParser().parseFromString(content, 'image/svg+xml');
72
+ const svg = doc.querySelector('svg');
73
+ if (!svg)
74
+ return wrapper;
75
+ sanitizeSvgNode(svg);
76
+ wrapper.appendChild(document.importNode(svg, true));
77
+ return wrapper;
78
+ }
79
+ function sanitizeSvgNode(node) {
80
+ // Remove disallowed elements
81
+ const children = Array.from(node.children);
82
+ for (const child of children) {
83
+ if (!SVG_ALLOWED_TAGS.has(child.tagName.toLowerCase())) {
84
+ child.remove();
85
+ continue;
86
+ }
87
+ // Strip event handler attributes (on*) and dangerous attrs
88
+ for (const attr of Array.from(child.attributes)) {
89
+ const name = attr.name.toLowerCase();
90
+ if (name.startsWith('on') || name === 'href' && attr.value.trim().toLowerCase().startsWith('javascript:')) {
91
+ child.removeAttribute(attr.name);
92
+ }
93
+ }
94
+ sanitizeSvgNode(child);
95
+ }
96
+ }
97
+ function renderDropZone(node, ctx) {
98
+ const e = el('div', 'pf-dropzone');
99
+ e.style.border = '2px dashed var(--border, #d1d5db)';
100
+ e.style.borderRadius = 'var(--radius, 8px)';
101
+ e.style.padding = '32px';
102
+ e.style.textAlign = 'center';
103
+ e.style.cursor = 'pointer';
104
+ e.textContent = resolveStr(node.label ?? 'Drop files here', ctx);
105
+ e.addEventListener('dragover', (ev) => {
106
+ ev.preventDefault();
107
+ e.style.borderColor = 'var(--primary, #3b82f6)';
108
+ });
109
+ e.addEventListener('dragleave', () => {
110
+ e.style.borderColor = 'var(--border, #d1d5db)';
111
+ });
112
+ e.addEventListener('drop', (ev) => {
113
+ ev.preventDefault();
114
+ e.style.borderColor = 'var(--border, #d1d5db)';
115
+ // File handling would go here
116
+ });
117
+ return e;
118
+ }
119
+ function renderMermaid(node, ctx) {
120
+ const e = el('div', 'pf-mermaid');
121
+ e.setAttribute('data-mermaid', 'true');
122
+ const content = resolveStr(node.content, ctx);
123
+ // Store raw mermaid content; actual rendering requires mermaid.js
124
+ e.textContent = content;
125
+ // Attempt to render if mermaid is available globally
126
+ if (typeof globalThis.mermaid !== 'undefined') {
127
+ e.classList.add('mermaid');
128
+ e.textContent = content;
129
+ }
130
+ return e;
131
+ }
132
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/renderer/components/media.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AAGhE,MAAM,UAAU,uBAAuB;IACrC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACvC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACvC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACvC,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;IACvC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACnC,iBAAiB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;IAC7C,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB,EAAE,GAAkB;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACzC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAA;IAC1B,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACnC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI;QAAE,GAAG,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACzD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAe,CAAA;IACxD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAA;IAC3D,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC3B,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB,EAAE,GAAkB;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7C,KAAK,CAAC,SAAS,GAAG,UAAU,CAAA;IAC5B,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;IACrB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB,EAAE,GAAkB;IAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC7C,KAAK,CAAC,SAAS,GAAG,UAAU,CAAA;IAC5B,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACrC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;IACrB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;QAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAe,CAAA;IAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;QAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAgB,CAAA;IAC7D,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC7B,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAmB,EAAE,GAAkB;IAC1D,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC/C,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACtC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAA;IAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAgB,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;IAClF,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IAC5B,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,eAAe,CAAC,CAAA;IAC/C,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3B,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,wDAAwD;AACxD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU;IACnE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;IAC/D,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB;IACjE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS;IACzD,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;CAC3D,CAAC,CAAA;AAEF,SAAS,SAAS,CAAC,IAAmB,EAAE,GAAkB;IACxD,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,OAAO,CAAA;IAE7C,6CAA6C;IAC7C,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IACrE,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAA;IAExB,eAAe,CAAC,GAAG,CAAC,CAAA;IACpB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;IACnD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,6BAA6B;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACvD,KAAK,CAAC,MAAM,EAAE,CAAA;YACd,SAAQ;QACV,CAAC;QACD,2DAA2D;QAC3D,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;YACpC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1G,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAClC,CAAC;QACH,CAAC;QACD,eAAe,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAmB,EAAE,GAAkB;IAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;IAClC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,mCAAmC,CAAA;IACpD,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,oBAAoB,CAAA;IAC3C,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAA;IACxB,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC5B,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;IAC1B,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,iBAAiB,EAAE,GAAG,CAAC,CAAA;IAEhE,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;QACpC,EAAE,CAAC,cAAc,EAAE,CAAA;QACnB,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,yBAAyB,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,CAAC,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE;QACnC,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,wBAAwB,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE;QAChC,EAAE,CAAC,cAAc,EAAE,CAAA;QACnB,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,wBAAwB,CAAA;QAC9C,8BAA8B;IAChC,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,CAAA;AACV,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB,EAAE,GAAkB;IAC5D,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IACjC,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC7C,kEAAkE;IAClE,CAAC,CAAC,WAAW,GAAG,OAAO,CAAA;IAEvB,qDAAqD;IACrD,IAAI,OAAQ,UAAsC,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QAC3E,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1B,CAAC,CAAC,WAAW,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Table component renderers — Table, TableHead, TableBody, TableRow, etc.
3
+ */
4
+ export declare function registerTableComponents(): void;
5
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/renderer/components/table.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,uBAAuB,IAAI,IAAI,CAU9C"}