@hypen-space/web 0.4.2 → 0.4.5
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/canvas/accessibility.d.ts +47 -0
- package/dist/canvas/events.d.ts +87 -0
- package/dist/canvas/index.d.ts +11 -0
- package/dist/canvas/index.js +32 -14
- package/dist/canvas/index.js.map +7 -7
- package/dist/canvas/input.d.ts +63 -0
- package/dist/canvas/input.js +14 -2
- package/dist/canvas/input.js.map +3 -3
- package/dist/canvas/layout.d.ts +10 -0
- package/dist/canvas/layout.js +17 -12
- package/dist/canvas/layout.js.map +4 -4
- package/dist/canvas/paint.d.ts +14 -0
- package/dist/canvas/paint.js +3 -2
- package/dist/canvas/paint.js.map +4 -4
- package/dist/canvas/renderer.d.ts +99 -0
- package/dist/canvas/renderer.js +32 -14
- package/dist/canvas/renderer.js.map +7 -7
- package/dist/canvas/text.d.ts +22 -0
- package/dist/canvas/text.js +2 -2
- package/dist/canvas/text.js.map +2 -2
- package/dist/canvas/types.d.ts +96 -0
- package/dist/canvas/utils.d.ts +44 -0
- package/dist/client.d.ts +19 -0
- package/dist/client.js +106 -43
- package/dist/client.js.map +12 -11
- package/dist/dom/applicators/advanced-layout.d.ts +5 -0
- package/dist/dom/applicators/advanced-layout.js +1 -114
- package/dist/dom/applicators/advanced-layout.js.map +4 -5
- package/dist/dom/applicators/background.d.ts +5 -0
- package/dist/dom/applicators/border.d.ts +5 -0
- package/dist/dom/applicators/color.d.ts +5 -0
- package/dist/dom/applicators/display.d.ts +5 -0
- package/dist/dom/applicators/effects.d.ts +5 -0
- package/dist/dom/applicators/events.d.ts +8 -0
- package/dist/dom/applicators/events.js +55 -3
- package/dist/dom/applicators/events.js.map +3 -3
- package/dist/dom/applicators/font.d.ts +29 -0
- package/dist/dom/applicators/index.d.ts +76 -0
- package/dist/dom/applicators/index.js +55 -9
- package/dist/dom/applicators/index.js.map +4 -4
- package/dist/dom/applicators/layout.d.ts +10 -0
- package/dist/dom/applicators/margin.d.ts +11 -0
- package/dist/dom/applicators/padding.d.ts +11 -0
- package/dist/dom/applicators/size.d.ts +14 -0
- package/dist/dom/applicators/transform.d.ts +5 -0
- package/dist/dom/applicators/transition.d.ts +5 -0
- package/dist/dom/applicators/types.d.ts +6 -0
- package/dist/dom/applicators/typography.d.ts +5 -0
- package/dist/dom/canvas/index.d.ts +12 -0
- package/dist/dom/components/app.d.ts +8 -0
- package/dist/dom/components/app.js +55 -0
- package/dist/dom/components/app.js.map +10 -0
- package/dist/dom/components/audio.d.ts +5 -0
- package/dist/dom/components/avatar.d.ts +5 -0
- package/dist/dom/components/badge.d.ts +5 -0
- package/dist/dom/components/button.d.ts +9 -0
- package/dist/dom/components/card.d.ts +5 -0
- package/dist/dom/components/center.d.ts +9 -0
- package/dist/dom/components/checkbox.d.ts +5 -0
- package/dist/dom/components/column.d.ts +8 -0
- package/dist/dom/components/container.d.ts +5 -0
- package/dist/dom/components/divider.d.ts +5 -0
- package/dist/dom/components/grid.d.ts +7 -0
- package/dist/dom/components/heading.d.ts +5 -0
- package/dist/dom/components/hypenapp.d.ts +19 -0
- package/dist/dom/components/hypenapp.js +2 -4
- package/dist/dom/components/hypenapp.js.map +3 -3
- package/dist/dom/components/image.d.ts +5 -0
- package/dist/dom/components/index.d.ts +29 -0
- package/dist/dom/components/index.js +29 -5
- package/dist/dom/components/index.js.map +7 -6
- package/dist/dom/components/input.d.ts +5 -0
- package/dist/dom/components/link.d.ts +5 -0
- package/dist/dom/components/list.d.ts +5 -0
- package/dist/dom/components/paragraph.d.ts +5 -0
- package/dist/dom/components/progressbar.d.ts +5 -0
- package/dist/dom/components/route.d.ts +6 -0
- package/dist/dom/components/route.js +2 -2
- package/dist/dom/components/route.js.map +2 -2
- package/dist/dom/components/router.d.ts +5 -0
- package/dist/dom/components/row.d.ts +7 -0
- package/dist/dom/components/select.d.ts +5 -0
- package/dist/dom/components/slider.d.ts +5 -0
- package/dist/dom/components/spacer.d.ts +5 -0
- package/dist/dom/components/spinner.d.ts +5 -0
- package/dist/dom/components/stack.d.ts +5 -0
- package/dist/dom/components/switch.d.ts +5 -0
- package/dist/dom/components/text.d.ts +5 -0
- package/dist/dom/components/textarea.d.ts +5 -0
- package/dist/dom/components/video.d.ts +5 -0
- package/dist/dom/debug.d.ts +63 -0
- package/dist/dom/debug.js +2 -2
- package/dist/dom/debug.js.map +2 -2
- package/dist/dom/element-data.d.ts +94 -0
- package/dist/dom/events.d.ts +39 -0
- package/dist/dom/events.js +2 -2
- package/dist/dom/events.js.map +2 -2
- package/dist/dom/index.d.ts +10 -0
- package/dist/dom/index.js +101 -25
- package/dist/dom/index.js.map +12 -11
- package/dist/dom/renderer.d.ts +115 -0
- package/dist/dom/renderer.js +100 -24
- package/dist/dom/renderer.js.map +11 -10
- package/dist/hypen.d.ts +140 -0
- package/dist/hypen.js +106 -43
- package/dist/hypen.js.map +12 -11
- package/dist/index.d.ts +28 -0
- package/dist/index.js +132 -38
- package/dist/index.js.map +17 -16
- package/package.json +3 -2
- package/src/canvas/input.ts +23 -1
- package/src/dom/applicators/events.ts +71 -0
- package/src/dom/renderer.ts +4 -4
- package/src/hypen.ts +7 -24
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @hypen-space/web - Hypen Web Renderers
|
|
3
|
+
*
|
|
4
|
+
* Browser-only package providing DOM and Canvas rendering for Hypen applications.
|
|
5
|
+
* This entry point is WASM-free — it only contains renderers and the remote UI
|
|
6
|
+
* embed component.
|
|
7
|
+
*
|
|
8
|
+
* For client-side rendering (with WASM engine), use "@hypen-space/web/client":
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { render } from "@hypen-space/web/client";
|
|
12
|
+
* await render("Counter", "#app");
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* For remote UI (no WASM needed in the browser):
|
|
16
|
+
*
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { DOMRenderer } from "@hypen-space/web";
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export { DOMRenderer } from "./dom/renderer.js";
|
|
22
|
+
export { ComponentRegistry } from "./dom/components/index.js";
|
|
23
|
+
export { ApplicatorRegistry } from "./dom/applicators/index.js";
|
|
24
|
+
export { EventManager } from "./dom/events.js";
|
|
25
|
+
export { RerenderTracker, type DebugConfig, defaultDebugConfig } from "./dom/debug.js";
|
|
26
|
+
export { hypenAppHandler, disconnectHypenApp } from "./dom/components/hypenapp.js";
|
|
27
|
+
export { CanvasRenderer } from "./canvas/renderer.js";
|
|
28
|
+
export { canvasHandler, canvasApplicators } from "./dom/canvas/index.js";
|
package/dist/index.js
CHANGED
|
@@ -1011,7 +1011,7 @@ var exports_route = {};
|
|
|
1011
1011
|
__export(exports_route, {
|
|
1012
1012
|
routeHandler: () => routeHandler
|
|
1013
1013
|
});
|
|
1014
|
-
import { frameworkLoggers } from "@hypen-space/core";
|
|
1014
|
+
import { frameworkLoggers } from "@hypen-space/core/logger";
|
|
1015
1015
|
var log, routeHandler;
|
|
1016
1016
|
var init_route = __esm(() => {
|
|
1017
1017
|
log = frameworkLoggers.router;
|
|
@@ -1046,7 +1046,7 @@ __export(exports_hypenapp, {
|
|
|
1046
1046
|
disconnectHypenApp: () => disconnectHypenApp
|
|
1047
1047
|
});
|
|
1048
1048
|
import { RemoteEngine } from "@hypen-space/core/remote/client";
|
|
1049
|
-
import { frameworkLoggers as frameworkLoggers2 } from "@hypen-space/core";
|
|
1049
|
+
import { frameworkLoggers as frameworkLoggers2 } from "@hypen-space/core/logger";
|
|
1050
1050
|
function applyPatches(container, nodes, patches, engine, onRoot) {
|
|
1051
1051
|
for (const patch of patches) {
|
|
1052
1052
|
switch (patch.type) {
|
|
@@ -1202,8 +1202,6 @@ function applyProp(el, name, value) {
|
|
|
1202
1202
|
border: "border",
|
|
1203
1203
|
gap: "gap",
|
|
1204
1204
|
flex: "flex",
|
|
1205
|
-
alignItems: "alignItems",
|
|
1206
|
-
justifyContent: "justifyContent",
|
|
1207
1205
|
opacity: "opacity",
|
|
1208
1206
|
overflow: "overflow"
|
|
1209
1207
|
};
|
|
@@ -1301,6 +1299,26 @@ var init_hypenapp = __esm(() => {
|
|
|
1301
1299
|
};
|
|
1302
1300
|
});
|
|
1303
1301
|
|
|
1302
|
+
// src/dom/components/app.ts
|
|
1303
|
+
var exports_app = {};
|
|
1304
|
+
__export(exports_app, {
|
|
1305
|
+
appHandler: () => appHandler
|
|
1306
|
+
});
|
|
1307
|
+
var appHandler;
|
|
1308
|
+
var init_app = __esm(() => {
|
|
1309
|
+
appHandler = {
|
|
1310
|
+
create() {
|
|
1311
|
+
const el = document.createElement("div");
|
|
1312
|
+
el.style.display = "flex";
|
|
1313
|
+
el.style.flexDirection = "column";
|
|
1314
|
+
el.style.minHeight = "100vh";
|
|
1315
|
+
el.style.width = "100%";
|
|
1316
|
+
el.dataset.hypenType = "app";
|
|
1317
|
+
return el;
|
|
1318
|
+
}
|
|
1319
|
+
};
|
|
1320
|
+
});
|
|
1321
|
+
|
|
1304
1322
|
// src/dom/components/index.ts
|
|
1305
1323
|
class ComponentRegistry {
|
|
1306
1324
|
handlers = new Map;
|
|
@@ -1311,9 +1329,13 @@ class ComponentRegistry {
|
|
|
1311
1329
|
this.handlers.set(type.toLowerCase(), handler);
|
|
1312
1330
|
}
|
|
1313
1331
|
get(type) {
|
|
1332
|
+
if (!type)
|
|
1333
|
+
return;
|
|
1314
1334
|
return this.handlers.get(type.toLowerCase());
|
|
1315
1335
|
}
|
|
1316
1336
|
createElement(type, props = {}) {
|
|
1337
|
+
if (!type)
|
|
1338
|
+
return null;
|
|
1317
1339
|
const handler = this.get(type);
|
|
1318
1340
|
if (!handler)
|
|
1319
1341
|
return null;
|
|
@@ -1355,6 +1377,8 @@ class ComponentRegistry {
|
|
|
1355
1377
|
const { routerHandler: routerHandler2 } = (init_router(), __toCommonJS(exports_router));
|
|
1356
1378
|
const { routeHandler: routeHandler2 } = (init_route(), __toCommonJS(exports_route));
|
|
1357
1379
|
const { hypenAppHandler: hypenAppHandler2 } = (init_hypenapp(), __toCommonJS(exports_hypenapp));
|
|
1380
|
+
const { appHandler: appHandler2 } = (init_app(), __toCommonJS(exports_app));
|
|
1381
|
+
this.register("app", appHandler2);
|
|
1358
1382
|
this.register("column", columnHandler2);
|
|
1359
1383
|
this.register("row", rowHandler2);
|
|
1360
1384
|
this.register("text", textHandler2);
|
|
@@ -2038,7 +2062,7 @@ import {
|
|
|
2038
2062
|
disposableListener,
|
|
2039
2063
|
disposableTimeout
|
|
2040
2064
|
} from "@hypen-space/core/disposable";
|
|
2041
|
-
import { frameworkLoggers as frameworkLoggers3 } from "@hypen-space/core";
|
|
2065
|
+
import { frameworkLoggers as frameworkLoggers3 } from "@hypen-space/core/logger";
|
|
2042
2066
|
var log3 = frameworkLoggers3.events;
|
|
2043
2067
|
function toPlainObject(value) {
|
|
2044
2068
|
if (value instanceof Map) {
|
|
@@ -2323,10 +2347,62 @@ var eventHandlers = {
|
|
|
2323
2347
|
extractPayload: scrollPayload
|
|
2324
2348
|
}),
|
|
2325
2349
|
onLongClick: createLongClickHandler(500),
|
|
2350
|
+
onLongPress: createLongClickHandler(500),
|
|
2326
2351
|
onFocus: createEventHandler("focus", { extractPayload: focusPayload }),
|
|
2327
2352
|
onBlur: createEventHandler("blur", { extractPayload: focusPayload }),
|
|
2328
2353
|
onMouseEnter: createEventHandler("mouseenter", { extractPayload: mousePayload }),
|
|
2329
|
-
onMouseLeave: createEventHandler("mouseleave", { extractPayload: mousePayload })
|
|
2354
|
+
onMouseLeave: createEventHandler("mouseleave", { extractPayload: mousePayload }),
|
|
2355
|
+
bind: (element, value) => {
|
|
2356
|
+
const bindPath = typeof value === "string" ? value : null;
|
|
2357
|
+
if (!bindPath)
|
|
2358
|
+
return;
|
|
2359
|
+
const disposables = getElementDisposables2(element);
|
|
2360
|
+
const eventKey = `bind:${bindPath}`;
|
|
2361
|
+
if (getRegisteredEvents(element).has(eventKey))
|
|
2362
|
+
return;
|
|
2363
|
+
registerEvent(element, eventKey);
|
|
2364
|
+
const hypenType = element.dataset?.hypenType;
|
|
2365
|
+
if (hypenType === "checkbox" || hypenType === "switch") {
|
|
2366
|
+
const input = element.querySelector('input[type="checkbox"]');
|
|
2367
|
+
if (!input)
|
|
2368
|
+
return;
|
|
2369
|
+
const listener = () => {
|
|
2370
|
+
const engine = getEngine(element);
|
|
2371
|
+
if (engine) {
|
|
2372
|
+
engine.dispatchAction("__hypen_bind", {
|
|
2373
|
+
path: bindPath,
|
|
2374
|
+
value: input.checked
|
|
2375
|
+
});
|
|
2376
|
+
}
|
|
2377
|
+
};
|
|
2378
|
+
disposables.add(disposableListener(input, "change", listener, { passive: true }));
|
|
2379
|
+
} else if (element instanceof HTMLSelectElement) {
|
|
2380
|
+
const listener = () => {
|
|
2381
|
+
const engine = getEngine(element);
|
|
2382
|
+
if (engine) {
|
|
2383
|
+
engine.dispatchAction("__hypen_bind", {
|
|
2384
|
+
path: bindPath,
|
|
2385
|
+
value: element.value
|
|
2386
|
+
});
|
|
2387
|
+
}
|
|
2388
|
+
};
|
|
2389
|
+
disposables.add(disposableListener(element, "change", listener, { passive: true }));
|
|
2390
|
+
} else if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement) {
|
|
2391
|
+
const listener = () => {
|
|
2392
|
+
const engine = getEngine(element);
|
|
2393
|
+
if (engine) {
|
|
2394
|
+
engine.dispatchAction("__hypen_bind", {
|
|
2395
|
+
path: bindPath,
|
|
2396
|
+
value: element.value
|
|
2397
|
+
});
|
|
2398
|
+
}
|
|
2399
|
+
};
|
|
2400
|
+
disposables.add(disposableListener(element, "input", listener, { passive: true }));
|
|
2401
|
+
} else {
|
|
2402
|
+
return;
|
|
2403
|
+
}
|
|
2404
|
+
disposables.addCallback(() => unregisterEvent(element, eventKey));
|
|
2405
|
+
}
|
|
2330
2406
|
};
|
|
2331
2407
|
|
|
2332
2408
|
// src/dom/applicators/typography.ts
|
|
@@ -2584,12 +2660,6 @@ var advancedLayoutHandlers = {
|
|
|
2584
2660
|
flexBasis: (el, value) => {
|
|
2585
2661
|
el.style.flexBasis = typeof value === "number" ? `${value}px` : String(value);
|
|
2586
2662
|
},
|
|
2587
|
-
justifyContent: (el, value) => {
|
|
2588
|
-
el.style.justifyContent = mapAlignmentValue(String(value));
|
|
2589
|
-
},
|
|
2590
|
-
alignItems: (el, value) => {
|
|
2591
|
-
el.style.alignItems = mapAlignmentValue(String(value));
|
|
2592
|
-
},
|
|
2593
2663
|
alignContent: (el, value) => {
|
|
2594
2664
|
el.style.alignContent = String(value);
|
|
2595
2665
|
},
|
|
@@ -3127,7 +3197,7 @@ var canvasApplicators = {
|
|
|
3127
3197
|
};
|
|
3128
3198
|
|
|
3129
3199
|
// src/dom/debug.ts
|
|
3130
|
-
import { frameworkLoggers as frameworkLoggers4 } from "@hypen-space/core";
|
|
3200
|
+
import { frameworkLoggers as frameworkLoggers4 } from "@hypen-space/core/logger";
|
|
3131
3201
|
var log4 = frameworkLoggers4.debug;
|
|
3132
3202
|
var defaultDebugConfig = {
|
|
3133
3203
|
enabled: false,
|
|
@@ -3290,7 +3360,7 @@ class RerenderTracker {
|
|
|
3290
3360
|
}
|
|
3291
3361
|
|
|
3292
3362
|
// src/dom/renderer.ts
|
|
3293
|
-
import { frameworkLoggers as frameworkLoggers5 } from "@hypen-space/core";
|
|
3363
|
+
import { frameworkLoggers as frameworkLoggers5 } from "@hypen-space/core/logger";
|
|
3294
3364
|
var log5 = frameworkLoggers5.renderer;
|
|
3295
3365
|
|
|
3296
3366
|
class DOMRenderer {
|
|
@@ -3301,7 +3371,7 @@ class DOMRenderer {
|
|
|
3301
3371
|
applicators;
|
|
3302
3372
|
engine;
|
|
3303
3373
|
currentState = {};
|
|
3304
|
-
|
|
3374
|
+
router = null;
|
|
3305
3375
|
globalContext = null;
|
|
3306
3376
|
componentInstances = new Map;
|
|
3307
3377
|
debugTracker;
|
|
@@ -3316,8 +3386,8 @@ class DOMRenderer {
|
|
|
3316
3386
|
this.applicators.register(name, handler);
|
|
3317
3387
|
}
|
|
3318
3388
|
}
|
|
3319
|
-
setContext(
|
|
3320
|
-
this.
|
|
3389
|
+
setContext(router, globalContext) {
|
|
3390
|
+
this.router = router;
|
|
3321
3391
|
this.globalContext = globalContext;
|
|
3322
3392
|
}
|
|
3323
3393
|
applyPatches(patches) {
|
|
@@ -3363,24 +3433,30 @@ class DOMRenderer {
|
|
|
3363
3433
|
});
|
|
3364
3434
|
}
|
|
3365
3435
|
applyPatch(patch) {
|
|
3436
|
+
const p = patch;
|
|
3437
|
+
const id = patch.id ?? p.id;
|
|
3438
|
+
const elementType = patch.elementType ?? p.element_type;
|
|
3439
|
+
const parentId = patch.parentId ?? p.parent_id;
|
|
3440
|
+
const beforeId = patch.beforeId ?? p.before_id;
|
|
3441
|
+
const eventName = patch.eventName ?? p.event_name;
|
|
3366
3442
|
switch (patch.type) {
|
|
3367
3443
|
case "create":
|
|
3368
|
-
this.onCreate(
|
|
3444
|
+
this.onCreate(id, elementType ?? "container", patch.props || {});
|
|
3369
3445
|
break;
|
|
3370
3446
|
case "setProp":
|
|
3371
|
-
this.onSetProp(
|
|
3447
|
+
this.onSetProp(id, patch.name, patch.value);
|
|
3372
3448
|
break;
|
|
3373
3449
|
case "setText":
|
|
3374
|
-
this.onSetText(
|
|
3450
|
+
this.onSetText(id, patch.text);
|
|
3375
3451
|
break;
|
|
3376
3452
|
case "insert":
|
|
3377
|
-
this.onInsert(
|
|
3453
|
+
this.onInsert(parentId, id, beforeId);
|
|
3378
3454
|
break;
|
|
3379
3455
|
case "move":
|
|
3380
|
-
this.onMove(
|
|
3456
|
+
this.onMove(parentId, id, beforeId);
|
|
3381
3457
|
break;
|
|
3382
3458
|
case "remove":
|
|
3383
|
-
this.onRemove(
|
|
3459
|
+
this.onRemove(id);
|
|
3384
3460
|
break;
|
|
3385
3461
|
}
|
|
3386
3462
|
}
|
|
@@ -3511,7 +3587,7 @@ class DOMRenderer {
|
|
|
3511
3587
|
}
|
|
3512
3588
|
|
|
3513
3589
|
// src/dom/events.ts
|
|
3514
|
-
import { frameworkLoggers as frameworkLoggers6 } from "@hypen-space/core";
|
|
3590
|
+
import { frameworkLoggers as frameworkLoggers6 } from "@hypen-space/core/logger";
|
|
3515
3591
|
var log6 = frameworkLoggers6.events;
|
|
3516
3592
|
|
|
3517
3593
|
class EventManager {
|
|
@@ -3741,7 +3817,7 @@ function getAbsoluteBounds(node) {
|
|
|
3741
3817
|
}
|
|
3742
3818
|
|
|
3743
3819
|
// src/canvas/text.ts
|
|
3744
|
-
import { frameworkLoggers as frameworkLoggers7 } from "@hypen-space/core";
|
|
3820
|
+
import { frameworkLoggers as frameworkLoggers7 } from "@hypen-space/core/logger";
|
|
3745
3821
|
var log7 = frameworkLoggers7.canvas;
|
|
3746
3822
|
var textMetricsCache = new Map;
|
|
3747
3823
|
function getCacheKey(text, fontStyle, maxWidth) {
|
|
@@ -3877,7 +3953,12 @@ function computeLayout(ctx, node, availableWidth, availableHeight, x = 0, y = 0)
|
|
|
3877
3953
|
let width = parseSize(props.width);
|
|
3878
3954
|
let height = parseSize(props.height);
|
|
3879
3955
|
const type = node.type.toLowerCase();
|
|
3880
|
-
if (type === "
|
|
3956
|
+
if (type === "app") {
|
|
3957
|
+
if (width === null)
|
|
3958
|
+
width = availableAfterMargin.width;
|
|
3959
|
+
if (height === null)
|
|
3960
|
+
height = availableAfterMargin.height;
|
|
3961
|
+
} else if (type === "spacer") {
|
|
3881
3962
|
if (width === null)
|
|
3882
3963
|
width = availableAfterMargin.width;
|
|
3883
3964
|
if (height === null)
|
|
@@ -4000,10 +4081,10 @@ function layoutChildren(ctx, parent) {
|
|
|
4000
4081
|
return;
|
|
4001
4082
|
}
|
|
4002
4083
|
const flexDirection = props.flexDirection || (parent.type === "column" ? "column" : "row");
|
|
4003
|
-
const justifyContent = props.justifyContent || "flex-start";
|
|
4004
|
-
const alignItems = props.alignItems || "flex-start";
|
|
4005
|
-
const gap = parseFloat(props.gap) || 0;
|
|
4006
4084
|
const isColumn = flexDirection === "column";
|
|
4085
|
+
const justifyContent = isColumn ? props.verticalAlignment || "flex-start" : props.horizontalAlignment || "flex-start";
|
|
4086
|
+
const alignItems = isColumn ? props.horizontalAlignment || "flex-start" : props.verticalAlignment || "flex-start";
|
|
4087
|
+
const gap = parseFloat(props.gap) || 0;
|
|
4007
4088
|
const availableWidth = layout.contentWidth;
|
|
4008
4089
|
const availableHeight = layout.contentHeight;
|
|
4009
4090
|
const childInfo = [];
|
|
@@ -4116,8 +4197,8 @@ function layoutChildren(ctx, parent) {
|
|
|
4116
4197
|
function layoutStackChildren(ctx, parent) {
|
|
4117
4198
|
const layout = parent.layout;
|
|
4118
4199
|
const props = parent.props;
|
|
4119
|
-
const
|
|
4120
|
-
const
|
|
4200
|
+
const horizontalAlignment = props.horizontalAlignment || "flex-start";
|
|
4201
|
+
const verticalAlignment = props.verticalAlignment || "flex-start";
|
|
4121
4202
|
const availableWidth = layout.contentWidth;
|
|
4122
4203
|
const availableHeight = layout.contentHeight;
|
|
4123
4204
|
for (const child of parent.children) {
|
|
@@ -4125,14 +4206,14 @@ function layoutStackChildren(ctx, parent) {
|
|
|
4125
4206
|
const childLayout = child.layout;
|
|
4126
4207
|
let x = 0;
|
|
4127
4208
|
let y = 0;
|
|
4128
|
-
if (
|
|
4209
|
+
if (horizontalAlignment === "center") {
|
|
4129
4210
|
x = (availableWidth - childLayout.width) / 2;
|
|
4130
|
-
} else if (
|
|
4211
|
+
} else if (horizontalAlignment === "flex-end") {
|
|
4131
4212
|
x = availableWidth - childLayout.width;
|
|
4132
4213
|
}
|
|
4133
|
-
if (
|
|
4214
|
+
if (verticalAlignment === "center") {
|
|
4134
4215
|
y = (availableHeight - childLayout.height) / 2;
|
|
4135
|
-
} else if (
|
|
4216
|
+
} else if (verticalAlignment === "flex-end") {
|
|
4136
4217
|
y = availableHeight - childLayout.height;
|
|
4137
4218
|
}
|
|
4138
4219
|
childLayout.x = layout.x + layout.contentX + x;
|
|
@@ -4219,6 +4300,7 @@ function paintNode(ctx, node) {
|
|
|
4219
4300
|
case "link":
|
|
4220
4301
|
paintLink(ctx, node);
|
|
4221
4302
|
break;
|
|
4303
|
+
case "app":
|
|
4222
4304
|
case "container":
|
|
4223
4305
|
case "box":
|
|
4224
4306
|
paintContainer(ctx, node);
|
|
@@ -5197,13 +5279,17 @@ class InputOverlay {
|
|
|
5197
5279
|
overlay = null;
|
|
5198
5280
|
focusedNode = null;
|
|
5199
5281
|
onChangeCallback = null;
|
|
5282
|
+
bindPath = null;
|
|
5283
|
+
engine = null;
|
|
5200
5284
|
constructor(container) {
|
|
5201
5285
|
this.container = container || {};
|
|
5202
5286
|
}
|
|
5203
|
-
showInput(node, canvasBounds, onChange) {
|
|
5287
|
+
showInput(node, canvasBounds, onChange, engine) {
|
|
5204
5288
|
if (typeof document === "undefined")
|
|
5205
5289
|
return;
|
|
5206
5290
|
this.hideInput();
|
|
5291
|
+
this.bindPath = node.props.bind || null;
|
|
5292
|
+
this.engine = engine || null;
|
|
5207
5293
|
const bounds = getAbsoluteBounds(node);
|
|
5208
5294
|
if (!bounds)
|
|
5209
5295
|
return;
|
|
@@ -5227,6 +5313,8 @@ class InputOverlay {
|
|
|
5227
5313
|
}
|
|
5228
5314
|
this.focusedNode = null;
|
|
5229
5315
|
this.onChangeCallback = null;
|
|
5316
|
+
this.bindPath = null;
|
|
5317
|
+
this.engine = null;
|
|
5230
5318
|
}
|
|
5231
5319
|
updatePosition(node, canvasBounds) {
|
|
5232
5320
|
if (!this.overlay || node !== this.focusedNode)
|
|
@@ -5288,6 +5376,12 @@ class InputOverlay {
|
|
|
5288
5376
|
return;
|
|
5289
5377
|
const value = this.overlay.value;
|
|
5290
5378
|
this.onChangeCallback(value);
|
|
5379
|
+
if (this.bindPath && this.engine) {
|
|
5380
|
+
this.engine.dispatchAction("__hypen_bind", {
|
|
5381
|
+
path: this.bindPath,
|
|
5382
|
+
value
|
|
5383
|
+
});
|
|
5384
|
+
}
|
|
5291
5385
|
}
|
|
5292
5386
|
onBlur() {
|
|
5293
5387
|
this.hideInput();
|
|
@@ -5457,7 +5551,7 @@ class AccessibilityLayer {
|
|
|
5457
5551
|
}
|
|
5458
5552
|
|
|
5459
5553
|
// src/canvas/renderer.ts
|
|
5460
|
-
import { frameworkLoggers as frameworkLoggers8 } from "@hypen-space/core";
|
|
5554
|
+
import { frameworkLoggers as frameworkLoggers8 } from "@hypen-space/core/logger";
|
|
5461
5555
|
var log8 = frameworkLoggers8.canvas;
|
|
5462
5556
|
var DEFAULT_OPTIONS = {
|
|
5463
5557
|
devicePixelRatio: typeof window !== "undefined" ? window.devicePixelRatio || 1 : 1,
|
|
@@ -5724,4 +5818,4 @@ export {
|
|
|
5724
5818
|
ApplicatorRegistry
|
|
5725
5819
|
};
|
|
5726
5820
|
|
|
5727
|
-
//# debugId=
|
|
5821
|
+
//# debugId=6270567F68CE276A64756E2164756E21
|