@templatical/media-library 0.35.0 → 0.36.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.
Files changed (34) hide show
  1. package/README.md +38 -24
  2. package/dist/{ca-DnghH5Xn.js → ca-CGf3MuE2.js} +1 -5
  3. package/dist/cdn/chunks/{ca-DnghH5Xn.js → ca-CGf3MuE2.js} +2 -6
  4. package/dist/cdn/chunks/ca-CGf3MuE2.js.map +1 -0
  5. package/dist/{de-ByQyu2jv.js → cdn/chunks/de-D5ebAV5i.js} +3 -5
  6. package/dist/cdn/chunks/de-D5ebAV5i.js.map +1 -0
  7. package/dist/{es-Bcp-DbmC.js → cdn/chunks/es-BG--QNW0.js} +3 -5
  8. package/dist/cdn/chunks/es-BG--QNW0.js.map +1 -0
  9. package/dist/{fr-DXb0cCZG.js → cdn/chunks/fr-Mdi4AlCR.js} +3 -5
  10. package/dist/cdn/chunks/fr-Mdi4AlCR.js.map +1 -0
  11. package/dist/cdn/chunks/{icons-Ds4F8sQq.js → icons-DMM4tyQd.js} +1149 -1104
  12. package/dist/cdn/chunks/{icons-Ds4F8sQq.js.map → icons-DMM4tyQd.js.map} +1 -1
  13. package/dist/{nl-DGT1t3Be.js → cdn/chunks/nl-D-6hT8te.js} +3 -5
  14. package/dist/cdn/chunks/nl-D-6hT8te.js.map +1 -0
  15. package/dist/{pt-BR-C0Hzc26R.js → cdn/chunks/pt-BR-DMfAgDWi.js} +3 -5
  16. package/dist/cdn/chunks/pt-BR-DMfAgDWi.js.map +1 -0
  17. package/dist/cdn/media-library.css +1 -1
  18. package/dist/cdn/media-library.js +1456 -1844
  19. package/dist/cdn/media-library.js.map +1 -1
  20. package/dist/{cdn/chunks/de-ByQyu2jv.js → de-D5ebAV5i.js} +1 -7
  21. package/dist/{cdn/chunks/es-Bcp-DbmC.js → es-BG--QNW0.js} +1 -7
  22. package/dist/{cdn/chunks/fr-DXb0cCZG.js → fr-Mdi4AlCR.js} +1 -7
  23. package/dist/index.d.ts +103 -160
  24. package/dist/{cdn/chunks/nl-DGT1t3Be.js → nl-D-6hT8te.js} +1 -7
  25. package/dist/{cdn/chunks/pt-BR-C0Hzc26R.js → pt-BR-DMfAgDWi.js} +1 -7
  26. package/dist/templatical-media-library.css +1 -1
  27. package/dist/templatical-media-library.js +1513 -1475
  28. package/package.json +4 -5
  29. package/dist/cdn/chunks/ca-DnghH5Xn.js.map +0 -1
  30. package/dist/cdn/chunks/de-ByQyu2jv.js.map +0 -1
  31. package/dist/cdn/chunks/es-Bcp-DbmC.js.map +0 -1
  32. package/dist/cdn/chunks/fr-DXb0cCZG.js.map +0 -1
  33. package/dist/cdn/chunks/nl-DGT1t3Be.js.map +0 -1
  34. package/dist/cdn/chunks/pt-BR-C0Hzc26R.js.map +0 -1
