@hypen-space/web 0.4.3 → 0.4.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/canvas/index.js +30 -2
- package/dist/canvas/index.js.map +4 -4
- package/dist/canvas/input.d.ts +8 -1
- package/dist/canvas/input.js +14 -2
- package/dist/canvas/input.js.map +3 -3
- package/dist/canvas/renderer.d.ts +4 -0
- package/dist/canvas/renderer.js +30 -2
- package/dist/canvas/renderer.js.map +4 -4
- package/dist/client.js +71 -26
- package/dist/client.js.map +6 -6
- package/dist/dom/applicators/advanced-layout.js +1 -4
- package/dist/dom/applicators/advanced-layout.js.map +3 -3
- package/dist/dom/applicators/events.js +53 -2
- package/dist/dom/applicators/events.js.map +3 -3
- package/dist/dom/applicators/index.js +53 -5
- package/dist/dom/applicators/index.js.map +4 -4
- package/dist/dom/index.js +66 -8
- package/dist/dom/index.js.map +5 -5
- package/dist/dom/renderer.d.ts +7 -3
- package/dist/dom/renderer.js +66 -8
- package/dist/dom/renderer.js.map +5 -5
- package/dist/hypen.js +71 -26
- package/dist/hypen.js.map +6 -6
- package/dist/index.js +95 -9
- package/dist/index.js.map +7 -7
- package/package.json +2 -2
- package/src/canvas/input.ts +23 -1
- package/src/canvas/renderer.ts +23 -0
- package/src/dom/applicators/advanced-layout.ts +0 -4
- package/src/dom/applicators/events.ts +71 -0
- package/src/dom/renderer.ts +18 -4
- package/src/hypen.ts +7 -24
package/dist/dom/renderer.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Renders Hypen patches to the DOM
|
|
5
5
|
*/
|
|
6
6
|
import type { Patch } from "@hypen-space/core/types";
|
|
7
|
-
import type {
|
|
7
|
+
import type { HypenRouter } from "@hypen-space/core/router";
|
|
8
8
|
import type { HypenGlobalContext } from "@hypen-space/core/context";
|
|
9
9
|
import { ComponentRegistry } from "./components/index.js";
|
|
10
10
|
import { ApplicatorRegistry } from "./applicators/index.js";
|
|
@@ -20,7 +20,7 @@ export declare class DOMRenderer {
|
|
|
20
20
|
private applicators;
|
|
21
21
|
private engine;
|
|
22
22
|
private currentState;
|
|
23
|
-
private
|
|
23
|
+
private router;
|
|
24
24
|
private globalContext;
|
|
25
25
|
private componentInstances;
|
|
26
26
|
private debugTracker;
|
|
@@ -28,7 +28,7 @@ export declare class DOMRenderer {
|
|
|
28
28
|
/**
|
|
29
29
|
* Set router and global context for component composition
|
|
30
30
|
*/
|
|
31
|
-
setContext(
|
|
31
|
+
setContext(router: HypenRouter | null, globalContext: HypenGlobalContext): void;
|
|
32
32
|
/**
|
|
33
33
|
* Apply a batch of patches to the DOM
|
|
34
34
|
*/
|
|
@@ -63,6 +63,10 @@ export declare class DOMRenderer {
|
|
|
63
63
|
* Set a property on an element
|
|
64
64
|
*/
|
|
65
65
|
private onSetProp;
|
|
66
|
+
/**
|
|
67
|
+
* Remove a property from an element
|
|
68
|
+
*/
|
|
69
|
+
private onRemoveProp;
|
|
66
70
|
/**
|
|
67
71
|
* Set text content
|
|
68
72
|
*/
|
package/dist/dom/renderer.js
CHANGED
|
@@ -2351,7 +2351,58 @@ var eventHandlers = {
|
|
|
2351
2351
|
onFocus: createEventHandler("focus", { extractPayload: focusPayload }),
|
|
2352
2352
|
onBlur: createEventHandler("blur", { extractPayload: focusPayload }),
|
|
2353
2353
|
onMouseEnter: createEventHandler("mouseenter", { extractPayload: mousePayload }),
|
|
2354
|
-
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
|
+
}
|
|
2355
2406
|
};
|
|
2356
2407
|
|
|
2357
2408
|
// src/dom/applicators/typography.ts
|
|
@@ -2612,9 +2663,6 @@ var advancedLayoutHandlers = {
|
|
|
2612
2663
|
alignContent: (el, value) => {
|
|
2613
2664
|
el.style.alignContent = String(value);
|
|
2614
2665
|
},
|
|
2615
|
-
alignSelf: (el, value) => {
|
|
2616
|
-
el.style.alignSelf = String(value);
|
|
2617
|
-
},
|
|
2618
2666
|
order: (el, value) => {
|
|
2619
2667
|
el.style.order = String(value);
|
|
2620
2668
|
},
|
|
@@ -3320,7 +3368,7 @@ class DOMRenderer {
|
|
|
3320
3368
|
applicators;
|
|
3321
3369
|
engine;
|
|
3322
3370
|
currentState = {};
|
|
3323
|
-
|
|
3371
|
+
router = null;
|
|
3324
3372
|
globalContext = null;
|
|
3325
3373
|
componentInstances = new Map;
|
|
3326
3374
|
debugTracker;
|
|
@@ -3335,8 +3383,8 @@ class DOMRenderer {
|
|
|
3335
3383
|
this.applicators.register(name, handler);
|
|
3336
3384
|
}
|
|
3337
3385
|
}
|
|
3338
|
-
setContext(
|
|
3339
|
-
this.
|
|
3386
|
+
setContext(router, globalContext) {
|
|
3387
|
+
this.router = router;
|
|
3340
3388
|
this.globalContext = globalContext;
|
|
3341
3389
|
}
|
|
3342
3390
|
applyPatches(patches) {
|
|
@@ -3395,6 +3443,9 @@ class DOMRenderer {
|
|
|
3395
3443
|
case "setProp":
|
|
3396
3444
|
this.onSetProp(id, patch.name, patch.value);
|
|
3397
3445
|
break;
|
|
3446
|
+
case "removeProp":
|
|
3447
|
+
this.onRemoveProp(id, patch.name);
|
|
3448
|
+
break;
|
|
3398
3449
|
case "setText":
|
|
3399
3450
|
this.onSetText(id, patch.text);
|
|
3400
3451
|
break;
|
|
@@ -3462,6 +3513,13 @@ class DOMRenderer {
|
|
|
3462
3513
|
}
|
|
3463
3514
|
this.applicators.apply(element, name, value);
|
|
3464
3515
|
}
|
|
3516
|
+
onRemoveProp(id, name) {
|
|
3517
|
+
const element = this.nodes.get(id);
|
|
3518
|
+
if (!element)
|
|
3519
|
+
return;
|
|
3520
|
+
this.debugTracker.trackRerender(id, element, `removeProp:${name}`);
|
|
3521
|
+
this.applicators.apply(element, name, undefined);
|
|
3522
|
+
}
|
|
3465
3523
|
onSetText(id, text) {
|
|
3466
3524
|
const element = this.nodes.get(id);
|
|
3467
3525
|
if (!element)
|
|
@@ -3538,4 +3596,4 @@ export {
|
|
|
3538
3596
|
DOMRenderer
|
|
3539
3597
|
};
|
|
3540
3598
|
|
|
3541
|
-
//# debugId=
|
|
3599
|
+
//# debugId=6DB06606E56538AC64756E2164756E21
|