@praxisjs/composables 1.1.8 → 1.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @praxisjs/composables
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 64480c7: Added file upload composables: `FileSelection` (native file dialog + validation), `DropZone` (drag and drop), `FileUpload` (XHR uploads with per-file progress, concurrency limit, cancel and retry) and `FilePreview` (auto-revoked object URLs), plus the `formatFileSize` and `validateFiles` helpers.
8
+
3
9
  ## 1.1.8
4
10
 
5
11
  ### Patch Changes
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=upload.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/upload.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,531 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
3
+ import { signal } from "@praxisjs/core/internal";
4
+ import { FileSelection, DropZone, FileUpload, FilePreview, formatFileSize, validateFiles, } from "../index";
5
+ function makeFile(name, size = 10, type = "text/plain") {
6
+ return new File([new Uint8Array(size)], name, { type });
7
+ }
8
+ class FakeXHR {
9
+ static instances = [];
10
+ method = "";
11
+ url = "";
12
+ headers = {};
13
+ withCredentials = false;
14
+ body = null;
15
+ status = 0;
16
+ responseText = "";
17
+ aborted = false;
18
+ upload = {
19
+ onprogress: null,
20
+ };
21
+ onload = null;
22
+ onerror = null;
23
+ onabort = null;
24
+ constructor() {
25
+ FakeXHR.instances.push(this);
26
+ }
27
+ open(method, url) {
28
+ this.method = method;
29
+ this.url = url;
30
+ }
31
+ setRequestHeader(key, value) {
32
+ this.headers[key] = value;
33
+ }
34
+ send(body) {
35
+ this.body = body;
36
+ }
37
+ abort() {
38
+ this.aborted = true;
39
+ this.onabort?.();
40
+ }
41
+ respond(status, text = "") {
42
+ this.status = status;
43
+ this.responseText = text;
44
+ this.onload?.();
45
+ }
46
+ }
47
+ // ── formatFileSize ────────────────────────────────────────────────────────────
48
+ describe("formatFileSize", () => {
49
+ it("formats bytes, KB, MB and GB", () => {
50
+ expect(formatFileSize(0)).toBe("0 B");
51
+ expect(formatFileSize(512)).toBe("512 B");
52
+ expect(formatFileSize(1536)).toBe("1.5 KB");
53
+ expect(formatFileSize(5 * 1024 * 1024)).toBe("5.0 MB");
54
+ expect(formatFileSize(2 * 1024 ** 3, 0)).toBe("2 GB");
55
+ });
56
+ it("returns 0 B for invalid input", () => {
57
+ expect(formatFileSize(-1)).toBe("0 B");
58
+ expect(formatFileSize(NaN)).toBe("0 B");
59
+ });
60
+ });
61
+ // ── validateFiles ─────────────────────────────────────────────────────────────
62
+ describe("validateFiles", () => {
63
+ it("accepts everything without options", () => {
64
+ const files = [makeFile("a.txt"), makeFile("b.png", 5, "image/png")];
65
+ const { accepted, rejected } = validateFiles(files, 0, {});
66
+ expect(accepted).toEqual(files);
67
+ expect(rejected).toEqual([]);
68
+ });
69
+ it("matches extension, exact mime and wildcard mime tokens", () => {
70
+ const opts = { accept: ".pdf, image/*, text/csv" };
71
+ const pdf = makeFile("Doc.PDF", 1, "");
72
+ const png = makeFile("a.png", 1, "image/png");
73
+ const csv = makeFile("a.csv", 1, "text/csv");
74
+ const exe = makeFile("a.exe", 1, "application/x-msdownload");
75
+ const { accepted, rejected } = validateFiles([pdf, png, csv, exe], 0, opts);
76
+ expect(accepted).toEqual([pdf, png, csv]);
77
+ expect(rejected.map((r) => r.code)).toEqual(["type"]);
78
+ });
79
+ it("accepts an array for accept", () => {
80
+ const { accepted } = validateFiles([makeFile("a.png", 1, "image/png")], 0, { accept: ["image/png"] });
81
+ expect(accepted).toHaveLength(1);
82
+ });
83
+ it("rejects files above maxSize and below minSize", () => {
84
+ const big = makeFile("big.txt", 100);
85
+ const tiny = makeFile("tiny.txt", 1);
86
+ const { rejected } = validateFiles([big, tiny], 0, { maxSize: 50, minSize: 5 });
87
+ expect(rejected.map((r) => r.code)).toEqual(["max-size", "min-size"]);
88
+ });
89
+ it("enforces maxFiles counting already held files", () => {
90
+ const files = [makeFile("a"), makeFile("b"), makeFile("c")];
91
+ const { accepted, rejected } = validateFiles(files, 1, { maxFiles: 2 });
92
+ expect(accepted).toEqual([files[0]]);
93
+ expect(rejected.map((r) => r.code)).toEqual(["max-files", "max-files"]);
94
+ });
95
+ });
96
+ // ── FileSelection ─────────────────────────────────────────────────────────────
97
+ describe("FileSelection", () => {
98
+ it("starts empty", () => {
99
+ const view = new FileSelection().setup();
100
+ expect(view.files()).toEqual([]);
101
+ expect(view.errors()).toEqual([]);
102
+ });
103
+ it("replaces the selection in single mode", () => {
104
+ const view = new FileSelection().setup();
105
+ const a = makeFile("a");
106
+ const b = makeFile("b");
107
+ view.add([a]);
108
+ view.add([b]);
109
+ expect(view.files()).toEqual([b]);
110
+ });
111
+ it("rejects extra files in single mode", () => {
112
+ const view = new FileSelection().setup();
113
+ view.add([makeFile("a"), makeFile("b")]);
114
+ expect(view.files()).toHaveLength(1);
115
+ expect(view.errors()[0].code).toBe("max-files");
116
+ });
117
+ it("appends in multiple mode up to maxFiles", () => {
118
+ const view = new FileSelection({ maxFiles: 3 }).setup();
119
+ view.add([makeFile("a"), makeFile("b")]);
120
+ view.add([makeFile("c"), makeFile("d")]);
121
+ expect(view.files().map((f) => f.name)).toEqual(["a", "b", "c"]);
122
+ expect(view.errors()).toHaveLength(1);
123
+ });
124
+ it("keeps the previous file when the new one is rejected", () => {
125
+ const view = new FileSelection({ maxSize: 20 }).setup();
126
+ const ok = makeFile("ok", 10);
127
+ view.add([ok]);
128
+ view.add([makeFile("big", 100)]);
129
+ expect(view.files()).toEqual([ok]);
130
+ expect(view.errors()[0].code).toBe("max-size");
131
+ });
132
+ it("ignores empty input and calls onFiles with accepted files", () => {
133
+ const onFiles = vi.fn();
134
+ const view = new FileSelection({ multiple: true, onFiles }).setup();
135
+ view.add(null);
136
+ view.add([]);
137
+ expect(onFiles).not.toHaveBeenCalled();
138
+ const a = makeFile("a");
139
+ view.add([a]);
140
+ expect(onFiles).toHaveBeenCalledWith([a]);
141
+ });
142
+ it("remove and clear update the selection", () => {
143
+ const view = new FileSelection({ multiple: true }).setup();
144
+ const a = makeFile("a");
145
+ const b = makeFile("b");
146
+ view.add([a, b]);
147
+ view.remove(a);
148
+ expect(view.files()).toEqual([b]);
149
+ view.add([makeFile("c", 1, "")]);
150
+ view.clear();
151
+ expect(view.files()).toEqual([]);
152
+ expect(view.errors()).toEqual([]);
153
+ });
154
+ it("open() creates a file input configured from the options and adds the picked files", () => {
155
+ let input;
156
+ const original = document.createElement.bind(document);
157
+ vi.spyOn(document, "createElement").mockImplementation((tag) => {
158
+ const el = original(tag);
159
+ if (tag === "input") {
160
+ input = el;
161
+ vi.spyOn(input, "click").mockImplementation(() => { });
162
+ }
163
+ return el;
164
+ });
165
+ const view = new FileSelection({ accept: [".png", "image/jpeg"], multiple: true }).setup();
166
+ view.open();
167
+ expect(input.type).toBe("file");
168
+ expect(input.accept).toBe(".png,image/jpeg");
169
+ expect(input.multiple).toBe(true);
170
+ expect(input.click).toHaveBeenCalled();
171
+ const file = makeFile("a.png", 1, "image/png");
172
+ Object.defineProperty(input, "files", { value: [file], configurable: true });
173
+ input.dispatchEvent(new Event("change"));
174
+ expect(view.files()).toEqual([file]);
175
+ vi.restoreAllMocks();
176
+ });
177
+ });
178
+ describe("FileSelection without accept", () => {
179
+ it("open() leaves the input's accept attribute unset and tolerates an empty dialog", () => {
180
+ let input;
181
+ const original = document.createElement.bind(document);
182
+ vi.spyOn(document, "createElement").mockImplementation((tag) => {
183
+ const el = original(tag);
184
+ if (tag === "input") {
185
+ input = el;
186
+ vi.spyOn(input, "click").mockImplementation(() => { });
187
+ }
188
+ return el;
189
+ });
190
+ const view = new FileSelection().setup();
191
+ view.open();
192
+ expect(input.accept).toBe("");
193
+ expect(input.multiple).toBe(false);
194
+ input.dispatchEvent(new Event("change"));
195
+ expect(view.files()).toEqual([]);
196
+ vi.restoreAllMocks();
197
+ });
198
+ });
199
+ // ── DropZone ──────────────────────────────────────────────────────────────────
200
+ describe("DropZone", () => {
201
+ function dragEvent(type, files = [], types = ["Files"]) {
202
+ const e = new Event(type, { bubbles: true, cancelable: true });
203
+ Object.defineProperty(e, "dataTransfer", { value: { files, types } });
204
+ return e;
205
+ }
206
+ it("tracks dragging through nested dragenter/dragleave pairs", () => {
207
+ const el = document.createElement("div");
208
+ const dz = new DropZone({ current: el });
209
+ const view = dz.setup();
210
+ dz.onMount();
211
+ el.dispatchEvent(dragEvent("dragenter"));
212
+ el.dispatchEvent(dragEvent("dragenter"));
213
+ expect(view.dragging()).toBe(true);
214
+ el.dispatchEvent(dragEvent("dragleave"));
215
+ expect(view.dragging()).toBe(true);
216
+ el.dispatchEvent(dragEvent("dragleave"));
217
+ expect(view.dragging()).toBe(false);
218
+ });
219
+ it("ignores drags that do not carry files", () => {
220
+ const el = document.createElement("div");
221
+ const dz = new DropZone({ current: el });
222
+ const view = dz.setup();
223
+ dz.onMount();
224
+ const e = dragEvent("dragenter", [], ["text/plain"]);
225
+ el.dispatchEvent(e);
226
+ expect(view.dragging()).toBe(false);
227
+ expect(e.defaultPrevented).toBe(false);
228
+ });
229
+ it("prevents default on dragover so the drop is allowed", () => {
230
+ const el = document.createElement("div");
231
+ const dz = new DropZone({ current: el });
232
+ dz.setup();
233
+ dz.onMount();
234
+ const e = dragEvent("dragover");
235
+ el.dispatchEvent(e);
236
+ expect(e.defaultPrevented).toBe(true);
237
+ });
238
+ it("adds validated dropped files and stops dragging", () => {
239
+ const el = document.createElement("div");
240
+ const dz = new DropZone({ current: el }, { accept: "image/*", multiple: true });
241
+ const view = dz.setup();
242
+ dz.onMount();
243
+ const png = makeFile("a.png", 1, "image/png");
244
+ const txt = makeFile("a.txt");
245
+ el.dispatchEvent(dragEvent("dragenter"));
246
+ const drop = dragEvent("drop", [png, txt]);
247
+ el.dispatchEvent(drop);
248
+ expect(drop.defaultPrevented).toBe(true);
249
+ expect(view.dragging()).toBe(false);
250
+ expect(view.files()).toEqual([png]);
251
+ expect(view.errors()[0].code).toBe("type");
252
+ });
253
+ it("does not allow drops for dragover events without files", () => {
254
+ const el = document.createElement("div");
255
+ const dz = new DropZone({ current: el });
256
+ dz.setup();
257
+ dz.onMount();
258
+ const e = dragEvent("dragover", [], ["text/plain"]);
259
+ el.dispatchEvent(e);
260
+ expect(e.defaultPrevented).toBe(false);
261
+ });
262
+ it("ignores events with no dataTransfer and drops without one", () => {
263
+ const el = document.createElement("div");
264
+ const dz = new DropZone({ current: el });
265
+ const view = dz.setup();
266
+ dz.onMount();
267
+ el.dispatchEvent(new Event("dragenter", { cancelable: true }));
268
+ el.dispatchEvent(new Event("dragover", { cancelable: true }));
269
+ expect(view.dragging()).toBe(false);
270
+ el.dispatchEvent(new Event("drop", { cancelable: true }));
271
+ expect(view.files()).toEqual([]);
272
+ });
273
+ it("dragleave without a matching dragenter keeps dragging false", () => {
274
+ const el = document.createElement("div");
275
+ const dz = new DropZone({ current: el });
276
+ const view = dz.setup();
277
+ dz.onMount();
278
+ el.dispatchEvent(dragEvent("dragleave"));
279
+ expect(view.dragging()).toBe(false);
280
+ });
281
+ it("onUnmount before onMount is a no-op", () => {
282
+ const dz = new DropZone({ current: document.createElement("div") });
283
+ dz.setup();
284
+ expect(() => { dz.onUnmount(); }).not.toThrow();
285
+ });
286
+ it("does nothing when the ref is empty", () => {
287
+ const dz = new DropZone({ current: null });
288
+ dz.setup();
289
+ expect(() => { dz.onMount(); dz.onUnmount(); }).not.toThrow();
290
+ });
291
+ it("removes listeners on unmount", () => {
292
+ const el = document.createElement("div");
293
+ const dz = new DropZone({ current: el });
294
+ const view = dz.setup();
295
+ dz.onMount();
296
+ dz.onUnmount();
297
+ el.dispatchEvent(dragEvent("dragenter"));
298
+ expect(view.dragging()).toBe(false);
299
+ });
300
+ });
301
+ // ── FileUpload ────────────────────────────────────────────────────────────────
302
+ describe("FileUpload", () => {
303
+ beforeEach(() => {
304
+ FakeXHR.instances = [];
305
+ vi.stubGlobal("XMLHttpRequest", FakeXHR);
306
+ });
307
+ afterEach(() => {
308
+ vi.unstubAllGlobals();
309
+ });
310
+ it("uploads on add with the configured request", () => {
311
+ const up = new FileUpload({
312
+ url: "/api/upload",
313
+ method: "PUT",
314
+ headers: { Authorization: "Bearer x" },
315
+ fieldName: "attachment",
316
+ data: { folder: "docs" },
317
+ withCredentials: true,
318
+ });
319
+ const view = up.setup();
320
+ const file = makeFile("a.txt");
321
+ view.add([file]);
322
+ const xhr = FakeXHR.instances[0];
323
+ expect(xhr.method).toBe("PUT");
324
+ expect(xhr.url).toBe("/api/upload");
325
+ expect(xhr.headers).toEqual({ Authorization: "Bearer x" });
326
+ expect(xhr.withCredentials).toBe(true);
327
+ expect(xhr.body?.get("attachment")).toBe(file);
328
+ expect(xhr.body?.get("folder")).toBe("docs");
329
+ expect(view.items()[0].status).toBe("uploading");
330
+ expect(view.uploading()).toBe(true);
331
+ });
332
+ it("resolves url, headers and data from functions", () => {
333
+ const up = new FileUpload({
334
+ url: (f) => `/up/${f.name}`,
335
+ headers: () => ({ "X-Token": "t" }),
336
+ data: (f) => ({ name: f.name }),
337
+ });
338
+ const view = up.setup();
339
+ view.add([makeFile("a.txt")]);
340
+ const xhr = FakeXHR.instances[0];
341
+ expect(xhr.url).toBe("/up/a.txt");
342
+ expect(xhr.headers).toEqual({ "X-Token": "t" });
343
+ expect(xhr.body?.get("name")).toBe("a.txt");
344
+ expect(xhr.body?.get("file")).toBeInstanceOf(File);
345
+ });
346
+ it("reports progress per item and overall", () => {
347
+ const view = new FileUpload({ url: "/u" }).setup();
348
+ view.add([makeFile("a"), makeFile("b")]);
349
+ FakeXHR.instances[0].upload.onprogress?.({ lengthComputable: true, loaded: 50, total: 100 });
350
+ FakeXHR.instances[1].upload.onprogress?.({ lengthComputable: true, loaded: 100, total: 100 });
351
+ expect(view.items()[0].progress).toBe(50);
352
+ expect(view.items()[1].progress).toBe(100);
353
+ expect(view.progress()).toBe(75);
354
+ });
355
+ it("ignores non-computable progress events", () => {
356
+ const view = new FileUpload({ url: "/u" }).setup();
357
+ view.add([makeFile("a")]);
358
+ FakeXHR.instances[0].upload.onprogress?.({ lengthComputable: false, loaded: 5, total: 0 });
359
+ expect(view.items()[0].progress).toBe(0);
360
+ });
361
+ it("marks success, parses JSON and calls onSuccess", () => {
362
+ const onSuccess = vi.fn();
363
+ const view = new FileUpload({ url: "/u", onSuccess }).setup();
364
+ view.add([makeFile("a")]);
365
+ FakeXHR.instances[0].respond(200, '{"id":7}');
366
+ const item = view.items()[0];
367
+ expect(item.status).toBe("success");
368
+ expect(item.progress).toBe(100);
369
+ expect(item.response).toEqual({ id: 7 });
370
+ expect(onSuccess).toHaveBeenCalledWith(expect.objectContaining({ status: "success" }));
371
+ expect(view.uploading()).toBe(false);
372
+ });
373
+ it("keeps raw text for non-JSON responses", () => {
374
+ const view = new FileUpload({ url: "/u" }).setup();
375
+ view.add([makeFile("a")]);
376
+ FakeXHR.instances[0].respond(201, "ok");
377
+ expect(view.items()[0].response).toBe("ok");
378
+ });
379
+ it("marks HTTP failures and calls onError", () => {
380
+ const onError = vi.fn();
381
+ const view = new FileUpload({ url: "/u", onError }).setup();
382
+ view.add([makeFile("a")]);
383
+ FakeXHR.instances[0].respond(500);
384
+ expect(view.items()[0]).toMatchObject({ status: "error", error: "HTTP 500" });
385
+ expect(onError).toHaveBeenCalledTimes(1);
386
+ });
387
+ it("marks network errors", () => {
388
+ const view = new FileUpload({ url: "/u" }).setup();
389
+ view.add([makeFile("a")]);
390
+ FakeXHR.instances[0].onerror?.();
391
+ expect(view.items()[0]).toMatchObject({ status: "error", error: "Network error" });
392
+ });
393
+ it("respects concurrency and starts queued files as slots free up", () => {
394
+ const view = new FileUpload({ url: "/u", concurrency: 2 }).setup();
395
+ view.add([makeFile("a"), makeFile("b"), makeFile("c")]);
396
+ expect(FakeXHR.instances).toHaveLength(2);
397
+ expect(view.items().map((i) => i.status)).toEqual(["uploading", "uploading", "pending"]);
398
+ FakeXHR.instances[0].respond(200);
399
+ expect(FakeXHR.instances).toHaveLength(3);
400
+ expect(view.items()[2].status).toBe("uploading");
401
+ });
402
+ it("does not upload until start() when autoStart is false", () => {
403
+ const view = new FileUpload({ url: "/u", autoStart: false }).setup();
404
+ view.add([makeFile("a")]);
405
+ expect(FakeXHR.instances).toHaveLength(0);
406
+ expect(view.items()[0].status).toBe("pending");
407
+ view.start();
408
+ expect(FakeXHR.instances).toHaveLength(1);
409
+ });
410
+ it("validates files and exposes the rejections", () => {
411
+ const view = new FileUpload({ url: "/u", maxSize: 5 }).setup();
412
+ view.add([makeFile("big", 100)]);
413
+ expect(view.items()).toEqual([]);
414
+ expect(view.errors()[0].code).toBe("max-size");
415
+ expect(FakeXHR.instances).toHaveLength(0);
416
+ });
417
+ it("counts existing items against maxFiles", () => {
418
+ const view = new FileUpload({ url: "/u", maxFiles: 1 }).setup();
419
+ view.add([makeFile("a")]);
420
+ view.add([makeFile("b")]);
421
+ expect(view.items()).toHaveLength(1);
422
+ expect(view.errors()[0].code).toBe("max-files");
423
+ });
424
+ it("cancel aborts an in-flight upload", () => {
425
+ const view = new FileUpload({ url: "/u" }).setup();
426
+ view.add([makeFile("a")]);
427
+ view.cancel(view.items()[0].id);
428
+ expect(FakeXHR.instances[0].aborted).toBe(true);
429
+ expect(view.items()[0].status).toBe("aborted");
430
+ });
431
+ it("cancel marks a queued upload as aborted so it never starts", () => {
432
+ const view = new FileUpload({ url: "/u", autoStart: false }).setup();
433
+ view.add([makeFile("a")]);
434
+ view.cancel(view.items()[0].id);
435
+ view.start();
436
+ expect(view.items()[0].status).toBe("aborted");
437
+ expect(FakeXHR.instances).toHaveLength(0);
438
+ });
439
+ it("cancel ignores unknown ids and finished items", () => {
440
+ const view = new FileUpload({ url: "/u" }).setup();
441
+ view.add([makeFile("a")]);
442
+ FakeXHR.instances[0].respond(200);
443
+ view.cancel(view.items()[0].id);
444
+ view.cancel("missing");
445
+ expect(view.items()[0].status).toBe("success");
446
+ });
447
+ it("retry ignores unknown ids", () => {
448
+ const view = new FileUpload({ url: "/u" }).setup();
449
+ view.retry("missing");
450
+ expect(FakeXHR.instances).toHaveLength(0);
451
+ });
452
+ it("add ignores empty input", () => {
453
+ const view = new FileUpload({ url: "/u" }).setup();
454
+ view.add([]);
455
+ expect(view.items()).toEqual([]);
456
+ expect(view.errors()).toEqual([]);
457
+ });
458
+ it("retry re-uploads failed and aborted items only", () => {
459
+ const view = new FileUpload({ url: "/u" }).setup();
460
+ view.add([makeFile("a")]);
461
+ const id = view.items()[0].id;
462
+ view.retry(id);
463
+ expect(FakeXHR.instances).toHaveLength(1);
464
+ FakeXHR.instances[0].respond(500);
465
+ view.retry(id);
466
+ expect(FakeXHR.instances).toHaveLength(2);
467
+ expect(view.items()[0]).toMatchObject({ status: "uploading", progress: 0, error: undefined });
468
+ });
469
+ it("remove aborts and drops the item; clear aborts everything", () => {
470
+ const view = new FileUpload({ url: "/u" }).setup();
471
+ view.add([makeFile("a"), makeFile("b")]);
472
+ view.remove(view.items()[0].id);
473
+ expect(FakeXHR.instances[0].aborted).toBe(true);
474
+ expect(view.items()).toHaveLength(1);
475
+ view.clear();
476
+ expect(FakeXHR.instances[1].aborted).toBe(true);
477
+ expect(view.items()).toEqual([]);
478
+ expect(view.errors()).toEqual([]);
479
+ });
480
+ it("progress is 0 with no items", () => {
481
+ const view = new FileUpload({ url: "/u" }).setup();
482
+ expect(view.progress()).toBe(0);
483
+ });
484
+ it("onUnmount aborts in-flight requests and stops queueing", () => {
485
+ const up = new FileUpload({ url: "/u", concurrency: 1 });
486
+ const view = up.setup();
487
+ view.add([makeFile("a"), makeFile("b")]);
488
+ up.onUnmount();
489
+ expect(FakeXHR.instances[0].aborted).toBe(true);
490
+ expect(FakeXHR.instances).toHaveLength(1);
491
+ });
492
+ });
493
+ // ── FilePreview ───────────────────────────────────────────────────────────────
494
+ describe("FilePreview", () => {
495
+ beforeEach(() => {
496
+ let n = 0;
497
+ URL.createObjectURL = vi.fn(() => `blob:preview-${++n}`);
498
+ URL.revokeObjectURL = vi.fn();
499
+ });
500
+ it("is null without a file", () => {
501
+ const { url } = new FilePreview(() => null).setup();
502
+ expect(url()).toBeNull();
503
+ expect(URL.createObjectURL).not.toHaveBeenCalled();
504
+ });
505
+ it("creates one object URL per file and reuses it", () => {
506
+ const file = signal(makeFile("a.png"));
507
+ const { url } = new FilePreview(file).setup();
508
+ expect(url()).toBe("blob:preview-1");
509
+ expect(url()).toBe("blob:preview-1");
510
+ expect(URL.createObjectURL).toHaveBeenCalledTimes(1);
511
+ });
512
+ it("revokes the previous URL when the file changes", () => {
513
+ const file = signal(makeFile("a.png"));
514
+ const { url } = new FilePreview(file).setup();
515
+ url();
516
+ file.set(makeFile("b.png"));
517
+ expect(url()).toBe("blob:preview-2");
518
+ expect(URL.revokeObjectURL).toHaveBeenCalledWith("blob:preview-1");
519
+ file.set(null);
520
+ expect(url()).toBeNull();
521
+ expect(URL.revokeObjectURL).toHaveBeenCalledWith("blob:preview-2");
522
+ });
523
+ it("revokes the URL on unmount", () => {
524
+ const preview = new FilePreview(() => makeFile("a.png"));
525
+ const { url } = preview.setup();
526
+ url();
527
+ preview.onUnmount();
528
+ expect(URL.revokeObjectURL).toHaveBeenCalledWith("blob:preview-1");
529
+ });
530
+ });
531
+ //# sourceMappingURL=upload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload.test.js","sourceRoot":"","sources":["../../src/__tests__/upload.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export { WindowSize, ScrollPosition, ElementSize, Intersection, Focus, } from ".
2
2
  export { MediaQuery, ColorScheme, Mouse, KeyCombo, Idle } from "./browser";
