@joist/element 4.2.3-next.5 → 4.2.3-next.6

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 (76) hide show
  1. package/package.json +2 -5
  2. package/src/lib/element.ts +13 -23
  3. package/src/lib/listen.test.ts +75 -0
  4. package/target/lib/element.js +12 -14
  5. package/target/lib/element.js.map +1 -1
  6. package/target/lib/listen.test.js +97 -0
  7. package/target/lib/listen.test.js.map +1 -1
  8. package/src/lib/templating/README.md +0 -406
  9. package/src/lib/templating/bind.ts +0 -40
  10. package/src/lib/templating/define.ts +0 -5
  11. package/src/lib/templating/elements/async.element.test.ts +0 -90
  12. package/src/lib/templating/elements/async.element.ts +0 -122
  13. package/src/lib/templating/elements/for.element.test.ts +0 -221
  14. package/src/lib/templating/elements/for.element.ts +0 -188
  15. package/src/lib/templating/elements/if.element.test.ts +0 -90
  16. package/src/lib/templating/elements/if.element.ts +0 -93
  17. package/src/lib/templating/elements/props.element.test.ts +0 -62
  18. package/src/lib/templating/elements/props.element.ts +0 -80
  19. package/src/lib/templating/elements/scope.ts +0 -45
  20. package/src/lib/templating/elements/value.element.test.ts +0 -20
  21. package/src/lib/templating/elements/value.element.ts +0 -41
  22. package/src/lib/templating/events.ts +0 -21
  23. package/src/lib/templating/token.test.ts +0 -74
  24. package/src/lib/templating/token.ts +0 -34
  25. package/src/lib/templating.ts +0 -2
  26. package/target/lib/templating/bind.d.ts +0 -1
  27. package/target/lib/templating/bind.js +0 -30
  28. package/target/lib/templating/bind.js.map +0 -1
  29. package/target/lib/templating/define.d.ts +0 -5
  30. package/target/lib/templating/define.js +0 -6
  31. package/target/lib/templating/define.js.map +0 -1
  32. package/target/lib/templating/elements/async.element.d.ts +0 -17
  33. package/target/lib/templating/elements/async.element.js +0 -115
  34. package/target/lib/templating/elements/async.element.js.map +0 -1
  35. package/target/lib/templating/elements/async.element.test.d.ts +0 -1
  36. package/target/lib/templating/elements/async.element.test.js +0 -75
  37. package/target/lib/templating/elements/async.element.test.js.map +0 -1
  38. package/target/lib/templating/elements/for.element.d.ts +0 -24
  39. package/target/lib/templating/elements/for.element.js +0 -189
  40. package/target/lib/templating/elements/for.element.js.map +0 -1
  41. package/target/lib/templating/elements/for.element.test.d.ts +0 -2
  42. package/target/lib/templating/elements/for.element.test.js +0 -153
  43. package/target/lib/templating/elements/for.element.test.js.map +0 -1
  44. package/target/lib/templating/elements/if.element.d.ts +0 -12
  45. package/target/lib/templating/elements/if.element.js +0 -85
  46. package/target/lib/templating/elements/if.element.js.map +0 -1
  47. package/target/lib/templating/elements/if.element.test.d.ts +0 -1
  48. package/target/lib/templating/elements/if.element.test.js +0 -78
  49. package/target/lib/templating/elements/if.element.test.js.map +0 -1
  50. package/target/lib/templating/elements/props.element.d.ts +0 -11
  51. package/target/lib/templating/elements/props.element.js +0 -92
  52. package/target/lib/templating/elements/props.element.js.map +0 -1
  53. package/target/lib/templating/elements/props.element.test.d.ts +0 -1
  54. package/target/lib/templating/elements/props.element.test.js +0 -53
  55. package/target/lib/templating/elements/props.element.test.js.map +0 -1
  56. package/target/lib/templating/elements/scope.d.ts +0 -13
  57. package/target/lib/templating/elements/scope.js +0 -59
  58. package/target/lib/templating/elements/scope.js.map +0 -1
  59. package/target/lib/templating/elements/value.element.d.ts +0 -9
  60. package/target/lib/templating/elements/value.element.js +0 -56
  61. package/target/lib/templating/elements/value.element.js.map +0 -1
  62. package/target/lib/templating/elements/value.element.test.d.ts +0 -1
  63. package/target/lib/templating/elements/value.element.test.js +0 -16
  64. package/target/lib/templating/elements/value.element.test.js.map +0 -1
  65. package/target/lib/templating/events.d.ts +0 -12
  66. package/target/lib/templating/events.js +0 -10
  67. package/target/lib/templating/events.js.map +0 -1
  68. package/target/lib/templating/token.d.ts +0 -8
  69. package/target/lib/templating/token.js +0 -27
  70. package/target/lib/templating/token.js.map +0 -1
  71. package/target/lib/templating/token.test.d.ts +0 -1
  72. package/target/lib/templating/token.test.js +0 -56
  73. package/target/lib/templating/token.test.js.map +0 -1
  74. package/target/lib/templating.d.ts +0 -2
  75. package/target/lib/templating.js +0 -3
  76. package/target/lib/templating.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/element",
