@joist/templating 4.7.0 → 4.8.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 (77) hide show
  1. package/package.json +1 -1
  2. package/target/lib/bind.d.ts +10 -0
  3. package/target/lib/bind.d.ts.map +1 -0
  4. package/target/lib/bind.js +50 -0
  5. package/target/lib/bind.js.map +1 -0
  6. package/target/lib/bind.test.d.ts +2 -0
  7. package/target/lib/bind.test.d.ts.map +1 -0
  8. package/target/lib/bind.test.js +110 -0
  9. package/target/lib/bind.test.js.map +1 -0
  10. package/target/lib/define.d.ts +17 -0
  11. package/target/lib/define.d.ts.map +1 -0
  12. package/target/lib/define.js +14 -0
  13. package/target/lib/define.js.map +1 -0
  14. package/target/lib/elements/async.element.d.ts +14 -0
  15. package/target/lib/elements/async.element.d.ts.map +1 -0
  16. package/target/lib/elements/async.element.js +168 -0
  17. package/target/lib/elements/async.element.js.map +1 -0
  18. package/target/lib/elements/async.element.test.d.ts +2 -0
  19. package/target/lib/elements/async.element.test.d.ts.map +1 -0
  20. package/target/lib/elements/async.element.test.js +191 -0
  21. package/target/lib/elements/async.element.test.js.map +1 -0
  22. package/target/lib/elements/bind.element.d.ts +14 -0
  23. package/target/lib/elements/bind.element.d.ts.map +1 -0
  24. package/target/lib/elements/bind.element.js +180 -0
  25. package/target/lib/elements/bind.element.js.map +1 -0
  26. package/target/lib/elements/bind.element.test.d.ts +2 -0
  27. package/target/lib/elements/bind.element.test.d.ts.map +1 -0
  28. package/target/lib/elements/bind.element.test.js +153 -0
  29. package/target/lib/elements/bind.element.test.js.map +1 -0
  30. package/target/lib/elements/for.element.d.ts +16 -0
  31. package/target/lib/elements/for.element.d.ts.map +1 -0
  32. package/target/lib/elements/for.element.js +259 -0
  33. package/target/lib/elements/for.element.js.map +1 -0
  34. package/target/lib/elements/for.element.test.d.ts +2 -0
  35. package/target/lib/elements/for.element.test.d.ts.map +1 -0
  36. package/target/lib/elements/for.element.test.js +232 -0
  37. package/target/lib/elements/for.element.test.js.map +1 -0
  38. package/target/lib/elements/if.element.d.ts +10 -0
  39. package/target/lib/elements/if.element.d.ts.map +1 -0
  40. package/target/lib/elements/if.element.js +145 -0
  41. package/target/lib/elements/if.element.js.map +1 -0
  42. package/target/lib/elements/if.element.test.d.ts +2 -0
  43. package/target/lib/elements/if.element.test.d.ts.map +1 -0
  44. package/target/lib/elements/if.element.test.js +309 -0
  45. package/target/lib/elements/if.element.test.js.map +1 -0
  46. package/target/lib/elements/scope.element.d.ts +4 -0
  47. package/target/lib/elements/scope.element.d.ts.map +1 -0
  48. package/target/lib/elements/scope.element.js +71 -0
  49. package/target/lib/elements/scope.element.js.map +1 -0
  50. package/target/lib/elements/scope.element.test.d.ts +2 -0
  51. package/target/lib/elements/scope.element.test.d.ts.map +1 -0
  52. package/target/lib/elements/scope.element.test.js +25 -0
  53. package/target/lib/elements/scope.element.test.js.map +1 -0
  54. package/target/lib/elements/value.element.d.ts +6 -0
  55. package/target/lib/elements/value.element.d.ts.map +1 -0
  56. package/target/lib/elements/value.element.js +96 -0
  57. package/target/lib/elements/value.element.js.map +1 -0
  58. package/target/lib/elements/value.element.test.d.ts +2 -0
  59. package/target/lib/elements/value.element.test.d.ts.map +1 -0
  60. package/target/lib/elements/value.element.test.js +68 -0
  61. package/target/lib/elements/value.element.test.js.map +1 -0
  62. package/target/lib/events.d.ts +17 -0
  63. package/target/lib/events.d.ts.map +1 -0
  64. package/target/lib/events.js +10 -0
  65. package/target/lib/events.js.map +1 -0
  66. package/target/lib/expression.d.ts +65 -0
  67. package/target/lib/expression.d.ts.map +1 -0
  68. package/target/lib/expression.js +153 -0
  69. package/target/lib/expression.js.map +1 -0
  70. package/target/lib/expression.test.d.ts +2 -0
  71. package/target/lib/expression.test.d.ts.map +1 -0
  72. package/target/lib/expression.test.js +171 -0
  73. package/target/lib/expression.test.js.map +1 -0
  74. package/target/lib.d.ts +3 -0
  75. package/target/lib.d.ts.map +1 -0
  76. package/target/lib.js +3 -0
  77. package/target/lib.js.map +1 -0
