@livetemplate/client 0.1.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 (100) hide show
  1. package/README.md +179 -0
  2. package/dist/constants.d.ts +2 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/constants.js +19 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/dom/directives.d.ts +13 -0
  7. package/dist/dom/directives.d.ts.map +1 -0
  8. package/dist/dom/directives.js +137 -0
  9. package/dist/dom/directives.js.map +1 -0
  10. package/dist/dom/event-delegation.d.ts +24 -0
  11. package/dist/dom/event-delegation.d.ts.map +1 -0
  12. package/dist/dom/event-delegation.js +437 -0
  13. package/dist/dom/event-delegation.js.map +1 -0
  14. package/dist/dom/focus-manager.d.ts +19 -0
  15. package/dist/dom/focus-manager.d.ts.map +1 -0
  16. package/dist/dom/focus-manager.js +144 -0
  17. package/dist/dom/focus-manager.js.map +1 -0
  18. package/dist/dom/form-disabler.d.ts +8 -0
  19. package/dist/dom/form-disabler.d.ts.map +1 -0
  20. package/dist/dom/form-disabler.js +32 -0
  21. package/dist/dom/form-disabler.js.map +1 -0
  22. package/dist/dom/loading-indicator.d.ts +9 -0
  23. package/dist/dom/loading-indicator.d.ts.map +1 -0
  24. package/dist/dom/loading-indicator.js +50 -0
  25. package/dist/dom/loading-indicator.js.map +1 -0
  26. package/dist/dom/modal-manager.d.ts +11 -0
  27. package/dist/dom/modal-manager.d.ts.map +1 -0
  28. package/dist/dom/modal-manager.js +62 -0
  29. package/dist/dom/modal-manager.js.map +1 -0
  30. package/dist/dom/observer-manager.d.ts +19 -0
  31. package/dist/dom/observer-manager.d.ts.map +1 -0
  32. package/dist/dom/observer-manager.js +64 -0
  33. package/dist/dom/observer-manager.js.map +1 -0
  34. package/dist/livetemplate-client.browser.js +44 -0
  35. package/dist/livetemplate-client.browser.js.map +7 -0
  36. package/dist/livetemplate-client.d.ts +106 -0
  37. package/dist/livetemplate-client.d.ts.map +1 -0
  38. package/dist/livetemplate-client.js +507 -0
  39. package/dist/livetemplate-client.js.map +1 -0
  40. package/dist/state/form-lifecycle-manager.d.ts +19 -0
  41. package/dist/state/form-lifecycle-manager.d.ts.map +1 -0
  42. package/dist/state/form-lifecycle-manager.js +64 -0
  43. package/dist/state/form-lifecycle-manager.js.map +1 -0
  44. package/dist/state/tree-renderer.d.ts +27 -0
  45. package/dist/state/tree-renderer.d.ts.map +1 -0
  46. package/dist/state/tree-renderer.js +359 -0
  47. package/dist/state/tree-renderer.js.map +1 -0
  48. package/dist/tests/event-delegation.test.d.ts +2 -0
  49. package/dist/tests/event-delegation.test.d.ts.map +1 -0
  50. package/dist/tests/event-delegation.test.js +102 -0
  51. package/dist/tests/event-delegation.test.js.map +1 -0
  52. package/dist/tests/focus-manager.test.d.ts +2 -0
  53. package/dist/tests/focus-manager.test.d.ts.map +1 -0
  54. package/dist/tests/focus-manager.test.js +45 -0
  55. package/dist/tests/focus-manager.test.js.map +1 -0
  56. package/dist/tests/form-disabler.test.d.ts +2 -0
  57. package/dist/tests/form-disabler.test.d.ts.map +1 -0
  58. package/dist/tests/form-disabler.test.js +35 -0
  59. package/dist/tests/form-disabler.test.js.map +1 -0
  60. package/dist/tests/form-lifecycle-manager.test.d.ts +2 -0
  61. package/dist/tests/form-lifecycle-manager.test.d.ts.map +1 -0
  62. package/dist/tests/form-lifecycle-manager.test.js +90 -0
  63. package/dist/tests/form-lifecycle-manager.test.js.map +1 -0
  64. package/dist/tests/modal-manager.test.d.ts +2 -0
  65. package/dist/tests/modal-manager.test.d.ts.map +1 -0
  66. package/dist/tests/modal-manager.test.js +80 -0
  67. package/dist/tests/modal-manager.test.js.map +1 -0
  68. package/dist/tests/rate-limit.test.d.ts +2 -0
  69. package/dist/tests/rate-limit.test.d.ts.map +1 -0
  70. package/dist/tests/rate-limit.test.js +38 -0
  71. package/dist/tests/rate-limit.test.js.map +1 -0
  72. package/dist/tests/test-conditional-debug.test.d.ts +8 -0
  73. package/dist/tests/test-conditional-debug.test.d.ts.map +1 -0
  74. package/dist/tests/test-conditional-debug.test.js +187 -0
  75. package/dist/tests/test-conditional-debug.test.js.map +1 -0
  76. package/dist/tests/test-reconstruction.test.d.ts +8 -0
  77. package/dist/tests/test-reconstruction.test.d.ts.map +1 -0
  78. package/dist/tests/test-reconstruction.test.js +284 -0
  79. package/dist/tests/test-reconstruction.test.js.map +1 -0
  80. package/dist/transport/websocket.d.ts +62 -0
  81. package/dist/transport/websocket.d.ts.map +1 -0
  82. package/dist/transport/websocket.js +194 -0
  83. package/dist/transport/websocket.js.map +1 -0
  84. package/dist/types.d.ts +34 -0
  85. package/dist/types.d.ts.map +1 -0
  86. package/dist/types.js +3 -0
  87. package/dist/types.js.map +1 -0
  88. package/dist/utils/logger.d.ts +32 -0
  89. package/dist/utils/logger.d.ts.map +1 -0
  90. package/dist/utils/logger.js +77 -0
  91. package/dist/utils/logger.js.map +1 -0
  92. package/dist/utils/rate-limit.d.ts +10 -0
  93. package/dist/utils/rate-limit.d.ts.map +1 -0
  94. package/dist/utils/rate-limit.js +37 -0
  95. package/dist/utils/rate-limit.js.map +1 -0
  96. package/dist/utils/testing.d.ts +14 -0
  97. package/dist/utils/testing.d.ts.map +1 -0
  98. package/dist/utils/testing.js +51 -0
  99. package/dist/utils/testing.js.map +1 -0
  100. package/package.json +57 -0
