@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)
|
|
@@ -3341,8 +3519,12 @@ import {
|
|
|
3341
3519
|
componentLoader,
|
|
3342
3520
|
Router,
|
|
3343
3521
|
Route,
|
|
3344
|
-
Link
|
|
3522
|
+
Link,
|
|
3523
|
+
frameworkLoggers as frameworkLoggers6,
|
|
3524
|
+
setDebugMode
|
|
3345
3525
|
} from "@hypen-space/core";
|
|
3526
|
+
var log6 = frameworkLoggers6.hypen;
|
|
3527
|
+
|
|
3346
3528
|
class Hypen {
|
|
3347
3529
|
engine = null;
|
|
3348
3530
|
renderer = null;
|
|
@@ -3358,6 +3540,9 @@ class Hypen {
|
|
|
3358
3540
|
debug: false,
|
|
3359
3541
|
...config
|
|
3360
3542
|
};
|
|
3543
|
+
if (this.config.debug) {
|
|
3544
|
+
setDebugMode(true);
|
|
3545
|
+
}
|
|
3361
3546
|
this.router = new HypenRouter;
|
|
3362
3547
|
this.globalContext = new HypenGlobalContext;
|
|
3363
3548
|
componentLoader.register("Router", Router, "");
|
|
@@ -3367,27 +3552,19 @@ class Hypen {
|
|
|
3367
3552
|
this.globalContext.__hypenEngine = this;
|
|
3368
3553
|
}
|
|
3369
3554
|
async init() {
|
|
3370
|
-
|
|
3371
|
-
console.log("[Hypen] Initializing...");
|
|
3372
|
-
}
|
|
3555
|
+
log6.debug("Initializing...");
|
|
3373
3556
|
this.engine = new Engine;
|
|
3374
3557
|
await this.engine.init({
|
|
3375
3558
|
wasmUrl: this.config.wasmUrl,
|
|
3376
3559
|
jsUrl: this.config.jsUrl
|
|
3377
3560
|
});
|
|
3378
|
-
|
|
3379
|
-
console.log("[Hypen] Engine initialized");
|
|
3380
|
-
}
|
|
3561
|
+
log6.debug("Engine initialized");
|
|
3381
3562
|
}
|
|
3382
3563
|
async loadComponents(componentsDir) {
|
|
3383
3564
|
const dir = componentsDir || this.config.componentsDir;
|
|
3384
|
-
|
|
3385
|
-
console.log(`[Hypen] Loading components from ${dir}...`);
|
|
3386
|
-
}
|
|
3565
|
+
log6.debug(`Loading components from ${dir}...`);
|
|
3387
3566
|
await componentLoader.loadFromComponentsDir(dir);
|
|
3388
|
-
|
|
3389
|
-
console.log(`[Hypen] Loaded ${componentLoader.getNames().length} components`);
|
|
3390
|
-
}
|
|
3567
|
+
log6.debug(`Loaded ${componentLoader.getNames().length} components`);
|
|
3391
3568
|
}
|
|
3392
3569
|
async render(componentName, containerSelector) {
|
|
3393
3570
|
if (!this.engine) {
|
|
@@ -3406,9 +3583,7 @@ class Hypen {
|
|
|
3406
3583
|
if (!component) {
|
|
3407
3584
|
throw new Error(`[Hypen] Component "${componentName}" not found. Available: ${componentLoader.getNames().join(", ")}`);
|
|
3408
3585
|
}
|
|
3409
|
-
|
|
3410
|
-
console.log(`[Hypen] Rendering ${componentName} to`, this.container);
|
|
3411
|
-
}
|
|
3586
|
+
log6.debug(`Rendering ${componentName} to`, this.container);
|
|
3412
3587
|
this.renderer = new DOMRenderer(this.container, this.engine, {
|
|
3413
3588
|
enabled: this.config.debugHeatmap || false,
|
|
3414
3589
|
showHeatmap: this.config.debugHeatmap || false,
|
|
@@ -3417,9 +3592,7 @@ class Hypen {
|
|
|
3417
3592
|
maxOpacity: 0.8
|
|
3418
3593
|
});
|
|
3419
3594
|
this.engine.setRenderCallback((patches) => {
|
|
3420
|
-
|
|
3421
|
-
console.log(`[Hypen] Applying ${patches.length} patches`);
|
|
3422
|
-
}
|
|
3595
|
+
log6.debug(`Applying ${patches.length} patches`);
|
|
3423
3596
|
this.renderer.applyPatches(patches);
|
|
3424
3597
|
});
|
|
3425
3598
|
const routerContext = {
|
|
@@ -3433,23 +3606,17 @@ class Hypen {
|
|
|
3433
3606
|
this.moduleInstances.set(moduleId, this.moduleInstance);
|
|
3434
3607
|
this.moduleInstance.onStateChange(() => {
|
|
3435
3608
|
const mergedState = this.getMergedState();
|
|
3436
|
-
|
|
3437
|
-
console.log(`[Hypen] State changed, merged state:`, mergedState);
|
|
3438
|
-
}
|
|
3609
|
+
log6.debug(`State changed, merged state:`, mergedState);
|
|
3439
3610
|
this.renderer.updateState(mergedState);
|
|
3440
3611
|
});
|
|
3441
3612
|
this.setupComponentResolver();
|
|
3442
3613
|
this.createNestedModuleInstances();
|
|
3443
3614
|
this.engine.renderSource(component.template);
|
|
3444
3615
|
this.renderer.updateState(this.getMergedState());
|
|
3445
|
-
|
|
3446
|
-
console.log(`[Hypen] ${componentName} rendered successfully`);
|
|
3447
|
-
}
|
|
3616
|
+
log6.debug(`${componentName} rendered successfully`);
|
|
3448
3617
|
}
|
|
3449
3618
|
async unmount() {
|
|
3450
|
-
|
|
3451
|
-
console.log("[Hypen] Unmounting...");
|
|
3452
|
-
}
|
|
3619
|
+
log6.debug("Unmounting...");
|
|
3453
3620
|
if (this.moduleInstance) {
|
|
3454
3621
|
await this.moduleInstance.destroy();
|
|
3455
3622
|
this.moduleInstance = null;
|
|
@@ -3459,9 +3626,7 @@ class Hypen {
|
|
|
3459
3626
|
this.container = null;
|
|
3460
3627
|
}
|
|
3461
3628
|
this.renderer = null;
|
|
3462
|
-
|
|
3463
|
-
console.log("[Hypen] Unmounted");
|
|
3464
|
-
}
|
|
3629
|
+
log6.debug("Unmounted");
|
|
3465
3630
|
}
|
|
3466
3631
|
getModuleInstance() {
|
|
3467
3632
|
return this.moduleInstance;
|
|
@@ -3478,17 +3643,13 @@ class Hypen {
|
|
|
3478
3643
|
setDebugHeatmap(enabled) {
|
|
3479
3644
|
if (this.renderer) {
|
|
3480
3645
|
this.renderer.setDebugConfig({ enabled, showHeatmap: enabled });
|
|
3481
|
-
|
|
3482
|
-
console.log(`[Hypen] Debug heatmap ${enabled ? "enabled" : "disabled"}`);
|
|
3483
|
-
}
|
|
3646
|
+
log6.debug(`Debug heatmap ${enabled ? "enabled" : "disabled"}`);
|
|
3484
3647
|
}
|
|
3485
3648
|
}
|
|
3486
3649
|
resetDebugTracking() {
|
|
3487
3650
|
if (this.renderer) {
|
|
3488
3651
|
this.renderer.resetDebugTracking();
|
|
3489
|
-
|
|
3490
|
-
console.log(`[Hypen] Debug tracking reset`);
|
|
3491
|
-
}
|
|
3652
|
+
log6.debug("Debug tracking reset");
|
|
3492
3653
|
}
|
|
3493
3654
|
}
|
|
3494
3655
|
getDebugStats() {
|
|
@@ -3517,9 +3678,7 @@ class Hypen {
|
|
|
3517
3678
|
this.moduleInstances.set(componentName, moduleInstance);
|
|
3518
3679
|
moduleInstance.onStateChange(() => {
|
|
3519
3680
|
const mergedState2 = this.getMergedState();
|
|
3520
|
-
|
|
3521
|
-
console.log(`[Hypen] Lazy component ${componentName} state changed:`, mergedState2);
|
|
3522
|
-
}
|
|
3681
|
+
log6.debug(`Lazy component ${componentName} state changed:`, mergedState2);
|
|
3523
3682
|
this.renderer.updateState(mergedState2);
|
|
3524
3683
|
});
|
|
3525
3684
|
}
|
|
@@ -3551,9 +3710,7 @@ class Hypen {
|
|
|
3551
3710
|
this.moduleInstances.set("Router", routerInstance);
|
|
3552
3711
|
routerInstance.onStateChange(() => {
|
|
3553
3712
|
const mergedState = this.getMergedState();
|
|
3554
|
-
|
|
3555
|
-
console.log(`[Hypen] Router state changed:`, mergedState);
|
|
3556
|
-
}
|
|
3713
|
+
log6.debug("Router state changed:", mergedState);
|
|
3557
3714
|
this.renderer.updateState(mergedState);
|
|
3558
3715
|
});
|
|
3559
3716
|
}
|
|
@@ -3566,17 +3723,13 @@ class Hypen {
|
|
|
3566
3723
|
if (!comp || !comp.module) {
|
|
3567
3724
|
continue;
|
|
3568
3725
|
}
|
|
3569
|
-
|
|
3570
|
-
console.log(`[Hypen] Creating nested module instance for: ${name}`);
|
|
3571
|
-
}
|
|
3726
|
+
log6.debug(`Creating nested module instance for: ${name}`);
|
|
3572
3727
|
const moduleInstance = new HypenModuleInstance(this.engine, comp.module, routerContext, this.globalContext);
|
|
3573
3728
|
this.globalContext.registerModule(name, moduleInstance);
|
|
3574
3729
|
this.moduleInstances.set(name, moduleInstance);
|
|
3575
3730
|
moduleInstance.onStateChange(() => {
|
|
3576
3731
|
const mergedState = this.getMergedState();
|
|
3577
|
-
|
|
3578
|
-
console.log(`[Hypen] Nested component ${name} state changed:`, mergedState);
|
|
3579
|
-
}
|
|
3732
|
+
log6.debug(`Nested component ${name} state changed:`, mergedState);
|
|
3580
3733
|
this.renderer.updateState(mergedState);
|
|
3581
3734
|
});
|
|
3582
3735
|
}
|
|
@@ -3616,14 +3769,10 @@ class Hypen {
|
|
|
3616
3769
|
if (builtInElements.has(componentName)) {
|
|
3617
3770
|
return null;
|
|
3618
3771
|
}
|
|
3619
|
-
|
|
3620
|
-
console.log(`[Hypen] Resolving component: ${componentName} (context: ${contextPath})`);
|
|
3621
|
-
}
|
|
3772
|
+
log6.debug(`Resolving component: ${componentName} (context: ${contextPath})`);
|
|
3622
3773
|
const componentDef = componentLoader.get(componentName);
|
|
3623
3774
|
if (!componentDef) {
|
|
3624
|
-
|
|
3625
|
-
console.log(`[Hypen] Component not found: ${componentName}`);
|
|
3626
|
-
}
|
|
3775
|
+
log6.debug(`Component not found: ${componentName}`);
|
|
3627
3776
|
return null;
|
|
3628
3777
|
}
|
|
3629
3778
|
const isPassthrough = componentName === "Router";
|
|
@@ -3634,15 +3783,13 @@ class Hypen {
|
|
|
3634
3783
|
passthrough: isPassthrough,
|
|
3635
3784
|
lazy: isLazy
|
|
3636
3785
|
};
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
3643
|
-
|
|
3644
|
-
console.log(`[Hypen] Resolved ${componentName} -> ${resolved.path}${flagStr}`);
|
|
3645
|
-
}
|
|
3786
|
+
const flags = [];
|
|
3787
|
+
if (isPassthrough)
|
|
3788
|
+
flags.push("passthrough");
|
|
3789
|
+
if (isLazy)
|
|
3790
|
+
flags.push("lazy");
|
|
3791
|
+
const flagStr = flags.length > 0 ? ` (${flags.join(", ")})` : "";
|
|
3792
|
+
log6.debug(`Resolved ${componentName} -> ${resolved.path}${flagStr}`);
|
|
3646
3793
|
return resolved;
|
|
3647
3794
|
});
|
|
3648
3795
|
}
|
|
@@ -3670,6 +3817,9 @@ async function renderWithComponents(components, componentName, containerSelector
|
|
|
3670
3817
|
}
|
|
3671
3818
|
|
|
3672
3819
|
// src/dom/events.ts
|
|
3820
|
+
import { frameworkLoggers as frameworkLoggers7 } from "@hypen-space/core";
|
|
3821
|
+
var log7 = frameworkLoggers7.events;
|
|
3822
|
+
|
|
3673
3823
|
class EventManager {
|
|
3674
3824
|
engine;
|
|
3675
3825
|
bindings = new Map;
|
|
@@ -3678,22 +3828,22 @@ class EventManager {
|
|
|
3678
3828
|
}
|
|
3679
3829
|
attach(elementId, element, eventName, actionName) {
|
|
3680
3830
|
const domEventName = eventName === "onClick" ? "click" : eventName;
|
|
3681
|
-
|
|
3831
|
+
log7.debug(`Attaching ${eventName} (DOM: ${domEventName}) to element ${elementId}, action: ${actionName}`);
|
|
3682
3832
|
const listener = (event) => {
|
|
3683
|
-
|
|
3684
|
-
|
|
3685
|
-
|
|
3833
|
+
log7.debug(`Event fired: ${eventName} on ${elementId}, dispatching action: ${actionName}`);
|
|
3834
|
+
log7.debug(`Event object:`, event);
|
|
3835
|
+
log7.debug(`Element:`, element);
|
|
3686
3836
|
if (eventName === "submit" || eventName === "click" && element.tagName === "A") {
|
|
3687
3837
|
event.preventDefault();
|
|
3688
3838
|
}
|
|
3689
3839
|
const payload = this.extractEventData(event, element);
|
|
3690
|
-
|
|
3691
|
-
|
|
3840
|
+
log7.debug(`Event payload:`, payload);
|
|
3841
|
+
log7.debug(`Calling engine.dispatchAction(${actionName})`);
|
|
3692
3842
|
try {
|
|
3693
3843
|
this.engine.dispatchAction(actionName, payload);
|
|
3694
|
-
|
|
3844
|
+
log7.debug(`dispatchAction succeeded`);
|
|
3695
3845
|
} catch (error) {
|
|
3696
|
-
|
|
3846
|
+
log7.error(`dispatchAction failed:`, error);
|
|
3697
3847
|
}
|
|
3698
3848
|
};
|
|
3699
3849
|
let elementBindings = this.bindings.get(elementId);
|
|
@@ -3703,8 +3853,8 @@ class EventManager {
|
|
|
3703
3853
|
}
|
|
3704
3854
|
elementBindings.set(eventName, listener);
|
|
3705
3855
|
element.addEventListener(domEventName, listener);
|
|
3706
|
-
|
|
3707
|
-
|
|
3856
|
+
log7.debug(`Listener attached to DOM for ${domEventName}`);
|
|
3857
|
+
log7.debug(`Element details:`, {
|
|
3708
3858
|
tagName: element.tagName,
|
|
3709
3859
|
id: element.id,
|
|
3710
3860
|
dataset: element.dataset,
|
|
@@ -3712,7 +3862,7 @@ class EventManager {
|
|
|
3712
3862
|
});
|
|
3713
3863
|
if (domEventName === "click") {
|
|
3714
3864
|
element.addEventListener("click", (e) => {
|
|
3715
|
-
|
|
3865
|
+
log7.debug(`Raw DOM click detected on ${element.tagName}`, e);
|
|
3716
3866
|
});
|
|
3717
3867
|
}
|
|
3718
3868
|
}
|
|
@@ -3897,6 +4047,8 @@ function getAbsoluteBounds(node) {
|
|
|
3897
4047
|
}
|
|
3898
4048
|
|
|
3899
4049
|
// src/canvas/text.ts
|
|
4050
|
+
import { frameworkLoggers as frameworkLoggers8 } from "@hypen-space/core";
|
|
4051
|
+
var log8 = frameworkLoggers8.canvas;
|
|
3900
4052
|
var textMetricsCache = new Map;
|
|
3901
4053
|
function getCacheKey(text, fontStyle, maxWidth) {
|
|
3902
4054
|
return `${text}|${fontStyle.fontSize}|${fontStyle.fontWeight}|${fontStyle.fontFamily}|${maxWidth || "auto"}`;
|
|
@@ -3996,7 +4148,7 @@ async function loadFont(fontFamily, fontWeight = "normal") {
|
|
|
3996
4148
|
try {
|
|
3997
4149
|
await document.fonts.load(font);
|
|
3998
4150
|
} catch (error) {
|
|
3999
|
-
|
|
4151
|
+
log8.warn(`Failed to load font: ${font}`, error);
|
|
4000
4152
|
}
|
|
4001
4153
|
}
|
|
4002
4154
|
|
|
@@ -5611,6 +5763,8 @@ class AccessibilityLayer {
|
|
|
5611
5763
|
}
|
|
5612
5764
|
|
|
5613
5765
|
// src/canvas/renderer.ts
|
|
5766
|
+
import { frameworkLoggers as frameworkLoggers9 } from "@hypen-space/core";
|
|
5767
|
+
var log9 = frameworkLoggers9.canvas;
|
|
5614
5768
|
var DEFAULT_OPTIONS = {
|
|
5615
5769
|
devicePixelRatio: typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1,
|
|
5616
5770
|
backgroundColor: "#ffffff",
|
|
@@ -5675,7 +5829,7 @@ class CanvasRenderer {
|
|
|
5675
5829
|
applyPatch(patch) {
|
|
5676
5830
|
switch (patch.type) {
|
|
5677
5831
|
case "create":
|
|
5678
|
-
this.onCreate(patch.id, patch.
|
|
5832
|
+
this.onCreate(patch.id, patch.elementType, patch.props || {});
|
|
5679
5833
|
break;
|
|
5680
5834
|
case "setProp":
|
|
5681
5835
|
this.onSetProp(patch.id, patch.name, patch.value);
|
|
@@ -5684,10 +5838,10 @@ class CanvasRenderer {
|
|
|
5684
5838
|
this.onSetText(patch.id, patch.text);
|
|
5685
5839
|
break;
|
|
5686
5840
|
case "insert":
|
|
5687
|
-
this.onInsert(patch.
|
|
5841
|
+
this.onInsert(patch.parentId, patch.id, patch.beforeId);
|
|
5688
5842
|
break;
|
|
5689
5843
|
case "move":
|
|
5690
|
-
this.onMove(patch.
|
|
5844
|
+
this.onMove(patch.parentId, patch.id, patch.beforeId);
|
|
5691
5845
|
break;
|
|
5692
5846
|
case "remove":
|
|
5693
5847
|
this.onRemove(patch.id);
|
|
@@ -5818,7 +5972,7 @@ class CanvasRenderer {
|
|
|
5818
5972
|
const elapsed = performance.now() - startTime;
|
|
5819
5973
|
this.frameCount++;
|
|
5820
5974
|
if (performance.now() - this.lastFrameTime > 1000) {
|
|
5821
|
-
|
|
5975
|
+
log9.debug(`Canvas FPS: ${this.frameCount}, Last frame: ${elapsed.toFixed(2)}ms`);
|
|
5822
5976
|
this.frameCount = 0;
|
|
5823
5977
|
this.lastFrameTime = performance.now();
|
|
5824
5978
|
}
|
|
@@ -5879,4 +6033,4 @@ export {
|
|
|
5879
6033
|
ApplicatorRegistry
|
|
5880
6034
|
};
|
|
5881
6035
|
|
|
5882
|
-
//# debugId=
|
|
6036
|
+
//# debugId=4FAEC1A16542965464756E2164756E21
|