@@ -0,0 +1,259 @@
1
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
2
+ var useValue = arguments.length > 2;
3
+ for (var i = 0; i < initializers.length; i++) {
4
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
5
+ }
6
+ return useValue ? value : void 0;
7
+ };
8
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
9
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
10
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
11
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
12
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
13
+ var _, done = false;
14
+ for (var i = decorators.length - 1; i >= 0; i--) {
15
+ var context = {};
16
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
17
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
18
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
19
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
20
+ if (kind === "accessor") {
21
+ if (result === void 0) continue;
22
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
23
+ if (_ = accept(result.get)) descriptor.get = _;
24
+ if (_ = accept(result.set)) descriptor.set = _;
25
+ if (_ = accept(result.init)) initializers.unshift(_);
26
+ }
27
+ else if (_ = accept(result)) {
28
+ if (kind === "field") initializers.unshift(_);
29
+ else descriptor[key] = _;
30
+ }
31
+ }
32
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
33
+ done = true;
34
+ };
35
+ import { attr, element, query, css, html } from "@joist/element";
36
+ import { effect, observe } from "@joist/observable";
37
+ import { JoistValueEvent } from "../events.js";
38
+ import { JExpression } from "../expression.js";
39
+ let JoistForScopeContainer = (() => {
40
+ let _instanceExtraInitializers = [];
41
+ let _each_decorators;
42
+ let _each_initializers = [];
43
+ let _each_extraInitializers = [];
44
+ let _onChange_decorators;
45
+ return class JoistForScopeContainer {
46
+ static {
47
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
48
+ _each_decorators = [observe()];
49
+ _onChange_decorators = [effect()];
50
+ __esDecorate(this, null, _each_decorators, { kind: "accessor", name: "each", static: false, private: false, access: { has: obj => "each" in obj, get: obj => obj.each, set: (obj, value) => { obj.each = value; } }, metadata: _metadata }, _each_initializers, _each_extraInitializers);
51
+ __esDecorate(this, null, _onChange_decorators, { kind: "method", name: "onChange", static: false, private: false, access: { has: obj => "onChange" in obj, get: obj => obj.onChange }, metadata: _metadata }, null, _instanceExtraInitializers);
52
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
53
+ }
54
+ host = __runInitializers(this, _instanceExtraInitializers);
55
+ get key() {
56
+ return this.host.getAttribute("key");
57
+ }
58
+ #callbacks = [];
59
+ #each_accessor_storage = __runInitializers(this, _each_initializers, {
60
+ value: null,
61
+ index: null,
62
+ position: null,
63
+ });
64
+ get each() { return this.#each_accessor_storage; }
65
+ set each(value) { this.#each_accessor_storage = value; }
66
+ constructor(host) {
67
+ __runInitializers(this, _each_extraInitializers);
68
+ if (host == null) {
69
+ throw new Error("JForScope required a host element");
70
+ }
71
+ this.host = host;
72
+ this.host.addEventListener("joist::value", (e) => {
73
+ if (e.expression.bindTo === "each") {
74
+ e.stopPropagation();
75
+ this.#callbacks.push(e.update);
76
+ e.update({
77
+ oldValue: null,
78
+ newValue: this.each,
79
+ firstChange: true,
80
+ });
81
+ }
82
+ });
83
+ }
84
+ onChange(changes) {
85
+ const change = changes.get("each");
86
+ for (let cb of this.#callbacks) {
87
+ cb({
88
+ oldValue: change.oldValue,
89
+ newValue: change.newValue,
90
+ firstChange: false,
91
+ });
92
+ }
93
+ }
94
+ };
95
+ })();
96
+ let JoistForElement = (() => {
97
+ let _classDecorators = [element({
98
+ // prettier-ignore
99
+ shadowDom: [css `:host{display:contents;}`, html `<slot></slot>`],
100
+ })];
101
+ let _classDescriptor;
102
+ let _classExtraInitializers = [];
103
+ let _classThis;
104
+ let _classSuper = HTMLElement;
105
+ let _bind_decorators;
106
+ let _bind_initializers = [];
107
+ let _bind_extraInitializers = [];
108
+ let _key_decorators;
109
+ let _key_initializers = [];
110
+ let _key_extraInitializers = [];
111
+ let _dependsOn_decorators;
112
+ let _dependsOn_initializers = [];
113
+ let _dependsOn_extraInitializers = [];
114
+ var JoistForElement = class extends _classSuper {
115
+ static { _classThis = this; }
116
+ static {
117
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
118
+ _bind_decorators = [attr()];
119
+ _key_decorators = [attr()];
120
+ _dependsOn_decorators = [attr({
121
+ name: "depends-on",
122
+ })];
123
+ __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);
124
+ __esDecorate(this, null, _key_decorators, { kind: "accessor", name: "key", static: false, private: false, access: { has: obj => "key" in obj, get: obj => obj.key, set: (obj, value) => { obj.key = value; } }, metadata: _metadata }, _key_initializers, _key_extraInitializers);
125
+ __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);
126
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
127
+ JoistForElement = _classThis = _classDescriptor.value;
128
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
129
+ __runInitializers(_classThis, _classExtraInitializers);
130
+ }
131
+ #bind_accessor_storage = __runInitializers(this, _bind_initializers, "");
132
+ get bind() { return this.#bind_accessor_storage; }
133
+ set bind(value) { this.#bind_accessor_storage = value; }
134
+ #key_accessor_storage = (__runInitializers(this, _bind_extraInitializers), __runInitializers(this, _key_initializers, ""));
135
+ get key() { return this.#key_accessor_storage; }
136
+ set key(value) { this.#key_accessor_storage = value; }
137
+ #dependsOn_accessor_storage = (__runInitializers(this, _key_extraInitializers), __runInitializers(this, _dependsOn_initializers, ""));
138
+ get dependsOn() { return this.#dependsOn_accessor_storage; }
139
+ set dependsOn(value) { this.#dependsOn_accessor_storage = value; }
140
+ #template = (__runInitializers(this, _dependsOn_extraInitializers), query("template", this));
141
+ #items = [];
142
+ #scopes = new Map();
143
+ async connectedCallback() {
144
+ const template = this.#template();
145
+ if (this.firstElementChild !== template) {
146
+ throw new Error("The first Node in j-for needs to be a template");
147
+ }
148
+ // collect all scopes from the template to be matched against later
149
+ let currentScope = template.nextElementSibling;
150
+ while (currentScope instanceof JoistForScopeContainer) {
151
+ this.#scopes.set(String(currentScope.key), currentScope);
152
+ currentScope = currentScope.nextElementSibling;
153
+ }
154
+ if (this.dependsOn) {
155
+ await Promise.all(this.dependsOn.split(",").map((tag) => window.customElements.whenDefined(tag)));
156
+ }
157
+ const token = new JExpression(this.bind);
158
+ this.dispatchEvent(new JoistValueEvent(token, ({ newValue, oldValue }) => {
159
+ if (newValue !== oldValue) {
160
+ if (isIterable(newValue)) {
161
+ this.#items = newValue;
162
+ }
163
+ else {
164
+ this.#items = [];
165
+ }
166
+ // If there are no existing items in the DOM (template is the only child),
167
+ // create all items from scratch
168
+ if (template.nextSibling === null) {
169
+ this.createFromEmpty();
170
+ }
171
+ else {
172
+ // Otherwise update existing items, reusing DOM nodes where possible
173
+ this.updateItems();
174
+ }
175
+ }
176
+ }));
177
+ }
178
+ // Updates the DOM by either inserting new scopes or moving existing ones
179
+ // to their correct positions based on the current iteration order
180
+ createFromEmpty() {
181
+ const keyProperty = this.key;
182
+ const fragment = document.createDocumentFragment();
183
+ let index = 0;
184
+ for (const value of this.#items) {
185
+ let key = index;
186
+ if (keyProperty && hasProperty(value, keyProperty)) {
187
+ key = value[keyProperty];
188
+ }
189
+ const scope = this.#createScopeContainer();
190
+ scope.host.setAttribute("key", String(key));
191
+ scope.each = { position: index + 1, index, value };
192
+ fragment.appendChild(scope.host);
193
+ this.#scopes.set(String(key), scope);
194
+ index++;
195
+ }
196
+ this.append(fragment);
197
+ }
198
+ // Updates the DOM by either inserting new scopes or moving existing ones
199
+ // to their correct positions based on the current iteration order
200
+ updateItems() {
201
+ const leftoverScopes = new Map(this.#scopes);
202
+ const keyProperty = this.key;
203
+ let index = 0;
204
+ for (const value of this.#items) {
205
+ let key = index;
206
+ if (keyProperty && hasProperty(value, keyProperty)) {
207
+ key = value[keyProperty];
208
+ }
209
+ let scope = leftoverScopes.get(key);
210
+ if (!scope) {
211
+ scope = scope = this.#createScopeContainer();
212
+ this.#scopes.set(String(key), scope);
213
+ }
214
+ else {
215
+ leftoverScopes.delete(key); // Remove from map to track unused scopes
216
+ }
217
+ // Only update if values have changed
218
+ if (scope.key !== key || scope.each.value !== value) {
219
+ scope.host.setAttribute("key", String(key));
220
+ scope.each = { position: index + 1, index, value };
221
+ }
222
+ const child = this.children[index + 1] ?? null;
223
+ if (child !== scope.host) {
224
+ this.insertBefore(scope.host, child);
225
+ }
226
+ index++;
227
+ }
228
+ // Remove unused scopes
229
+ for (const scope of leftoverScopes.values()) {
230
+ scope.host.remove();
231
+ }
232
+ }
233
+ disconnectedCallback() {
234
+ for (const scope of this.#scopes.values()) {
235
+ scope.host.remove();
236
+ }
237
+ this.#scopes.clear();
238
+ this.#items = [];
239
+ }
240
+ #createScopeContainer() {
241
+ const template = this.#template();
242
+ const content = template.content.firstElementChild;
243
+ if (content === null) {
244
+ throw new Error("template must contain a single parent element");
245
+ }
246
+ const fragment = document.importNode(content, true);
247
+ return new JoistForScopeContainer(fragment);
248
+ }
249
+ };
250
+ return JoistForElement = _classThis;
251
+ })();
252
+ export { JoistForElement };
253
+ function isIterable(obj) {
254
+ return obj != null && typeof obj[Symbol.iterator] === "function";
255
+ }
256
+ function hasProperty(item, key) {
257
+ return Object.prototype.hasOwnProperty.call(item, key);
258
+ }
259
+ //# sourceMappingURL=for.element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for.element.js","sourceRoot":"","sources":["../../../src/lib/elements/for.element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import "../define.js";
2
+ //# sourceMappingURL=for.element.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for.element.test.d.ts","sourceRoot":"","sources":["../../../src/lib/elements/for.element.test.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC"}
@@ -0,0 +1,232 @@
1
+ import "../define.js";
2
+ import { fixtureSync, html } from "@open-wc/testing";
3
+ import { assert } from "chai";
4
+ it("should iterate over an iterable", () => {
5
+ const element = fixtureSync(html `
6
+ <div
7
+ @joist::value=${(e) => {
8
+ e.update({
9
+ oldValue: null,
10
+ newValue: new Set([
11
+ { id: "123", label: "Hello" },
12
+ { id: "456", label: "World" },
13
+ ]),
14
+ });
15
+ }}
16
+ >
17
+ <ul>
18
+ <j-for bind="items" key="id">
19
+ <template>
20
+ <li>
21
+ <j-val bind="each.value.label"></j-val>
22
+ </li>
23
+ </template>
24
+ </j-for>
25
+ </ul>
26
+ </div>
27
+ `);
28
+ const listItems = element.querySelectorAll("li");
29
+ assert.equal(listItems.length, 2);
30
+ assert.equal(listItems[0].textContent?.trim(), "Hello");
31
+ assert.equal(listItems[1].textContent?.trim(), "World");
32
+ });
33
+ it("should handle empty arrays", () => {
34
+ const element = fixtureSync(html `
35
+ <div
36
+ @joist::value=${(e) => {
37
+ e.update({
38
+ oldValue: null,
39
+ newValue: [],
40
+ });
41
+ }}
42
+ >
43
+ <j-for bind="items">
44
+ <template>
45
+ <div>Item</div>
46
+ </template>
47
+ </j-for>
48
+ </div>
49
+ `);
50
+ assert.equal(element.querySelectorAll("div").length, 0);
51
+ });
52
+ it("should update when items are added or removed", () => {
53
+ const element = fixtureSync(html `
54
+ <div
55
+ @joist::value=${(e) => {
56
+ // Initial items
57
+ e.update({
58
+ oldValue: null,
59
+ newValue: [
60
+ { id: "1", text: "First" },
61
+ { id: "2", text: "Second" },
62
+ ],
63
+ });
64
+ // Add an item
65
+ e.update({
66
+ oldValue: null,
67
+ newValue: [
68
+ { id: "1", text: "First" },
69
+ { id: "2", text: "Second" },
70
+ { id: "3", text: "Third" },
71
+ ],
72
+ });
73
+ // Remove an item
74
+ e.update({
75
+ oldValue: null,
76
+ newValue: [
77
+ { id: "1", text: "First" },
78
+ { id: "3", text: "Third" },
79
+ ],
80
+ });
81
+ }}
82
+ >
83
+ <j-for bind="items" key="id">
84
+ <template>
85
+ <j-val bind="each.value.text"></j-val>
86
+ </template>
87
+ </j-for>
88
+ </div>
89
+ `);
90
+ const items = element.querySelectorAll("j-val");
91
+ assert.equal(items.length, 2);
92
+ assert.equal(items[0].textContent?.trim(), "First");
93
+ assert.equal(items[1].textContent?.trim(), "Third");
94
+ });
95
+ it("should provide index and position information", () => {
96
+ const element = fixtureSync(html `
97
+ <div
98
+ @joist::value=${(e) => {
99
+ e.update({
100
+ oldValue: null,
101
+ newValue: ["A", "B", "C"],
102
+ });
103
+ }}
104
+ >
105
+ <j-for bind="items">
106
+ <template>
107
+ <div class="item">
108
+ <j-val bind="each.value"></j-val>
109
+ (index: <j-val bind="each.index"></j-val>, position:
110
+ <j-val bind="each.position"></j-val>)
111
+ </div>
112
+ </template>
113
+ </j-for>
114
+ </div>
115
+ `);
116
+ const items = element.querySelectorAll(".item");
117
+ assert.equal(items.length, 3);
118
+ assert.equal(items[0].textContent?.trim().replaceAll("\n", "").replaceAll(" ", ""), "A(index:0,position:1)");
119
+ assert.equal(items[1].textContent?.trim().replaceAll("\n", "").replaceAll(" ", ""), "B(index:1,position:2)");
120
+ assert.equal(items[2].textContent?.trim().replaceAll("\n", "").replaceAll(" ", ""), "C(index:2,position:3)");
121
+ });
122
+ // it("should handle nested j-for elements", () => {
123
+ // const element = fixtureSync(html`
124
+ // <div
125
+ // @joist::value=${(e: JoistValueEvent) => {
126
+ // e.update({
127
+ // oldValue: null,
128
+ // newValue: [
129
+ // { id: "1", items: ["A", "B"] },
130
+ // { id: "2", items: ["C", "D"] },
131
+ // ],
132
+ // });
133
+ // }}
134
+ // >
135
+ // <j-for bind="groups" key="id">
136
+ // <template>
137
+ // <div class="group">
138
+ // <j-for bind="each.value.items">
139
+ // <template>
140
+ // <j-val class="child" bind="each.value"></j-val>
141
+ // </template>
142
+ // </j-for>
143
+ // </div>
144
+ // </template>
145
+ // </j-for>
146
+ // </div>
147
+ // `);
148
+ // const groups = element.querySelectorAll(".group");
149
+ // assert.equal(groups.length, 2);
150
+ // console.log(groups);
151
+ // const items = element.querySelectorAll(".child");
152
+ // assert.equal(items.length, 4);
153
+ // // assert.equal(items[0].textContent?.trim(), "A");
154
+ // // assert.equal(items[1].textContent?.trim(), "B");
155
+ // // assert.equal(items[2].textContent?.trim(), "C");
156
+ // // assert.equal(items[3].textContent?.trim(), "D");
157
+ // });
158
+ it("should maintain DOM order when items are reordered", () => {
159
+ const element = fixtureSync(html `
160
+ <div
161
+ @joist::value=${(e) => {
162
+ // Initial order
163
+ e.update({
164
+ oldValue: null,
165
+ newValue: [
166
+ { id: "1", text: "First" },
167
+ { id: "2", text: "Second" },
168
+ { id: "3", text: "Third" },
169
+ ],
170
+ });
171
+ // Reorder items
172
+ e.update({
173
+ oldValue: null,
174
+ newValue: [
175
+ { id: "3", text: "Third" },
176
+ { id: "1", text: "First" },
177
+ { id: "2", text: "Second" },
178
+ ],
179
+ });
180
+ }}
181
+ >
182
+ <j-for bind="items" key="id">
183
+ <template>
184
+ <j-val bind="each.value.text"></j-val>
185
+ </template>
186
+ </j-for>
187
+ </div>
188
+ `);
189
+ const items = element.querySelectorAll("j-val");
190
+ assert.equal(items.length, 3);
191
+ assert.equal(items[0].textContent?.trim(), "Third");
192
+ assert.equal(items[1].textContent?.trim(), "First");
193
+ assert.equal(items[2].textContent?.trim(), "Second");
194
+ });
195
+ it("should wait for depends-on before dispatching events", async () => {
196
+ let eventDispatched = false;
197
+ customElements.define("dependency-1", class extends HTMLElement {
198
+ });
199
+ customElements.define("dependency-2", class extends HTMLElement {
200
+ });
201
+ fixtureSync(html `
202
+ <div
203
+ @joist::value=${(e) => {
204
+ if (e.expression.bindTo === "items") {
205
+ eventDispatched = true;
206
+ e.update({
207
+ oldValue: null,
208
+ newValue: ["A", "B", "C"],
209
+ });
210
+ }
211
+ }}
212
+ >
213
+ <j-for bind="items" depends-on="dependency-1,dependency-2">
214
+ <template>
215
+ <div class="item">
216
+ <j-val bind="each.value"></j-val>
217
+ </div>
218
+ </template>
219
+ </j-for>
220
+ </div>
221
+ `);
222
+ // Initially, no event should be dispatched
223
+ assert.isFalse(eventDispatched);
224
+ // Wait for the custom elements to be defined
225
+ await Promise.all([
226
+ customElements.whenDefined("dependency-1"),
227
+ customElements.whenDefined("dependency-2"),
228
+ ]);
229
+ // Now the event should be dispatched
230
+ assert.isTrue(eventDispatched);
231
+ });
232
+ //# sourceMappingURL=for.element.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"for.element.test.js","sourceRoot":"","sources":["../../../src/lib/elements/for.element.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class JoistIfElement extends HTMLElement {
2
+ #private;
3
+ accessor bind: string;
4
+ accessor target: string;
5
+ accessor dependsOn: string;
6
+ connectedCallback(): Promise<void>;
7
+ apply(value: unknown, isNegative: boolean): void;
8
+ disconnectedCallback(): void;
9
+ }
10
+ //# sourceMappingURL=if.element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"if.element.d.ts","sourceRoot":"","sources":["../../../src/lib/elements/if.element.ts"],"names":[],"mappings":"AAKA,qBAIa,cAAe,SAAQ,WAAW;;IAE7C,QAAQ,CAAC,IAAI,SAAM;IAGnB,QAAQ,CAAC,MAAM,SAAM;IAKrB,QAAQ,CAAC,SAAS,SAAM;IAMlB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiDxC,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI;IA4BhD,oBAAoB,IAAI,IAAI;CAG7B"}