@joist/templating 4.2.4-next.8 → 4.2.4

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 (56) hide show
  1. package/LICENSE +2 -2
  2. package/package.json +1 -1
  3. package/src/lib/define.ts +26 -5
  4. package/src/lib/elements/async.element.test.ts +37 -1
  5. package/src/lib/elements/async.element.ts +12 -8
  6. package/src/lib/elements/bind.element.test.ts +60 -5
  7. package/src/lib/elements/bind.element.ts +30 -19
  8. package/src/lib/elements/for.element.test.ts +54 -9
  9. package/src/lib/elements/for.element.ts +91 -41
  10. package/src/lib/elements/if.element.test.ts +314 -260
  11. package/src/lib/elements/if.element.ts +40 -17
  12. package/src/lib/elements/scope.element.test.ts +1 -2
  13. package/src/lib/elements/scope.element.ts +0 -7
  14. package/src/lib/elements/value.element.test.ts +33 -1
  15. package/src/lib/elements/value.element.ts +13 -8
  16. package/src/lib/events.ts +1 -1
  17. package/target/lib/define.d.ts +16 -5
  18. package/target/lib/define.js +13 -5
  19. package/target/lib/define.js.map +1 -1
  20. package/target/lib/elements/async.element.d.ts +2 -6
  21. package/target/lib/elements/async.element.js +15 -3
  22. package/target/lib/elements/async.element.js.map +1 -1
  23. package/target/lib/elements/async.element.test.d.ts +1 -1
  24. package/target/lib/elements/async.element.test.js +30 -1
  25. package/target/lib/elements/async.element.test.js.map +1 -1
  26. package/target/lib/elements/bind.element.d.ts +2 -6
  27. package/target/lib/elements/bind.element.js +34 -16
  28. package/target/lib/elements/bind.element.js.map +1 -1
  29. package/target/lib/elements/bind.element.test.d.ts +1 -1
  30. package/target/lib/elements/bind.element.test.js +50 -5
  31. package/target/lib/elements/bind.element.test.js.map +1 -1
  32. package/target/lib/elements/for.element.d.ts +3 -12
  33. package/target/lib/elements/for.element.js +84 -57
  34. package/target/lib/elements/for.element.js.map +1 -1
  35. package/target/lib/elements/for.element.test.d.ts +1 -2
  36. package/target/lib/elements/for.element.test.js +41 -5
  37. package/target/lib/elements/for.element.test.js.map +1 -1
  38. package/target/lib/elements/if.element.d.ts +3 -6
  39. package/target/lib/elements/if.element.js +42 -10
  40. package/target/lib/elements/if.element.js.map +1 -1
  41. package/target/lib/elements/if.element.test.d.ts +1 -1
  42. package/target/lib/elements/if.element.test.js +273 -1
  43. package/target/lib/elements/if.element.test.js.map +1 -1
  44. package/target/lib/elements/scope.element.d.ts +0 -5
  45. package/target/lib/elements/scope.element.js +0 -1
  46. package/target/lib/elements/scope.element.js.map +1 -1
  47. package/target/lib/elements/scope.element.test.d.ts +1 -2
  48. package/target/lib/elements/scope.element.test.js +1 -2
  49. package/target/lib/elements/scope.element.test.js.map +1 -1
  50. package/target/lib/elements/value.element.d.ts +2 -6
  51. package/target/lib/elements/value.element.js +15 -3
  52. package/target/lib/elements/value.element.js.map +1 -1
  53. package/target/lib/elements/value.element.test.d.ts +1 -1
  54. package/target/lib/elements/value.element.test.js +26 -1
  55. package/target/lib/elements/value.element.test.js.map +1 -1
  56. package/target/lib/events.d.ts +1 -1
@@ -1,6 +1,234 @@
1
- import "./if.element.js";
1
+ import "../define.js";
2
2
  import { fixtureSync, html } from "@open-wc/testing";
3
3
  import { assert } from "chai";