3
- "version": "4.2.3-next.5",
3
+ "version": "4.2.3-next.6",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -14,7 +14,7 @@
14
14
  "target"
15
15
  ],
16
16
  "sideEffects": [
17
- "./target/lib/templating/define.js"
17
+ "**/define.js"
18
18
  ],
19
19
  "description": "Intelligently apply styles to WebComponents",
20
20
  "repository": {
@@ -51,9 +51,6 @@
51
51
  "output": [
52
52
  "target/**",
53
53
  "tsconfig.tsbuildinfo"
54
- ],
55
- "dependencies": [
56
- "../observable:build"
57
54
  ]
58
55
  },
59
56
  "test": {
@@ -47,11 +47,7 @@ export function element<T extends ElementConstructor>(opts?: ElementOpts) {
47
47
  }
48
48
  }
49
49
 
50
- attributeChangedCallback(
51
- name: string,
52
- oldValue: string,
53
- newValue: string,
54
- ) {
50
+ attributeChangedCallback(name: string, oldValue: string, newValue: string) {
55
51
  const attr = meta.attrs.get(name);
56
52
  const cbs = meta.attrChanges.get(name);
57
53
 
@@ -86,22 +82,19 @@ export function element<T extends ElementConstructor>(opts?: ElementOpts) {
86
82
  }
87
83
 
88
84
  connectedCallback() {
89
- if (this.#abortController) {
90
- this.#abortController.abort();
91
- this.#abortController = null;
92
- }
85
+ if (!this.#abortController) {
86
+ this.#abortController = new AbortController();
93
87
 
94
- this.#abortController = new AbortController();
88
+ for (const { event, cb, selector } of meta.listeners) {
89
+ const root = selector(this);
95
90
 
96
- for (const { event, cb, selector } of meta.listeners) {
97
- const root = selector(this);
98
-
99
- if (root) {
100
- root.addEventListener(event, cb.bind(this), {
101
- signal: this.#abortController.signal,
102
- });
103
- } else {
104
- throw new Error(`could not add listener to ${root}`);
91
+ if (root) {
92
+ root.addEventListener(event, cb.bind(this), {
93
+ signal: this.#abortController.signal,
94
+ });
95
+ } else {
96
+ throw new Error(`could not add listener to ${root}`);
97
+ }
105
98
  }
106
99
  }
107
100
 
@@ -129,10 +122,7 @@ export function element<T extends ElementConstructor>(opts?: ElementOpts) {
129
122
  };
130
123
  }
131
124
 
132
- function reflectAttributeValues<T extends HTMLElement>(
133
- el: T,
134
- attrs: AttrMetadata,
135
- ) {
125
+ function reflectAttributeValues<T extends HTMLElement>(el: T, attrs: AttrMetadata) {
136
126
  for (const [attrName, { getPropValue, reflect }] of attrs) {
137
127
  if (reflect) {
138
128
  const value = getPropValue.call(el);
@@ -102,3 +102,78 @@ describe("@listen()", () => {
102
102
  el.remove();
103
103
  });
104
104
  });
105
+
106
+ it("should remove event listeners during cleanup", () => {
107
+ let clickCount = 0;
108
+
109
+ @element({
110
+ tagName: "listener-cleanup",
111
+ shadowDom: [],
112
+ })
113
+ class MyElement extends HTMLElement {
114
+ @listen("click")
115
+ onClick1() {
116
+ clickCount++;
117
+ }
118
+
119
+ @listen("click")
120
+ onClick2() {
121
+ clickCount++;
122
+ }
123
+ }
124
+
125
+ const el = new MyElement();
126
+ document.body.append(el);
127
+
128
+ // First click should increment counter
129
+ el.shadowRoot?.dispatchEvent(new Event("click"));
130
+ assert.equal(clickCount, 2);
131
+
132
+ // Remove element which should cleanup listeners
133
+ el.remove();
134
+
135
+ // Second click after removal should not increment counter
136
+ el.shadowRoot?.dispatchEvent(new Event("click"));
137
+ assert.equal(clickCount, 2);
138
+ });
139
+
140
+ it("should not add event listeners multiple times when element is moved", () => {
141
+ let clickCount = 0;
142
+
143
+ @element({
144
+ tagName: "listener-move",
145
+ shadowDom: [],
146
+ })
147
+ class MyElement extends HTMLElement {
148
+ @listen("click")
149
+ onClick() {
150
+ clickCount++;
151
+ }
152
+ }
153
+
154
+ const el = new MyElement();
155
+ const container1 = document.createElement("div");
156
+ const container2 = document.createElement("div");
157
+
158
+ document.body.append(container1);
159
+ document.body.append(container2);
160
+
161
+ // Add to first container
162
+ container1.append(el);
163
+
164
+ // Click should increment once
165
+ el.shadowRoot?.dispatchEvent(new Event("click"));
166
+ assert.equal(clickCount, 1);
167
+
168
+ // Move to second container
169
+ container2.append(el);
170
+
171
+ // Click should still only increment once
172
+ el.shadowRoot?.dispatchEvent(new Event("click"));
173
+ assert.equal(clickCount, 2);
174
+
175
+ // Cleanup
176
+ el.remove();
177
+ container1.remove();
178
+ container2.remove();
179
+ });
@@ -56,20 +56,18 @@ export function element(opts) {
56
56
  }
57
57
  }
58
58
  connectedCallback() {
59
- if (this.#abortController) {
60
- this.#abortController.abort();
61
- this.#abortController = null;
62
- }
63
- this.#abortController = new AbortController();
64
- for (const { event, cb, selector } of meta.listeners) {
65
- const root = selector(this);
66
- if (root) {
67
- root.addEventListener(event, cb.bind(this), {
68
- signal: this.#abortController.signal,
69
- });
70
- }
71
- else {
72
- throw new Error(`could not add listener to ${root}`);
59
+ if (!this.#abortController) {
60
+ this.#abortController = new AbortController();
61
+ for (const { event, cb, selector } of meta.listeners) {
62
+ const root = selector(this);
63
+ if (root) {
64
+ root.addEventListener(event, cb.bind(this), {
65
+ signal: this.#abortController.signal,
66
+ });
67
+ }
68
+ else {
69
+ throw new Error(`could not add listener to ${root}`);
70
+ }
73
71
  }
74
72
  }
75
73
  reflectAttributeValues(this, meta.attrs);
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"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"}
@@ -164,4 +164,101 @@ describe("@listen()", () => {
164
164
  el.remove();
165
165
  });
166
166
  });
167
+ it("should remove event listeners during cleanup", () => {
168
+ let clickCount = 0;
169
+ let MyElement = (() => {
170
+ let _classDecorators = [element({
171
+ tagName: "listener-cleanup",
172
+ shadowDom: [],
173
+ })];
174
+ let _classDescriptor;
175
+ let _classExtraInitializers = [];
176
+ let _classThis;
177
+ let _classSuper = HTMLElement;
178
+ let _instanceExtraInitializers = [];
179
+ let _onClick1_decorators;
180
+ let _onClick2_decorators;
181
+ var MyElement = class extends _classSuper {
182
+ static { _classThis = this; }
183
+ static {
184
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
185
+ _onClick1_decorators = [listen("click")];
186
+ _onClick2_decorators = [listen("click")];
187
+ __esDecorate(this, null, _onClick1_decorators, { kind: "method", name: "onClick1", static: false, private: false, access: { has: obj => "onClick1" in obj, get: obj => obj.onClick1 }, metadata: _metadata }, null, _instanceExtraInitializers);
188
+ __esDecorate(this, null, _onClick2_decorators, { kind: "method", name: "onClick2", static: false, private: false, access: { has: obj => "onClick2" in obj, get: obj => obj.onClick2 }, metadata: _metadata }, null, _instanceExtraInitializers);
189
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
190
+ MyElement = _classThis = _classDescriptor.value;
191
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
192
+ __runInitializers(_classThis, _classExtraInitializers);
193
+ }
194
+ onClick1() {
195
+ clickCount++;
196
+ }
197
+ onClick2() {
198
+ clickCount++;
199
+ }
200
+ constructor() {
201
+ super(...arguments);
202
+ __runInitializers(this, _instanceExtraInitializers);
203
+ }
204
+ };
205
+ return MyElement = _classThis;
206
+ })();
207
+ const el = new MyElement();
208
+ document.body.append(el);
209
+ el.shadowRoot?.dispatchEvent(new Event("click"));
210
+ assert.equal(clickCount, 2);
211
+ el.remove();
212
+ el.shadowRoot?.dispatchEvent(new Event("click"));
213
+ assert.equal(clickCount, 2);
214
+ });
215
+ it("should not add event listeners multiple times when element is moved", () => {
216
+ let clickCount = 0;
217
+ let MyElement = (() => {
218
+ let _classDecorators = [element({
219
+ tagName: "listener-move",
220
+ shadowDom: [],
221
+ })];
222
+ let _classDescriptor;
223
+ let _classExtraInitializers = [];
224
+ let _classThis;
225
+ let _classSuper = HTMLElement;
226
+ let _instanceExtraInitializers = [];
227
+ let _onClick_decorators;
228
+ var MyElement = class extends _classSuper {
229
+ static { _classThis = this; }
230
+ static {
231
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
232
+ _onClick_decorators = [listen("click")];
233
+ __esDecorate(this, null, _onClick_decorators, { kind: "method", name: "onClick", static: false, private: false, access: { has: obj => "onClick" in obj, get: obj => obj.onClick }, metadata: _metadata }, null, _instanceExtraInitializers);
234
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
235
+ MyElement = _classThis = _classDescriptor.value;
236
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
237
+ __runInitializers(_classThis, _classExtraInitializers);
238
+ }
239
+ onClick() {
240
+ clickCount++;
241
+ }
242
+ constructor() {
243
+ super(...arguments);
244
+ __runInitializers(this, _instanceExtraInitializers);
245
+ }
246
+ };
247
+ return MyElement = _classThis;
248
+ })();
249
+ const el = new MyElement();
250
+ const container1 = document.createElement("div");
251
+ const container2 = document.createElement("div");
252
+ document.body.append(container1);
253
+ document.body.append(container2);
254
+ container1.append(el);
255
+ el.shadowRoot?.dispatchEvent(new Event("click"));
256
+ assert.equal(clickCount, 1);
257
+ container2.append(el);
258
+ el.shadowRoot?.dispatchEvent(new Event("click"));
259
+ assert.equal(clickCount, 2);
260
+ el.remove();
261
+ container1.remove();
262
+ container2.remove();
263
+ });
167
264
  //# sourceMappingURL=listen.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listen.test.js","sourceRoot":"","sources":["../../src/lib/listen.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listen.test.js","sourceRoot":"","sources":["../../src/lib/listen.test.ts"],"names":[],"mappings":"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"}