3
3
  export { Clipboard, Geolocation, TimeAgo, Pagination, type PaginationOptions, } from "./utilities";
4
4
  export { VirtualList, type VirtualItem } from "./list";
5
+ export { FileSelection, DropZone, FileUpload, FilePreview, formatFileSize, validateFiles, type FileValidationOptions, type FileSelectionOptions, type FileUploadOptions, type FileError, type FileErrorCode, type UploadItem, type UploadStatus, } from "./upload";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,KAAK,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,KAAK,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,EACV,KAAK,iBAAiB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,EACb,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -2,4 +2,5 @@ export { WindowSize, ScrollPosition, ElementSize, Intersection, Focus, } from ".
2
2
  export { MediaQuery, ColorScheme, Mouse, KeyCombo, Idle } from "./browser";
3
3
  export { Clipboard, Geolocation, TimeAgo, Pagination, } from "./utilities";
4
4
  export { VirtualList } from "./list";
5
+ export { FileSelection, DropZone, FileUpload, FilePreview, formatFileSize, validateFiles, } from "./upload";
5
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,KAAK,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,GAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,KAAK,GACN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,WAAW,EACX,OAAO,EACP,UAAU,GAEX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAoB,MAAM,QAAQ,CAAC;AACvD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,WAAW,EACX,cAAc,EACd,aAAa,GAQd,MAAM,UAAU,CAAC"}