@toyz/loom 0.1.2 → 0.2.0

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.
Files changed (150) hide show
  1. package/dist/decorators/create.d.ts +56 -0
  2. package/dist/decorators/create.d.ts.map +1 -0
  3. package/dist/decorators/create.js +72 -0
  4. package/dist/decorators/create.js.map +1 -0
  5. package/dist/decorators/events.d.ts +6 -9
  6. package/dist/decorators/events.d.ts.map +1 -1
  7. package/dist/decorators/events.js +27 -22
  8. package/dist/decorators/events.js.map +1 -1
  9. package/dist/decorators/index.d.ts +13 -13
  10. package/dist/decorators/index.d.ts.map +1 -1
  11. package/dist/decorators/index.js +20 -21
  12. package/dist/decorators/index.js.map +1 -1
  13. package/dist/{decorators/di.d.ts → di/decorators.d.ts} +10 -3
  14. package/dist/di/decorators.d.ts.map +1 -0
  15. package/dist/{decorators/di.js → di/decorators.js} +16 -10
  16. package/dist/di/decorators.js.map +1 -0
  17. package/dist/di/index.d.ts +8 -0
  18. package/dist/di/index.d.ts.map +1 -0
  19. package/dist/di/index.js +10 -0
  20. package/dist/di/index.js.map +1 -0
  21. package/dist/di/watch.d.ts +23 -0
  22. package/dist/di/watch.d.ts.map +1 -0
  23. package/dist/di/watch.js +41 -0
  24. package/dist/di/watch.js.map +1 -0
  25. package/dist/element/decorators.d.ts +32 -0
  26. package/dist/element/decorators.d.ts.map +1 -0
  27. package/dist/element/decorators.js +72 -0
  28. package/dist/element/decorators.js.map +1 -0
  29. package/dist/{element.d.ts → element/element.d.ts} +5 -11
  30. package/dist/element/element.d.ts.map +1 -0
  31. package/dist/{element.js → element/element.js} +8 -34
  32. package/dist/element/element.js.map +1 -0
  33. package/dist/element/icon.d.ts.map +1 -0
  34. package/dist/{icon.js → element/icon.js} +3 -2
  35. package/dist/element/icon.js.map +1 -0
  36. package/dist/element/index.d.ts +11 -0
  37. package/dist/element/index.d.ts.map +1 -0
  38. package/dist/element/index.js +14 -0
  39. package/dist/element/index.js.map +1 -0
  40. package/dist/{decorators → element}/lifecycle.d.ts +9 -1
  41. package/dist/element/lifecycle.d.ts.map +1 -0
  42. package/dist/{decorators → element}/lifecycle.js +50 -35
  43. package/dist/element/lifecycle.js.map +1 -0
  44. package/dist/element/timing.d.ts +65 -0
  45. package/dist/element/timing.d.ts.map +1 -0
  46. package/dist/element/timing.js +116 -0
  47. package/dist/element/timing.js.map +1 -0
  48. package/dist/element/virtual.d.ts.map +1 -0
  49. package/dist/{virtual.js → element/virtual.js} +1 -1
  50. package/dist/element/virtual.js.map +1 -0
  51. package/dist/index.d.ts +11 -11
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +14 -14
  54. package/dist/index.js.map +1 -1
  55. package/dist/router/decorators.d.ts +50 -0
  56. package/dist/router/decorators.d.ts.map +1 -0
  57. package/dist/router/decorators.js +84 -0
  58. package/dist/router/decorators.js.map +1 -0
  59. package/dist/router/index.d.ts +4 -3
  60. package/dist/router/index.d.ts.map +1 -1
  61. package/dist/router/index.js +6 -4
  62. package/dist/router/index.js.map +1 -1
  63. package/dist/router/outlet.d.ts +1 -1
  64. package/dist/router/outlet.d.ts.map +1 -1
  65. package/dist/router/outlet.js +2 -2
  66. package/dist/router/outlet.js.map +1 -1
  67. package/dist/router/route.d.ts +16 -47
  68. package/dist/router/route.d.ts.map +1 -1
  69. package/dist/router/route.js +5 -102
  70. package/dist/router/route.js.map +1 -1
  71. package/dist/router/router.d.ts.map +1 -1
  72. package/dist/router/router.js +2 -1
  73. package/dist/router/router.js.map +1 -1
  74. package/dist/{decorators/state.d.ts → store/decorators.d.ts} +8 -1
  75. package/dist/store/decorators.d.ts.map +1 -0
  76. package/dist/{decorators/state.js → store/decorators.js} +13 -4
  77. package/dist/store/decorators.js.map +1 -0
  78. package/dist/store/index.d.ts +12 -0
  79. package/dist/store/index.d.ts.map +1 -0
  80. package/dist/store/index.js +14 -0
  81. package/dist/store/index.js.map +1 -0
  82. package/dist/{reactive.d.ts → store/reactive.d.ts} +7 -5
  83. package/dist/store/reactive.d.ts.map +1 -0
  84. package/dist/{reactive.js → store/reactive.js} +9 -5
  85. package/dist/store/reactive.js.map +1 -0
  86. package/dist/store/storage.d.ts +53 -0
  87. package/dist/store/storage.d.ts.map +1 -0
  88. package/dist/store/storage.js +78 -0
  89. package/dist/store/storage.js.map +1 -0
  90. package/dist/store/watch.d.ts +27 -0
  91. package/dist/store/watch.d.ts.map +1 -0
  92. package/dist/store/watch.js +30 -0
  93. package/dist/store/watch.js.map +1 -0
  94. package/dist/transform/built-in.d.ts +36 -0
  95. package/dist/transform/built-in.d.ts.map +1 -0
  96. package/dist/transform/built-in.js +37 -0
  97. package/dist/transform/built-in.js.map +1 -0
  98. package/dist/transform/create.d.ts +19 -0
  99. package/dist/transform/create.d.ts.map +1 -0
  100. package/dist/transform/create.js +27 -0
  101. package/dist/transform/create.js.map +1 -0
  102. package/dist/transform/index.d.ts +11 -0
  103. package/dist/transform/index.d.ts.map +1 -0
  104. package/dist/transform/index.js +14 -0
  105. package/dist/transform/index.js.map +1 -0
  106. package/dist/transform/transform.d.ts +14 -0
  107. package/dist/transform/transform.d.ts.map +1 -0
  108. package/dist/transform/transform.js +21 -0
  109. package/dist/transform/transform.js.map +1 -0
  110. package/dist/transform/typed.d.ts +40 -0
  111. package/dist/transform/typed.d.ts.map +1 -0
  112. package/dist/transform/typed.js +55 -0
  113. package/dist/transform/typed.js.map +1 -0
  114. package/package.json +35 -3
  115. package/dist/decorators/component.d.ts +0 -11
  116. package/dist/decorators/component.d.ts.map +0 -1
  117. package/dist/decorators/component.js +0 -38
  118. package/dist/decorators/component.js.map +0 -1
  119. package/dist/decorators/di.d.ts.map +0 -1
  120. package/dist/decorators/di.js.map +0 -1
  121. package/dist/decorators/dom.d.ts +0 -15
  122. package/dist/decorators/dom.d.ts.map +0 -1
  123. package/dist/decorators/dom.js +0 -33
  124. package/dist/decorators/dom.js.map +0 -1
  125. package/dist/decorators/lifecycle.d.ts.map +0 -1
  126. package/dist/decorators/lifecycle.js.map +0 -1
  127. package/dist/decorators/state.d.ts.map +0 -1
  128. package/dist/decorators/state.js.map +0 -1
  129. package/dist/decorators/timing.d.ts +0 -35
  130. package/dist/decorators/timing.d.ts.map +0 -1
  131. package/dist/decorators/timing.js +0 -57
  132. package/dist/decorators/timing.js.map +0 -1
  133. package/dist/decorators/transform.d.ts +0 -45
  134. package/dist/decorators/transform.d.ts.map +0 -1
  135. package/dist/decorators/transform.js +0 -48
  136. package/dist/decorators/transform.js.map +0 -1
  137. package/dist/element.d.ts.map +0 -1
  138. package/dist/element.js.map +0 -1
  139. package/dist/icon.d.ts.map +0 -1
  140. package/dist/icon.js.map +0 -1
  141. package/dist/reactive.d.ts.map +0 -1
  142. package/dist/reactive.js.map +0 -1
  143. package/dist/storage.d.ts +0 -55
  144. package/dist/storage.d.ts.map +0 -1
  145. package/dist/storage.js +0 -90
  146. package/dist/storage.js.map +0 -1
  147. package/dist/virtual.d.ts.map +0 -1
  148. package/dist/virtual.js.map +0 -1
  149. /package/dist/{icon.d.ts → element/icon.d.ts} +0 -0
  150. /package/dist/{virtual.d.ts → element/virtual.d.ts} +0 -0
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Loom — Element decorators
3
+ *
4
+ * @component — Register a class as a custom element
5
+ * @query — Lazy shadow DOM querySelector
6
+ * @queryAll — Lazy shadow DOM querySelectorAll
7
+ */
8
+ import { PROPS } from "../decorators/symbols";
9
+ import { app } from "../app";
10
+ import { createDecorator } from "../decorators/create";
11
+ /**
12
+ * Register a class as a custom element. Wires @prop observed attributes
13
+ * and attributeChangedCallback auto-parsing.
14
+ *
15
+ * ```ts
16
+ * @component("my-counter")
17
+ * class MyCounter extends LoomElement { ... }
18
+ * ```
19
+ */
20
+ export const component = createDecorator((ctor, tag) => {
21
+ const propMap = ctor[PROPS] ?? new Map();
22
+ // Wire observedAttributes from @prop fields
23
+ Object.defineProperty(ctor, "observedAttributes", {
24
+ get: () => [...propMap.keys()],
25
+ });
26
+ // Wire attributeChangedCallback to update @prop fields
27
+ const origCallback = ctor.prototype.attributeChangedCallback;
28
+ ctor.prototype.attributeChangedCallback = function (name, _old, val) {
29
+ const field = propMap.get(name);
30
+ if (field && val !== null) {
31
+ const current = this[field];
32
+ if (typeof current === "number")
33
+ this[field] = Number(val);
34
+ else if (typeof current === "boolean")
35
+ this[field] = val !== null && val !== "false";
36
+ else
37
+ this[field] = val;
38
+ }
39
+ origCallback?.call(this, name, _old, val);
40
+ };
41
+ app.register(tag, ctor);
42
+ ctor.__loom_tag = tag;
43
+ }, { class: true });
44
+ /**
45
+ * Lazy shadow DOM querySelector.
46
+ * ```ts
47
+ * @query(".submit-btn") submitBtn!: HTMLButtonElement;
48
+ * ```
49
+ */
50
+ export const query = createDecorator((proto, key, selector) => {
51
+ Object.defineProperty(proto, key, {
52
+ get() {
53
+ return this.shadow.querySelector(selector);
54
+ },
55
+ configurable: true,
56
+ });
57
+ });
58
+ /**
59
+ * Lazy shadow DOM querySelectorAll.
60
+ * ```ts
61
+ * @queryAll("input") inputs!: HTMLInputElement[];
62
+ * ```
63
+ */
64
+ export const queryAll = createDecorator((proto, key, selector) => {
65
+ Object.defineProperty(proto, key, {
66
+ get() {
67
+ return Array.from(this.shadow.querySelectorAll(selector));
68
+ },
69
+ configurable: true,
70
+ });
71
+ });
72
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/element/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;IACpE,MAAM,OAAO,GACV,IAAY,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IAEpC,4CAA4C;IAC5C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE;QAChD,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,uDAAuD;IACvD,MAAM,YAAY,GAAI,IAAI,CAAC,SAAiB,CAAC,wBAAwB,CAAC;IACrE,IAAI,CAAC,SAAiB,CAAC,wBAAwB,GAAG,UACjD,IAAY,EACZ,IAAmB,EACnB,GAAkB;QAElB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAI,IAAY,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAG,IAAY,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC/D,IAAI,OAAO,OAAO,KAAK,SAAS;gBAClC,IAAY,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,CAAC;;gBACnD,IAAY,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;QAClC,CAAC;QACD,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAgC,CAAC,CAAC;IACnD,IAAY,CAAC,UAAU,GAAG,GAAG,CAAC;AACjC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,eAAe,CAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IAChF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;QAChC,GAAG;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;IACnF,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE;QAChC,GAAG;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,15 +1,9 @@
1
- /**
2
- * Loom LoomElement base class
3
- *
4
- * Web Component base with shadow DOM, css tagged templates,
5
- * lifecycle hooks, and cleanup tracking.
6
- */
7
- import { type Constructor, type Handler } from "./bus";
8
- import { type LoomEvent } from "./event";
9
- import { type CSSValue } from "./css";
1
+ import { type Constructor, type Handler } from "../bus";
2
+ import { type LoomEvent } from "../event";
3
+ import { type CSSValue } from "../css";
10
4
  export declare abstract class LoomElement extends HTMLElement {
11
5
  /** Access the LoomApp instance for inline provider resolution */
12
- protected get app(): import("./app").LoomApp;
6
+ protected get app(): import("..").LoomApp;
13
7
  protected shadow: ShadowRoot;
14
8
  private cleanups;
15
9
  constructor();
@@ -27,7 +21,7 @@ export declare abstract class LoomElement extends HTMLElement {
27
21
  /** Emit a typed event */
28
22
  protected emit<T extends LoomEvent>(event: T): void;
29
23
  /** Track any cleanup function — runs on disconnect */
30
- protected track(unsub: () => void): void;
24
+ track(unsub: () => void): void;
31
25
  /** querySelector within shadow root */
32
26
  protected $<T extends Element = HTMLElement>(sel: string): T | null;
33
27
  /** querySelectorAll within shadow root */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,KAAK,QAAQ,EAAY,MAAM,QAAQ,CAAC;AAKjD,8BAAsB,WAAY,SAAQ,WAAW;IACnD,iEAAiE;IACjE,SAAS,KAAK,GAAG,yBAAkB;IAEnC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC;IAC7B,OAAO,CAAC,QAAQ,CAAsB;;IAStC,8DAA8D;IAC9D,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IACjC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI;IAQzE;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IAU1C,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAMtE,yBAAyB;IACzB,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMnD,sDAAsD;IACtD,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,IAAI;IAM9B,uCAAuC;IACvC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAInE,0CAA0C;IAC1C,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,OAAO,GAAG,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAM/D,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAQ5B;;;OAGG;IACH,MAAM,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAE9B;;;OAGG;IACH,YAAY,IAAI,IAAI;IAEpB;;;OAGG;IACH,YAAY,IAAI,OAAO;IAMvB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,WAAW,CAAS;IAE5B,0DAA0D;IAC1D,cAAc,IAAI,IAAI;IAsBtB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
@@ -1,14 +1,8 @@
1
- /**
2
- * Loom LoomElement base class
3
- *
4
- * Web Component base with shadow DOM, css tagged templates,
5
- * lifecycle hooks, and cleanup tracking.
6
- */
7
- import { bus } from "./bus";
8
- import { adoptCSS } from "./css";
9
- import { ON_HANDLERS, COMPUTED_DIRTY, MOUNT_HANDLERS, UNMOUNT_HANDLERS, REACTIVES } from "./decorators";
10
- import { morph } from "./morph";
11
- import { app } from "./app";
1
+ import { bus } from "../bus";
2
+ import { adoptCSS } from "../css";
3
+ import { COMPUTED_DIRTY, REACTIVES } from "../decorators/symbols";
4
+ import { morph } from "../morph";
5
+ import { app } from "../app";
12
6
  export class LoomElement extends HTMLElement {
13
7
  /** Access the LoomApp instance for inline provider resolution */
14
8
  get app() { return app; }
@@ -60,35 +54,15 @@ export class LoomElement extends HTMLElement {
60
54
  }
61
55
  // ── Lifecycle ──
62
56
  connectedCallback() {
63
- // Wire @on handlers (bus events + DOM events)
64
- for (const handler of this[ON_HANDLERS] ?? []) {
65
- if (handler.domTarget) {
66
- // DOM EventTarget: @on(window, "resize")
67
- const fn = (e) => this[handler.key](e);
68
- handler.domTarget.addEventListener(handler.event, fn);
69
- this.track(() => handler.domTarget.removeEventListener(handler.event, fn));
70
- }
71
- else {
72
- // Bus event: @on(ColorSelect)
73
- this.track(bus.on(handler.type, (e) => this[handler.key](e)));
74
- }
75
- }
76
- // Only auto-render if component uses reactive patterns
57
+ // Decorators self-wire via createDecorator's connectedCallback chain.
58
+ // We only need to trigger the initial render for reactive components.
77
59
  const hasReactives = (this[REACTIVES]?.length ?? 0) > 0;
78
60
  const overridesUpdate = this.update !== LoomElement.prototype.update;
79
61
  if (hasReactives || overridesUpdate)
80
62
  this.scheduleUpdate();
81
- // Fire @mount handlers
82
- for (const key of this[MOUNT_HANDLERS] ?? []) {
83
- this[key]();
84
- }
85
63
  }
86
64
  disconnectedCallback() {
87
- // Fire @unmount handlers (before cleanup)
88
- for (const key of this[UNMOUNT_HANDLERS] ?? []) {
89
- this[key]();
90
- }
91
- // Run all track() cleanups
65
+ // Run all track() cleanups (includes decorator-registered cleanups)
92
66
  this.cleanups.forEach((fn) => fn());
93
67
  this.cleanups = [];
94
68
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/element/element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../src/element/icon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AA6BxC,qBACa,QAAS,SAAQ,WAAW;IAEvC,2DAA2D;IACrD,IAAI,SAAM;IAEhB,qBAAqB;IACf,IAAI,SAAM;IAEhB,+BAA+B;IACzB,KAAK,SAAkB;IAE7B,mFAAmF;IACnF,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIrD,uCAAuC;IACvC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAMvD,sCAAsC;IACtC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,sCAAsC;IACtC,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE,CAE3B;IAED,mFAAmF;IACnF,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAU9E,iBAAiB;IASjB,MAAM;CAiBP"}
@@ -18,8 +18,9 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
18
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
19
19
  };
20
20
  import { LoomElement } from "./element";
21
- import { component, prop } from "./decorators";
22
- import { css } from "./css";
21
+ import { component } from "./decorators";
22
+ import { prop } from "../store/decorators";
23
+ import { css } from "../css";
23
24
  const baseStyles = css `
24
25
  :host {
25
26
  display: inline-flex;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.js","sourceRoot":"","sources":["../../src/element/icon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Loom Element — Barrel exports
3
+ *
4
+ * LoomElement base class, built-in elements, and element decorators.
5
+ */
6
+ export { LoomElement } from "./element";
7
+ export type { VirtualListOptions } from "./virtual";
8
+ export { component, query, queryAll } from "./decorators";
9
+ export { catch_, suspend, mount, unmount } from "./lifecycle";
10
+ export { interval, timeout, debounce, throttle, animationFrame } from "./timing";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAKxC,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Loom Element — Barrel exports
3
+ *
4
+ * LoomElement base class, built-in elements, and element decorators.
5
+ */
6
+ // Base element
7
+ export { LoomElement } from "./element";
8
+ // Element decorators
9
+ export { component, query, queryAll } from "./decorators";
10
+ // Lifecycle decorators
11
+ export { catch_, suspend, mount, unmount } from "./lifecycle";
12
+ // Timing decorators
13
+ export { interval, timeout, debounce, throttle, animationFrame } from "./timing";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/element/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAOxC,qBAAqB;AACrB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE1D,uBAAuB;AACvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9D,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Loom — Element lifecycle decorators
3
+ *
4
+ * @catch_ — Error boundary
5
+ * @suspend — Async suspense
6
+ * @mount — connectedCallback hook
7
+ * @unmount — disconnectedCallback hook
8
+ */
1
9
  type CatchFn = (error: Error, element: any) => void;
2
10
  /**
3
11
  * Error boundary. Wraps lifecycle methods with try/catch, renders fallback on error.
@@ -11,7 +19,7 @@ type CatchFn = (error: Error, element: any) => void;
11
19
  * class MyWidget extends LoomElement { ... }
12
20
  * ```
13
21
  */
14
- export declare function catch_(handler: CatchFn): (ctor: any) => void;
22
+ export declare const catch_: (handler: CatchFn) => (ctor: any) => void;
15
23
  /**
16
24
  * Async suspense. Wraps async methods to auto-manage loading/error state.
17
25
  * Expects the component to have @reactive loading and @reactive error fields.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/element/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,YAEA,OAAO,YACR,GAAG,SA4BjB,CAAC;AAEL;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,KACb,SAAS,GAAG,EAAE,MAAM,MAAM,EAAE,MAAM,kBAAkB,UAkB7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMpD;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAMtD"}
@@ -1,4 +1,12 @@
1
- import { CATCH_HANDLER, MOUNT_HANDLERS, UNMOUNT_HANDLERS } from "./symbols";
1
+ /**
2
+ * Loom — Element lifecycle decorators
3
+ *
4
+ * @catch_ — Error boundary
5
+ * @suspend — Async suspense
6
+ * @mount — connectedCallback hook
7
+ * @unmount — disconnectedCallback hook
8
+ */
9
+ import { CATCH_HANDLER } from "../decorators/symbols";
2
10
  /**
3
11
  * Error boundary. Wraps lifecycle methods with try/catch, renders fallback on error.
4
12
  * Named catch_ since `catch` is reserved.
@@ -11,35 +19,38 @@ import { CATCH_HANDLER, MOUNT_HANDLERS, UNMOUNT_HANDLERS } from "./symbols";
11
19
  * class MyWidget extends LoomElement { ... }
12
20
  * ```
13
21
  */
14
- export function catch_(handler) {
15
- return (ctor) => {
16
- ctor[CATCH_HANDLER] = handler;
17
- // Wrap update()
18
- const origUpdate = ctor.prototype.update;
19
- if (origUpdate) {
20
- ctor.prototype.update = function () {
21
- try {
22
- return origUpdate.call(this);
23
- }
24
- catch (err) {
25
- handler(err, this);
26
- }
27
- };
28
- }
29
- // Wrap connectedCallback()
30
- const origConnect = ctor.prototype.connectedCallback;
31
- if (origConnect) {
32
- ctor.prototype.connectedCallback = function () {
33
- try {
34
- origConnect.call(this);
35
- }
36
- catch (err) {
37
- handler(err, this);
38
- }
39
- };
40
- }
22
+ export const catch_ = (function () {
23
+ // Manual implementation since createDecorator import would add unnecessary dep
24
+ return (handler) => {
25
+ return (ctor) => {
26
+ ctor[CATCH_HANDLER] = handler;
27
+ // Wrap update()
28
+ const origUpdate = ctor.prototype.update;
29
+ if (origUpdate) {
30
+ ctor.prototype.update = function () {
31
+ try {
32
+ return origUpdate.call(this);
33
+ }
34
+ catch (err) {
35
+ handler(err, this);
36
+ }
37
+ };
38
+ }
39
+ // Wrap connectedCallback()
40
+ const origConnect = ctor.prototype.connectedCallback;
41
+ if (origConnect) {
42
+ ctor.prototype.connectedCallback = function () {
43
+ try {
44
+ origConnect.call(this);
45
+ }
46
+ catch (err) {
47
+ handler(err, this);
48
+ }
49
+ };
50
+ }
51
+ };
41
52
  };
42
- }
53
+ })();
43
54
  /**
44
55
  * Async suspense. Wraps async methods to auto-manage loading/error state.
45
56
  * Expects the component to have @reactive loading and @reactive error fields.
@@ -84,9 +95,11 @@ export function suspend() {
84
95
  * ```
85
96
  */
86
97
  export function mount(target, key) {
87
- if (!target[MOUNT_HANDLERS])
88
- target[MOUNT_HANDLERS] = [];
89
- target[MOUNT_HANDLERS].push(key);
98
+ const orig = target.connectedCallback;
99
+ target.connectedCallback = function () {
100
+ orig?.call(this);
101
+ this[key]();
102
+ };
90
103
  }
91
104
  /**
92
105
  * Lifecycle: runs when element disconnects from the DOM.
@@ -98,8 +111,10 @@ export function mount(target, key) {
98
111
  * ```
99
112
  */
100
113
  export function unmount(target, key) {
101
- if (!target[UNMOUNT_HANDLERS])
102
- target[UNMOUNT_HANDLERS] = [];
103
- target[UNMOUNT_HANDLERS].push(key);
114
+ const orig = target.connectedCallback;
115
+ target.connectedCallback = function () {
116
+ orig?.call(this);
117
+ this.track(() => this[key]());
118
+ };
104
119
  }
105
120
  //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/element/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Loom — Element timing decorators
3
+ *
4
+ * @interval — Auto-cleaned setInterval
5
+ * @timeout — Auto-cleaned setTimeout
6
+ * @debounce — Debounced method
7
+ * @throttle — Throttled method
8
+ * @animationFrame — Centralized rAF loop via RenderLoop
9
+ */
10
+ /**
11
+ * Auto-cleaned setInterval. Runs the method every `ms` milliseconds.
12
+ * Timer is started on connect, cleared on disconnect via track().
13
+ *
14
+ * ```ts
15
+ * @interval(1000)
16
+ * tick() { this.time = new Date(); }
17
+ * ```
18
+ */
19
+ export declare const interval: (ms: number) => (target: any, key: string, desc?: PropertyDescriptor) => void;
20
+ /**
21
+ * Auto-cleaned setTimeout. Runs the method once after `ms` milliseconds.
22
+ * Timer is started on connect, cleared on disconnect via track().
23
+ *
24
+ * ```ts
25
+ * @timeout(3000)
26
+ * hideWelcome() { this.$(".welcome")?.remove(); }
27
+ * ```
28
+ */
29
+ export declare const timeout: (ms: number) => (target: any, key: string, desc?: PropertyDescriptor) => void;
30
+ /**
31
+ * Debounce a method — delays execution until `ms` of inactivity.
32
+ * Auto-cancels pending timer on disconnect.
33
+ *
34
+ * ```ts
35
+ * @debounce(300)
36
+ * onInput(e: Event) { this.query = (e.target as HTMLInputElement).value; }
37
+ * ```
38
+ */
39
+ export declare const debounce: (ms: number) => (target: any, key: string, desc?: PropertyDescriptor) => void;
40
+ /**
41
+ * Throttle a method — fires at most once per `ms` milliseconds.
42
+ * Uses trailing-edge: the last call within the window always fires.
43
+ * Auto-cancels pending timer on disconnect.
44
+ *
45
+ * ```ts
46
+ * @throttle(16)
47
+ * onScroll() { this.offset = this.scrollTop; }
48
+ * ```
49
+ */
50
+ export declare const throttle: (ms: number) => (target: any, key: string, desc?: PropertyDescriptor) => void;
51
+ /**
52
+ * Centralized rAF loop via RenderLoop. Method receives (deltaTime, timestamp).
53
+ * Use layer to control execution order (lower = earlier).
54
+ *
55
+ * ```ts
56
+ * @animationFrame(10) // layer 10
57
+ * draw(dt: number, t: number) { ... }
58
+ *
59
+ * @animationFrame() // default layer 0
60
+ * physics(dt: number) { ... }
61
+ * ```
62
+ */
63
+ export declare function animationFrame(layer?: number): (target: any, key: string) => void;
64
+ export declare function animationFrame(target: any, key: string): void;
65
+ //# sourceMappingURL=timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../src/element/timing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,iDAwDpB,CAAD,6BAnDE,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,OAAO,iDAwCnB,CAAD,6BAnCE,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,iDAwBpB,CAAD,6BAVE,CAAC;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,iDAFpB,CAAD,6BA2BE,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;AACnF,wBAAgB,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Loom — Element timing decorators
3
+ *
4
+ * @interval — Auto-cleaned setInterval
5
+ * @timeout — Auto-cleaned setTimeout
6
+ * @debounce — Debounced method
7
+ * @throttle — Throttled method
8
+ * @animationFrame — Centralized rAF loop via RenderLoop
9
+ */
10
+ import { renderLoop } from "../render-loop";
11
+ import { createDecorator } from "../decorators/create";
12
+ /**
13
+ * Auto-cleaned setInterval. Runs the method every `ms` milliseconds.
14
+ * Timer is started on connect, cleared on disconnect via track().
15
+ *
16
+ * ```ts
17
+ * @interval(1000)
18
+ * tick() { this.time = new Date(); }
19
+ * ```
20
+ */
21
+ export const interval = createDecorator((_proto, key, ms) => {
22
+ return (el) => {
23
+ const id = setInterval(() => el[key](), ms);
24
+ return () => clearInterval(id);
25
+ };
26
+ });
27
+ /**
28
+ * Auto-cleaned setTimeout. Runs the method once after `ms` milliseconds.
29
+ * Timer is started on connect, cleared on disconnect via track().
30
+ *
31
+ * ```ts
32
+ * @timeout(3000)
33
+ * hideWelcome() { this.$(".welcome")?.remove(); }
34
+ * ```
35
+ */
36
+ export const timeout = createDecorator((_proto, key, ms) => {
37
+ return (el) => {
38
+ const id = setTimeout(() => el[key](), ms);
39
+ return () => clearTimeout(id);
40
+ };
41
+ });
42
+ /**
43
+ * Debounce a method — delays execution until `ms` of inactivity.
44
+ * Auto-cancels pending timer on disconnect.
45
+ *
46
+ * ```ts
47
+ * @debounce(300)
48
+ * onInput(e: Event) { this.query = (e.target as HTMLInputElement).value; }
49
+ * ```
50
+ */
51
+ export const debounce = createDecorator((proto, key, ms) => {
52
+ const original = proto[key];
53
+ const timerKey = `__debounce_${key}`;
54
+ // Define-time: replace method with debounced version
55
+ proto[key] = function (...args) {
56
+ clearTimeout(this[timerKey]);
57
+ this[timerKey] = setTimeout(() => original.apply(this, args), ms);
58
+ };
59
+ // Lifecycle: cancel pending timer on disconnect
60
+ return (el) => {
61
+ return () => clearTimeout(el[timerKey]);
62
+ };
63
+ });
64
+ /**
65
+ * Throttle a method — fires at most once per `ms` milliseconds.
66
+ * Uses trailing-edge: the last call within the window always fires.
67
+ * Auto-cancels pending timer on disconnect.
68
+ *
69
+ * ```ts
70
+ * @throttle(16)
71
+ * onScroll() { this.offset = this.scrollTop; }
72
+ * ```
73
+ */
74
+ export const throttle = createDecorator((proto, key, ms) => {
75
+ const original = proto[key];
76
+ const lastKey = `__throttle_last_${key}`;
77
+ const timerKey = `__throttle_timer_${key}`;
78
+ // Define-time: replace method with throttled version
79
+ proto[key] = function (...args) {
80
+ const now = Date.now();
81
+ if (!this[lastKey] || now - this[lastKey] >= ms) {
82
+ this[lastKey] = now;
83
+ original.apply(this, args);
84
+ }
85
+ else {
86
+ clearTimeout(this[timerKey]);
87
+ this[timerKey] = setTimeout(() => {
88
+ this[lastKey] = Date.now();
89
+ original.apply(this, args);
90
+ }, ms - (now - this[lastKey]));
91
+ }
92
+ };
93
+ // Lifecycle: cancel pending timer on disconnect
94
+ return (el) => {
95
+ return () => clearTimeout(el[timerKey]);
96
+ };
97
+ });
98
+ export function animationFrame(targetOrLayer, key) {
99
+ // Called as @animationFrame (no parens)
100
+ if (typeof targetOrLayer === "object" && typeof key === "string") {
101
+ wireAnimationFrame(targetOrLayer, key, 0);
102
+ return;
103
+ }
104
+ // Called as @animationFrame() or @animationFrame(layer)
105
+ const layer = typeof targetOrLayer === "number" ? targetOrLayer : 0;
106
+ return (target, key) => wireAnimationFrame(target, key, layer);
107
+ }
108
+ /** Internal: uses createDecorator pattern manually for overload support */
109
+ function wireAnimationFrame(target, key, layer) {
110
+ const orig = target.connectedCallback;
111
+ target.connectedCallback = function () {
112
+ orig?.call(this);
113
+ this.track(renderLoop.add(layer, (dt, t) => this[key](dt, t)));
114
+ };
115
+ }
116
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.js","sourceRoot":"","sources":["../../src/element/timing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual.d.ts","sourceRoot":"","sources":["../../src/element/virtual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAyBxC,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,qBACa,WAAW,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,WAAW;IACnD,2DAA2D;IAC3D,eAAe,SAAM;IACrB,6CAA6C;IAC7C,QAAQ,SAAK;IACb,+CAA+C;IAC/C,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC7D,sFAAsF;IACtF,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IAEtC,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAS;IAC1B,4FAA4F;IAC5F,WAAW,UAAQ;IACnB,sIAAsI;IACtI,UAAU,UAAQ;IAElB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;;IAMhC,iBAAiB,IAAI,IAAI;IA2BzB,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAa1B,sDAAsD;IACtD,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,IAAI;IAS5B,gCAAgC;IAChC,WAAW,IAAI,IAAI;IAKnB,mCAAmC;IACnC,OAAO,IAAI,IAAI;IAMf,IAAI,MAAM,IAAI,MAAM,CAEnB;IAID,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,QAAQ,CAgBd;IAEF,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,cAAc;IAetB,kEAAkE;IAClE,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,YAAY;IAgDpB,OAAO,CAAC,cAAc;CAcvB"}
@@ -25,7 +25,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
25
25
  };
26
26
  import { LoomElement } from "./element";
27
27
  import { component } from "./decorators";
28
- import { css } from "./css";
28
+ import { css } from "../css";
29
29
  const styles = css `
30
30
  :host {
31
31
  display: block;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual.js","sourceRoot":"","sources":["../../src/element/virtual.ts"],"names":[],"mappings":"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"}