rask-ui 0.2.4 → 0.2.6

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 (195) hide show
  1. package/dist/vdom/AbstractVNode.d.ts +24 -2
  2. package/dist/vdom/AbstractVNode.d.ts.map +1 -1
  3. package/dist/vdom/AbstractVNode.js +153 -13
  4. package/dist/vdom/ComponentVNode.d.ts +2 -2
  5. package/dist/vdom/ComponentVNode.d.ts.map +1 -1
  6. package/dist/vdom/ComponentVNode.js +11 -13
  7. package/dist/vdom/ElementVNode.d.ts +2 -8
  8. package/dist/vdom/ElementVNode.d.ts.map +1 -1
  9. package/dist/vdom/ElementVNode.js +15 -32
  10. package/dist/vdom/FragmentVNode.d.ts +2 -2
  11. package/dist/vdom/FragmentVNode.d.ts.map +1 -1
  12. package/dist/vdom/FragmentVNode.js +12 -3
  13. package/dist/vdom/RootVNode.d.ts +2 -2
  14. package/dist/vdom/RootVNode.d.ts.map +1 -1
  15. package/dist/vdom/RootVNode.js +7 -5
  16. package/package.json +1 -1
  17. package/dist/component.d.ts +0 -38
  18. package/dist/component.d.ts.map +0 -1
  19. package/dist/component.js +0 -130
  20. package/dist/context.d.ts +0 -5
  21. package/dist/context.d.ts.map +0 -1
  22. package/dist/context.js +0 -29
  23. package/dist/createAsync.test.d.ts +0 -2
  24. package/dist/createAsync.test.d.ts.map +0 -1
  25. package/dist/createAsync.test.js +0 -110
  26. package/dist/createAsyncState.d.ts +0 -16
  27. package/dist/createAsyncState.d.ts.map +0 -1
  28. package/dist/createAsyncState.js +0 -24
  29. package/dist/createContext.test.d.ts +0 -2
  30. package/dist/createContext.test.d.ts.map +0 -1
  31. package/dist/createContext.test.js +0 -136
  32. package/dist/createMutation.test.d.ts +0 -2
  33. package/dist/createMutation.test.d.ts.map +0 -1
  34. package/dist/createMutation.test.js +0 -168
  35. package/dist/createQuery.test.d.ts +0 -2
  36. package/dist/createQuery.test.d.ts.map +0 -1
  37. package/dist/createQuery.test.js +0 -156
  38. package/dist/createRef.test.d.ts +0 -2
  39. package/dist/createRef.test.d.ts.map +0 -1
  40. package/dist/createRef.test.js +0 -80
  41. package/dist/createState.test.d.ts +0 -2
  42. package/dist/createState.test.d.ts.map +0 -1
  43. package/dist/createState.test.js +0 -111
  44. package/dist/createView.test.d.ts +0 -2
  45. package/dist/createView.test.d.ts.map +0 -1
  46. package/dist/createView.test.js +0 -203
  47. package/dist/error.test.d.ts +0 -2
  48. package/dist/error.test.d.ts.map +0 -1
  49. package/dist/error.test.js +0 -144
  50. package/dist/integration.test.d.ts +0 -2
  51. package/dist/integration.test.d.ts.map +0 -1
  52. package/dist/integration.test.js +0 -155
  53. package/dist/jsx.d.ts.map +0 -1
  54. package/dist/jsx.js +0 -42
  55. package/dist/observation.test.d.ts +0 -2
  56. package/dist/observation.test.d.ts.map +0 -1
  57. package/dist/observation.test.js +0 -113
  58. package/dist/render-test.d.ts +0 -2
  59. package/dist/render-test.d.ts.map +0 -1
  60. package/dist/render-test.js +0 -21
  61. package/dist/render.d.ts +0 -7
  62. package/dist/render.d.ts.map +0 -1
  63. package/dist/render.js +0 -77
  64. package/dist/suspense.d.ts +0 -25
  65. package/dist/suspense.d.ts.map +0 -1
  66. package/dist/suspense.js +0 -97
  67. package/dist/tests/class.test.d.ts +0 -2
  68. package/dist/tests/class.test.d.ts.map +0 -1
  69. package/dist/tests/class.test.js +0 -185
  70. package/dist/tests/complex-rendering.test.d.ts +0 -2
  71. package/dist/tests/complex-rendering.test.d.ts.map +0 -1
  72. package/dist/tests/complex-rendering.test.js +0 -400
  73. package/dist/tests/component.cleanup.test.d.ts +0 -2
  74. package/dist/tests/component.cleanup.test.d.ts.map +0 -1
  75. package/dist/tests/component.cleanup.test.js +0 -325
  76. package/dist/tests/component.counter.test.d.ts +0 -2
  77. package/dist/tests/component.counter.test.d.ts.map +0 -1
  78. package/dist/tests/component.counter.test.js +0 -124
  79. package/dist/tests/component.interaction.test.d.ts +0 -2
  80. package/dist/tests/component.interaction.test.d.ts.map +0 -1
  81. package/dist/tests/component.interaction.test.js +0 -73
  82. package/dist/tests/component.props.test.d.ts +0 -2
  83. package/dist/tests/component.props.test.d.ts.map +0 -1
  84. package/dist/tests/component.props.test.js +0 -334
  85. package/dist/tests/component.return-types.test.d.ts +0 -2
  86. package/dist/tests/component.return-types.test.d.ts.map +0 -1
  87. package/dist/tests/component.return-types.test.js +0 -357
  88. package/dist/tests/component.state.test.d.ts +0 -2
  89. package/dist/tests/component.state.test.d.ts.map +0 -1
  90. package/dist/tests/component.state.test.js +0 -135
  91. package/dist/tests/component.test.d.ts +0 -2
  92. package/dist/tests/component.test.d.ts.map +0 -1
  93. package/dist/tests/component.test.js +0 -63
  94. package/dist/tests/createAsync.test.d.ts +0 -2
  95. package/dist/tests/createAsync.test.d.ts.map +0 -1
  96. package/dist/tests/createAsync.test.js +0 -110
  97. package/dist/tests/createContext.test.d.ts +0 -2
  98. package/dist/tests/createContext.test.d.ts.map +0 -1
  99. package/dist/tests/createContext.test.js +0 -141
  100. package/dist/tests/createMutation.test.d.ts +0 -2
  101. package/dist/tests/createMutation.test.d.ts.map +0 -1
  102. package/dist/tests/createMutation.test.js +0 -168
  103. package/dist/tests/createQuery.test.d.ts +0 -2
  104. package/dist/tests/createQuery.test.d.ts.map +0 -1
  105. package/dist/tests/createQuery.test.js +0 -156
  106. package/dist/tests/createRef.test.d.ts +0 -2
  107. package/dist/tests/createRef.test.d.ts.map +0 -1
  108. package/dist/tests/createRef.test.js +0 -84
  109. package/dist/tests/createState.test.d.ts +0 -2
  110. package/dist/tests/createState.test.d.ts.map +0 -1
  111. package/dist/tests/createState.test.js +0 -103
  112. package/dist/tests/createView.test.d.ts +0 -2
  113. package/dist/tests/createView.test.d.ts.map +0 -1
  114. package/dist/tests/createView.test.js +0 -203
  115. package/dist/tests/edge-cases.test.d.ts +0 -2
  116. package/dist/tests/edge-cases.test.d.ts.map +0 -1
  117. package/dist/tests/edge-cases.test.js +0 -637
  118. package/dist/tests/error-no-boundary.test.d.ts +0 -2
  119. package/dist/tests/error-no-boundary.test.d.ts.map +0 -1
  120. package/dist/tests/error-no-boundary.test.js +0 -174
  121. package/dist/tests/error.test.d.ts +0 -2
  122. package/dist/tests/error.test.d.ts.map +0 -1
  123. package/dist/tests/error.test.js +0 -199
  124. package/dist/tests/fragment.test.d.ts +0 -2
  125. package/dist/tests/fragment.test.d.ts.map +0 -1
  126. package/dist/tests/fragment.test.js +0 -618
  127. package/dist/tests/integration.test.d.ts +0 -2
  128. package/dist/tests/integration.test.d.ts.map +0 -1
  129. package/dist/tests/integration.test.js +0 -192
  130. package/dist/tests/keys.test.d.ts +0 -2
  131. package/dist/tests/keys.test.d.ts.map +0 -1
  132. package/dist/tests/keys.test.js +0 -293
  133. package/dist/tests/mount.test.d.ts +0 -2
  134. package/dist/tests/mount.test.d.ts.map +0 -1
  135. package/dist/tests/mount.test.js +0 -91
  136. package/dist/tests/observation.test.d.ts +0 -2
  137. package/dist/tests/observation.test.d.ts.map +0 -1
  138. package/dist/tests/observation.test.js +0 -113
  139. package/dist/tests/patch.test.d.ts +0 -2
  140. package/dist/tests/patch.test.d.ts.map +0 -1
  141. package/dist/tests/patch.test.js +0 -498
  142. package/dist/tests/patchChildren.test.d.ts +0 -2
  143. package/dist/tests/patchChildren.test.d.ts.map +0 -1
  144. package/dist/tests/patchChildren.test.js +0 -387
  145. package/dist/tests/primitives.test.d.ts +0 -2
  146. package/dist/tests/primitives.test.d.ts.map +0 -1
  147. package/dist/tests/primitives.test.js +0 -132
  148. package/dist/vdom/class.test.d.ts +0 -2
  149. package/dist/vdom/class.test.d.ts.map +0 -1
  150. package/dist/vdom/class.test.js +0 -143
  151. package/dist/vdom/complex-rendering.test.d.ts +0 -2
  152. package/dist/vdom/complex-rendering.test.d.ts.map +0 -1
  153. package/dist/vdom/complex-rendering.test.js +0 -400
  154. package/dist/vdom/component.cleanup.test.d.ts +0 -2
  155. package/dist/vdom/component.cleanup.test.d.ts.map +0 -1
  156. package/dist/vdom/component.cleanup.test.js +0 -323
  157. package/dist/vdom/component.counter.test.d.ts +0 -2
  158. package/dist/vdom/component.counter.test.d.ts.map +0 -1
  159. package/dist/vdom/component.counter.test.js +0 -124
  160. package/dist/vdom/component.interaction.test.d.ts +0 -2
  161. package/dist/vdom/component.interaction.test.d.ts.map +0 -1
  162. package/dist/vdom/component.interaction.test.js +0 -73
  163. package/dist/vdom/component.props.test.d.ts +0 -2
  164. package/dist/vdom/component.props.test.d.ts.map +0 -1
  165. package/dist/vdom/component.props.test.js +0 -88
  166. package/dist/vdom/component.return-types.test.d.ts +0 -2
  167. package/dist/vdom/component.return-types.test.d.ts.map +0 -1
  168. package/dist/vdom/component.return-types.test.js +0 -357
  169. package/dist/vdom/component.state.test.d.ts +0 -2
  170. package/dist/vdom/component.state.test.d.ts.map +0 -1
  171. package/dist/vdom/component.state.test.js +0 -129
  172. package/dist/vdom/component.test.d.ts +0 -2
  173. package/dist/vdom/component.test.d.ts.map +0 -1
  174. package/dist/vdom/component.test.js +0 -63
  175. package/dist/vdom/edge-cases.test.d.ts +0 -2
  176. package/dist/vdom/edge-cases.test.d.ts.map +0 -1
  177. package/dist/vdom/edge-cases.test.js +0 -637
  178. package/dist/vdom/fragment.test.d.ts +0 -2
  179. package/dist/vdom/fragment.test.d.ts.map +0 -1
  180. package/dist/vdom/fragment.test.js +0 -618
  181. package/dist/vdom/keys.test.d.ts +0 -2
  182. package/dist/vdom/keys.test.d.ts.map +0 -1
  183. package/dist/vdom/keys.test.js +0 -293
  184. package/dist/vdom/mount.test.d.ts +0 -2
  185. package/dist/vdom/mount.test.d.ts.map +0 -1
  186. package/dist/vdom/mount.test.js +0 -91
  187. package/dist/vdom/patch.test.d.ts +0 -2
  188. package/dist/vdom/patch.test.d.ts.map +0 -1
  189. package/dist/vdom/patch.test.js +0 -498
  190. package/dist/vdom/patchChildren.test.d.ts +0 -2
  191. package/dist/vdom/patchChildren.test.d.ts.map +0 -1
  192. package/dist/vdom/patchChildren.test.js +0 -392
  193. package/dist/vdom/primitives.test.d.ts +0 -2
  194. package/dist/vdom/primitives.test.d.ts.map +0 -1
  195. package/dist/vdom/primitives.test.js +0 -132
