limbo-component 2.8.0 → 3.1.1

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 (53) hide show
  1. package/dist/limbo.cjs.js +1 -1
  2. package/dist/limbo.cjs.map +1 -1
  3. package/dist/limbo.css +1 -1
  4. package/dist/limbo.es.js +604 -526
  5. package/dist/limbo.es.map +1 -1
  6. package/dist/limbo.min.js +1 -1
  7. package/dist/limbo.min.js.map +1 -1
  8. package/dist/limbo.umd.js +1 -1
  9. package/dist/limbo.umd.js.map +1 -1
  10. package/dist/types/App.d.ts +13 -1
  11. package/dist/types/App.d.ts.map +1 -1
  12. package/dist/types/components/AssetPreview.d.ts +28 -0
  13. package/dist/types/components/AssetPreview.d.ts.map +1 -0
  14. package/dist/types/components/CropperView.d.ts.map +1 -1
  15. package/dist/types/components/FolderSelector.d.ts +35 -0
  16. package/dist/types/components/FolderSelector.d.ts.map +1 -0
  17. package/dist/types/components/Gallery.d.ts +7 -1
  18. package/dist/types/components/Gallery.d.ts.map +1 -1
  19. package/dist/types/components/ImageCard.d.ts +6 -1
  20. package/dist/types/components/ImageCard.d.ts.map +1 -1
  21. package/dist/types/components/ImagePreview.d.ts +1 -1
  22. package/dist/types/components/ImagePreview.d.ts.map +1 -1
  23. package/dist/types/components/TabAI.d.ts +4 -1
  24. package/dist/types/components/TabAI.d.ts.map +1 -1
  25. package/dist/types/components/TabPortals.d.ts +4 -1
  26. package/dist/types/components/TabPortals.d.ts.map +1 -1
  27. package/dist/types/components/TabStock.d.ts +4 -1
  28. package/dist/types/components/TabStock.d.ts.map +1 -1
  29. package/dist/types/components/TabUpload.d.ts +5 -1
  30. package/dist/types/components/TabUpload.d.ts.map +1 -1
  31. package/dist/types/components/UploadForm.d.ts +5 -1
  32. package/dist/types/components/UploadForm.d.ts.map +1 -1
  33. package/dist/types/components/previews/AudioPreviewContent.d.ts +11 -0
  34. package/dist/types/components/previews/AudioPreviewContent.d.ts.map +1 -0
  35. package/dist/types/components/previews/GenericFilePreview.d.ts +8 -0
  36. package/dist/types/components/previews/GenericFilePreview.d.ts.map +1 -0
  37. package/dist/types/components/previews/VideoPreviewContent.d.ts +10 -0
  38. package/dist/types/components/previews/VideoPreviewContent.d.ts.map +1 -0
  39. package/dist/types/components/previews/index.d.ts +4 -0
  40. package/dist/types/components/previews/index.d.ts.map +1 -0
  41. package/dist/types/core/ConfigManager.d.ts +99 -0
  42. package/dist/types/core/ConfigManager.d.ts.map +1 -1
  43. package/dist/types/hooks/useFolders.d.ts +17 -0
  44. package/dist/types/hooks/useFolders.d.ts.map +1 -0
  45. package/dist/types/hooks/useUploadImage.d.ts +1 -1
  46. package/dist/types/hooks/useUploadImage.d.ts.map +1 -1
  47. package/dist/types/services/assetsApi.d.ts +18 -0
  48. package/dist/types/services/assetsApi.d.ts.map +1 -1
  49. package/dist/types/services/foldersApi.d.ts +60 -0
  50. package/dist/types/services/foldersApi.d.ts.map +1 -0
  51. package/dist/types/services/responseAdapters.d.ts +12 -0
  52. package/dist/types/services/responseAdapters.d.ts.map +1 -1
  53. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- export default function App({ apiKey, prod, url, features, modeUI, ui, callbacks, instanceId, itemsPerPage, _externalImage, cropperConfig, }: {
1
+ export default function App({ apiKey, prod, url, features, modeUI, ui, callbacks, instanceId, itemsPerPage, _externalImage, cropperConfig, folderConfig, allowedCategories, }: {
2
2
  apiKey: any;
3
3
  prod?: boolean;
4
4
  url?: boolean;
@@ -17,5 +17,17 @@ export default function App({ apiKey, prod, url, features, modeUI, ui, callbacks
17
17
  itemsPerPage?: number;
18
18
  _externalImage?: any;
19
19
  cropperConfig?: any;
20
+ folderConfig?: {
21
+ include: any[];
22
+ exclude: any[];
23
+ includeNoFolder: boolean;
24
+ showFolderSelector: boolean;
25
+ showFolderFilter: boolean;
26
+ showFolderInfo: boolean;
27
+ allowMoveFolder: boolean;
28
+ allowCreateFolder: boolean;
29
+ defaultFolder: any;
30
+ };
31
+ allowedCategories?: any;
20
32
  }): import("react/jsx-runtime").JSX.Element;
21
33
  //# sourceMappingURL=App.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/App.jsx"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;4CA0zBC"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/App.jsx"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA07BC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * AssetPreview Component
3
+ *
4
+ * Unified preview component for files of any type: images, videos, audio, documents.
5
+ * Replaces ImagePreview with multi-type support.
6
+ *
7
+ * @param {Object} props
8
+ * @param {File} props.file - File to preview
9
+ * @param {Function} props.onDiscard - Called when user discards the file
10
+ * @param {Function} props.onRetry - Called when user wants to retry (AI only)
11
+ * @param {Function} props.onDownload - Called when user downloads the file
12
+ * @param {Function} props.onSelect - Called when user selects file
13
+ * @param {boolean} props.showRetry - Whether to show Retry button (default: false)
14
+ * @param {boolean} props.disabled - Disable action buttons (default: false)
15
+ * @param {boolean} props.showCropButton - Whether to show crop-related text (default: auto-detect)
16
+ */
17
+ export default function AssetPreview({ file, image, onDiscard, onRetry, onDownload, onSelect, showRetry, disabled, showCropButton, selectedFolder, onFolderChange, folderConfig, }: {
18
+ file: File;
19
+ onDiscard: Function;
20
+ onRetry: Function;
21
+ onDownload: Function;
22
+ onSelect: Function;
23
+ showRetry: boolean;
24
+ disabled: boolean;
25
+ showCropButton: boolean;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
+ export { AssetPreview as ImagePreview };
28
+ //# sourceMappingURL=AssetPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetPreview.d.ts","sourceRoot":"","sources":["../../../src/components/AssetPreview.jsx"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;GAeG;AACH,oLATG;IAAoB,IAAI,EAAhB,IAAI;IACY,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACT,SAAS,EAAxB,OAAO;IACQ,QAAQ,EAAvB,OAAO;IACQ,cAAc,EAA7B,OAAO;CACjB,2CAmYA"}
@@ -1 +1 @@
1
- {"version":3,"file":"CropperView.d.ts","sourceRoot":"","sources":["../../../src/components/CropperView.jsx"],"names":[],"mappings":"AASA;;;;;;;;;;;4CAiyGC"}
1
+ {"version":3,"file":"CropperView.d.ts","sourceRoot":"","sources":["../../../src/components/CropperView.jsx"],"names":[],"mappings":"AASA;;;;;;;;;;;4CAk1GC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Componente selector de carpetas
3
+ *
4
+ * Permite seleccionar una carpeta existente o crear una nueva.
5
+ * Se usa tanto en el formulario de upload como en el filtro de galería.
6
+ *
7
+ * @param {Object} props
8
+ * @param {string|null} props.value - Slug de la carpeta seleccionada
9
+ * @param {Function} props.onChange - Callback cuando cambia la selección (recibe folder o null)
10
+ * @param {boolean} props.allowCreate - Mostrar opción de crear carpeta (default: true)
11
+ * @param {string} props.placeholder - Texto placeholder (default: "Sin carpeta")
12
+ * @param {string} props.label - Etiqueta del campo (opcional)
13
+ * @param {boolean} props.disabled - Deshabilitar selector
14
+ * @param {string} props.className - Clases CSS adicionales
15
+ * @param {boolean} props.showAssetCount - Mostrar contador de assets (default: false)
16
+ * @param {boolean} props.includeNoFolder - Incluir opción "Sin carpeta" (default: true)
17
+ * @param {string[]} props.allowedSlugs - Whitelist de slugs permitidos (opcional)
18
+ * @param {string[]} props.excludeSlugs - Blacklist de slugs a ocultar (opcional)
19
+ * @param {string} props.mode - Modo: "filter" | "upload" (default: "upload")
20
+ */
21
+ export default function FolderSelector({ value, onChange, allowCreate, placeholder, label, disabled, className, showAssetCount, includeNoFolder, allowedSlugs, excludeSlugs, mode, }: {
22
+ value: string | null;
23
+ onChange: Function;
24
+ allowCreate: boolean;
25
+ placeholder: string;
26
+ label: string;
27
+ disabled: boolean;
28
+ className: string;
29
+ showAssetCount: boolean;
30
+ includeNoFolder: boolean;
31
+ allowedSlugs: string[];
32
+ excludeSlugs: string[];
33
+ mode: string;
34
+ }): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=FolderSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderSelector.d.ts","sourceRoot":"","sources":["../../../src/components/FolderSelector.jsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,sLAbG;IAA2B,KAAK,EAAxB,MAAM,GAAC,IAAI;IACK,QAAQ;IACT,WAAW,EAA1B,OAAO;IACO,WAAW,EAAzB,MAAM;IACQ,KAAK,EAAnB,MAAM;IACS,QAAQ,EAAvB,OAAO;IACO,SAAS,EAAvB,MAAM;IACS,cAAc,EAA7B,OAAO;IACQ,eAAe,EAA9B,OAAO;IACS,YAAY,EAA5B,MAAM,EAAE;IACQ,YAAY,EAA5B,MAAM,EAAE;IACM,IAAI,EAAlB,MAAM;CAChB,2CAsMA"}
@@ -1,4 +1,4 @@
1
- export default function Gallery({ onSelect, onCrop, onDelete, deletingId, images, loading, error, filters, debouncedFilters, onFiltersChange, filterConfig, loadingConfig, allowedActions, }: {
1
+ export default function Gallery({ onSelect, onCrop, onDelete, deletingId, images, loading, error, filters, debouncedFilters, onFiltersChange, filterConfig, loadingConfig, allowedActions, allowedCategories, folderConfig, onFolderChange, }: {
2
2
  onSelect: any;
3
3
  onCrop: any;
4
4
  onDelete: any;
@@ -11,6 +11,8 @@ export default function Gallery({ onSelect, onCrop, onDelete, deletingId, images
11
11
  dateFrom: string;
12
12
  dateTo: string;
13
13
  uploadedBy: string;
14
+ assetType: string;
15
+ folder: string;
14
16
  };
15
17
  debouncedFilters?: any;
16
18
  onFiltersChange: any;
@@ -18,6 +20,7 @@ export default function Gallery({ onSelect, onCrop, onDelete, deletingId, images
18
20
  showNameFilter: boolean;
19
21
  showUploadedByFilter: boolean;
20
22
  showDateFilter: boolean;
23
+ showTypeFilter: boolean;
21
24
  };
22
25
  loadingConfig?: {
23
26
  showPlaceholders: boolean;
@@ -32,5 +35,8 @@ export default function Gallery({ onSelect, onCrop, onDelete, deletingId, images
32
35
  crop: boolean;
33
36
  variants: boolean;
34
37
  };
38
+ allowedCategories?: any;
39
+ folderConfig?: any;
40
+ onFolderChange?: any;
35
41
  }): import("react/jsx-runtime").JSX.Element;
36
42
  //# sourceMappingURL=Gallery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Gallery.d.ts","sourceRoot":"","sources":["../../../src/components/Gallery.jsx"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CA6UC"}
1
+ {"version":3,"file":"Gallery.d.ts","sourceRoot":"","sources":["../../../src/components/Gallery.jsx"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAoaC"}
@@ -1,10 +1,15 @@
1
- export default function ImageCard({ image, onDelete, onCrop, onSelect, thumbnailSize, isDeleting, allowedActions, }: {
1
+ export default function ImageCard({ image, onDelete, onCrop, onSelect, onFolderChange, thumbnailSize, isDeleting, showFolderInfo, allowMoveFolder, allowedFolderSlugs, excludedFolderSlugs, allowedActions, }: {
2
2
  image: any;
3
3
  onDelete: any;
4
4
  onCrop: any;
5
5
  onSelect: any;
6
+ onFolderChange: any;
6
7
  thumbnailSize?: number;
7
8
  isDeleting?: boolean;
9
+ showFolderInfo?: boolean;
10
+ allowMoveFolder?: boolean;
11
+ allowedFolderSlugs?: any;
12
+ excludedFolderSlugs?: any;
8
13
  allowedActions?: {
9
14
  select: boolean;
10
15
  download: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ImageCard.d.ts","sourceRoot":"","sources":["../../../src/components/ImageCard.jsx"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;4CAkjBC"}
1
+ {"version":3,"file":"ImageCard.d.ts","sourceRoot":"","sources":["../../../src/components/ImageCard.jsx"],"names":[],"mappings":"AAsEA;;;;;;;;;;;;;;;;;;;;4CA0wBC"}
@@ -13,7 +13,7 @@
13
13
  * @param {boolean} props.showRetry - Whether to show Retry button (default: false)
14
14
  * @param {boolean} props.disabled - Disable action buttons (default: false)
15
15
  */
16
- export default function ImagePreview({ image, onDiscard, onRetry, onDownload, onSelect, showRetry, disabled, }: {
16
+ export default function ImagePreview({ image, onDiscard, onRetry, onDownload, onSelect, showRetry, disabled, selectedFolder, onFolderChange, folderConfig, }: {
17
17
  image: File;
18
18
  onDiscard: Function;
19
19
  onRetry: Function;
@@ -1 +1 @@
1
- {"version":3,"file":"ImagePreview.d.ts","sourceRoot":"","sources":["../../../src/components/ImagePreview.jsx"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,gHARG;IAAoB,KAAK,EAAjB,IAAI;IACY,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACT,SAAS,EAAxB,OAAO;IACQ,QAAQ,EAAvB,OAAO;CACjB,2CAqQA"}
1
+ {"version":3,"file":"ImagePreview.d.ts","sourceRoot":"","sources":["../../../src/components/ImagePreview.jsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,8JARG;IAAoB,KAAK,EAAjB,IAAI;IACY,SAAS;IACT,OAAO;IACP,UAAU;IACV,QAAQ;IACT,SAAS,EAAxB,OAAO;IACQ,QAAQ,EAAvB,OAAO;CACjB,2CAyRA"}
@@ -1,6 +1,9 @@
1
- export default function TabAI({ prod, disabled, onSelect }: {
1
+ export default function TabAI({ prod, disabled, onSelect, selectedFolder, onFolderChange, folderConfig }: {
2
2
  prod: any;
3
3
  disabled: any;
4
4
  onSelect: any;
5
+ selectedFolder: any;
6
+ onFolderChange: any;
7
+ folderConfig: any;
5
8
  }): import("react/jsx-runtime").JSX.Element;
6
9
  //# sourceMappingURL=TabAI.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabAI.d.ts","sourceRoot":"","sources":["../../../src/components/TabAI.jsx"],"names":[],"mappings":"AAOA;;;;4CA6hBC"}
1
+ {"version":3,"file":"TabAI.d.ts","sourceRoot":"","sources":["../../../src/components/TabAI.jsx"],"names":[],"mappings":"AAOA;;;;;;;4CAgiBC"}
@@ -1,6 +1,9 @@
1
- export default function TabPortals({ prod, disabled, onSelect }: {
1
+ export default function TabPortals({ prod, disabled, onSelect, selectedFolder, onFolderChange, folderConfig }: {
2
2
  prod: any;
3
3
  disabled: any;
4
4
  onSelect: any;
5
+ selectedFolder: any;
6
+ onFolderChange: any;
7
+ folderConfig: any;
5
8
  }): import("react/jsx-runtime").JSX.Element;
6
9
  //# sourceMappingURL=TabPortals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabPortals.d.ts","sourceRoot":"","sources":["../../../src/components/TabPortals.jsx"],"names":[],"mappings":"AA2DA;;;;4CAisBC"}
1
+ {"version":3,"file":"TabPortals.d.ts","sourceRoot":"","sources":["../../../src/components/TabPortals.jsx"],"names":[],"mappings":"AA2DA;;;;;;;4CAosBC"}
@@ -1,6 +1,9 @@
1
- export default function TabStock({ prod, disabled, onSelect }: {
1
+ export default function TabStock({ prod, disabled, onSelect, selectedFolder, onFolderChange, folderConfig }: {
2
2
  prod: any;
3
3
  disabled: any;
4
4
  onSelect: any;
5
+ selectedFolder: any;
6
+ onFolderChange: any;
7
+ folderConfig: any;
5
8
  }): import("react/jsx-runtime").JSX.Element;
6
9
  //# sourceMappingURL=TabStock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabStock.d.ts","sourceRoot":"","sources":["../../../src/components/TabStock.jsx"],"names":[],"mappings":"AAQA;;;;4CA4wBC"}
1
+ {"version":3,"file":"TabStock.d.ts","sourceRoot":"","sources":["../../../src/components/TabStock.jsx"],"names":[],"mappings":"AAQA;;;;;;;4CA+wBC"}
@@ -1,4 +1,4 @@
1
- export default function TabUpload({ file, setFile, previewUrl, setPreviewUrl, fileInputRef, onSelect, disabled, }: {
1
+ export default function TabUpload({ file, setFile, previewUrl, setPreviewUrl, fileInputRef, onSelect, disabled, allowedCategories, selectedFolder, onFolderChange, folderConfig, }: {
2
2
  file: any;
3
3
  setFile: any;
4
4
  previewUrl: any;
@@ -6,5 +6,9 @@ export default function TabUpload({ file, setFile, previewUrl, setPreviewUrl, fi
6
6
  fileInputRef: any;
7
7
  onSelect: any;
8
8
  disabled: any;
9
+ allowedCategories?: any;
10
+ selectedFolder?: any;
11
+ onFolderChange?: any;
12
+ folderConfig?: any;
9
13
  }): import("react/jsx-runtime").JSX.Element;
10
14
  //# sourceMappingURL=TabUpload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabUpload.d.ts","sourceRoot":"","sources":["../../../src/components/TabUpload.jsx"],"names":[],"mappings":"AAGA;;;;;;;;4CAuIC"}
1
+ {"version":3,"file":"TabUpload.d.ts","sourceRoot":"","sources":["../../../src/components/TabUpload.jsx"],"names":[],"mappings":"AA8BA;;;;;;;;;;;;4CA0MC"}
@@ -1,7 +1,11 @@
1
- export default function UploadForm({ onSelect, disabled, apiKey, prod, }: {
1
+ export default function UploadForm({ onSelect, disabled, apiKey, prod, allowedCategories, folderConfig, selectedFolder, onFolderChange, }: {
2
2
  onSelect: any;
3
3
  disabled?: boolean;
4
4
  apiKey: any;
5
5
  prod?: boolean;
6
+ allowedCategories?: any;
7
+ folderConfig?: any;
8
+ selectedFolder?: any;
9
+ onFolderChange?: any;
6
10
  }): import("react/jsx-runtime").JSX.Element;
7
11
  //# sourceMappingURL=UploadForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UploadForm.d.ts","sourceRoot":"","sources":["../../../src/components/UploadForm.jsx"],"names":[],"mappings":"AAcA;;;;;4CAgNC"}
1
+ {"version":3,"file":"UploadForm.d.ts","sourceRoot":"","sources":["../../../src/components/UploadForm.jsx"],"names":[],"mappings":"AAcA;;;;;;;;;4CAkOC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * AudioPreviewContent Component
3
+ *
4
+ * Displays an audio player for audio file previews.
5
+ */
6
+ export default function AudioPreviewContent({ previewUrl, fileName, fileSize }: {
7
+ previewUrl: any;
8
+ fileName: any;
9
+ fileSize: any;
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=AudioPreviewContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioPreviewContent.d.ts","sourceRoot":"","sources":["../../../../src/components/previews/AudioPreviewContent.jsx"],"names":[],"mappings":"AAGA;;;;GAIG;AACH;;;;4CA4HC"}
@@ -0,0 +1,8 @@
1
+ export function getFileIconInfo(mimeType: any, category: any): any;
2
+ export function formatFileSize(bytes: any): string;
3
+ export default function GenericFilePreview({ file, mimeType, category }: {
4
+ file: any;
5
+ mimeType: any;
6
+ category: any;
7
+ }): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=GenericFilePreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GenericFilePreview.d.ts","sourceRoot":"","sources":["../../../../src/components/previews/GenericFilePreview.jsx"],"names":[],"mappings":"AAuDA,mEAuBC;AAGD,mDAMC;AAED;;;;4CA+BC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * VideoPreviewContent Component
3
+ *
4
+ * Displays a video player with controls for video file previews.
5
+ */
6
+ export default function VideoPreviewContent({ previewUrl, fileName }: {
7
+ previewUrl: any;
8
+ fileName: any;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=VideoPreviewContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VideoPreviewContent.d.ts","sourceRoot":"","sources":["../../../../src/components/previews/VideoPreviewContent.jsx"],"names":[],"mappings":"AAEA;;;;GAIG;AACH;;;4CAyEC"}
@@ -0,0 +1,4 @@
1
+ export { default as VideoPreviewContent } from "./VideoPreviewContent";
2
+ export { default as AudioPreviewContent } from "./AudioPreviewContent";
3
+ export { default as GenericFilePreview, getFileIconInfo, formatFileSize } from "./GenericFilePreview";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/previews/index.js"],"names":[],"mappings":""}
@@ -32,6 +32,7 @@ export class ConfigManager {
32
32
  showNameFilter: boolean;
33
33
  showUploadedByFilter: boolean;
34
34
  showDateFilter: boolean;
35
+ showTypeFilter: boolean;
35
36
  enabledFilters: string[];
36
37
  customFilters: any[];
37
38
  };
@@ -52,6 +53,18 @@ export class ConfigManager {
52
53
  minHeight: any;
53
54
  maxWidth: any;
54
55
  maxHeight: any;
56
+ allowedCategories: any;
57
+ };
58
+ folders: {
59
+ include: any[];
60
+ exclude: any[];
61
+ includeNoFolder: boolean;
62
+ showFolderSelector: boolean;
63
+ showFolderFilter: boolean;
64
+ showFolderInfo: boolean;
65
+ allowMoveFolder: boolean;
66
+ allowCreateFolder: boolean;
67
+ defaultFolder: any;
55
68
  };
56
69
  downloadFormat: string;
57
70
  return: {
@@ -204,6 +217,7 @@ export class ConfigManager {
204
217
  showNameFilter: boolean;
205
218
  showUploadedByFilter: boolean;
206
219
  showDateFilter: boolean;
220
+ showTypeFilter: boolean;
207
221
  enabledFilters: string[];
208
222
  customFilters: any[];
209
223
  };
@@ -224,6 +238,18 @@ export class ConfigManager {
224
238
  minHeight: any;
225
239
  maxWidth: any;
226
240
  maxHeight: any;
241
+ allowedCategories: any;
242
+ };
243
+ folders: {
244
+ include: any[];
245
+ exclude: any[];
246
+ includeNoFolder: boolean;
247
+ showFolderSelector: boolean;
248
+ showFolderFilter: boolean;
249
+ showFolderInfo: boolean;
250
+ allowMoveFolder: boolean;
251
+ allowCreateFolder: boolean;
252
+ defaultFolder: any;
227
253
  };
228
254
  return: {
229
255
  format: string;
@@ -420,6 +446,79 @@ export class ConfigManager {
420
446
  * Obtener items por página
421
447
  */
422
448
  getItemsPerPage(config?: any): any;
449
+ /**
450
+ * ========================================
451
+ * 🆕 HELPERS PARA CONFIGURACIÓN DE CARPETAS
452
+ * ========================================
453
+ */
454
+ /**
455
+ * Obtener configuración de filtrado de carpetas
456
+ */
457
+ getFolderConfig(config?: any): any;
458
+ /**
459
+ * Verificar si hay filtros de carpetas activos
460
+ */
461
+ hasFolderFilters(config?: any): boolean;
462
+ /**
463
+ * Obtener parámetros de carpetas para la API
464
+ * Retorna un objeto listo para fusionar con apiParams
465
+ */
466
+ getFolderApiParams(config?: any): {
467
+ folders_include: any;
468
+ folders_exclude: any;
469
+ include_no_folder: string;
470
+ };
471
+ /**
472
+ * Verificar si se debe mostrar el selector de carpeta en upload
473
+ */
474
+ showFolderSelectorInUpload(config?: any): boolean;
475
+ /**
476
+ * Verificar si se debe mostrar el filtro de carpeta en galería
477
+ */
478
+ showFolderFilterInGallery(config?: any): boolean;
479
+ /**
480
+ * Verificar si el usuario puede crear carpetas
481
+ */
482
+ canCreateFolder(config?: any): boolean;
483
+ /**
484
+ * Obtener carpeta por defecto para uploads
485
+ */
486
+ getDefaultUploadFolder(config?: any): any;
487
+ /**
488
+ * Obtener slugs de carpetas permitidas (whitelist)
489
+ * Retorna null si no hay whitelist definida
490
+ */
491
+ getAllowedFolderSlugs(config?: any): any;
492
+ /**
493
+ * ========================================
494
+ * 🆕 HELPERS PARA CATEGORÍAS DE ARCHIVOS
495
+ * ========================================
496
+ */
497
+ /**
498
+ * Obtener categorías de archivos permitidas
499
+ * @returns {Array|null} Array de categorías o null para todos los tipos
500
+ */
501
+ getAllowedCategories(config?: any): any[] | null;
502
+ /**
503
+ * Verificar si una categoría específica está permitida
504
+ */
505
+ isCategoryAllowed(category: any, config?: any): boolean;
506
+ /**
507
+ * Verificar si el componente soporta múltiples tipos de archivo
508
+ */
509
+ isMultiTypeEnabled(config?: any): boolean;
510
+ /**
511
+ * Verificar si se debe mostrar el filtro de tipo en la galería
512
+ */
513
+ showTypeFilter(config?: any): boolean;
514
+ /**
515
+ * Obtener las opciones de tipo de archivo para el filtro de galería
516
+ * Filtra según las categorías permitidas
517
+ */
518
+ getTypeFilterOptions(config?: any): {
519
+ value: string;
520
+ label: string;
521
+ }[];
423
522
  }
424
523
  import { I18n } from '../utils/i18n.js';
425
524
  //# sourceMappingURL=ConfigManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../../src/core/ConfigManager.js"],"names":[],"mappings":"AAOA;IAEI,iBAAsB;IACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAoLC;IAGH;;OAEG;IACH,6BAGC;IAED;;OAEG;IACH,gBAEC;IAED;;;OAGG;IACH,+BASC;IAED;;OAEG;IACH,kCAkBC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,mBAEC;IAED;;OAEG;IACH,sBAGC;IAED;;OAEG;IACH,kCAGC;IAED;;OAEG;IACH,iCAGC;IAED;;OAEG;IACH,0CAIC;IAED;;OAEG;IACH,uDAWC;IAED;;OAEG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAmKC;IAED;;OAEG;IACH,sCAyCC;IAED;;OAEG;IACH,sDAQC;IAED;;OAEG;IACH,oDAGC;IAED;;OAEG;IACH,sCAGC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,8BAcC;IAED;;OAEG;IACH;;;MA0CC;IAED;;;;;OAKG;IACH,mBAJW,MAAM,cACN,MAAM,uBAiBhB;IAED;;OAEG;IACH;;;;;;;;MAWC;IAED;;OAEG;IACH,uCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;;OAGG;IACH,uCAYC;IAED;;;;OAIG;IAEH;;OAEG;IACH,qCAGC;IAED;;OAEG;IACH,yCAGC;IAED;;OAEG;IACH,yCAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,6CAGC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,wCAGC;IAED;;;;OAIG;IAEH;;OAEG;IACH,qCAGC;IAED;;OAEG;IACH,2DAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,+CAGC;IAED;;OAEG;IACH,uCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;OAEG;IACH,wCAGC;IAED;;OAEG;IACH,mCAGC;CACF;qBAj0BoB,kBAAkB"}
1
+ {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../../src/core/ConfigManager.js"],"names":[],"mappings":"AAOA;IAEI,iBAAsB;IACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA0MC;IAGH;;OAEG;IACH,6BAGC;IAED;;OAEG;IACH,gBAEC;IAED;;;OAGG;IACH,+BASC;IAED;;OAEG;IACH,kCAkBC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,mBAEC;IAED;;OAEG;IACH,sBAGC;IAED;;OAEG;IACH,kCAGC;IAED;;OAEG;IACH,iCAGC;IAED;;OAEG;IACH,0CAIC;IAED;;OAEG;IACH,uDAWC;IAED;;OAEG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAkLC;IAED;;OAEG;IACH,sCAyCC;IAED;;OAEG;IACH,sDAQC;IAED;;OAEG;IACH,oDAGC;IAED;;OAEG;IACH,sCAGC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,8BAcC;IAED;;OAEG;IACH;;;MA0CC;IAED;;;;;OAKG;IACH,mBAJW,MAAM,cACN,MAAM,uBAiBhB;IAED;;OAEG;IACH;;;;;;;;MAWC;IAED;;OAEG;IACH,uCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;;OAGG;IACH,uCAYC;IAED;;;;OAIG;IAEH;;OAEG;IACH,qCAGC;IAED;;OAEG;IACH,yCAGC;IAED;;OAEG;IACH,yCAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,6CAGC;IAED;;OAEG;IACH,oCAGC;IAED;;OAEG;IACH,wCAGC;IAED;;;;OAIG;IAEH;;OAEG;IACH,qCAGC;IAED;;OAEG;IACH,2DAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,2CAGC;IAED;;OAEG;IACH,+CAGC;IAED;;OAEG;IACH,uCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;OAEG;IACH,wCAGC;IAED;;OAEG;IACH,mCAGC;IAED;;;;OAIG;IAEH;;OAEG;IACH,mCAGC;IAED;;OAEG;IACH,wCAGC;IAED;;;OAGG;IACH;;;;MAiBC;IAED;;OAEG;IACH,kDAGC;IAED;;OAEG;IACH,iDAGC;IAED;;OAEG;IACH,uCAGC;IAED;;OAEG;IACH,0CAGC;IAED;;;OAGG;IACH,yCAIC;IAED;;;;OAIG;IAEH;;;OAGG;IACH,oCAFa,QAAM,IAAI,CAKtB;IAED;;OAEG;IACH,wDAOC;IAED;;OAEG;IACH,0CAKC;IAED;;OAEG;IACH,sCAGC;IAED;;;OAGG;IACH;;;QAmBC;CACF;qBAngCoB,kBAAkB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Hook para gestionar carpetas del portal
3
+ *
4
+ * @param {Object} options - Opciones de configuración
5
+ * @param {boolean} options.autoFetch - Cargar carpetas automáticamente al montar (default: true)
6
+ * @param {string} options.visibility - Filtrar por visibilidad (public, internal, private)
7
+ * @param {string[]} options.allowedSlugs - Si se proporciona, solo muestra estas carpetas (whitelist)
8
+ * @param {string[]} options.excludeSlugs - Si se proporciona, oculta estas carpetas (blacklist)
9
+ * @returns {Object} Estado y funciones para gestionar carpetas
10
+ */
11
+ export default function useFolders(options?: {
12
+ autoFetch: boolean;
13
+ visibility: string;
14
+ allowedSlugs: string[];
15
+ excludeSlugs: string[];
16
+ }): any;
17
+ //# sourceMappingURL=useFolders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFolders.d.ts","sourceRoot":"","sources":["../../../src/hooks/useFolders.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,6CANG;IAAyB,SAAS,EAA1B,OAAO;IACS,UAAU,EAA1B,MAAM;IACY,YAAY,EAA9B,MAAM,EAAE;IACU,YAAY,EAA9B,MAAM,EAAE;CAChB,OA0IF"}
@@ -1,5 +1,5 @@
1
1
  export default function useUploadImage(): {
2
- upload: (file: any, uploadedBy?: any) => Promise<any>;
2
+ upload: (file: any, uploadedBy?: any, folder?: any) => Promise<any>;
3
3
  loading: boolean;
4
4
  error: any;
5
5
  uploadedImage: any;
@@ -1 +1 @@
1
- {"version":3,"file":"useUploadImage.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUploadImage.js"],"names":[],"mappings":"AAGA;;;;;;EA2CC"}
1
+ {"version":3,"file":"useUploadImage.d.ts","sourceRoot":"","sources":["../../../src/hooks/useUploadImage.js"],"names":[],"mappings":"AAGA;;;;;;EA6CC"}
@@ -24,6 +24,24 @@ export function uploadAsset(file: File, uploaded_by?: string | null, store_origi
24
24
  * @param {number} urlExpires - URL expiration in seconds (0 = permanent, default)
25
25
  */
26
26
  export function getAsset(assetId: string, includeVariants?: boolean, includeMetadata?: boolean, urlExpires?: number): Promise<any>;
27
+ /**
28
+ * Update asset metadata
29
+ * Maps to: PATCH /api/assets/{id}
30
+ *
31
+ * @param {string} assetId - Asset ID
32
+ * @param {Object} data - Data to update
33
+ * @param {string} data.filename - New filename (optional)
34
+ * @param {string} data.folder - Folder slug or ID (optional, use null to remove from folder)
35
+ * @param {string} data.alt_text - Alt text (optional)
36
+ * @param {Object} data.custom_metadata - Custom metadata (optional)
37
+ * @returns {Promise<Object>} Updated asset
38
+ */
39
+ export function updateAsset(assetId: string, data: {
40
+ filename: string;
41
+ folder: string;
42
+ alt_text: string;
43
+ custom_metadata: any;
44
+ }): Promise<any>;
27
45
  /**
28
46
  * Delete asset (soft delete)
29
47
  * Maps to: DELETE /api/assets/{id}
@@ -1 +1 @@
1
- {"version":3,"file":"assetsApi.d.ts","sourceRoot":"","sources":["../../../src/services/assetsApi.js"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,0CAFa,OAAO,KAAQ,CAuB3B;AAED;;;;;;;;GAQG;AACH,kCALW,IAAI,gBACJ,MAAM,GAAC,IAAI,mBACX,OAAO,WACP,MAAM,GAAC,IAAI,gBAuBrB;AAED;;;;;;;;GAQG;AACH,kCALW,MAAM,oBACN,OAAO,oBACP,OAAO,eACP,MAAM,gBAqBhB;AAED;;;GAGG;AACH,wDAaC;AAED;;;GAGG;AACH;;;;;;;;iBAuCC;AAED;;;;;;GAMG;AACH,sCAHW,MAAM,eACN,MAAM,gBAqBhB;AAED;;;GAGG;AACH,0EAaC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,2CAVW,MAAM,QACN,IAAI,YAEZ;IAAwB,IAAI,EAApB,MAAM;IACU,KAAK,EAArB,MAAM;IACU,MAAM,EAAtB,MAAM;IACU,MAAM,EAAtB,MAAM;IACW,YAAY,EAA7B,OAAO;CACf,GAAU,OAAO,KAAQ,CAiC3B;AAKD;;;GAGG;AACH,6DAGC;AAED;;;GAGG;AACH,+EAGC"}
1
+ {"version":3,"file":"assetsApi.d.ts","sourceRoot":"","sources":["../../../src/services/assetsApi.js"],"names":[],"mappings":"AAmBA;;;;GAIG;AACH,0CAFa,OAAO,KAAQ,CAuB3B;AAED;;;;;;;;GAQG;AACH,kCALW,IAAI,gBACJ,MAAM,GAAC,IAAI,mBACX,OAAO,WACP,MAAM,GAAC,IAAI,gBAuBrB;AAED;;;;;;;;GAQG;AACH,kCALW,MAAM,oBACN,OAAO,oBACP,OAAO,eACP,MAAM,gBAqBhB;AAED;;;;;;;;;;;GAWG;AACH,qCARW,MAAM,QAEd;IAAqB,QAAQ,EAArB,MAAM;IACO,MAAM,EAAnB,MAAM;IACO,QAAQ,EAArB,MAAM;IACO,eAAe;CACpC,GAAU,OAAO,KAAQ,CAgB3B;AAED;;;GAGG;AACH,wDAaC;AAED;;;GAGG;AACH;;;;;;;;iBAuCC;AAED;;;;;;GAMG;AACH,sCAHW,MAAM,eACN,MAAM,gBAqBhB;AAED;;;GAGG;AACH,0EAaC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,2CAVW,MAAM,QACN,IAAI,YAEZ;IAAwB,IAAI,EAApB,MAAM;IACU,KAAK,EAArB,MAAM;IACU,MAAM,EAAtB,MAAM;IACU,MAAM,EAAtB,MAAM;IACW,YAAY,EAA7B,OAAO;CACf,GAAU,OAAO,KAAQ,CAiC3B;AAKD;;;GAGG;AACH,6DAGC;AAED;;;GAGG;AACH,+EAGC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Lista carpetas del portal
3
+ * Maps to: GET /api/folders
4
+ *
5
+ * @param {Object} params - Parámetros de filtrado
6
+ * @param {string} params.visibility - Filtrar por visibilidad (public, internal, private)
7
+ * @param {boolean} params.include_counts - Incluir contador de assets (default: true)
8
+ * @returns {Promise<{folders: Array, total: number}>}
9
+ */
10
+ export function listFolders(params?: {
11
+ visibility: string;
12
+ include_counts: boolean;
13
+ }): Promise<{
14
+ folders: any[];
15
+ total: number;
16
+ }>;
17
+ /**
18
+ * Crear nueva carpeta
19
+ * Maps to: POST /api/folders
20
+ *
21
+ * @param {Object} data - Datos de la carpeta
22
+ * @param {string} data.name - Nombre de la carpeta (requerido)
23
+ * @param {string} data.slug - URL slug (opcional, se auto-genera si se omite)
24
+ * @param {string} data.description - Descripción (opcional)
25
+ * @param {string} data.visibility - public|internal|private (default: public)
26
+ * @returns {Promise<Object>} Carpeta creada
27
+ */
28
+ export function createFolder(data: {
29
+ name: string;
30
+ slug: string;
31
+ description: string;
32
+ visibility: string;
33
+ }): Promise<any>;
34
+ /**
35
+ * Obtener detalles de una carpeta
36
+ * Maps to: GET /api/folders/{id}
37
+ *
38
+ * @param {string} idOrSlug - ID o slug de la carpeta
39
+ * @returns {Promise<Object>} Carpeta con assets_count
40
+ */
41
+ export function getFolder(idOrSlug: string): Promise<any>;
42
+ /**
43
+ * Actualizar carpeta
44
+ * Maps to: PATCH /api/folders/{id}
45
+ *
46
+ * @param {string} idOrSlug - ID o slug de la carpeta
47
+ * @param {Object} data - Datos a actualizar
48
+ * @returns {Promise<Object>} Carpeta actualizada
49
+ */
50
+ export function updateFolder(idOrSlug: string, data: any): Promise<any>;
51
+ /**
52
+ * Eliminar carpeta
53
+ * Maps to: DELETE /api/folders/{id}
54
+ *
55
+ * @param {string} idOrSlug - ID o slug de la carpeta
56
+ * @param {boolean} force - Si true, mueve assets a "sin carpeta". Si false, falla si hay assets.
57
+ * @returns {Promise<Object>} Resultado de eliminación
58
+ */
59
+ export function deleteFolder(idOrSlug: string, force?: boolean): Promise<any>;
60
+ //# sourceMappingURL=foldersApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foldersApi.d.ts","sourceRoot":"","sources":["../../../src/services/foldersApi.js"],"names":[],"mappings":"AAgBA;;;;;;;;GAQG;AACH,qCAJG;IAAuB,UAAU,EAAzB,MAAM;IACU,cAAc,EAA9B,OAAO;CACf,GAAU,OAAO,CAAC;IAAC,OAAO,QAAQ;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC,CAsBpD;AAED;;;;;;;;;;GAUG;AACH,mCANG;IAAqB,IAAI,EAAjB,MAAM;IACO,IAAI,EAAjB,MAAM;IACO,WAAW,EAAxB,MAAM;IACO,UAAU,EAAvB,MAAM;CACd,GAAU,OAAO,KAAQ,CAqB3B;AAED;;;;;;GAMG;AACH,oCAHW,MAAM,GACJ,OAAO,KAAQ,CAe3B;AAED;;;;;;;GAOG;AACH,uCAJW,MAAM,cAEJ,OAAO,KAAQ,CAgB3B;AAED;;;;;;;GAOG;AACH,uCAJW,MAAM,UACN,OAAO,GACL,OAAO,KAAQ,CAgB3B"}
@@ -34,6 +34,18 @@ export function adaptUploadFromV2(v2Response: any): any;
34
34
  * @returns {Object} Formato compatible con component-limbo
35
35
  */
36
36
  export function adaptVariantGenerationFromV2(v2Response: any): any;
37
+ /**
38
+ * Convierte respuesta de lista de carpetas de v2 a formato normalizado
39
+ * @param {Object} v2Response - Respuesta de api-limbo v2
40
+ * @returns {Object} Lista de carpetas normalizada
41
+ */
42
+ export function adaptFoldersListFromV2(v2Response: any): any;
43
+ /**
44
+ * Convierte respuesta de carpeta individual de v2 a formato normalizado
45
+ * @param {Object} v2Response - Respuesta de api-limbo v2
46
+ * @returns {Object} Carpeta normalizada
47
+ */
48
+ export function adaptFolderFromV2(v2Response: any): any;
37
49
  /**
38
50
  * Maneja errores de v2 y los convierte al formato legacy
39
51
  * @param {Error} error - Error de la API v2
@@ -1 +1 @@
1
- {"version":3,"file":"responseAdapters.d.ts","sourceRoot":"","sources":["../../../src/services/responseAdapters.js"],"names":[],"mappings":"AA8DA;;;;GAIG;AACH,uDAsCC;AAED;;;;GAIG;AACH,4DAgDC;AAED;;;;GAIG;AACH,8DAiCC;AAED;;;;GAIG;AACH,8DAkBC;AAED;;;;GAIG;AACH,wDAyCC;AAED;;;;GAIG;AACH,mEAuEC;AAED;;;;GAIG;AACH,wCAHW,KAAK,GACH,KAAK,CAkBjB"}
1
+ {"version":3,"file":"responseAdapters.d.ts","sourceRoot":"","sources":["../../../src/services/responseAdapters.js"],"names":[],"mappings":"AA8DA;;;;GAIG;AACH,uDAsCC;AAED;;;;GAIG;AACH,4DAgDC;AAED;;;;GAIG;AACH,8DAiCC;AAED;;;;GAIG;AACH,8DAkBC;AAED;;;;GAIG;AACH,wDAyCC;AAED;;;;GAIG;AACH,mEAuEC;AAED;;;;GAIG;AACH,6DAqBC;AAED;;;;GAIG;AACH,wDAoBC;AAED;;;;GAIG;AACH,wCAHW,KAAK,GACH,KAAK,CAkBjB"}