4
+ it("should render content when the bind value is truthy", () => {
5
+ const element = fixtureSync(html `
6
+ <div
7
+ @joist::value=${(e) => {
8
+ e.update({ oldValue: null, newValue: true });
9
+ }}
10
+ >
11
+ <j-if bind="test">
12
+ <template>Visible Content</template>
13
+ </j-if>
14
+ </div>
15
+ `);
16
+ assert.equal(element.textContent?.trim(), "Visible Content");
17
+ });
18
+ it("should not render content when the bind value is falsy", () => {
19
+ const element = fixtureSync(html `
20
+ <div
21
+ @joist::value=${(e) => {
22
+ e.update({ oldValue: null, newValue: true });
23
+ e.update({ oldValue: null, newValue: false });
24
+ }}
25
+ >
26
+ <j-if bind="test">
27
+ <template>Visible Content</template>
28
+ </j-if>
29
+ </div>
30
+ `);
31
+ assert.equal(element.textContent?.trim(), "");
32
+ });
33
+ it("should handle negated tokens correctly", () => {
34
+ const element = fixtureSync(html `
35
+ <div
36
+ @joist::value=${(e) => {
37
+ e.update({ oldValue: null, newValue: false });
38
+ }}
39
+ >
40
+ <j-if bind="!test">
41
+ <template>Visible Content</template>
42
+ </j-if>
43
+ </div>
44
+ `);
45
+ assert.equal(element.textContent?.trim(), "Visible Content");
46
+ });
47
+ it("should render else template when condition is falsy", () => {
48
+ const element = fixtureSync(html `
49
+ <div
50
+ @joist::value=${(e) => {
51
+ e.update({ oldValue: null, newValue: false });
52
+ }}
53
+ >
54
+ <j-if bind="test">
55
+ <template>If Content</template>
56
+ <template else>Else Content</template>
57
+ </j-if>
58
+ </div>
59
+ `);
60
+ assert.equal(element.textContent?.trim(), "Else Content");
61
+ });
62
+ it("should switch between if and else templates", () => {
63
+ const element = fixtureSync(html `
64
+ <div
65
+ @joist::value=${(e) => {
66
+ e.update({ oldValue: null, newValue: false });
67
+ e.update({ oldValue: false, newValue: true });
68
+ }}
69
+ >
70
+ <j-if bind="test">
71
+ <template>If Content</template>
72
+ <template else>Else Content</template>
73
+ </j-if>
74
+ </div>
75
+ `);
76
+ assert.equal(element.textContent?.trim(), "If Content");
77
+ });
78
+ it("should handle equality comparison", () => {
79
+ const element = fixtureSync(html `
80
+ <div
81
+ @joist::value=${(e) => {
82
+ e.update({ oldValue: null, newValue: { status: "active" } });
83
+ }}
84
+ >
85
+ <j-if bind="example.status == active">
86
+ <template>Status is Active</template>
87
+ </j-if>
88
+ </div>
89
+ `);
90
+ assert.equal(element.textContent?.trim(), "Status is Active");
91
+ });
92
+ it("should handle greater than comparison", () => {
93
+ const element = fixtureSync(html `
94
+ <div
95
+ @joist::value=${(e) => {
96
+ e.update({ oldValue: null, newValue: { count: 10 } });
97
+ }}
98
+ >
99
+ <j-if bind="example.count > 5">
100
+ <template>Count is Greater Than 5</template>
101
+ </j-if>
102
+ </div>
103
+ `);
104
+ assert.equal(element.textContent?.trim(), "Count is Greater Than 5");
105
+ });
106
+ it("should handle less than comparison", () => {
107
+ const element = fixtureSync(html `
108
+ <div
109
+ @joist::value=${(e) => {
110
+ e.update({ oldValue: null, newValue: { score: 75 } });
111
+ }}
112
+ >
113
+ <j-if bind="example.score < 100">
114
+ <template>Score is Less Than 100</template>
115
+ </j-if>
116
+ </div>
117
+ `);
118
+ assert.equal(element.textContent?.trim(), "Score is Less Than 100");
119
+ });
120
+ it("should handle nested path comparisons", () => {
121
+ const element = fixtureSync(html `
122
+ <div
123
+ @joist::value=${(e) => {
124
+ e.update({ oldValue: null, newValue: { user: { score: 150 } } });
125
+ }}
126
+ >
127
+ <j-if bind="example.user.score > 100">
128
+ <template>User Score is Above 100</template>
129
+ </j-if>
130
+ </div>
131
+ `);
132
+ assert.equal(element.textContent?.trim(), "User Score is Above 100");
133
+ });
134
+ it("should handle negated comparisons", () => {
135
+ const element = fixtureSync(html `
136
+ <div
137
+ @joist::value=${(e) => {
138
+ e.update({ oldValue: null, newValue: { status: "inactive" } });
139
+ }}
140
+ >
141
+ <j-if bind="!example.status == active">
142
+ <template>Status is Not Active</template>
143
+ </j-if>
144
+ </div>
145
+ `);
146
+ assert.equal(element.textContent?.trim(), "Status is Not Active");
147
+ });
148
+ it("should handle string number comparisons", () => {
149
+ const element = fixtureSync(html `
150
+ <div
151
+ @joist::value=${(e) => {
152
+ e.update({ oldValue: null, newValue: { count: "10" } });
153
+ }}
154
+ >
155
+ <j-if bind="example.count > 5">
156
+ <template>String Count is Greater Than 5</template>
157
+ </j-if>
158
+ </div>
159
+ `);
160
+ assert.equal(element.textContent?.trim(), "String Count is Greater Than 5");
161
+ });
162
+ it("should handle undefined values in comparisons", () => {
163
+ const element = fixtureSync(html `
164
+ <div
165
+ @joist::value=${(e) => {
166
+ e.update({ oldValue: null, newValue: { count: undefined } });
167
+ }}
168
+ >
169
+ <j-if bind="example.count > 5">
170
+ <template>Count is Greater Than 5</template>
171
+ </j-if>
172
+ </div>
173
+ `);
174
+ assert.equal(element.textContent?.trim(), "");
175
+ });
176
+ it("should handle not equal comparison", () => {
177
+ const element = fixtureSync(html `
178
+ <div
179
+ @joist::value=${(e) => {
180
+ e.update({ oldValue: null, newValue: { status: "inactive" } });
181
+ }}
182
+ >
183
+ <j-if bind="example.status != active">
184
+ <template>Status is Not Active</template>
185
+ </j-if>
186
+ </div>
187
+ `);
188
+ assert.equal(element.textContent?.trim(), "Status is Not Active");
189
+ });
190
+ it("should handle not equal comparison with matching value", () => {
191
+ const element = fixtureSync(html `
192
+ <div
193
+ @joist::value=${(e) => {
194
+ e.update({ oldValue: null, newValue: { status: "active" } });
195
+ }}
196
+ >
197
+ <j-if bind="example.status != active">
198
+ <template>Status is Not Active</template>
199
+ </j-if>
200
+ </div>
201
+ `);
202
+ assert.equal(element.textContent?.trim(), "");
203
+ });
204
+ it("should handle not equal comparison with string numbers", () => {
205
+ const element = fixtureSync(html `
206
+ <div
207
+ @joist::value=${(e) => {
208
+ e.update({ oldValue: null, newValue: { count: "10" } });
209
+ }}
210
+ >
211
+ <j-if bind="example.count != 5">
212
+ <template>Count is Not 5</template>
213
+ </j-if>
214
+ </div>
215
+ `);
216
+ assert.equal(element.textContent?.trim(), "Count is Not 5");
217
+ });
218
+ it("should handle not equal comparison with undefined", () => {
219
+ const element = fixtureSync(html `
220
+ <div
221
+ @joist::value=${(e) => {
222
+ e.update({ oldValue: null, newValue: { status: undefined } });
223
+ }}
224
+ >
225
+ <j-if bind="example.status != active">
226
+ <template>Status is Not Active</template>
227
+ </j-if>
228
+ </div>
229
+ `);
230
+ assert.equal(element.textContent?.trim(), "Status is Not Active");
231
+ });
4
232
  it("should handle array length", () => {
5
233
  const element = fixtureSync(html `
6
234
  <div
@@ -31,4 +259,48 @@ it("should handle a first change even if the value is the same", () => {
31
259
  `);
32
260
  assert.equal(element.textContent?.trim(), "Array has no length");
33
261
  });
