@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.
- package/LICENSE.md +26 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
- package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
- package/dist/aup-protocol.cjs +235 -0
- package/dist/aup-protocol.d.cts +78 -0
- package/dist/aup-protocol.d.cts.map +1 -0
- package/dist/aup-protocol.d.mts +78 -0
- package/dist/aup-protocol.d.mts.map +1 -0
- package/dist/aup-protocol.mjs +235 -0
- package/dist/aup-protocol.mjs.map +1 -0
- package/dist/aup-registry.cjs +2489 -0
- package/dist/aup-registry.mjs +2487 -0
- package/dist/aup-registry.mjs.map +1 -0
- package/dist/aup-spec.cjs +1467 -0
- package/dist/aup-spec.mjs +1466 -0
- package/dist/aup-spec.mjs.map +1 -0
- package/dist/aup-types.cjs +165 -0
- package/dist/aup-types.d.cts +157 -0
- package/dist/aup-types.d.cts.map +1 -0
- package/dist/aup-types.d.mts +157 -0
- package/dist/aup-types.d.mts.map +1 -0
- package/dist/aup-types.mjs +157 -0
- package/dist/aup-types.mjs.map +1 -0
- package/dist/backend.cjs +14 -0
- package/dist/backend.d.cts +104 -0
- package/dist/backend.d.cts.map +1 -0
- package/dist/backend.d.mts +104 -0
- package/dist/backend.d.mts.map +1 -0
- package/dist/backend.mjs +13 -0
- package/dist/backend.mjs.map +1 -0
- package/dist/degradation.cjs +85 -0
- package/dist/degradation.d.cts +17 -0
- package/dist/degradation.d.cts.map +1 -0
- package/dist/degradation.d.mts +17 -0
- package/dist/degradation.d.mts.map +1 -0
- package/dist/degradation.mjs +84 -0
- package/dist/degradation.mjs.map +1 -0
- package/dist/index.cjs +36 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.mts +12 -0
- package/dist/index.mjs +13 -0
- package/dist/runtime.cjs +117 -0
- package/dist/runtime.d.cts +59 -0
- package/dist/runtime.d.cts.map +1 -0
- package/dist/runtime.d.mts +59 -0
- package/dist/runtime.d.mts.map +1 -0
- package/dist/runtime.mjs +118 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/session.cjs +159 -0
- package/dist/session.d.cts +80 -0
- package/dist/session.d.cts.map +1 -0
- package/dist/session.d.mts +80 -0
- package/dist/session.d.mts.map +1 -0
- package/dist/session.mjs +159 -0
- package/dist/session.mjs.map +1 -0
- package/dist/snapshot.cjs +162 -0
- package/dist/snapshot.mjs +163 -0
- package/dist/snapshot.mjs.map +1 -0
- package/dist/term-page.cjs +264 -0
- package/dist/term-page.mjs +264 -0
- package/dist/term-page.mjs.map +1 -0
- package/dist/term.cjs +295 -0
- package/dist/term.d.cts +84 -0
- package/dist/term.d.cts.map +1 -0
- package/dist/term.d.mts +84 -0
- package/dist/term.d.mts.map +1 -0
- package/dist/term.mjs +296 -0
- package/dist/term.mjs.map +1 -0
- package/dist/tty.cjs +136 -0
- package/dist/tty.d.cts +53 -0
- package/dist/tty.d.cts.map +1 -0
- package/dist/tty.d.mts +53 -0
- package/dist/tty.d.mts.map +1 -0
- package/dist/tty.mjs +135 -0
- package/dist/tty.mjs.map +1 -0
- package/dist/ui-provider.cjs +4615 -0
- package/dist/ui-provider.d.cts +307 -0
- package/dist/ui-provider.d.cts.map +1 -0
- package/dist/ui-provider.d.mts +307 -0
- package/dist/ui-provider.d.mts.map +1 -0
- package/dist/ui-provider.mjs +4616 -0
- package/dist/ui-provider.mjs.map +1 -0
- package/dist/web-page/core.cjs +1388 -0
- package/dist/web-page/core.mjs +1387 -0
- package/dist/web-page/core.mjs.map +1 -0
- package/dist/web-page/css.cjs +1699 -0
- package/dist/web-page/css.mjs +1698 -0
- package/dist/web-page/css.mjs.map +1 -0
- package/dist/web-page/icons.cjs +248 -0
- package/dist/web-page/icons.mjs +248 -0
- package/dist/web-page/icons.mjs.map +1 -0
- package/dist/web-page/overlay-themes.cjs +514 -0
- package/dist/web-page/overlay-themes.mjs +513 -0
- package/dist/web-page/overlay-themes.mjs.map +1 -0
- package/dist/web-page/renderers/action.cjs +72 -0
- package/dist/web-page/renderers/action.mjs +72 -0
- package/dist/web-page/renderers/action.mjs.map +1 -0
- package/dist/web-page/renderers/broadcast.cjs +160 -0
- package/dist/web-page/renderers/broadcast.mjs +160 -0
- package/dist/web-page/renderers/broadcast.mjs.map +1 -0
- package/dist/web-page/renderers/calendar.cjs +137 -0
- package/dist/web-page/renderers/calendar.mjs +137 -0
- package/dist/web-page/renderers/calendar.mjs.map +1 -0
- package/dist/web-page/renderers/canvas.cjs +173 -0
- package/dist/web-page/renderers/canvas.mjs +173 -0
- package/dist/web-page/renderers/canvas.mjs.map +1 -0
- package/dist/web-page/renderers/cdn-loader.cjs +25 -0
- package/dist/web-page/renderers/cdn-loader.mjs +25 -0
- package/dist/web-page/renderers/cdn-loader.mjs.map +1 -0
- package/dist/web-page/renderers/chart.cjs +101 -0
- package/dist/web-page/renderers/chart.mjs +101 -0
- package/dist/web-page/renderers/chart.mjs.map +1 -0
- package/dist/web-page/renderers/deck.cjs +390 -0
- package/dist/web-page/renderers/deck.mjs +390 -0
- package/dist/web-page/renderers/deck.mjs.map +1 -0
- package/dist/web-page/renderers/device.cjs +1015 -0
- package/dist/web-page/renderers/device.mjs +1015 -0
- package/dist/web-page/renderers/device.mjs.map +1 -0
- package/dist/web-page/renderers/editor.cjs +127 -0
- package/dist/web-page/renderers/editor.mjs +127 -0
- package/dist/web-page/renderers/editor.mjs.map +1 -0
- package/dist/web-page/renderers/finance-chart.cjs +178 -0
- package/dist/web-page/renderers/finance-chart.mjs +178 -0
- package/dist/web-page/renderers/finance-chart.mjs.map +1 -0
- package/dist/web-page/renderers/frame.cjs +274 -0
- package/dist/web-page/renderers/frame.mjs +274 -0
- package/dist/web-page/renderers/frame.mjs.map +1 -0
- package/dist/web-page/renderers/globe.cjs +119 -0
- package/dist/web-page/renderers/globe.mjs +119 -0
- package/dist/web-page/renderers/globe.mjs.map +1 -0
- package/dist/web-page/renderers/input.cjs +137 -0
- package/dist/web-page/renderers/input.mjs +137 -0
- package/dist/web-page/renderers/input.mjs.map +1 -0
- package/dist/web-page/renderers/list.cjs +1243 -0
- package/dist/web-page/renderers/list.mjs +1243 -0
- package/dist/web-page/renderers/list.mjs.map +1 -0
- package/dist/web-page/renderers/map.cjs +126 -0
- package/dist/web-page/renderers/map.mjs +126 -0
- package/dist/web-page/renderers/map.mjs.map +1 -0
- package/dist/web-page/renderers/media.cjs +106 -0
- package/dist/web-page/renderers/media.mjs +106 -0
- package/dist/web-page/renderers/media.mjs.map +1 -0
- package/dist/web-page/renderers/moonphase.cjs +105 -0
- package/dist/web-page/renderers/moonphase.mjs +105 -0
- package/dist/web-page/renderers/moonphase.mjs.map +1 -0
- package/dist/web-page/renderers/natal-chart.cjs +222 -0
- package/dist/web-page/renderers/natal-chart.mjs +222 -0
- package/dist/web-page/renderers/natal-chart.mjs.map +1 -0
- package/dist/web-page/renderers/overlay.cjs +531 -0
- package/dist/web-page/renderers/overlay.mjs +531 -0
- package/dist/web-page/renderers/overlay.mjs.map +1 -0
- package/dist/web-page/renderers/table.cjs +74 -0
- package/dist/web-page/renderers/table.mjs +74 -0
- package/dist/web-page/renderers/table.mjs.map +1 -0
- package/dist/web-page/renderers/terminal.cjs +30 -0
- package/dist/web-page/renderers/terminal.mjs +30 -0
- package/dist/web-page/renderers/terminal.mjs.map +1 -0
- package/dist/web-page/renderers/text.cjs +109 -0
- package/dist/web-page/renderers/text.mjs +109 -0
- package/dist/web-page/renderers/text.mjs.map +1 -0
- package/dist/web-page/renderers/ticker.cjs +133 -0
- package/dist/web-page/renderers/ticker.mjs +133 -0
- package/dist/web-page/renderers/ticker.mjs.map +1 -0
- package/dist/web-page/renderers/time.cjs +69 -0
- package/dist/web-page/renderers/time.mjs +69 -0
- package/dist/web-page/renderers/time.mjs.map +1 -0
- package/dist/web-page/renderers/unknown.cjs +20 -0
- package/dist/web-page/renderers/unknown.mjs +20 -0
- package/dist/web-page/renderers/unknown.mjs.map +1 -0
- package/dist/web-page/renderers/view.cjs +161 -0
- package/dist/web-page/renderers/view.mjs +161 -0
- package/dist/web-page/renderers/view.mjs.map +1 -0
- package/dist/web-page/renderers/wm.cjs +669 -0
- package/dist/web-page/renderers/wm.mjs +669 -0
- package/dist/web-page/renderers/wm.mjs.map +1 -0
- package/dist/web-page/skeleton.cjs +103 -0
- package/dist/web-page/skeleton.mjs +103 -0
- package/dist/web-page/skeleton.mjs.map +1 -0
- package/dist/web-page.cjs +114 -0
- package/dist/web-page.d.cts +19 -0
- package/dist/web-page.d.cts.map +1 -0
- package/dist/web-page.d.mts +19 -0
- package/dist/web-page.d.mts.map +1 -0
- package/dist/web-page.mjs +115 -0
- package/dist/web-page.mjs.map +1 -0
- package/dist/web.cjs +827 -0
- package/dist/web.d.cts +144 -0
- package/dist/web.d.cts.map +1 -0
- package/dist/web.d.mts +144 -0
- package/dist/web.d.mts.map +1 -0
- package/dist/web.mjs +828 -0
- package/dist/web.mjs.map +1 -0
- package/dist/wm-state.cjs +172 -0
- package/dist/wm-state.mjs +171 -0
- package/dist/wm-state.mjs.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//#region src/web-page/renderers/table.ts
|
|
2
|
+
const TABLE_JS = `
|
|
3
|
+
function renderAupTable(node) {
|
|
4
|
+
var p = node.props || {};
|
|
5
|
+
var columns = Array.isArray(p.columns) ? p.columns : [];
|
|
6
|
+
var rows = Array.isArray(p.rows) ? p.rows : [];
|
|
7
|
+
|
|
8
|
+
var table = document.createElement("table");
|
|
9
|
+
table.className = "aup-table";
|
|
10
|
+
|
|
11
|
+
// Header
|
|
12
|
+
var thead = document.createElement("thead");
|
|
13
|
+
var headerRow = document.createElement("tr");
|
|
14
|
+
for (var c = 0; c < columns.length; c++) {
|
|
15
|
+
var th = document.createElement("th");
|
|
16
|
+
var col = columns[c];
|
|
17
|
+
th.textContent = _escapeHtml(String(col.label || col.key || ""));
|
|
18
|
+
if (col.align) th.setAttribute("data-align", col.align);
|
|
19
|
+
// Sort click event
|
|
20
|
+
(function(colKey) {
|
|
21
|
+
th.onclick = function() {
|
|
22
|
+
if (node.events && node.events.sort) {
|
|
23
|
+
_fireAupEvent(node.id, "sort", {});
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
})(col.key);
|
|
27
|
+
headerRow.appendChild(th);
|
|
28
|
+
}
|
|
29
|
+
thead.appendChild(headerRow);
|
|
30
|
+
table.appendChild(thead);
|
|
31
|
+
|
|
32
|
+
// Body
|
|
33
|
+
var tbody = document.createElement("tbody");
|
|
34
|
+
if (rows.length === 0) {
|
|
35
|
+
var emptyRow = document.createElement("tr");
|
|
36
|
+
var emptyCell = document.createElement("td");
|
|
37
|
+
emptyCell.className = "aup-table-empty";
|
|
38
|
+
emptyCell.colSpan = columns.length || 1;
|
|
39
|
+
emptyCell.textContent = "No data";
|
|
40
|
+
emptyRow.appendChild(emptyCell);
|
|
41
|
+
tbody.appendChild(emptyRow);
|
|
42
|
+
} else {
|
|
43
|
+
for (var r = 0; r < rows.length; r++) {
|
|
44
|
+
var tr = document.createElement("tr");
|
|
45
|
+
var row = rows[r];
|
|
46
|
+
for (var ci = 0; ci < columns.length; ci++) {
|
|
47
|
+
var td = document.createElement("td");
|
|
48
|
+
var colDef = columns[ci];
|
|
49
|
+
var cellVal = row[colDef.key];
|
|
50
|
+
td.textContent = cellVal != null ? _escapeHtml(String(cellVal)) : "";
|
|
51
|
+
if (colDef.align) td.setAttribute("data-align", colDef.align);
|
|
52
|
+
tr.appendChild(td);
|
|
53
|
+
}
|
|
54
|
+
// Row click for select event
|
|
55
|
+
(function(rowData) {
|
|
56
|
+
tr.onclick = function() {
|
|
57
|
+
if (node.events && node.events.select) {
|
|
58
|
+
_fireAupEvent(node.id, "select", {});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
tr.style.cursor = node.events && node.events.select ? "pointer" : "default";
|
|
62
|
+
})(row);
|
|
63
|
+
tbody.appendChild(tr);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
table.appendChild(tbody);
|
|
67
|
+
return table;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
`;
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { TABLE_JS };
|
|
74
|
+
//# sourceMappingURL=table.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.mjs","names":[],"sources":["../../../src/web-page/renderers/table.ts"],"sourcesContent":["export const TABLE_JS = `\n function renderAupTable(node) {\n var p = node.props || {};\n var columns = Array.isArray(p.columns) ? p.columns : [];\n var rows = Array.isArray(p.rows) ? p.rows : [];\n\n var table = document.createElement(\"table\");\n table.className = \"aup-table\";\n\n // Header\n var thead = document.createElement(\"thead\");\n var headerRow = document.createElement(\"tr\");\n for (var c = 0; c < columns.length; c++) {\n var th = document.createElement(\"th\");\n var col = columns[c];\n th.textContent = _escapeHtml(String(col.label || col.key || \"\"));\n if (col.align) th.setAttribute(\"data-align\", col.align);\n // Sort click event\n (function(colKey) {\n th.onclick = function() {\n if (node.events && node.events.sort) {\n _fireAupEvent(node.id, \"sort\", {});\n }\n };\n })(col.key);\n headerRow.appendChild(th);\n }\n thead.appendChild(headerRow);\n table.appendChild(thead);\n\n // Body\n var tbody = document.createElement(\"tbody\");\n if (rows.length === 0) {\n var emptyRow = document.createElement(\"tr\");\n var emptyCell = document.createElement(\"td\");\n emptyCell.className = \"aup-table-empty\";\n emptyCell.colSpan = columns.length || 1;\n emptyCell.textContent = \"No data\";\n emptyRow.appendChild(emptyCell);\n tbody.appendChild(emptyRow);\n } else {\n for (var r = 0; r < rows.length; r++) {\n var tr = document.createElement(\"tr\");\n var row = rows[r];\n for (var ci = 0; ci < columns.length; ci++) {\n var td = document.createElement(\"td\");\n var colDef = columns[ci];\n var cellVal = row[colDef.key];\n td.textContent = cellVal != null ? _escapeHtml(String(cellVal)) : \"\";\n if (colDef.align) td.setAttribute(\"data-align\", colDef.align);\n tr.appendChild(td);\n }\n // Row click for select event\n (function(rowData) {\n tr.onclick = function() {\n if (node.events && node.events.select) {\n _fireAupEvent(node.id, \"select\", {});\n }\n };\n tr.style.cursor = node.events && node.events.select ? \"pointer\" : \"default\";\n })(row);\n tbody.appendChild(tr);\n }\n }\n table.appendChild(tbody);\n return table;\n }\n\n`;\n"],"mappings":";AAAA,MAAa,WAAW"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/web-page/renderers/terminal.ts
|
|
3
|
+
const TERMINAL_JS = `
|
|
4
|
+
function renderAupTerminal(node) {
|
|
5
|
+
var el = document.createElement("div");
|
|
6
|
+
el.className = "aup-terminal";
|
|
7
|
+
var p = node.props || {};
|
|
8
|
+
if (p.rows) el.style.minHeight = (parseInt(p.rows) * 18) + "px";
|
|
9
|
+
|
|
10
|
+
var placeholder = document.createElement("div");
|
|
11
|
+
placeholder.className = "aup-terminal-placeholder";
|
|
12
|
+
placeholder.textContent = "Terminal (connect via WebSocket)";
|
|
13
|
+
el.appendChild(placeholder);
|
|
14
|
+
|
|
15
|
+
// Render children if provided
|
|
16
|
+
if (node.children) {
|
|
17
|
+
el.innerHTML = "";
|
|
18
|
+
node.children.forEach(function(child) {
|
|
19
|
+
var childEl = renderAupNode(child);
|
|
20
|
+
if (childEl) el.appendChild(childEl);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return el;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.TERMINAL_JS = TERMINAL_JS;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region src/web-page/renderers/terminal.ts
|
|
2
|
+
const TERMINAL_JS = `
|
|
3
|
+
function renderAupTerminal(node) {
|
|
4
|
+
var el = document.createElement("div");
|
|
5
|
+
el.className = "aup-terminal";
|
|
6
|
+
var p = node.props || {};
|
|
7
|
+
if (p.rows) el.style.minHeight = (parseInt(p.rows) * 18) + "px";
|
|
8
|
+
|
|
9
|
+
var placeholder = document.createElement("div");
|
|
10
|
+
placeholder.className = "aup-terminal-placeholder";
|
|
11
|
+
placeholder.textContent = "Terminal (connect via WebSocket)";
|
|
12
|
+
el.appendChild(placeholder);
|
|
13
|
+
|
|
14
|
+
// Render children if provided
|
|
15
|
+
if (node.children) {
|
|
16
|
+
el.innerHTML = "";
|
|
17
|
+
node.children.forEach(function(child) {
|
|
18
|
+
var childEl = renderAupNode(child);
|
|
19
|
+
if (childEl) el.appendChild(childEl);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return el;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
`;
|
|
27
|
+
|
|
28
|
+
//#endregion
|
|
29
|
+
export { TERMINAL_JS };
|
|
30
|
+
//# sourceMappingURL=terminal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.mjs","names":[],"sources":["../../../src/web-page/renderers/terminal.ts"],"sourcesContent":["export const TERMINAL_JS = `\n function renderAupTerminal(node) {\n var el = document.createElement(\"div\");\n el.className = \"aup-terminal\";\n var p = node.props || {};\n if (p.rows) el.style.minHeight = (parseInt(p.rows) * 18) + \"px\";\n\n var placeholder = document.createElement(\"div\");\n placeholder.className = \"aup-terminal-placeholder\";\n placeholder.textContent = \"Terminal (connect via WebSocket)\";\n el.appendChild(placeholder);\n\n // Render children if provided\n if (node.children) {\n el.innerHTML = \"\";\n node.children.forEach(function(child) {\n var childEl = renderAupNode(child);\n if (childEl) el.appendChild(childEl);\n });\n }\n\n return el;\n }\n\n`;\n"],"mappings":";AAAA,MAAa,cAAc"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/web-page/renderers/text.ts
|
|
3
|
+
const TEXT_JS = `
|
|
4
|
+
function renderAupText(node) {
|
|
5
|
+
var p = node.props || {};
|
|
6
|
+
var level = p.level || node.state && node.state.level;
|
|
7
|
+
var tag = level ? "h" + Math.min(6, Math.max(1, parseInt(level))) : "div";
|
|
8
|
+
var el = document.createElement(tag);
|
|
9
|
+
el.className = "aup-text";
|
|
10
|
+
if (level) el.setAttribute("data-level", String(level));
|
|
11
|
+
if (p.scale) el.setAttribute("data-scale", p.scale);
|
|
12
|
+
if (p.format) el.setAttribute("data-format", p.format);
|
|
13
|
+
if (p.intent) el.setAttribute("data-intent", p.intent);
|
|
14
|
+
if (p.mode) el.setAttribute("data-mode", p.mode);
|
|
15
|
+
if (p.size) el.setAttribute("data-size", p.size);
|
|
16
|
+
// ── Animate ──
|
|
17
|
+
if (p.animate && p.animate !== "none") {
|
|
18
|
+
el.setAttribute("data-animate", p.animate);
|
|
19
|
+
if (p.animateDelay) el.style.animationDelay = p.animateDelay + "ms";
|
|
20
|
+
if (p.animateDuration) el.style.animationDuration = p.animateDuration + "ms";
|
|
21
|
+
}
|
|
22
|
+
// Render content as text (escape HTML)
|
|
23
|
+
var content = String(p.content || "");
|
|
24
|
+
if (p.format === "markdown" && typeof marked !== "undefined") {
|
|
25
|
+
el.innerHTML = renderMarkdown(content);
|
|
26
|
+
// Intercept internal link clicks — fire AUP event instead of navigating
|
|
27
|
+
el.addEventListener("click", function(e) {
|
|
28
|
+
var a = e.target.closest ? e.target.closest("a[href]") : null;
|
|
29
|
+
if (!a) return;
|
|
30
|
+
var href = a.getAttribute("href") || "";
|
|
31
|
+
// Skip external links (http://, https://, mailto:, tel:, #anchor)
|
|
32
|
+
if (/^(https?:|mailto:|tel:|#)/.test(href)) return;
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
_fireAupEvent(node.id, "link-click", { href: href });
|
|
35
|
+
});
|
|
36
|
+
} else if (p.format === "code") {
|
|
37
|
+
var pre = document.createElement("pre");
|
|
38
|
+
var codeEl = document.createElement("code");
|
|
39
|
+
if (typeof hljs !== "undefined") {
|
|
40
|
+
if (p.language && hljs.getLanguage(p.language)) {
|
|
41
|
+
codeEl.innerHTML = hljs.highlight(content, { language: p.language }).value;
|
|
42
|
+
codeEl.className = "hljs language-" + p.language;
|
|
43
|
+
} else {
|
|
44
|
+
var autoResult = hljs.highlightAuto(content);
|
|
45
|
+
codeEl.innerHTML = autoResult.value;
|
|
46
|
+
codeEl.className = "hljs";
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
codeEl.textContent = content;
|
|
50
|
+
}
|
|
51
|
+
pre.appendChild(codeEl);
|
|
52
|
+
el.appendChild(pre);
|
|
53
|
+
} else {
|
|
54
|
+
el.textContent = content;
|
|
55
|
+
}
|
|
56
|
+
// ── Count-up animation ──
|
|
57
|
+
if (p.animate === "count-up") {
|
|
58
|
+
var raw = content.replace(/,/g, "");
|
|
59
|
+
var target = parseFloat(raw);
|
|
60
|
+
if (!isNaN(target)) {
|
|
61
|
+
var isInt = target === Math.floor(target) && raw.indexOf(".") < 0;
|
|
62
|
+
var hasCommas = content.indexOf(",") >= 0;
|
|
63
|
+
var prefix = content.match(/^([^0-9.-]*)/);
|
|
64
|
+
var suffix = content.match(/([^0-9.,]*)$/);
|
|
65
|
+
var pfx = prefix ? prefix[1] : "";
|
|
66
|
+
var sfx = suffix ? suffix[1] : "";
|
|
67
|
+
el.textContent = pfx + "0" + sfx;
|
|
68
|
+
el._countUpTarget = target;
|
|
69
|
+
el._countUpIsInt = isInt;
|
|
70
|
+
el._countUpHasCommas = hasCommas;
|
|
71
|
+
el._countUpPrefix = pfx;
|
|
72
|
+
el._countUpSuffix = sfx;
|
|
73
|
+
el._countUpDuration = p.animateDuration || 2000;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return el;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function _startCountUp(el) {
|
|
80
|
+
if (typeof el._countUpTarget !== "number") return;
|
|
81
|
+
var target = el._countUpTarget;
|
|
82
|
+
var isInt = el._countUpIsInt;
|
|
83
|
+
var hasCommas = el._countUpHasCommas;
|
|
84
|
+
var pfx = el._countUpPrefix;
|
|
85
|
+
var sfx = el._countUpSuffix;
|
|
86
|
+
var duration = el._countUpDuration;
|
|
87
|
+
var start = performance.now();
|
|
88
|
+
|
|
89
|
+
function formatNum(n) {
|
|
90
|
+
var s = isInt ? String(Math.round(n)) : n.toFixed(String(target).split(".")[1] ? String(target).split(".")[1].length : 2);
|
|
91
|
+
if (hasCommas) s = s.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ",");
|
|
92
|
+
return pfx + s + sfx;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function tick(now) {
|
|
96
|
+
var elapsed = now - start;
|
|
97
|
+
var progress = Math.min(elapsed / duration, 1);
|
|
98
|
+
// easeOutQuart for smooth deceleration
|
|
99
|
+
var eased = 1 - Math.pow(1 - progress, 4);
|
|
100
|
+
el.textContent = formatNum(target * eased);
|
|
101
|
+
if (progress < 1) requestAnimationFrame(tick);
|
|
102
|
+
}
|
|
103
|
+
requestAnimationFrame(tick);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
`;
|
|
107
|
+
|
|
108
|
+
//#endregion
|
|
109
|
+
exports.TEXT_JS = TEXT_JS;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
//#region src/web-page/renderers/text.ts
|
|
2
|
+
const TEXT_JS = `
|
|
3
|
+
function renderAupText(node) {
|
|
4
|
+
var p = node.props || {};
|
|
5
|
+
var level = p.level || node.state && node.state.level;
|
|
6
|
+
var tag = level ? "h" + Math.min(6, Math.max(1, parseInt(level))) : "div";
|
|
7
|
+
var el = document.createElement(tag);
|
|
8
|
+
el.className = "aup-text";
|
|
9
|
+
if (level) el.setAttribute("data-level", String(level));
|
|
10
|
+
if (p.scale) el.setAttribute("data-scale", p.scale);
|
|
11
|
+
if (p.format) el.setAttribute("data-format", p.format);
|
|
12
|
+
if (p.intent) el.setAttribute("data-intent", p.intent);
|
|
13
|
+
if (p.mode) el.setAttribute("data-mode", p.mode);
|
|
14
|
+
if (p.size) el.setAttribute("data-size", p.size);
|
|
15
|
+
// ── Animate ──
|
|
16
|
+
if (p.animate && p.animate !== "none") {
|
|
17
|
+
el.setAttribute("data-animate", p.animate);
|
|
18
|
+
if (p.animateDelay) el.style.animationDelay = p.animateDelay + "ms";
|
|
19
|
+
if (p.animateDuration) el.style.animationDuration = p.animateDuration + "ms";
|
|
20
|
+
}
|
|
21
|
+
// Render content as text (escape HTML)
|
|
22
|
+
var content = String(p.content || "");
|
|
23
|
+
if (p.format === "markdown" && typeof marked !== "undefined") {
|
|
24
|
+
el.innerHTML = renderMarkdown(content);
|
|
25
|
+
// Intercept internal link clicks — fire AUP event instead of navigating
|
|
26
|
+
el.addEventListener("click", function(e) {
|
|
27
|
+
var a = e.target.closest ? e.target.closest("a[href]") : null;
|
|
28
|
+
if (!a) return;
|
|
29
|
+
var href = a.getAttribute("href") || "";
|
|
30
|
+
// Skip external links (http://, https://, mailto:, tel:, #anchor)
|
|
31
|
+
if (/^(https?:|mailto:|tel:|#)/.test(href)) return;
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
_fireAupEvent(node.id, "link-click", { href: href });
|
|
34
|
+
});
|
|
35
|
+
} else if (p.format === "code") {
|
|
36
|
+
var pre = document.createElement("pre");
|
|
37
|
+
var codeEl = document.createElement("code");
|
|
38
|
+
if (typeof hljs !== "undefined") {
|
|
39
|
+
if (p.language && hljs.getLanguage(p.language)) {
|
|
40
|
+
codeEl.innerHTML = hljs.highlight(content, { language: p.language }).value;
|
|
41
|
+
codeEl.className = "hljs language-" + p.language;
|
|
42
|
+
} else {
|
|
43
|
+
var autoResult = hljs.highlightAuto(content);
|
|
44
|
+
codeEl.innerHTML = autoResult.value;
|
|
45
|
+
codeEl.className = "hljs";
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
codeEl.textContent = content;
|
|
49
|
+
}
|
|
50
|
+
pre.appendChild(codeEl);
|
|
51
|
+
el.appendChild(pre);
|
|
52
|
+
} else {
|
|
53
|
+
el.textContent = content;
|
|
54
|
+
}
|
|
55
|
+
// ── Count-up animation ──
|
|
56
|
+
if (p.animate === "count-up") {
|
|
57
|
+
var raw = content.replace(/,/g, "");
|
|
58
|
+
var target = parseFloat(raw);
|
|
59
|
+
if (!isNaN(target)) {
|
|
60
|
+
var isInt = target === Math.floor(target) && raw.indexOf(".") < 0;
|
|
61
|
+
var hasCommas = content.indexOf(",") >= 0;
|
|
62
|
+
var prefix = content.match(/^([^0-9.-]*)/);
|
|
63
|
+
var suffix = content.match(/([^0-9.,]*)$/);
|
|
64
|
+
var pfx = prefix ? prefix[1] : "";
|
|
65
|
+
var sfx = suffix ? suffix[1] : "";
|
|
66
|
+
el.textContent = pfx + "0" + sfx;
|
|
67
|
+
el._countUpTarget = target;
|
|
68
|
+
el._countUpIsInt = isInt;
|
|
69
|
+
el._countUpHasCommas = hasCommas;
|
|
70
|
+
el._countUpPrefix = pfx;
|
|
71
|
+
el._countUpSuffix = sfx;
|
|
72
|
+
el._countUpDuration = p.animateDuration || 2000;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return el;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function _startCountUp(el) {
|
|
79
|
+
if (typeof el._countUpTarget !== "number") return;
|
|
80
|
+
var target = el._countUpTarget;
|
|
81
|
+
var isInt = el._countUpIsInt;
|
|
82
|
+
var hasCommas = el._countUpHasCommas;
|
|
83
|
+
var pfx = el._countUpPrefix;
|
|
84
|
+
var sfx = el._countUpSuffix;
|
|
85
|
+
var duration = el._countUpDuration;
|
|
86
|
+
var start = performance.now();
|
|
87
|
+
|
|
88
|
+
function formatNum(n) {
|
|
89
|
+
var s = isInt ? String(Math.round(n)) : n.toFixed(String(target).split(".")[1] ? String(target).split(".")[1].length : 2);
|
|
90
|
+
if (hasCommas) s = s.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ",");
|
|
91
|
+
return pfx + s + sfx;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function tick(now) {
|
|
95
|
+
var elapsed = now - start;
|
|
96
|
+
var progress = Math.min(elapsed / duration, 1);
|
|
97
|
+
// easeOutQuart for smooth deceleration
|
|
98
|
+
var eased = 1 - Math.pow(1 - progress, 4);
|
|
99
|
+
el.textContent = formatNum(target * eased);
|
|
100
|
+
if (progress < 1) requestAnimationFrame(tick);
|
|
101
|
+
}
|
|
102
|
+
requestAnimationFrame(tick);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
`;
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
export { TEXT_JS };
|
|
109
|
+
//# sourceMappingURL=text.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.mjs","names":[],"sources":["../../../src/web-page/renderers/text.ts"],"sourcesContent":["export const TEXT_JS = `\n function renderAupText(node) {\n var p = node.props || {};\n var level = p.level || node.state && node.state.level;\n var tag = level ? \"h\" + Math.min(6, Math.max(1, parseInt(level))) : \"div\";\n var el = document.createElement(tag);\n el.className = \"aup-text\";\n if (level) el.setAttribute(\"data-level\", String(level));\n if (p.scale) el.setAttribute(\"data-scale\", p.scale);\n if (p.format) el.setAttribute(\"data-format\", p.format);\n if (p.intent) el.setAttribute(\"data-intent\", p.intent);\n if (p.mode) el.setAttribute(\"data-mode\", p.mode);\n if (p.size) el.setAttribute(\"data-size\", p.size);\n // ── Animate ──\n if (p.animate && p.animate !== \"none\") {\n el.setAttribute(\"data-animate\", p.animate);\n if (p.animateDelay) el.style.animationDelay = p.animateDelay + \"ms\";\n if (p.animateDuration) el.style.animationDuration = p.animateDuration + \"ms\";\n }\n // Render content as text (escape HTML)\n var content = String(p.content || \"\");\n if (p.format === \"markdown\" && typeof marked !== \"undefined\") {\n el.innerHTML = renderMarkdown(content);\n // Intercept internal link clicks — fire AUP event instead of navigating\n el.addEventListener(\"click\", function(e) {\n var a = e.target.closest ? e.target.closest(\"a[href]\") : null;\n if (!a) return;\n var href = a.getAttribute(\"href\") || \"\";\n // Skip external links (http://, https://, mailto:, tel:, #anchor)\n if (/^(https?:|mailto:|tel:|#)/.test(href)) return;\n e.preventDefault();\n _fireAupEvent(node.id, \"link-click\", { href: href });\n });\n } else if (p.format === \"code\") {\n var pre = document.createElement(\"pre\");\n var codeEl = document.createElement(\"code\");\n if (typeof hljs !== \"undefined\") {\n if (p.language && hljs.getLanguage(p.language)) {\n codeEl.innerHTML = hljs.highlight(content, { language: p.language }).value;\n codeEl.className = \"hljs language-\" + p.language;\n } else {\n var autoResult = hljs.highlightAuto(content);\n codeEl.innerHTML = autoResult.value;\n codeEl.className = \"hljs\";\n }\n } else {\n codeEl.textContent = content;\n }\n pre.appendChild(codeEl);\n el.appendChild(pre);\n } else {\n el.textContent = content;\n }\n // ── Count-up animation ──\n if (p.animate === \"count-up\") {\n var raw = content.replace(/,/g, \"\");\n var target = parseFloat(raw);\n if (!isNaN(target)) {\n var isInt = target === Math.floor(target) && raw.indexOf(\".\") < 0;\n var hasCommas = content.indexOf(\",\") >= 0;\n var prefix = content.match(/^([^0-9.-]*)/);\n var suffix = content.match(/([^0-9.,]*)$/);\n var pfx = prefix ? prefix[1] : \"\";\n var sfx = suffix ? suffix[1] : \"\";\n el.textContent = pfx + \"0\" + sfx;\n el._countUpTarget = target;\n el._countUpIsInt = isInt;\n el._countUpHasCommas = hasCommas;\n el._countUpPrefix = pfx;\n el._countUpSuffix = sfx;\n el._countUpDuration = p.animateDuration || 2000;\n }\n }\n return el;\n }\n\n function _startCountUp(el) {\n if (typeof el._countUpTarget !== \"number\") return;\n var target = el._countUpTarget;\n var isInt = el._countUpIsInt;\n var hasCommas = el._countUpHasCommas;\n var pfx = el._countUpPrefix;\n var sfx = el._countUpSuffix;\n var duration = el._countUpDuration;\n var start = performance.now();\n\n function formatNum(n) {\n var s = isInt ? String(Math.round(n)) : n.toFixed(String(target).split(\".\")[1] ? String(target).split(\".\")[1].length : 2);\n if (hasCommas) s = s.replace(/\\\\B(?=(\\\\d{3})+(?!\\\\d))/g, \",\");\n return pfx + s + sfx;\n }\n\n function tick(now) {\n var elapsed = now - start;\n var progress = Math.min(elapsed / duration, 1);\n // easeOutQuart for smooth deceleration\n var eased = 1 - Math.pow(1 - progress, 4);\n el.textContent = formatNum(target * eased);\n if (progress < 1) requestAnimationFrame(tick);\n }\n requestAnimationFrame(tick);\n }\n\n`;\n"],"mappings":";AAAA,MAAa,UAAU"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/web-page/renderers/ticker.ts
|
|
3
|
+
const TICKER_JS = `
|
|
4
|
+
function renderAupTicker(node) {
|
|
5
|
+
var p = node.props || {};
|
|
6
|
+
var mode = p.mode === "flip" || p.mode === "static" ? p.mode : "scroll";
|
|
7
|
+
var intent = p.intent;
|
|
8
|
+
var separator = p.separator != null ? String(p.separator) : " \\u2022 ";
|
|
9
|
+
if (separator.length > 32) separator = separator.slice(0, 32);
|
|
10
|
+
var speed = p.speed;
|
|
11
|
+
var pauseOnHover = p.pauseOnHover !== false;
|
|
12
|
+
var direction = p.direction || "rtl";
|
|
13
|
+
var flipTransition = p.flipTransition || "fade";
|
|
14
|
+
var children = node.children || [];
|
|
15
|
+
if (children.length > 200) children = children.slice(0, 200);
|
|
16
|
+
|
|
17
|
+
var el = document.createElement("div");
|
|
18
|
+
el.className = "aup-ticker";
|
|
19
|
+
el.setAttribute("data-mode", mode);
|
|
20
|
+
if (intent) el.setAttribute("data-intent", intent);
|
|
21
|
+
|
|
22
|
+
var normalizedSpeed = _normalizeTickerSpeed(mode, speed);
|
|
23
|
+
|
|
24
|
+
if (mode === "static") {
|
|
25
|
+
return _buildStaticTicker(el, children, separator);
|
|
26
|
+
} else if (mode === "flip") {
|
|
27
|
+
return _buildFlipTicker(el, children, normalizedSpeed, flipTransition);
|
|
28
|
+
}
|
|
29
|
+
// Default: scroll
|
|
30
|
+
return _buildScrollTicker(el, children, separator, normalizedSpeed, pauseOnHover, direction);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function _normalizeTickerSpeed(mode, speed) {
|
|
34
|
+
var n = Number(speed);
|
|
35
|
+
if (!isFinite(n)) n = mode === "flip" ? 4000 : 60;
|
|
36
|
+
if (mode === "flip") {
|
|
37
|
+
n = Math.round(n);
|
|
38
|
+
if (n < 1000) n = 1000;
|
|
39
|
+
if (n > 60000) n = 60000;
|
|
40
|
+
return n;
|
|
41
|
+
}
|
|
42
|
+
if (n < 10) n = 10;
|
|
43
|
+
if (n > 400) n = 400;
|
|
44
|
+
return n;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function _buildStaticTicker(el, children, separator) {
|
|
48
|
+
var track = document.createElement("div");
|
|
49
|
+
track.className = "aup-ticker-track";
|
|
50
|
+
_appendTickerItems(track, children, separator);
|
|
51
|
+
el.appendChild(track);
|
|
52
|
+
return el;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function _buildScrollTicker(el, children, separator, pxPerSec, pauseOnHover, direction) {
|
|
56
|
+
var track = document.createElement("div");
|
|
57
|
+
track.className = "aup-ticker-track";
|
|
58
|
+
|
|
59
|
+
// First copy
|
|
60
|
+
_appendTickerItems(track, children, separator);
|
|
61
|
+
// Duplicate for seamless loop
|
|
62
|
+
_appendTickerItems(track, children, separator);
|
|
63
|
+
|
|
64
|
+
el.appendChild(track);
|
|
65
|
+
|
|
66
|
+
if (direction === "ltr") el.setAttribute("data-direction", "ltr");
|
|
67
|
+
|
|
68
|
+
// Calculate duration after DOM insertion (need widths)
|
|
69
|
+
requestAnimationFrame(function() {
|
|
70
|
+
var trackWidth = track.scrollWidth / 2;
|
|
71
|
+
if (trackWidth > 0 && pxPerSec > 0) {
|
|
72
|
+
var duration = trackWidth / pxPerSec;
|
|
73
|
+
el.style.setProperty("--ticker-duration", duration + "s");
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
if (pauseOnHover) {
|
|
78
|
+
el.addEventListener("mouseenter", function() { el.setAttribute("data-paused", "true"); });
|
|
79
|
+
el.addEventListener("mouseleave", function() { el.removeAttribute("data-paused"); });
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return el;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function _buildFlipTicker(el, children, intervalMs, transition) {
|
|
86
|
+
var track = document.createElement("div");
|
|
87
|
+
track.className = "aup-ticker-track";
|
|
88
|
+
el.setAttribute("data-flip-transition", transition);
|
|
89
|
+
|
|
90
|
+
var items = [];
|
|
91
|
+
for (var i = 0; i < children.length; i++) {
|
|
92
|
+
var item = document.createElement("div");
|
|
93
|
+
item.className = "aup-ticker-item" + (i === 0 ? " active" : "");
|
|
94
|
+
var childEl = renderAupNode(children[i]);
|
|
95
|
+
if (childEl) item.appendChild(childEl);
|
|
96
|
+
track.appendChild(item);
|
|
97
|
+
items.push(item);
|
|
98
|
+
}
|
|
99
|
+
el.appendChild(track);
|
|
100
|
+
|
|
101
|
+
if (items.length > 1) {
|
|
102
|
+
var currentIdx = 0;
|
|
103
|
+
var flipTimer = setInterval(function() {
|
|
104
|
+
items[currentIdx].classList.remove("active");
|
|
105
|
+
currentIdx = (currentIdx + 1) % items.length;
|
|
106
|
+
items[currentIdx].classList.add("active");
|
|
107
|
+
}, intervalMs);
|
|
108
|
+
// Store timer for potential cleanup on re-render
|
|
109
|
+
el._flipTimer = flipTimer;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return el;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function _appendTickerItems(track, children, separator) {
|
|
116
|
+
for (var i = 0; i < children.length; i++) {
|
|
117
|
+
if (i > 0 && separator) {
|
|
118
|
+
var sep = document.createElement("span");
|
|
119
|
+
sep.className = "aup-ticker-separator";
|
|
120
|
+
sep.textContent = separator;
|
|
121
|
+
track.appendChild(sep);
|
|
122
|
+
}
|
|
123
|
+
var item = document.createElement("div");
|
|
124
|
+
item.className = "aup-ticker-item";
|
|
125
|
+
var childEl = renderAupNode(children[i]);
|
|
126
|
+
if (childEl) item.appendChild(childEl);
|
|
127
|
+
track.appendChild(item);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
`;
|
|
131
|
+
|
|
132
|
+
//#endregion
|
|
133
|
+
exports.TICKER_JS = TICKER_JS;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
//#region src/web-page/renderers/ticker.ts
|
|
2
|
+
const TICKER_JS = `
|
|
3
|
+
function renderAupTicker(node) {
|
|
4
|
+
var p = node.props || {};
|
|
5
|
+
var mode = p.mode === "flip" || p.mode === "static" ? p.mode : "scroll";
|
|
6
|
+
var intent = p.intent;
|
|
7
|
+
var separator = p.separator != null ? String(p.separator) : " \\u2022 ";
|
|
8
|
+
if (separator.length > 32) separator = separator.slice(0, 32);
|
|
9
|
+
var speed = p.speed;
|
|
10
|
+
var pauseOnHover = p.pauseOnHover !== false;
|
|
11
|
+
var direction = p.direction || "rtl";
|
|
12
|
+
var flipTransition = p.flipTransition || "fade";
|
|
13
|
+
var children = node.children || [];
|
|
14
|
+
if (children.length > 200) children = children.slice(0, 200);
|
|
15
|
+
|
|
16
|
+
var el = document.createElement("div");
|
|
17
|
+
el.className = "aup-ticker";
|
|
18
|
+
el.setAttribute("data-mode", mode);
|
|
19
|
+
if (intent) el.setAttribute("data-intent", intent);
|
|
20
|
+
|
|
21
|
+
var normalizedSpeed = _normalizeTickerSpeed(mode, speed);
|
|
22
|
+
|
|
23
|
+
if (mode === "static") {
|
|
24
|
+
return _buildStaticTicker(el, children, separator);
|
|
25
|
+
} else if (mode === "flip") {
|
|
26
|
+
return _buildFlipTicker(el, children, normalizedSpeed, flipTransition);
|
|
27
|
+
}
|
|
28
|
+
// Default: scroll
|
|
29
|
+
return _buildScrollTicker(el, children, separator, normalizedSpeed, pauseOnHover, direction);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function _normalizeTickerSpeed(mode, speed) {
|
|
33
|
+
var n = Number(speed);
|
|
34
|
+
if (!isFinite(n)) n = mode === "flip" ? 4000 : 60;
|
|
35
|
+
if (mode === "flip") {
|
|
36
|
+
n = Math.round(n);
|
|
37
|
+
if (n < 1000) n = 1000;
|
|
38
|
+
if (n > 60000) n = 60000;
|
|
39
|
+
return n;
|
|
40
|
+
}
|
|
41
|
+
if (n < 10) n = 10;
|
|
42
|
+
if (n > 400) n = 400;
|
|
43
|
+
return n;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function _buildStaticTicker(el, children, separator) {
|
|
47
|
+
var track = document.createElement("div");
|
|
48
|
+
track.className = "aup-ticker-track";
|
|
49
|
+
_appendTickerItems(track, children, separator);
|
|
50
|
+
el.appendChild(track);
|
|
51
|
+
return el;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function _buildScrollTicker(el, children, separator, pxPerSec, pauseOnHover, direction) {
|
|
55
|
+
var track = document.createElement("div");
|
|
56
|
+
track.className = "aup-ticker-track";
|
|
57
|
+
|
|
58
|
+
// First copy
|
|
59
|
+
_appendTickerItems(track, children, separator);
|
|
60
|
+
// Duplicate for seamless loop
|
|
61
|
+
_appendTickerItems(track, children, separator);
|
|
62
|
+
|
|
63
|
+
el.appendChild(track);
|
|
64
|
+
|
|
65
|
+
if (direction === "ltr") el.setAttribute("data-direction", "ltr");
|
|
66
|
+
|
|
67
|
+
// Calculate duration after DOM insertion (need widths)
|
|
68
|
+
requestAnimationFrame(function() {
|
|
69
|
+
var trackWidth = track.scrollWidth / 2;
|
|
70
|
+
if (trackWidth > 0 && pxPerSec > 0) {
|
|
71
|
+
var duration = trackWidth / pxPerSec;
|
|
72
|
+
el.style.setProperty("--ticker-duration", duration + "s");
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (pauseOnHover) {
|
|
77
|
+
el.addEventListener("mouseenter", function() { el.setAttribute("data-paused", "true"); });
|
|
78
|
+
el.addEventListener("mouseleave", function() { el.removeAttribute("data-paused"); });
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return el;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function _buildFlipTicker(el, children, intervalMs, transition) {
|
|
85
|
+
var track = document.createElement("div");
|
|
86
|
+
track.className = "aup-ticker-track";
|
|
87
|
+
el.setAttribute("data-flip-transition", transition);
|
|
88
|
+
|
|
89
|
+
var items = [];
|
|
90
|
+
for (var i = 0; i < children.length; i++) {
|
|
91
|
+
var item = document.createElement("div");
|
|
92
|
+
item.className = "aup-ticker-item" + (i === 0 ? " active" : "");
|
|
93
|
+
var childEl = renderAupNode(children[i]);
|
|
94
|
+
if (childEl) item.appendChild(childEl);
|
|
95
|
+
track.appendChild(item);
|
|
96
|
+
items.push(item);
|
|
97
|
+
}
|
|
98
|
+
el.appendChild(track);
|
|
99
|
+
|
|
100
|
+
if (items.length > 1) {
|
|
101
|
+
var currentIdx = 0;
|
|
102
|
+
var flipTimer = setInterval(function() {
|
|
103
|
+
items[currentIdx].classList.remove("active");
|
|
104
|
+
currentIdx = (currentIdx + 1) % items.length;
|
|
105
|
+
items[currentIdx].classList.add("active");
|
|
106
|
+
}, intervalMs);
|
|
107
|
+
// Store timer for potential cleanup on re-render
|
|
108
|
+
el._flipTimer = flipTimer;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return el;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function _appendTickerItems(track, children, separator) {
|
|
115
|
+
for (var i = 0; i < children.length; i++) {
|
|
116
|
+
if (i > 0 && separator) {
|
|
117
|
+
var sep = document.createElement("span");
|
|
118
|
+
sep.className = "aup-ticker-separator";
|
|
119
|
+
sep.textContent = separator;
|
|
120
|
+
track.appendChild(sep);
|
|
121
|
+
}
|
|
122
|
+
var item = document.createElement("div");
|
|
123
|
+
item.className = "aup-ticker-item";
|
|
124
|
+
var childEl = renderAupNode(children[i]);
|
|
125
|
+
if (childEl) item.appendChild(childEl);
|
|
126
|
+
track.appendChild(item);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
`;
|
|
130
|
+
|
|
131
|
+
//#endregion
|
|
132
|
+
export { TICKER_JS };
|
|
133
|
+
//# sourceMappingURL=ticker.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticker.mjs","names":[],"sources":["../../../src/web-page/renderers/ticker.ts"],"sourcesContent":["export const TICKER_JS = `\n function renderAupTicker(node) {\n var p = node.props || {};\n var mode = p.mode === \"flip\" || p.mode === \"static\" ? p.mode : \"scroll\";\n var intent = p.intent;\n var separator = p.separator != null ? String(p.separator) : \" \\\\u2022 \";\n if (separator.length > 32) separator = separator.slice(0, 32);\n var speed = p.speed;\n var pauseOnHover = p.pauseOnHover !== false;\n var direction = p.direction || \"rtl\";\n var flipTransition = p.flipTransition || \"fade\";\n var children = node.children || [];\n if (children.length > 200) children = children.slice(0, 200);\n\n var el = document.createElement(\"div\");\n el.className = \"aup-ticker\";\n el.setAttribute(\"data-mode\", mode);\n if (intent) el.setAttribute(\"data-intent\", intent);\n\n var normalizedSpeed = _normalizeTickerSpeed(mode, speed);\n\n if (mode === \"static\") {\n return _buildStaticTicker(el, children, separator);\n } else if (mode === \"flip\") {\n return _buildFlipTicker(el, children, normalizedSpeed, flipTransition);\n }\n // Default: scroll\n return _buildScrollTicker(el, children, separator, normalizedSpeed, pauseOnHover, direction);\n }\n\n function _normalizeTickerSpeed(mode, speed) {\n var n = Number(speed);\n if (!isFinite(n)) n = mode === \"flip\" ? 4000 : 60;\n if (mode === \"flip\") {\n n = Math.round(n);\n if (n < 1000) n = 1000;\n if (n > 60000) n = 60000;\n return n;\n }\n if (n < 10) n = 10;\n if (n > 400) n = 400;\n return n;\n }\n\n function _buildStaticTicker(el, children, separator) {\n var track = document.createElement(\"div\");\n track.className = \"aup-ticker-track\";\n _appendTickerItems(track, children, separator);\n el.appendChild(track);\n return el;\n }\n\n function _buildScrollTicker(el, children, separator, pxPerSec, pauseOnHover, direction) {\n var track = document.createElement(\"div\");\n track.className = \"aup-ticker-track\";\n\n // First copy\n _appendTickerItems(track, children, separator);\n // Duplicate for seamless loop\n _appendTickerItems(track, children, separator);\n\n el.appendChild(track);\n\n if (direction === \"ltr\") el.setAttribute(\"data-direction\", \"ltr\");\n\n // Calculate duration after DOM insertion (need widths)\n requestAnimationFrame(function() {\n var trackWidth = track.scrollWidth / 2;\n if (trackWidth > 0 && pxPerSec > 0) {\n var duration = trackWidth / pxPerSec;\n el.style.setProperty(\"--ticker-duration\", duration + \"s\");\n }\n });\n\n if (pauseOnHover) {\n el.addEventListener(\"mouseenter\", function() { el.setAttribute(\"data-paused\", \"true\"); });\n el.addEventListener(\"mouseleave\", function() { el.removeAttribute(\"data-paused\"); });\n }\n\n return el;\n }\n\n function _buildFlipTicker(el, children, intervalMs, transition) {\n var track = document.createElement(\"div\");\n track.className = \"aup-ticker-track\";\n el.setAttribute(\"data-flip-transition\", transition);\n\n var items = [];\n for (var i = 0; i < children.length; i++) {\n var item = document.createElement(\"div\");\n item.className = \"aup-ticker-item\" + (i === 0 ? \" active\" : \"\");\n var childEl = renderAupNode(children[i]);\n if (childEl) item.appendChild(childEl);\n track.appendChild(item);\n items.push(item);\n }\n el.appendChild(track);\n\n if (items.length > 1) {\n var currentIdx = 0;\n var flipTimer = setInterval(function() {\n items[currentIdx].classList.remove(\"active\");\n currentIdx = (currentIdx + 1) % items.length;\n items[currentIdx].classList.add(\"active\");\n }, intervalMs);\n // Store timer for potential cleanup on re-render\n el._flipTimer = flipTimer;\n }\n\n return el;\n }\n\n function _appendTickerItems(track, children, separator) {\n for (var i = 0; i < children.length; i++) {\n if (i > 0 && separator) {\n var sep = document.createElement(\"span\");\n sep.className = \"aup-ticker-separator\";\n sep.textContent = separator;\n track.appendChild(sep);\n }\n var item = document.createElement(\"div\");\n item.className = \"aup-ticker-item\";\n var childEl = renderAupNode(children[i]);\n if (childEl) item.appendChild(childEl);\n track.appendChild(item);\n }\n }\n`;\n"],"mappings":";AAAA,MAAa,YAAY"}
|