@luna_ui/luna 0.7.3 → 0.17.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.
- package/dist/api-DAWeanTX.js +1 -0
- package/dist/api-qXll116-.d.ts +80 -0
- package/dist/cli.mjs +27 -22
- package/dist/css/index.js +1 -0
- package/dist/event-utils.d.ts +1 -1
- package/dist/event-utils.js +1 -1
- package/dist/{index-vO066aMd.d.ts → index-VY8G32hr.d.ts} +16 -76
- package/dist/index.d.ts +4 -3
- package/dist/index.js +1 -1
- package/dist/jsx-dev-runtime.js +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/jsx-runtime.js +1 -1
- package/dist/raw.d.ts +2 -0
- package/dist/raw.js +1 -0
- package/dist/resource.d.ts +41 -0
- package/dist/resource.js +1 -0
- package/dist/router-lite.d.ts +44 -0
- package/dist/router-lite.js +1 -0
- package/dist/signals-shared.d.ts +12 -0
- package/dist/signals-shared.js +1 -0
- package/dist/signals.d.ts +50 -0
- package/dist/signals.js +1 -0
- package/dist/vite-plugin.d.ts +7708 -2
- package/dist/vite-plugin.js +7 -6
- package/package.json +34 -11
- package/dist/event-utils-C_M2XBNj.js +0 -1
- package/dist/src-BbjOW18q.js +0 -1
- package/src/css/extract.ts +0 -798
- package/src/css/index.ts +0 -10
- package/src/css/inject.ts +0 -205
- package/src/css/inline.ts +0 -182
- package/src/css/minify.ts +0 -70
- package/src/css/optimizer.ts +0 -6
- package/src/css/runtime.ts +0 -344
- package/src/css-optimizer/README.md +0 -353
- package/src/css-optimizer/cooccurrence.ts +0 -100
- package/src/css-optimizer/core.ts +0 -263
- package/src/css-optimizer/extractors.ts +0 -243
- package/src/css-optimizer/hash.ts +0 -54
- package/src/css-optimizer/index.ts +0 -129
- package/src/css-optimizer/merge.ts +0 -109
- package/src/css-optimizer/moonbit-analyzer.ts +0 -210
- package/src/css-optimizer/parser.ts +0 -120
- package/src/css-optimizer/pattern.ts +0 -171
- package/src/css-optimizer/transformers.ts +0 -301
- package/src/css-optimizer/types.ts +0 -128
- package/src/event-utils.ts +0 -227
- package/src/hydration/createHydrator.ts +0 -62
- package/src/hydration/delegate.ts +0 -62
- package/src/hydration/drag.ts +0 -214
- package/src/hydration/index.ts +0 -12
- package/src/hydration/keyboard.ts +0 -64
- package/src/hydration/toggle.ts +0 -101
- package/src/index.ts +0 -908
- package/src/jsx-dev-runtime.ts +0 -2
- package/src/jsx-runtime.ts +0 -398
- package/src/vite-plugin.ts +0 -718
- package/tests/__screenshots__/apg.test.ts/APG-Components---Accessibility-Tests-Button-Pattern-disabled-button-has-aria-disabled-1.png +0 -0
- package/tests/apg.test.ts +0 -466
- package/tests/context.test.ts +0 -118
- package/tests/css-optimizer-extractors.test.ts +0 -264
- package/tests/css-optimizer-integration.test.ts +0 -566
- package/tests/css-optimizer-transformers.test.ts +0 -301
- package/tests/css-optimizer.test.ts +0 -646
- package/tests/css-runtime.bench.ts +0 -442
- package/tests/css-runtime.test.ts +0 -342
- package/tests/debounced.test.ts +0 -165
- package/tests/dom.test.ts +0 -873
- package/tests/integration.test.ts +0 -405
- package/tests/issue-11-show-null-to-truthy.test.ts +0 -176
- package/tests/issue-5-for-infinite-loop.test.ts +0 -516
- package/tests/jsx-runtime.test.tsx +0 -393
- package/tests/lifecycle.test.ts +0 -833
- package/tests/move-before.bench.ts +0 -304
- package/tests/preact-signals-comparison.test.ts +0 -1608
- package/tests/resource.test.ts +0 -160
- package/tests/router.test.ts +0 -117
- package/tests/show-initial-mount-leak.test.tsx +0 -182
- package/tests/solidjs-api.test.ts +0 -660
- package/tests/static-perf.bench.ts +0 -64
- package/tests/store.test.ts +0 -263
- package/tests/tsx-syntax.test.tsx +0 -404
- /package/dist/{event-utils-Cd5f3Njd.d.ts → event-utils-BvAf0NwN.d.ts} +0 -0
|
@@ -1,304 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DOM operation benchmark tests
|
|
3
|
-
* Run with: pnpm test:browser
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
import { describe, test, expect, beforeEach, afterEach } from "vitest";
|
|
7
|
-
|
|
8
|
-
// Extend Element interface for moveBefore (Chrome 133+)
|
|
9
|
-
declare global {
|
|
10
|
-
interface Element {
|
|
11
|
-
moveBefore(node: Node, child: Node | null): Node;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Benchmark helper (silent - no console output)
|
|
16
|
-
function bench(name: string, fn: () => void, iterations = 1000, warmup = 100) {
|
|
17
|
-
// Warmup
|
|
18
|
-
for (let i = 0; i < warmup; i++) {
|
|
19
|
-
fn();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// Actual run
|
|
23
|
-
const start = performance.now();
|
|
24
|
-
for (let i = 0; i < iterations; i++) {
|
|
25
|
-
fn();
|
|
26
|
-
}
|
|
27
|
-
const elapsed = performance.now() - start;
|
|
28
|
-
const perOp = elapsed / iterations;
|
|
29
|
-
|
|
30
|
-
return { name, elapsed, perOp };
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
describe("moveBefore API", () => {
|
|
34
|
-
let container: HTMLDivElement;
|
|
35
|
-
|
|
36
|
-
beforeEach(() => {
|
|
37
|
-
container = document.createElement("div");
|
|
38
|
-
document.body.appendChild(container);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
afterEach(() => {
|
|
42
|
-
container.remove();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test("moveBefore preserves element reference", () => {
|
|
46
|
-
const ul = document.createElement("ul");
|
|
47
|
-
const li1 = document.createElement("li");
|
|
48
|
-
const li2 = document.createElement("li");
|
|
49
|
-
li1.textContent = "Item 1";
|
|
50
|
-
li2.textContent = "Item 2";
|
|
51
|
-
ul.appendChild(li1);
|
|
52
|
-
ul.appendChild(li2);
|
|
53
|
-
container.appendChild(ul);
|
|
54
|
-
|
|
55
|
-
// Store reference
|
|
56
|
-
const originalLi1 = li1;
|
|
57
|
-
|
|
58
|
-
// Move li1 to end
|
|
59
|
-
ul.moveBefore(li1, null);
|
|
60
|
-
|
|
61
|
-
// Verify it's the same element
|
|
62
|
-
expect(ul.lastChild).toBe(originalLi1);
|
|
63
|
-
expect(ul.children[1]).toBe(originalLi1);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test("insertBefore also preserves element reference", () => {
|
|
67
|
-
const ul = document.createElement("ul");
|
|
68
|
-
const li1 = document.createElement("li");
|
|
69
|
-
const li2 = document.createElement("li");
|
|
70
|
-
li1.textContent = "Item 1";
|
|
71
|
-
li2.textContent = "Item 2";
|
|
72
|
-
ul.appendChild(li1);
|
|
73
|
-
ul.appendChild(li2);
|
|
74
|
-
container.appendChild(ul);
|
|
75
|
-
|
|
76
|
-
// Store reference
|
|
77
|
-
const originalLi1 = li1;
|
|
78
|
-
|
|
79
|
-
// Move li1 to end using insertBefore
|
|
80
|
-
ul.insertBefore(li1, null);
|
|
81
|
-
|
|
82
|
-
// Verify it's the same element
|
|
83
|
-
expect(ul.lastChild).toBe(originalLi1);
|
|
84
|
-
});
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
describe("moveBefore vs insertBefore benchmark", () => {
|
|
88
|
-
let container: HTMLDivElement;
|
|
89
|
-
|
|
90
|
-
beforeEach(() => {
|
|
91
|
-
container = document.createElement("div");
|
|
92
|
-
document.body.appendChild(container);
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
afterEach(() => {
|
|
96
|
-
container.remove();
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
const setupList = (count: number): HTMLUListElement => {
|
|
100
|
-
const ul = document.createElement("ul");
|
|
101
|
-
for (let i = 0; i < count; i++) {
|
|
102
|
-
const li = document.createElement("li");
|
|
103
|
-
li.textContent = `Item ${i}`;
|
|
104
|
-
ul.appendChild(li);
|
|
105
|
-
}
|
|
106
|
-
container.appendChild(ul);
|
|
107
|
-
return ul;
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
test("benchmark: single element move", () => {
|
|
111
|
-
const results: { name: string; perOp: number }[] = [];
|
|
112
|
-
|
|
113
|
-
results.push(
|
|
114
|
-
bench("insertBefore_single", () => {
|
|
115
|
-
const ul = setupList(10);
|
|
116
|
-
const first = ul.firstChild!;
|
|
117
|
-
ul.insertBefore(first, null);
|
|
118
|
-
ul.remove();
|
|
119
|
-
})
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
results.push(
|
|
123
|
-
bench("moveBefore_single", () => {
|
|
124
|
-
const ul = setupList(10);
|
|
125
|
-
const first = ul.firstChild!;
|
|
126
|
-
ul.moveBefore(first, null);
|
|
127
|
-
ul.remove();
|
|
128
|
-
})
|
|
129
|
-
);
|
|
130
|
-
|
|
131
|
-
expect(results.length).toBe(2);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
test("benchmark: shuffle 10 elements", () => {
|
|
135
|
-
const results: { name: string; perOp: number }[] = [];
|
|
136
|
-
|
|
137
|
-
results.push(
|
|
138
|
-
bench("insertBefore_shuffle_10", () => {
|
|
139
|
-
const ul = setupList(10);
|
|
140
|
-
const children = Array.from(ul.children);
|
|
141
|
-
for (let i = children.length - 1; i >= 0; i--) {
|
|
142
|
-
ul.insertBefore(children[i], ul.firstChild);
|
|
143
|
-
}
|
|
144
|
-
ul.remove();
|
|
145
|
-
})
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
results.push(
|
|
149
|
-
bench("moveBefore_shuffle_10", () => {
|
|
150
|
-
const ul = setupList(10);
|
|
151
|
-
const children = Array.from(ul.children);
|
|
152
|
-
for (let i = children.length - 1; i >= 0; i--) {
|
|
153
|
-
ul.moveBefore(children[i], ul.firstChild);
|
|
154
|
-
}
|
|
155
|
-
ul.remove();
|
|
156
|
-
})
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
expect(results.length).toBe(2);
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
test("benchmark: shuffle 50 elements", () => {
|
|
163
|
-
const results: { name: string; perOp: number }[] = [];
|
|
164
|
-
|
|
165
|
-
results.push(
|
|
166
|
-
bench(
|
|
167
|
-
"insertBefore_shuffle_50",
|
|
168
|
-
() => {
|
|
169
|
-
const ul = setupList(50);
|
|
170
|
-
const children = Array.from(ul.children);
|
|
171
|
-
for (let i = children.length - 1; i >= 0; i--) {
|
|
172
|
-
ul.insertBefore(children[i], ul.firstChild);
|
|
173
|
-
}
|
|
174
|
-
ul.remove();
|
|
175
|
-
},
|
|
176
|
-
500
|
|
177
|
-
)
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
results.push(
|
|
181
|
-
bench(
|
|
182
|
-
"moveBefore_shuffle_50",
|
|
183
|
-
() => {
|
|
184
|
-
const ul = setupList(50);
|
|
185
|
-
const children = Array.from(ul.children);
|
|
186
|
-
for (let i = children.length - 1; i >= 0; i--) {
|
|
187
|
-
ul.moveBefore(children[i], ul.firstChild);
|
|
188
|
-
}
|
|
189
|
-
ul.remove();
|
|
190
|
-
},
|
|
191
|
-
500
|
|
192
|
-
)
|
|
193
|
-
);
|
|
194
|
-
|
|
195
|
-
expect(results.length).toBe(2);
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
test("moveBefore preserves iframe state", async () => {
|
|
199
|
-
// Create container with iframe
|
|
200
|
-
const wrapper = document.createElement("div");
|
|
201
|
-
const section1 = document.createElement("section");
|
|
202
|
-
const section2 = document.createElement("section");
|
|
203
|
-
const iframe = document.createElement("iframe");
|
|
204
|
-
iframe.srcdoc = "<html><body>Test content</body></html>";
|
|
205
|
-
|
|
206
|
-
wrapper.appendChild(section1);
|
|
207
|
-
wrapper.appendChild(section2);
|
|
208
|
-
section1.appendChild(iframe);
|
|
209
|
-
container.appendChild(wrapper);
|
|
210
|
-
|
|
211
|
-
// Wait for iframe to load
|
|
212
|
-
await new Promise((resolve) => {
|
|
213
|
-
iframe.onload = resolve;
|
|
214
|
-
setTimeout(resolve, 100); // Fallback timeout
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
// Get iframe content before move
|
|
218
|
-
const contentBefore = iframe.contentDocument?.body?.textContent;
|
|
219
|
-
|
|
220
|
-
// Move iframe to section2 using moveBefore
|
|
221
|
-
section2.moveBefore(iframe, null);
|
|
222
|
-
|
|
223
|
-
// Check iframe content after move
|
|
224
|
-
const contentAfter = iframe.contentDocument?.body?.textContent;
|
|
225
|
-
|
|
226
|
-
// moveBefore should preserve iframe state
|
|
227
|
-
expect(iframe.parentElement).toBe(section2);
|
|
228
|
-
expect(contentAfter).toBe(contentBefore);
|
|
229
|
-
});
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
describe("DOM operation microbenchmarks", () => {
|
|
233
|
-
let container: HTMLDivElement;
|
|
234
|
-
|
|
235
|
-
beforeEach(() => {
|
|
236
|
-
container = document.createElement("div");
|
|
237
|
-
document.body.appendChild(container);
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
afterEach(() => {
|
|
241
|
-
container.remove();
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
test("benchmark: createElement", () => {
|
|
245
|
-
const result = bench("createElement_div", () => {
|
|
246
|
-
document.createElement("div");
|
|
247
|
-
}, 10000);
|
|
248
|
-
expect(result.perOp).toBeLessThan(1);
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
test("benchmark: appendChild", () => {
|
|
252
|
-
const result = bench("appendChild", () => {
|
|
253
|
-
const div = document.createElement("div");
|
|
254
|
-
container.appendChild(div);
|
|
255
|
-
div.remove();
|
|
256
|
-
}, 5000);
|
|
257
|
-
expect(result.perOp).toBeLessThan(1);
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
test("benchmark: textContent assignment", () => {
|
|
261
|
-
const div = document.createElement("div");
|
|
262
|
-
container.appendChild(div);
|
|
263
|
-
|
|
264
|
-
const result = bench("textContent_set", () => {
|
|
265
|
-
div.textContent = "Hello World";
|
|
266
|
-
}, 10000);
|
|
267
|
-
|
|
268
|
-
expect(result.perOp).toBeLessThan(1);
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
test("benchmark: innerHTML clear", () => {
|
|
272
|
-
const result = bench("innerHTML_clear", () => {
|
|
273
|
-
const div = document.createElement("div");
|
|
274
|
-
div.innerHTML = "<span>test</span><span>test2</span>";
|
|
275
|
-
container.appendChild(div);
|
|
276
|
-
div.innerHTML = "";
|
|
277
|
-
div.remove();
|
|
278
|
-
}, 5000);
|
|
279
|
-
expect(result.perOp).toBeLessThan(1);
|
|
280
|
-
});
|
|
281
|
-
|
|
282
|
-
test("benchmark: setAttribute", () => {
|
|
283
|
-
const div = document.createElement("div");
|
|
284
|
-
container.appendChild(div);
|
|
285
|
-
|
|
286
|
-
const result = bench("setAttribute", () => {
|
|
287
|
-
div.setAttribute("class", "test-class");
|
|
288
|
-
}, 10000);
|
|
289
|
-
|
|
290
|
-
expect(result.perOp).toBeLessThan(1);
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
test("benchmark: classList.add", () => {
|
|
294
|
-
const div = document.createElement("div");
|
|
295
|
-
container.appendChild(div);
|
|
296
|
-
|
|
297
|
-
const result = bench("classList_add", () => {
|
|
298
|
-
div.classList.add("test-class");
|
|
299
|
-
div.classList.remove("test-class");
|
|
300
|
-
}, 10000);
|
|
301
|
-
|
|
302
|
-
expect(result.perOp).toBeLessThan(1);
|
|
303
|
-
});
|
|
304
|
-
});
|