@aigne/afs-ui 1.11.0-beta.12

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 (196) hide show
  1. package/LICENSE.md +26 -0
  2. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  4. package/dist/aup-protocol.cjs +235 -0
  5. package/dist/aup-protocol.d.cts +78 -0
  6. package/dist/aup-protocol.d.cts.map +1 -0
  7. package/dist/aup-protocol.d.mts +78 -0
  8. package/dist/aup-protocol.d.mts.map +1 -0
  9. package/dist/aup-protocol.mjs +235 -0
  10. package/dist/aup-protocol.mjs.map +1 -0
  11. package/dist/aup-registry.cjs +2489 -0
  12. package/dist/aup-registry.mjs +2487 -0
  13. package/dist/aup-registry.mjs.map +1 -0
  14. package/dist/aup-spec.cjs +1467 -0
  15. package/dist/aup-spec.mjs +1466 -0
  16. package/dist/aup-spec.mjs.map +1 -0
  17. package/dist/aup-types.cjs +165 -0
  18. package/dist/aup-types.d.cts +157 -0
  19. package/dist/aup-types.d.cts.map +1 -0
  20. package/dist/aup-types.d.mts +157 -0
  21. package/dist/aup-types.d.mts.map +1 -0
  22. package/dist/aup-types.mjs +157 -0
  23. package/dist/aup-types.mjs.map +1 -0
  24. package/dist/backend.cjs +14 -0
  25. package/dist/backend.d.cts +104 -0
  26. package/dist/backend.d.cts.map +1 -0
  27. package/dist/backend.d.mts +104 -0
  28. package/dist/backend.d.mts.map +1 -0
  29. package/dist/backend.mjs +13 -0
  30. package/dist/backend.mjs.map +1 -0
  31. package/dist/degradation.cjs +85 -0
  32. package/dist/degradation.d.cts +17 -0
  33. package/dist/degradation.d.cts.map +1 -0
  34. package/dist/degradation.d.mts +17 -0
  35. package/dist/degradation.d.mts.map +1 -0
  36. package/dist/degradation.mjs +84 -0
  37. package/dist/degradation.mjs.map +1 -0
  38. package/dist/index.cjs +36 -0
  39. package/dist/index.d.cts +12 -0
  40. package/dist/index.d.mts +12 -0
  41. package/dist/index.mjs +13 -0
  42. package/dist/runtime.cjs +117 -0
  43. package/dist/runtime.d.cts +59 -0
  44. package/dist/runtime.d.cts.map +1 -0
  45. package/dist/runtime.d.mts +59 -0
  46. package/dist/runtime.d.mts.map +1 -0
  47. package/dist/runtime.mjs +118 -0
  48. package/dist/runtime.mjs.map +1 -0
  49. package/dist/session.cjs +159 -0
  50. package/dist/session.d.cts +80 -0
  51. package/dist/session.d.cts.map +1 -0
  52. package/dist/session.d.mts +80 -0
  53. package/dist/session.d.mts.map +1 -0
  54. package/dist/session.mjs +159 -0
  55. package/dist/session.mjs.map +1 -0
  56. package/dist/snapshot.cjs +162 -0
  57. package/dist/snapshot.mjs +163 -0
  58. package/dist/snapshot.mjs.map +1 -0
  59. package/dist/term-page.cjs +264 -0
  60. package/dist/term-page.mjs +264 -0
  61. package/dist/term-page.mjs.map +1 -0
  62. package/dist/term.cjs +295 -0
  63. package/dist/term.d.cts +84 -0
  64. package/dist/term.d.cts.map +1 -0
  65. package/dist/term.d.mts +84 -0
  66. package/dist/term.d.mts.map +1 -0
  67. package/dist/term.mjs +296 -0
  68. package/dist/term.mjs.map +1 -0
  69. package/dist/tty.cjs +136 -0
  70. package/dist/tty.d.cts +53 -0
  71. package/dist/tty.d.cts.map +1 -0
  72. package/dist/tty.d.mts +53 -0
  73. package/dist/tty.d.mts.map +1 -0
  74. package/dist/tty.mjs +135 -0
  75. package/dist/tty.mjs.map +1 -0
  76. package/dist/ui-provider.cjs +4615 -0
  77. package/dist/ui-provider.d.cts +307 -0
  78. package/dist/ui-provider.d.cts.map +1 -0
  79. package/dist/ui-provider.d.mts +307 -0
  80. package/dist/ui-provider.d.mts.map +1 -0
  81. package/dist/ui-provider.mjs +4616 -0
  82. package/dist/ui-provider.mjs.map +1 -0
  83. package/dist/web-page/core.cjs +1388 -0
  84. package/dist/web-page/core.mjs +1387 -0
  85. package/dist/web-page/core.mjs.map +1 -0
  86. package/dist/web-page/css.cjs +1699 -0
  87. package/dist/web-page/css.mjs +1698 -0
  88. package/dist/web-page/css.mjs.map +1 -0
  89. package/dist/web-page/icons.cjs +248 -0
  90. package/dist/web-page/icons.mjs +248 -0
  91. package/dist/web-page/icons.mjs.map +1 -0
  92. package/dist/web-page/overlay-themes.cjs +514 -0
  93. package/dist/web-page/overlay-themes.mjs +513 -0
  94. package/dist/web-page/overlay-themes.mjs.map +1 -0
  95. package/dist/web-page/renderers/action.cjs +72 -0
  96. package/dist/web-page/renderers/action.mjs +72 -0
  97. package/dist/web-page/renderers/action.mjs.map +1 -0
  98. package/dist/web-page/renderers/broadcast.cjs +160 -0
  99. package/dist/web-page/renderers/broadcast.mjs +160 -0
  100. package/dist/web-page/renderers/broadcast.mjs.map +1 -0
  101. package/dist/web-page/renderers/calendar.cjs +137 -0
  102. package/dist/web-page/renderers/calendar.mjs +137 -0
  103. package/dist/web-page/renderers/calendar.mjs.map +1 -0
  104. package/dist/web-page/renderers/canvas.cjs +173 -0
  105. package/dist/web-page/renderers/canvas.mjs +173 -0
  106. package/dist/web-page/renderers/canvas.mjs.map +1 -0
  107. package/dist/web-page/renderers/cdn-loader.cjs +25 -0
  108. package/dist/web-page/renderers/cdn-loader.mjs +25 -0
  109. package/dist/web-page/renderers/cdn-loader.mjs.map +1 -0
  110. package/dist/web-page/renderers/chart.cjs +101 -0
  111. package/dist/web-page/renderers/chart.mjs +101 -0
  112. package/dist/web-page/renderers/chart.mjs.map +1 -0
  113. package/dist/web-page/renderers/deck.cjs +390 -0
  114. package/dist/web-page/renderers/deck.mjs +390 -0
  115. package/dist/web-page/renderers/deck.mjs.map +1 -0
  116. package/dist/web-page/renderers/device.cjs +1015 -0
  117. package/dist/web-page/renderers/device.mjs +1015 -0
  118. package/dist/web-page/renderers/device.mjs.map +1 -0
  119. package/dist/web-page/renderers/editor.cjs +127 -0
  120. package/dist/web-page/renderers/editor.mjs +127 -0
  121. package/dist/web-page/renderers/editor.mjs.map +1 -0
  122. package/dist/web-page/renderers/finance-chart.cjs +178 -0
  123. package/dist/web-page/renderers/finance-chart.mjs +178 -0
  124. package/dist/web-page/renderers/finance-chart.mjs.map +1 -0
  125. package/dist/web-page/renderers/frame.cjs +274 -0
  126. package/dist/web-page/renderers/frame.mjs +274 -0
  127. package/dist/web-page/renderers/frame.mjs.map +1 -0
  128. package/dist/web-page/renderers/globe.cjs +119 -0
  129. package/dist/web-page/renderers/globe.mjs +119 -0
  130. package/dist/web-page/renderers/globe.mjs.map +1 -0
  131. package/dist/web-page/renderers/input.cjs +137 -0
  132. package/dist/web-page/renderers/input.mjs +137 -0
  133. package/dist/web-page/renderers/input.mjs.map +1 -0
  134. package/dist/web-page/renderers/list.cjs +1243 -0
  135. package/dist/web-page/renderers/list.mjs +1243 -0
  136. package/dist/web-page/renderers/list.mjs.map +1 -0
  137. package/dist/web-page/renderers/map.cjs +126 -0
  138. package/dist/web-page/renderers/map.mjs +126 -0
  139. package/dist/web-page/renderers/map.mjs.map +1 -0
  140. package/dist/web-page/renderers/media.cjs +106 -0
  141. package/dist/web-page/renderers/media.mjs +106 -0
  142. package/dist/web-page/renderers/media.mjs.map +1 -0
  143. package/dist/web-page/renderers/moonphase.cjs +105 -0
  144. package/dist/web-page/renderers/moonphase.mjs +105 -0
  145. package/dist/web-page/renderers/moonphase.mjs.map +1 -0
  146. package/dist/web-page/renderers/natal-chart.cjs +222 -0
  147. package/dist/web-page/renderers/natal-chart.mjs +222 -0
  148. package/dist/web-page/renderers/natal-chart.mjs.map +1 -0
  149. package/dist/web-page/renderers/overlay.cjs +531 -0
  150. package/dist/web-page/renderers/overlay.mjs +531 -0
  151. package/dist/web-page/renderers/overlay.mjs.map +1 -0
  152. package/dist/web-page/renderers/table.cjs +74 -0
  153. package/dist/web-page/renderers/table.mjs +74 -0
  154. package/dist/web-page/renderers/table.mjs.map +1 -0
  155. package/dist/web-page/renderers/terminal.cjs +30 -0
  156. package/dist/web-page/renderers/terminal.mjs +30 -0
  157. package/dist/web-page/renderers/terminal.mjs.map +1 -0
  158. package/dist/web-page/renderers/text.cjs +109 -0
  159. package/dist/web-page/renderers/text.mjs +109 -0
  160. package/dist/web-page/renderers/text.mjs.map +1 -0
  161. package/dist/web-page/renderers/ticker.cjs +133 -0
  162. package/dist/web-page/renderers/ticker.mjs +133 -0
  163. package/dist/web-page/renderers/ticker.mjs.map +1 -0
  164. package/dist/web-page/renderers/time.cjs +69 -0
  165. package/dist/web-page/renderers/time.mjs +69 -0
  166. package/dist/web-page/renderers/time.mjs.map +1 -0
  167. package/dist/web-page/renderers/unknown.cjs +20 -0
  168. package/dist/web-page/renderers/unknown.mjs +20 -0
  169. package/dist/web-page/renderers/unknown.mjs.map +1 -0
  170. package/dist/web-page/renderers/view.cjs +161 -0
  171. package/dist/web-page/renderers/view.mjs +161 -0
  172. package/dist/web-page/renderers/view.mjs.map +1 -0
  173. package/dist/web-page/renderers/wm.cjs +669 -0
  174. package/dist/web-page/renderers/wm.mjs +669 -0
  175. package/dist/web-page/renderers/wm.mjs.map +1 -0
  176. package/dist/web-page/skeleton.cjs +103 -0
  177. package/dist/web-page/skeleton.mjs +103 -0
  178. package/dist/web-page/skeleton.mjs.map +1 -0
  179. package/dist/web-page.cjs +114 -0
  180. package/dist/web-page.d.cts +19 -0
  181. package/dist/web-page.d.cts.map +1 -0
  182. package/dist/web-page.d.mts +19 -0
  183. package/dist/web-page.d.mts.map +1 -0
  184. package/dist/web-page.mjs +115 -0
  185. package/dist/web-page.mjs.map +1 -0
  186. package/dist/web.cjs +827 -0
  187. package/dist/web.d.cts +144 -0
  188. package/dist/web.d.cts.map +1 -0
  189. package/dist/web.d.mts +144 -0
  190. package/dist/web.d.mts.map +1 -0
  191. package/dist/web.mjs +828 -0
  192. package/dist/web.mjs.map +1 -0
  193. package/dist/wm-state.cjs +172 -0
  194. package/dist/wm-state.mjs +171 -0
  195. package/dist/wm-state.mjs.map +1 -0
  196. package/package.json +59 -0