@@ -11,6 +11,7 @@ var e = { mediaLibrary: {
11
11
  newFolder: "Neuer Ordner",
12
12
  folderName: "Ordnername",
13
13
  noFiles: "Keine Dateien gefunden",
14
+ noSearchResults: "Keine Dateien entsprechen Ihrer Suche",
14
15
  dropOrClick: "Dateien hierher ziehen oder klicken zum Hochladen",
15
16
  acceptedFormats: "Bilder, PDF, Video, Audio, Dokumente (max. 10 MB)",
16
17
  uploading: "Wird hochgeladen...",
@@ -56,11 +57,6 @@ var e = { mediaLibrary: {
56
57
  import: "Importieren",
57
58
  importing: "Wird importiert...",
58
59
  importError: "Import von URL fehlgeschlagen",
59
- conversionLabel: "Groesse",
60
- conversionOriginal: "Original",
61
- conversionSmall: "Klein (150px)",
62
- conversionMedium: "Mittel (600px)",
63
- conversionLarge: "Gross (1200px)",
64
60
  replaceFile: "Datei ersetzen",
65
61
  replaceWarningTitle: "Datei ersetzen",
66
62
  replaceWarningMessage: "Sie sind dabei, diese Datei zu ersetzen. Die Ersatzdatei muss dieselbe Dateierweiterung haben ({extension}).",
@@ -85,5 +81,3 @@ var e = { mediaLibrary: {
85
81
  } };
86
82
  //#endregion
87
83
  export { e as default };
88
-
89
- //# sourceMappingURL=de-ByQyu2jv.js.map
@@ -11,6 +11,7 @@ var e = { mediaLibrary: {
11
11
  newFolder: "Nueva carpeta",
12
12
  folderName: "Nombre de la carpeta",
13
13
  noFiles: "No se han encontrado archivos",
14
+ noSearchResults: "Ningún archivo coincide con tu búsqueda",
14
15
  dropOrClick: "Suelta los archivos aquí o haz clic para subirlos",
15
16
  acceptedFormats: "Imágenes, PDF, vídeo, audio y documentos (máx. 10 MB)",
16
17
  uploading: "Subiendo...",
@@ -56,11 +57,6 @@ var e = { mediaLibrary: {
56
57
  import: "Importar",
57
58
  importing: "Importando...",
58
59
  importError: "No se ha podido importar desde la URL",
59
- conversionLabel: "Tamaño",
60
- conversionOriginal: "Original",
61
- conversionSmall: "Pequeño (150 px)",
62
- conversionMedium: "Mediano (600 px)",
63
- conversionLarge: "Grande (1200 px)",
64
60
  replaceFile: "Reemplazar archivo",
65
61
  replaceWarningTitle: "Reemplazar archivo",
66
62
  replaceWarningMessage: "Estás a punto de reemplazar este archivo. El archivo de reemplazo debe tener la misma extensión ({extension}).",
@@ -85,5 +81,3 @@ var e = { mediaLibrary: {
85
81
  } };
86
82
  //#endregion
87
83
  export { e as default };
88
-
89
- //# sourceMappingURL=es-Bcp-DbmC.js.map
@@ -11,6 +11,7 @@ var e = { mediaLibrary: {
11
11
  newFolder: "Nouveau dossier",
12
12
  folderName: "Nom du dossier",
13
13
  noFiles: "Aucun fichier trouvé",
14
+ noSearchResults: "Aucun fichier ne correspond à votre recherche",
14
15
  dropOrClick: "Déposez des fichiers ici ou cliquez pour téléverser",
15
16
  acceptedFormats: "Images, PDF, vidéo, audio, documents (max 10 Mo)",
16
17
  uploading: "Téléversement...",
@@ -56,11 +57,6 @@ var e = { mediaLibrary: {
56
57
  import: "Importer",
57
58
  importing: "Importation...",
58
59
  importError: "Échec de l'importation depuis l'URL",
59
- conversionLabel: "Taille",
60
- conversionOriginal: "Originale",
61
- conversionSmall: "Petite (150px)",
62
- conversionMedium: "Moyenne (600px)",
63
- conversionLarge: "Grande (1200px)",
64
60
  replaceFile: "Remplacer le fichier",
65
61
  replaceWarningTitle: "Remplacer le fichier",
66
62
  replaceWarningMessage: "Vous êtes sur le point de remplacer ce fichier. Le remplacement doit avoir la même extension ({extension}).",
@@ -85,5 +81,3 @@ var e = { mediaLibrary: {
85
81
  } };
86
82
  //#endregion
87
83
  export { e as default };
88
-
89
- //# sourceMappingURL=fr-DXb0cCZG.js.map
package/dist/index.d.ts CHANGED
@@ -1,49 +1,38 @@
1
- import type { AuthManager } from '@templatical/core/cloud';
2
1
  import { ComponentOptionsMixin } from 'vue';
3
2
  import { ComponentProvideOptions } from 'vue';
4
3
  import { ComputedRef } from 'vue';
5
4
  import { DefineComponent } from 'vue';
5
+ import { MaybeRefOrGetter } from 'vue';
6
+ import { MediaAsset } from '@templatical/types';
7
+ import { MediaCategory } from '@templatical/types';
8
+ import { MediaFolder } from '@templatical/types';
9
+ import type { MediaOptions } from '@templatical/types';
10
+ import type { MediaProvider as MediaProvider_2 } from '@templatical/types';
11
+ import { MediaRequestContext } from '@templatical/types';
12
+ import { MediaResult } from '@templatical/types';
13
+ import type { MediaStorageInfo } from '@templatical/types';
14
+ import { MediaUsageInfo } from '@templatical/types';
6
15
  import { PublicProps } from 'vue';
7
16
  import { Ref } from 'vue';
8
- import type { SdkAuthConfig } from '@templatical/core/cloud';
9
- import type { UsePlanConfigReturn } from '@templatical/core/cloud';
10
17
 
11
18
  declare const __VLS_export: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {} & {
12
- select: (item: MediaItem) => any;
19
+ select: (item: MediaAsset) => any;
13
20
  close: () => any;
14
21
  }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
15
- onSelect?: ((item: MediaItem) => any) | undefined;
22
+ onSelect?: ((item: MediaAsset) => any) | undefined;
16
23
  onClose?: (() => any) | undefined;
17
24
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
18
25
 
19
26
  declare type __VLS_Props = {
20
27
  visible: boolean;
21
- accept?: MediaCategory[];
22
- /**
23
- * Authenticated Cloud session. **A prop, not an injection.** An injection would
24
- * have to agree with the host on key *identity*: a bare string never resolves
25
- * the `Symbol` `@templatical/editor` provides, and the miss is silent —
26
- * `undefined` here means the library opens and does nothing. A prop is checked
27
- * at compile time, which makes that class of miss impossible rather than merely
28
- * fixed.
29
- */
30
- authManager: AuthManager;
31
- /** Scopes every request. Same story as {@link authManager}. */
32
- projectId: string;
33
28
  /**
34
- * The active plan's config — media limits and the storage gauge. Re-provided
35
- * under `PLAN_CONFIG_KEY` for the five descendants that call
36
- * `useMediaCategories`, which is why this one is a prop *and* a provide.
37
- */
38
- planConfig: UsePlanConfigReturn;
39
- /**
40
- * Mount target for the modal's teleport. When provided, the modal and
41
- * its sub-modals render inside this element instead of `document.body`
42
- * — used by editors that wrap the media library inside a shadow root
43
- * (or any other DOM boundary) and want the modal to stay inside.
44
- * Defaults to `null` → teleport to body, preserving the original
45
- * standalone-SDK behavior.
29
+ * Storage backend. **A prop, not an injection.** An injection would have
30
+ * to agree with the host on key identity: a bare string never resolves
31
+ * the `Symbol` a host provides, and the miss is silent. A prop is checked
32
+ * at compile time.
46
33
  */
34
+ provider: MediaProvider_2;
35
+ accept?: MediaCategory[];
47
36
  popoverTarget?: HTMLElement | null;
48
37
  /**
49
38
  * BCP-47 locale for this package's own strings, defaulting to English.
@@ -63,6 +52,15 @@ declare type __VLS_Props = {
63
52
  * how the host stores it.
64
53
  */
65
54
  uiTheme?: string;
55
+ /** Forwarded on list / create / importFromUrl when a template is loaded. */
56
+ templateId?: string;
57
+ /**
58
+ * Failures from the storage provider. The composable already reports
59
+ * them here; a host that wants them on its own `onError` passes that
60
+ * function through. Standalone `init()` has no such config, so this
61
+ * stays optional.
62
+ */
63
+ onError?: (error: Error) => void;
66
64
  };
67
65
 
68
66
  declare const en: {
@@ -78,6 +76,7 @@ declare const en: {
78
76
  newFolder: string;
79
77
  folderName: string;
80
78
  noFiles: string;
79
+ noSearchResults: string;
81
80
  dropOrClick: string;
82
81
  acceptedFormats: string;
83
82
  uploading: string;
@@ -123,11 +122,6 @@ declare const en: {
123
122
  import: string;
124
123
  importing: string;
125
124
  importError: string;
126
- conversionLabel: string;
127
- conversionOriginal: string;
128
- conversionSmall: string;
129
- conversionMedium: string;
130
- conversionLarge: string;
131
125
  replaceFile: string;
132
126
  replaceWarningTitle: string;
133
127
  replaceWarningMessage: string;
@@ -154,99 +148,22 @@ declare const en: {
154
148
 
155
149
  export declare function init(config: MediaLibraryConfig): Promise<MediaLibraryInstance>;
156
150
 
157
- export declare class MediaApiClient {
158
- private readonly authManager;
159
- constructor(authManager: AuthManager);
160
- private get projectId();
161
- private get tenantSlug();
162
- private get baseParams();
163
- private request;
164
- browseMedia(params: Omit<MediaBrowseParams, "project_id">): Promise<MediaBrowseResponse>;
165
- uploadMedia(file: File, folderId?: string | null): Promise<MediaItem>;
166
- updateMedia(mediaId: string, filename: string, altText?: string): Promise<MediaItem>;
167
- deleteMedia(ids: string[]): Promise<void>;
168
- moveMedia(ids: string[], folderId: string | null): Promise<MediaItem[]>;
169
- getMediaFolders(): Promise<MediaFolder[]>;
170
- createMediaFolder(name: string, parentId?: string | null): Promise<MediaFolder>;
171
- renameMediaFolder(folderId: string, name: string): Promise<MediaFolder>;
172
- deleteMediaFolder(folderId: string): Promise<void>;
173
- checkMediaUsage(ids: string[]): Promise<MediaUsageResponse>;
174
- getFrequentlyUsed(): Promise<MediaItem[]>;
175
- importFromUrl(url: string, folderId?: string | null): Promise<MediaItem>;
176
- replaceMedia(mediaId: string, file: File): Promise<MediaItem>;
177
- }
178
-
179
- export declare interface MediaBrowseParams {
180
- folder_id?: string | null;
181
- search?: string;
182
- category?: string;
183
- sort?: string;
184
- cursor?: string;
185
- }
186
-
187
- export declare interface MediaBrowseResponse {
188
- data: MediaItem[];
189
- meta: {
190
- path: string;
191
- per_page: number;
192
- next_cursor: string | null;
193
- prev_cursor: string | null;
194
- };
195
- }
196
-
197
- export declare type MediaCategory = "images" | "documents" | "videos" | "audio";
198
-
199
- export declare interface MediaCategoryData {
200
- mime_types: string[];
201
- extensions: string[];
202
- }
203
-
204
- export declare interface MediaConfig {
205
- use_media_library: boolean;
206
- categories: Record<string, MediaCategoryData>;
207
- max_file_size: number;
208
- }
209
-
210
- export declare type MediaConversion = "original" | "small" | "medium" | "large";
151
+ export { MediaAsset }
211
152
 
212
- export declare interface MediaFolder {
213
- id: string;
214
- project_id: string;
215
- parent_id: string | null;
216
- name: string;
217
- children?: MediaFolder[];
218
- created_at: string;
219
- }
153
+ export { MediaCategory }
220
154
 
221
- export declare interface MediaItem {
222
- id: string;
223
- filename: string;
224
- mime_type: string;
225
- size: number;
226
- url: string;
227
- small_url: string | null;
228
- medium_url: string | null;
229
- large_url: string | null;
230
- folder_id: string | null;
231
- conversions_generated: boolean;
232
- width: number | null;
233
- height: number | null;
234
- alt_text: string;
235
- created_at: string;
236
- updated_at: string;
237
- }
155
+ export { MediaFolder }
238
156
 
239
157
  export declare interface MediaLibraryConfig {
240
158
  container: string | HTMLElement;
241
- auth: SdkAuthConfig;
242
- baseUrl?: string;
159
+ provider: MediaProvider_2;
243
160
  locale?: string;
244
161
  theme?: {
245
162
  primaryColor?: string;
246
163
  borderRadius?: number;
247
164
  };
248
- onSelect?: (item: MediaItem) => void;
249
- onError?: (error: Error) => void;
165
+ onSelect?: (asset: MediaAsset) => void;
166
+ accept?: MediaCategory[];
250
167
  }
251
168
 
252
169
  export declare interface MediaLibraryInstance {
@@ -259,35 +176,39 @@ export declare interface MediaLibraryInstance {
259
176
 
260
177
  export declare const MediaLibraryModal: typeof __VLS_export;
261
178
 
262
- export declare interface MediaRequestContext {
179
+ /**
180
+ * Client pre-check limits plus the host's `accept` filter.
181
+ *
182
+ * `maxFileSize` / `mimeTypes` are {@link MediaOptions} fields and may be
183
+ * getters — Cloud fills them after construction — so every reader must
184
+ * access them inside a computed, never by destructuring at setup.
185
+ *
186
+ * **Provided by whichever component roots the tree** — `MediaLibraryModal`
187
+ * and `standalone/MediaLibrary.vue` — and consumed by `useMediaCategories`,
188
+ * which five descendants call. It is a provide rather than prop-drilling
189
+ * *only* because of that depth; the values themselves cross the package
190
+ * boundary as props.
191
+ *
192
+ * Vue matches injection keys by identity, so a bare-string
193
+ * `inject("mediaLimits")` never resolves the `Symbol` a host provided — it
194
+ * yields `undefined` silently, and the library opens with no limits and
195
+ * nothing to debug. Props make the cross-package boundary typed; a single
196
+ * exported key makes the intra-package hop impossible to spell two
197
+ * different ways.
198
+ */
199
+ declare type MediaLimits = Pick<MediaOptions, "maxFileSize" | "mimeTypes"> & {
263
200
  accept?: MediaCategory[];
264
- /**
265
- * Image files dragged directly onto an image block/field (issue #229).
266
- * Present only on drag-and-drop requests; absent for click → Browse Media.
267
- * The media handler should upload these and return the resulting
268
- * `MediaResult`. Plural for forward-compat, but the editor currently sends
269
- * a single file per drop.
270
- */
271
- files?: File[];
272
- }
201
+ };
273
202
 
274
- declare type MediaTranslations = typeof en;
203
+ export { MediaRequestContext }
275
204
 
276
- export declare interface MediaUsageInfo {
277
- template_count: number;
278
- template_names: string[];
279
- }
205
+ export { MediaResult }
280
206
 
281
- export declare interface MediaUsageResponse {
282
- data: Record<string, MediaUsageInfo>;
283
- }
207
+ declare type MediaTranslations = typeof en;
284
208
 
285
- export declare type MediaViewMode = "files" | "frequently-used";
209
+ export { MediaUsageInfo }
286
210
 
287
- export declare interface StorageInfo {
288
- used_bytes: number;
289
- limit_bytes: number;
290
- }
211
+ export declare type MediaViewMode = "files" | "frequently-used";
291
212
 
292
213
  export declare function unmount(): void;
293
214
 
@@ -324,15 +245,15 @@ declare interface UseI18nReturn {
324
245
 
325
246
  export declare function useMediaCategories(
326
247
  /**
327
- * The plan config to read, for callers that cannot inject one.
248
+ * The limits to read, for callers that cannot inject them.
328
249
  *
329
250
  * A component never sees its own `provide` — Vue resolves `inject` against
330
- * the *parent* chain — so the two hosts that provide `PLAN_CONFIG_KEY`
251
+ * the *parent* chain — so the two hosts that provide `MEDIA_LIMITS_KEY`
331
252
  * cannot also inject it, and must pass their value here instead. Descendants
332
253
  * (`MediaGrid`, `MediaEditModal`, `MediaUploadZone`, `MediaPreviewPanel`)
333
- * omit the argument and inject as before. Mirrors `useI18n(override?)`.
254
+ * omit the argument and inject. Mirrors `useI18n(override?)`.
334
255
  */
335
- planConfigOverride?: UsePlanConfigReturn): UseMediaCategoriesReturn;
256
+ limitsOverride?: MediaLimits): UseMediaCategoriesReturn;
336
257
 
337
258
  export declare interface UseMediaCategoriesReturn {
338
259
  isMediaLibraryEnabled: ComputedRef<boolean>;
@@ -340,18 +261,29 @@ export declare interface UseMediaCategoriesReturn {
340
261
  allAcceptedInputString: ComputedRef<string>;
341
262
  maxFileSize: ComputedRef<number>;
342
263
  availableCategories: ComputedRef<MediaCategory[]>;
343
- isAcceptedMimeType: (mimeType: string, filterCategories?: MediaCategory[]) => boolean;
264
+ isAcceptedMimeType: (mimeType: string, accept?: MediaCategory[]) => boolean;
265
+ isAcceptedFile: (file: {
266
+ type: string;
267
+ size: number;
268
+ }) => boolean;
344
269
  isImageMimeType: (mimeType: string) => boolean;
345
270
  getCategoryForMimeType: (mimeType: string) => MediaCategory | null;
346
271
  }
347
272
 
273
+ /**
274
+ * Reactive state over a {@link MediaProvider}.
275
+ *
276
+ * Owns the listing, selection, preview, sequential upload loop and the
277
+ * delete-usage flow. Chrome that should hide for a `false` method is the
278
+ * modal's job; this composable simply does not call a disabled method.
279
+ */
348
280
  export declare function useMediaLibrary(options: UseMediaLibraryOptions): {
349
- items: Ref<MediaItem[], MediaItem[]>;
281
+ items: Ref<MediaAsset[], MediaAsset[]>;
350
282
  folders: Ref<MediaFolder[], MediaFolder[]>;
351
283
  currentFolderId: Ref<string | null, string | null>;
352
284
  viewMode: Ref<MediaViewMode, MediaViewMode>;
353
285
  searchQuery: Ref<string, string>;
354
- categoryFilter: Ref<string | null, string | null>;
286
+ categoryFilter: Ref<MediaCategory | null, MediaCategory | null>;
355
287
  sortOption: Ref<string, string>;
356
288
  isLoading: Ref<boolean, boolean>;
357
289
  isUploading: Ref<boolean, boolean>;
@@ -364,28 +296,28 @@ export declare function useMediaLibrary(options: UseMediaLibraryOptions): {
364
296
  } | null>;
365
297
  hasMore: Ref<boolean, boolean>;
366
298
  selectedItems: Ref<Set<string>, Set<string>>;
367
- previewItem: Ref<MediaItem | null, MediaItem | null>;
368
- frequentlyUsedItems: Ref<MediaItem[], MediaItem[]>;
299
+ previewItem: Ref<MediaAsset | null, MediaAsset | null>;
300
+ frequentlyUsedItems: Ref<MediaAsset[], MediaAsset[]>;
369
301
  deleteUsageInfo: Ref<Record<string, MediaUsageInfo>, Record<string, MediaUsageInfo>>;
370
302
  showDeleteWarning: Ref<boolean, boolean>;
371
303
  loadItems: () => Promise<void>;
372
304
  loadMore: () => Promise<void>;
373
305
  search: (query: string) => Promise<void>;
374
- filterByCategory: (category: string | null) => Promise<void>;
306
+ filterByCategory: (category: MediaCategory | null) => Promise<void>;
375
307
  sortBy: (option: string) => Promise<void>;
376
308
  navigateToFolder: (folderId: string | null) => Promise<void>;
377
309
  showFrequentlyUsed: () => Promise<void>;
378
- uploadFile: (file: File) => Promise<MediaItem | null>;
310
+ uploadFile: (file: File) => Promise<MediaAsset | null>;
379
311
  uploadFiles: (files: File[]) => Promise<void>;
380
312
  moveSelected: (targetFolderId: string | null) => Promise<void>;
381
313
  updateFile: (mediaId: string, filename: string, altText?: string) => Promise<void>;
382
314
  deleteSelected: () => Promise<void>;
383
315
  isImportingFromUrl: Ref<boolean, boolean>;
384
316
  importFromUrlError: Ref<string | null, string | null>;
385
- importFromUrl: (url: string) => Promise<MediaItem | null>;
317
+ importFromUrl: (url: string) => Promise<MediaAsset | null>;
386
318
  toggleSelection: (id: string) => void;
387
319
  clearSelection: () => void;
388
- selectItem: (item: MediaItem) => void;
320
+ selectItem: (item: MediaAsset) => void;
389
321
  loadFolders: () => Promise<void>;
390
322
  createFolder: (name: string, parentId?: string | null) => Promise<MediaFolder | null>;
391
323
  renameFolder: (folderId: string, name: string) => Promise<void>;
@@ -398,18 +330,29 @@ export declare function useMediaLibrary(options: UseMediaLibraryOptions): {
398
330
  isReplacing: Ref<boolean, boolean>;
399
331
  replaceError: Ref<string | null, string | null>;
400
332
  showReplaceWarning: Ref<boolean, boolean>;
401
- pendingReplaceItem: Ref<MediaItem | null, MediaItem | null>;
333
+ pendingReplaceItem: Ref<MediaAsset | null, MediaAsset | null>;
402
334
  replaceUsageInfo: Ref<MediaUsageInfo | null, MediaUsageInfo | null>;
403
- checkUsageBeforeReplace: (item: MediaItem) => Promise<void>;
335
+ checkUsageBeforeReplace: (item: MediaAsset) => Promise<void>;
404
336
  cancelReplace: () => void;
405
- replaceFile: (file: File) => Promise<MediaItem | null>;
406
- replaceMediaDirectly: (mediaId: string, file: File) => Promise<MediaItem | null>;
337
+ replaceFile: (file: File) => Promise<MediaAsset | null>;
338
+ replaceMediaDirectly: (mediaId: string, file: File) => Promise<MediaAsset | null>;
339
+ storageInfo: Ref<MediaStorageInfo | null, MediaStorageInfo | null>;
340
+ loadStorage: () => Promise<void>;
407
341
  };
408
342
 
409
343
  export declare interface UseMediaLibraryOptions {
410
- projectId: string;
411
- authManager: AuthManager;
344
+ /**
345
+ * Storage backend. The composable is transport-agnostic and never talks
346
+ * to a network itself.
347
+ */
348
+ provider: MediaProvider_2;
412
349
  onError?: (error: Error) => void;
350
+ /**
351
+ * Forwarded on `list` / `create` / `importFromUrl` when a template is
352
+ * loaded. Read at call time — a ref that fills after setup must still
353
+ * reach the store.
354
+ */
355
+ templateId?: MaybeRefOrGetter<string | undefined>;
413
356
  }
414
357
 
415
358
  export declare function useMediaPicker(): UseMediaPickerReturn;
@@ -417,7 +360,7 @@ export declare function useMediaPicker(): UseMediaPickerReturn;
417
360
  declare interface UseMediaPickerReturn {
418
361
  isPluggableMediaEnabled: ComputedRef<boolean>;
419
362
  isRequesting: Ref<boolean>;
420
- requestMedia: (context?: MediaRequestContext) => Promise<MediaItem | null>;
363
+ requestMedia: (context?: MediaRequestContext) => Promise<MediaResult | null>;
421
364
  }
422
365
 
423
366
  export { }
@@ -11,6 +11,7 @@ var e = { mediaLibrary: {
11
11
  newFolder: "Nieuwe map",
12
12
  folderName: "Mapnaam",
13
13
  noFiles: "Geen bestanden gevonden",
14
+ noSearchResults: "Geen bestanden komen overeen met uw zoekopdracht",
14
15
  dropOrClick: "Sleep bestanden hierheen of klik om te uploaden",
15
16
  acceptedFormats: "Afbeeldingen, PDF, video, audio, documenten (max. 10 MB)",
16
17
  uploading: "Uploaden...",
@@ -56,11 +57,6 @@ var e = { mediaLibrary: {
56
57
  import: "Importeren",
57
58
  importing: "Importeren...",
58
59
  importError: "Importeren vanaf URL mislukt",
59
- conversionLabel: "Grootte",
60
- conversionOriginal: "Origineel",
61
- conversionSmall: "Klein (150px)",
62
- conversionMedium: "Middel (600px)",
63
- conversionLarge: "Groot (1200px)",
64
60
  replaceFile: "Bestand vervangen",
65
61
  replaceWarningTitle: "Bestand vervangen",
66
62
  replaceWarningMessage: "U staat op het punt dit bestand te vervangen. De vervanging moet dezelfde bestandsextensie hebben ({extension}).",
@@ -85,5 +81,3 @@ var e = { mediaLibrary: {
85
81
  } };
86
82
  //#endregion
87
83
  export { e as default };
88
-
89
- //# sourceMappingURL=nl-DGT1t3Be.js.map
@@ -11,6 +11,7 @@ var e = { mediaLibrary: {
11
11
  newFolder: "Nova Pasta",
12
12
  folderName: "Nome da pasta",
13
13
  noFiles: "Nenhum arquivo encontrado",
14
+ noSearchResults: "Nenhum arquivo corresponde à sua busca",
14
15
  dropOrClick: "Solte arquivos aqui ou clique para enviar",
15
16
  acceptedFormats: "Imagens, PDF, Vídeo, Áudio, Documentos (máx. 10MB)",
16
17
  uploading: "Enviando...",
@@ -56,11 +57,6 @@ var e = { mediaLibrary: {
56
57
  import: "Importar",
57
58
  importing: "Importando...",
58
59
  importError: "Falha ao importar da URL",
59
- conversionLabel: "Tamanho",
60
- conversionOriginal: "Original",
61
- conversionSmall: "Pequeno (150px)",
62
- conversionMedium: "Médio (600px)",
63
- conversionLarge: "Grande (1200px)",
64
60
  replaceFile: "Substituir Arquivo",
65
61
  replaceWarningTitle: "Substituir Arquivo",
66
62
  replaceWarningMessage: "Você está prestes a substituir este arquivo. O substituto deve ter a mesma extensão ({extension}).",
@@ -85,5 +81,3 @@ var e = { mediaLibrary: {
85
81
  } };
86
82
  //#endregion
87
83
  export { e as default };
88
-
89
- //# sourceMappingURL=pt-BR-C0Hzc26R.js.map
@@ -1,2 +1,2 @@
1
- @import"https://fonts.bunny.net/css?family=geist:400,500,600";.vue-advanced-cropper{text-align:center;position:relative;-webkit-user-select:none;user-select:none;max-height:100%;max-width:100%;direction:ltr}.vue-advanced-cropper__stretcher{pointer-events:none;position:relative;max-width:100%;max-height:100%}.vue-advanced-cropper__image{-webkit-user-select:none;user-select:none;position:absolute;transform-origin:center;max-width:none!important}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{opacity:1;background:#000;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{opacity:1;transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.vue-advanced-cropper__cropper-wrapper{width:100%;height:100%}.vue-advanced-cropper__image-wrapper{overflow:hidden;position:absolute;width:100%;height:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{display:block;background:#fff;height:10px;width:10px}.vue-handler-wrapper{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px}.vue-handler-wrapper__draggable{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{background:none;position:absolute;display:flex;align-items:center;justify-content:center}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;width:100%;left:0;transform:translateY(-50%)}.vue-line-wrapper--north{top:0;cursor:n-resize}.vue-line-wrapper--south{top:100%;cursor:s-resize}.vue-line-wrapper--east,.vue-line-wrapper--west{width:12px;height:100%;transform:translate(-50%);top:0}.vue-line-wrapper--east{left:100%;cursor:e-resize}.vue-line-wrapper--west{left:0;cursor:w-resize}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{position:relative;height:100%;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{overflow:hidden;box-sizing:border-box;position:absolute;height:100%;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{pointer-events:none;position:relative;-webkit-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-rectangle-stencil{position:absolute;height:100%;width:100%;box-sizing:border-box}.vue-rectangle-stencil__preview{position:absolute;width:100%;height:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{position:absolute;height:100%;width:100%;box-sizing:content-box;cursor:move}.vue-circle-stencil__preview{border-radius:50%;position:absolute;width:100%;height:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{overflow:hidden;box-sizing:border-box;position:relative}.vue-preview--fill{width:100%;height:100%;position:absolute}.vue-preview__wrapper{position:absolute;height:100%;width:100%}.vue-preview__image{pointer-events:none;position:absolute;-webkit-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-simple-line{background:none;transition:border .5s;border-color:#ffffff4d;border-width:0;border-style:solid}.vue-simple-line--south,.vue-simple-line--north{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{opacity:1;border-color:#fff}[data-v-72091aa5] .tpl-cropper-background{background-color:var(--tpl-bg)!important}[data-v-72091aa5] .vue-advanced-cropper{background-color:transparent!important}[data-v-72091aa5] .vue-advanced-cropper__background{background-color:var(--tpl-bg)!important}[data-v-72091aa5] .vue-advanced-cropper__foreground{background-color:var(--tpl-overlay)!important}.tpl-media-item[data-v-5b4cc2c6]:not(.tpl-media-item--selected):hover{border-color:var(--tpl-border)!important}.tpl-media-list-item[data-v-5b4cc2c6]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-list-icon[data-v-5b4cc2c6]{transform:scale(.35);transform-origin:center}.tpl-preview-icon[data-v-79f055d7]{transform:scale(.45);transform-origin:center}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial}}}@layer theme{:root,:host{--tpl-radius-sm:calc(.25 * var(--tpl-base-size));--tpl-radius-lg:calc(.5 * var(--tpl-base-size));--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tpl-radius:calc(.25 * var(--tpl-base-size))}}.tpl\:invisible{visibility:hidden}.tpl\:absolute{position:absolute}.tpl\:fixed{position:fixed}.tpl\:relative{position:relative}.tpl\:inset-0{inset:0}.tpl\:-top-1{top:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\:top-1\.5{top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:top-1\/2{top:50%}.tpl\:top-full{top:100%}.tpl\:right-1\.5{right:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:right-2\.5{right:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:bottom-full{bottom:100%}.tpl\:left-0{left:0}.tpl\:left-1\.5{left:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:left-1\/2{left:50%}.tpl\:left-2\.5{left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:z-10{z-index:10}.tpl\:z-50{z-index:50}.tpl\:z-\[9999\]{z-index:9999}.tpl\:z-\[10000\]{z-index:10000}.tpl\:mx-4{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:mt-0\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:mt-1{margin-top:calc(var(--tpl-base-size) / 4)}.tpl\:mt-2{margin-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:mb-1{margin-bottom:calc(var(--tpl-base-size) / 4)}.tpl\:mb-1\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:mb-2{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:mb-3{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:mb-4{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:mb-px{margin-bottom:1px}.tpl\:-ml-48{margin-left:calc(calc(var(--tpl-base-size) / 4) * -48)}.tpl\:ml-0{margin-left:0}.tpl\:block{display:block}.tpl\:flex{display:flex}.tpl\:grid{display:grid}.tpl\:inline{display:inline}.tpl\:inline-flex{display:inline-flex}.tpl\:aspect-square{aspect-ratio:1}.tpl\:size-2{width:calc(calc(var(--tpl-base-size) / 4) * 2);height:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:size-4{width:calc(calc(var(--tpl-base-size) / 4) * 4);height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:size-5{width:calc(calc(var(--tpl-base-size) / 4) * 5);height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:size-6{width:calc(calc(var(--tpl-base-size) / 4) * 6);height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\:size-7{width:calc(calc(var(--tpl-base-size) / 4) * 7);height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\:size-10{width:calc(calc(var(--tpl-base-size) / 4) * 10);height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\:size-full{width:100%;height:100%}.tpl\:h-4{height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:h-12{height:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\:h-full{height:100%}.tpl\:max-h-32{max-height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\:max-h-56{max-height:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\:max-h-\[90\%\]{max-height:90%}.tpl\:max-h-\[90vh\]{max-height:90vh}.tpl\:min-h-0{min-height:0}.tpl\:w-48{width:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\:w-52{width:calc(calc(var(--tpl-base-size) / 4) * 52)}.tpl\:w-56{width:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\:w-full{width:100%}.tpl\:max-w-2xl{max-width:calc(42 * var(--tpl-base-size))}.tpl\:max-w-sm{max-width:calc(24 * var(--tpl-base-size))}.tpl\:min-w-0{min-width:0}.tpl\:flex-1{flex:1}.tpl\:shrink-0{flex-shrink:0}.tpl\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-1{--tw-translate-y:calc(var(--tpl-base-size) / 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-rotate-90{rotate:-90deg}.tpl\:rotate-45{rotate:45deg}.tpl\:rotate-90{rotate:90deg}.tpl\:animate-spin{animation:1s linear infinite spin}.tpl\:cursor-help{cursor:help}.tpl\:cursor-not-allowed{cursor:not-allowed}.tpl\:cursor-pointer{cursor:pointer}.tpl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.tpl\:flex-col{flex-direction:column}.tpl\:flex-wrap{flex-wrap:wrap}.tpl\:items-center{align-items:center}.tpl\:justify-between{justify-content:space-between}.tpl\:justify-center{justify-content:center}.tpl\:justify-end{justify-content:flex-end}.tpl\:gap-0\.5{gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:gap-1{gap:calc(var(--tpl-base-size) / 4)}.tpl\:gap-1\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:gap-2{gap:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:gap-3{gap:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:gap-5{gap:calc(calc(var(--tpl-base-size) / 4) * 5)}:where(.tpl\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * calc(1 - var(--tw-space-y-reverse)))}.tpl\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tpl\:overflow-hidden{overflow:hidden}.tpl\:overflow-y-auto{overflow-y:auto}.tpl\:rounded{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\:rounded-\[var\(--tpl-radius-lg\)\]{border-radius:var(--tpl-radius-lg)}.tpl\:rounded-full{border-radius:3.40282e38px}.tpl\:rounded-lg{border-radius:calc(.5 * var(--tpl-base-size))}.tpl\:rounded-md{border-radius:calc(.375 * var(--tpl-base-size))}.tpl\:border{border-style:var(--tw-border-style);border-width:1px}.tpl\:border-2{border-style:var(--tw-border-style);border-width:2px}.tpl\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.tpl\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.tpl\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.tpl\:border-dashed{--tw-border-style:dashed;border-style:dashed}.tpl\:bg-\[var\(--tpl-primary\)\]{background-color:var(--tpl-primary)}.tpl\:object-cover{object-fit:cover}.tpl\:p-0\.5{padding:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:p-2{padding:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:p-4{padding:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:p-5{padding:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:px-1\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:px-2{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:px-2\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:px-3{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:px-4{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:px-5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:py-0\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:py-1{padding-block:calc(var(--tpl-base-size) / 4)}.tpl\:py-1\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:py-2{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:py-2\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:py-3{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:py-3\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\:py-4{padding-block:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:py-16{padding-block:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\:pt-3{padding-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pt-4{padding-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:pr-2{padding-right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:pr-3{padding-right:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pr-6{padding-right:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\:pr-7{padding-right:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\:pr-8{padding-right:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\:pb-4{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:pl-2{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:pl-2\.5{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:pl-3{padding-left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pl-8{padding-left:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\:text-center{text-align:center}.tpl\:text-left{text-align:left}.tpl\:text-sm{font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875))}.tpl\:text-xs{font-size:calc(.75 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1 / .75))}.tpl\:text-\[9px\]{font-size:9px}.tpl\:text-\[10px\]{font-size:10px}.tpl\:font-bold{--tw-font-weight:700;font-weight:700}.tpl\:font-medium{--tw-font-weight:500;font-weight:500}.tpl\:font-normal{--tw-font-weight:400;font-weight:400}.tpl\:font-semibold{--tw-font-weight:600;font-weight:600}.tpl\:tracking-wider{--tw-tracking:.05em;letter-spacing:.05em}.tpl\:whitespace-nowrap{white-space:nowrap}.tpl\:text-white{color:#fff}.tpl\:italic{font-style:italic}.tpl\:opacity-0{opacity:0}.tpl\:opacity-50{opacity:.5}.tpl\:opacity-60{opacity:.6}.tpl\:opacity-100{opacity:1}.tpl\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:duration-100{--tw-duration:.1s;transition-duration:.1s}.tpl\:duration-150{--tw-duration:.15s;transition-duration:.15s}.tpl\:duration-200{--tw-duration:.2s;transition-duration:.2s}.tpl\:duration-300{--tw-duration:.3s;transition-duration:.3s}.tpl\:ease-in{--tw-ease:cubic-bezier(.4, 0, 1, 1);transition-timing-function:cubic-bezier(.4,0,1,1)}.tpl\:ease-out{--tw-ease:cubic-bezier(0, 0, .2, 1);transition-timing-function:cubic-bezier(0,0,.2,1)}.tpl\:outline-none{--tw-outline-style:none;outline-style:none}@media(hover:hover){.tpl\:group-hover\:opacity-100:is(:where(.tpl\:group):hover *){opacity:1}.tpl\:hover\:underline:hover{text-decoration-line:underline}.tpl\:hover\:opacity-90:hover{opacity:.9}}.tpl\:focus\:shadow-\[var\(--tpl-ring\)\]:focus{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.tpl\:disabled\:opacity-50:disabled{opacity:.5}@layer base,components;.tpl{--tpl-base-size:var(--tpl-user-base-size,16px);--tpl-bg:oklch(99.5% .002 60);--tpl-bg-elevated:oklch(98% .004 60);--tpl-bg-hover:oklch(96% .006 60);--tpl-bg-active:oklch(93.5% .008 60);--tpl-border:oklch(92% .006 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary:oklch(70% .16 55);--tpl-primary-hover:oklch(63% .17 55);--tpl-primary-light:oklch(95% .04 55);--tpl-secondary:oklch(60% .118 184.71);--tpl-secondary-hover:oklch(53.2% .105 186.39);--tpl-secondary-light:oklch(93.8% .03 186.82);--tpl-success:oklch(62.8% .194 155.1);--tpl-success-light:oklch(93.6% .043 163.51);--tpl-warning:oklch(76.9% .168 70.08);--tpl-warning-light:oklch(95% .038 73.59);--tpl-danger:oklch(63.7% .237 25.33);--tpl-danger-light:oklch(93.6% .032 17.72);--tpl-radius:10px;--tpl-radius-sm:7px;--tpl-radius-lg:14px;--tpl-font-family:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--tpl-shadow:0 1px 2px #0000000a, 0 1px 3px #00000008;--tpl-shadow-md:0 2px 8px #0000000f, 0 1px 3px #0000000a;--tpl-shadow-lg:0 4px 16px #00000014, 0 2px 6px #0000000a;--tpl-shadow-xl:0 8px 32px #0000001a, 0 4px 12px #0000000f;--tpl-ring:0 0 0 3px var(--tpl-primary-light);--tpl-transition:.12s cubic-bezier(.16, 1, .3, 1)}.tpl[data-tpl-theme=dark]{--tpl-bg:oklch(16% .005 60);--tpl-bg-elevated:oklch(21% .006 60);--tpl-bg-hover:oklch(26% .007 60);--tpl-bg-active:oklch(30% .008 60);--tpl-border:oklch(30% .006 60);--tpl-border-light:oklch(38% .008 60);--tpl-text:oklch(93% .005 60);--tpl-text-muted:oklch(65% .01 60);--tpl-text-dim:oklch(50% .008 60);--tpl-primary:oklch(73% .15 55);--tpl-primary-hover:oklch(78% .14 55);--tpl-primary-light:oklch(28% .05 55);--tpl-secondary:oklch(63% .11 184.71);--tpl-secondary-hover:oklch(68% .1 186.39);--tpl-secondary-light:oklch(25% .03 186.82);--tpl-success:oklch(65% .18 155.1);--tpl-success-light:oklch(25% .04 163.51);--tpl-warning:oklch(78% .16 70.08);--tpl-warning-light:oklch(28% .04 73.59);--tpl-danger:oklch(65% .22 25.33);--tpl-danger-light:oklch(25% .04 17.72);--tpl-shadow:0 1px 2px #0000004d, 0 1px 3px #0003;--tpl-shadow-md:0 2px 8px #00000059, 0 1px 3px #00000040;--tpl-shadow-lg:0 4px 16px #0006, 0 2px 6px #0000004d;--tpl-shadow-xl:0 8px 32px #00000080, 0 4px 12px #00000059;--tpl-ring:0 0 0 3px var(--tpl-primary-light)}.tpl{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family)}:where(.tpl) button,:where(.tpl) input,:where(.tpl) select,:where(.tpl) textarea{box-sizing:border-box;font-family:inherit}:where(.tpl) button{cursor:pointer;background:0 0;border:none}:where(.tpl) button:focus-visible,:where(.tpl) input:focus-visible,:where(.tpl) select:focus-visible,:where(.tpl) textarea:focus-visible{box-shadow:var(--tpl-ring);outline:none}.tpl ::-webkit-scrollbar{width:6px;height:6px}.tpl ::-webkit-scrollbar-track{background:0 0}.tpl ::-webkit-scrollbar-thumb{background-color:var(--tpl-border-light)}@supports (color:color-mix(in lab,red,red)){.tpl ::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--tpl-border-light) 60%,transparent)}}.tpl ::-webkit-scrollbar-thumb{border-radius:calc(.25 * var(--tpl-base-size))}.tpl ::-webkit-scrollbar-thumb:hover{background-color:var(--tpl-border-light)}@keyframes tpl-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes tpl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes tpl-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tpl-pulse{animation:2s infinite tpl-pulse}.tpl-spinner{animation:1s linear infinite tpl-spin}.tpl-scale-in{animation:.15s cubic-bezier(.16,1,.3,1) tpl-scale-in}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
1
+ @import"https://fonts.bunny.net/css?family=geist:400,500,600";.vue-advanced-cropper{text-align:center;position:relative;-webkit-user-select:none;user-select:none;max-height:100%;max-width:100%;direction:ltr}.vue-advanced-cropper__stretcher{pointer-events:none;position:relative;max-width:100%;max-height:100%}.vue-advanced-cropper__image{-webkit-user-select:none;user-select:none;position:absolute;transform-origin:center;max-width:none!important}.vue-advanced-cropper__background,.vue-advanced-cropper__foreground{opacity:1;background:#000;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%}.vue-advanced-cropper__foreground{opacity:.5}.vue-advanced-cropper__boundaries{opacity:1;transform:translate(-50%,-50%);position:absolute;left:50%;top:50%}.vue-advanced-cropper__cropper-wrapper{width:100%;height:100%}.vue-advanced-cropper__image-wrapper{overflow:hidden;position:absolute;width:100%;height:100%}.vue-advanced-cropper__stencil-wrapper{position:absolute}.vue-simple-handler{display:block;background:#fff;height:10px;width:10px}.vue-handler-wrapper{position:absolute;transform:translate(-50%,-50%);width:30px;height:30px}.vue-handler-wrapper__draggable{width:100%;height:100%;display:flex;align-items:center;justify-content:center}.vue-handler-wrapper--west-north{cursor:nw-resize}.vue-handler-wrapper--north{cursor:n-resize}.vue-handler-wrapper--east-north{cursor:ne-resize}.vue-handler-wrapper--east{cursor:e-resize}.vue-handler-wrapper--east-south{cursor:se-resize}.vue-handler-wrapper--south{cursor:s-resize}.vue-handler-wrapper--west-south{cursor:sw-resize}.vue-handler-wrapper--west{cursor:w-resize}.vue-handler-wrapper--disabled{cursor:auto}.vue-line-wrapper{background:none;position:absolute;display:flex;align-items:center;justify-content:center}.vue-line-wrapper--north,.vue-line-wrapper--south{height:12px;width:100%;left:0;transform:translateY(-50%)}.vue-line-wrapper--north{top:0;cursor:n-resize}.vue-line-wrapper--south{top:100%;cursor:s-resize}.vue-line-wrapper--east,.vue-line-wrapper--west{width:12px;height:100%;transform:translate(-50%);top:0}.vue-line-wrapper--east{left:100%;cursor:e-resize}.vue-line-wrapper--west{left:0;cursor:w-resize}.vue-line-wrapper--disabled{cursor:auto}.vue-bounding-box{position:relative;height:100%;width:100%}.vue-bounding-box__handler{position:absolute}.vue-bounding-box__handler--west-north{left:0;top:0}.vue-bounding-box__handler--north{left:50%;top:0}.vue-bounding-box__handler--east-north{left:100%;top:0}.vue-bounding-box__handler--east{left:100%;top:50%}.vue-bounding-box__handler--east-south{left:100%;top:100%}.vue-bounding-box__handler--south{left:50%;top:100%}.vue-bounding-box__handler--west-south{left:0;top:100%}.vue-bounding-box__handler--west{left:0;top:50%}.vue-draggable-area{position:relative}.vue-preview-result{overflow:hidden;box-sizing:border-box;position:absolute;height:100%;width:100%}.vue-preview-result__wrapper{position:absolute}.vue-preview-result__image{pointer-events:none;position:relative;-webkit-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-rectangle-stencil{position:absolute;height:100%;width:100%;box-sizing:border-box}.vue-rectangle-stencil__preview{position:absolute;width:100%;height:100%}.vue-rectangle-stencil--movable{cursor:move}.vue-circle-stencil{position:absolute;height:100%;width:100%;box-sizing:content-box;cursor:move}.vue-circle-stencil__preview{border-radius:50%;position:absolute;width:100%;height:100%}.vue-circle-stencil--movable{cursor:move}.vue-preview{overflow:hidden;box-sizing:border-box;position:relative}.vue-preview--fill{width:100%;height:100%;position:absolute}.vue-preview__wrapper{position:absolute;height:100%;width:100%}.vue-preview__image{pointer-events:none;position:absolute;-webkit-user-select:none;user-select:none;transform-origin:center;max-width:none!important}.vue-simple-line{background:none;transition:border .5s;border-color:#ffffff4d;border-width:0;border-style:solid}.vue-simple-line--south,.vue-simple-line--north{height:0;width:100%}.vue-simple-line--east,.vue-simple-line--west{height:100%;width:0}.vue-simple-line--east{border-right-width:1px}.vue-simple-line--west{border-left-width:1px}.vue-simple-line--south{border-bottom-width:1px}.vue-simple-line--north{border-top-width:1px}.vue-simple-line--hover{opacity:1;border-color:#fff}[data-v-c7f50076] .tpl-cropper-background{background-color:var(--tpl-bg)!important}[data-v-c7f50076] .vue-advanced-cropper{background-color:transparent!important}[data-v-c7f50076] .vue-advanced-cropper__background{background-color:var(--tpl-bg)!important}[data-v-c7f50076] .vue-advanced-cropper__foreground{background-color:var(--tpl-overlay)!important}.tpl-media-item[data-v-02bd861d]:not(.tpl-media-item--selected):hover{border-color:var(--tpl-border)!important}.tpl-media-list-item[data-v-02bd861d]:hover{background-color:var(--tpl-bg-hover)!important}.tpl-list-icon[data-v-02bd861d]{transform:scale(.35);transform-origin:center}.tpl-preview-icon[data-v-c7fe5962]{transform:scale(.45);transform-origin:center}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial;--tw-leading:initial}}}@layer theme{:root,:host{--tpl-radius-sm:calc(.25 * var(--tpl-base-size));--tpl-radius-lg:calc(.5 * var(--tpl-base-size));--tpl-shadow-xl:0 20px 25px -5px #0000001a, 0 8px 10px -6px #0000001a;--tpl-radius:calc(.25 * var(--tpl-base-size))}}.tpl\:invisible{visibility:hidden}.tpl\:absolute{position:absolute}.tpl\:fixed{position:fixed}.tpl\:relative{position:relative}.tpl\:inset-0{inset:0}.tpl\:-top-1{top:calc(calc(var(--tpl-base-size) / 4) * -1)}.tpl\:top-1\.5{top:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:top-1\/2{top:50%}.tpl\:top-full{top:100%}.tpl\:right-1\.5{right:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:right-2\.5{right:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:bottom-full{bottom:100%}.tpl\:left-0{left:0}.tpl\:left-1\.5{left:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:left-1\/2{left:50%}.tpl\:left-2\.5{left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:z-10{z-index:10}.tpl\:z-50{z-index:50}.tpl\:mx-4{margin-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:mt-0\.5{margin-top:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:mt-1{margin-top:calc(var(--tpl-base-size) / 4)}.tpl\:mt-2{margin-top:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:mb-1{margin-bottom:calc(var(--tpl-base-size) / 4)}.tpl\:mb-1\.5{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:mb-2{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:mb-3{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:mb-4{margin-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:mb-px{margin-bottom:1px}.tpl\:-ml-48{margin-left:calc(calc(var(--tpl-base-size) / 4) * -48)}.tpl\:ml-0{margin-left:0}.tpl\:block{display:block}.tpl\:flex{display:flex}.tpl\:grid{display:grid}.tpl\:inline{display:inline}.tpl\:inline-flex{display:inline-flex}.tpl\:aspect-square{aspect-ratio:1}.tpl\:size-2{width:calc(calc(var(--tpl-base-size) / 4) * 2);height:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:size-4{width:calc(calc(var(--tpl-base-size) / 4) * 4);height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:size-5{width:calc(calc(var(--tpl-base-size) / 4) * 5);height:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:size-6{width:calc(calc(var(--tpl-base-size) / 4) * 6);height:calc(calc(var(--tpl-base-size) / 4) * 6)}.tpl\:size-7{width:calc(calc(var(--tpl-base-size) / 4) * 7);height:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\:size-10{width:calc(calc(var(--tpl-base-size) / 4) * 10);height:calc(calc(var(--tpl-base-size) / 4) * 10)}.tpl\:size-full{width:100%;height:100%}.tpl\:h-4{height:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:h-12{height:calc(calc(var(--tpl-base-size) / 4) * 12)}.tpl\:h-full{height:100%}.tpl\:max-h-32{max-height:calc(calc(var(--tpl-base-size) / 4) * 32)}.tpl\:max-h-56{max-height:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\:max-h-\[90\%\]{max-height:90%}.tpl\:max-h-\[90vh\]{max-height:90vh}.tpl\:min-h-0{min-height:0}.tpl\:w-48{width:calc(calc(var(--tpl-base-size) / 4) * 48)}.tpl\:w-52{width:calc(calc(var(--tpl-base-size) / 4) * 52)}.tpl\:w-56{width:calc(calc(var(--tpl-base-size) / 4) * 56)}.tpl\:w-full{width:100%}.tpl\:max-w-2xl{max-width:calc(42 * var(--tpl-base-size))}.tpl\:max-w-sm{max-width:calc(24 * var(--tpl-base-size))}.tpl\:min-w-0{min-width:0}.tpl\:flex-1{flex:1}.tpl\:shrink-0{flex-shrink:0}.tpl\:-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:translate-y-1{--tw-translate-y:calc(var(--tpl-base-size) / 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.tpl\:-rotate-90{rotate:-90deg}.tpl\:rotate-45{rotate:45deg}.tpl\:rotate-90{rotate:90deg}.tpl\:animate-spin{animation:1s linear infinite spin}.tpl\:cursor-help{cursor:help}.tpl\:cursor-not-allowed{cursor:not-allowed}.tpl\:cursor-pointer{cursor:pointer}.tpl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.tpl\:flex-col{flex-direction:column}.tpl\:flex-wrap{flex-wrap:wrap}.tpl\:items-center{align-items:center}.tpl\:justify-between{justify-content:space-between}.tpl\:justify-center{justify-content:center}.tpl\:justify-end{justify-content:flex-end}.tpl\:gap-0\.5{gap:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:gap-1{gap:calc(var(--tpl-base-size) / 4)}.tpl\:gap-1\.5{gap:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:gap-2{gap:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:gap-3{gap:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:gap-5{gap:calc(calc(var(--tpl-base-size) / 4) * 5)}:where(.tpl\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(calc(var(--tpl-base-size) / 4) * 3) * calc(1 - var(--tw-space-y-reverse)))}.tpl\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tpl\:overflow-hidden{overflow:hidden}.tpl\:overflow-y-auto{overflow-y:auto}.tpl\:rounded{border-radius:calc(.25 * var(--tpl-base-size))}.tpl\:rounded-\[var\(--tpl-radius-lg\)\]{border-radius:var(--tpl-radius-lg)}.tpl\:rounded-full{border-radius:3.40282e38px}.tpl\:rounded-lg{border-radius:calc(.5 * var(--tpl-base-size))}.tpl\:rounded-md{border-radius:calc(.375 * var(--tpl-base-size))}.tpl\:border{border-style:var(--tw-border-style);border-width:1px}.tpl\:border-2{border-style:var(--tw-border-style);border-width:2px}.tpl\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.tpl\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.tpl\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.tpl\:border-dashed{--tw-border-style:dashed;border-style:dashed}.tpl\:bg-\[var\(--tpl-primary\)\]{background-color:var(--tpl-primary)}.tpl\:object-cover{object-fit:cover}.tpl\:p-0\.5{padding:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:p-2{padding:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:p-4{padding:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:p-5{padding:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:px-1\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:px-2{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:px-2\.5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:px-3{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:px-4{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:px-5{padding-inline:calc(calc(var(--tpl-base-size) / 4) * 5)}.tpl\:py-0\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * .5)}.tpl\:py-1{padding-block:calc(var(--tpl-base-size) / 4)}.tpl\:py-1\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 1.5)}.tpl\:py-2{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:py-2\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:py-3{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:py-3\.5{padding-block:calc(calc(var(--tpl-base-size) / 4) * 3.5)}.tpl\:py-4{padding-block:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:py-16{padding-block:calc(calc(var(--tpl-base-size) / 4) * 16)}.tpl\:pt-3{padding-top:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pt-4{padding-top:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:pr-2{padding-right:calc(calc(var(--tpl-base-size) / 4) * 2)}.tpl\:pr-3{padding-right:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pr-7{padding-right:calc(calc(var(--tpl-base-size) / 4) * 7)}.tpl\:pr-8{padding-right:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\:pb-4{padding-bottom:calc(calc(var(--tpl-base-size) / 4) * 4)}.tpl\:pl-2\.5{padding-left:calc(calc(var(--tpl-base-size) / 4) * 2.5)}.tpl\:pl-3{padding-left:calc(calc(var(--tpl-base-size) / 4) * 3)}.tpl\:pl-8{padding-left:calc(calc(var(--tpl-base-size) / 4) * 8)}.tpl\:text-center{text-align:center}.tpl\:text-left{text-align:left}.tpl\:text-sm{font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875))}.tpl\:text-xs{font-size:calc(.75 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1 / .75))}.tpl\:text-\[9px\]{font-size:9px}.tpl\:text-\[10px\]{font-size:10px}.tpl\:font-bold{--tw-font-weight:700;font-weight:700}.tpl\:font-medium{--tw-font-weight:500;font-weight:500}.tpl\:font-normal{--tw-font-weight:400;font-weight:400}.tpl\:font-semibold{--tw-font-weight:600;font-weight:600}.tpl\:tracking-wider{--tw-tracking:.05em;letter-spacing:.05em}.tpl\:whitespace-nowrap{white-space:nowrap}.tpl\:text-white{color:#fff}.tpl\:italic{font-style:italic}.tpl\:opacity-0{opacity:0}.tpl\:opacity-50{opacity:.5}.tpl\:opacity-60{opacity:.6}.tpl\:opacity-100{opacity:1}.tpl\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.tpl\:duration-100{--tw-duration:.1s;transition-duration:.1s}.tpl\:duration-150{--tw-duration:.15s;transition-duration:.15s}.tpl\:duration-200{--tw-duration:.2s;transition-duration:.2s}.tpl\:duration-300{--tw-duration:.3s;transition-duration:.3s}.tpl\:ease-in{--tw-ease:cubic-bezier(.4, 0, 1, 1);transition-timing-function:cubic-bezier(.4,0,1,1)}.tpl\:ease-out{--tw-ease:cubic-bezier(0, 0, .2, 1);transition-timing-function:cubic-bezier(0,0,.2,1)}.tpl\:outline-none{--tw-outline-style:none;outline-style:none}@media(hover:hover){.tpl\:group-hover\:opacity-100:is(:where(.tpl\:group):hover *){opacity:1}.tpl\:hover\:underline:hover{text-decoration-line:underline}.tpl\:hover\:opacity-90:hover{opacity:.9}}.tpl\:focus\:shadow-\[var\(--tpl-ring\)\]:focus{--tw-shadow:var(--tpl-ring);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.tpl\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.tpl\:disabled\:opacity-50:disabled{opacity:.5}@layer base,components;.tpl{--tpl-base-size:var(--tpl-user-base-size,16px);--tpl-bg:oklch(99.5% .002 60);--tpl-bg-elevated:oklch(98% .004 60);--tpl-bg-hover:oklch(96% .006 60);--tpl-bg-active:oklch(93.5% .008 60);--tpl-border:oklch(92% .006 60);--tpl-border-light:oklch(86% .01 60);--tpl-text:oklch(18% .01 60);--tpl-text-muted:oklch(50% .015 60);--tpl-text-dim:oklch(68% .012 60);--tpl-primary:oklch(70% .16 55);--tpl-primary-hover:oklch(63% .17 55);--tpl-primary-light:oklch(95% .04 55);--tpl-secondary:oklch(60% .118 184.71);--tpl-secondary-hover:oklch(53.2% .105 186.39);--tpl-secondary-light:oklch(93.8% .03 186.82);--tpl-success:oklch(62.8% .194 155.1);--tpl-success-light:oklch(93.6% .043 163.51);--tpl-warning:oklch(76.9% .168 70.08);--tpl-warning-light:oklch(95% .038 73.59);--tpl-danger:oklch(63.7% .237 25.33);--tpl-danger-light:oklch(93.6% .032 17.72);--tpl-radius:10px;--tpl-radius-sm:7px;--tpl-radius-lg:14px;--tpl-font-family:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--tpl-shadow:0 1px 2px #0000000a, 0 1px 3px #00000008;--tpl-shadow-md:0 2px 8px #0000000f, 0 1px 3px #0000000a;--tpl-shadow-lg:0 4px 16px #00000014, 0 2px 6px #0000000a;--tpl-shadow-xl:0 8px 32px #0000001a, 0 4px 12px #0000000f;--tpl-ring:0 0 0 3px var(--tpl-primary-light);--tpl-transition:.12s cubic-bezier(.16, 1, .3, 1)}.tpl[data-tpl-theme=dark]{--tpl-bg:oklch(16% .005 60);--tpl-bg-elevated:oklch(21% .006 60);--tpl-bg-hover:oklch(26% .007 60);--tpl-bg-active:oklch(30% .008 60);--tpl-border:oklch(30% .006 60);--tpl-border-light:oklch(38% .008 60);--tpl-text:oklch(93% .005 60);--tpl-text-muted:oklch(65% .01 60);--tpl-text-dim:oklch(50% .008 60);--tpl-primary:oklch(73% .15 55);--tpl-primary-hover:oklch(78% .14 55);--tpl-primary-light:oklch(28% .05 55);--tpl-secondary:oklch(63% .11 184.71);--tpl-secondary-hover:oklch(68% .1 186.39);--tpl-secondary-light:oklch(25% .03 186.82);--tpl-success:oklch(65% .18 155.1);--tpl-success-light:oklch(25% .04 163.51);--tpl-warning:oklch(78% .16 70.08);--tpl-warning-light:oklch(28% .04 73.59);--tpl-danger:oklch(65% .22 25.33);--tpl-danger-light:oklch(25% .04 17.72);--tpl-shadow:0 1px 2px #0000004d, 0 1px 3px #0003;--tpl-shadow-md:0 2px 8px #00000059, 0 1px 3px #00000040;--tpl-shadow-lg:0 4px 16px #0006, 0 2px 6px #0000004d;--tpl-shadow-xl:0 8px 32px #00000080, 0 4px 12px #00000059;--tpl-ring:0 0 0 3px var(--tpl-primary-light)}.tpl{font-family:Geist,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:calc(.875 * var(--tpl-base-size));line-height:var(--tw-leading,calc(1.25 / .875));--tw-leading:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--tpl-bg);color:var(--tpl-text);line-height:1.5;font-family:var(--tpl-font-family)}:where(.tpl) button,:where(.tpl) input,:where(.tpl) select,:where(.tpl) textarea{box-sizing:border-box;font-family:inherit}:where(.tpl) button{cursor:pointer;background:0 0;border:none}:where(.tpl) button:focus-visible,:where(.tpl) input:focus-visible,:where(.tpl) select:focus-visible,:where(.tpl) textarea:focus-visible{box-shadow:var(--tpl-ring);outline:none}.tpl ::-webkit-scrollbar{width:6px;height:6px}.tpl ::-webkit-scrollbar-track{background:0 0}.tpl ::-webkit-scrollbar-thumb{background-color:var(--tpl-border-light)}@supports (color:color-mix(in lab,red,red)){.tpl ::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--tpl-border-light) 60%,transparent)}}.tpl ::-webkit-scrollbar-thumb{border-radius:calc(.25 * var(--tpl-base-size))}.tpl ::-webkit-scrollbar-thumb:hover{background-color:var(--tpl-border-light)}@keyframes tpl-pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes tpl-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes tpl-scale-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}.tpl-pulse{animation:2s infinite tpl-pulse}.tpl-spinner{animation:1s linear infinite tpl-spin}.tpl-scale-in{animation:.15s cubic-bezier(.16,1,.3,1) tpl-scale-in}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-leading{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}
2
2
  /*$vite$:1*/