@hypen-space/web 0.4.3 → 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.
@@ -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 { RouterContext } from "@hypen-space/core/app";
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 routerContext;
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(routerContext: RouterContext, globalContext: HypenGlobalContext): void;
31
+ setContext(router: HypenRouter | null, globalContext: HypenGlobalContext): void;
32
32
  /**
33
33
  * Apply a batch of patches to the DOM
34
34
  */
@@ -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
@@ -3320,7 +3371,7 @@ class DOMRenderer {
3320
3371
  applicators;
3321
3372
  engine;
3322
3373
  currentState = {};
3323
- routerContext = null;
3374
+ router = null;
3324
3375
  globalContext = null;
3325
3376
  componentInstances = new Map;
3326
3377
  debugTracker;
@@ -3335,8 +3386,8 @@ class DOMRenderer {
3335
3386
  this.applicators.register(name, handler);
3336
3387
  }
3337
3388
  }
3338
- setContext(routerContext, globalContext) {
3339
- this.routerContext = routerContext;
3389
+ setContext(router, globalContext) {
3390
+ this.router = router;
3340
3391
  this.globalContext = globalContext;
3341
3392
  }
3342
3393
  applyPatches(patches) {
@@ -3538,4 +3589,4 @@ export {
3538
3589
  DOMRenderer
3539
3590
  };
3540
3591
 
3541
- //# debugId=CB1F5BB91A5CA1C364756E2164756E21
3592
+ //# debugId=747876C05653F2AC64756E2164756E21