@@ -0,0 +1,101 @@
1
+ //#region src/web-page/renderers/chart.ts
2
+ const CHART_JS = `
3
+ // ── Chart Primitive (Chart.js v4) ──
4
+ function renderAupChart(node) {
5
+ var el = document.createElement("div");
6
+ el.className = "aup-chart";
7
+ var p = node.props || {};
8
+ var variant = p.variant || "line";
9
+ if (p.height) el.style.height = p.height;
10
+ var canvas = document.createElement("canvas");
11
+ el.appendChild(canvas);
12
+
13
+ var chartData = p.data || { labels: p.labels || [], datasets: p.datasets || [] };
14
+ var chartInstance = null;
15
+
16
+ function chartType() {
17
+ return variant === "area" ? "line" : variant === "histogram" ? "bar" : variant === "gauge" ? "doughnut" : variant;
18
+ }
19
+
20
+ function chartOptions() {
21
+ return {
22
+ responsive: true,
23
+ maintainAspectRatio: false,
24
+ fill: variant === "area",
25
+ animation: chartInstance ? { duration: 400 } : undefined,
26
+ plugins: { legend: { labels: { color: getComputedStyle(el).color } } },
27
+ scales: variant === "pie" || variant === "doughnut" || variant === "gauge" ? {} : {
28
+ x: { ticks: { color: getComputedStyle(el).color } },
29
+ y: { ticks: { color: getComputedStyle(el).color } }
30
+ }
31
+ };
32
+ }
33
+
34
+ function initChart() {
35
+ if (typeof Chart === "undefined") {
36
+ var loading = document.createElement("div");
37
+ loading.className = "aup-chart-loading";
38
+ loading.textContent = "Loading chart...";
39
+ el.insertBefore(loading, canvas);
40
+ loadScript("https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js", function() {
41
+ if (loading.parentNode) loading.parentNode.removeChild(loading);
42
+ createChart(chartData);
43
+ });
44
+ } else {
45
+ createChart(chartData);
46
+ }
47
+ }
48
+
49
+ function createChart(data) {
50
+ try {
51
+ chartInstance = new Chart(canvas, {
52
+ type: chartType(),
53
+ data: data,
54
+ options: chartOptions()
55
+ });
56
+ } catch(e) { canvas.parentNode.textContent = "Chart error: " + e.message; }
57
+ }
58
+
59
+ function updateChart(data) {
60
+ if (!chartInstance) { createChart(data); return; }
61
+ chartInstance.data = data;
62
+ chartInstance.update();
63
+ }
64
+
65
+ // src binding: read data from AFS path, subscribe for live updates
66
+ if (node.src && window.afs) {
67
+ var loading = document.createElement("div");
68
+ loading.className = "aup-chart-loading";
69
+ loading.textContent = "Loading data...";
70
+ el.insertBefore(loading, canvas);
71
+
72
+ function applyAfsData(raw) {
73
+ var d = (typeof raw === "object" && raw !== null) ? raw : {};
74
+ // Support both { labels, datasets } and { content: { labels, datasets } }
75
+ if (d.content && typeof d.content === "object") d = d.content;
76
+ var resolved = { labels: d.labels || [], datasets: d.datasets || [] };
77
+ if (loading.parentNode) loading.parentNode.removeChild(loading);
78
+ updateChart(resolved);
79
+ }
80
+
81
+ // Initial read
82
+ window.afs.read(node.src).then(applyAfsData).catch(function(e) {
83
+ loading.textContent = "Data error: " + e.message;
84
+ });
85
+
86
+ // Subscribe for live updates
87
+ window.afs.subscribe({ type: "afs:write", path: node.src }, function(event) {
88
+ if (event && event.data) applyAfsData(event.data);
89
+ });
90
+ } else {
91
+ setTimeout(initChart, 0);
92
+ }
93
+
94
+ return el;
95
+ }
96
+
97
+ `;
98
+
99
+ //#endregion
100
+ export { CHART_JS };
101
+ //# sourceMappingURL=chart.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart.mjs","names":[],"sources":["../../../src/web-page/renderers/chart.ts"],"sourcesContent":["export const CHART_JS = `\n // ── Chart Primitive (Chart.js v4) ──\n function renderAupChart(node) {\n var el = document.createElement(\"div\");\n el.className = \"aup-chart\";\n var p = node.props || {};\n var variant = p.variant || \"line\";\n if (p.height) el.style.height = p.height;\n var canvas = document.createElement(\"canvas\");\n el.appendChild(canvas);\n\n var chartData = p.data || { labels: p.labels || [], datasets: p.datasets || [] };\n var chartInstance = null;\n\n function chartType() {\n return variant === \"area\" ? \"line\" : variant === \"histogram\" ? \"bar\" : variant === \"gauge\" ? \"doughnut\" : variant;\n }\n\n function chartOptions() {\n return {\n responsive: true,\n maintainAspectRatio: false,\n fill: variant === \"area\",\n animation: chartInstance ? { duration: 400 } : undefined,\n plugins: { legend: { labels: { color: getComputedStyle(el).color } } },\n scales: variant === \"pie\" || variant === \"doughnut\" || variant === \"gauge\" ? {} : {\n x: { ticks: { color: getComputedStyle(el).color } },\n y: { ticks: { color: getComputedStyle(el).color } }\n }\n };\n }\n\n function initChart() {\n if (typeof Chart === \"undefined\") {\n var loading = document.createElement(\"div\");\n loading.className = \"aup-chart-loading\";\n loading.textContent = \"Loading chart...\";\n el.insertBefore(loading, canvas);\n loadScript(\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\", function() {\n if (loading.parentNode) loading.parentNode.removeChild(loading);\n createChart(chartData);\n });\n } else {\n createChart(chartData);\n }\n }\n\n function createChart(data) {\n try {\n chartInstance = new Chart(canvas, {\n type: chartType(),\n data: data,\n options: chartOptions()\n });\n } catch(e) { canvas.parentNode.textContent = \"Chart error: \" + e.message; }\n }\n\n function updateChart(data) {\n if (!chartInstance) { createChart(data); return; }\n chartInstance.data = data;\n chartInstance.update();\n }\n\n // src binding: read data from AFS path, subscribe for live updates\n if (node.src && window.afs) {\n var loading = document.createElement(\"div\");\n loading.className = \"aup-chart-loading\";\n loading.textContent = \"Loading data...\";\n el.insertBefore(loading, canvas);\n\n function applyAfsData(raw) {\n var d = (typeof raw === \"object\" && raw !== null) ? raw : {};\n // Support both { labels, datasets } and { content: { labels, datasets } }\n if (d.content && typeof d.content === \"object\") d = d.content;\n var resolved = { labels: d.labels || [], datasets: d.datasets || [] };\n if (loading.parentNode) loading.parentNode.removeChild(loading);\n updateChart(resolved);\n }\n\n // Initial read\n window.afs.read(node.src).then(applyAfsData).catch(function(e) {\n loading.textContent = \"Data error: \" + e.message;\n });\n\n // Subscribe for live updates\n window.afs.subscribe({ type: \"afs:write\", path: node.src }, function(event) {\n if (event && event.data) applyAfsData(event.data);\n });\n } else {\n setTimeout(initChart, 0);\n }\n\n return el;\n }\n\n`;\n"],"mappings":";AAAA,MAAa,WAAW"}
@@ -0,0 +1,390 @@
1
+
2
+ //#region src/web-page/renderers/deck.ts
3
+ const DECK_JS = `
4
+ // ── Design presets ──
5
+ var _DECK_PRESETS = {
6
+ "tech-dark": {
7
+ fonts: { heading: "Sora", body: "DM Sans", mono: "JetBrains Mono" },
8
+ colors: { bg: "#0a0a0a", surface: "#141414", text: "#ffffff", accent: "#6366f1", accentGlow: "rgba(99,102,241,0.4)", muted: "#71717a", gradient: "linear-gradient(135deg, #0f0f23, #1a1a3e, #0f0f23)" },
9
+ effects: { slideBackground: "grid", headingStyle: "gradient-text", cardStyle: "glass" },
10
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3.5rem" }
11
+ },
12
+ "corporate-clean": {
13
+ fonts: { heading: "Manrope", body: "DM Sans", mono: "JetBrains Mono" },
14
+ colors: { bg: "#ffffff", surface: "#f8fafc", text: "#0f172a", accent: "#2563eb", accentGlow: "rgba(37,99,235,0.2)", muted: "#64748b", gradient: "none" },
15
+ effects: { slideBackground: "solid", headingStyle: "plain", cardStyle: "flat" },
16
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3rem" }
17
+ },
18
+ "keynote-dark": {
19
+ fonts: { heading: "Outfit", body: "DM Sans", mono: "JetBrains Mono" },
20
+ colors: { bg: "#000000", surface: "#111111", text: "#ffffff", accent: "#3b82f6", accentGlow: "rgba(59,130,246,0.3)", muted: "#9ca3af", gradient: "radial-gradient(ellipse at center, #111 0%, #000 70%)" },
21
+ effects: { slideBackground: "spotlight", headingStyle: "plain", cardStyle: "floating" },
22
+ spacing: { slidePadding: "80px 100px", gap: 40, headingSize: "4rem" }
23
+ },
24
+ "gradient-dream": {
25
+ fonts: { heading: "Outfit", body: "DM Sans", mono: "JetBrains Mono" },
26
+ colors: { bg: "#0c0015", surface: "#1a0030", text: "#f8f0ff", accent: "#c084fc", accentGlow: "rgba(192,132,252,0.4)", muted: "#a78bfa", gradient: "linear-gradient(135deg, #0c0015, #1a0030, #2d1b69)" },
27
+ effects: { slideBackground: "aurora", headingStyle: "glow", cardStyle: "glass" },
28
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3.5rem" }
29
+ },
30
+ "neon-night": {
31
+ fonts: { heading: "Sora", body: "DM Sans", mono: "Share Tech Mono" },
32
+ colors: { bg: "#000000", surface: "#0a0a0a", text: "#e0ffe0", accent: "#22d3ee", accentGlow: "rgba(34,211,238,0.4)", muted: "#4ade80", gradient: "linear-gradient(180deg, #000, #001a1a)" },
33
+ effects: { slideBackground: "noise", headingStyle: "glow", cardStyle: "neon" },
34
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3.5rem" }
35
+ },
36
+ "warm-earth": {
37
+ fonts: { heading: "DM Serif Display", body: "DM Sans", mono: "JetBrains Mono" },
38
+ colors: { bg: "#faf7f2", surface: "#f0ebe3", text: "#2c1810", accent: "#b45309", accentGlow: "rgba(180,83,9,0.2)", muted: "#78716c", gradient: "none" },
39
+ effects: { slideBackground: "noise", headingStyle: "plain", cardStyle: "flat" },
40
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3rem" }
41
+ },
42
+ "retro-terminal": {
43
+ fonts: { heading: "Space Mono", body: "Space Mono", mono: "Space Mono" },
44
+ colors: { bg: "#0a0a0a", surface: "#111111", text: "#33ff33", accent: "#33ff33", accentGlow: "rgba(51,255,51,0.3)", muted: "#1a8f1a", gradient: "none" },
45
+ effects: { slideBackground: "grid", headingStyle: "glow", cardStyle: "bordered" },
46
+ spacing: { slidePadding: "40px 60px", gap: 24, headingSize: "2.5rem" }
47
+ },
48
+ "frosted-glass": {
49
+ fonts: { heading: "Outfit", body: "DM Sans", mono: "JetBrains Mono" },
50
+ colors: { bg: "#0f172a", surface: "#1e293b", text: "#f1f5f9", accent: "#818cf8", accentGlow: "rgba(129,140,248,0.3)", muted: "#94a3b8", gradient: "linear-gradient(135deg, #0f172a, #1e1b4b, #0f172a)" },
51
+ effects: { slideBackground: "aurora", headingStyle: "gradient-text", cardStyle: "glass" },
52
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "3.5rem" }
53
+ },
54
+ "brutalist": {
55
+ fonts: { heading: "Instrument Serif", body: "DM Sans", mono: "Space Mono" },
56
+ colors: { bg: "#fffff0", surface: "#f5f5dc", text: "#000000", accent: "#dc2626", accentGlow: "rgba(220,38,38,0.2)", muted: "#525252", gradient: "none" },
57
+ effects: { slideBackground: "solid", headingStyle: "plain", cardStyle: "bordered" },
58
+ spacing: { slidePadding: "60px 80px", gap: 32, headingSize: "4rem" }
59
+ }
60
+ };
61
+
62
+ // ── Token sanitization ──
63
+ function _sanitizeDeckToken(value) {
64
+ if (typeof value !== "string") return value;
65
+ return value.replace(/[;{}]/g, "").replace(/expression\\s*\\(/gi, "").replace(/javascript\\s*:/gi, "").replace(/url\\s*\\(/gi, "blocked(");
66
+ }
67
+
68
+ // ── CSS generation from design tokens ──
69
+ function _buildDeckTokenCSS(design) {
70
+ if (!design) return "";
71
+ var c = design.colors || {};
72
+ var f = design.fonts || {};
73
+ var s = design.spacing || {};
74
+ var lines = [":host {"];
75
+ if (c.bg) lines.push(" --deck-bg: " + _sanitizeDeckToken(c.bg) + ";");
76
+ if (c.surface) lines.push(" --deck-surface: " + _sanitizeDeckToken(c.surface) + ";");
77
+ if (c.text) lines.push(" --deck-text: " + _sanitizeDeckToken(c.text) + ";");
78
+ if (c.accent) lines.push(" --deck-accent: " + _sanitizeDeckToken(c.accent) + ";");
79
+ if (c.accentGlow) lines.push(" --deck-accent-glow: " + _sanitizeDeckToken(c.accentGlow) + ";");
80
+ if (c.muted) lines.push(" --deck-muted: " + _sanitizeDeckToken(c.muted) + ";");
81
+ if (c.gradient) lines.push(" --deck-gradient: " + _sanitizeDeckToken(c.gradient) + ";");
82
+ if (f.heading) lines.push(" --deck-font-heading: " + _sanitizeDeckToken(f.heading) + ";");
83
+ if (f.body) lines.push(" --deck-font-body: " + _sanitizeDeckToken(f.body) + ";");
84
+ if (f.mono) lines.push(" --deck-font-mono: " + _sanitizeDeckToken(f.mono) + ";");
85
+ if (s.slidePadding) lines.push(" --deck-slide-padding: " + _sanitizeDeckToken(s.slidePadding) + ";");
86
+ if (s.headingSize) lines.push(" --deck-heading-size: " + _sanitizeDeckToken(s.headingSize) + ";");
87
+ if (s.gap) lines.push(" --deck-gap: " + (parseInt(s.gap) || 32) + "px;");
88
+ lines.push("}");
89
+ return lines.join("\\n");
90
+ }
91
+
92
+ // ── Allowed font URL origins ──
93
+ var _FONT_URL_WHITELIST = ["fonts.googleapis.com", "fonts.gstatic.com", "use.typekit.net", "cdnjs.cloudflare.com"];
94
+ function _isSafeFontURL(url) {
95
+ try {
96
+ var u = new URL(url);
97
+ return _FONT_URL_WHITELIST.some(function(h) { return u.hostname === h || u.hostname.endsWith("." + h); });
98
+ } catch(e) { return false; }
99
+ }
100
+
101
+ function renderAupDeck(node) {
102
+ var p = node.props || {};
103
+ var s = node.state || {};
104
+ var transition = p.transition || "fade";
105
+ var transitionDuration = p.transitionDuration || 600;
106
+ var autoPlay = !!p.autoPlay;
107
+ var autoPlayInterval = p.autoPlayInterval || 5000;
108
+ var loop = !!p.loop;
109
+ var showControls = p.showControls !== false;
110
+ var showProgress = p.showProgress !== false;
111
+ var keyboard = p.keyboard !== false;
112
+ var aspectRatio = p.aspectRatio || "auto";
113
+ var presentation = !!p.presentation;
114
+ var slides = node.children || [];
115
+ var total = slides.length;
116
+ var current = Math.max(0, Math.min(parseInt(s.current) || 0, total - 1));
117
+ var autoTimer = null;
118
+
119
+ // ── Resolve design tokens ──
120
+ var preset = p.designPreset ? _DECK_PRESETS[p.designPreset] : null;
121
+ var design = {};
122
+ if (preset) {
123
+ design.fonts = Object.assign({}, preset.fonts);
124
+ design.colors = Object.assign({}, preset.colors);
125
+ design.effects = Object.assign({}, preset.effects);
126
+ design.spacing = Object.assign({}, preset.spacing);
127
+ }
128
+ if (p.design) {
129
+ if (p.design.fonts) design.fonts = Object.assign(design.fonts || {}, p.design.fonts);
130
+ if (p.design.colors) design.colors = Object.assign(design.colors || {}, p.design.colors);
131
+ if (p.design.effects) design.effects = Object.assign(design.effects || {}, p.design.effects);
132
+ if (p.design.spacing) design.spacing = Object.assign(design.spacing || {}, p.design.spacing);
133
+ }
134
+ var effects = (design && design.effects) || {};
135
+
136
+ // ── Shadow DOM host ──
137
+ var host = document.createElement("div");
138
+ host.className = "aup-deck-host";
139
+ host.style.width = "100%";
140
+ var shadow = host.attachShadow({ mode: "open" });
141
+
142
+ // 1. Clone main page CSS into shadow (so child primitives render correctly)
143
+ var mainStyle = document.querySelector("head > style");
144
+ if (mainStyle) {
145
+ var clonedStyle = document.createElement("style");
146
+ clonedStyle.textContent = mainStyle.textContent;
147
+ shadow.appendChild(clonedStyle);
148
+ }
149
+
150
+ // 2. Inject deck shadow CSS (from DECK_SHADOW_CSS constant embedded at build time)
151
+ var deckStyle = document.createElement("style");
152
+ deckStyle.textContent = _DECK_SHADOW_CSS;
153
+ shadow.appendChild(deckStyle);
154
+
155
+ // 3. Inject design token CSS
156
+ if (design && (design.colors || design.fonts || design.spacing)) {
157
+ var tokenStyle = document.createElement("style");
158
+ tokenStyle.textContent = _buildDeckTokenCSS(design);
159
+ shadow.appendChild(tokenStyle);
160
+ }
161
+
162
+ // 4. Load font URLs
163
+ var fontUrls = (design.fonts && design.fonts.urls) || [];
164
+ for (var fi = 0; fi < fontUrls.length; fi++) {
165
+ if (_isSafeFontURL(fontUrls[fi])) {
166
+ var link = document.createElement("link");
167
+ link.rel = "stylesheet";
168
+ link.href = fontUrls[fi];
169
+ shadow.appendChild(link);
170
+ }
171
+ }
172
+
173
+ // ── Build deck inside shadow ──
174
+ var el = document.createElement("div");
175
+ el.className = "aup-deck";
176
+ el.setAttribute("data-transition", transition);
177
+ el.style.setProperty("--deck-transition-duration", transitionDuration + "ms");
178
+
179
+ if (presentation) {
180
+ el.setAttribute("data-presentation", "true");
181
+ host.style.height = "100vh";
182
+ el.style.height = "100%";
183
+ }
184
+ if (aspectRatio === "16:9") el.setAttribute("data-aspect", "16-9");
185
+ else if (aspectRatio === "4:3") el.setAttribute("data-aspect", "4-3");
186
+
187
+ // Slide background effect
188
+ if (effects.slideBackground && effects.slideBackground !== "solid") {
189
+ el.setAttribute("data-slide-bg", effects.slideBackground);
190
+ }
191
+
192
+ // Heading style class
193
+ if (effects.headingStyle === "gradient-text") el.classList.add("deck-heading-gradient");
194
+ else if (effects.headingStyle === "glow") el.classList.add("deck-heading-glow");
195
+
196
+ // Card style class
197
+ if (effects.cardStyle === "glass") el.classList.add("deck-card-glass");
198
+ else if (effects.cardStyle === "neon") el.classList.add("deck-card-neon");
199
+ else if (effects.cardStyle === "bordered") el.classList.add("deck-card-bordered");
200
+
201
+ // ── Viewport ──
202
+ var viewport = document.createElement("div");
203
+ viewport.className = "aup-deck-viewport";
204
+
205
+ for (var i = 0; i < total; i++) {
206
+ var slideEl = document.createElement("div");
207
+ slideEl.className = "aup-deck-slide";
208
+ if (i === current) slideEl.classList.add("active");
209
+ var childEl = renderAupNode(slides[i]);
210
+ if (childEl) slideEl.appendChild(childEl);
211
+ viewport.appendChild(slideEl);
212
+ }
213
+ el.appendChild(viewport);
214
+
215
+ // ── Controls ──
216
+ if (showControls && total > 1) {
217
+ var controls = document.createElement("div");
218
+ controls.className = "aup-deck-controls";
219
+ var prevBtn = document.createElement("button");
220
+ prevBtn.className = "aup-deck-prev";
221
+ prevBtn.innerHTML = _ICON_PATHS["arrow-left"] ?
222
+ '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' + _ICON_PATHS["arrow-left"] + '</svg>' :
223
+ '&#8592;';
224
+ prevBtn.onclick = function(e) { e.stopPropagation(); goTo(current - 1); };
225
+ controls.appendChild(prevBtn);
226
+
227
+ var nextBtn = document.createElement("button");
228
+ nextBtn.className = "aup-deck-next";
229
+ nextBtn.innerHTML = _ICON_PATHS["arrow-right"] ?
230
+ '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' + _ICON_PATHS["arrow-right"] + '</svg>' :
231
+ '&#8594;';
232
+ nextBtn.onclick = function(e) { e.stopPropagation(); goTo(current + 1); };
233
+ controls.appendChild(nextBtn);
234
+ el.appendChild(controls);
235
+
236
+ // ── Dots ──
237
+ var dots = document.createElement("div");
238
+ dots.className = "aup-deck-dots";
239
+ for (var d = 0; d < total; d++) {
240
+ (function(idx) {
241
+ var dot = document.createElement("button");
242
+ dot.className = "aup-deck-dot" + (idx === current ? " active" : "");
243
+ dot.onclick = function(e) { e.stopPropagation(); goTo(idx); };
244
+ dots.appendChild(dot);
245
+ })(d);
246
+ }
247
+ el.appendChild(dots);
248
+ }
249
+
250
+ // ── Progress bar ──
251
+ if (showProgress && total > 1) {
252
+ var progressBar = document.createElement("div");
253
+ progressBar.className = "aup-deck-progress";
254
+ var progressFill = document.createElement("div");
255
+ progressFill.className = "aup-deck-progress-fill";
256
+ progressFill.style.width = ((current + 1) / total * 100) + "%";
257
+ progressBar.appendChild(progressFill);
258
+ el.appendChild(progressBar);
259
+ }
260
+
261
+ shadow.appendChild(el);
262
+
263
+ // ── Navigation logic ──
264
+ function goTo(idx) {
265
+ if (total === 0) return;
266
+ var prev = current;
267
+ if (idx < 0) { idx = loop ? total - 1 : 0; }
268
+ if (idx >= total) {
269
+ if (loop) { idx = 0; }
270
+ else {
271
+ emitDeckEvent(node, "complete", { current: current, total: total });
272
+ return;
273
+ }
274
+ }
275
+ if (idx === current) return;
276
+ current = idx;
277
+ updateSlides(prev);
278
+ emitDeckEvent(node, "change", { current: current, previous: prev });
279
+ resetAutoPlay();
280
+ }
281
+
282
+ function updateSlides(prev) {
283
+ var slideEls = viewport.children;
284
+ for (var j = 0; j < slideEls.length; j++) {
285
+ var sEl = slideEls[j];
286
+ sEl.classList.remove("active", "prev", "entering");
287
+ if (j === current) {
288
+ sEl.classList.add("active", "entering");
289
+ triggerSlideAnimations(sEl);
290
+ } else if (j === prev) {
291
+ sEl.classList.add("prev");
292
+ }
293
+ }
294
+ setTimeout(function() {
295
+ var active = viewport.children[current];
296
+ if (active) active.classList.remove("entering");
297
+ }, transitionDuration);
298
+
299
+ // Update dots
300
+ var dotEls = el.querySelectorAll(".aup-deck-dot");
301
+ for (var k = 0; k < dotEls.length; k++) {
302
+ dotEls[k].classList.toggle("active", k === current);
303
+ }
304
+ // Update progress
305
+ var fill = el.querySelector(".aup-deck-progress-fill");
306
+ if (fill) fill.style.width = ((current + 1) / total * 100) + "%";
307
+ }
308
+
309
+ function triggerSlideAnimations(slideEl) {
310
+ var animatedEls = slideEl.querySelectorAll("[data-animate]");
311
+ for (var a = 0; a < animatedEls.length; a++) {
312
+ var ae = animatedEls[a];
313
+ ae.classList.remove("aup-animated");
314
+ void ae.offsetWidth;
315
+ ae.classList.add("aup-animated");
316
+ }
317
+ // Also trigger count-up for elements inside shadow
318
+ var countEls = slideEl.querySelectorAll('[data-animate="count-up"]');
319
+ for (var cu = 0; cu < countEls.length; cu++) {
320
+ _startCountUp(countEls[cu]);
321
+ }
322
+ }
323
+
324
+ // Trigger animations on the initial slide
325
+ setTimeout(function() {
326
+ var activeSlide = viewport.children[current];
327
+ if (activeSlide) triggerSlideAnimations(activeSlide);
328
+ }, 100);
329
+
330
+ function emitDeckEvent(n, eventName, detail) {
331
+ if (!n.events || !n.events[eventName]) return;
332
+ var ev = n.events[eventName];
333
+ if (ev.exec && ws && ws.readyState === 1) {
334
+ ws.send(JSON.stringify({
335
+ type: "aup_event",
336
+ nodeId: n.id,
337
+ event: eventName,
338
+ payload: Object.assign({}, ev.args || {}, detail)
339
+ }));
340
+ }
341
+ }
342
+
343
+ // ── AutoPlay ──
344
+ function resetAutoPlay() {
345
+ if (autoTimer) clearInterval(autoTimer);
346
+ if (autoPlay && total > 1) {
347
+ autoTimer = setInterval(function() { goTo(current + 1); }, autoPlayInterval);
348
+ }
349
+ }
350
+ resetAutoPlay();
351
+
352
+ // Pause on hover
353
+ host.onmouseenter = function() { if (autoTimer) clearInterval(autoTimer); };
354
+ host.onmouseleave = function() { resetAutoPlay(); };
355
+
356
+ // ── Keyboard (on host, delegates into shadow) ──
357
+ if (keyboard) {
358
+ host.setAttribute("tabindex", "0");
359
+ host.style.outline = "none";
360
+ host.onkeydown = function(e) {
361
+ switch (e.key) {
362
+ case "ArrowRight": case "ArrowDown": case " ":
363
+ e.preventDefault(); goTo(current + 1); break;
364
+ case "ArrowLeft": case "ArrowUp":
365
+ e.preventDefault(); goTo(current - 1); break;
366
+ case "f": case "F":
367
+ e.preventDefault();
368
+ if (document.fullscreenElement) document.exitFullscreen();
369
+ else el.requestFullscreen && el.requestFullscreen();
370
+ break;
371
+ case "Escape":
372
+ if (document.fullscreenElement) document.exitFullscreen();
373
+ break;
374
+ default:
375
+ var num = parseInt(e.key);
376
+ if (num >= 1 && num <= 9 && num <= total) {
377
+ e.preventDefault();
378
+ goTo(num - 1);
379
+ }
380
+ }
381
+ };
382
+ }
383
+
384
+ return host;
385
+ }
386
+
387
+ `;
388
+
389
+ //#endregion
390
+ exports.DECK_JS = DECK_JS;