262
+ it("should render in target container", () => {
263
+ const element = fixtureSync(html `
264
+ <div
265
+ @joist::value=${(e) => {
266
+ e.update({ oldValue: null, newValue: true });
267
+ }}
268
+ >
269
+ <j-if bind="test" target="#container">
270
+ <template>Visible Content</template>
271
+ </j-if>
272
+
273
+ <div id="container"></div>
274
+ </div>
275
+ `);
276
+ const container = element.querySelector("#container");
277
+ assert.equal(container?.textContent?.trim(), "Visible Content");
278
+ });
279
+ it("should wait for depends-on before dispatching events", async () => {
280
+ let eventDispatched = false;
281
+ customElements.define("dependency-1", class extends HTMLElement {
282
+ });
283
+ customElements.define("dependency-2", class extends HTMLElement {
284
+ });
285
+ fixtureSync(html `
286
+ <div
287
+ @joist::value=${(e) => {
288
+ if (e.expression.bindTo === "test") {
289
+ eventDispatched = true;
290
+ e.update({ oldValue: null, newValue: true });
291
+ }
292
+ }}
293
+ >
294
+ <j-if bind="test" depends-on="dependency-1,dependency-2">
295
+ <template>Visible Content</template>
296
+ </j-if>
297
+ </div>
298
+ `);
299
+ assert.isFalse(eventDispatched);
300
+ await Promise.all([
301
+ customElements.whenDefined("dependency-1"),
302
+ customElements.whenDefined("dependency-2"),
303
+ ]);
304
+ assert.isTrue(eventDispatched);
305
+ });
34
306
  //# sourceMappingURL=if.element.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"if.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAwQ9B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;IACpC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;;;;;;;GAOJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;IACpE,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAClE,CAAC;;;;;;;GAOJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"if.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/if.element.test.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,3 @@
