@livetemplate/client 0.9.2 → 0.11.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.
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const spy_1 = require("../dom/spy");
4
+ // Mock getBoundingClientRect so tests can position headings deterministically.
5
+ // jsdom returns all-zero rects by default, which would make every heading
6
+ // "above the trigger line" and every test ambiguous.
7
+ function setRect(el, top) {
8
+ el.getBoundingClientRect = () => ({
9
+ top,
10
+ bottom: top + 30,
11
+ left: 0,
12
+ right: 100,
13
+ width: 100,
14
+ height: 30,
15
+ x: 0,
16
+ y: top,
17
+ toJSON: () => ({}),
18
+ });
19
+ }
20
+ describe("setupSpy", () => {
21
+ let rafCallbacks;
22
+ beforeEach(() => {
23
+ document.body.replaceChildren();
24
+ rafCallbacks = [];
25
+ jest.spyOn(window, "requestAnimationFrame").mockImplementation((cb) => {
26
+ rafCallbacks.push(cb);
27
+ return rafCallbacks.length;
28
+ });
29
+ // jsdom's innerHeight is 768 by default; pin it for deterministic
30
+ // trigger-line math (25% of 768 = 192).
31
+ Object.defineProperty(window, "innerHeight", { value: 768, configurable: true });
32
+ });
33
+ afterEach(() => {
34
+ (0, spy_1.teardownSpy)();
35
+ jest.restoreAllMocks();
36
+ });
37
+ function flushRAF() {
38
+ const cbs = rafCallbacks.splice(0);
39
+ cbs.forEach((cb) => cb(performance.now()));
40
+ }
41
+ function buildFixture() {
42
+ document.body.innerHTML = `
43
+ <article lvt-spy="h1, h2, h3">
44
+ <h1 id="intro">Intro</h1>
45
+ <p>Body</p>
46
+ <h2 id="usage">Usage</h2>
47
+ <p>Body</p>
48
+ <h3 id="config">Config</h3>
49
+ <p>Body</p>
50
+ </article>
51
+ <nav>
52
+ <a id="lA" href="#intro" lvt-spy-link>Intro</a>
53
+ <a id="lB" href="#usage" lvt-spy-link>Usage</a>
54
+ <a id="lC" href="#config" lvt-spy-link>Config</a>
55
+ </nav>
56
+ `;
57
+ return {
58
+ article: document.querySelector("article"),
59
+ h1: document.getElementById("intro"),
60
+ h2: document.getElementById("usage"),
61
+ h3: document.getElementById("config"),
62
+ linkA: document.getElementById("lA"),
63
+ linkB: document.getElementById("lB"),
64
+ linkC: document.getElementById("lC"),
65
+ };
66
+ }
67
+ it("highlights the topmost passed heading on initial paint", () => {
68
+ const f = buildFixture();
69
+ // h1 is above the trigger line; h2 and h3 are below.
70
+ setRect(f.h1, 50);
71
+ setRect(f.h2, 400);
72
+ setRect(f.h3, 800);
73
+ (0, spy_1.setupSpy)(document.body);
74
+ expect(f.linkA.classList.contains("lvt-active")).toBe(true);
75
+ expect(f.linkB.classList.contains("lvt-active")).toBe(false);
76
+ expect(f.linkC.classList.contains("lvt-active")).toBe(false);
77
+ });
78
+ it("advances active link as the user scrolls past each heading", () => {
79
+ const f = buildFixture();
80
+ setRect(f.h1, 50);
81
+ setRect(f.h2, 400);
82
+ setRect(f.h3, 800);
83
+ (0, spy_1.setupSpy)(document.body);
84
+ // Simulate scroll: h2 has now passed the trigger line.
85
+ setRect(f.h1, -200);
86
+ setRect(f.h2, 100);
87
+ setRect(f.h3, 500);
88
+ window.dispatchEvent(new Event("scroll"));
89
+ flushRAF();
90
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
91
+ expect(f.linkB.classList.contains("lvt-active")).toBe(true);
92
+ expect(f.linkC.classList.contains("lvt-active")).toBe(false);
93
+ // Scroll further: h3 has passed too.
94
+ setRect(f.h1, -700);
95
+ setRect(f.h2, -400);
96
+ setRect(f.h3, 100);
97
+ window.dispatchEvent(new Event("scroll"));
98
+ flushRAF();
99
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
100
+ expect(f.linkB.classList.contains("lvt-active")).toBe(false);
101
+ expect(f.linkC.classList.contains("lvt-active")).toBe(true);
102
+ });
103
+ it("highlights no link when scrolled above the first heading", () => {
104
+ const f = buildFixture();
105
+ // All headings below trigger line.
106
+ setRect(f.h1, 500);
107
+ setRect(f.h2, 800);
108
+ setRect(f.h3, 1100);
109
+ (0, spy_1.setupSpy)(document.body);
110
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
111
+ expect(f.linkB.classList.contains("lvt-active")).toBe(false);
112
+ expect(f.linkC.classList.contains("lvt-active")).toBe(false);
113
+ });
114
+ it("optimistically activates a link on click", () => {
115
+ const f = buildFixture();
116
+ // Layout puts h1 as active.
117
+ setRect(f.h1, 50);
118
+ setRect(f.h2, 400);
119
+ setRect(f.h3, 800);
120
+ (0, spy_1.setupSpy)(document.body);
121
+ expect(f.linkA.classList.contains("lvt-active")).toBe(true);
122
+ // User clicks the last link — h3 may never become topmost-visible if
123
+ // the document ends shortly after it, so optimism is what keeps the UI
124
+ // in sync with the user's intent.
125
+ f.linkC.dispatchEvent(new MouseEvent("click", { bubbles: true }));
126
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
127
+ expect(f.linkC.classList.contains("lvt-active")).toBe(true);
128
+ });
129
+ it("element-mode: spy directly on the element (empty attribute)", () => {
130
+ document.body.innerHTML = `
131
+ <h2 id="just-one" lvt-spy></h2>
132
+ <a id="L" href="#just-one" lvt-spy-link>Just one</a>
133
+ `;
134
+ const h = document.getElementById("just-one");
135
+ const link = document.getElementById("L");
136
+ setRect(h, 50);
137
+ (0, spy_1.setupSpy)(document.body);
138
+ expect(link.classList.contains("lvt-active")).toBe(true);
139
+ });
140
+ it("teardownSpy clears active class and removes scroll listener", () => {
141
+ const f = buildFixture();
142
+ setRect(f.h1, 50);
143
+ setRect(f.h2, 400);
144
+ setRect(f.h3, 800);
145
+ (0, spy_1.setupSpy)(document.body);
146
+ expect(f.linkA.classList.contains("lvt-active")).toBe(true);
147
+ (0, spy_1.teardownSpy)();
148
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
149
+ // After teardown, a scroll event should not re-pick. Move h2 above the
150
+ // trigger and confirm linkB does NOT get activated.
151
+ setRect(f.h2, 50);
152
+ window.dispatchEvent(new Event("scroll"));
153
+ flushRAF();
154
+ expect(f.linkB.classList.contains("lvt-active")).toBe(false);
155
+ });
156
+ it("teardownSpy(wrapper) clears active class on links OUTSIDE the wrapper", () => {
157
+ // Realistic layout: nav at the top of the document, content wrapper
158
+ // below containing the spy targets. applyActive() queries links
159
+ // globally, so the nav link picks up lvt-active even though it sits
160
+ // outside the wrapper. A wrapper-scoped teardown must still scrub
161
+ // those classes — otherwise disconnecting leaves the nav with a
162
+ // stale highlight forever.
163
+ document.body.innerHTML = `
164
+ <nav id="topnav">
165
+ <a id="navlink" href="#deep" lvt-spy-link>Deep</a>
166
+ </nav>
167
+ <div id="content">
168
+ <article lvt-spy="h2">
169
+ <h2 id="deep">Deep</h2>
170
+ </article>
171
+ </div>
172
+ `;
173
+ const navlink = document.getElementById("navlink");
174
+ const target = document.getElementById("deep");
175
+ const wrapper = document.getElementById("content");
176
+ setRect(target, 50);
177
+ (0, spy_1.setupSpy)(document.body);
178
+ expect(navlink.classList.contains("lvt-active")).toBe(true);
179
+ // Wrapper-scoped teardown: the content wrapper is what disconnects.
180
+ (0, spy_1.teardownSpy)(wrapper);
181
+ expect(navlink.classList.contains("lvt-active")).toBe(false);
182
+ });
183
+ it("swallows invalid lvt-spy selectors instead of aborting the scan", () => {
184
+ // Two spy containers — the first has a typo that would throw
185
+ // SyntaxError from querySelectorAll, the second is well-formed. The
186
+ // bad container must not prevent the good one from initializing.
187
+ document.body.innerHTML = `
188
+ <article id="broken" lvt-spy="h1, h2,">
189
+ <h1 id="x">X</h1>
190
+ </article>
191
+ <article id="ok" lvt-spy="h2">
192
+ <h2 id="y">Y</h2>
193
+ </article>
194
+ <a id="L" href="#y" lvt-spy-link>Y</a>
195
+ `;
196
+ const link = document.getElementById("L");
197
+ setRect(document.getElementById("y"), 50);
198
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => { });
199
+ (0, spy_1.setupSpy)(document.body);
200
+ expect(warn).toHaveBeenCalled();
201
+ expect(link.classList.contains("lvt-active")).toBe(true);
202
+ warn.mockRestore();
203
+ });
204
+ it("teardownSpy(wrapper) removes the click handler when no bindings remain", () => {
205
+ // The framework always calls teardownSpy(this.wrapperElement). If
206
+ // the click handler is gated on (!wrapper) it survives every
207
+ // teardown and clicks on stray [lvt-spy-link] elements continue to
208
+ // re-apply lvt-active — with no scroll-driven reconciliation to
209
+ // undo it. Gate on the binding count instead so the handler comes
210
+ // off whenever the last binding is gone.
211
+ const f = buildFixture();
212
+ setRect(f.h1, 50);
213
+ setRect(f.h2, 400);
214
+ setRect(f.h3, 800);
215
+ (0, spy_1.setupSpy)(document.body);
216
+ expect(f.linkA.classList.contains("lvt-active")).toBe(true);
217
+ (0, spy_1.teardownSpy)(f.article);
218
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
219
+ // A click after teardown must NOT re-apply lvt-active. Before the
220
+ // gate fix, the optimistic click handler survived teardown and
221
+ // would put lvt-active back on the clicked link forever.
222
+ f.linkC.dispatchEvent(new MouseEvent("click", { bubbles: true }));
223
+ expect(f.linkC.classList.contains("lvt-active")).toBe(false);
224
+ });
225
+ it("readMarginPx rejects unsupported units and falls back to 25vh", () => {
226
+ document.body.innerHTML = `
227
+ <article id="container" lvt-spy="h2" style="--lvt-spy-margin: 2rem;">
228
+ <h2 id="h1" style="position: relative; top: 100px;">H1</h2>
229
+ </article>
230
+ <a id="L" href="#h1" lvt-spy-link>H1</a>
231
+ `;
232
+ const h = document.getElementById("h1");
233
+ const link = document.getElementById("L");
234
+ // 25vh of 768 = 192. Bare px from 2rem (i.e. 2) would treat the
235
+ // trigger line at 2px, so a heading at top=100 would be BELOW the
236
+ // line and NOT active. Correct behaviour: fall back to 25vh = 192,
237
+ // heading at top=100 is above → active.
238
+ setRect(h, 100);
239
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => { });
240
+ (0, spy_1.setupSpy)(document.body);
241
+ expect(warn).toHaveBeenCalled();
242
+ expect(link.classList.contains("lvt-active")).toBe(true);
243
+ warn.mockRestore();
244
+ });
245
+ it("readMarginPx accepts explicit px unit", () => {
246
+ document.body.innerHTML = `
247
+ <article id="container" lvt-spy="h2" style="--lvt-spy-margin: 300px;">
248
+ <h2 id="h2only">Above</h2>
249
+ </article>
250
+ <a id="L" href="#h2only" lvt-spy-link>Above</a>
251
+ `;
252
+ setRect(document.getElementById("h2only"), 250);
253
+ (0, spy_1.setupSpy)(document.body);
254
+ // 250 < 300 → active.
255
+ expect(document.getElementById("L").classList.contains("lvt-active")).toBe(true);
256
+ });
257
+ it("warns once when a target has no id", () => {
258
+ document.body.innerHTML = `
259
+ <article lvt-spy="h2">
260
+ <h2 id="ok">OK</h2>
261
+ <h2>No id</h2>
262
+ </article>
263
+ <a href="#ok" lvt-spy-link>OK</a>
264
+ `;
265
+ setRect(document.getElementById("ok"), 50);
266
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => { });
267
+ (0, spy_1.setupSpy)(document.body);
268
+ expect(warn).toHaveBeenCalled();
269
+ const calls = warn.mock.calls.map((args) => String(args[0]));
270
+ expect(calls.some((s) => s.includes("without an id"))).toBe(true);
271
+ warn.mockRestore();
272
+ });
273
+ it("does not re-warn about the same id-less target on re-attach", () => {
274
+ // A morphdom render that changes the target set triggers
275
+ // detach+attach. Without per-element dedup, the missing-id warning
276
+ // would re-fire every render and spam the console for any page
277
+ // that legitimately has an id-less heading the author hasn't
278
+ // gotten around to fixing.
279
+ document.body.innerHTML = `
280
+ <article lvt-spy="h2">
281
+ <h2 id="a">A</h2>
282
+ <h2>No id</h2>
283
+ </article>
284
+ <a href="#a" lvt-spy-link>A</a>
285
+ `;
286
+ setRect(document.getElementById("a"), 50);
287
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => { });
288
+ (0, spy_1.setupSpy)(document.body);
289
+ const firstWarnCount = warn.mock.calls.filter((args) => String(args[0]).includes("without an id")).length;
290
+ expect(firstWarnCount).toBe(1);
291
+ // Simulate a morphdom-style structural update: append a brand-new
292
+ // heading WITH an id. processContainer detects the target set
293
+ // changed → detaches the old binding → attaches a new one.
294
+ const newH = document.createElement("h2");
295
+ newH.id = "b";
296
+ document.querySelector("article").appendChild(newH);
297
+ setRect(newH, 80);
298
+ (0, spy_1.setupSpy)(document.body);
299
+ const secondWarnCount = warn.mock.calls.filter((args) => String(args[0]).includes("without an id")).length;
300
+ // The id-less target is the SAME element — must not warn again.
301
+ expect(secondWarnCount).toBe(1);
302
+ warn.mockRestore();
303
+ });
304
+ it("picks the latest passed target even when targets are visually out of order", () => {
305
+ // A real document-order h2 list, but the second heading is visually
306
+ // shifted ABOVE the first via getBoundingClientRect (simulating
307
+ // sticky / transform / flex-order layouts). The early-break
308
+ // optimisation would have bailed on the first heading and missed
309
+ // that the second one is actually above the trigger line too.
310
+ document.body.innerHTML = `
311
+ <article lvt-spy="h2">
312
+ <h2 id="alpha">Alpha</h2>
313
+ <h2 id="beta">Beta</h2>
314
+ </article>
315
+ <a id="lA" href="#alpha" lvt-spy-link>Alpha</a>
316
+ <a id="lB" href="#beta" lvt-spy-link>Beta</a>
317
+ `;
318
+ // alpha is visually BELOW the trigger; beta is visually ABOVE it
319
+ // (think: beta is a sticky header that latched to the top).
320
+ setRect(document.getElementById("alpha"), 400);
321
+ setRect(document.getElementById("beta"), 50);
322
+ (0, spy_1.setupSpy)(document.body);
323
+ // Beta is the last document-order target whose top is above the
324
+ // trigger, so it wins. With the old early-break this assertion
325
+ // would have failed (the iteration would have bailed on alpha).
326
+ expect(document.getElementById("lB").classList.contains("lvt-active")).toBe(true);
327
+ expect(document.getElementById("lA").classList.contains("lvt-active")).toBe(false);
328
+ });
329
+ it("teardownSpy(wrapper) preserves active class on links of surviving bindings", () => {
330
+ // Two independent spy containers, each with its own link. Tearing
331
+ // down one must NOT blank the other's active highlight — only
332
+ // links pointing to a torn-down target should be cleared. Without
333
+ // the surviving-id check, multi-instance setups would flicker
334
+ // every time a peer disconnected.
335
+ document.body.innerHTML = `
336
+ <article id="A" lvt-spy="h2">
337
+ <h2 id="alpha">Alpha</h2>
338
+ </article>
339
+ <article id="B" lvt-spy="h2">
340
+ <h2 id="beta">Beta</h2>
341
+ </article>
342
+ <a id="lA" href="#alpha" lvt-spy-link>A</a>
343
+ <a id="lB" href="#beta" lvt-spy-link>B</a>
344
+ `;
345
+ setRect(document.getElementById("alpha"), 50);
346
+ setRect(document.getElementById("beta"), 50);
347
+ (0, spy_1.setupSpy)(document.body);
348
+ expect(document.getElementById("lA").classList.contains("lvt-active")).toBe(true);
349
+ expect(document.getElementById("lB").classList.contains("lvt-active")).toBe(true);
350
+ // Tear down container A only.
351
+ (0, spy_1.teardownSpy)(document.getElementById("A"));
352
+ // lA's target was in A — it should lose lvt-active.
353
+ expect(document.getElementById("lA").classList.contains("lvt-active")).toBe(false);
354
+ // lB points to beta which lives in still-alive B — must keep its highlight.
355
+ expect(document.getElementById("lB").classList.contains("lvt-active")).toBe(true);
356
+ });
357
+ it("readMarginPx accepts unitless decimal values", () => {
358
+ // `String(parseFloat("200.0"))` is "200", not "200.0", so the
359
+ // identity check missed this — the regex grammar fixes it.
360
+ document.body.innerHTML = `
361
+ <article id="container" lvt-spy="h2" style="--lvt-spy-margin: 200.0;">
362
+ <h2 id="h2only">Above</h2>
363
+ </article>
364
+ <a id="L" href="#h2only" lvt-spy-link>Above</a>
365
+ `;
366
+ setRect(document.getElementById("h2only"), 150);
367
+ const warn = jest.spyOn(console, "warn").mockImplementation(() => { });
368
+ (0, spy_1.setupSpy)(document.body);
369
+ // 150 < 200 → active. If the regex misfired, the value would fall
370
+ // back to 25vh = 192, also above 150 — so to actually exercise the
371
+ // regex we also assert no fallback warning fired.
372
+ expect(document.getElementById("L").classList.contains("lvt-active")).toBe(true);
373
+ const unitWarns = warn.mock.calls.filter((args) => String(args[0]).includes("unsupported --lvt-spy-margin unit"));
374
+ expect(unitWarns).toHaveLength(0);
375
+ warn.mockRestore();
376
+ });
377
+ it("clears lvt-active on links whose target is removed in a morphdom update", () => {
378
+ // The existing 'morphdom re-attaches' case only covers ADDING a
379
+ // heading. Removing one used to leave the orphaned link with a
380
+ // stale lvt-active forever, because processContainer's detach()
381
+ // didn't clear classes. detach() now clears as part of its contract.
382
+ document.body.innerHTML = `
383
+ <article lvt-spy="h2">
384
+ <h2 id="keep">Keep</h2>
385
+ <h2 id="drop">Drop</h2>
386
+ </article>
387
+ <nav>
388
+ <a id="lKeep" href="#keep" lvt-spy-link>Keep</a>
389
+ <a id="lDrop" href="#drop" lvt-spy-link>Drop</a>
390
+ </nav>
391
+ `;
392
+ const keep = document.getElementById("keep");
393
+ const drop = document.getElementById("drop");
394
+ setRect(keep, 50);
395
+ setRect(drop, 80);
396
+ (0, spy_1.setupSpy)(document.body);
397
+ // Both above the trigger; drop is last in document order.
398
+ expect(document.getElementById("lDrop").classList.contains("lvt-active")).toBe(true);
399
+ // Morphdom-style removal: the second heading goes away.
400
+ drop.remove();
401
+ // setupSpy gets called again on each render — processContainer
402
+ // detects the new target set and re-attaches.
403
+ (0, spy_1.setupSpy)(document.body);
404
+ // The orphaned link must lose lvt-active.
405
+ expect(document.getElementById("lDrop").classList.contains("lvt-active")).toBe(false);
406
+ // Keep should now be the active one.
407
+ expect(document.getElementById("lKeep").classList.contains("lvt-active")).toBe(true);
408
+ });
409
+ it("re-attaches when target set changes (morphdom-style update)", () => {
410
+ const f = buildFixture();
411
+ setRect(f.h1, 50);
412
+ setRect(f.h2, 400);
413
+ setRect(f.h3, 800);
414
+ (0, spy_1.setupSpy)(document.body);
415
+ expect(f.linkA.classList.contains("lvt-active")).toBe(true);
416
+ // Simulate morphdom adding a new heading at the top.
417
+ const h0 = document.createElement("h1");
418
+ h0.id = "preamble";
419
+ setRect(h0, 10);
420
+ f.article.insertBefore(h0, f.article.firstChild);
421
+ setRect(f.h1, 300); // pushed down by new heading
422
+ // Add a corresponding link.
423
+ const linkZ = document.createElement("a");
424
+ linkZ.setAttribute("href", "#preamble");
425
+ linkZ.setAttribute("lvt-spy-link", "");
426
+ document.querySelector("nav").insertBefore(linkZ, f.linkA);
427
+ (0, spy_1.setupSpy)(document.body);
428
+ expect(linkZ.classList.contains("lvt-active")).toBe(true);
429
+ expect(f.linkA.classList.contains("lvt-active")).toBe(false);
430
+ });
431
+ });
432
+ //# sourceMappingURL=spy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spy.test.js","sourceRoot":"","sources":["../../tests/spy.test.ts"],"names":[],"mappings":";;AAAA,oCAAmD;AAEnD,+EAA+E;AAC/E,0EAA0E;AAC1E,qDAAqD;AACrD,SAAS,OAAO,CAAC,EAAW,EAAE,GAAW;IACtC,EAAU,CAAC,qBAAqB,GAAG,GAAG,EAAE,CAAC,CAAC;QACzC,GAAG;QACH,MAAM,EAAE,GAAG,GAAG,EAAE;QAChB,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,GAAG;QACV,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,EAAE;QACV,CAAC,EAAE,CAAC;QACJ,CAAC,EAAE,GAAG;QACN,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;KACnB,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,YAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAChC,YAAY,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC,kBAAkB,CAAC,CAAC,EAAE,EAAE,EAAE;YACpE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,YAAY,CAAC,MAAM,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,kEAAkE;QAClE,wCAAwC;QACxC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAA,iBAAW,GAAE,CAAC;QACd,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,SAAS,QAAQ;QACf,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,YAAY;QACnB,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;;;;;;;;KAczB,CAAC;QACF,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAE;YAC3C,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE;YACrC,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE;YACrC,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE;YACtC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAsB;YACzD,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAsB;YACzD,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAsB;SAC1D,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,qDAAqD;QACrD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAEnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,uDAAuD;QACvD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7D,qCAAqC;QACrC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,QAAQ,EAAE,CAAC;QAEX,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,mCAAmC;QACnC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEpB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,4BAA4B;QAC5B,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,qEAAqE;QACrE,uEAAuE;QACvE,kCAAkC;QAClC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAElE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;KAGzB,CAAC;QACF,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEf,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAA,iBAAW,GAAE,CAAC;QACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7D,uEAAuE;QACvE,oDAAoD;QACpD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1C,QAAQ,EAAE,CAAC;QACX,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,oEAAoE;QACpE,gEAAgE;QAChE,oEAAoE;QACpE,kEAAkE;QAClE,gEAAgE;QAChE,2BAA2B;QAC3B,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;;;KASzB,CAAC;QACF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAE,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAE,CAAC;QACpD,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEpB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,oEAAoE;QACpE,IAAA,iBAAW,EAAC,OAAO,CAAC,CAAC;QACrB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,6DAA6D;QAC7D,oEAAoE;QACpE,iEAAiE;QACjE,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;;KAQzB,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC;QAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,EAAE,EAAE,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,kEAAkE;QAClE,6DAA6D;QAC7D,mEAAmE;QACnE,gEAAgE;QAChE,kEAAkE;QAClE,yCAAyC;QACzC,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAA,iBAAW,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7D,kEAAkE;QAClE,+DAA+D;QAC/D,yDAAyD;QACzD,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;KAKzB,CAAC;QACF,MAAM,CAAC,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC;QAC3C,gEAAgE;QAChE,kEAAkE;QAClE,mEAAmE;QACnE,wCAAwC;QACxC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEtE,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;KAKzB,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,EAAE,GAAG,CAAC,CAAC;QACjD,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,sBAAsB;QACtB,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;KAMzB,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEtE,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,yDAAyD;QACzD,mEAAmE;QACnE,+DAA+D;QAC/D,6DAA6D;QAC7D,2BAA2B;QAC3B,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;KAMzB,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEtE,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC1C,CAAC,MAAM,CAAC;QACT,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/B,kEAAkE;QAClE,8DAA8D;QAC9D,2DAA2D;QAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QACd,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAElB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACtD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAC1C,CAAC,MAAM,CAAC;QACT,gEAAgE;QAChE,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,oEAAoE;QACpE,gEAAgE;QAChE,4DAA4D;QAC5D,iEAAiE;QACjE,8DAA8D;QAC9D,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;KAOzB,CAAC;QACF,iEAAiE;QACjE,4DAA4D;QAC5D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE,EAAE,GAAG,CAAC,CAAC;QAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,kEAAkE;QAClE,8DAA8D;QAC9D,kEAAkE;QAClE,8DAA8D;QAC9D,kCAAkC;QAClC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;;;KASzB,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,EAAE,EAAE,CAAC,CAAC;QAC9C,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnF,8BAA8B;QAC9B,IAAA,iBAAW,EAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC,CAAC;QAE3C,oDAAoD;QACpD,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpF,4EAA4E;QAC5E,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,8DAA8D;QAC9D,2DAA2D;QAC3D,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;KAKzB,CAAC;QACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtE,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,kEAAkE;QAClE,mEAAmE;QACnE,kDAAkD;QAClD,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAChD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mCAAmC,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,gEAAgE;QAChE,+DAA+D;QAC/D,gEAAgE;QAChE,qEAAqE;QACrE,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;;;;;;KASzB,CAAC;QACF,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,0DAA0D;QAC1D,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtF,wDAAwD;QACxD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,+DAA+D;QAC/D,8CAA8C;QAC9C,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAExB,0CAA0C;QAC1C,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvF,qCAAqC;QACrC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAClB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5D,qDAAqD;QACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC;QACnB,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAChB,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,6BAA6B;QAEjD,4BAA4B;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAE5D,IAAA,cAAQ,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livetemplate/client",
3
- "version": "0.9.2",
3
+ "version": "0.11.4",
4
4
  "description": "TypeScript client for LiveTemplate tree-based updates",
5
5
  "main": "dist/livetemplate-client.js",
6
6
  "browser": "dist/livetemplate-client.browser.js",