@@ -1,400 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { jsx, render } from "../vdom";
3
- import { createState } from "../createState";
4
- import { Fragment } from "../vdom/FragmentVNode";
5
- describe("Complex Rendering", () => {
6
- beforeEach(() => {
7
- vi.useFakeTimers();
8
- });
9
- afterEach(() => {
10
- vi.clearAllTimers();
11
- });
12
- it("should handle deeply nested elements, fragments and components", () => {
13
- const NestedComponent = () => {
14
- return () => jsx(Fragment, {
15
- children: [
16
- jsx("span", { children: "Nested" }),
17
- jsx("strong", { children: "Component" }),
18
- ],
19
- });
20
- };
21
- const MiddleComponent = () => {
22
- return () => jsx("div", {
23
- class: "middle",
24
- children: [
25
- jsx("p", { children: "Fragment in middle" }),
26
- jsx(NestedComponent, {}),
27
- jsx("ul", {
28
- children: [
29
- jsx("li", { children: "Item 1" }),
30
- jsx("li", { children: "Item 2" }),
31
- ],
32
- }),
33
- ],
34
- });
35
- };
36
- const App = () => {
37
- return () => jsx(Fragment, {
38
- children: [
39
- jsx("header", {
40
- children: [
41
- jsx("h1", { children: "Header" }),
42
- jsx(MiddleComponent, {}),
43
- ],
44
- }),
45
- jsx("main", {
46
- children: jsx("section", {
47
- children: jsx("div", { children: jsx(NestedComponent, {}) }),
48
- }),
49
- }),
50
- ],
51
- });
52
- };
53
- const container = document.createElement("div");
54
- render(jsx(App, {}), container);
55
- expect(container.querySelector("header h1")?.textContent).toBe("Header");
56
- expect(container.querySelector(".middle p")?.textContent).toBe("Fragment in middle");
57
- expect(container.querySelector(".middle span")?.textContent).toBe("Nested");
58
- expect(container.querySelector(".middle strong")?.textContent).toBe("Component");
59
- expect(container.querySelectorAll("li").length).toBe(2);
60
- expect(container.querySelector("main span")?.textContent).toBe("Nested");
61
- expect(container.querySelector("main strong")?.textContent).toBe("Component");
62
- });
63
- it("should handle multiple fragments and components at same level", () => {
64
- const Component1 = () => () => jsx("span", { children: "C1" });
65
- const Component2 = () => () => jsx("span", { children: "C2" });
66
- const Component3 = () => () => jsx("span", { children: "C3" });
67
- const App = () => {
68
- return () => jsx("div", {
69
- children: [
70
- jsx(Component1, {}),
71
- jsx("strong", { children: "Between" }),
72
- jsx(Component2, {}),
73
- jsx("em", { children: "Middle" }),
74
- jsx(Component3, {}),
75
- jsx("i", { children: "End" }),
76
- ],
77
- });
78
- };
79
- const container = document.createElement("div");
80
- render(jsx(App, {}), container);
81
- const spans = container.querySelectorAll("span");
82
- expect(spans.length).toBe(3);
83
- expect(spans[0].textContent).toBe("C1");
84
- expect(spans[1].textContent).toBe("C2");
85
- expect(spans[2].textContent).toBe("C3");
86
- expect(container.querySelector("strong")?.textContent).toBe("Between");
87
- expect(container.querySelector("em")?.textContent).toBe("Middle");
88
- expect(container.querySelector("i")?.textContent).toBe("End");
89
- });
90
- it("should update multiple nested components when state changes", async () => {
91
- let globalCount;
92
- const Counter = () => {
93
- return () => jsx("span", { class: "counter", children: globalCount.value });
94
- };
95
- const DoubleCounter = () => {
96
- return () => jsx("span", { class: "double", children: globalCount.value * 2 });
97
- };
98
- const NestedCounters = () => {
99
- return () => jsx(Fragment, {
100
- children: [
101
- jsx(Counter, {}),
102
- jsx("div", {
103
- children: [jsx(DoubleCounter, {}), jsx(Counter, {})],
104
- }),
105
- ],
106
- });
107
- };
108
- const App = () => {
109
- const state = createState({ value: 0 });
110
- globalCount = state;
111
- return () => jsx("div", {
112
- children: [
113
- jsx(NestedCounters, {}),
114
- jsx("section", {
115
- children: [
116
- jsx(DoubleCounter, {}),
117
- jsx(Counter, {}),
118
- jsx(NestedCounters, {}),
119
- ],
120
- }),
121
- ],
122
- });
123
- };
124
- const container = document.createElement("div");
125
- render(jsx(App, {}), container);
126
- // Initial state: count = 0
127
- let counters = container.querySelectorAll(".counter");
128
- let doubles = container.querySelectorAll(".double");
129
- expect(counters.length).toBe(5);
130
- expect(doubles.length).toBe(3);
131
- counters.forEach((counter) => {
132
- expect(counter.textContent).toBe("0");
133
- });
134
- doubles.forEach((double) => {
135
- expect(double.textContent).toBe("0");
136
- });
137
- // Update state to 5
138
- globalCount.value = 5;
139
- await vi.runAllTimersAsync();
140
- counters = container.querySelectorAll(".counter");
141
- doubles = container.querySelectorAll(".double");
142
- counters.forEach((counter) => {
143
- expect(counter.textContent).toBe("5");
144
- });
145
- doubles.forEach((double) => {
146
- expect(double.textContent).toBe("10");
147
- });
148
- // Update state to 10
149
- globalCount.value = 10;
150
- await vi.runAllTimersAsync();
151
- counters = container.querySelectorAll(".counter");
152
- doubles = container.querySelectorAll(".double");
153
- counters.forEach((counter) => {
154
- expect(counter.textContent).toBe("10");
155
- });
156
- doubles.forEach((double) => {
157
- expect(double.textContent).toBe("20");
158
- });
159
- });
160
- it("should handle components that change their return structure based on state", async () => {
161
- let globalState;
162
- const DynamicComponent = () => {
163
- return () => {
164
- const currentMode = globalState.mode;
165
- if (currentMode === "list") {
166
- return jsx("ul", {
167
- class: "list",
168
- children: [
169
- jsx("li", { children: "Item 1" }),
170
- jsx("li", { children: "Item 2" }),
171
- jsx("li", { children: "Item 3" }),
172
- ],
173
- });
174
- }
175
- if (currentMode === "grid") {
176
- return jsx("div", {
177
- class: "grid",
178
- children: [
179
- jsx("div", { class: "card", children: "Card 1" }),
180
- jsx("div", { class: "card", children: "Card 2" }),
181
- jsx("div", { class: "card", children: "Card 3" }),
182
- ],
183
- });
184
- }
185
- return jsx("table", {
186
- class: "table",
187
- children: jsx("tbody", {
188
- children: jsx("tr", {
189
- children: [
190
- jsx("td", { children: "Cell 1" }),
191
- jsx("td", { children: "Cell 2" }),
192
- jsx("td", { children: "Cell 3" }),
193
- ],
194
- }),
195
- }),
196
- });
197
- };
198
- };
199
- const NestedDynamic = () => {
200
- return () => jsx(Fragment, {
201
- children: [
202
- jsx("h2", { children: `Mode: ${globalState.mode}` }),
203
- jsx(DynamicComponent, {}),
204
- ],
205
- });
206
- };
207
- const App = () => {
208
- const state = createState({
209
- mode: "list",
210
- });
211
- globalState = state;
212
- return () => jsx("div", {
213
- children: [
214
- jsx(NestedDynamic, {}),
215
- jsx("footer", {
216
- children: jsx(DynamicComponent, {}),
217
- }),
218
- ],
219
- });
220
- };
221
- const container = document.createElement("div");
222
- render(jsx(App, {}), container);
223
- // Initial state: list mode
224
- expect(container.querySelector("h2")?.textContent).toBe("Mode: list");
225
- expect(container.querySelectorAll(".list").length).toBe(2);
226
- expect(container.querySelectorAll("li").length).toBe(6);
227
- expect(container.querySelector(".grid")).toBeNull();
228
- expect(container.querySelector(".table")).toBeNull();
229
- // Switch to grid mode
230
- globalState.mode = "grid";
231
- await vi.runAllTimersAsync();
232
- expect(container.querySelector("h2")?.textContent).toBe("Mode: grid");
233
- expect(container.querySelectorAll(".grid").length).toBe(2);
234
- expect(container.querySelectorAll(".card").length).toBe(6);
235
- expect(container.querySelector(".list")).toBeNull();
236
- expect(container.querySelector(".table")).toBeNull();
237
- // Switch to table mode
238
- globalState.mode = "table";
239
- await vi.runAllTimersAsync();
240
- return;
241
- expect(container.querySelector("h2")?.textContent).toBe("Mode: table");
242
- expect(container.querySelectorAll(".table").length).toBe(2);
243
- expect(container.querySelectorAll("td").length).toBe(6);
244
- expect(container.querySelector(".list")).toBeNull();
245
- expect(container.querySelector(".grid")).toBeNull();
246
- // Switch back to list
247
- globalState.mode = "list";
248
- await vi.runAllTimersAsync();
249
- expect(container.querySelector("h2")?.textContent).toBe("Mode: list");
250
- expect(container.querySelectorAll(".list").length).toBe(2);
251
- expect(container.querySelectorAll("li").length).toBe(6);
252
- });
253
- it("should handle deeply nested state changes with fragments", async () => {
254
- let globalUser;
255
- const UserName = () => {
256
- return () => jsx("span", { class: "name", children: globalUser.name });
257
- };
258
- const UserAge = () => {
259
- return () => jsx("span", { class: "age", children: globalUser.age });
260
- };
261
- const UserRole = () => {
262
- return () => jsx("span", { class: "role", children: globalUser.role });
263
- };
264
- const UserInfo = () => {
265
- return () => jsx(Fragment, {
266
- children: [
267
- jsx(UserName, {}),
268
- jsx("div", {
269
- class: "details",
270
- children: [jsx(UserAge, {}), jsx(UserRole, {})],
271
- }),
272
- ],
273
- });
274
- };
275
- const UserCard = () => {
276
- return () => jsx("div", {
277
- class: "card",
278
- children: [
279
- jsx("h3", { children: "User Profile" }),
280
- jsx(UserInfo, {}),
281
- jsx("footer", { children: ["Role: ", jsx(UserRole, {})] }),
282
- ],
283
- });
284
- };
285
- const App = () => {
286
- const state = createState({ name: "John", age: 30, role: "admin" });
287
- globalUser = state;
288
- return () => jsx(Fragment, {
289
- children: [
290
- jsx(UserCard, {}),
291
- jsx("aside", {
292
- children: [
293
- jsx(UserName, {}),
294
- " is ",
295
- jsx(UserAge, {}),
296
- " years old",
297
- ],
298
- }),
299
- ],
300
- });
301
- };
302
- const container = document.createElement("div");
303
- render(jsx(App, {}), container);
304
- expect(container.querySelector(".name")?.textContent).toBe("John");
305
- expect(container.querySelectorAll(".age")[0].textContent).toBe("30");
306
- expect(container.querySelectorAll(".role").length).toBe(2);
307
- expect(container.querySelector("aside")?.textContent).toBe("John is 30 years old");
308
- // Update user
309
- globalUser.name = "Jane";
310
- globalUser.age = 25;
311
- globalUser.role = "user";
312
- await vi.runAllTimersAsync();
313
- expect(container.querySelector(".name")?.textContent).toBe("Jane");
314
- expect(container.querySelectorAll(".age")[0].textContent).toBe("25");
315
- const roles = container.querySelectorAll(".role");
316
- roles.forEach((role) => {
317
- expect(role.textContent).toBe("user");
318
- });
319
- expect(container.querySelector("aside")?.textContent).toBe("Jane is 25 years old");
320
- // Update user again
321
- globalUser.name = "Bob";
322
- globalUser.age = 40;
323
- globalUser.role = "moderator";
324
- await vi.runAllTimersAsync();
325
- expect(container.querySelector(".name")?.textContent).toBe("Bob");
326
- expect(container.querySelectorAll(".age")[0].textContent).toBe("40");
327
- const newRoles = container.querySelectorAll(".role");
328
- newRoles.forEach((role) => {
329
- expect(role.textContent).toBe("moderator");
330
- });
331
- expect(container.querySelector("aside")?.textContent).toBe("Bob is 40 years old");
332
- });
333
- it("should handle mixed nested updates with conditional rendering", async () => {
334
- let globalState;
335
- const Details = () => {
336
- return () => jsx(Fragment, {
337
- children: [
338
- jsx("p", { children: `Count: ${globalState.count}` }),
339
- jsx("p", { children: `Double: ${globalState.count * 2}` }),
340
- ],
341
- });
342
- };
343
- const Card = () => {
344
- return () => jsx("div", {
345
- class: "card",
346
- children: [
347
- jsx("h4", { children: `Card ${globalState.count}` }),
348
- globalState.showDetails
349
- ? jsx(Details, {})
350
- : jsx("p", { children: "No details" }),
351
- ],
352
- });
353
- };
354
- const App = () => {
355
- const state = createState({ showDetails: false, count: 0 });
356
- globalState = state;
357
- return () => jsx(Fragment, {
358
- children: [
359
- jsx(Card, {}),
360
- jsx("div", {
361
- children: [
362
- jsx(Card, {}),
363
- jsx("span", { children: `Total: ${state.count}` }),
364
- ],
365
- }),
366
- ],
367
- });
368
- };
369
- const container = document.createElement("div");
370
- render(jsx(App, {}), container);
371
- // Initial state
372
- expect(container.querySelectorAll(".card h4")[0].textContent).toBe("Card 0");
373
- expect(container.querySelectorAll(".card h4")[1].textContent).toBe("Card 0");
374
- expect(container.querySelectorAll("p").length).toBe(2);
375
- expect(container.querySelectorAll("p")[0].textContent).toBe("No details");
376
- expect(container.querySelector("span")?.textContent).toBe("Total: 0");
377
- // Show details
378
- globalState.showDetails = true;
379
- await vi.runAllTimersAsync();
380
- expect(container.querySelectorAll("p").length).toBe(4);
381
- expect(container.querySelectorAll("p")[0].textContent).toBe("Count: 0");
382
- expect(container.querySelectorAll("p")[1].textContent).toBe("Double: 0");
383
- // Increment count
384
- globalState.count = 5;
385
- await vi.runAllTimersAsync();
386
- expect(container.querySelectorAll(".card h4")[0].textContent).toBe("Card 5");
387
- expect(container.querySelectorAll(".card h4")[1].textContent).toBe("Card 5");
388
- expect(container.querySelectorAll("p")[0].textContent).toBe("Count: 5");
389
- expect(container.querySelectorAll("p")[1].textContent).toBe("Double: 10");
390
- expect(container.querySelector("span")?.textContent).toBe("Total: 5");
391
- // Hide details and increment
392
- globalState.showDetails = false;
393
- globalState.count = 10;
394
- await vi.runAllTimersAsync();
395
- expect(container.querySelectorAll(".card h4")[0].textContent).toBe("Card 10");
396
- expect(container.querySelectorAll("p").length).toBe(2);
397
- expect(container.querySelectorAll("p")[0].textContent).toBe("No details");
398
- expect(container.querySelector("span")?.textContent).toBe("Total: 10");
399
- });
400
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=component.cleanup.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.cleanup.test.d.ts","sourceRoot":"","sources":["../../src/tests/component.cleanup.test.ts"],"names":[],"mappings":""}