1
- declare global {
2
- interface HTMLElementTagNameMap {
3
- "j-scope": JoistScopeElement;
4
- }
5
- }
6
1
  export declare class JoistScopeElement extends HTMLElement {
7
2
  accessor scope: any;
8
3
  }
@@ -3,7 +3,6 @@ import { element, css, html } from "@joist/element";
3
3
  import { bind } from "../bind.js";
4
4
  let JoistScopeElement = (() => {
5
5
  let _classDecorators = [element({
6
- tagName: "j-scope",
7
6
  shadowDom: [css `:host{display: contents;}`, html `<slot></slot>`],
8
7
  })];
9
8
  let _classDescriptor;
@@ -1 +1 @@
1
- {"version":3,"file":"scope.element.js","sourceRoot":"","sources":["../../../src/lib/elements/scope.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;IAarB,iBAAiB;4BAL7B,OAAO,CAAC;YACP,OAAO,EAAE,SAAS;YAElB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;iCAC/C,IAAI,EAAE;YACP,oKAAS,KAAK,6BAAL,KAAK,qFAAa;YAF7B,6KAGC;;;YAHY,uDAAiB;;QAE5B,uEAAsB,IAAI,EAAC;QAA3B,IAAS,KAAK,2CAAa;QAA3B,IAAS,KAAK,iDAAa;;;;;;;;SAFhB,iBAAiB"}
1
+ {"version":3,"file":"scope.element.js","sourceRoot":"","sources":["../../../src/lib/elements/scope.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;IAMrB,iBAAiB;4BAJ7B,OAAO,CAAC;YAEP,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;iCAC/C,IAAI,EAAE;YACP,oKAAS,KAAK,6BAAL,KAAK,qFAAa;YAF7B,6KAGC;;;YAHY,uDAAiB;;QAE5B,uEAAsB,IAAI,EAAC;QAA3B,IAAS,KAAK,2CAAa;QAA3B,IAAS,KAAK,iDAAa;;;;;;;;SAFhB,iBAAiB"}
@@ -1,2 +1 @@
1
- import "./scope.element.js";
2
- import "./value.element.js";
1
+ import "../define.js";
@@ -1,5 +1,4 @@
1
- import "./scope.element.js";
2
- import "./value.element.js";
1
+ import "../define.js";
3
2
  import { fixtureSync, html } from "@open-wc/testing";
4
3
  import { assert } from "chai";
5
4
  describe("j-scope", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"scope.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/scope.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,WAAW,CAAoB,IAAI,CAAA;;;;KAIlD,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,OAAO,GAAG,WAAW,CAAoB,IAAI,CAAA;;;;KAIlD,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAE/B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"scope.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/scope.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,WAAW,CAAoB,IAAI,CAAA;;;;KAIlD,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,OAAO,GAAG,WAAW,CAAoB,IAAI,CAAA;;;;KAIlD,CAAC,CAAC;QAEH,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAE/B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAExB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,9 +1,5 @@
1
- declare global {
2
- interface HTMLElementTagNameMap {
3
- "j-val": JoistValueElement;
4
- }
5
- }
6
1
  export declare class JoistValueElement extends HTMLElement {
7
2
  accessor bind: string;
8
- connectedCallback(): void;
3
+ accessor dependsOn: string;
4
+ connectedCallback(): Promise<void>;
9
5
  }
@@ -4,7 +4,6 @@ import { JoistValueEvent } from "../events.js";
4
4
  import { JExpression } from "../expression.js";
5
5
  let JoistValueElement = (() => {
6
6
  let _classDecorators = [element({
7
- tagName: "j-val",
8
7
  shadowDom: [css `:host{display: contents;}`, html `<slot></slot>`],
9
8
  })];
10
9
  let _classDescriptor;
@@ -14,12 +13,19 @@ let JoistValueElement = (() => {
14
13
  let _bind_decorators;
15
14
  let _bind_initializers = [];
16
15
  let _bind_extraInitializers = [];
16
+ let _dependsOn_decorators;
17
+ let _dependsOn_initializers = [];
18
+ let _dependsOn_extraInitializers = [];
17
19
  var JoistValueElement = class extends _classSuper {
18
20
  static { _classThis = this; }
19
21
  static {
20
22
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
21
23
  _bind_decorators = [attr()];
24
+ _dependsOn_decorators = [attr({
25
+ name: "depends-on",
26
+ })];
22
27
  __esDecorate(this, null, _bind_decorators, { kind: "accessor", name: "bind", static: false, private: false, access: { has: obj => "bind" in obj, get: obj => obj.bind, set: (obj, value) => { obj.bind = value; } }, metadata: _metadata }, _bind_initializers, _bind_extraInitializers);
28
+ __esDecorate(this, null, _dependsOn_decorators, { kind: "accessor", name: "dependsOn", static: false, private: false, access: { has: obj => "dependsOn" in obj, get: obj => obj.dependsOn, set: (obj, value) => { obj.dependsOn = value; } }, metadata: _metadata }, _dependsOn_initializers, _dependsOn_extraInitializers);
23
29
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
24
30
  JoistValueElement = _classThis = _classDescriptor.value;
25
31
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -28,8 +34,14 @@ let JoistValueElement = (() => {
28
34
  #bind_accessor_storage = __runInitializers(this, _bind_initializers, "");
29
35
  get bind() { return this.#bind_accessor_storage; }
30
36
  set bind(value) { this.#bind_accessor_storage = value; }
31
- connectedCallback() {
37
+ #dependsOn_accessor_storage = (__runInitializers(this, _bind_extraInitializers), __runInitializers(this, _dependsOn_initializers, ""));
38
+ get dependsOn() { return this.#dependsOn_accessor_storage; }
39
+ set dependsOn(value) { this.#dependsOn_accessor_storage = value; }
40
+ async connectedCallback() {
32
41
  const token = new JExpression(this.bind);
42
+ if (this.dependsOn) {
43
+ await Promise.all(this.dependsOn.split(",").map((tag) => window.customElements.whenDefined(tag)));
44
+ }
33
45
  this.dispatchEvent(new JoistValueEvent(token, (value) => {
34
46
  const valueToWrite = token.evaluate(value.newValue);
35
47
  if (valueToWrite !== null &&
@@ -41,7 +53,7 @@ let JoistValueElement = (() => {
41
53
  }
42
54
  constructor() {
43
55
  super(...arguments);
44
- __runInitializers(this, _bind_extraInitializers);
56
+ __runInitializers(this, _dependsOn_extraInitializers);
45
57
  }
46
58
  };
47
59
  return JoistValueElement = _classThis;
@@ -1 +1 @@
1
- {"version":3,"file":"value.element.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;IAalC,iBAAiB;4BAL7B,OAAO,CAAC;YACP,OAAO,EAAE,OAAO;YAEhB,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;iCAAnB,SAAQ,WAAW;;;;gCAC/C,IAAI,EAAE;YACP,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAFrB,6KAqBC;;;YArBY,uDAAiB;;QAE5B,qEAAgB,EAAE,EAAC;QAAnB,IAAS,IAAI,0CAAM;QAAnB,IAAS,IAAI,gDAAM;QAEnB,iBAAiB;YACf,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,CAAC,aAAa,CAChB,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEpD,IACE,YAAY,KAAK,IAAI;oBACrB,YAAY,KAAK,SAAS;oBAC1B,IAAI,CAAC,WAAW,KAAK,YAAY,EACjC,CAAC;oBACD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;;;;;;;;SApBU,iBAAiB"}
1
+ {"version":3,"file":"value.element.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;IAMlC,iBAAiB;4BAJ7B,OAAO,CAAC;YAEP,SAAS,EAAE,CAAC,GAAG,CAAA,2BAA2B,EAAE,IAAI,CAAA,eAAe,CAAC;SACjE,CAAC;;;;sBACqC,WAAW;;;;;;;iCAAnB,SAAQ,WAAW;;;;gCAC/C,IAAI,EAAE;qCAGN,IAAI,CAAC;oBACJ,IAAI,EAAE,YAAY;iBACnB,CAAC;YAJF,iKAAS,IAAI,6BAAJ,IAAI,mFAAM;YAKnB,gLAAS,SAAS,6BAAT,SAAS,6FAAM;YAP1B,6KAgCC;;;YAhCY,uDAAiB;;QAE5B,qEAAgB,EAAE,EAAC;QAAnB,IAAS,IAAI,0CAAM;QAAnB,IAAS,IAAI,gDAAM;QAKnB,kIAAqB,EAAE,GAAC;QAAxB,IAAS,SAAS,+CAAM;QAAxB,IAAS,SAAS,qDAAM;QAExB,KAAK,CAAC,iBAAiB;YACrB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAC/E,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,aAAa,CAChB,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEpD,IACE,YAAY,KAAK,IAAI;oBACrB,YAAY,KAAK,SAAS;oBAC1B,IAAI,CAAC,WAAW,KAAK,YAAY,EACjC,CAAC;oBACD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;;;;;;;;SA/BU,iBAAiB"}
@@ -1 +1 @@
1
- import "./value.element.js";
1
+ import "../define.js";
@@ -1,4 +1,4 @@
1
- import "./value.element.js";
1
+ import "../define.js";
2
2
  import { fixtureSync, html } from "@open-wc/testing";
3
3
  import { assert } from "chai";
4
4
  it("should render content when the bind value is truthy", () => {
@@ -37,4 +37,29 @@ it("should not write undefined values to textContent", () => {
37
37
  `);
38
38
  assert.equal(element.textContent?.trim(), "Hello World");
39
39
  });
40
+ it("should wait for depends-on before dispatching events", async () => {
41
+ let eventDispatched = false;
42
+ customElements.define("dependency-1", class extends HTMLElement {
43
+ });
44
+ customElements.define("dependency-2", class extends HTMLElement {
45
+ });
46
+ fixtureSync(html `
47
+ <div
48
+ @joist::value=${(e) => {
49
+ if (e.expression.bindTo === "test") {
50
+ eventDispatched = true;
51
+ e.update({ oldValue: null, newValue: "Hello World" });
52
+ }
53
+ }}
54
+ >
55
+ <j-val bind="test" depends-on="dependency-1,dependency-2"></j-val>
56
+ </div>
57
+ `);
58
+ assert.isFalse(eventDispatched);
59
+ await Promise.all([
60
+ customElements.whenDefined("dependency-1"),
61
+ customElements.whenDefined("dependency-2"),
62
+ ]);
63
+ assert.isTrue(eventDispatched);
64
+ });
40
65
  //# sourceMappingURL=value.element.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"value.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"value.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/value.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAI9B,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC7D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC1D,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAA;;sBAEZ,CAAC,CAAkB,EAAE,EAAE;QACrC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;IACvD,CAAC;;;;GAIJ,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACpE,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,KAAM,SAAQ,WAAW;KAAG,CAAC,CAAC;IACpE,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,KAAM,SAAQ,WAAW;KAAG,CAAC,CAAC;IAEpE,WAAW,CAAC,IAAI,CAAA;;sBAEI,CAAC,CAAkB,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACnC,eAAe,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;;;;GAIJ,CAAC,CAAC;IAGH,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAGhC,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC;QAC1C,cAAc,CAAC,WAAW,CAAC,cAAc,CAAC;KAC3C,CAAC,CAAC;IAGH,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { Change } from "@joist/observable";
2
2
  import type { JExpression } from "./expression.js";
3
3
  declare global {
4
- interface HTMLElementEventMap {
4
+ interface ElementEventMap {
5
5
  "joist::value": JoistValueEvent;
6
6
  }
7
7
  }