@hypen-space/web 0.3.9 → 0.3.11
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/dist/{src/canvas → canvas}/index.js +10 -6
- package/dist/{src/canvas → canvas}/index.js.map +4 -4
- package/dist/{src/canvas → canvas}/layout.js +4 -2
- package/dist/{src/canvas → canvas}/layout.js.map +3 -3
- package/dist/{src/canvas → canvas}/paint.js +4 -2
- package/dist/{src/canvas → canvas}/paint.js.map +3 -3
- package/dist/{src/canvas → canvas}/renderer.js +10 -6
- package/dist/{src/canvas → canvas}/renderer.js.map +4 -4
- package/dist/{src/canvas → canvas}/text.js +4 -2
- package/dist/{src/canvas → canvas}/text.js.map +3 -3
- package/dist/{src/dom → dom}/applicators/advanced-layout.js +16 -3
- package/dist/dom/applicators/advanced-layout.js.map +11 -0
- package/dist/{src/dom → dom}/applicators/events.js +6 -4
- package/dist/dom/applicators/events.js.map +11 -0
- package/dist/{src/dom → dom}/applicators/index.js +153 -24
- package/dist/dom/applicators/index.js.map +26 -0
- package/dist/{src/dom → dom}/applicators/layout.js +16 -3
- package/dist/dom/applicators/layout.js.map +10 -0
- package/dist/dom/applicators/margin.js +104 -0
- package/dist/dom/applicators/margin.js.map +10 -0
- package/dist/dom/applicators/padding.js +104 -0
- package/dist/dom/applicators/padding.js.map +10 -0
- package/dist/{src/dom → dom}/applicators/size.js +11 -3
- package/dist/{src/dom → dom}/applicators/size.js.map +3 -3
- package/dist/dom/components/button.js.map +10 -0
- package/dist/{src/dom → dom}/components/center.js +4 -1
- package/dist/dom/components/center.js.map +10 -0
- package/dist/dom/components/column.js.map +10 -0
- package/dist/{src/dom → dom}/components/container.js +1 -4
- package/dist/{src/dom → dom}/components/container.js.map +3 -3
- package/dist/{src/dom → dom}/components/grid.js +18 -2
- package/dist/dom/components/grid.js.map +10 -0
- package/dist/{src/dom → dom}/components/hypenapp.js +15 -13
- package/dist/dom/components/hypenapp.js.map +10 -0
- package/dist/{src/dom → dom}/components/index.js +64 -20
- package/dist/dom/components/index.js.map +41 -0
- package/dist/{src/dom → dom}/components/route.js +5 -3
- package/dist/dom/components/route.js.map +10 -0
- package/dist/{src/dom → dom}/components/row.js +18 -2
- package/dist/dom/components/row.js.map +10 -0
- package/dist/{src/dom → dom}/components/stack.js +5 -1
- package/dist/dom/components/stack.js.map +10 -0
- package/dist/{src/dom → dom}/components/text.js +5 -1
- package/dist/dom/components/text.js.map +10 -0
- package/dist/{src/dom → dom}/debug.js +5 -3
- package/dist/dom/debug.js.map +10 -0
- package/dist/{src/dom → dom}/events.js +15 -12
- package/dist/dom/events.js.map +10 -0
- package/dist/{src/dom/renderer.js → dom/index.js} +345 -55
- package/dist/dom/index.js.map +62 -0
- package/dist/{src/dom/index.js → dom/renderer.js} +233 -164
- package/dist/dom/renderer.js.map +61 -0
- package/dist/{src/hypen.js → hypen.js} +265 -118
- package/dist/hypen.js.map +62 -0
- package/dist/{src/index.js → index.js} +288 -134
- package/dist/index.js.map +72 -0
- package/package.json +22 -22
- package/src/canvas/renderer.ts +7 -4
- package/src/canvas/text.ts +4 -1
- package/src/dom/applicators/events.ts +6 -12
- package/src/dom/applicators/layout.ts +4 -0
- package/src/dom/applicators/size.ts +7 -2
- package/src/dom/components/center.ts +9 -0
- package/src/dom/components/column.ts +0 -4
- package/src/dom/components/grid.ts +22 -0
- package/src/dom/components/hypenapp.ts +14 -11
- package/src/dom/components/route.ts +4 -1
- package/src/dom/components/row.ts +20 -0
- package/src/dom/debug.ts +6 -2
- package/src/dom/events.ts +16 -12
- package/src/dom/renderer.ts +12 -9
- package/src/hypen.ts +32 -73
- package/dist/src/dom/applicators/advanced-layout.js.map +0 -11
- package/dist/src/dom/applicators/events.js.map +0 -11
- package/dist/src/dom/applicators/index.js.map +0 -26
- package/dist/src/dom/applicators/layout.js.map +0 -10
- package/dist/src/dom/applicators/margin.js +0 -51
- package/dist/src/dom/applicators/margin.js.map +0 -10
- package/dist/src/dom/applicators/padding.js +0 -51
- package/dist/src/dom/applicators/padding.js.map +0 -10
- package/dist/src/dom/components/button.js.map +0 -10
- package/dist/src/dom/components/center.js.map +0 -10
- package/dist/src/dom/components/column.js.map +0 -10
- package/dist/src/dom/components/grid.js.map +0 -10
- package/dist/src/dom/components/hypenapp.js.map +0 -10
- package/dist/src/dom/components/index.js.map +0 -41
- package/dist/src/dom/components/route.js.map +0 -10
- package/dist/src/dom/components/row.js.map +0 -10
- package/dist/src/dom/components/stack.js.map +0 -10
- package/dist/src/dom/components/text.js.map +0 -10
- package/dist/src/dom/debug.js.map +0 -10
- package/dist/src/dom/events.js.map +0 -10
- package/dist/src/dom/index.js.map +0 -62
- package/dist/src/dom/renderer.js.map +0 -61
- package/dist/src/hypen.js.map +0 -62
- package/dist/src/index.js.map +0 -72
- /package/dist/{src/canvas → canvas}/accessibility.js +0 -0
- /package/dist/{src/canvas → canvas}/accessibility.js.map +0 -0
- /package/dist/{src/canvas → canvas}/events.js +0 -0
- /package/dist/{src/canvas → canvas}/events.js.map +0 -0
- /package/dist/{src/canvas → canvas}/input.js +0 -0
- /package/dist/{src/canvas → canvas}/input.js.map +0 -0
- /package/dist/{src/canvas → canvas}/types.js +0 -0
- /package/dist/{src/canvas → canvas}/types.js.map +0 -0
- /package/dist/{src/canvas → canvas}/utils.js +0 -0
- /package/dist/{src/canvas → canvas}/utils.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/background.js +0 -0
- /package/dist/{src/dom → dom}/applicators/background.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/border.js +0 -0
- /package/dist/{src/dom → dom}/applicators/border.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/color.js +0 -0
- /package/dist/{src/dom → dom}/applicators/color.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/display.js +0 -0
- /package/dist/{src/dom → dom}/applicators/display.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/effects.js +0 -0
- /package/dist/{src/dom → dom}/applicators/effects.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/font.js +0 -0
- /package/dist/{src/dom → dom}/applicators/font.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/transform.js +0 -0
- /package/dist/{src/dom → dom}/applicators/transform.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/transition.js +0 -0
- /package/dist/{src/dom → dom}/applicators/transition.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/types.js +0 -0
- /package/dist/{src/dom → dom}/applicators/types.js.map +0 -0
- /package/dist/{src/dom → dom}/applicators/typography.js +0 -0
- /package/dist/{src/dom → dom}/applicators/typography.js.map +0 -0
- /package/dist/{src/dom → dom}/canvas/index.js +0 -0
- /package/dist/{src/dom → dom}/canvas/index.js.map +0 -0
- /package/dist/{src/dom → dom}/components/audio.js +0 -0
- /package/dist/{src/dom → dom}/components/audio.js.map +0 -0
- /package/dist/{src/dom → dom}/components/avatar.js +0 -0
- /package/dist/{src/dom → dom}/components/avatar.js.map +0 -0
- /package/dist/{src/dom → dom}/components/badge.js +0 -0
- /package/dist/{src/dom → dom}/components/badge.js.map +0 -0
- /package/dist/{src/dom → dom}/components/button.js +0 -0
- /package/dist/{src/dom → dom}/components/card.js +0 -0
- /package/dist/{src/dom → dom}/components/card.js.map +0 -0
- /package/dist/{src/dom → dom}/components/checkbox.js +0 -0
- /package/dist/{src/dom → dom}/components/checkbox.js.map +0 -0
- /package/dist/{src/dom → dom}/components/column.js +0 -0
- /package/dist/{src/dom → dom}/components/divider.js +0 -0
- /package/dist/{src/dom → dom}/components/divider.js.map +0 -0
- /package/dist/{src/dom → dom}/components/heading.js +0 -0
- /package/dist/{src/dom → dom}/components/heading.js.map +0 -0
- /package/dist/{src/dom → dom}/components/image.js +0 -0
- /package/dist/{src/dom → dom}/components/image.js.map +0 -0
- /package/dist/{src/dom → dom}/components/input.js +0 -0
- /package/dist/{src/dom → dom}/components/input.js.map +0 -0
- /package/dist/{src/dom → dom}/components/link.js +0 -0
- /package/dist/{src/dom → dom}/components/link.js.map +0 -0
- /package/dist/{src/dom → dom}/components/list.js +0 -0
- /package/dist/{src/dom → dom}/components/list.js.map +0 -0
- /package/dist/{src/dom → dom}/components/paragraph.js +0 -0
- /package/dist/{src/dom → dom}/components/paragraph.js.map +0 -0
- /package/dist/{src/dom → dom}/components/progressbar.js +0 -0
- /package/dist/{src/dom → dom}/components/progressbar.js.map +0 -0
- /package/dist/{src/dom → dom}/components/router.js +0 -0
- /package/dist/{src/dom → dom}/components/router.js.map +0 -0
- /package/dist/{src/dom → dom}/components/select.js +0 -0
- /package/dist/{src/dom → dom}/components/select.js.map +0 -0
- /package/dist/{src/dom → dom}/components/slider.js +0 -0
- /package/dist/{src/dom → dom}/components/slider.js.map +0 -0
- /package/dist/{src/dom → dom}/components/spacer.js +0 -0
- /package/dist/{src/dom → dom}/components/spacer.js.map +0 -0
- /package/dist/{src/dom → dom}/components/spinner.js +0 -0
- /package/dist/{src/dom → dom}/components/spinner.js.map +0 -0
- /package/dist/{src/dom → dom}/components/switch.js +0 -0
- /package/dist/{src/dom → dom}/components/switch.js.map +0 -0
- /package/dist/{src/dom → dom}/components/textarea.js +0 -0
- /package/dist/{src/dom → dom}/components/textarea.js.map +0 -0
- /package/dist/{src/dom → dom}/components/video.js +0 -0
- /package/dist/{src/dom → dom}/components/video.js.map +0 -0
- /package/dist/{src/dom → dom}/element-data.js +0 -0
- /package/dist/{src/dom → dom}/element-data.js.map +0 -0
|
@@ -51,10 +51,26 @@ var exports_row = {};
|
|
|
51
51
|
__export(exports_row, {
|
|
52
52
|
rowHandler: () => rowHandler
|
|
53
53
|
});
|
|
54
|
-
|
|
54
|
+
function ensureRowStyles() {
|
|
55
|
+
if (rowStylesInjected)
|
|
56
|
+
return;
|
|
57
|
+
rowStylesInjected = true;
|
|
58
|
+
const style = document.createElement("style");
|
|
59
|
+
style.id = "hypen-row-styles";
|
|
60
|
+
style.textContent = `
|
|
61
|
+
/* Row expands to fill width when it has children with flex/weight */
|
|
62
|
+
/* This matches iOS/Android behavior where weighted children cause parent to expand */
|
|
63
|
+
[data-hypen-type="row"]:has(> [data-hypen-flex]) {
|
|
64
|
+
width: 100%;
|
|
65
|
+
}
|
|
66
|
+
`;
|
|
67
|
+
document.head.appendChild(style);
|
|
68
|
+
}
|
|
69
|
+
var rowStylesInjected = false, rowHandler;
|
|
55
70
|
var init_row = __esm(() => {
|
|
56
71
|
rowHandler = {
|
|
57
72
|
create() {
|
|
73
|
+
ensureRowStyles();
|
|
58
74
|
const el = document.createElement("div");
|
|
59
75
|
el.style.display = "flex";
|
|
60
76
|
el.style.flexDirection = "row";
|
|
@@ -76,6 +92,10 @@ var init_text = __esm(() => {
|
|
|
76
92
|
create() {
|
|
77
93
|
const el = document.createElement("span");
|
|
78
94
|
el.style.display = "inline-block";
|
|
95
|
+
el.style.lineHeight = "1";
|
|
96
|
+
el.style.verticalAlign = "top";
|
|
97
|
+
el.style.margin = "0";
|
|
98
|
+
el.style.padding = "0";
|
|
79
99
|
el.dataset.hypenType = "text";
|
|
80
100
|
return el;
|
|
81
101
|
},
|
|
@@ -151,9 +171,6 @@ var init_container = __esm(() => {
|
|
|
151
171
|
containerHandler = {
|
|
152
172
|
create() {
|
|
153
173
|
const el = document.createElement("div");
|
|
154
|
-
el.style.display = "flex";
|
|
155
|
-
el.style.flexDirection = "column";
|
|
156
|
-
el.style.alignItems = "stretch";
|
|
157
174
|
el.dataset.hypenType = "container";
|
|
158
175
|
return el;
|
|
159
176
|
}
|
|
@@ -173,6 +190,9 @@ var init_center = __esm(() => {
|
|
|
173
190
|
el.style.display = "flex";
|
|
174
191
|
el.style.alignItems = "center";
|
|
175
192
|
el.style.justifyContent = "center";
|
|
193
|
+
el.style.width = "100%";
|
|
194
|
+
el.style.height = "100%";
|
|
195
|
+
el.style.alignSelf = "stretch";
|
|
176
196
|
el.dataset.hypenType = "center";
|
|
177
197
|
return el;
|
|
178
198
|
}
|
|
@@ -423,12 +443,16 @@ function ensureStackStyles() {
|
|
|
423
443
|
position: relative;
|
|
424
444
|
display: grid;
|
|
425
445
|
grid-template-areas: "stack";
|
|
446
|
+
/* Default alignment: top-left (matching iOS/Android ZStack default) */
|
|
447
|
+
justify-items: start;
|
|
448
|
+
align-items: start;
|
|
426
449
|
/* Ensure Stack participates properly in flex layouts (Row/Column) */
|
|
427
450
|
min-width: 0;
|
|
428
451
|
min-height: 0;
|
|
429
452
|
}
|
|
430
453
|
[data-hypen-type="stack"] > * {
|
|
431
454
|
grid-area: stack;
|
|
455
|
+
/* Don't set justify-self/align-self here - let parent's justify-items/align-items control */
|
|
432
456
|
}
|
|
433
457
|
`;
|
|
434
458
|
document.head.appendChild(style);
|
|
@@ -482,10 +506,26 @@ var exports_grid = {};
|
|
|
482
506
|
__export(exports_grid, {
|
|
483
507
|
gridHandler: () => gridHandler
|
|
484
508
|
});
|
|
485
|
-
|
|
509
|
+
function ensureGridStyles() {
|
|
510
|
+
if (gridStylesInjected)
|
|
511
|
+
return;
|
|
512
|
+
gridStylesInjected = true;
|
|
513
|
+
const style = document.createElement("style");
|
|
514
|
+
style.id = "hypen-grid-styles";
|
|
515
|
+
style.textContent = `
|
|
516
|
+
/* Grid children stretch to fill cells by default (matches Android behavior) */
|
|
517
|
+
[data-hypen-type="grid"] > * {
|
|
518
|
+
justify-self: stretch;
|
|
519
|
+
align-self: stretch;
|
|
520
|
+
}
|
|
521
|
+
`;
|
|
522
|
+
document.head.appendChild(style);
|
|
523
|
+
}
|
|
524
|
+
var gridStylesInjected = false, gridHandler;
|
|
486
525
|
var init_grid = __esm(() => {
|
|
487
526
|
gridHandler = {
|
|
488
527
|
create() {
|
|
528
|
+
ensureGridStyles();
|
|
489
529
|
const el = document.createElement("div");
|
|
490
530
|
el.style.display = "grid";
|
|
491
531
|
el.dataset.hypenType = "grid";
|
|
@@ -971,8 +1011,10 @@ var exports_route = {};
|
|
|
971
1011
|
__export(exports_route, {
|
|
972
1012
|
routeHandler: () => routeHandler
|
|
973
1013
|
});
|
|
974
|
-
|
|
1014
|
+
import { frameworkLoggers } from "@hypen-space/core";
|
|
1015
|
+
var log, routeHandler;
|
|
975
1016
|
var init_route = __esm(() => {
|
|
1017
|
+
log = frameworkLoggers.router;
|
|
976
1018
|
routeHandler = {
|
|
977
1019
|
create() {
|
|
978
1020
|
const el = document.createElement("div");
|
|
@@ -992,7 +1034,7 @@ var init_route = __esm(() => {
|
|
|
992
1034
|
if (componentName) {
|
|
993
1035
|
el.dataset.routeComponent = String(componentName);
|
|
994
1036
|
}
|
|
995
|
-
|
|
1037
|
+
log.debug(`Route created: path="${path}", lazy=${isLazy}, component="${el.dataset.routeComponent || "none"}"`);
|
|
996
1038
|
}
|
|
997
1039
|
};
|
|
998
1040
|
});
|
|
@@ -1004,11 +1046,12 @@ __export(exports_hypenapp, {
|
|
|
1004
1046
|
disconnectHypenApp: () => disconnectHypenApp
|
|
1005
1047
|
});
|
|
1006
1048
|
import { RemoteEngine } from "@hypen-space/core/remote/client";
|
|
1049
|
+
import { frameworkLoggers as frameworkLoggers2 } from "@hypen-space/core";
|
|
1007
1050
|
function applyPatches(container, nodes, patches, engine, onRoot) {
|
|
1008
1051
|
for (const patch of patches) {
|
|
1009
1052
|
switch (patch.type) {
|
|
1010
1053
|
case "create": {
|
|
1011
|
-
const el = createElement(patch.
|
|
1054
|
+
const el = createElement(patch.elementType, patch.props || {});
|
|
1012
1055
|
el.dataset.hypenId = patch.id;
|
|
1013
1056
|
el.__hypenEngine = engine;
|
|
1014
1057
|
nodes.set(patch.id, el);
|
|
@@ -1029,10 +1072,10 @@ function applyPatches(container, nodes, patches, engine, onRoot) {
|
|
|
1029
1072
|
break;
|
|
1030
1073
|
}
|
|
1031
1074
|
case "insert": {
|
|
1032
|
-
const parentId = patch.
|
|
1075
|
+
const parentId = patch.parentId;
|
|
1033
1076
|
const parent = parentId === "root" ? container : nodes.get(parentId);
|
|
1034
1077
|
const child = nodes.get(patch.id);
|
|
1035
|
-
const beforeId = patch.
|
|
1078
|
+
const beforeId = patch.beforeId;
|
|
1036
1079
|
if (parent && child) {
|
|
1037
1080
|
if (parentId === "root") {
|
|
1038
1081
|
onRoot(patch.id);
|
|
@@ -1051,10 +1094,10 @@ function applyPatches(container, nodes, patches, engine, onRoot) {
|
|
|
1051
1094
|
break;
|
|
1052
1095
|
}
|
|
1053
1096
|
case "move": {
|
|
1054
|
-
const parentId = patch.
|
|
1097
|
+
const parentId = patch.parentId;
|
|
1055
1098
|
const parent = parentId === "root" ? container : nodes.get(parentId);
|
|
1056
1099
|
const child = nodes.get(patch.id);
|
|
1057
|
-
const beforeId = patch.
|
|
1100
|
+
const beforeId = patch.beforeId;
|
|
1058
1101
|
if (parent && child) {
|
|
1059
1102
|
if (beforeId) {
|
|
1060
1103
|
const before = nodes.get(beforeId);
|
|
@@ -1188,8 +1231,9 @@ function disconnectHypenApp(element) {
|
|
|
1188
1231
|
activeInstances.delete(element);
|
|
1189
1232
|
}
|
|
1190
1233
|
}
|
|
1191
|
-
var activeInstances, hypenAppHandler;
|
|
1234
|
+
var log2, activeInstances, hypenAppHandler;
|
|
1192
1235
|
var init_hypenapp = __esm(() => {
|
|
1236
|
+
log2 = frameworkLoggers2.remote;
|
|
1193
1237
|
activeInstances = new WeakMap;
|
|
1194
1238
|
hypenAppHandler = {
|
|
1195
1239
|
create() {
|
|
@@ -1201,7 +1245,7 @@ var init_hypenapp = __esm(() => {
|
|
|
1201
1245
|
applyProps(element, props) {
|
|
1202
1246
|
const url = props["0"] || props.url;
|
|
1203
1247
|
if (!url || typeof url !== "string") {
|
|
1204
|
-
|
|
1248
|
+
log2.error("HypenApp: URL is required");
|
|
1205
1249
|
element.innerHTML = '<div style="color: red;">HypenApp: URL required</div>';
|
|
1206
1250
|
return;
|
|
1207
1251
|
}
|
|
@@ -1226,16 +1270,16 @@ var init_hypenapp = __esm(() => {
|
|
|
1226
1270
|
element.innerHTML = '<div class="hypen-app-loading">Connecting...</div>';
|
|
1227
1271
|
engine.connect().then(() => {
|
|
1228
1272
|
element.innerHTML = "";
|
|
1229
|
-
|
|
1273
|
+
log2.debug(`HypenApp connected to ${url}`);
|
|
1230
1274
|
}).catch((error) => {
|
|
1231
1275
|
element.innerHTML = `<div style="color: red;">HypenApp: Connection failed - ${error.message}</div>`;
|
|
1232
|
-
|
|
1276
|
+
log2.error("HypenApp connection failed:", error);
|
|
1233
1277
|
});
|
|
1234
1278
|
engine.onDisconnect(() => {
|
|
1235
|
-
|
|
1279
|
+
log2.debug("HypenApp disconnected");
|
|
1236
1280
|
});
|
|
1237
1281
|
engine.onError((error) => {
|
|
1238
|
-
|
|
1282
|
+
log2.error("HypenApp error:", error);
|
|
1239
1283
|
});
|
|
1240
1284
|
const observer = new MutationObserver((mutations) => {
|
|
1241
1285
|
for (const mutation of mutations) {
|
|
@@ -1244,7 +1288,7 @@ var init_hypenapp = __esm(() => {
|
|
|
1244
1288
|
engine.disconnect();
|
|
1245
1289
|
activeInstances.delete(element);
|
|
1246
1290
|
observer.disconnect();
|
|
1247
|
-
|
|
1291
|
+
log2.debug("HypenApp cleaned up");
|
|
1248
1292
|
return;
|
|
1249
1293
|
}
|
|
1250
1294
|
}
|
|
@@ -1347,40 +1391,134 @@ class ComponentRegistry {
|
|
|
1347
1391
|
}
|
|
1348
1392
|
|
|
1349
1393
|
// src/dom/applicators/padding.ts
|
|
1394
|
+
var getNumericValue = (value) => {
|
|
1395
|
+
if (typeof value === "number")
|
|
1396
|
+
return value;
|
|
1397
|
+
if (typeof value === "object" && value["0"] !== undefined)
|
|
1398
|
+
return Number(value["0"]);
|
|
1399
|
+
if (typeof value === "string")
|
|
1400
|
+
return parseFloat(value);
|
|
1401
|
+
return null;
|
|
1402
|
+
};
|
|
1350
1403
|
var paddingHandler = (el, value) => {
|
|
1351
1404
|
if (typeof value === "number") {
|
|
1352
1405
|
el.style.padding = `${value}px`;
|
|
1353
1406
|
} else if (typeof value === "object") {
|
|
1354
|
-
if (value
|
|
1355
|
-
el.style.
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1407
|
+
if (value["0"] !== undefined && Object.keys(value).length === 1) {
|
|
1408
|
+
el.style.padding = `${value["0"]}px`;
|
|
1409
|
+
} else {
|
|
1410
|
+
if (value.left !== undefined)
|
|
1411
|
+
el.style.paddingLeft = `${value.left}px`;
|
|
1412
|
+
if (value.right !== undefined)
|
|
1413
|
+
el.style.paddingRight = `${value.right}px`;
|
|
1414
|
+
if (value.top !== undefined)
|
|
1415
|
+
el.style.paddingTop = `${value.top}px`;
|
|
1416
|
+
if (value.bottom !== undefined)
|
|
1417
|
+
el.style.paddingBottom = `${value.bottom}px`;
|
|
1418
|
+
}
|
|
1362
1419
|
} else {
|
|
1363
1420
|
el.style.padding = String(value);
|
|
1364
1421
|
}
|
|
1365
1422
|
};
|
|
1423
|
+
var paddingTopHandler = (el, value) => {
|
|
1424
|
+
const v = getNumericValue(value);
|
|
1425
|
+
if (v !== null)
|
|
1426
|
+
el.style.paddingTop = `${v}px`;
|
|
1427
|
+
};
|
|
1428
|
+
var paddingBottomHandler = (el, value) => {
|
|
1429
|
+
const v = getNumericValue(value);
|
|
1430
|
+
if (v !== null)
|
|
1431
|
+
el.style.paddingBottom = `${v}px`;
|
|
1432
|
+
};
|
|
1433
|
+
var paddingLeftHandler = (el, value) => {
|
|
1434
|
+
const v = getNumericValue(value);
|
|
1435
|
+
if (v !== null)
|
|
1436
|
+
el.style.paddingLeft = `${v}px`;
|
|
1437
|
+
};
|
|
1438
|
+
var paddingRightHandler = (el, value) => {
|
|
1439
|
+
const v = getNumericValue(value);
|
|
1440
|
+
if (v !== null)
|
|
1441
|
+
el.style.paddingRight = `${v}px`;
|
|
1442
|
+
};
|
|
1443
|
+
var paddingHorizontalHandler = (el, value) => {
|
|
1444
|
+
const v = getNumericValue(value);
|
|
1445
|
+
if (v !== null) {
|
|
1446
|
+
el.style.paddingLeft = `${v}px`;
|
|
1447
|
+
el.style.paddingRight = `${v}px`;
|
|
1448
|
+
}
|
|
1449
|
+
};
|
|
1450
|
+
var paddingVerticalHandler = (el, value) => {
|
|
1451
|
+
const v = getNumericValue(value);
|
|
1452
|
+
if (v !== null) {
|
|
1453
|
+
el.style.paddingTop = `${v}px`;
|
|
1454
|
+
el.style.paddingBottom = `${v}px`;
|
|
1455
|
+
}
|
|
1456
|
+
};
|
|
1366
1457
|
|
|
1367
1458
|
// src/dom/applicators/margin.ts
|
|
1459
|
+
var getNumericValue2 = (value) => {
|
|
1460
|
+
if (typeof value === "number")
|
|
1461
|
+
return value;
|
|
1462
|
+
if (typeof value === "object" && value["0"] !== undefined)
|
|
1463
|
+
return Number(value["0"]);
|
|
1464
|
+
if (typeof value === "string")
|
|
1465
|
+
return parseFloat(value);
|
|
1466
|
+
return null;
|
|
1467
|
+
};
|
|
1368
1468
|
var marginHandler = (el, value) => {
|
|
1369
1469
|
if (typeof value === "number") {
|
|
1370
1470
|
el.style.margin = `${value}px`;
|
|
1371
1471
|
} else if (typeof value === "object") {
|
|
1372
|
-
if (value
|
|
1373
|
-
el.style.
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1472
|
+
if (value["0"] !== undefined && Object.keys(value).length === 1) {
|
|
1473
|
+
el.style.margin = `${value["0"]}px`;
|
|
1474
|
+
} else {
|
|
1475
|
+
if (value.left !== undefined)
|
|
1476
|
+
el.style.marginLeft = `${value.left}px`;
|
|
1477
|
+
if (value.right !== undefined)
|
|
1478
|
+
el.style.marginRight = `${value.right}px`;
|
|
1479
|
+
if (value.top !== undefined)
|
|
1480
|
+
el.style.marginTop = `${value.top}px`;
|
|
1481
|
+
if (value.bottom !== undefined)
|
|
1482
|
+
el.style.marginBottom = `${value.bottom}px`;
|
|
1483
|
+
}
|
|
1380
1484
|
} else {
|
|
1381
1485
|
el.style.margin = String(value);
|
|
1382
1486
|
}
|
|
1383
1487
|
};
|
|
1488
|
+
var marginTopHandler = (el, value) => {
|
|
1489
|
+
const v = getNumericValue2(value);
|
|
1490
|
+
if (v !== null)
|
|
1491
|
+
el.style.marginTop = `${v}px`;
|
|
1492
|
+
};
|
|
1493
|
+
var marginBottomHandler = (el, value) => {
|
|
1494
|
+
const v = getNumericValue2(value);
|
|
1495
|
+
if (v !== null)
|
|
1496
|
+
el.style.marginBottom = `${v}px`;
|
|
1497
|
+
};
|
|
1498
|
+
var marginLeftHandler = (el, value) => {
|
|
1499
|
+
const v = getNumericValue2(value);
|
|
1500
|
+
if (v !== null)
|
|
1501
|
+
el.style.marginLeft = `${v}px`;
|
|
1502
|
+
};
|
|
1503
|
+
var marginRightHandler = (el, value) => {
|
|
1504
|
+
const v = getNumericValue2(value);
|
|
1505
|
+
if (v !== null)
|
|
1506
|
+
el.style.marginRight = `${v}px`;
|
|
1507
|
+
};
|
|
1508
|
+
var marginHorizontalHandler = (el, value) => {
|
|
1509
|
+
const v = getNumericValue2(value);
|
|
1510
|
+
if (v !== null) {
|
|
1511
|
+
el.style.marginLeft = `${v}px`;
|
|
1512
|
+
el.style.marginRight = `${v}px`;
|
|
1513
|
+
}
|
|
1514
|
+
};
|
|
1515
|
+
var marginVerticalHandler = (el, value) => {
|
|
1516
|
+
const v = getNumericValue2(value);
|
|
1517
|
+
if (v !== null) {
|
|
1518
|
+
el.style.marginTop = `${v}px`;
|
|
1519
|
+
el.style.marginBottom = `${v}px`;
|
|
1520
|
+
}
|
|
1521
|
+
};
|
|
1384
1522
|
|
|
1385
1523
|
// src/dom/applicators/color.ts
|
|
1386
1524
|
var colorHandlers = {
|
|
@@ -1569,8 +1707,14 @@ var sizeHandlers = {
|
|
|
1569
1707
|
if (value === false)
|
|
1570
1708
|
return;
|
|
1571
1709
|
const fraction = typeof value === "number" ? value : 1;
|
|
1572
|
-
|
|
1573
|
-
|
|
1710
|
+
if (fraction === 1) {
|
|
1711
|
+
el.style.alignSelf = "stretch";
|
|
1712
|
+
el.style.width = "100%";
|
|
1713
|
+
el.style.minWidth = "0";
|
|
1714
|
+
} else {
|
|
1715
|
+
el.style.width = `${fraction * 100}%`;
|
|
1716
|
+
}
|
|
1717
|
+
el.style.justifySelf = "stretch";
|
|
1574
1718
|
},
|
|
1575
1719
|
fillMaxHeight: (el, value) => {
|
|
1576
1720
|
if (value === false)
|
|
@@ -1584,6 +1728,8 @@ var sizeHandlers = {
|
|
|
1584
1728
|
const fraction = typeof value === "number" ? value : 1;
|
|
1585
1729
|
el.style.width = `${fraction * 100}%`;
|
|
1586
1730
|
el.style.height = `${fraction * 100}%`;
|
|
1731
|
+
el.style.alignSelf = "stretch";
|
|
1732
|
+
el.style.minWidth = "0";
|
|
1587
1733
|
}
|
|
1588
1734
|
};
|
|
1589
1735
|
|
|
@@ -1725,8 +1871,11 @@ function mapAlignmentValue(value) {
|
|
|
1725
1871
|
var layoutHandlers = {
|
|
1726
1872
|
verticalAlignment: (el, value) => {
|
|
1727
1873
|
const val = mapAlignmentValue(String(value));
|
|
1874
|
+
const display = el.style.display || getComputedStyle(el).display;
|
|
1728
1875
|
const flexDirection = el.style.flexDirection || getComputedStyle(el).flexDirection;
|
|
1729
|
-
if (
|
|
1876
|
+
if (display === "grid") {
|
|
1877
|
+
el.style.alignItems = val;
|
|
1878
|
+
} else if (flexDirection === "column" || flexDirection === "column-reverse") {
|
|
1730
1879
|
el.style.justifyContent = val;
|
|
1731
1880
|
} else {
|
|
1732
1881
|
el.style.alignItems = val;
|
|
@@ -1734,9 +1883,17 @@ var layoutHandlers = {
|
|
|
1734
1883
|
},
|
|
1735
1884
|
horizontalAlignment: (el, value) => {
|
|
1736
1885
|
const val = mapAlignmentValue(String(value));
|
|
1886
|
+
const display = el.style.display || getComputedStyle(el).display;
|
|
1737
1887
|
const flexDirection = el.style.flexDirection || getComputedStyle(el).flexDirection;
|
|
1738
|
-
if (
|
|
1888
|
+
if (display === "grid") {
|
|
1889
|
+
el.style.justifyItems = val;
|
|
1890
|
+
} else if (flexDirection === "column" || flexDirection === "column-reverse") {
|
|
1739
1891
|
el.style.alignItems = val;
|
|
1892
|
+
} else if (flexDirection === "row" || flexDirection === "row-reverse") {
|
|
1893
|
+
el.style.justifyContent = val;
|
|
1894
|
+
if (val !== "flex-start" && el.style.overflow !== "auto" && el.style.overflowX !== "auto") {
|
|
1895
|
+
el.style.width = "100%";
|
|
1896
|
+
}
|
|
1740
1897
|
} else {
|
|
1741
1898
|
el.style.justifyContent = val;
|
|
1742
1899
|
}
|
|
@@ -1752,9 +1909,11 @@ var layoutHandlers = {
|
|
|
1752
1909
|
},
|
|
1753
1910
|
weight: (el, value) => {
|
|
1754
1911
|
el.style.flex = String(value);
|
|
1912
|
+
el.dataset.hypenFlex = "true";
|
|
1755
1913
|
},
|
|
1756
1914
|
flex: (el, value) => {
|
|
1757
1915
|
el.style.flex = String(value);
|
|
1916
|
+
el.dataset.hypenFlex = "true";
|
|
1758
1917
|
},
|
|
1759
1918
|
flexGrow: (el, value) => {
|
|
1760
1919
|
el.style.flexGrow = String(value);
|
|
@@ -1879,6 +2038,8 @@ import {
|
|
|
1879
2038
|
disposableListener,
|
|
1880
2039
|
disposableTimeout
|
|
1881
2040
|
} from "@hypen-space/core/disposable";
|
|
2041
|
+
import { frameworkLoggers as frameworkLoggers3 } from "@hypen-space/core";
|
|
2042
|
+
var log3 = frameworkLoggers3.events;
|
|
1882
2043
|
function toPlainObject(value) {
|
|
1883
2044
|
if (value instanceof Map) {
|
|
1884
2045
|
const obj = {};
|
|
@@ -1972,7 +2133,7 @@ function createEventHandler(eventType, options = {}) {
|
|
|
1972
2133
|
return (element, value) => {
|
|
1973
2134
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
1974
2135
|
if (!actionName) {
|
|
1975
|
-
|
|
2136
|
+
log3.warn(`${eventType} requires an action reference starting with @, got:`, value);
|
|
1976
2137
|
return;
|
|
1977
2138
|
}
|
|
1978
2139
|
const disposables = getElementDisposables2(element);
|
|
@@ -2015,7 +2176,7 @@ function createKeyHandler(defaultKey = "Enter") {
|
|
|
2015
2176
|
return (element, value) => {
|
|
2016
2177
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
2017
2178
|
if (!actionName) {
|
|
2018
|
-
|
|
2179
|
+
log3.warn(`onKey requires an action reference starting with @, got:`, value);
|
|
2019
2180
|
return;
|
|
2020
2181
|
}
|
|
2021
2182
|
const disposables = getElementDisposables2(element);
|
|
@@ -2060,7 +2221,7 @@ function createLongClickHandler(thresholdMs = 500) {
|
|
|
2060
2221
|
return (element, value) => {
|
|
2061
2222
|
const { actionName, payload: customPayload } = extractActionDetails(value);
|
|
2062
2223
|
if (!actionName) {
|
|
2063
|
-
|
|
2224
|
+
log3.warn(`onLongClick requires an action reference starting with @, got:`, value);
|
|
2064
2225
|
return;
|
|
2065
2226
|
}
|
|
2066
2227
|
const disposables = getElementDisposables2(element);
|
|
@@ -2869,7 +3030,19 @@ class ApplicatorRegistry {
|
|
|
2869
3030
|
}
|
|
2870
3031
|
registerDefaults() {
|
|
2871
3032
|
this.register("padding", paddingHandler);
|
|
3033
|
+
this.register("paddingTop", paddingTopHandler);
|
|
3034
|
+
this.register("paddingBottom", paddingBottomHandler);
|
|
3035
|
+
this.register("paddingLeft", paddingLeftHandler);
|
|
3036
|
+
this.register("paddingRight", paddingRightHandler);
|
|
3037
|
+
this.register("paddingHorizontal", paddingHorizontalHandler);
|
|
3038
|
+
this.register("paddingVertical", paddingVerticalHandler);
|
|
2872
3039
|
this.register("margin", marginHandler);
|
|
3040
|
+
this.register("marginTop", marginTopHandler);
|
|
3041
|
+
this.register("marginBottom", marginBottomHandler);
|
|
3042
|
+
this.register("marginLeft", marginLeftHandler);
|
|
3043
|
+
this.register("marginRight", marginRightHandler);
|
|
3044
|
+
this.register("marginHorizontal", marginHorizontalHandler);
|
|
3045
|
+
this.register("marginVertical", marginVerticalHandler);
|
|
2873
3046
|
for (const [name, handler] of Object.entries(colorHandlers)) {
|
|
2874
3047
|
this.register(name, handler);
|
|
2875
3048
|
}
|
|
@@ -2954,6 +3127,8 @@ var canvasApplicators = {
|
|
|
2954
3127
|
};
|
|
2955
3128
|
|
|
2956
3129
|
// src/dom/debug.ts
|
|
3130
|
+
import { frameworkLoggers as frameworkLoggers4 } from "@hypen-space/core";
|
|
3131
|
+
var log4 = frameworkLoggers4.debug;
|
|
2957
3132
|
var defaultDebugConfig = {
|
|
2958
3133
|
enabled: false,
|
|
2959
3134
|
showHeatmap: true,
|
|
@@ -2979,7 +3154,7 @@ class RerenderTracker {
|
|
|
2979
3154
|
if (!this.config.enabled || !this.config.showHeatmap) {
|
|
2980
3155
|
return;
|
|
2981
3156
|
}
|
|
2982
|
-
|
|
3157
|
+
log4.debug(`Tracking re-render: ${id} - ${patchType}`);
|
|
2983
3158
|
const currentCount = this.renderCounts.get(id) || 0;
|
|
2984
3159
|
const newCount = currentCount + 1;
|
|
2985
3160
|
this.renderCounts.set(id, newCount);
|
|
@@ -2987,7 +3162,7 @@ class RerenderTracker {
|
|
|
2987
3162
|
}
|
|
2988
3163
|
updateHeatmap(id, element, renderCount, patchType) {
|
|
2989
3164
|
const opacity = Math.min(renderCount * this.config.heatmapIncrement / 100, this.config.maxOpacity);
|
|
2990
|
-
|
|
3165
|
+
log4.debug(`Updating heatmap for ${id}, count: ${renderCount}, opacity: ${opacity}`);
|
|
2991
3166
|
const isInline = window.getComputedStyle(element).display.includes("inline");
|
|
2992
3167
|
if (isInline || element.tagName === "SPAN") {
|
|
2993
3168
|
if (!element.dataset.hypenDebugOriginalBg) {
|
|
@@ -3115,6 +3290,9 @@ class RerenderTracker {
|
|
|
3115
3290
|
}
|
|
3116
3291
|
|
|
3117
3292
|
// src/dom/renderer.ts
|
|
3293
|
+
import { frameworkLoggers as frameworkLoggers5 } from "@hypen-space/core";
|
|
3294
|
+
var log5 = frameworkLoggers5.renderer;
|
|
3295
|
+
|
|
3118
3296
|
class DOMRenderer {
|
|
3119
3297
|
container;
|
|
3120
3298
|
nodes = new Map;
|
|
@@ -3148,13 +3326,13 @@ class DOMRenderer {
|
|
|
3148
3326
|
}
|
|
3149
3327
|
}
|
|
3150
3328
|
updateState(state) {
|
|
3151
|
-
|
|
3329
|
+
log5.debug("Updating state:", state);
|
|
3152
3330
|
this.currentState = state;
|
|
3153
3331
|
this.interpolateAllText();
|
|
3154
3332
|
}
|
|
3155
3333
|
mergeComponentState(componentState) {
|
|
3156
3334
|
this.currentState = { ...this.currentState, ...componentState };
|
|
3157
|
-
|
|
3335
|
+
log5.debug("Merged state:", this.currentState);
|
|
3158
3336
|
this.interpolateAllText();
|
|
3159
3337
|
}
|
|
3160
3338
|
interpolateAllText() {
|
|
@@ -3187,7 +3365,7 @@ class DOMRenderer {
|
|
|
3187
3365
|
applyPatch(patch) {
|
|
3188
3366
|
switch (patch.type) {
|
|
3189
3367
|
case "create":
|
|
3190
|
-
this.onCreate(patch.id, patch.
|
|
3368
|
+
this.onCreate(patch.id, patch.elementType, patch.props || {});
|
|
3191
3369
|
break;
|
|
3192
3370
|
case "setProp":
|
|
3193
3371
|
this.onSetProp(patch.id, patch.name, patch.value);
|
|
@@ -3196,10 +3374,10 @@ class DOMRenderer {
|
|
|
3196
3374
|
this.onSetText(patch.id, patch.text);
|
|
3197
3375
|
break;
|
|
3198
3376
|
case "insert":
|
|
3199
|
-
this.onInsert(patch.
|
|
3377
|
+
this.onInsert(patch.parentId, patch.id, patch.beforeId);
|
|
3200
3378
|
break;
|
|
3201
3379
|
case "move":
|
|
3202
|
-
this.onMove(patch.
|
|
3380
|
+
this.onMove(patch.parentId, patch.id, patch.beforeId);
|
|
3203
3381
|
break;
|
|
3204
3382
|
case "remove":
|
|
3205
3383
|
this.onRemove(patch.id);
|
|
@@ -3214,7 +3392,7 @@ class DOMRenderer {
|
|
|
3214
3392
|
fallback.dataset.hypenType = elementType.toLowerCase();
|
|
3215
3393
|
fallback.style.display = "contents";
|
|
3216
3394
|
element = fallback;
|
|
3217
|
-
|
|
3395
|
+
log5.debug(`Unknown component "${elementType}" - using transparent container`);
|
|
3218
3396
|
}
|
|
3219
3397
|
element.dataset.hypenType = elementType.toLowerCase();
|
|
3220
3398
|
element.dataset.hypenId = id;
|
|
@@ -3239,7 +3417,7 @@ class DOMRenderer {
|
|
|
3239
3417
|
if (elementType === "input") {
|
|
3240
3418
|
const inputEl = element;
|
|
3241
3419
|
inputEl.value = String(value);
|
|
3242
|
-
|
|
3420
|
+
log5.debug(`Updated input value: "${value}"`);
|
|
3243
3421
|
return;
|
|
3244
3422
|
}
|
|
3245
3423
|
const nextText = String(value);
|
|
@@ -3254,7 +3432,7 @@ class DOMRenderer {
|
|
|
3254
3432
|
} else if (!currentLooksLikeTemplate) {
|
|
3255
3433
|
element.dataset.textTemplate = nextText;
|
|
3256
3434
|
}
|
|
3257
|
-
|
|
3435
|
+
log5.debug(`Updated text content: "${value}"`);
|
|
3258
3436
|
return;
|
|
3259
3437
|
}
|
|
3260
3438
|
this.applicators.apply(element, name, value);
|
|
@@ -3269,7 +3447,7 @@ class DOMRenderer {
|
|
|
3269
3447
|
onInsert(parentId, id, beforeId) {
|
|
3270
3448
|
const parent = parentId === "root" ? this.container : this.nodes.get(parentId);
|
|
3271
3449
|
const child = this.nodes.get(id);
|
|
3272
|
-
|
|
3450
|
+
log5.debug(`Inserting ${id} into ${parentId}`, {
|
|
3273
3451
|
parent: parent ? `${parent.tagName}#${parent.id || "no-id"}` : "null",
|
|
3274
3452
|
child: child ? `${child.tagName}#${child.id || "no-id"}` : "null",
|
|
3275
3453
|
childText: child?.textContent?.substring(0, 20)
|
|
@@ -3331,117 +3509,8 @@ class DOMRenderer {
|
|
|
3331
3509
|
return this.debugTracker.getStats();
|
|
3332
3510
|
}
|
|
3333
3511
|
}
|
|
3334
|
-
|
|
3335
|
-
// src/dom/events.ts
|
|
3336
|
-
class EventManager {
|
|
3337
|
-
engine;
|
|
3338
|
-
bindings = new Map;
|
|
3339
|
-
constructor(engine) {
|
|
3340
|
-
this.engine = engine;
|
|
3341
|
-
}
|
|
3342
|
-
attach(elementId, element, eventName, actionName) {
|
|
3343
|
-
const domEventName = eventName === "onClick" ? "click" : eventName;
|
|
3344
|
-
console.log(`[EventManager] Attaching ${eventName} (DOM: ${domEventName}) to element ${elementId}, action: ${actionName}`);
|
|
3345
|
-
const listener = (event) => {
|
|
3346
|
-
console.log(`\uD83D\uDD25 [EventManager] Event fired: ${eventName} on ${elementId}, dispatching action: ${actionName}`);
|
|
3347
|
-
console.log(`\uD83D\uDD25 [EventManager] Event object:`, event);
|
|
3348
|
-
console.log(`\uD83D\uDD25 [EventManager] Element:`, element);
|
|
3349
|
-
if (eventName === "submit" || eventName === "click" && element.tagName === "A") {
|
|
3350
|
-
event.preventDefault();
|
|
3351
|
-
}
|
|
3352
|
-
const payload = this.extractEventData(event, element);
|
|
3353
|
-
console.log(`\uD83D\uDD25 [EventManager] Event payload:`, payload);
|
|
3354
|
-
console.log(`\uD83D\uDD25 [EventManager] Calling engine.dispatchAction(${actionName})`);
|
|
3355
|
-
try {
|
|
3356
|
-
this.engine.dispatchAction(actionName, payload);
|
|
3357
|
-
console.log(`\uD83D\uDD25 [EventManager] ✅ dispatchAction succeeded`);
|
|
3358
|
-
} catch (error) {
|
|
3359
|
-
console.error(`\uD83D\uDD25 [EventManager] ❌ dispatchAction failed:`, error);
|
|
3360
|
-
}
|
|
3361
|
-
};
|
|
3362
|
-
let elementBindings = this.bindings.get(elementId);
|
|
3363
|
-
if (!elementBindings) {
|
|
3364
|
-
elementBindings = new Map;
|
|
3365
|
-
this.bindings.set(elementId, elementBindings);
|
|
3366
|
-
}
|
|
3367
|
-
elementBindings.set(eventName, listener);
|
|
3368
|
-
element.addEventListener(domEventName, listener);
|
|
3369
|
-
console.log(`[EventManager] Listener attached to DOM for ${domEventName}`);
|
|
3370
|
-
console.log(`[EventManager] Element details:`, {
|
|
3371
|
-
tagName: element.tagName,
|
|
3372
|
-
id: element.id,
|
|
3373
|
-
dataset: element.dataset,
|
|
3374
|
-
textContent: element.textContent?.substring(0, 50)
|
|
3375
|
-
});
|
|
3376
|
-
if (domEventName === "click") {
|
|
3377
|
-
element.addEventListener("click", (e) => {
|
|
3378
|
-
console.log(`\uD83E\uDDEA [TEST] Raw DOM click detected on ${element.tagName}`, e);
|
|
3379
|
-
});
|
|
3380
|
-
}
|
|
3381
|
-
}
|
|
3382
|
-
detach(elementId, element, eventName) {
|
|
3383
|
-
const elementBindings = this.bindings.get(elementId);
|
|
3384
|
-
if (!elementBindings)
|
|
3385
|
-
return;
|
|
3386
|
-
const listener = elementBindings.get(eventName);
|
|
3387
|
-
if (listener) {
|
|
3388
|
-
element.removeEventListener(eventName, listener);
|
|
3389
|
-
elementBindings.delete(eventName);
|
|
3390
|
-
}
|
|
3391
|
-
if (elementBindings.size === 0) {
|
|
3392
|
-
this.bindings.delete(elementId);
|
|
3393
|
-
}
|
|
3394
|
-
}
|
|
3395
|
-
extractEventData(event, element) {
|
|
3396
|
-
const data = {
|
|
3397
|
-
type: event.type,
|
|
3398
|
-
timestamp: Date.now()
|
|
3399
|
-
};
|
|
3400
|
-
if (event instanceof MouseEvent) {
|
|
3401
|
-
data.clientX = event.clientX;
|
|
3402
|
-
data.clientY = event.clientY;
|
|
3403
|
-
data.button = event.button;
|
|
3404
|
-
}
|
|
3405
|
-
if (event instanceof KeyboardEvent) {
|
|
3406
|
-
data.key = event.key;
|
|
3407
|
-
data.code = event.code;
|
|
3408
|
-
data.ctrlKey = event.ctrlKey;
|
|
3409
|
-
data.shiftKey = event.shiftKey;
|
|
3410
|
-
data.altKey = event.altKey;
|
|
3411
|
-
data.metaKey = event.metaKey;
|
|
3412
|
-
}
|
|
3413
|
-
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
|
|
3414
|
-
data.value = element.value;
|
|
3415
|
-
}
|
|
3416
|
-
if (element instanceof HTMLSelectElement) {
|
|
3417
|
-
data.value = element.value;
|
|
3418
|
-
data.selectedIndex = element.selectedIndex;
|
|
3419
|
-
}
|
|
3420
|
-
if (event.type === "submit" && element instanceof HTMLFormElement) {
|
|
3421
|
-
data.formData = new FormData(element);
|
|
3422
|
-
}
|
|
3423
|
-
return data;
|
|
3424
|
-
}
|
|
3425
|
-
clearElement(elementId, element) {
|
|
3426
|
-
const elementBindings = this.bindings.get(elementId);
|
|
3427
|
-
if (!elementBindings)
|
|
3428
|
-
return;
|
|
3429
|
-
for (const [eventName, listener] of elementBindings) {
|
|
3430
|
-
element.removeEventListener(eventName, listener);
|
|
3431
|
-
}
|
|
3432
|
-
this.bindings.delete(elementId);
|
|
3433
|
-
}
|
|
3434
|
-
clearAll() {
|
|
3435
|
-
this.bindings.clear();
|
|
3436
|
-
}
|
|
3437
|
-
}
|
|
3438
3512
|
export {
|
|
3439
|
-
|
|
3440
|
-
RerenderTracker,
|
|
3441
|
-
EventManager,
|
|
3442
|
-
DOMRenderer,
|
|
3443
|
-
ComponentRegistry,
|
|
3444
|
-
ApplicatorRegistry
|
|
3513
|
+
DOMRenderer
|
|
3445
3514
|
};
|
|
3446
3515
|
|
|
3447
|
-
//# debugId=
|
|
3516
|
+
//# debugId=2DB804639EB78B3764756E2164756E21
|