@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,137 @@
1
+ //#region src/web-page/renderers/calendar.ts
2
+ const CALENDAR_JS = `
3
+ // ── Calendar Primitive (Pure CSS/JS) ──
4
+ function renderAupCalendar(node) {
5
+ var el = document.createElement("div");
6
+ el.className = "aup-calendar";
7
+ var p = node.props || {};
8
+ var mode = p.mode || "month";
9
+ var events = p.events || [];
10
+ var currentDate = new Date();
11
+
12
+ if (mode === "month" || mode === "week" || mode === "day") {
13
+ renderMonthView();
14
+ } else if (mode === "agenda") {
15
+ renderAgendaView();
16
+ }
17
+
18
+ function renderMonthView() {
19
+ el.innerHTML = "";
20
+ var header = document.createElement("div");
21
+ header.className = "aup-calendar-header";
22
+ var prevBtn = document.createElement("button");
23
+ prevBtn.textContent = "\\u25C0";
24
+ prevBtn.onclick = function() { currentDate.setMonth(currentDate.getMonth() - 1); renderMonthView(); };
25
+ var nextBtn = document.createElement("button");
26
+ nextBtn.textContent = "\\u25B6";
27
+ nextBtn.onclick = function() { currentDate.setMonth(currentDate.getMonth() + 1); renderMonthView(); };
28
+ var title = document.createElement("span");
29
+ title.className = "aup-calendar-title";
30
+ title.textContent = currentDate.toLocaleDateString(p.locale || undefined, { year: "numeric", month: "long" });
31
+ header.appendChild(prevBtn);
32
+ header.appendChild(title);
33
+ header.appendChild(nextBtn);
34
+ el.appendChild(header);
35
+
36
+ var grid = document.createElement("div");
37
+ grid.className = "aup-calendar-grid";
38
+
39
+ var dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
40
+ for (var d = 0; d < 7; d++) {
41
+ var dh = document.createElement("div");
42
+ dh.className = "aup-calendar-day-header";
43
+ dh.textContent = dayNames[d];
44
+ grid.appendChild(dh);
45
+ }
46
+
47
+ var year = currentDate.getFullYear();
48
+ var month = currentDate.getMonth();
49
+ var firstDay = new Date(year, month, 1).getDay();
50
+ var daysInMonth = new Date(year, month + 1, 0).getDate();
51
+ var today = new Date();
52
+
53
+ // Previous month padding
54
+ var prevMonthDays = new Date(year, month, 0).getDate();
55
+ for (var i = firstDay - 1; i >= 0; i--) {
56
+ var dayEl = document.createElement("div");
57
+ dayEl.className = "aup-calendar-day other-month";
58
+ dayEl.textContent = String(prevMonthDays - i);
59
+ grid.appendChild(dayEl);
60
+ }
61
+
62
+ // Current month days
63
+ for (var day = 1; day <= daysInMonth; day++) {
64
+ var dayEl = document.createElement("div");
65
+ dayEl.className = "aup-calendar-day";
66
+ if (day === today.getDate() && month === today.getMonth() && year === today.getFullYear()) {
67
+ dayEl.classList.add("today");
68
+ }
69
+ dayEl.textContent = String(day);
70
+
71
+ // Events on this day
72
+ var dateStr = year + "-" + String(month + 1).padStart(2, "0") + "-" + String(day).padStart(2, "0");
73
+ for (var e = 0; e < events.length; e++) {
74
+ if (events[e].date === dateStr) {
75
+ var evtEl = document.createElement("span");
76
+ evtEl.className = "aup-calendar-event";
77
+ evtEl.setAttribute("data-intent", events[e].intent || "info");
78
+ evtEl.textContent = _escapeHtml(String(events[e].label || ""));
79
+ dayEl.appendChild(evtEl);
80
+ }
81
+ }
82
+ grid.appendChild(dayEl);
83
+ }
84
+
85
+ // Next month padding
86
+ var totalCells = firstDay + daysInMonth;
87
+ var remaining = (7 - (totalCells % 7)) % 7;
88
+ for (var i = 1; i <= remaining; i++) {
89
+ var dayEl = document.createElement("div");
90
+ dayEl.className = "aup-calendar-day other-month";
91
+ dayEl.textContent = String(i);
92
+ grid.appendChild(dayEl);
93
+ }
94
+
95
+ el.appendChild(grid);
96
+ }
97
+
98
+ function renderAgendaView() {
99
+ el.innerHTML = "";
100
+ var header = document.createElement("div");
101
+ header.className = "aup-calendar-header";
102
+ var title = document.createElement("span");
103
+ title.className = "aup-calendar-title";
104
+ title.textContent = "Agenda";
105
+ header.appendChild(title);
106
+ el.appendChild(header);
107
+
108
+ var sorted = events.slice().sort(function(a, b) { return (a.date || "").localeCompare(b.date || ""); });
109
+ if (sorted.length === 0) {
110
+ var empty = document.createElement("div");
111
+ empty.style.cssText = "color: var(--dim); text-align: center; padding: 20px;";
112
+ empty.textContent = "No events";
113
+ el.appendChild(empty);
114
+ } else {
115
+ for (var i = 0; i < sorted.length; i++) {
116
+ var item = document.createElement("div");
117
+ item.style.cssText = "display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--border);";
118
+ var date = document.createElement("span");
119
+ date.style.cssText = "font-size: 0.8em; color: var(--dim); min-width: 80px;";
120
+ date.textContent = sorted[i].date || "";
121
+ var label = document.createElement("span");
122
+ label.textContent = _escapeHtml(String(sorted[i].label || ""));
123
+ item.appendChild(date);
124
+ item.appendChild(label);
125
+ el.appendChild(item);
126
+ }
127
+ }
128
+ }
129
+
130
+ return el;
131
+ }
132
+
133
+ `;
134
+
135
+ //#endregion
136
+ export { CALENDAR_JS };
137
+ //# sourceMappingURL=calendar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.mjs","names":[],"sources":["../../../src/web-page/renderers/calendar.ts"],"sourcesContent":["export const CALENDAR_JS = `\n // ── Calendar Primitive (Pure CSS/JS) ──\n function renderAupCalendar(node) {\n var el = document.createElement(\"div\");\n el.className = \"aup-calendar\";\n var p = node.props || {};\n var mode = p.mode || \"month\";\n var events = p.events || [];\n var currentDate = new Date();\n\n if (mode === \"month\" || mode === \"week\" || mode === \"day\") {\n renderMonthView();\n } else if (mode === \"agenda\") {\n renderAgendaView();\n }\n\n function renderMonthView() {\n el.innerHTML = \"\";\n var header = document.createElement(\"div\");\n header.className = \"aup-calendar-header\";\n var prevBtn = document.createElement(\"button\");\n prevBtn.textContent = \"\\\\u25C0\";\n prevBtn.onclick = function() { currentDate.setMonth(currentDate.getMonth() - 1); renderMonthView(); };\n var nextBtn = document.createElement(\"button\");\n nextBtn.textContent = \"\\\\u25B6\";\n nextBtn.onclick = function() { currentDate.setMonth(currentDate.getMonth() + 1); renderMonthView(); };\n var title = document.createElement(\"span\");\n title.className = \"aup-calendar-title\";\n title.textContent = currentDate.toLocaleDateString(p.locale || undefined, { year: \"numeric\", month: \"long\" });\n header.appendChild(prevBtn);\n header.appendChild(title);\n header.appendChild(nextBtn);\n el.appendChild(header);\n\n var grid = document.createElement(\"div\");\n grid.className = \"aup-calendar-grid\";\n\n var dayNames = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\n for (var d = 0; d < 7; d++) {\n var dh = document.createElement(\"div\");\n dh.className = \"aup-calendar-day-header\";\n dh.textContent = dayNames[d];\n grid.appendChild(dh);\n }\n\n var year = currentDate.getFullYear();\n var month = currentDate.getMonth();\n var firstDay = new Date(year, month, 1).getDay();\n var daysInMonth = new Date(year, month + 1, 0).getDate();\n var today = new Date();\n\n // Previous month padding\n var prevMonthDays = new Date(year, month, 0).getDate();\n for (var i = firstDay - 1; i >= 0; i--) {\n var dayEl = document.createElement(\"div\");\n dayEl.className = \"aup-calendar-day other-month\";\n dayEl.textContent = String(prevMonthDays - i);\n grid.appendChild(dayEl);\n }\n\n // Current month days\n for (var day = 1; day <= daysInMonth; day++) {\n var dayEl = document.createElement(\"div\");\n dayEl.className = \"aup-calendar-day\";\n if (day === today.getDate() && month === today.getMonth() && year === today.getFullYear()) {\n dayEl.classList.add(\"today\");\n }\n dayEl.textContent = String(day);\n\n // Events on this day\n var dateStr = year + \"-\" + String(month + 1).padStart(2, \"0\") + \"-\" + String(day).padStart(2, \"0\");\n for (var e = 0; e < events.length; e++) {\n if (events[e].date === dateStr) {\n var evtEl = document.createElement(\"span\");\n evtEl.className = \"aup-calendar-event\";\n evtEl.setAttribute(\"data-intent\", events[e].intent || \"info\");\n evtEl.textContent = _escapeHtml(String(events[e].label || \"\"));\n dayEl.appendChild(evtEl);\n }\n }\n grid.appendChild(dayEl);\n }\n\n // Next month padding\n var totalCells = firstDay + daysInMonth;\n var remaining = (7 - (totalCells % 7)) % 7;\n for (var i = 1; i <= remaining; i++) {\n var dayEl = document.createElement(\"div\");\n dayEl.className = \"aup-calendar-day other-month\";\n dayEl.textContent = String(i);\n grid.appendChild(dayEl);\n }\n\n el.appendChild(grid);\n }\n\n function renderAgendaView() {\n el.innerHTML = \"\";\n var header = document.createElement(\"div\");\n header.className = \"aup-calendar-header\";\n var title = document.createElement(\"span\");\n title.className = \"aup-calendar-title\";\n title.textContent = \"Agenda\";\n header.appendChild(title);\n el.appendChild(header);\n\n var sorted = events.slice().sort(function(a, b) { return (a.date || \"\").localeCompare(b.date || \"\"); });\n if (sorted.length === 0) {\n var empty = document.createElement(\"div\");\n empty.style.cssText = \"color: var(--dim); text-align: center; padding: 20px;\";\n empty.textContent = \"No events\";\n el.appendChild(empty);\n } else {\n for (var i = 0; i < sorted.length; i++) {\n var item = document.createElement(\"div\");\n item.style.cssText = \"display: flex; align-items: center; gap: 8px; padding: 6px 0; border-bottom: 1px solid var(--border);\";\n var date = document.createElement(\"span\");\n date.style.cssText = \"font-size: 0.8em; color: var(--dim); min-width: 80px;\";\n date.textContent = sorted[i].date || \"\";\n var label = document.createElement(\"span\");\n label.textContent = _escapeHtml(String(sorted[i].label || \"\"));\n item.appendChild(date);\n item.appendChild(label);\n el.appendChild(item);\n }\n }\n }\n\n return el;\n }\n\n`;\n"],"mappings":";AAAA,MAAa,cAAc"}
@@ -0,0 +1,173 @@
1
+
2
+ //#region src/web-page/renderers/canvas.ts
3
+ const CANVAS_JS = `
4
+ // ── Canvas Subsystem (HTML5 Canvas drawing) ──
5
+ function renderAupCanvas(node) {
6
+ var el = document.createElement("div");
7
+ el.className = "aup-canvas";
8
+ var p = node.props || {};
9
+ var width = parseInt(p.width) || 800;
10
+ var height = parseInt(p.height) || 400;
11
+ var bgColor = p.background || "#ffffff";
12
+
13
+ // Toolbar
14
+ var toolbar = document.createElement("div");
15
+ toolbar.className = "aup-canvas-toolbar";
16
+
17
+ var tools = [
18
+ { id: "pen", label: "Pen" },
19
+ { id: "line", label: "Line" },
20
+ { id: "rect", label: "Rect" },
21
+ { id: "circle", label: "Circle" },
22
+ { id: "eraser", label: "Eraser" },
23
+ ];
24
+ var activeTool = "pen";
25
+ var toolBtns = {};
26
+
27
+ for (var t = 0; t < tools.length; t++) {
28
+ (function(tool) {
29
+ var btn = document.createElement("button");
30
+ btn.textContent = tool.label;
31
+ if (tool.id === activeTool) btn.classList.add("active");
32
+ btn.onclick = function() {
33
+ activeTool = tool.id;
34
+ for (var k in toolBtns) toolBtns[k].classList.remove("active");
35
+ btn.classList.add("active");
36
+ };
37
+ toolbar.appendChild(btn);
38
+ toolBtns[tool.id] = btn;
39
+ })(tools[t]);
40
+ }
41
+
42
+ // Separator
43
+ var sep = document.createElement("div");
44
+ sep.className = "separator";
45
+ toolbar.appendChild(sep);
46
+
47
+ // Color picker
48
+ var colorInput = document.createElement("input");
49
+ colorInput.type = "color";
50
+ colorInput.value = p.strokeColor || "#000000";
51
+ toolbar.appendChild(colorInput);
52
+
53
+ // Line width
54
+ var sizeInput = document.createElement("input");
55
+ sizeInput.type = "range";
56
+ sizeInput.min = "1";
57
+ sizeInput.max = "20";
58
+ sizeInput.value = String(p.strokeWidth || 2);
59
+ toolbar.appendChild(sizeInput);
60
+
61
+ // Clear button
62
+ var sep2 = document.createElement("div");
63
+ sep2.className = "separator";
64
+ toolbar.appendChild(sep2);
65
+ var clearBtn = document.createElement("button");
66
+ clearBtn.textContent = "Clear";
67
+ clearBtn.onclick = function() {
68
+ ctx.fillStyle = bgColor;
69
+ ctx.fillRect(0, 0, width, height);
70
+ strokes = [];
71
+ };
72
+ toolbar.appendChild(clearBtn);
73
+
74
+ el.appendChild(toolbar);
75
+
76
+ // Canvas area
77
+ var area = document.createElement("div");
78
+ area.className = "aup-canvas-area";
79
+ var canvas = document.createElement("canvas");
80
+ canvas.width = width;
81
+ canvas.height = height;
82
+ canvas.style.width = "100%";
83
+ canvas.style.height = "auto";
84
+ area.appendChild(canvas);
85
+ el.appendChild(area);
86
+
87
+ var ctx = canvas.getContext("2d");
88
+ ctx.fillStyle = bgColor;
89
+ ctx.fillRect(0, 0, width, height);
90
+
91
+ var drawing = false;
92
+ var startX = 0, startY = 0;
93
+ var strokes = [];
94
+ var snapshot = null;
95
+
96
+ function getPos(e) {
97
+ var rect = canvas.getBoundingClientRect();
98
+ var scaleX = canvas.width / rect.width;
99
+ var scaleY = canvas.height / rect.height;
100
+ return { x: (e.clientX - rect.left) * scaleX, y: (e.clientY - rect.top) * scaleY };
101
+ }
102
+
103
+ canvas.addEventListener("mousedown", function(e) {
104
+ drawing = true;
105
+ var pos = getPos(e);
106
+ startX = pos.x;
107
+ startY = pos.y;
108
+ if (activeTool === "pen" || activeTool === "eraser") {
109
+ ctx.beginPath();
110
+ ctx.moveTo(pos.x, pos.y);
111
+ } else {
112
+ snapshot = ctx.getImageData(0, 0, width, height);
113
+ }
114
+ });
115
+
116
+ canvas.addEventListener("mousemove", function(e) {
117
+ if (!drawing) return;
118
+ var pos = getPos(e);
119
+ var lw = parseInt(sizeInput.value) || 2;
120
+ if (activeTool === "pen") {
121
+ ctx.strokeStyle = colorInput.value;
122
+ ctx.lineWidth = lw;
123
+ ctx.lineCap = "round";
124
+ ctx.lineJoin = "round";
125
+ ctx.lineTo(pos.x, pos.y);
126
+ ctx.stroke();
127
+ } else if (activeTool === "eraser") {
128
+ ctx.strokeStyle = bgColor;
129
+ ctx.lineWidth = lw * 4;
130
+ ctx.lineCap = "round";
131
+ ctx.lineTo(pos.x, pos.y);
132
+ ctx.stroke();
133
+ } else if (snapshot) {
134
+ ctx.putImageData(snapshot, 0, 0);
135
+ ctx.strokeStyle = colorInput.value;
136
+ ctx.lineWidth = lw;
137
+ ctx.lineCap = "round";
138
+ if (activeTool === "line") {
139
+ ctx.beginPath();
140
+ ctx.moveTo(startX, startY);
141
+ ctx.lineTo(pos.x, pos.y);
142
+ ctx.stroke();
143
+ } else if (activeTool === "rect") {
144
+ ctx.strokeRect(startX, startY, pos.x - startX, pos.y - startY);
145
+ } else if (activeTool === "circle") {
146
+ var rx = Math.abs(pos.x - startX) / 2;
147
+ var ry = Math.abs(pos.y - startY) / 2;
148
+ var cx = startX + (pos.x - startX) / 2;
149
+ var cy = startY + (pos.y - startY) / 2;
150
+ ctx.beginPath();
151
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
152
+ ctx.stroke();
153
+ }
154
+ }
155
+ });
156
+
157
+ canvas.addEventListener("mouseup", function() {
158
+ drawing = false;
159
+ snapshot = null;
160
+ });
161
+
162
+ canvas.addEventListener("mouseleave", function() {
163
+ drawing = false;
164
+ snapshot = null;
165
+ });
166
+
167
+ return el;
168
+ }
169
+
170
+ `;
171
+
172
+ //#endregion
173
+ exports.CANVAS_JS = CANVAS_JS;
@@ -0,0 +1,173 @@
1
+ //#region src/web-page/renderers/canvas.ts
2
+ const CANVAS_JS = `
3
+ // ── Canvas Subsystem (HTML5 Canvas drawing) ──
4
+ function renderAupCanvas(node) {
5
+ var el = document.createElement("div");
6
+ el.className = "aup-canvas";
7
+ var p = node.props || {};
8
+ var width = parseInt(p.width) || 800;
9
+ var height = parseInt(p.height) || 400;
10
+ var bgColor = p.background || "#ffffff";
11
+
12
+ // Toolbar
13
+ var toolbar = document.createElement("div");
14
+ toolbar.className = "aup-canvas-toolbar";
15
+
16
+ var tools = [
17
+ { id: "pen", label: "Pen" },
18
+ { id: "line", label: "Line" },
19
+ { id: "rect", label: "Rect" },
20
+ { id: "circle", label: "Circle" },
21
+ { id: "eraser", label: "Eraser" },
22
+ ];
23
+ var activeTool = "pen";
24
+ var toolBtns = {};
25
+
26
+ for (var t = 0; t < tools.length; t++) {
27
+ (function(tool) {
28
+ var btn = document.createElement("button");
29
+ btn.textContent = tool.label;
30
+ if (tool.id === activeTool) btn.classList.add("active");
31
+ btn.onclick = function() {
32
+ activeTool = tool.id;
33
+ for (var k in toolBtns) toolBtns[k].classList.remove("active");
34
+ btn.classList.add("active");
35
+ };
36
+ toolbar.appendChild(btn);
37
+ toolBtns[tool.id] = btn;
38
+ })(tools[t]);
39
+ }
40
+
41
+ // Separator
42
+ var sep = document.createElement("div");
43
+ sep.className = "separator";
44
+ toolbar.appendChild(sep);
45
+
46
+ // Color picker
47
+ var colorInput = document.createElement("input");
48
+ colorInput.type = "color";
49
+ colorInput.value = p.strokeColor || "#000000";
50
+ toolbar.appendChild(colorInput);
51
+
52
+ // Line width
53
+ var sizeInput = document.createElement("input");
54
+ sizeInput.type = "range";
55
+ sizeInput.min = "1";
56
+ sizeInput.max = "20";
57
+ sizeInput.value = String(p.strokeWidth || 2);
58
+ toolbar.appendChild(sizeInput);
59
+
60
+ // Clear button
61
+ var sep2 = document.createElement("div");
62
+ sep2.className = "separator";
63
+ toolbar.appendChild(sep2);
64
+ var clearBtn = document.createElement("button");
65
+ clearBtn.textContent = "Clear";
66
+ clearBtn.onclick = function() {
67
+ ctx.fillStyle = bgColor;
68
+ ctx.fillRect(0, 0, width, height);
69
+ strokes = [];
70
+ };
71
+ toolbar.appendChild(clearBtn);
72
+
73
+ el.appendChild(toolbar);
74
+
75
+ // Canvas area
76
+ var area = document.createElement("div");
77
+ area.className = "aup-canvas-area";
78
+ var canvas = document.createElement("canvas");
79
+ canvas.width = width;
80
+ canvas.height = height;
81
+ canvas.style.width = "100%";
82
+ canvas.style.height = "auto";
83
+ area.appendChild(canvas);
84
+ el.appendChild(area);
85
+
86
+ var ctx = canvas.getContext("2d");
87
+ ctx.fillStyle = bgColor;
88
+ ctx.fillRect(0, 0, width, height);
89
+
90
+ var drawing = false;
91
+ var startX = 0, startY = 0;
92
+ var strokes = [];
93
+ var snapshot = null;
94
+
95
+ function getPos(e) {
96
+ var rect = canvas.getBoundingClientRect();
97
+ var scaleX = canvas.width / rect.width;
98
+ var scaleY = canvas.height / rect.height;
99
+ return { x: (e.clientX - rect.left) * scaleX, y: (e.clientY - rect.top) * scaleY };
100
+ }
101
+
102
+ canvas.addEventListener("mousedown", function(e) {
103
+ drawing = true;
104
+ var pos = getPos(e);
105
+ startX = pos.x;
106
+ startY = pos.y;
107
+ if (activeTool === "pen" || activeTool === "eraser") {
108
+ ctx.beginPath();
109
+ ctx.moveTo(pos.x, pos.y);
110
+ } else {
111
+ snapshot = ctx.getImageData(0, 0, width, height);
112
+ }
113
+ });
114
+
115
+ canvas.addEventListener("mousemove", function(e) {
116
+ if (!drawing) return;
117
+ var pos = getPos(e);
118
+ var lw = parseInt(sizeInput.value) || 2;
119
+ if (activeTool === "pen") {
120
+ ctx.strokeStyle = colorInput.value;
121
+ ctx.lineWidth = lw;
122
+ ctx.lineCap = "round";
123
+ ctx.lineJoin = "round";
124
+ ctx.lineTo(pos.x, pos.y);
125
+ ctx.stroke();
126
+ } else if (activeTool === "eraser") {
127
+ ctx.strokeStyle = bgColor;
128
+ ctx.lineWidth = lw * 4;
129
+ ctx.lineCap = "round";
130
+ ctx.lineTo(pos.x, pos.y);
131
+ ctx.stroke();
132
+ } else if (snapshot) {
133
+ ctx.putImageData(snapshot, 0, 0);
134
+ ctx.strokeStyle = colorInput.value;
135
+ ctx.lineWidth = lw;
136
+ ctx.lineCap = "round";
137
+ if (activeTool === "line") {
138
+ ctx.beginPath();
139
+ ctx.moveTo(startX, startY);
140
+ ctx.lineTo(pos.x, pos.y);
141
+ ctx.stroke();
142
+ } else if (activeTool === "rect") {
143
+ ctx.strokeRect(startX, startY, pos.x - startX, pos.y - startY);
144
+ } else if (activeTool === "circle") {
145
+ var rx = Math.abs(pos.x - startX) / 2;
146
+ var ry = Math.abs(pos.y - startY) / 2;
147
+ var cx = startX + (pos.x - startX) / 2;
148
+ var cy = startY + (pos.y - startY) / 2;
149
+ ctx.beginPath();
150
+ ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);
151
+ ctx.stroke();
152
+ }
153
+ }
154
+ });
155
+
156
+ canvas.addEventListener("mouseup", function() {
157
+ drawing = false;
158
+ snapshot = null;
159
+ });
160
+
161
+ canvas.addEventListener("mouseleave", function() {
162
+ drawing = false;
163
+ snapshot = null;
164
+ });
165
+
166
+ return el;
167
+ }
168
+
169
+ `;
170
+
171
+ //#endregion
172
+ export { CANVAS_JS };
173
+ //# sourceMappingURL=canvas.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas.mjs","names":[],"sources":["../../../src/web-page/renderers/canvas.ts"],"sourcesContent":["export const CANVAS_JS = `\n // ── Canvas Subsystem (HTML5 Canvas drawing) ──\n function renderAupCanvas(node) {\n var el = document.createElement(\"div\");\n el.className = \"aup-canvas\";\n var p = node.props || {};\n var width = parseInt(p.width) || 800;\n var height = parseInt(p.height) || 400;\n var bgColor = p.background || \"#ffffff\";\n\n // Toolbar\n var toolbar = document.createElement(\"div\");\n toolbar.className = \"aup-canvas-toolbar\";\n\n var tools = [\n { id: \"pen\", label: \"Pen\" },\n { id: \"line\", label: \"Line\" },\n { id: \"rect\", label: \"Rect\" },\n { id: \"circle\", label: \"Circle\" },\n { id: \"eraser\", label: \"Eraser\" },\n ];\n var activeTool = \"pen\";\n var toolBtns = {};\n\n for (var t = 0; t < tools.length; t++) {\n (function(tool) {\n var btn = document.createElement(\"button\");\n btn.textContent = tool.label;\n if (tool.id === activeTool) btn.classList.add(\"active\");\n btn.onclick = function() {\n activeTool = tool.id;\n for (var k in toolBtns) toolBtns[k].classList.remove(\"active\");\n btn.classList.add(\"active\");\n };\n toolbar.appendChild(btn);\n toolBtns[tool.id] = btn;\n })(tools[t]);\n }\n\n // Separator\n var sep = document.createElement(\"div\");\n sep.className = \"separator\";\n toolbar.appendChild(sep);\n\n // Color picker\n var colorInput = document.createElement(\"input\");\n colorInput.type = \"color\";\n colorInput.value = p.strokeColor || \"#000000\";\n toolbar.appendChild(colorInput);\n\n // Line width\n var sizeInput = document.createElement(\"input\");\n sizeInput.type = \"range\";\n sizeInput.min = \"1\";\n sizeInput.max = \"20\";\n sizeInput.value = String(p.strokeWidth || 2);\n toolbar.appendChild(sizeInput);\n\n // Clear button\n var sep2 = document.createElement(\"div\");\n sep2.className = \"separator\";\n toolbar.appendChild(sep2);\n var clearBtn = document.createElement(\"button\");\n clearBtn.textContent = \"Clear\";\n clearBtn.onclick = function() {\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n strokes = [];\n };\n toolbar.appendChild(clearBtn);\n\n el.appendChild(toolbar);\n\n // Canvas area\n var area = document.createElement(\"div\");\n area.className = \"aup-canvas-area\";\n var canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = \"100%\";\n canvas.style.height = \"auto\";\n area.appendChild(canvas);\n el.appendChild(area);\n\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, width, height);\n\n var drawing = false;\n var startX = 0, startY = 0;\n var strokes = [];\n var snapshot = null;\n\n function getPos(e) {\n var rect = canvas.getBoundingClientRect();\n var scaleX = canvas.width / rect.width;\n var scaleY = canvas.height / rect.height;\n return { x: (e.clientX - rect.left) * scaleX, y: (e.clientY - rect.top) * scaleY };\n }\n\n canvas.addEventListener(\"mousedown\", function(e) {\n drawing = true;\n var pos = getPos(e);\n startX = pos.x;\n startY = pos.y;\n if (activeTool === \"pen\" || activeTool === \"eraser\") {\n ctx.beginPath();\n ctx.moveTo(pos.x, pos.y);\n } else {\n snapshot = ctx.getImageData(0, 0, width, height);\n }\n });\n\n canvas.addEventListener(\"mousemove\", function(e) {\n if (!drawing) return;\n var pos = getPos(e);\n var lw = parseInt(sizeInput.value) || 2;\n if (activeTool === \"pen\") {\n ctx.strokeStyle = colorInput.value;\n ctx.lineWidth = lw;\n ctx.lineCap = \"round\";\n ctx.lineJoin = \"round\";\n ctx.lineTo(pos.x, pos.y);\n ctx.stroke();\n } else if (activeTool === \"eraser\") {\n ctx.strokeStyle = bgColor;\n ctx.lineWidth = lw * 4;\n ctx.lineCap = \"round\";\n ctx.lineTo(pos.x, pos.y);\n ctx.stroke();\n } else if (snapshot) {\n ctx.putImageData(snapshot, 0, 0);\n ctx.strokeStyle = colorInput.value;\n ctx.lineWidth = lw;\n ctx.lineCap = \"round\";\n if (activeTool === \"line\") {\n ctx.beginPath();\n ctx.moveTo(startX, startY);\n ctx.lineTo(pos.x, pos.y);\n ctx.stroke();\n } else if (activeTool === \"rect\") {\n ctx.strokeRect(startX, startY, pos.x - startX, pos.y - startY);\n } else if (activeTool === \"circle\") {\n var rx = Math.abs(pos.x - startX) / 2;\n var ry = Math.abs(pos.y - startY) / 2;\n var cx = startX + (pos.x - startX) / 2;\n var cy = startY + (pos.y - startY) / 2;\n ctx.beginPath();\n ctx.ellipse(cx, cy, rx, ry, 0, 0, Math.PI * 2);\n ctx.stroke();\n }\n }\n });\n\n canvas.addEventListener(\"mouseup\", function() {\n drawing = false;\n snapshot = null;\n });\n\n canvas.addEventListener(\"mouseleave\", function() {\n drawing = false;\n snapshot = null;\n });\n\n return el;\n }\n\n`;\n"],"mappings":";AAAA,MAAa,YAAY"}
@@ -0,0 +1,25 @@
1
+
2
+ //#region src/web-page/renderers/cdn-loader.ts
3
+ const CDN_LOADER_JS = `
4
+ // ── CDN Lazy-Load Utilities ──
5
+ var _loadedScripts = {};
6
+ function loadScript(url, cb) {
7
+ if (_loadedScripts[url]) { if (cb) cb(); return; }
8
+ var s = document.createElement("script");
9
+ s.src = url;
10
+ s.onload = function() { _loadedScripts[url] = true; if (cb) cb(); };
11
+ s.onerror = function() { console.error("Failed to load: " + url); };
12
+ document.head.appendChild(s);
13
+ }
14
+ function loadCSS(url) {
15
+ if (document.querySelector('link[href="' + url + '"]')) return;
16
+ var l = document.createElement("link");
17
+ l.rel = "stylesheet";
18
+ l.href = url;
19
+ document.head.appendChild(l);
20
+ }
21
+
22
+ `;
23
+
24
+ //#endregion
25
+ exports.CDN_LOADER_JS = CDN_LOADER_JS;
@@ -0,0 +1,25 @@
1
+ //#region src/web-page/renderers/cdn-loader.ts
2
+ const CDN_LOADER_JS = `
3
+ // ── CDN Lazy-Load Utilities ──
4
+ var _loadedScripts = {};
5
+ function loadScript(url, cb) {
6
+ if (_loadedScripts[url]) { if (cb) cb(); return; }
7
+ var s = document.createElement("script");
8
+ s.src = url;
9
+ s.onload = function() { _loadedScripts[url] = true; if (cb) cb(); };
10
+ s.onerror = function() { console.error("Failed to load: " + url); };
11
+ document.head.appendChild(s);
12
+ }
13
+ function loadCSS(url) {
14
+ if (document.querySelector('link[href="' + url + '"]')) return;
15
+ var l = document.createElement("link");
16
+ l.rel = "stylesheet";
17
+ l.href = url;
18
+ document.head.appendChild(l);
19
+ }
20
+
21
+ `;
22
+
23
+ //#endregion
24
+ export { CDN_LOADER_JS };
25
+ //# sourceMappingURL=cdn-loader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cdn-loader.mjs","names":[],"sources":["../../../src/web-page/renderers/cdn-loader.ts"],"sourcesContent":["export const CDN_LOADER_JS = `\n // ── CDN Lazy-Load Utilities ──\n var _loadedScripts = {};\n function loadScript(url, cb) {\n if (_loadedScripts[url]) { if (cb) cb(); return; }\n var s = document.createElement(\"script\");\n s.src = url;\n s.onload = function() { _loadedScripts[url] = true; if (cb) cb(); };\n s.onerror = function() { console.error(\"Failed to load: \" + url); };\n document.head.appendChild(s);\n }\n function loadCSS(url) {\n if (document.querySelector('link[href=\"' + url + '\"]')) return;\n var l = document.createElement(\"link\");\n l.rel = \"stylesheet\";\n l.href = url;\n document.head.appendChild(l);\n }\n\n`;\n"],"mappings":";AAAA,MAAa,gBAAgB"}
@@ -0,0 +1,101 @@
1
+
2
+ //#region src/web-page/renderers/chart.ts
3
+ const CHART_JS = `
4
+ // ── Chart Primitive (Chart.js v4) ──
5
+ function renderAupChart(node) {
6
+ var el = document.createElement("div");
7
+ el.className = "aup-chart";
8
+ var p = node.props || {};
9
+ var variant = p.variant || "line";
10
+ if (p.height) el.style.height = p.height;
11
+ var canvas = document.createElement("canvas");
12
+ el.appendChild(canvas);
13
+
14
+ var chartData = p.data || { labels: p.labels || [], datasets: p.datasets || [] };
15
+ var chartInstance = null;
16
+
17
+ function chartType() {
18
+ return variant === "area" ? "line" : variant === "histogram" ? "bar" : variant === "gauge" ? "doughnut" : variant;
19
+ }
20
+
21
+ function chartOptions() {
22
+ return {
23
+ responsive: true,
24
+ maintainAspectRatio: false,
25
+ fill: variant === "area",
26
+ animation: chartInstance ? { duration: 400 } : undefined,
27
+ plugins: { legend: { labels: { color: getComputedStyle(el).color } } },
28
+ scales: variant === "pie" || variant === "doughnut" || variant === "gauge" ? {} : {
29
+ x: { ticks: { color: getComputedStyle(el).color } },
30
+ y: { ticks: { color: getComputedStyle(el).color } }
31
+ }
32
+ };
33
+ }
34
+
35
+ function initChart() {
36
+ if (typeof Chart === "undefined") {
37
+ var loading = document.createElement("div");
38
+ loading.className = "aup-chart-loading";
39
+ loading.textContent = "Loading chart...";
40
+ el.insertBefore(loading, canvas);
41
+ loadScript("https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js", function() {
42
+ if (loading.parentNode) loading.parentNode.removeChild(loading);
43
+ createChart(chartData);
44
+ });
45
+ } else {
46
+ createChart(chartData);
47
+ }
48
+ }
49
+
50
+ function createChart(data) {
51
+ try {
52
+ chartInstance = new Chart(canvas, {
53
+ type: chartType(),
54
+ data: data,
55
+ options: chartOptions()
56
+ });
57
+ } catch(e) { canvas.parentNode.textContent = "Chart error: " + e.message; }
58
+ }
59
+
60
+ function updateChart(data) {
61
+ if (!chartInstance) { createChart(data); return; }
62
+ chartInstance.data = data;
63
+ chartInstance.update();
64
+ }
65
+
66
+ // src binding: read data from AFS path, subscribe for live updates
67
+ if (node.src && window.afs) {
68
+ var loading = document.createElement("div");
69
+ loading.className = "aup-chart-loading";
70
+ loading.textContent = "Loading data...";
71
+ el.insertBefore(loading, canvas);
72
+
73
+ function applyAfsData(raw) {
74
+ var d = (typeof raw === "object" && raw !== null) ? raw : {};
75
+ // Support both { labels, datasets } and { content: { labels, datasets } }
76
+ if (d.content && typeof d.content === "object") d = d.content;
77
+ var resolved = { labels: d.labels || [], datasets: d.datasets || [] };
78
+ if (loading.parentNode) loading.parentNode.removeChild(loading);
79
+ updateChart(resolved);
80
+ }
81
+
82
+ // Initial read
83
+ window.afs.read(node.src).then(applyAfsData).catch(function(e) {
84
+ loading.textContent = "Data error: " + e.message;
85
+ });
86
+
87
+ // Subscribe for live updates
88
+ window.afs.subscribe({ type: "afs:write", path: node.src }, function(event) {
89
+ if (event && event.data) applyAfsData(event.data);
90
+ });
91
+ } else {
92
+ setTimeout(initChart, 0);
93
+ }
94
+
95
+ return el;
96
+ }
97
+
98
+ `;
99
+
100
+ //#endregion
101
+ exports.CHART_JS = CHART_JS;