@livetemplate/client 0.4.0 → 0.4.1

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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=directives.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directives.test.d.ts","sourceRoot":"","sources":["../../tests/directives.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const directives_1 = require("../dom/directives");
4
+ describe("handleScrollDirectives", () => {
5
+ beforeEach(() => {
6
+ document.body.innerHTML = "";
7
+ jest.spyOn(console, "warn").mockImplementation(() => { });
8
+ });
9
+ afterEach(() => {
10
+ jest.restoreAllMocks();
11
+ });
12
+ it("scrolls element to bottom when lvt-scroll='bottom'", () => {
13
+ document.body.innerHTML = `
14
+ <div id="container" lvt-scroll="bottom" style="height: 100px; overflow: auto;">
15
+ <div style="height: 500px;">Content</div>
16
+ </div>
17
+ `;
18
+ const container = document.getElementById("container");
19
+ Object.defineProperty(container, "scrollHeight", { value: 500, configurable: true });
20
+ const scrollToSpy = jest.fn();
21
+ container.scrollTo = scrollToSpy;
22
+ (0, directives_1.handleScrollDirectives)(document.body);
23
+ expect(scrollToSpy).toHaveBeenCalledWith({
24
+ top: 500,
25
+ behavior: "auto",
26
+ });
27
+ });
28
+ it("scrolls to top when lvt-scroll='top'", () => {
29
+ document.body.innerHTML = `<div id="container" lvt-scroll="top"></div>`;
30
+ const container = document.getElementById("container");
31
+ const scrollToSpy = jest.fn();
32
+ container.scrollTo = scrollToSpy;
33
+ (0, directives_1.handleScrollDirectives)(document.body);
34
+ expect(scrollToSpy).toHaveBeenCalledWith({
35
+ top: 0,
36
+ behavior: "auto",
37
+ });
38
+ });
39
+ it("respects lvt-scroll-behavior attribute", () => {
40
+ document.body.innerHTML = `<div id="container" lvt-scroll="top" lvt-scroll-behavior="smooth"></div>`;
41
+ const container = document.getElementById("container");
42
+ const scrollToSpy = jest.fn();
43
+ container.scrollTo = scrollToSpy;
44
+ (0, directives_1.handleScrollDirectives)(document.body);
45
+ expect(scrollToSpy).toHaveBeenCalledWith({
46
+ top: 0,
47
+ behavior: "smooth",
48
+ });
49
+ });
50
+ it("sticky bottom only scrolls when near bottom", () => {
51
+ document.body.innerHTML = `<div id="container" lvt-scroll="bottom-sticky" lvt-scroll-threshold="50"></div>`;
52
+ const container = document.getElementById("container");
53
+ Object.defineProperty(container, "scrollHeight", { value: 500, configurable: true });
54
+ Object.defineProperty(container, "scrollTop", { value: 400, configurable: true });
55
+ Object.defineProperty(container, "clientHeight", { value: 100, configurable: true });
56
+ const scrollToSpy = jest.fn();
57
+ container.scrollTo = scrollToSpy;
58
+ (0, directives_1.handleScrollDirectives)(document.body);
59
+ // scrollHeight (500) - scrollTop (400) - clientHeight (100) = 0, which is <= threshold (50)
60
+ expect(scrollToSpy).toHaveBeenCalled();
61
+ });
62
+ it("sticky bottom does not scroll when far from bottom", () => {
63
+ document.body.innerHTML = `<div id="container" lvt-scroll="bottom-sticky" lvt-scroll-threshold="50"></div>`;
64
+ const container = document.getElementById("container");
65
+ Object.defineProperty(container, "scrollHeight", { value: 500, configurable: true });
66
+ Object.defineProperty(container, "scrollTop", { value: 0, configurable: true });
67
+ Object.defineProperty(container, "clientHeight", { value: 100, configurable: true });
68
+ const scrollToSpy = jest.fn();
69
+ container.scrollTo = scrollToSpy;
70
+ (0, directives_1.handleScrollDirectives)(document.body);
71
+ // scrollHeight (500) - scrollTop (0) - clientHeight (100) = 400, which is > threshold (50)
72
+ expect(scrollToSpy).not.toHaveBeenCalled();
73
+ });
74
+ it("does nothing for lvt-scroll='preserve'", () => {
75
+ document.body.innerHTML = `<div id="container" lvt-scroll="preserve"></div>`;
76
+ const container = document.getElementById("container");
77
+ const scrollToSpy = jest.fn();
78
+ container.scrollTo = scrollToSpy;
79
+ (0, directives_1.handleScrollDirectives)(document.body);
80
+ expect(scrollToSpy).not.toHaveBeenCalled();
81
+ });
82
+ it("warns on unknown scroll mode", () => {
83
+ document.body.innerHTML = `<div id="container" lvt-scroll="unknown-mode"></div>`;
84
+ (0, directives_1.handleScrollDirectives)(document.body);
85
+ expect(console.warn).toHaveBeenCalledWith("Unknown lvt-scroll mode: unknown-mode");
86
+ });
87
+ it("handles empty lvt-scroll attribute", () => {
88
+ document.body.innerHTML = `<div id="container" lvt-scroll=""></div>`;
89
+ const container = document.getElementById("container");
90
+ const scrollToSpy = jest.fn();
91
+ container.scrollTo = scrollToSpy;
92
+ (0, directives_1.handleScrollDirectives)(document.body);
93
+ expect(scrollToSpy).not.toHaveBeenCalled();
94
+ });
95
+ });
96
+ describe("handleHighlightDirectives", () => {
97
+ beforeEach(() => {
98
+ document.body.innerHTML = "";
99
+ jest.useFakeTimers();
100
+ });
101
+ afterEach(() => {
102
+ jest.useRealTimers();
103
+ });
104
+ it("applies highlight color temporarily", () => {
105
+ document.body.innerHTML = `<div id="target" lvt-highlight="flash"></div>`;
106
+ const target = document.getElementById("target");
107
+ (0, directives_1.handleHighlightDirectives)(document.body);
108
+ expect(target.style.backgroundColor).toBe("rgb(255, 193, 7)"); // #ffc107
109
+ expect(target.style.transition).toContain("background-color");
110
+ });
111
+ it("respects custom lvt-highlight-duration", () => {
112
+ document.body.innerHTML = `<div id="target" lvt-highlight="flash" lvt-highlight-duration="1000"></div>`;
113
+ const target = document.getElementById("target");
114
+ (0, directives_1.handleHighlightDirectives)(document.body);
115
+ expect(target.style.transition).toContain("1000ms");
116
+ });
117
+ it("respects custom lvt-highlight-color", () => {
118
+ document.body.innerHTML = `<div id="target" lvt-highlight="flash" lvt-highlight-color="#ff0000"></div>`;
119
+ const target = document.getElementById("target");
120
+ (0, directives_1.handleHighlightDirectives)(document.body);
121
+ expect(target.style.backgroundColor).toBe("rgb(255, 0, 0)");
122
+ });
123
+ it("restores original background after highlight", () => {
124
+ document.body.innerHTML = `<div id="target" lvt-highlight="flash" lvt-highlight-duration="500" style="background-color: blue;"></div>`;
125
+ const target = document.getElementById("target");
126
+ const originalBg = target.style.backgroundColor;
127
+ (0, directives_1.handleHighlightDirectives)(document.body);
128
+ // After 50ms, should start restoring
129
+ jest.advanceTimersByTime(50);
130
+ expect(target.style.backgroundColor).toBe(originalBg);
131
+ // After duration, transition should be restored
132
+ jest.advanceTimersByTime(500);
133
+ });
134
+ it("handles empty lvt-highlight attribute", () => {
135
+ document.body.innerHTML = `<div id="target" lvt-highlight=""></div>`;
136
+ const target = document.getElementById("target");
137
+ const originalBg = target.style.backgroundColor;
138
+ (0, directives_1.handleHighlightDirectives)(document.body);
139
+ expect(target.style.backgroundColor).toBe(originalBg);
140
+ });
141
+ });
142
+ describe("handleAnimateDirectives", () => {
143
+ beforeEach(() => {
144
+ document.body.innerHTML = "";
145
+ // Clean up any injected styles
146
+ const existingStyle = document.getElementById("lvt-animate-styles");
147
+ if (existingStyle)
148
+ existingStyle.remove();
149
+ jest.spyOn(console, "warn").mockImplementation(() => { });
150
+ });
151
+ afterEach(() => {
152
+ jest.restoreAllMocks();
153
+ });
154
+ it("applies fade animation", () => {
155
+ document.body.innerHTML = `<div id="target" lvt-animate="fade"></div>`;
156
+ const target = document.getElementById("target");
157
+ (0, directives_1.handleAnimateDirectives)(document.body);
158
+ expect(target.style.animation).toContain("lvt-fade-in");
159
+ });
160
+ it("applies slide animation", () => {
161
+ document.body.innerHTML = `<div id="target" lvt-animate="slide"></div>`;
162
+ const target = document.getElementById("target");
163
+ (0, directives_1.handleAnimateDirectives)(document.body);
164
+ expect(target.style.animation).toContain("lvt-slide-in");
165
+ });
166
+ it("applies scale animation", () => {
167
+ document.body.innerHTML = `<div id="target" lvt-animate="scale"></div>`;
168
+ const target = document.getElementById("target");
169
+ (0, directives_1.handleAnimateDirectives)(document.body);
170
+ expect(target.style.animation).toContain("lvt-scale-in");
171
+ });
172
+ it("respects custom animation duration", () => {
173
+ document.body.innerHTML = `<div id="target" lvt-animate="fade" lvt-animate-duration="1000"></div>`;
174
+ const target = document.getElementById("target");
175
+ (0, directives_1.handleAnimateDirectives)(document.body);
176
+ expect(target.style.getPropertyValue("--lvt-animate-duration")).toBe("1000ms");
177
+ });
178
+ it("clears animation on animationend", () => {
179
+ document.body.innerHTML = `<div id="target" lvt-animate="fade"></div>`;
180
+ const target = document.getElementById("target");
181
+ (0, directives_1.handleAnimateDirectives)(document.body);
182
+ expect(target.style.animation).toContain("lvt-fade-in");
183
+ target.dispatchEvent(new Event("animationend"));
184
+ expect(target.style.animation).toBe("");
185
+ });
186
+ it("injects CSS keyframes only once", () => {
187
+ document.body.innerHTML = `
188
+ <div lvt-animate="fade"></div>
189
+ <div lvt-animate="slide"></div>
190
+ `;
191
+ (0, directives_1.handleAnimateDirectives)(document.body);
192
+ (0, directives_1.handleAnimateDirectives)(document.body);
193
+ const styleElements = document.querySelectorAll("#lvt-animate-styles");
194
+ expect(styleElements.length).toBe(1);
195
+ });
196
+ it("warns on unknown animation mode", () => {
197
+ document.body.innerHTML = `<div id="target" lvt-animate="unknown"></div>`;
198
+ (0, directives_1.handleAnimateDirectives)(document.body);
199
+ expect(console.warn).toHaveBeenCalledWith("Unknown lvt-animate mode: unknown");
200
+ });
201
+ it("handles empty lvt-animate attribute", () => {
202
+ document.body.innerHTML = `<div id="target" lvt-animate=""></div>`;
203
+ const target = document.getElementById("target");
204
+ (0, directives_1.handleAnimateDirectives)(document.body);
205
+ expect(target.style.animation).toBe("");
206
+ });
207
+ });
208
+ //# sourceMappingURL=directives.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directives.test.js","sourceRoot":"","sources":["../../tests/directives.test.ts"],"names":[],"mappings":";;AAAA,kDAI2B;AAE3B,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;;KAIzB,CAAC;QACF,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAErF,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;YACvC,GAAG,EAAE,GAAG;YACR,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6CAA6C,CAAC;QACxE,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;YACvC,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,0EAA0E,CAAC;QACrG,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC;YACvC,GAAG,EAAE,CAAC;YACN,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,iFAAiF,CAAC;QAC5G,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAErF,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,4FAA4F;QAC5F,MAAM,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,iFAAiF,CAAC;QAC5G,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QAErF,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,2FAA2F;QAC3F,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,kDAAkD,CAAC;QAC7E,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,sDAAsD,CAAC;QAEjF,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,uCAAuC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,0CAA0C,CAAC;QACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAE,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC;QAEjC,IAAA,mCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,+CAA+C,CAAC;QAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,sCAAyB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU;QACzE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6EAA6E,CAAC;QACxG,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,sCAAyB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6EAA6E,CAAC;QACxG,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,sCAAyB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,4GAA4G,CAAC;QACvI,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;QAEhD,IAAA,sCAAyB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzC,qCAAqC;QACrC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEtD,gDAAgD;QAChD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,0CAA0C,CAAC;QACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;QAEhD,IAAA,sCAAyB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAC7B,+BAA+B;QAC/B,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACpE,IAAI,aAAa;YAAE,aAAa,CAAC,MAAM,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,4CAA4C,CAAC;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6CAA6C,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,6CAA6C,CAAC;QACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,wEAAwE,CAAC;QACnG,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,4CAA4C,CAAC;QACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAExD,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG;;;KAGzB,CAAC;QAEF,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;QACvE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,+CAA+C,CAAC;QAE1E,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,mCAAmC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,wCAAwC,CAAC;QACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAE,CAAC;QAElD,IAAA,oCAAuB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEvC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loading-indicator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-indicator.test.d.ts","sourceRoot":"","sources":["../../tests/loading-indicator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const loading_indicator_1 = require("../dom/loading-indicator");
4
+ describe("LoadingIndicator", () => {
5
+ let indicator;
6
+ beforeEach(() => {
7
+ document.body.innerHTML = "";
8
+ document.head.innerHTML = "";
9
+ indicator = new loading_indicator_1.LoadingIndicator();
10
+ });
11
+ describe("show", () => {
12
+ it("creates loading bar element", () => {
13
+ indicator.show();
14
+ const bars = document.body.querySelectorAll("div");
15
+ expect(bars.length).toBe(1);
16
+ const bar = bars[0];
17
+ expect(bar.style.position).toBe("fixed");
18
+ expect(bar.style.top).toBe("0px");
19
+ expect(bar.style.zIndex).toBe("9999");
20
+ });
21
+ it("is idempotent - does not create duplicate bars", () => {
22
+ indicator.show();
23
+ indicator.show();
24
+ indicator.show();
25
+ const bars = document.body.querySelectorAll("div");
26
+ expect(bars.length).toBe(1);
27
+ });
28
+ it("injects CSS keyframes only once", () => {
29
+ indicator.show();
30
+ indicator.hide();
31
+ indicator.show();
32
+ const styleElements = document.querySelectorAll("#lvt-loading-styles");
33
+ expect(styleElements.length).toBe(1);
34
+ });
35
+ it("inserts bar as first child of body", () => {
36
+ document.body.innerHTML = '<div id="existing">Existing content</div>';
37
+ indicator.show();
38
+ expect(document.body.firstChild).not.toBe(document.getElementById("existing"));
39
+ });
40
+ });
41
+ describe("hide", () => {
42
+ it("removes the bar", () => {
43
+ indicator.show();
44
+ expect(document.body.querySelectorAll("div").length).toBe(1);
45
+ indicator.hide();
46
+ expect(document.body.querySelectorAll("div").length).toBe(0);
47
+ });
48
+ it("is safe to call when no bar exists", () => {
49
+ expect(() => indicator.hide()).not.toThrow();
50
+ });
51
+ it("allows show to create a new bar after hide", () => {
52
+ indicator.show();
53
+ indicator.hide();
54
+ indicator.show();
55
+ const bars = document.body.querySelectorAll("div");
56
+ expect(bars.length).toBe(1);
57
+ });
58
+ });
59
+ });
60
+ //# sourceMappingURL=loading-indicator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-indicator.test.js","sourceRoot":"","sources":["../../tests/loading-indicator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../tests/logger.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logger_1 = require("../utils/logger");
4
+ describe("Logger", () => {
5
+ let mockConsole;
6
+ beforeEach(() => {
7
+ mockConsole = {
8
+ error: jest.fn(),
9
+ warn: jest.fn(),
10
+ info: jest.fn(),
11
+ debug: jest.fn(),
12
+ log: jest.fn(),
13
+ };
14
+ });
15
+ describe("createLogger", () => {
16
+ it("creates logger with default options", () => {
17
+ const logger = (0, logger_1.createLogger)({ sink: mockConsole });
18
+ expect(logger.getLevel()).toBe("info");
19
+ });
20
+ it("respects custom log level", () => {
21
+ const logger = (0, logger_1.createLogger)({
22
+ level: "debug",
23
+ sink: mockConsole,
24
+ });
25
+ expect(logger.getLevel()).toBe("debug");
26
+ });
27
+ it("accepts scope as string", () => {
28
+ const logger = (0, logger_1.createLogger)({
29
+ scope: "TestScope",
30
+ sink: mockConsole,
31
+ });
32
+ logger.info("test message");
33
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate:TestScope]", "test message");
34
+ });
35
+ it("accepts scope as array", () => {
36
+ const logger = (0, logger_1.createLogger)({
37
+ scope: ["Parent", "Child"],
38
+ sink: mockConsole,
39
+ });
40
+ logger.info("test message");
41
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate:Parent:Child]", "test message");
42
+ });
43
+ });
44
+ describe("log level filtering", () => {
45
+ it("silent level suppresses all logs", () => {
46
+ const logger = (0, logger_1.createLogger)({
47
+ level: "silent",
48
+ sink: mockConsole,
49
+ });
50
+ logger.error("error");
51
+ logger.warn("warn");
52
+ logger.info("info");
53
+ logger.debug("debug");
54
+ expect(mockConsole.error).not.toHaveBeenCalled();
55
+ expect(mockConsole.warn).not.toHaveBeenCalled();
56
+ expect(mockConsole.info).not.toHaveBeenCalled();
57
+ expect(mockConsole.debug).not.toHaveBeenCalled();
58
+ });
59
+ it("error level only shows errors", () => {
60
+ const logger = (0, logger_1.createLogger)({
61
+ level: "error",
62
+ sink: mockConsole,
63
+ });
64
+ logger.error("error");
65
+ logger.warn("warn");
66
+ logger.info("info");
67
+ logger.debug("debug");
68
+ expect(mockConsole.error).toHaveBeenCalledTimes(1);
69
+ expect(mockConsole.warn).not.toHaveBeenCalled();
70
+ expect(mockConsole.info).not.toHaveBeenCalled();
71
+ expect(mockConsole.debug).not.toHaveBeenCalled();
72
+ });
73
+ it("warn level shows errors and warnings", () => {
74
+ const logger = (0, logger_1.createLogger)({
75
+ level: "warn",
76
+ sink: mockConsole,
77
+ });
78
+ logger.error("error");
79
+ logger.warn("warn");
80
+ logger.info("info");
81
+ logger.debug("debug");
82
+ expect(mockConsole.error).toHaveBeenCalledTimes(1);
83
+ expect(mockConsole.warn).toHaveBeenCalledTimes(1);
84
+ expect(mockConsole.info).not.toHaveBeenCalled();
85
+ expect(mockConsole.debug).not.toHaveBeenCalled();
86
+ });
87
+ it("info level shows errors, warnings, and info", () => {
88
+ const logger = (0, logger_1.createLogger)({
89
+ level: "info",
90
+ sink: mockConsole,
91
+ });
92
+ logger.error("error");
93
+ logger.warn("warn");
94
+ logger.info("info");
95
+ logger.debug("debug");
96
+ expect(mockConsole.error).toHaveBeenCalledTimes(1);
97
+ expect(mockConsole.warn).toHaveBeenCalledTimes(1);
98
+ expect(mockConsole.info).toHaveBeenCalledTimes(1);
99
+ expect(mockConsole.debug).not.toHaveBeenCalled();
100
+ });
101
+ it("debug level shows all logs", () => {
102
+ const logger = (0, logger_1.createLogger)({
103
+ level: "debug",
104
+ sink: mockConsole,
105
+ });
106
+ logger.error("error");
107
+ logger.warn("warn");
108
+ logger.info("info");
109
+ logger.debug("debug");
110
+ expect(mockConsole.error).toHaveBeenCalledTimes(1);
111
+ expect(mockConsole.warn).toHaveBeenCalledTimes(1);
112
+ expect(mockConsole.info).toHaveBeenCalledTimes(1);
113
+ expect(mockConsole.debug).toHaveBeenCalledTimes(1);
114
+ });
115
+ });
116
+ describe("setLevel", () => {
117
+ it("changes log level dynamically", () => {
118
+ const logger = (0, logger_1.createLogger)({
119
+ level: "silent",
120
+ sink: mockConsole,
121
+ });
122
+ logger.info("should not appear");
123
+ expect(mockConsole.info).not.toHaveBeenCalled();
124
+ logger.setLevel("info");
125
+ logger.info("should appear");
126
+ expect(mockConsole.info).toHaveBeenCalledTimes(1);
127
+ });
128
+ });
129
+ describe("child", () => {
130
+ it("creates scoped logger that shares state", () => {
131
+ const parent = (0, logger_1.createLogger)({
132
+ level: "info",
133
+ sink: mockConsole,
134
+ });
135
+ const child = parent.child("ChildScope");
136
+ child.info("child message");
137
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate:ChildScope]", "child message");
138
+ });
139
+ it("child logger inherits level changes from parent", () => {
140
+ const parent = (0, logger_1.createLogger)({
141
+ level: "silent",
142
+ sink: mockConsole,
143
+ });
144
+ const child = parent.child("Child");
145
+ child.info("should not appear");
146
+ expect(mockConsole.info).not.toHaveBeenCalled();
147
+ parent.setLevel("info");
148
+ child.info("should appear");
149
+ expect(mockConsole.info).toHaveBeenCalledTimes(1);
150
+ });
151
+ it("supports multiple levels of nesting", () => {
152
+ const root = (0, logger_1.createLogger)({
153
+ scope: "Root",
154
+ sink: mockConsole,
155
+ });
156
+ const level1 = root.child("Level1");
157
+ const level2 = level1.child("Level2");
158
+ level2.info("deep message");
159
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate:Root:Level1:Level2]", "deep message");
160
+ });
161
+ });
162
+ describe("isDebugEnabled", () => {
163
+ it("returns true when level is debug", () => {
164
+ const logger = (0, logger_1.createLogger)({
165
+ level: "debug",
166
+ sink: mockConsole,
167
+ });
168
+ expect(logger.isDebugEnabled()).toBe(true);
169
+ });
170
+ it("returns false when level is info or lower", () => {
171
+ const logger = (0, logger_1.createLogger)({
172
+ level: "info",
173
+ sink: mockConsole,
174
+ });
175
+ expect(logger.isDebugEnabled()).toBe(false);
176
+ });
177
+ });
178
+ describe("prefix formatting", () => {
179
+ it("uses default prefix when no scope provided", () => {
180
+ const logger = (0, logger_1.createLogger)({ sink: mockConsole });
181
+ logger.info("test");
182
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate]", "test");
183
+ });
184
+ it("includes scope in prefix", () => {
185
+ const logger = (0, logger_1.createLogger)({
186
+ scope: "MyScope",
187
+ sink: mockConsole,
188
+ });
189
+ logger.info("test");
190
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate:MyScope]", "test");
191
+ });
192
+ });
193
+ describe("multiple arguments", () => {
194
+ it("passes all arguments to console method", () => {
195
+ const logger = (0, logger_1.createLogger)({ sink: mockConsole });
196
+ logger.info("message", { data: 123 }, [1, 2, 3]);
197
+ expect(mockConsole.info).toHaveBeenCalledWith("[LiveTemplate]", "message", { data: 123 }, [1, 2, 3]);
198
+ });
199
+ });
200
+ });
201
+ //# sourceMappingURL=logger.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../tests/logger.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=observer-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer-manager.test.d.ts","sourceRoot":"","sources":["../../tests/observer-manager.test.ts"],"names":[],"mappings":""}