@@ -0,0 +1,359 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TreeRenderer = void 0;
4
+ /**
5
+ * Handles tree state management and HTML reconstruction logic for LiveTemplate.
6
+ */
7
+ class TreeRenderer {
8
+ constructor(logger) {
9
+ this.logger = logger;
10
+ this.treeState = {};
11
+ this.rangeState = {};
12
+ this.rangeIdKeys = {};
13
+ }
14
+ applyUpdate(update) {
15
+ let changed = false;
16
+ for (const [key, value] of Object.entries(update)) {
17
+ const isDifferentialOps = Array.isArray(value) &&
18
+ value.length > 0 &&
19
+ Array.isArray(value[0]) &&
20
+ typeof value[0][0] === "string";
21
+ if (isDifferentialOps) {
22
+ this.treeState[key] = value;
23
+ changed = true;
24
+ }
25
+ else {
26
+ const oldValue = this.treeState[key];
27
+ const newValue = typeof value === "object" && value !== null && !Array.isArray(value)
28
+ ? this.deepMergeTreeNodes(oldValue, value)
29
+ : value;
30
+ if (JSON.stringify(oldValue) !== JSON.stringify(newValue)) {
31
+ this.treeState[key] = newValue;
32
+ changed = true;
33
+ }
34
+ }
35
+ }
36
+ const html = this.reconstructFromTree(this.treeState, "");
37
+ return { html, changed };
38
+ }
39
+ reset() {
40
+ this.treeState = {};
41
+ this.rangeState = {};
42
+ this.rangeIdKeys = {};
43
+ }
44
+ getTreeState() {
45
+ return { ...this.treeState };
46
+ }
47
+ getStaticStructure() {
48
+ return this.treeState.s || null;
49
+ }
50
+ deepMergeTreeNodes(existing, update) {
51
+ if (typeof update !== "object" ||
52
+ update === null ||
53
+ Array.isArray(update)) {
54
+ return update;
55
+ }
56
+ if (typeof existing !== "object" ||
57
+ existing === null ||
58
+ Array.isArray(existing)) {
59
+ return update;
60
+ }
61
+ const merged = { ...existing };
62
+ for (const [key, value] of Object.entries(update)) {
63
+ if (typeof value === "object" &&
64
+ value !== null &&
65
+ !Array.isArray(value) &&
66
+ typeof merged[key] === "object" &&
67
+ merged[key] !== null &&
68
+ !Array.isArray(merged[key])) {
69
+ merged[key] = this.deepMergeTreeNodes(merged[key], value);
70
+ }
71
+ else {
72
+ merged[key] = value;
73
+ }
74
+ }
75
+ return merged;
76
+ }
77
+ reconstructFromTree(node, statePath) {
78
+ if (node.s && Array.isArray(node.s)) {
79
+ let html = "";
80
+ for (let i = 0; i < node.s.length; i++) {
81
+ const staticSegment = node.s[i];
82
+ html += staticSegment;
83
+ if (i < node.s.length - 1) {
84
+ const dynamicKey = i.toString();
85
+ if (node[dynamicKey] !== undefined) {
86
+ const newStatePath = statePath
87
+ ? `${statePath}.${dynamicKey}`
88
+ : dynamicKey;
89
+ html += this.renderValue(node[dynamicKey], dynamicKey, newStatePath);
90
+ }
91
+ }
92
+ }
93
+ html = html.replace(/<root>/g, "").replace(/<\/root>/g, "");
94
+ return html;
95
+ }
96
+ return this.renderValue(node, "", statePath);
97
+ }
98
+ renderValue(value, fieldKey, statePath) {
99
+ if (value === null || value === undefined) {
100
+ return "";
101
+ }
102
+ if (typeof value === "string" &&
103
+ value.startsWith("{{") &&
104
+ value.endsWith("}}")) {
105
+ return "";
106
+ }
107
+ if (typeof value === "object" && !Array.isArray(value)) {
108
+ if (value.d &&
109
+ Array.isArray(value.d) &&
110
+ value.s &&
111
+ Array.isArray(value.s)) {
112
+ const stateKey = statePath || fieldKey || "";
113
+ if (stateKey) {
114
+ this.rangeState[stateKey] = {
115
+ items: value.d,
116
+ statics: value.s,
117
+ };
118
+ if (value.m &&
119
+ typeof value.m === "object" &&
120
+ typeof value.m.idKey === "string") {
121
+ this.rangeIdKeys[stateKey] = value.m.idKey;
122
+ }
123
+ }
124
+ return this.renderRangeStructure(value, fieldKey, statePath);
125
+ }
126
+ if ("s" in value && Array.isArray(value.s)) {
127
+ return this.reconstructFromTree(value, statePath || "");
128
+ }
129
+ }
130
+ if (Array.isArray(value)) {
131
+ if (value.length > 0 &&
132
+ Array.isArray(value[0]) &&
133
+ typeof value[0][0] === "string") {
134
+ return this.applyDifferentialOperations(value, statePath);
135
+ }
136
+ return value
137
+ .map((item, idx) => {
138
+ const itemKey = idx.toString();
139
+ const itemStatePath = statePath ? `${statePath}.${itemKey}` : itemKey;
140
+ if (typeof item === "object" && item && item.s) {
141
+ return this.reconstructFromTree(item, itemStatePath);
142
+ }
143
+ return this.renderValue(item, itemKey, itemStatePath);
144
+ })
145
+ .join("");
146
+ }
147
+ if (typeof value === "object") {
148
+ this.logger.error("Object value reached string conversion; this will render as [object Object].");
149
+ if (this.logger.isDebugEnabled()) {
150
+ this.logger.debug("Value diagnostics:", {
151
+ valueType: typeof value,
152
+ isArray: Array.isArray(value),
153
+ keys: Object.keys(value),
154
+ hasStatics: Boolean(value.s),
155
+ hasDynamics: Boolean(value.d),
156
+ value,
157
+ });
158
+ }
159
+ }
160
+ return String(value);
161
+ }
162
+ renderRangeStructure(rangeNode, fieldKey, statePath) {
163
+ const { d: dynamics, s: statics } = rangeNode;
164
+ if (!dynamics || !Array.isArray(dynamics)) {
165
+ return "";
166
+ }
167
+ if (dynamics.length === 0) {
168
+ if (rangeNode["else"]) {
169
+ const elseKey = "else";
170
+ const elseStatePath = statePath ? `${statePath}.else` : "else";
171
+ return this.renderValue(rangeNode["else"], elseKey, elseStatePath);
172
+ }
173
+ return "";
174
+ }
175
+ if (statics && Array.isArray(statics)) {
176
+ return dynamics
177
+ .map((item, itemIdx) => {
178
+ let html = "";
179
+ for (let i = 0; i < statics.length; i++) {
180
+ html += statics[i];
181
+ if (i < statics.length - 1) {
182
+ const localKey = i.toString();
183
+ if (item[localKey] !== undefined) {
184
+ const itemStatePath = statePath
185
+ ? `${statePath}.${itemIdx}.${localKey}`
186
+ : `${itemIdx}.${localKey}`;
187
+ html += this.renderValue(item[localKey], localKey, itemStatePath);
188
+ }
189
+ }
190
+ }
191
+ return html;
192
+ })
193
+ .join("");
194
+ }
195
+ return dynamics
196
+ .map((item, idx) => {
197
+ const itemKey = idx.toString();
198
+ const itemStatePath = statePath ? `${statePath}.${itemKey}` : itemKey;
199
+ return this.renderValue(item, itemKey, itemStatePath);
200
+ })
201
+ .join("");
202
+ }
203
+ applyDifferentialOperations(operations, statePath) {
204
+ if (!statePath || !this.rangeState[statePath]) {
205
+ return "";
206
+ }
207
+ const rangeData = this.rangeState[statePath];
208
+ const currentItems = [...rangeData.items];
209
+ const statics = rangeData.statics;
210
+ for (const operation of operations) {
211
+ if (!Array.isArray(operation) || operation.length < 2) {
212
+ continue;
213
+ }
214
+ const opType = operation[0];
215
+ switch (opType) {
216
+ case "r": {
217
+ const removeIndex = this.findItemIndexByKey(currentItems, operation[1], statics, statePath);
218
+ if (removeIndex >= 0) {
219
+ currentItems.splice(removeIndex, 1);
220
+ }
221
+ break;
222
+ }
223
+ case "u": {
224
+ const updateIndex = this.findItemIndexByKey(currentItems, operation[1], statics, statePath);
225
+ const changes = operation[2];
226
+ if (updateIndex >= 0 && changes) {
227
+ currentItems[updateIndex] = {
228
+ ...currentItems[updateIndex],
229
+ ...changes,
230
+ };
231
+ }
232
+ break;
233
+ }
234
+ case "a": {
235
+ this.addItemsToRange(currentItems, operation[1], operation[2], rangeData, false);
236
+ if (operation[3] &&
237
+ typeof operation[3] === "object" &&
238
+ operation[3].idKey) {
239
+ this.rangeIdKeys[statePath || ""] = operation[3].idKey;
240
+ }
241
+ break;
242
+ }
243
+ case "p": {
244
+ this.addItemsToRange(currentItems, operation[1], operation[2], rangeData, true);
245
+ break;
246
+ }
247
+ case "i": {
248
+ const targetIndex = this.findItemIndexByKey(currentItems, operation[1], statics, statePath);
249
+ if (targetIndex >= 0) {
250
+ const itemsToInsert = Array.isArray(operation[2])
251
+ ? operation[2]
252
+ : [operation[2]];
253
+ currentItems.splice(targetIndex + 1, 0, ...itemsToInsert);
254
+ }
255
+ break;
256
+ }
257
+ case "o": {
258
+ const newOrder = operation[1];
259
+ const reorderedItems = [];
260
+ const itemsByKey = new Map();
261
+ for (const item of currentItems) {
262
+ const itemKey = this.getItemKey(item, statics, statePath);
263
+ if (itemKey) {
264
+ itemsByKey.set(itemKey, item);
265
+ }
266
+ }
267
+ for (const orderedKey of newOrder) {
268
+ const item = itemsByKey.get(orderedKey);
269
+ if (item) {
270
+ reorderedItems.push(item);
271
+ }
272
+ }
273
+ currentItems.length = 0;
274
+ currentItems.push(...reorderedItems);
275
+ break;
276
+ }
277
+ default:
278
+ break;
279
+ }
280
+ }
281
+ this.rangeState[statePath] = {
282
+ items: currentItems,
283
+ statics: rangeData.statics,
284
+ };
285
+ this.treeState[statePath] = {
286
+ d: currentItems,
287
+ s: rangeData.statics,
288
+ };
289
+ const rangeStructure = this.getCurrentRangeStructure(statePath);
290
+ if (rangeStructure && rangeStructure.s) {
291
+ return this.renderItemsWithStatics(currentItems, rangeStructure.s);
292
+ }
293
+ return currentItems.map((item) => this.renderValue(item)).join("");
294
+ }
295
+ getCurrentRangeStructure(stateKey) {
296
+ if (this.rangeState[stateKey]) {
297
+ return {
298
+ d: this.rangeState[stateKey].items,
299
+ s: this.rangeState[stateKey].statics,
300
+ };
301
+ }
302
+ const fieldValue = this.treeState[stateKey];
303
+ if (fieldValue &&
304
+ typeof fieldValue === "object" &&
305
+ fieldValue.s) {
306
+ return fieldValue;
307
+ }
308
+ return null;
309
+ }
310
+ renderItemsWithStatics(items, statics) {
311
+ const result = items
312
+ .map((item) => {
313
+ let html = "";
314
+ for (let i = 0; i < statics.length; i++) {
315
+ html += statics[i];
316
+ if (i < statics.length - 1) {
317
+ const fieldKey = i.toString();
318
+ if (item[fieldKey] !== undefined) {
319
+ html += this.renderValue(item[fieldKey]);
320
+ }
321
+ }
322
+ }
323
+ return html;
324
+ })
325
+ .join("");
326
+ if (this.logger.isDebugEnabled()) {
327
+ this.logger.debug("[renderItemsWithStatics] statics:", statics);
328
+ this.logger.debug("[renderItemsWithStatics] items count:", items.length);
329
+ this.logger.debug("[renderItemsWithStatics] result snippet:", result.substring(0, 200));
330
+ }
331
+ return result;
332
+ }
333
+ addItemsToRange(currentItems, items, statics, rangeData, prepend) {
334
+ if (statics) {
335
+ rangeData.statics = statics;
336
+ }
337
+ if (!items)
338
+ return;
339
+ const itemsArray = Array.isArray(items) ? items : [items];
340
+ if (prepend) {
341
+ currentItems.unshift(...itemsArray);
342
+ }
343
+ else {
344
+ currentItems.push(...itemsArray);
345
+ }
346
+ }
347
+ getItemKey(item, statics, statePath) {
348
+ if (!statePath || !this.rangeIdKeys[statePath]) {
349
+ return null;
350
+ }
351
+ const keyPosStr = this.rangeIdKeys[statePath];
352
+ return item[keyPosStr] || null;
353
+ }
354
+ findItemIndexByKey(items, key, statics, statePath) {
355
+ return items.findIndex((item) => this.getItemKey(item, statics, statePath) === key);
356
+ }
357
+ }
358
+ exports.TreeRenderer = TreeRenderer;
359
+ //# sourceMappingURL=tree-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-renderer.js","sourceRoot":"","sources":["../../state/tree-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event-delegation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-delegation.test.d.ts","sourceRoot":"","sources":["../../tests/event-delegation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const event_delegation_1 = require("../dom/event-delegation");
4
+ const logger_1 = require("../utils/logger");
5
+ describe("EventDelegator", () => {
6
+ let consoleLogSpy;
7
+ beforeEach(() => {
8
+ consoleLogSpy = jest.spyOn(console, "log").mockImplementation(() => { });
9
+ document.body.innerHTML = "";
10
+ });
11
+ afterEach(() => {
12
+ consoleLogSpy.mockRestore();
13
+ jest.useRealTimers();
14
+ document.body.innerHTML = "";
15
+ });
16
+ const createContext = (wrapper, overrides = {}) => {
17
+ const rateLimitedHandlers = new WeakMap();
18
+ const baseContext = {
19
+ getWrapperElement: () => wrapper,
20
+ getRateLimitedHandlers: () => rateLimitedHandlers,
21
+ parseValue: (value) => value,
22
+ send: jest.fn(),
23
+ setActiveSubmission: jest.fn(),
24
+ openModal: jest.fn(),
25
+ closeModal: jest.fn(),
26
+ getWebSocketReadyState: () => 1,
27
+ };
28
+ return { ...baseContext, ...overrides };
29
+ };
30
+ it("sends action payloads for delegated click events", () => {
31
+ const wrapper = document.createElement("div");
32
+ wrapper.setAttribute("data-lvt-id", "wrapper-1");
33
+ wrapper.innerHTML = `
34
+ <button id="save" lvt-click="save" lvt-data-id="42"></button>
35
+ `;
36
+ document.body.appendChild(wrapper);
37
+ const context = createContext(wrapper);
38
+ const delegator = new event_delegation_1.EventDelegator(context, (0, logger_1.createLogger)({ scope: "EventDelegatorTest", level: "silent" }));
39
+ delegator.setupEventDelegation();
40
+ const button = document.getElementById("save");
41
+ button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
42
+ expect(context.send).toHaveBeenCalledTimes(1);
43
+ expect(context.send).toHaveBeenCalledWith({
44
+ action: "save",
45
+ data: { id: "42" },
46
+ });
47
+ });
48
+ it("applies throttle semantics for rate limited handlers", () => {
49
+ jest.useFakeTimers();
50
+ const wrapper = document.createElement("div");
51
+ wrapper.setAttribute("data-lvt-id", "wrapper-2");
52
+ wrapper.innerHTML = `
53
+ <button id="ping" lvt-click="ping" lvt-throttle="200"></button>
54
+ `;
55
+ document.body.appendChild(wrapper);
56
+ const context = createContext(wrapper);
57
+ const delegator = new event_delegation_1.EventDelegator(context, (0, logger_1.createLogger)({ scope: "EventDelegatorTest", level: "silent" }));
58
+ delegator.setupEventDelegation();
59
+ const button = document.getElementById("ping");
60
+ button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
61
+ button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
62
+ expect(context.send).toHaveBeenCalledTimes(1);
63
+ jest.advanceTimersByTime(200);
64
+ button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
65
+ expect(context.send).toHaveBeenCalledTimes(2);
66
+ });
67
+ it("handles form submissions and records active submission state", () => {
68
+ const wrapper = document.createElement("div");
69
+ wrapper.setAttribute("data-lvt-id", "wrapper-3");
70
+ wrapper.innerHTML = `
71
+ <form id="add-form" lvt-submit="add">
72
+ <input type="text" name="title" value="Hello" />
73
+ <input type="checkbox" name="published" checked />
74
+ <button type="submit" id="submit" lvt-disable-with="Saving...">Save</button>
75
+ </form>
76
+ `;
77
+ document.body.appendChild(wrapper);
78
+ const form = document.getElementById("add-form");
79
+ const submitButton = document.getElementById("submit");
80
+ const context = createContext(wrapper);
81
+ const delegator = new event_delegation_1.EventDelegator(context, (0, logger_1.createLogger)({ scope: "EventDelegatorTest", level: "silent" }));
82
+ delegator.setupEventDelegation();
83
+ const submitEvent = new Event("submit", {
84
+ bubbles: true,
85
+ cancelable: true,
86
+ });
87
+ submitEvent.submitter = submitButton;
88
+ form.dispatchEvent(submitEvent);
89
+ expect(context.setActiveSubmission).toHaveBeenCalledWith(form, submitButton, "Save");
90
+ expect(submitButton.disabled).toBe(true);
91
+ expect(submitButton.textContent).toBe("Saving...");
92
+ expect(context.send).toHaveBeenCalledTimes(1);
93
+ expect(context.send).toHaveBeenCalledWith(expect.objectContaining({
94
+ action: "add",
95
+ data: expect.objectContaining({
96
+ title: "Hello",
97
+ published: true,
98
+ }),
99
+ }));
100
+ });
101
+ });
102
+ //# sourceMappingURL=event-delegation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-delegation.test.js","sourceRoot":"","sources":["../../tests/event-delegation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=focus-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-manager.test.d.ts","sourceRoot":"","sources":["../../tests/focus-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const focus_manager_1 = require("../dom/focus-manager");
4
+ const logger_1 = require("../utils/logger");
5
+ describe("FocusManager", () => {
6
+ beforeEach(() => {
7
+ document.body.innerHTML = "";
8
+ });
9
+ afterEach(() => {
10
+ document.body.innerHTML = "";
11
+ });
12
+ it("restores focus to the last tracked element", () => {
13
+ const wrapper = document.createElement("div");
14
+ wrapper.setAttribute("data-lvt-id", "focus-wrapper");
15
+ const input = document.createElement("input");
16
+ input.type = "text";
17
+ wrapper.appendChild(input);
18
+ document.body.appendChild(wrapper);
19
+ const manager = new focus_manager_1.FocusManager((0, logger_1.createLogger)({ scope: "FocusManagerTest", level: "silent" }));
20
+ manager.attach(wrapper);
21
+ manager.updateFocusableElements();
22
+ manager.lastFocusedElement = input;
23
+ manager.wrapperElement = wrapper;
24
+ manager.lastFocusedSelectionStart = 1;
25
+ manager.lastFocusedSelectionEnd = 3;
26
+ manager.restoreFocusedElement();
27
+ expect(document.activeElement).toBe(input);
28
+ });
29
+ it("fails gracefully when the tracked element no longer exists", () => {
30
+ const wrapper = document.createElement("div");
31
+ wrapper.setAttribute("data-lvt-id", "focus-wrapper-2");
32
+ const input = document.createElement("input");
33
+ wrapper.appendChild(input);
34
+ document.body.appendChild(wrapper);
35
+ const manager = new focus_manager_1.FocusManager((0, logger_1.createLogger)({ scope: "FocusManagerTest", level: "silent" }));
36
+ manager.attach(wrapper);
37
+ manager.updateFocusableElements();
38
+ manager.lastFocusedElement = input;
39
+ manager.wrapperElement = wrapper;
40
+ input.remove();
41
+ expect(() => manager.restoreFocusedElement()).not.toThrow();
42
+ expect(document.activeElement).not.toBe(input);
43
+ });
44
+ });
45
+ //# sourceMappingURL=focus-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-manager.test.js","sourceRoot":"","sources":["../../tests/focus-manager.test.ts"],"names":[],"mappings":";;AAAA,wDAAoD;AACpD,4CAA+C;AAE/C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;QAErD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;QACpB,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAI,4BAAY,CAC9B,IAAA,qBAAY,EAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC7D,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAEjC,OAAe,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC3C,OAAe,CAAC,cAAc,GAAG,OAAO,CAAC;QACzC,OAAe,CAAC,yBAAyB,GAAG,CAAC,CAAC;QAC9C,OAAe,CAAC,uBAAuB,GAAG,CAAC,CAAC;QAE7C,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEhC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAEvD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,IAAI,4BAAY,CAC9B,IAAA,qBAAY,EAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAC7D,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,uBAAuB,EAAE,CAAC;QAEjC,OAAe,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAC3C,OAAe,CAAC,cAAc,GAAG,OAAO,CAAC;QAE1C,KAAK,CAAC,MAAM,EAAE,CAAC;QAEf,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=form-disabler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-disabler.test.d.ts","sourceRoot":"","sources":["../../tests/form-disabler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const form_disabler_1 = require("../dom/form-disabler");
4
+ describe("FormDisabler", () => {
5
+ beforeEach(() => {
6
+ document.body.innerHTML = "";
7
+ });
8
+ afterEach(() => {
9
+ document.body.innerHTML = "";
10
+ });
11
+ it("disables and re-enables all controls within the wrapper", () => {
12
+ const wrapper = document.createElement("div");
13
+ const form = document.createElement("form");
14
+ const input = document.createElement("input");
15
+ const textarea = document.createElement("textarea");
16
+ const select = document.createElement("select");
17
+ const button = document.createElement("button");
18
+ form.appendChild(input);
19
+ form.appendChild(textarea);
20
+ form.appendChild(select);
21
+ form.appendChild(button);
22
+ wrapper.appendChild(form);
23
+ document.body.appendChild(wrapper);
24
+ const disabler = new form_disabler_1.FormDisabler();
25
+ disabler.disable(wrapper);
26
+ [input, textarea, select, button].forEach((element) => {
27
+ expect(element.disabled).toBe(true);
28
+ });
29
+ disabler.enable(wrapper);
30
+ [input, textarea, select, button].forEach((element) => {
31
+ expect(element.disabled).toBe(false);
32
+ });
33
+ });
34
+ });
35
+ //# sourceMappingURL=form-disabler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-disabler.test.js","sourceRoot":"","sources":["../../tests/form-disabler.test.ts"],"names":[],"mappings":";;AAAA,wDAAoD;AAEpD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,QAAQ,GAAG,IAAI,4BAAY,EAAE,CAAC;QACpC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1B,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEzB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=form-lifecycle-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-lifecycle-manager.test.d.ts","sourceRoot":"","sources":["../../tests/form-lifecycle-manager.test.ts"],"names":[],"mappings":""}