@caprionlinesrl/puck-plugin-media 0.1.4 → 0.1.5

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,557 @@
1
+ "use client";
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/mocks/index.ts
22
+ var mocks_exports = {};
23
+ __export(mocks_exports, {
24
+ mockMediaConfig: () => mockMediaConfig
25
+ });
26
+ module.exports = __toCommonJS(mocks_exports);
27
+ var mockImageItems = [
28
+ {
29
+ id: "1",
30
+ url: "https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?w=800",
31
+ thumbnailUrl: "https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?w=200",
32
+ filename: "coastal-sunset.jpg",
33
+ alt: { en: "Coastal sunset", it: "Tramonto sulla costa" },
34
+ width: 1920,
35
+ height: 1280,
36
+ size: 245e3
37
+ },
38
+ {
39
+ id: "2",
40
+ url: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800",
41
+ thumbnailUrl: "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=200",
42
+ filename: "snowy-mountains.jpg",
43
+ alt: { en: "Snowy mountains", it: "Montagne innevate" },
44
+ width: 1920,
45
+ height: 1280,
46
+ size: 312e3
47
+ },
48
+ {
49
+ id: "3",
50
+ url: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800",
51
+ thumbnailUrl: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=200",
52
+ filename: "forest-trail.jpg",
53
+ alt: { en: "Forest trail", it: "Sentiero nel bosco" },
54
+ width: 1920,
55
+ height: 1280,
56
+ size: 198e3
57
+ },
58
+ {
59
+ id: "4",
60
+ url: "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800",
61
+ thumbnailUrl: "https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=200",
62
+ filename: "mountain-lake.jpg",
63
+ alt: { en: "Mountain lake", it: "Lago di montagna" },
64
+ width: 1920,
65
+ height: 1280,
66
+ size: 276e3
67
+ },
68
+ {
69
+ id: "5",
70
+ url: "https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=800",
71
+ thumbnailUrl: "https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=200",
72
+ filename: "misty-forest.jpg",
73
+ alt: { en: "Misty forest", it: "Foresta nebbiosa" },
74
+ width: 1920,
75
+ height: 1280,
76
+ size: 223e3
77
+ },
78
+ {
79
+ id: "6",
80
+ url: "https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=800",
81
+ thumbnailUrl: "https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=200",
82
+ filename: "desert-sunset.jpg",
83
+ alt: { en: "Desert sunset", it: "Tramonto nel deserto" },
84
+ width: 1920,
85
+ height: 1280,
86
+ size: 189e3
87
+ },
88
+ {
89
+ id: "7",
90
+ url: "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=800",
91
+ thumbnailUrl: "https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=200",
92
+ filename: "majestic-mountain.jpg",
93
+ alt: { en: "Majestic mountain", it: "Montagna maestosa" },
94
+ width: 1920,
95
+ height: 1280,
96
+ size: 334e3
97
+ },
98
+ {
99
+ id: "8",
100
+ url: "https://images.unsplash.com/photo-1475924156734-496f6cac6ec1?w=800",
101
+ thumbnailUrl: "https://images.unsplash.com/photo-1475924156734-496f6cac6ec1?w=200",
102
+ filename: "ocean-sunset.jpg",
103
+ alt: { en: "Ocean sunset", it: "Tramonto sul mare" },
104
+ width: 1920,
105
+ height: 1280,
106
+ size: 267e3
107
+ },
108
+ {
109
+ id: "9",
110
+ url: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800",
111
+ thumbnailUrl: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200",
112
+ filename: "portrait-man.jpg",
113
+ alt: { en: "Man portrait", it: "Ritratto uomo" },
114
+ width: 1280,
115
+ height: 1920,
116
+ size: 156e3
117
+ },
118
+ {
119
+ id: "10",
120
+ url: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=800",
121
+ thumbnailUrl: "https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=200",
122
+ filename: "portrait-woman.jpg",
123
+ alt: { en: "Woman portrait", it: "Ritratto donna" },
124
+ width: 1280,
125
+ height: 1920,
126
+ size: 178e3
127
+ },
128
+ {
129
+ id: "11",
130
+ url: "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800",
131
+ thumbnailUrl: "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=200",
132
+ filename: "team-meeting.jpg",
133
+ alt: { en: "Team meeting", it: "Riunione di team" },
134
+ width: 1920,
135
+ height: 1280,
136
+ size: 298e3
137
+ },
138
+ {
139
+ id: "12",
140
+ url: "https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=800",
141
+ thumbnailUrl: "https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=200",
142
+ filename: "team-collaboration.jpg",
143
+ alt: { en: "Team collaboration", it: "Collaborazione team" },
144
+ width: 1920,
145
+ height: 1280,
146
+ size: 312e3
147
+ }
148
+ ];
149
+ var uploadedImages = [];
150
+ var mockGalleries = [
151
+ {
152
+ id: "gallery-1",
153
+ name: "Landscapes",
154
+ coverImage: mockImageItems[0],
155
+ images: mockImageItems.slice(0, 8),
156
+ imageCount: 8,
157
+ createdAt: "2024-01-15T10:00:00Z"
158
+ },
159
+ {
160
+ id: "gallery-2",
161
+ name: "Team",
162
+ coverImage: mockImageItems[10],
163
+ images: mockImageItems.slice(8, 12),
164
+ imageCount: 4,
165
+ createdAt: "2024-01-20T14:30:00Z"
166
+ },
167
+ {
168
+ id: "gallery-3",
169
+ name: "Portfolio",
170
+ coverImage: mockImageItems[2],
171
+ images: mockImageItems.slice(2, 6),
172
+ imageCount: 4,
173
+ createdAt: "2024-02-01T09:15:00Z"
174
+ }
175
+ ];
176
+ var mockDocumentItems = [
177
+ {
178
+ id: "doc-1",
179
+ url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
180
+ filename: "restaurant-menu.pdf",
181
+ title: { en: "Restaurant Menu", it: "Menu Ristorante" },
182
+ mimeType: "application/pdf",
183
+ size: 1258e3,
184
+ extension: "pdf",
185
+ createdAt: "2024-01-10T08:00:00Z"
186
+ },
187
+ {
188
+ id: "doc-2",
189
+ url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
190
+ filename: "price-list-2024.pdf",
191
+ title: { en: "Price List 2024", it: "Listino Prezzi 2024" },
192
+ mimeType: "application/pdf",
193
+ size: 856e3,
194
+ extension: "pdf",
195
+ createdAt: "2024-01-05T11:30:00Z"
196
+ },
197
+ {
198
+ id: "doc-3",
199
+ url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
200
+ filename: "product-brochure.pdf",
201
+ title: { en: "Product Brochure", it: "Brochure Prodotti" },
202
+ mimeType: "application/pdf",
203
+ size: 245e4,
204
+ extension: "pdf",
205
+ createdAt: "2024-02-12T16:45:00Z"
206
+ },
207
+ {
208
+ id: "doc-4",
209
+ url: "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
210
+ filename: "terms-and-conditions.pdf",
211
+ title: { en: "Terms and Conditions", it: "Termini e Condizioni" },
212
+ mimeType: "application/pdf",
213
+ size: 345e3,
214
+ extension: "pdf",
215
+ createdAt: "2024-01-01T00:00:00Z"
216
+ }
217
+ ];
218
+ var uploadedDocuments = [];
219
+ function getImageDimensions(file) {
220
+ return new Promise((resolve) => {
221
+ const img = new Image();
222
+ img.onload = () => {
223
+ resolve({ width: img.width, height: img.height });
224
+ URL.revokeObjectURL(img.src);
225
+ };
226
+ img.onerror = () => {
227
+ resolve({ width: void 0, height: void 0 });
228
+ };
229
+ img.src = URL.createObjectURL(file);
230
+ });
231
+ }
232
+ function generateId(prefix) {
233
+ return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
234
+ }
235
+ function delay(ms) {
236
+ return new Promise((resolve) => setTimeout(resolve, ms));
237
+ }
238
+ async function fetchImageList({
239
+ query,
240
+ page = 1,
241
+ pageSize = 20
242
+ }) {
243
+ await delay(300);
244
+ const allItems = [...uploadedImages, ...mockImageItems];
245
+ let filteredItems = allItems;
246
+ if (query) {
247
+ const lowerQuery = query.toLowerCase();
248
+ filteredItems = allItems.filter(
249
+ (item) => item.filename?.toLowerCase().includes(lowerQuery) || item.alt?.it?.toLowerCase().includes(lowerQuery) || item.alt?.en?.toLowerCase().includes(lowerQuery)
250
+ );
251
+ }
252
+ const startIndex = (page - 1) * pageSize;
253
+ const endIndex = startIndex + pageSize;
254
+ const paginatedItems = filteredItems.slice(startIndex, endIndex);
255
+ return {
256
+ items: paginatedItems,
257
+ total: filteredItems.length,
258
+ hasMore: endIndex < filteredItems.length
259
+ };
260
+ }
261
+ async function uploadImages(files, { onProgress }) {
262
+ const fileArray = Array.isArray(files) ? files : [files];
263
+ const results = [];
264
+ for (let i = 0; i < fileArray.length; i++) {
265
+ const file = fileArray[i];
266
+ const totalSteps = 10;
267
+ for (let step = 1; step <= totalSteps; step++) {
268
+ await delay(100);
269
+ onProgress(Math.round((i + step / totalSteps) / fileArray.length * 100));
270
+ }
271
+ let width;
272
+ let height;
273
+ if (file.type.startsWith("image/")) {
274
+ const dimensions = await getImageDimensions(file);
275
+ width = dimensions.width;
276
+ height = dimensions.height;
277
+ }
278
+ const url = URL.createObjectURL(file);
279
+ const newItem = {
280
+ id: generateId("uploaded-img"),
281
+ url,
282
+ thumbnailUrl: url,
283
+ filename: file.name,
284
+ alt: {},
285
+ width,
286
+ height,
287
+ size: file.size,
288
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
289
+ };
290
+ uploadedImages = [newItem, ...uploadedImages];
291
+ results.push(newItem);
292
+ }
293
+ return fileArray.length === 1 ? results[0] : results;
294
+ }
295
+ async function updateImage(id, data) {
296
+ await delay(200);
297
+ let item = uploadedImages.find((img) => img.id === id);
298
+ if (item) {
299
+ item = { ...item, ...data };
300
+ uploadedImages = uploadedImages.map((img) => img.id === id ? item : img);
301
+ return item;
302
+ }
303
+ const mockItem = mockImageItems.find((img) => img.id === id);
304
+ if (mockItem) {
305
+ return { ...mockItem, ...data };
306
+ }
307
+ throw new Error("Image not found");
308
+ }
309
+ async function deleteImage(id) {
310
+ await delay(200);
311
+ const uploadedIndex = uploadedImages.findIndex((img) => img.id === id);
312
+ if (uploadedIndex !== -1) {
313
+ uploadedImages = uploadedImages.filter((img) => img.id !== id);
314
+ return;
315
+ }
316
+ const mockIndex = mockImageItems.findIndex((img) => img.id === id);
317
+ if (mockIndex !== -1) {
318
+ mockImageItems.splice(mockIndex, 1);
319
+ return;
320
+ }
321
+ throw new Error("Image not found");
322
+ }
323
+ async function fetchGalleryList({
324
+ query,
325
+ page = 1,
326
+ pageSize = 20
327
+ }) {
328
+ await delay(300);
329
+ let filteredItems = [...mockGalleries];
330
+ if (query) {
331
+ const lowerQuery = query.toLowerCase();
332
+ filteredItems = mockGalleries.filter(
333
+ (gallery) => gallery.name.toLowerCase().includes(lowerQuery)
334
+ );
335
+ }
336
+ const startIndex = (page - 1) * pageSize;
337
+ const endIndex = startIndex + pageSize;
338
+ const paginatedItems = filteredItems.slice(startIndex, endIndex);
339
+ return {
340
+ items: paginatedItems,
341
+ total: filteredItems.length,
342
+ hasMore: endIndex < filteredItems.length
343
+ };
344
+ }
345
+ async function fetchGallery(id) {
346
+ await delay(200);
347
+ const gallery = mockGalleries.find((g) => g.id === id);
348
+ if (!gallery) {
349
+ throw new Error("Gallery not found");
350
+ }
351
+ return gallery;
352
+ }
353
+ async function createGallery(name) {
354
+ await delay(300);
355
+ const newGallery = {
356
+ id: generateId("gallery"),
357
+ name,
358
+ coverImage: void 0,
359
+ images: [],
360
+ imageCount: 0,
361
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
362
+ };
363
+ mockGalleries = [newGallery, ...mockGalleries];
364
+ return newGallery;
365
+ }
366
+ async function deleteGallery(id) {
367
+ await delay(200);
368
+ mockGalleries = mockGalleries.filter((g) => g.id !== id);
369
+ }
370
+ async function uploadToGallery(galleryId, files, { onProgress }) {
371
+ const fileArray = Array.isArray(files) ? files : [files];
372
+ const results = [];
373
+ for (let i = 0; i < fileArray.length; i++) {
374
+ const file = fileArray[i];
375
+ const totalSteps = 10;
376
+ for (let step = 1; step <= totalSteps; step++) {
377
+ await delay(100);
378
+ onProgress(Math.round((i + step / totalSteps) / fileArray.length * 100));
379
+ }
380
+ let width;
381
+ let height;
382
+ if (file.type.startsWith("image/")) {
383
+ const dimensions = await getImageDimensions(file);
384
+ width = dimensions.width;
385
+ height = dimensions.height;
386
+ }
387
+ const url = URL.createObjectURL(file);
388
+ const newItem = {
389
+ id: generateId("gallery-img"),
390
+ url,
391
+ thumbnailUrl: url,
392
+ filename: file.name,
393
+ alt: {},
394
+ width,
395
+ height,
396
+ size: file.size
397
+ };
398
+ results.push(newItem);
399
+ }
400
+ mockGalleries = mockGalleries.map((gallery) => {
401
+ if (gallery.id === galleryId) {
402
+ const newImages = [...results, ...gallery.images];
403
+ return {
404
+ ...gallery,
405
+ images: newImages,
406
+ imageCount: newImages.length,
407
+ coverImage: gallery.coverImage || results[0]
408
+ };
409
+ }
410
+ return gallery;
411
+ });
412
+ return fileArray.length === 1 ? results[0] : results;
413
+ }
414
+ async function removeFromGallery(galleryId, imageId) {
415
+ await delay(200);
416
+ mockGalleries = mockGalleries.map((gallery) => {
417
+ if (gallery.id === galleryId) {
418
+ const newImages = gallery.images.filter((img) => img.id !== imageId);
419
+ return {
420
+ ...gallery,
421
+ images: newImages,
422
+ imageCount: newImages.length,
423
+ coverImage: gallery.coverImage?.id === imageId ? newImages[0] || void 0 : gallery.coverImage
424
+ };
425
+ }
426
+ return gallery;
427
+ });
428
+ }
429
+ async function updateGalleryImage(galleryId, imageId, data) {
430
+ await delay(200);
431
+ let updatedImage = null;
432
+ mockGalleries = mockGalleries.map((gallery) => {
433
+ if (gallery.id === galleryId) {
434
+ return {
435
+ ...gallery,
436
+ images: gallery.images.map((img) => {
437
+ if (img.id === imageId) {
438
+ updatedImage = { ...img, ...data };
439
+ return updatedImage;
440
+ }
441
+ return img;
442
+ })
443
+ };
444
+ }
445
+ return gallery;
446
+ });
447
+ if (!updatedImage) {
448
+ throw new Error("Image not found in gallery");
449
+ }
450
+ return updatedImage;
451
+ }
452
+ async function fetchDocumentList({
453
+ query,
454
+ page = 1,
455
+ pageSize = 20
456
+ }) {
457
+ await delay(300);
458
+ const allItems = [...uploadedDocuments, ...mockDocumentItems];
459
+ let filteredItems = allItems;
460
+ if (query) {
461
+ const lowerQuery = query.toLowerCase();
462
+ filteredItems = allItems.filter(
463
+ (item) => item.filename.toLowerCase().includes(lowerQuery) || item.title?.it?.toLowerCase().includes(lowerQuery) || item.title?.en?.toLowerCase().includes(lowerQuery)
464
+ );
465
+ }
466
+ const startIndex = (page - 1) * pageSize;
467
+ const endIndex = startIndex + pageSize;
468
+ const paginatedItems = filteredItems.slice(startIndex, endIndex);
469
+ return {
470
+ items: paginatedItems,
471
+ total: filteredItems.length,
472
+ hasMore: endIndex < filteredItems.length
473
+ };
474
+ }
475
+ async function uploadDocuments(files, { onProgress }) {
476
+ const fileArray = Array.isArray(files) ? files : [files];
477
+ const results = [];
478
+ for (let i = 0; i < fileArray.length; i++) {
479
+ const file = fileArray[i];
480
+ const totalSteps = 10;
481
+ for (let step = 1; step <= totalSteps; step++) {
482
+ await delay(100);
483
+ onProgress(Math.round((i + step / totalSteps) / fileArray.length * 100));
484
+ }
485
+ const url = URL.createObjectURL(file);
486
+ const extension = file.name.split(".").pop() || "";
487
+ const newItem = {
488
+ id: generateId("uploaded-doc"),
489
+ url,
490
+ filename: file.name,
491
+ title: {},
492
+ mimeType: file.type,
493
+ size: file.size,
494
+ extension,
495
+ createdAt: (/* @__PURE__ */ new Date()).toISOString()
496
+ };
497
+ uploadedDocuments = [newItem, ...uploadedDocuments];
498
+ results.push(newItem);
499
+ }
500
+ return fileArray.length === 1 ? results[0] : results;
501
+ }
502
+ async function updateDocument(id, data) {
503
+ await delay(200);
504
+ let item = uploadedDocuments.find((doc) => doc.id === id);
505
+ if (item) {
506
+ item = { ...item, ...data };
507
+ uploadedDocuments = uploadedDocuments.map((doc) => doc.id === id ? item : doc);
508
+ return item;
509
+ }
510
+ const mockItem = mockDocumentItems.find((doc) => doc.id === id);
511
+ if (mockItem) {
512
+ return { ...mockItem, ...data };
513
+ }
514
+ throw new Error("Document not found");
515
+ }
516
+ async function deleteDocument(id) {
517
+ await delay(200);
518
+ const uploadedIndex = uploadedDocuments.findIndex((doc) => doc.id === id);
519
+ if (uploadedIndex !== -1) {
520
+ uploadedDocuments = uploadedDocuments.filter((doc) => doc.id !== id);
521
+ return;
522
+ }
523
+ const mockIndex = mockDocumentItems.findIndex((doc) => doc.id === id);
524
+ if (mockIndex !== -1) {
525
+ mockDocumentItems.splice(mockIndex, 1);
526
+ return;
527
+ }
528
+ throw new Error("Document not found");
529
+ }
530
+ var mockMediaConfig = {
531
+ image: {
532
+ fetchList: fetchImageList,
533
+ upload: uploadImages,
534
+ update: updateImage,
535
+ delete: deleteImage
536
+ },
537
+ gallery: {
538
+ fetchList: fetchGalleryList,
539
+ fetch: fetchGallery,
540
+ create: createGallery,
541
+ delete: deleteGallery,
542
+ upload: uploadToGallery,
543
+ removeImage: removeFromGallery,
544
+ updateImage: updateGalleryImage
545
+ },
546
+ document: {
547
+ fetchList: fetchDocumentList,
548
+ upload: uploadDocuments,
549
+ update: updateDocument,
550
+ delete: deleteDocument
551
+ }
552
+ };
553
+ // Annotate the CommonJS export names for ESM import in node:
554
+ 0 && (module.exports = {
555
+ mockMediaConfig
556
+ });
557
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/mocks/index.ts"],"sourcesContent":["/**\n * Mock media data and API functions for demo/testing purposes\n *\n * Usage:\n * ```typescript\n * import { createMediaPlugin } from '@caprionlinesrl/puck-plugin-media';\n * import { mockMediaConfig } from '@caprionlinesrl/puck-plugin-media/mocks';\n *\n * const mediaPlugin = createMediaPlugin({\n * ...mockMediaConfig,\n * languages: [\n * { code: 'en', label: 'English' },\n * { code: 'it', label: 'Italiano' },\n * ],\n * });\n * ```\n */\n\nimport type {\n ImageItem,\n GalleryItem,\n DocumentItem,\n FetchListParams,\n FetchListResult,\n UploadCallbacks,\n MediaPluginOptions,\n} from '../types';\n\n// =============================================================================\n// IMAGE DATA\n// =============================================================================\n\nconst mockImageItems: ImageItem[] = [\n {\n id: '1',\n url: 'https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1682687220742-aba13b6e50ba?w=200',\n filename: 'coastal-sunset.jpg',\n alt: { en: 'Coastal sunset', it: 'Tramonto sulla costa' },\n width: 1920,\n height: 1280,\n size: 245000,\n },\n {\n id: '2',\n url: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=200',\n filename: 'snowy-mountains.jpg',\n alt: { en: 'Snowy mountains', it: 'Montagne innevate' },\n width: 1920,\n height: 1280,\n size: 312000,\n },\n {\n id: '3',\n url: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=200',\n filename: 'forest-trail.jpg',\n alt: { en: 'Forest trail', it: 'Sentiero nel bosco' },\n width: 1920,\n height: 1280,\n size: 198000,\n },\n {\n id: '4',\n url: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1470071459604-3b5ec3a7fe05?w=200',\n filename: 'mountain-lake.jpg',\n alt: { en: 'Mountain lake', it: 'Lago di montagna' },\n width: 1920,\n height: 1280,\n size: 276000,\n },\n {\n id: '5',\n url: 'https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1426604966848-d7adac402bff?w=200',\n filename: 'misty-forest.jpg',\n alt: { en: 'Misty forest', it: 'Foresta nebbiosa' },\n width: 1920,\n height: 1280,\n size: 223000,\n },\n {\n id: '6',\n url: 'https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1472214103451-9374bd1c798e?w=200',\n filename: 'desert-sunset.jpg',\n alt: { en: 'Desert sunset', it: 'Tramonto nel deserto' },\n width: 1920,\n height: 1280,\n size: 189000,\n },\n {\n id: '7',\n url: 'https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=200',\n filename: 'majestic-mountain.jpg',\n alt: { en: 'Majestic mountain', it: 'Montagna maestosa' },\n width: 1920,\n height: 1280,\n size: 334000,\n },\n {\n id: '8',\n url: 'https://images.unsplash.com/photo-1475924156734-496f6cac6ec1?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1475924156734-496f6cac6ec1?w=200',\n filename: 'ocean-sunset.jpg',\n alt: { en: 'Ocean sunset', it: 'Tramonto sul mare' },\n width: 1920,\n height: 1280,\n size: 267000,\n },\n {\n id: '9',\n url: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=200',\n filename: 'portrait-man.jpg',\n alt: { en: 'Man portrait', it: 'Ritratto uomo' },\n width: 1280,\n height: 1920,\n size: 156000,\n },\n {\n id: '10',\n url: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=200',\n filename: 'portrait-woman.jpg',\n alt: { en: 'Woman portrait', it: 'Ritratto donna' },\n width: 1280,\n height: 1920,\n size: 178000,\n },\n {\n id: '11',\n url: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=200',\n filename: 'team-meeting.jpg',\n alt: { en: 'Team meeting', it: 'Riunione di team' },\n width: 1920,\n height: 1280,\n size: 298000,\n },\n {\n id: '12',\n url: 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=800',\n thumbnailUrl: 'https://images.unsplash.com/photo-1522071820081-009f0129c71c?w=200',\n filename: 'team-collaboration.jpg',\n alt: { en: 'Team collaboration', it: 'Collaborazione team' },\n width: 1920,\n height: 1280,\n size: 312000,\n },\n];\n\n// Store for dynamically uploaded images (in-memory for demo)\nlet uploadedImages: ImageItem[] = [];\n\n// =============================================================================\n// GALLERY DATA\n// =============================================================================\n\nlet mockGalleries: GalleryItem[] = [\n {\n id: 'gallery-1',\n name: 'Landscapes',\n coverImage: mockImageItems[0],\n images: mockImageItems.slice(0, 8),\n imageCount: 8,\n createdAt: '2024-01-15T10:00:00Z',\n },\n {\n id: 'gallery-2',\n name: 'Team',\n coverImage: mockImageItems[10],\n images: mockImageItems.slice(8, 12),\n imageCount: 4,\n createdAt: '2024-01-20T14:30:00Z',\n },\n {\n id: 'gallery-3',\n name: 'Portfolio',\n coverImage: mockImageItems[2],\n images: mockImageItems.slice(2, 6),\n imageCount: 4,\n createdAt: '2024-02-01T09:15:00Z',\n },\n];\n\n// =============================================================================\n// DOCUMENT DATA\n// =============================================================================\n\nlet mockDocumentItems: DocumentItem[] = [\n {\n id: 'doc-1',\n url: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',\n filename: 'restaurant-menu.pdf',\n title: { en: 'Restaurant Menu', it: 'Menu Ristorante' },\n mimeType: 'application/pdf',\n size: 1258000,\n extension: 'pdf',\n createdAt: '2024-01-10T08:00:00Z',\n },\n {\n id: 'doc-2',\n url: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',\n filename: 'price-list-2024.pdf',\n title: { en: 'Price List 2024', it: 'Listino Prezzi 2024' },\n mimeType: 'application/pdf',\n size: 856000,\n extension: 'pdf',\n createdAt: '2024-01-05T11:30:00Z',\n },\n {\n id: 'doc-3',\n url: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',\n filename: 'product-brochure.pdf',\n title: { en: 'Product Brochure', it: 'Brochure Prodotti' },\n mimeType: 'application/pdf',\n size: 2450000,\n extension: 'pdf',\n createdAt: '2024-02-12T16:45:00Z',\n },\n {\n id: 'doc-4',\n url: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',\n filename: 'terms-and-conditions.pdf',\n title: { en: 'Terms and Conditions', it: 'Termini e Condizioni' },\n mimeType: 'application/pdf',\n size: 345000,\n extension: 'pdf',\n createdAt: '2024-01-01T00:00:00Z',\n },\n];\n\n// Store for dynamically uploaded documents (in-memory for demo)\nlet uploadedDocuments: DocumentItem[] = [];\n\n// =============================================================================\n// HELPER FUNCTIONS\n// =============================================================================\n\n/**\n * Helper to get image dimensions\n */\nfunction getImageDimensions(file: File): Promise<{ width?: number; height?: number }> {\n return new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n resolve({ width: img.width, height: img.height });\n URL.revokeObjectURL(img.src);\n };\n img.onerror = () => {\n resolve({ width: undefined, height: undefined });\n };\n img.src = URL.createObjectURL(file);\n });\n}\n\n/**\n * Generate a unique ID\n */\nfunction generateId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Simulate network delay\n */\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n// =============================================================================\n// IMAGE API FUNCTIONS\n// =============================================================================\n\n/**\n * Fetch list of images\n */\nasync function fetchImageList({\n query,\n page = 1,\n pageSize = 20,\n}: FetchListParams): Promise<FetchListResult<ImageItem>> {\n await delay(300);\n\n const allItems = [...uploadedImages, ...mockImageItems];\n\n let filteredItems = allItems;\n if (query) {\n const lowerQuery = query.toLowerCase();\n filteredItems = allItems.filter(\n (item) =>\n item.filename?.toLowerCase().includes(lowerQuery) ||\n item.alt?.it?.toLowerCase().includes(lowerQuery) ||\n item.alt?.en?.toLowerCase().includes(lowerQuery)\n );\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = filteredItems.slice(startIndex, endIndex);\n\n return {\n items: paginatedItems,\n total: filteredItems.length,\n hasMore: endIndex < filteredItems.length,\n };\n}\n\n/**\n * Upload images\n */\nasync function uploadImages(\n files: File | File[],\n { onProgress }: UploadCallbacks\n): Promise<ImageItem | ImageItem[]> {\n const fileArray = Array.isArray(files) ? files : [files];\n const results: ImageItem[] = [];\n\n for (let i = 0; i < fileArray.length; i++) {\n const file = fileArray[i];\n\n // Simulate upload progress\n const totalSteps = 10;\n for (let step = 1; step <= totalSteps; step++) {\n await delay(100);\n onProgress(Math.round(((i + step / totalSteps) / fileArray.length) * 100));\n }\n\n let width: number | undefined;\n let height: number | undefined;\n if (file.type.startsWith('image/')) {\n const dimensions = await getImageDimensions(file);\n width = dimensions.width;\n height = dimensions.height;\n }\n\n const url = URL.createObjectURL(file);\n const newItem: ImageItem = {\n id: generateId('uploaded-img'),\n url,\n thumbnailUrl: url,\n filename: file.name,\n alt: {},\n width,\n height,\n size: file.size,\n createdAt: new Date().toISOString(),\n };\n\n uploadedImages = [newItem, ...uploadedImages];\n results.push(newItem);\n }\n\n return fileArray.length === 1 ? results[0] : results;\n}\n\n/**\n * Update image metadata\n */\nasync function updateImage(\n id: string,\n data: { alt?: Record<string, string | undefined> }\n): Promise<ImageItem> {\n await delay(200);\n\n // Find in uploaded images\n let item = uploadedImages.find((img) => img.id === id);\n if (item) {\n item = { ...item, ...data };\n uploadedImages = uploadedImages.map((img) => (img.id === id ? item! : img));\n return item;\n }\n\n // Find in mock items (we can't actually update these, but simulate it)\n const mockItem = mockImageItems.find((img) => img.id === id);\n if (mockItem) {\n return { ...mockItem, ...data };\n }\n\n throw new Error('Image not found');\n}\n\n/**\n * Delete an image\n */\nasync function deleteImage(id: string): Promise<void> {\n await delay(200);\n\n // Check if it's an uploaded image\n const uploadedIndex = uploadedImages.findIndex((img) => img.id === id);\n if (uploadedIndex !== -1) {\n uploadedImages = uploadedImages.filter((img) => img.id !== id);\n return;\n }\n\n // Check if it's a mock image (for demo, we'll just pretend it's deleted)\n const mockIndex = mockImageItems.findIndex((img) => img.id === id);\n if (mockIndex !== -1) {\n mockImageItems.splice(mockIndex, 1);\n return;\n }\n\n throw new Error('Image not found');\n}\n\n// =============================================================================\n// GALLERY API FUNCTIONS\n// =============================================================================\n\n/**\n * Fetch list of galleries\n */\nasync function fetchGalleryList({\n query,\n page = 1,\n pageSize = 20,\n}: FetchListParams): Promise<FetchListResult<GalleryItem>> {\n await delay(300);\n\n let filteredItems = [...mockGalleries];\n if (query) {\n const lowerQuery = query.toLowerCase();\n filteredItems = mockGalleries.filter((gallery) =>\n gallery.name.toLowerCase().includes(lowerQuery)\n );\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = filteredItems.slice(startIndex, endIndex);\n\n return {\n items: paginatedItems,\n total: filteredItems.length,\n hasMore: endIndex < filteredItems.length,\n };\n}\n\n/**\n * Fetch a single gallery by ID\n */\nasync function fetchGallery(id: string): Promise<GalleryItem> {\n await delay(200);\n\n const gallery = mockGalleries.find((g) => g.id === id);\n if (!gallery) {\n throw new Error('Gallery not found');\n }\n return gallery;\n}\n\n/**\n * Create a new gallery\n */\nasync function createGallery(name: string): Promise<GalleryItem> {\n await delay(300);\n\n const newGallery: GalleryItem = {\n id: generateId('gallery'),\n name,\n coverImage: undefined,\n images: [],\n imageCount: 0,\n createdAt: new Date().toISOString(),\n };\n\n mockGalleries = [newGallery, ...mockGalleries];\n return newGallery;\n}\n\n/**\n * Delete a gallery\n */\nasync function deleteGallery(id: string): Promise<void> {\n await delay(200);\n mockGalleries = mockGalleries.filter((g) => g.id !== id);\n}\n\n/**\n * Upload images to a gallery\n */\nasync function uploadToGallery(\n galleryId: string,\n files: File | File[],\n { onProgress }: UploadCallbacks\n): Promise<ImageItem | ImageItem[]> {\n const fileArray = Array.isArray(files) ? files : [files];\n const results: ImageItem[] = [];\n\n for (let i = 0; i < fileArray.length; i++) {\n const file = fileArray[i];\n\n const totalSteps = 10;\n for (let step = 1; step <= totalSteps; step++) {\n await delay(100);\n onProgress(Math.round(((i + step / totalSteps) / fileArray.length) * 100));\n }\n\n let width: number | undefined;\n let height: number | undefined;\n if (file.type.startsWith('image/')) {\n const dimensions = await getImageDimensions(file);\n width = dimensions.width;\n height = dimensions.height;\n }\n\n const url = URL.createObjectURL(file);\n const newItem: ImageItem = {\n id: generateId('gallery-img'),\n url,\n thumbnailUrl: url,\n filename: file.name,\n alt: {},\n width,\n height,\n size: file.size,\n };\n\n results.push(newItem);\n }\n\n // Add images to gallery\n mockGalleries = mockGalleries.map((gallery) => {\n if (gallery.id === galleryId) {\n const newImages = [...results, ...gallery.images];\n return {\n ...gallery,\n images: newImages,\n imageCount: newImages.length,\n coverImage: gallery.coverImage || results[0],\n };\n }\n return gallery;\n });\n\n return fileArray.length === 1 ? results[0] : results;\n}\n\n/**\n * Remove an image from a gallery\n */\nasync function removeFromGallery(galleryId: string, imageId: string): Promise<void> {\n await delay(200);\n\n mockGalleries = mockGalleries.map((gallery) => {\n if (gallery.id === galleryId) {\n const newImages = gallery.images.filter((img) => img.id !== imageId);\n return {\n ...gallery,\n images: newImages,\n imageCount: newImages.length,\n coverImage:\n gallery.coverImage?.id === imageId ? newImages[0] || undefined : gallery.coverImage,\n };\n }\n return gallery;\n });\n}\n\n/**\n * Update image metadata in a gallery\n */\nasync function updateGalleryImage(\n galleryId: string,\n imageId: string,\n data: { alt?: Record<string, string | undefined> }\n): Promise<ImageItem> {\n await delay(200);\n\n let updatedImage: ImageItem | null = null;\n\n mockGalleries = mockGalleries.map((gallery) => {\n if (gallery.id === galleryId) {\n return {\n ...gallery,\n images: gallery.images.map((img) => {\n if (img.id === imageId) {\n updatedImage = { ...img, ...data };\n return updatedImage;\n }\n return img;\n }),\n };\n }\n return gallery;\n });\n\n if (!updatedImage) {\n throw new Error('Image not found in gallery');\n }\n\n return updatedImage;\n}\n\n// =============================================================================\n// DOCUMENT API FUNCTIONS\n// =============================================================================\n\n/**\n * Fetch list of documents\n */\nasync function fetchDocumentList({\n query,\n page = 1,\n pageSize = 20,\n}: FetchListParams): Promise<FetchListResult<DocumentItem>> {\n await delay(300);\n\n const allItems = [...uploadedDocuments, ...mockDocumentItems];\n\n let filteredItems = allItems;\n if (query) {\n const lowerQuery = query.toLowerCase();\n filteredItems = allItems.filter(\n (item) =>\n item.filename.toLowerCase().includes(lowerQuery) ||\n item.title?.it?.toLowerCase().includes(lowerQuery) ||\n item.title?.en?.toLowerCase().includes(lowerQuery)\n );\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedItems = filteredItems.slice(startIndex, endIndex);\n\n return {\n items: paginatedItems,\n total: filteredItems.length,\n hasMore: endIndex < filteredItems.length,\n };\n}\n\n/**\n * Upload documents\n */\nasync function uploadDocuments(\n files: File | File[],\n { onProgress }: UploadCallbacks\n): Promise<DocumentItem | DocumentItem[]> {\n const fileArray = Array.isArray(files) ? files : [files];\n const results: DocumentItem[] = [];\n\n for (let i = 0; i < fileArray.length; i++) {\n const file = fileArray[i];\n\n const totalSteps = 10;\n for (let step = 1; step <= totalSteps; step++) {\n await delay(100);\n onProgress(Math.round(((i + step / totalSteps) / fileArray.length) * 100));\n }\n\n const url = URL.createObjectURL(file);\n const extension = file.name.split('.').pop() || '';\n\n const newItem: DocumentItem = {\n id: generateId('uploaded-doc'),\n url,\n filename: file.name,\n title: {},\n mimeType: file.type,\n size: file.size,\n extension,\n createdAt: new Date().toISOString(),\n };\n\n uploadedDocuments = [newItem, ...uploadedDocuments];\n results.push(newItem);\n }\n\n return fileArray.length === 1 ? results[0] : results;\n}\n\n/**\n * Update document metadata\n */\nasync function updateDocument(\n id: string,\n data: { title?: Record<string, string | undefined> }\n): Promise<DocumentItem> {\n await delay(200);\n\n let item = uploadedDocuments.find((doc) => doc.id === id);\n if (item) {\n item = { ...item, ...data };\n uploadedDocuments = uploadedDocuments.map((doc) => (doc.id === id ? item! : doc));\n return item;\n }\n\n const mockItem = mockDocumentItems.find((doc) => doc.id === id);\n if (mockItem) {\n return { ...mockItem, ...data };\n }\n\n throw new Error('Document not found');\n}\n\n/**\n * Delete a document\n */\nasync function deleteDocument(id: string): Promise<void> {\n await delay(200);\n\n const uploadedIndex = uploadedDocuments.findIndex((doc) => doc.id === id);\n if (uploadedIndex !== -1) {\n uploadedDocuments = uploadedDocuments.filter((doc) => doc.id !== id);\n return;\n }\n\n const mockIndex = mockDocumentItems.findIndex((doc) => doc.id === id);\n if (mockIndex !== -1) {\n mockDocumentItems.splice(mockIndex, 1);\n return;\n }\n\n throw new Error('Document not found');\n}\n\n// =============================================================================\n// MOCK MEDIA CONFIG\n// =============================================================================\n\n/**\n * Pre-configured mock media options for quick setup.\n *\n * Usage:\n * ```typescript\n * import { createMediaPlugin } from '@caprionlinesrl/puck-plugin-media';\n * import { mockMediaConfig } from '@caprionlinesrl/puck-plugin-media/mocks';\n *\n * const mediaPlugin = createMediaPlugin({\n * ...mockMediaConfig,\n * languages: [\n * { code: 'en', label: 'English' },\n * { code: 'it', label: 'Italiano' },\n * ],\n * });\n * ```\n */\nexport const mockMediaConfig: Pick<MediaPluginOptions, 'image' | 'gallery' | 'document'> = {\n image: {\n fetchList: fetchImageList,\n upload: uploadImages,\n update: updateImage,\n delete: deleteImage,\n },\n gallery: {\n fetchList: fetchGalleryList,\n fetch: fetchGallery,\n create: createGallery,\n delete: deleteGallery,\n upload: uploadToGallery,\n removeImage: removeFromGallery,\n updateImage: updateGalleryImage,\n },\n document: {\n fetchList: fetchDocumentList,\n upload: uploadDocuments,\n update: updateDocument,\n delete: deleteDocument,\n },\n};\n"],"mappings":"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","names":[]}