@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/hypen.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
- routerContext = null;
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(routerContext, globalContext) {
3339
- this.routerContext = routerContext;
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)
@@ -3568,7 +3626,6 @@ class Hypen {
3568
3626
  componentLoader.register("Router", Router, "");
3569
3627
  componentLoader.register("Route", Route, "");
3570
3628
  componentLoader.register("Link", Link, "");
3571
- this.globalContext.__router = this.router;
3572
3629
  this.globalContext.__hypenEngine = this;
3573
3630
  }
3574
3631
  async init() {
@@ -3615,13 +3672,9 @@ class Hypen {
3615
3672
  log6.debug(`Applying ${patches.length} patches`);
3616
3673
  this.renderer.applyPatches(patches);
3617
3674
  });
3618
- const routerContext = {
3619
- root: this.router,
3620
- current: this.router
3621
- };
3622
- this.renderer.setContext(routerContext, this.globalContext);
3675
+ this.renderer.setContext(this.router, this.globalContext);
3623
3676
  const moduleId = this.extractModuleId(componentName, component.template);
3624
- this.moduleInstance = new HypenModuleInstance(this.engine, component.module, routerContext, this.globalContext);
3677
+ this.moduleInstance = new HypenModuleInstance(this.engine, component.module, this.router, this.globalContext);
3625
3678
  this.globalContext.registerModule(moduleId, this.moduleInstance);
3626
3679
  this.moduleInstances.set(moduleId, this.moduleInstance);
3627
3680
  this.moduleInstance.onStateChange(() => {
@@ -3689,11 +3742,7 @@ class Hypen {
3689
3742
  }
3690
3743
  if (component.module && !this.moduleInstances.has(componentName)) {
3691
3744
  const moduleId = this.extractModuleId(componentName, template);
3692
- const routerContext = {
3693
- root: this.router,
3694
- current: this.router
3695
- };
3696
- const moduleInstance = new HypenModuleInstance(this.engine, component.module, routerContext, this.globalContext);
3745
+ const moduleInstance = new HypenModuleInstance(this.engine, component.module, this.router, this.globalContext);
3697
3746
  this.globalContext.registerModule(moduleId, moduleInstance);
3698
3747
  this.moduleInstances.set(componentName, moduleInstance);
3699
3748
  moduleInstance.onStateChange(() => {
@@ -3720,12 +3769,8 @@ class Hypen {
3720
3769
  return componentName;
3721
3770
  }
3722
3771
  createNestedModuleInstances() {
3723
- const routerContext = {
3724
- root: this.router,
3725
- current: this.router
3726
- };
3727
3772
  if (Router && !this.moduleInstances.has("Router")) {
3728
- const routerInstance = new HypenModuleInstance(this.engine, Router, routerContext, this.globalContext);
3773
+ const routerInstance = new HypenModuleInstance(this.engine, Router, this.router, this.globalContext);
3729
3774
  this.globalContext.registerModule("Router", routerInstance);
3730
3775
  this.moduleInstances.set("Router", routerInstance);
3731
3776
  routerInstance.onStateChange(() => {
@@ -3744,7 +3789,7 @@ class Hypen {
3744
3789
  continue;
3745
3790
  }
3746
3791
  log6.debug(`Creating nested module instance for: ${name}`);
3747
- const moduleInstance = new HypenModuleInstance(this.engine, comp.module, routerContext, this.globalContext);
3792
+ const moduleInstance = new HypenModuleInstance(this.engine, comp.module, this.router, this.globalContext);
3748
3793
  this.globalContext.registerModule(name, moduleInstance);
3749
3794
  this.moduleInstances.set(name, moduleInstance);
3750
3795
  moduleInstance.onStateChange(() => {
@@ -3841,4 +3886,4 @@ export {
3841
3886
  Hypen
3842
3887
  };
3843
3888
 
3844
- //# debugId=79019BA840D0560F64756E2164756E21
3889
+ //# debugId=8C40DA488E3B928064756E2164756E21