@scaleflex/dam-core 0.3.1 → 0.4.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.
@@ -6,6 +6,15 @@ export type FileTypeFilter = 'image' | 'video' | 'audio' | 'document' | 'other';
6
6
  export type SizeBucket = 'small' | 'medium' | 'large' | 'huge';
7
7
  /** "Within the last …" presets for the created/modified date facets. */
8
8
  export type DatePreset = 'today' | 'week' | 'month' | 'year';
9
+ /**
10
+ * User-specified media-duration bounds in **whole seconds**, mapped to a
11
+ * `video_duration:"min..max"` clause. `null` = open-ended on that side; both ends
12
+ * are **inclusive** (unlike the half-open SIZE_BUCKETS, which tile contiguously).
13
+ */
14
+ export interface DurationRange {
15
+ min: number | null;
16
+ max: number | null;
17
+ }
9
18
  export interface GetFilesParams {
10
19
  folder?: string;
11
20
  recursive?: number;
@@ -17,6 +26,8 @@ export interface GetFilesParams {
17
26
  types?: FileTypeFilter[];
18
27
  /** Restrict to a file-size bucket (`size:"min..max"` clause). */
19
28
  sizeBucket?: SizeBucket;
29
+ /** Restrict to a media-duration range in seconds (`video_duration:"min..max"` clause). */
30
+ durationRange?: DurationRange;
20
31
  /** Only assets created within this window (`created>"…"` clause). */
21
32
  createdWithin?: DatePreset;
22
33
  /** Only assets modified within this window (`updated>"…"` clause). */
@@ -35,7 +46,7 @@ export interface FilesPage {
35
46
  export declare function getFilesPage(client: DamClient, params?: GetFilesParams): Promise<FilesPage>;
36
47
  export declare function getFiles(client: DamClient, params?: GetFilesParams): Promise<Asset[]>;
37
48
  /** Subset of the facets that can also be evaluated client-side (favourites). */
38
- export type FacetFilters = Pick<GetFilesParams, 'types' | 'sizeBucket' | 'createdWithin' | 'updatedWithin'>;
49
+ export type FacetFilters = Pick<GetFilesParams, 'types' | 'sizeBucket' | 'durationRange' | 'createdWithin' | 'updatedWithin'>;
39
50
  /**
40
51
  * Does an already-loaded asset satisfy the facet filters? Used for the
41
52
  * Favourites axis, which fetches a known uuid set directly and filters in
@@ -1 +1 @@
1
- {"version":3,"file":"files.service.d.ts","sourceRoot":"","sources":["../../src/api/files.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.service.d.ts","sourceRoot":"","sources":["../../src/api/files.service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  export { DamClient } from './dam-client';
2
2
  export { getFolders, createFolder, renameFolder, deleteFolders, moveFolders, type GetFoldersParams, } from './folders.service';
3
- export { getFiles, getFilesPage, getFilesByUuids, assetMatchesFacets, sortAssets, renameFile, deleteFiles, moveFiles, type GetFilesParams, type FilesPage, type FacetFilters, type FileTypeFilter, type SizeBucket, type DatePreset, } from './files.service';
3
+ export { getFiles, getFilesPage, getFilesByUuids, assetMatchesFacets, sortAssets, renameFile, deleteFiles, moveFiles, type GetFilesParams, type FilesPage, type FacetFilters, type FileTypeFilter, type SizeBucket, type DurationRange, type DatePreset, } from './files.service';
4
4
  export { getLabels, labelFilterQuery } from './labels.service';
5
5
  export { getFileVariations, getPresets, normalizePresets, loadVariations, } from './variations.service';
6
6
  export { createArchive, getArchiveStatus, archiveStatusOutcome, pollArchive, archiveDownloadUrl, createAndPollArchive, type ArchiveTarget, type PollArchiveOptions, } from './archive.service';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACX,KAAK,gBAAgB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,cAAc,GACf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,aAAa,GACnB,MAAM,4BAA4B,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const fe="https://api.filerobot.com",ue=3e4,ve=2,ge=400;function me(s){return s===404||s===408||s===429||s>=500}const pe=s=>new Promise(e=>setTimeout(e,s));function D(s,e){return`${(e||fe).replace(/\/+$/,"")}/${s}`}async function R(s,e,t,i={}){const r=`${D(s,t)}/key/${encodeURIComponent(e)}`,o=i.retries??ve,c=i.retryDelayMs??ge;let a=new Error("SASS key exchange failed");for(let l=0;l<=o;l++){l>0&&await pe(c*l);const h=new AbortController,f=setTimeout(()=>h.abort(),ue);try{const d=await fetch(r,{signal:h.signal,cache:"no-store"});if(clearTimeout(f),!d.ok){if(a=new Error(`SASS key exchange failed (HTTP ${d.status})`),me(d.status)&&l<o)continue;throw a}const u=await d.json();if(u.status==="error")throw new Error(`SASS key exchange failed: ${u.msg||"Unknown error"}`);return u.key}catch(d){if(clearTimeout(f),d instanceof DOMException&&d.name==="AbortError")throw new Error("SASS key exchange timed out");if(d instanceof TypeError&&l<o){a=d;continue}throw d}}throw a}function P(s,e){const t={};switch(s.mode){case"security-template":if(!e)throw new Error("[dam-core] Cannot build auth headers for security-template mode: SASS key exchange has not been performed. Call resolveAuth() first, or use sass-key mode.");t["X-Filerobot-Key"]=e;break;case"sass-key":t["X-Filerobot-Key"]=s.sassKey;break}return s.airboxPuid&&(t["X-Filerobot-Airbox-Puid"]=s.airboxPuid),t}function we(s){return s.mode==="securityTemplate"||s.mode==="sassKey"}function z(s){return we(s)?s.mode==="securityTemplate"?{mode:"security-template",container:s.projectToken,securityTemplateId:s.securityTemplateKey,airboxPuid:s.airboxPuid}:{mode:"sass-key",container:s.projectToken,sassKey:s.sassKey,airboxPuid:s.airboxPuid}:s}async function E(s,e){const t=z(s),i=D(t.container,e);if(t.mode==="security-template"){const r=await R(t.container,t.securityTemplateId,e);return{apiBase:i,headers:P(t,r),sassKey:r}}return{apiBase:i,headers:P(t)}}const ye=3e4;class k{constructor(e,t,i){this.baseUrl=`${e.apiBase}/v5`,this.headers=e.headers,this.auth=t,this.apiDomain=i}static async create(e,t){const i=await E(e,t);return new k(i,e,t)}get(e,t){const i=new URL(`${this.baseUrl}${e}`);if(t)for(const[r,o]of Object.entries(t))o!=null&&i.searchParams.set(r,Array.isArray(o)?o.join(","):String(o));return this.send(i,{method:"GET"})}post(e,t){return this.sendJson("POST",e,t)}put(e,t){return this.sendJson("PUT",e,t)}delete(e,t){return this.sendJson("DELETE",e,t)}absoluteUrl(e){return`${this.baseUrl}${e}`}get authKey(){return this.headers["X-Filerobot-Key"]}sendJson(e,t,i){return this.send(new URL(`${this.baseUrl}${t}`),{method:e,headers:{"Content-Type":"application/json"},body:i===void 0?void 0:JSON.stringify(i)})}async send(e,t,i=!1){var c;const r=new AbortController,o=setTimeout(()=>r.abort(),ye);try{const a=await fetch(e.toString(),{...t,headers:{...this.headers,...t.headers},signal:r.signal});if(clearTimeout(o),a.status===401&&!i&&((c=this.auth)==null?void 0:c.mode)==="security-template"){const f=await E(this.auth,this.apiDomain);return this.headers=f.headers,this.send(e,t,!0)}if(!a.ok){let f=`API error: ${a.status} ${a.statusText}`;try{const d=await a.json();d!=null&&d.msg&&(f=`API error: ${a.status} - ${d.msg}`)}catch{}throw new Error(f)}if(a.status===204)return;const l=await a.text();if(!l)return;const h=JSON.parse(l);if((h==null?void 0:h.status)==="error")throw new Error(`API error: ${h.msg||"Unknown error"}`);return h}catch(a){throw clearTimeout(o),a instanceof DOMException&&a.name==="AbortError"?new Error("API request timed out"):a}}}function Se(s){const e=s.path??s.name,t=e.replace(/\/[^/]*$/,"")||"/";return{uuid:s.uuid,name:s.name.split("/").pop()||s.name,path:e,parentPath:t,createdAt:s.created_at,modifiedAt:s.modified_at}}async function y(s,e={}){const t=e.sortBy??"name",i=e.sortDirection??"asc";return((await s.get("/folders",{folder:e.folderPath??"/",recursive:e.recursive??0,limit:e.limit??1e3,offset:e.offset??0,q:e.q,sort:`${t}:${i}`})).folders??[]).map(Se)}async function L(s,e,t){const i=t.replace(/\/+$/,""),r=i?`${i}/${e}`:`/${e}`,o=await s.post("/folders",{name:r});if(o.status!=="success")throw new Error(o.msg||"Failed to create folder")}async function q(s,e,t){const i=await s.put(`/folder/${encodeURIComponent(e)}/name`,{name:t});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to rename folder")}async function j(s,e){const t=await s.delete("/folders",{folders_uuids:e});if((t==null?void 0:t.status)==="error")throw new Error(t.msg||"Failed to delete folders")}async function B(s,e,t){const i=await s.post("/folders",{folders_uuids:e,new_folder_name:t});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to move folders")}const N={small:[null,1048576],medium:[1048576,10485760],large:[10485760,104857600],huge:[104857600,null]},be={today:0,week:7,month:30,year:365};function b(s,e){const t=new Date(e);return t.setUTCHours(0,0,0,0),t.setUTCDate(t.getUTCDate()-be[s]),t}const G=["cdn_permalink"],T={},p=(s,e)=>e.split(" ").forEach(t=>T[t]=s);p("image","jpg jpeg png gif webp svg avif bmp tif tiff heic ico");p("video","mp4 webm mov m4v avi mkv ogv");p("audio","mp3 wav ogg oga m4a aac flac");p("document","pdf doc docx xls xlsx ppt pptx txt csv rtf md");p("model","glb gltf obj fbx stl usdz ply 3ds dae");function Fe(s){const e=(s.name.split(".").pop()||"").toLowerCase();if(T[e]==="model")return"model";const t=(s.file_type||s.type||"").toLowerCase();return t.startsWith("image")?"image":t.startsWith("video")?"video":t.startsWith("audio")?"audio":t.includes("pdf")||t.includes("document")||t.includes("text")?"document":T[e]??"other"}function V(s){var e,t,i,r,o;return{uuid:s.uuid,name:s.name,folder:s.folder??"/",type:Fe(s),fileType:s.file_type??s.type,cdnUrl:s.cdn_permalink??s.cdn_url,thumbnailUrl:((e=s.info)==null?void 0:e.video_thumbnail)??((t=s.info)==null?void 0:t.image_thumbnail)??((i=s.info)==null?void 0:i.thumbnail)??((r=s.info)==null?void 0:r.preview),size:typeof s.size=="object"?(o=s.size)==null?void 0:o.bytes:s.size,width:s.width,height:s.height,createdAt:s.created_at,modifiedAt:s.modified_at}}function _e(s){var c;const e=s.fields??G,t=s.sortBy??"created_at",i=s.sortDirection??"desc",r=[];if(s.search&&r.push(s.search),s.q&&r.push(s.q),(c=s.types)!=null&&c.length&&r.push(`type:${s.types.map(a=>`"${a}"`).join(",")}`),s.sizeBucket){const[a,l]=N[s.sizeBucket];r.push(`size:"${a??""}..${l??""}"`)}const o=Date.now();return s.createdWithin&&r.push(`created>"${b(s.createdWithin,o).toISOString()}"`),s.updatedWithin&&r.push(`updated>"${b(s.updatedWithin,o).toISOString()}"`),{offset:s.offset??0,limit:s.limit??100,format:"json,regvar:api,select:internal",preview:2301,recursive:s.recursive??1,fields:e.length?e:void 0,sort:`${t}:${i}`,folder:s.folder,q:r.length?r.join(" "):void 0}}async function m(s,e={}){const t=_e(e),i=await s.get("/files",t),r=(i.files??[]).map(V),o=typeof i.total=="number"?i.total:i.count??r.length;return{assets:r,total:o}}async function Ae(s,e={}){return(await m(s,e)).assets}const Pe={image:"image",video:"video",audio:"audio",document:"document",model:"other",archive:"other",font:"other",other:"other"};function W(s,e,t){var i;if((i=e.types)!=null&&i.length&&!e.types.includes(Pe[s.type]))return!1;if(e.sizeBucket){const[r,o]=N[e.sizeBucket];if(s.size==null||r!=null&&s.size<r||o!=null&&s.size>=o)return!1}return!(e.createdWithin&&!((s.createdAt?Date.parse(s.createdAt):NaN)>=b(e.createdWithin,t).getTime())||e.updatedWithin&&!((s.modifiedAt?Date.parse(s.modifiedAt):NaN)>=b(e.updatedWithin,t).getTime()))}function X(s,e,t){const i=t==="asc"?1:-1,r=o=>{var c;switch(e){case"name":return((c=o.name)==null?void 0:c.toLowerCase())??"";case"size":return o.size??0;case"type":return o.type;case"modified_at":return o.modifiedAt?Date.parse(o.modifiedAt):0;default:return o.createdAt?Date.parse(o.createdAt):0}};return[...s].sort((o,c)=>{const a=r(o),l=r(c);return a<l?-i:a>l?i:0})}async function J(s,e,t={}){const i=t.fields??G,r=new Array(e.length);let o=0;const c=async()=>{for(;o<e.length;){const l=o++;try{const h=await s.get(`/file/${encodeURIComponent(e[l])}`,{format:"json,regvar:api,select:internal",preview:2301,fields:i.length?i:void 0});h!=null&&h.file&&(r[l]=V(h.file))}catch{}}},a=Math.min(t.concurrency??8,e.length);return await Promise.all(Array.from({length:a},c)),r.filter(l=>l!==void 0)}async function H(s,e,t){const i=await s.put(`/file/${encodeURIComponent(e)}/name`,{name:t});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to rename file")}async function K(s,e){const t=await s.delete("/files",{files_uuids:e});if((t==null?void 0:t.status)==="error")throw new Error(t.msg||"Failed to delete files")}async function Z(s,e,t){const i=await s.post("/files",{files_uuids:e,new_folder_name:t});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to move files")}async function Y(s){return(await s.get("/labels")).labels??[]}function Q(s){if(s.sid)return`labels:${s.sid.replace(/^#/,"")}`}function I(s,e){try{const t=new URL(s);return t.searchParams.set("p",e),t.toString()}catch{return s}}function U(s){var e,t,i,r,o;return{uuid:s.uuid,name:s.name,url:s.url,previewUrl:s.preview??s.url,width:(e=s.info)==null?void 0:e.img_w,height:(t=s.info)==null?void 0:t.img_h,size:(i=s.info)==null?void 0:i.size,format:(r=s.info)==null?void 0:r.img_type,isOriginal:!1,isPreset:!1,bgRemoved:((o=s.info)==null?void 0:o.remove_background)===!0}}function Ee(s){return{uuid:s.uuid,name:s.name,url:s.cdnUrl??"",previewUrl:s.thumbnailUrl??s.cdnUrl,width:s.width,height:s.height,size:s.size,format:s.fileType,isOriginal:!0,isPreset:!1,bgRemoved:!1}}function Te(s,e){const t=s.cdnUrl??"";return{uuid:`preset-${e.name}`,name:e.name,url:I(t,e.name),previewUrl:I(s.thumbnailUrl??t,e.name),isOriginal:!1,isPreset:!0,bgRemoved:!1}}function ee({asset:s,variants:e=[],presets:t=[]}){const i=new Set(t.map(a=>a.name)),r=e.filter(a=>{var l;return!i.has(a.name)&&((l=a.info)==null?void 0:l.remove_background)!==!0}).map(U),o=e.filter(a=>{var l;return((l=a.info)==null?void 0:l.remove_background)===!0&&!i.has(a.name)}).map(U),c=t.map(a=>Te(s,a));return[Ee(s),...r,...o,...c]}async function te(s,e){const t=await s.get(`/file/${encodeURIComponent(e)}/variants`);return(t==null?void 0:t.variants)??[]}function se(s){return Array.isArray(s)?s.map(e=>typeof e=="string"?{name:e}:e&&typeof e.name=="string"?{name:e.name,desc:e.desc}:null).filter(e=>e!==null):[]}async function ie(s){var i,r,o;const e=await s.get("/settings"),t=(e==null?void 0:e.presets)??((i=e==null?void 0:e.cloudimg)==null?void 0:i.presets)??((o=(r=e==null?void 0:e.settings)==null?void 0:r.cloudimg)==null?void 0:o.presets)??void 0;return se(t)}async function Ie(s,e){const[t,i]=await Promise.all([te(s,e.uuid),ie(s)]);return ee({asset:e,variants:t,presets:i})}async function re(s,e){const t=await s.post("/file-archive",{files_uuids:e.filesUuids??[],folders_uuids:e.foldersUuids??[],urls:e.urls??[]});if(!(t!=null&&t.task_id))throw new Error("Archive task was not created");return t.task_id}function ne(s,e){return s.get(`/file-archive/${encodeURIComponent(e)}`,{status_only:1})}const Ue=new Set(["PENDING","RUNNING","PROCESSING",""]);function oe(s){const e=((s==null?void 0:s.task_status)??"").toUpperCase(),t=typeof(s==null?void 0:s.task_percent)=="number"?s.task_percent:0;if(e==="DONE")return{done:!0,progress:100};if(Ue.has(e))return{done:!1,progress:t};throw new Error(`Archive job failed: ${(s==null?void 0:s.task_status)??"unknown status"}`)}async function ae(s,e,t={}){var f,d;const i=t.intervalMs??1500,r=t.timeoutMs??12e4,o=t.maxRetries??5,c=t.sleep??(u=>new Promise(g=>setTimeout(g,u))),a=t.now??Date.now,l=a()+r;let h=0;for(;;){if((f=t.signal)!=null&&f.aborted)throw new Error("Archive polling aborted");if(a()>l)throw new Error("Archive polling timed out");let u;try{u=await ne(s,e)}catch(_){if(h++<o){await c(i);continue}throw _}const{done:g,progress:w}=oe(u);if((d=t.onProgress)==null||d.call(t,w),g)return;await c(i)}}function le(s,e){const t=s.absoluteUrl(`/file-archive/${encodeURIComponent(e)}`),i=s.authKey;if(!i)return t;const r=t.includes("?")?"&":"?";return`${t}${r}secret_key=${encodeURIComponent(i)}`}async function $e(s,e,t={}){const i=await re(s,e);return await ae(s,i,t),le(s,i)}const xe=["cdn_permalink"],ce={created_at:"created_at",modified_at:"modified_at",name:"name",size:"size",type:"type"};function Ce(s){let e=s.fields??xe;s.permalinksEnabled||(e=e.filter(c=>c!=="cdn_permalink"));const t={offset:s.offset??0,limit:s.limit??100,format:"json,regvar:api,select:internal",preview:2301,recursive:s.recursive??1};e.length>0&&(t.fields=e);const i=s.sort_by??"created_at",r=s.sort_direction??"desc";t.sort=`${ce[i]||i}:${r}`,s.folder&&(t.folder=s.folder);const o=[];return s.search&&!s.with_ai&&o.push(s.search),s.q&&o.push(s.q),o.length>0&&(t.q=o.join(" ")),s.with_ai&&(t.with_ai=!0,s.ai_query&&(t.ai_query=s.ai_query),s.ai_lang&&(t.ai_lang=s.ai_lang)),s.collection_uuid&&(t.collection_uuid=s.collection_uuid),s.f64&&(t.f64=s.f64),t}function De(s,e){return s.get("/files",Ce(e))}function ke(s,e){const t={recursive:e.recursive??1};e.folder&&(t.folder=e.folder);const i=[];return e.search&&!e.with_ai&&i.push(e.search),e.q&&i.push(e.q),i.length>0&&(t.q=i.join(" ")),e.with_ai&&(t.with_ai=!0,e.ai_query&&(t.ai_query=e.ai_query),e.ai_lang&&(t.ai_lang=e.ai_lang)),e.collection_uuid&&(t.collection_uuid=e.collection_uuid),e.f64&&(t.f64=e.f64),s.get("/files/stats",t)}function Me(s,e={}){const t={recursive:e.recursive??0,folder:e.folderPath??"/",limit:e.limit??1e3,offset:e.offset??0};e.q&&(t.q=e.q);const i=e.sort_by??"created_at",r=e.sort_direction??"asc";return t.sort=`${ce[i]||i}:${r}`,s.get("/folders",t)}async function Oe(s,e){return e.length===0?{}:(await s.post("/folders/previews",{folders:e})).folders||{}}const $=100,x=1e3,M={types:[],size:null,created:null,updated:null};class F{constructor(e,t={}){this.client=e,this.listeners=new Set,this.loadSeq=0,this.treeSeq=0,this.fetchedCount=0,this.selectionAnchor=null,this.favAdapter=t.favourites,this.onScopeChange=t.onScopeChange,this.state={scope:{type:"folder",value:t.rootFolder??"/"},viewMode:t.viewMode??"grid",gridSize:t.gridSize??"m",sortBy:t.sortBy??"created_at",sortDirection:t.sortDirection??"desc",searchQuery:"",filters:{...M},folders:[],labels:[],assets:[],total:0,truncated:!1,hasMore:!1,loadingMore:!1,treeChildren:{},expandedFolders:new Set,selection:new Set,favourites:new Set,loading:!1,error:null}}async init(){await Promise.all([this.loadLabels(),this.loadFavourites(),this.loadFolderChildren("/")]),await this.load()}async loadFolderChildren(e){if(!this.state.treeChildren[e])try{const t=await y(this.client,{folderPath:e});this.set({treeChildren:{...this.state.treeChildren,[e]:t}})}catch{}}async toggleFolder(e){const t=new Set(this.state.expandedFolders);t.has(e)?(t.delete(e),this.set({expandedFolders:t})):(await this.loadFolderChildren(e),t.add(e),this.set({expandedFolders:t}))}async loadLabels(){try{this.set({labels:await Y(this.client)})}catch{}}async loadFavourites(){if(this.favAdapter)try{this.set({favourites:new Set(await this.favAdapter.list())})}catch{}}async toggleFavourite(e){const t=this.state.favourites.has(e),i=new Set(this.state.favourites);t?i.delete(e):i.add(e),this.set({favourites:i});try{this.favAdapter&&(t?await this.favAdapter.remove(e):await this.favAdapter.add(e))}catch{const r=new Set(this.state.favourites);t?r.add(e):r.delete(e),this.set({favourites:r});return}this.state.scope.type==="favourites"&&this.load()}getState(){return this.state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}set(e){this.state={...this.state,...e};for(const t of this.listeners)t(this.state)}setScope(e){var t;this.selectionAnchor=null,this.set({scope:e,selection:new Set}),(t=this.onScopeChange)==null||t.call(this,e),this.load()}openFolder(e){this.setScope({type:"folder",value:e})}openLabel(e){this.setScope({type:"label",value:e})}openFavourites(){this.setScope({type:"favourites"})}setViewMode(e){this.set({viewMode:e})}setGridSize(e){this.set({gridSize:e})}setSort(e,t){this.set({sortBy:e,sortDirection:t}),this.load()}setSearch(e){this.set({searchQuery:e}),this.load()}setFilters(e){this.set({filters:{...this.state.filters,...e}}),this.load()}toggleType(e){const t=this.state.filters.types;this.setFilters({types:t.includes(e)?t.filter(i=>i!==e):[...t,e]})}get activeFilterCount(){const{types:e,size:t,created:i,updated:r}=this.state.filters;return e.length+(t?1:0)+(i?1:0)+(r?1:0)}clearFilters(){this.activeFilterCount&&(this.set({filters:{...M}}),this.load())}toggleSelect(e,t=!1){const i=new Set(t?this.state.selection:[]),r=!i.has(e);r?i.add(e):i.delete(e),r&&(this.selectionAnchor=e),this.set({selection:i})}selectRange(e){const t=this.state.assets,i=t.findIndex(l=>l.uuid===e);if(i<0)return;const r=this.selectionAnchor!=null?t.findIndex(l=>l.uuid===this.selectionAnchor):-1;if(r<0){this.toggleSelect(e,!0);return}const[o,c]=r<=i?[r,i]:[i,r],a=new Set(this.state.selection);for(let l=o;l<=c;l++)a.add(t[l].uuid);this.set({selection:a})}setSelection(e){const t=new Set(e);let i=null;for(const r of t)i=r;this.selectionAnchor=i,this.set({selection:t})}clearSelection(){this.selectionAnchor=null,this.set({selection:new Set})}get currentFolderPath(){return this.state.scope.type==="folder"?this.state.scope.value??"/":"/"}async refreshTree(){const e=++this.treeSeq,t=new Set(["/",this.currentFolderPath,...this.state.expandedFolders]),i={};await Promise.all([...t].map(async r=>{try{i[r]=await y(this.client,{folderPath:r})}catch{}})),e===this.treeSeq&&this.set({treeChildren:{...this.state.treeChildren,...i}})}static parentOf(e){return e.replace(/\/[^/]*$/,"")||"/"}findFolderPath(e){return this.folderPath(e)}folderPath(e){for(const t of[this.state.folders,...Object.values(this.state.treeChildren)]){const i=t.find(r=>r.uuid===e);if(i)return i.path}}redirectScope(e,t){const{scope:i}=this.state;if(i.type!=="folder"||!i.value)return!1;const r=i.value;return r!==e&&!r.startsWith(e+"/")?!1:(t===null?this.openFolder(F.parentOf(e)):this.openFolder(r===e?t:t+r.slice(e.length)),!0)}async createFolder(e){await L(this.client,e,this.currentFolderPath),await this.refreshTree(),await this.load()}async renameFolderById(e,t){const i=this.folderPath(e);await q(this.client,e,t),await this.refreshTree();const r=i?`${F.parentOf(i).replace(/\/$/,"")}/${t}`:null;i&&r&&this.redirectScope(i,r)||await this.load()}async deleteFolderById(e){const t=this.folderPath(e);await j(this.client,[e]),await this.refreshTree(),t&&this.redirectScope(t,null)||await this.load()}async moveFolderById(e,t){const i=this.folderPath(e);await B(this.client,[e],t),await this.refreshTree();const r=(i==null?void 0:i.split("/").pop())??"",o=i?`${t.replace(/\/$/,"")}/${r}`:null;i&&o&&this.redirectScope(i,o)||await this.load()}async renameAsset(e,t){await H(this.client,e,t),await this.load()}async deleteAssets(e){await K(this.client,e),this.clearSelection(),await this.load()}async moveAssets(e,t){await Z(this.client,e,t),this.clearSelection(),await this.load()}facetParams(){const{types:e,size:t,created:i,updated:r}=this.state.filters;return{types:e.length?e:void 0,sizeBucket:t??void 0,createdWithin:i??void 0,updatedWithin:r??void 0}}async fetchAssetsPage(e){const{scope:t,sortBy:i,sortDirection:r}=this.state,o=this.state.searchQuery||void 0,c=this.facetParams();if(t.type==="favourites"){const f=[...this.state.favourites],d=await J(this.client,f.slice(0,x)),u=Date.now(),g=d.filter(_=>W(_,c,u)),w=X(g,i,r);return{assets:w,total:w.length,truncated:f.length>x,hasMore:!1,fetched:0}}const a={sortBy:i,sortDirection:r,search:o,...c,offset:e,limit:$};let l;if(t.type==="folder")l=await m(this.client,{...a,folder:t.value??"/",recursive:0});else if(t.type==="label"){const f=this.state.labels.find(u=>u.uuid===t.value),d=f?Q(f):void 0;l=await m(this.client,{...a,recursive:1,q:d})}else l=await m(this.client,{...a,recursive:1});const h=l.assets.length===$;return{assets:l.assets,total:l.total,truncated:!1,hasMore:h,fetched:l.assets.length}}async load(){const e=++this.loadSeq;this.set({loading:!0,loadingMore:!1,error:null});try{const t=y(this.client,{folderPath:this.currentFolderPath}),i=this.fetchAssetsPage(0),[r,o]=await Promise.all([t,i]);if(e!==this.loadSeq)return;this.fetchedCount=o.fetched,this.set({folders:r,assets:o.assets,total:o.total,truncated:o.truncated,hasMore:o.hasMore,loading:!1,treeChildren:{...this.state.treeChildren,[this.currentFolderPath]:r}})}catch(t){if(e!==this.loadSeq)return;this.set({error:t instanceof Error?t.message:String(t),loading:!1})}}async loadMore(){if(this.state.loading||this.state.loadingMore||!this.state.hasMore)return;const e=this.loadSeq;this.set({loadingMore:!0});try{const t=await this.fetchAssetsPage(this.fetchedCount);if(e!==this.loadSeq)return;this.fetchedCount+=t.fetched;const i=new Set(this.state.assets.map(o=>o.uuid)),r=t.assets.filter(o=>!i.has(o.uuid));this.set({assets:[...this.state.assets,...r],total:t.total,hasMore:t.hasMore,loadingMore:!1,error:null})}catch(t){if(e!==this.loadSeq)return;this.set({error:t instanceof Error?t.message:String(t),loadingMore:!1})}}}class Re{constructor(e="sfx-light-dam:favourites"){this.key=e}read(){try{const e=localStorage.getItem(this.key);return new Set(e?JSON.parse(e):[])}catch{return new Set}}write(e){try{localStorage.setItem(this.key,JSON.stringify([...e]))}catch{}}list(){return[...this.read()]}has(e){return this.read().has(e)}add(e){const t=this.read();t.add(e),this.write(t)}remove(e){const t=this.read();t.delete(e),this.write(t)}}function ze(s,e){const t=new URL(s);return e.width&&t.searchParams.set("w",String(e.width)),e.height&&t.searchParams.set("h",String(e.height)),e.quality!==void 0&&t.searchParams.set("q",String(e.quality)),t.toString()}const Le={excellent:90,good:75,fair:60},qe={fullhd:1920,large:1200,medium:600,small:300},je={webp:"awebp,webp",gif:"agif,gif"};function de(s,e){s.searchParams.delete("download"),e.width&&s.searchParams.set("w",String(e.width)),e.height&&s.searchParams.set("h",String(e.height)),e.quality!=null&&s.searchParams.set("q",String(e.quality)),e.format&&s.searchParams.set("force_format",je[e.format]??e.format),e.strictSizes!==void 0&&(e.width||e.height)&&s.searchParams.set("func",e.strictSizes?"bound":"cover")}function he(s,e){if(!e)return s;const t=e==="jpeg"?"jpg":e;return`${s.replace(/\.[^./\\]+$/,"")||s}.${t}`}function Be(s,e,t={}){const i=new URL(s);return de(i,t),i.searchParams.set("force_download",he(e,t.format)),i.toString()}function Ne(s,e={}){const t=new URL(s);return de(t,e),t.toString()}const O=/^(https:\/\/)([a-z0-9_-]+)\.filerobot\.com\/(?:v\d+\/)?/i;function S(s){if(!s)return"";const e=i=>i.replace(/(\.filerobot\.com\/[a-z0-9_-]+)\/v\d+\//i,"$1/");if(s.includes("assets.filerobot.com"))return e(s);const t=s.match(O);return t?e(s.replace(O,`$1assets.filerobot.com/${t[2]}/`)):s}function A(s,e){try{const t=new URL(s);for(const[i,r]of Object.entries(e))t.searchParams.set(i,r);return t.toString()}catch{return s}}function Ge(s,e=240){const t=String(e);if(s.type==="video")return s.thumbnailUrl?A(S(s.thumbnailUrl),{w:t,force_format:"webp,jpeg"}):"";if(s.type==="document"&&/\.pdf$/i.test(s.name)){const i=S(s.cdnUrl??"");if(!i)return"";const r=i.replace(/([?&])func=proxy&?/,"$1").replace(/[?&]$/,"");return A(r,{w:t,force_format:"webp,jpeg",doc_page:"1",bypass_process_proxy:"1"})}if(s.type==="image"||s.thumbnailUrl){const i=s.thumbnailUrl??s.cdnUrl;return i?A(S(i),{w:t,func:"bound"}):""}return""}const n="https://scaleflex.cloudimg.io/v7/assets/file-types/v3/",Ve='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none"><path d="M24 4 42 14v20L24 44 6 34V14z" fill="#eef2ff" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/><path d="M24 4 42 14 24 24 6 14z" fill="#c7d2fe" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/><path d="M24 24v20M24 24 6 14M24 24 42 14" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/></svg>',v=`data:image/svg+xml,${encodeURIComponent(Ve)}`,C={_default:n+"GENERIC.svg?vh=9a518a",png:n+"PNG.svg?vh=96cd9a",jpg:n+"JPG.svg?vh=06e819",jpg2:n+"JPG2.svg?vh=f0eb7f",jpeg:n+"JPEG.svg?vh=6a65e9",gif:n+"GIF.svg?vh=c3c2c3",bmp:n+"BMP.svg?vh=d2243a",webp:n+"WEBP.svg?vh=fedd74",svg:n+"SVG.svg?vh=a15e46",tiff:n+"TIFF.svg?vh=1f30c3",tif:n+"TIF.svg?vh=b383c9",heic:n+"HEIC.svg?vh=84adfe",avif:n+"AVIF.svg?vh=536b30",ico:n+"ICO.svg?vh=79063d",psd:n+"PSD.svg?vh=be6140",psb:n+"PSB.svg?vh=678646",ai:n+"AI.svg?vh=84b254",dwg:n+"DWG.svg?vh=971fb3",mp4:n+"MP4.svg?vh=42f175",webm:n+"WEBM.svg?vh=26a84a",avi:n+"AVI.svg?vh=d22ba8",mpeg:n+"MPEG.svg?vh=ba93bb",ogv:n+"OGV.svg?vh=74d453","3gp":n+"3GP.svg?vh=f0d388","3g2":n+"3G2.svg?vh=04c652",swf:n+"SWF.svg?vh=3955e2",fla:n+"FLA.svg?vh=daf585",m3u8:n+"M3U8.svg?vh=7d5e62",mp3:n+"MP3.svg?vh=66bbef",wav:n+"WAV.svg?vh=d7a7d5",aac:n+"AAC.svg?vh=07f3f9",oga:n+"OGA.svg?vh=a5c622",opus:n+"OPUS.svg?vh=9548b1",weba:n+"WEBA.svg?vh=4dcf70",mid:n+"MID.svg?vh=3f0e29",midi:n+"MIDI.svg?vh=9fedec",cda:n+"CDA.svg?vh=85b83b",pdf:n+"PDF.svg?vh=18c5f7",doc:n+"DOC.svg?vh=d1b47c",docx:n+"DOCX.svg?vh=1eb6b0",txt:n+"TXT.svg?vh=307979",rtf:n+"RTF.svg?vh=978c5f",xls:n+"XLS.svg?vh=13b5f7",xlsx:n+"XLSX.svg?vh=79d64a",ppt:n+"PPT.svg?vh=4ee29b",pptx:n+"PPTX.svg?vh=8b1568",csv:n+"CSV.svg?vh=4add78",odt:n+"ODT.svg?vh=940781",ods:n+"ODS.svg?vh=9fbe9a",odp:n+"ODP.svg?vh=bf892d",dbf:n+"DBF.svg?vh=457bd4",vsd:n+"VSD.svg?vh=8a9ccb",abw:n+"ABW.svg?vh=313dc7",epub:n+"EPUB.svg?vh=15263d",azw:n+"AZW.svg?vh=a018b1",ics:n+"ICS.svg?vh=909f63",ogx:n+"OGX.svg?vh=f694d2",zip:n+"ZIP.svg?vh=84f98b",rar:n+"RAR.svg?vh=1d6423","7z":n+"7Z.svg?vh=e007e5",tar:n+"TAR.svg?vh=603aed",gz:n+"GZ.svg?vh=de13f7",bz:n+"BZ.svg?vh=0374ff",bz2:n+"BZ2.svg?vh=e14294",arc:n+"ARC.svg?vh=942fad",jar:n+"JAR.svg?vh=149796",mpkg:n+"MPKG.svg?vh=dea655",ttf:n+"TTF.svg?vh=d2e2c1",otf:n+"OTF.svg?vh=c904fd",woff:n+"WOFF.svg?vh=4b8177",woff2:n+"WOFF2.svg?vh=b532d3",eot:n+"EOT.svg?vh=a54980",js:n+"JS.svg?vh=524691",mjs:n+"MJS.svg?vh=d57921",ts:n+"TS.svg?vh=9af3ae",css:n+"CSS.svg?vh=287863",html:n+"HTML.svg?vh=fa7a87",htm:n+"HTM.svg?vh=21323d",xhtml:n+"XHTML.svg?vh=e6d6a9",xul:n+"XUL.svg?vh=6c9c71",json:n+"JSON.svg?vh=104c9e",jsonld:n+"JSONLD.svg?vh=f30c0f",xml:n+"XML.svg?vh=7f7194",php:n+"PHP.svg?vh=503e36",sh:n+"SH.svg?vh=3b820e",csh:n+"CSH.svg?vh=08c0cc",exe:n+"EXE.svg?vh=ccca53",iso:n+"ISO.svg?vh=064b8f",bin:n+"BIN.svg?vh=1e9618",glb:v,gltf:v,obj:v,fbx:v,stl:v,usdz:v,ply:v,"3ds":v,dae:v};function We(){return C._default}function Xe(s){const e=(s.split(".").pop()||"").toLowerCase();return C[e]||C._default}function Je(s){if(s==null||!Number.isFinite(s)||s<0)return"—";const e=["B","KB","MB","GB","TB"];let t=s,i=0;for(;t>=1024&&i<e.length-1;)t/=1024,i++;const r=(a,l)=>{const h=l>0&&Math.round(a*10)/10<10?1:0,f=a.toFixed(h);return{str:f,rounded:Number(f)}},o=r(t,i);let c=o.str;return o.rounded>=1024&&i<e.length-1&&(t/=1024,i++,c=r(t,i).str),`${c} ${e[i]}`}function He(s){if(!s)return"—";const e=new Date(s);return Number.isNaN(e.getTime())?s:e.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function Ke(s,e){return s&&e?`${s} × ${e}`:"—"}function Ze(s,e){let t;const i=((...r)=>{clearTimeout(t),t=setTimeout(()=>s(...r),e)});return i.cancel=()=>clearTimeout(t),i}exports.BrowseStore=F;exports.DamClient=k;exports.LocalFavouritesAdapter=Re;exports.MAX_FAVOURITES=x;exports.PAGE_SIZE=$;exports.QUALITY_LEVELS=Le;exports.RESIZE_PRESETS=qe;exports.addCdnParams=ze;exports.archiveDownloadUrl=le;exports.archiveStatusOutcome=oe;exports.assembleVariations=ee;exports.assetMatchesFacets=W;exports.buildAuthHeaders=P;exports.buildEmbedUrl=Ne;exports.buildTransformedDownloadUrl=Be;exports.createAndPollArchive=$e;exports.createArchive=re;exports.createFolder=L;exports.debounce=Ze;exports.deleteFiles=K;exports.deleteFolders=j;exports.exchangeSassKey=R;exports.formatDate=He;exports.formatDimensions=Ke;exports.formatFileSize=Je;exports.getApiBase=D;exports.getArchiveStatus=ne;exports.getDefaultFileTypeIconUrl=We;exports.getFileTypeIconUrl=Xe;exports.getFileVariations=te;exports.getFiles=Ae;exports.getFilesByUuids=J;exports.getFilesPage=m;exports.getFilesRaw=De;exports.getFilesStats=ke;exports.getFolderPreviews=Oe;exports.getFolders=y;exports.getFoldersRaw=Me;exports.getFormattedPreviewUrl=S;exports.getLabels=Y;exports.getPresets=ie;exports.getThumbnailUrl=Ge;exports.labelFilterQuery=Q;exports.loadVariations=Ie;exports.moveFiles=Z;exports.moveFolders=B;exports.normalizeAuth=z;exports.normalizePresets=se;exports.normalizeVariation=U;exports.pollArchive=ae;exports.presetUrl=I;exports.renameFile=H;exports.renameFolder=q;exports.resolveAuth=E;exports.sortAssets=X;exports.transformedFileName=he;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const fe="https://api.filerobot.com",ue=3e4,ve=2,ge=400;function me(t){return t===404||t===408||t===429||t>=500}const pe=t=>new Promise(e=>setTimeout(e,t));function D(t,e){return`${(e||fe).replace(/\/+$/,"")}/${t}`}async function O(t,e,s,i={}){const r=`${D(t,s)}/key/${encodeURIComponent(e)}`,o=i.retries??ve,c=i.retryDelayMs??ge;let a=new Error("SASS key exchange failed");for(let l=0;l<=o;l++){l>0&&await pe(c*l);const f=new AbortController,h=setTimeout(()=>f.abort(),ue);try{const d=await fetch(r,{signal:f.signal,cache:"no-store"});if(clearTimeout(h),!d.ok){if(a=new Error(`SASS key exchange failed (HTTP ${d.status})`),me(d.status)&&l<o)continue;throw a}const u=await d.json();if(u.status==="error")throw new Error(`SASS key exchange failed: ${u.msg||"Unknown error"}`);return u.key}catch(d){if(clearTimeout(h),d instanceof DOMException&&d.name==="AbortError")throw new Error("SASS key exchange timed out");if(d instanceof TypeError&&l<o){a=d;continue}throw d}}throw a}function P(t,e){const s={};switch(t.mode){case"security-template":if(!e)throw new Error("[dam-core] Cannot build auth headers for security-template mode: SASS key exchange has not been performed. Call resolveAuth() first, or use sass-key mode.");s["X-Filerobot-Key"]=e;break;case"sass-key":s["X-Filerobot-Key"]=t.sassKey;break}return t.airboxPuid&&(s["X-Filerobot-Airbox-Puid"]=t.airboxPuid),s}function we(t){return t.mode==="securityTemplate"||t.mode==="sassKey"}function z(t){return we(t)?t.mode==="securityTemplate"?{mode:"security-template",container:t.projectToken,securityTemplateId:t.securityTemplateKey,airboxPuid:t.airboxPuid}:{mode:"sass-key",container:t.projectToken,sassKey:t.sassKey,airboxPuid:t.airboxPuid}:t}async function E(t,e){const s=z(t),i=D(s.container,e);if(s.mode==="security-template"){const r=await O(s.container,s.securityTemplateId,e);return{apiBase:i,headers:P(s,r),sassKey:r}}return{apiBase:i,headers:P(s)}}const ye=3e4;class k{constructor(e,s,i){this.baseUrl=`${e.apiBase}/v5`,this.headers=e.headers,this.auth=s,this.apiDomain=i}static async create(e,s){const i=await E(e,s);return new k(i,e,s)}get(e,s){const i=new URL(`${this.baseUrl}${e}`);if(s)for(const[r,o]of Object.entries(s))o!=null&&i.searchParams.set(r,Array.isArray(o)?o.join(","):String(o));return this.send(i,{method:"GET"})}post(e,s){return this.sendJson("POST",e,s)}put(e,s){return this.sendJson("PUT",e,s)}delete(e,s){return this.sendJson("DELETE",e,s)}absoluteUrl(e){return`${this.baseUrl}${e}`}get authKey(){return this.headers["X-Filerobot-Key"]}sendJson(e,s,i){return this.send(new URL(`${this.baseUrl}${s}`),{method:e,headers:{"Content-Type":"application/json"},body:i===void 0?void 0:JSON.stringify(i)})}async send(e,s,i=!1){var c;const r=new AbortController,o=setTimeout(()=>r.abort(),ye);try{const a=await fetch(e.toString(),{...s,headers:{...this.headers,...s.headers},signal:r.signal});if(clearTimeout(o),a.status===401&&!i&&((c=this.auth)==null?void 0:c.mode)==="security-template"){const h=await E(this.auth,this.apiDomain);return this.headers=h.headers,this.send(e,s,!0)}if(!a.ok){let h=`API error: ${a.status} ${a.statusText}`;try{const d=await a.json();d!=null&&d.msg&&(h=`API error: ${a.status} - ${d.msg}`)}catch{}throw new Error(h)}if(a.status===204)return;const l=await a.text();if(!l)return;const f=JSON.parse(l);if((f==null?void 0:f.status)==="error")throw new Error(`API error: ${f.msg||"Unknown error"}`);return f}catch(a){throw clearTimeout(o),a instanceof DOMException&&a.name==="AbortError"?new Error("API request timed out"):a}}}function Se(t){const e=t.path??t.name,s=e.replace(/\/[^/]*$/,"")||"/";return{uuid:t.uuid,name:t.name.split("/").pop()||t.name,path:e,parentPath:s,createdAt:t.created_at,modifiedAt:t.modified_at}}async function y(t,e={}){const s=e.sortBy??"name",i=e.sortDirection??"asc";return((await t.get("/folders",{folder:e.folderPath??"/",recursive:e.recursive??0,limit:e.limit??1e3,offset:e.offset??0,q:e.q,sort:`${s}:${i}`})).folders??[]).map(Se)}async function L(t,e,s){const i=s.replace(/\/+$/,""),r=i?`${i}/${e}`:`/${e}`,o=await t.post("/folders",{name:r});if(o.status!=="success")throw new Error(o.msg||"Failed to create folder")}async function q(t,e,s){const i=await t.put(`/folder/${encodeURIComponent(e)}/name`,{name:s});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to rename folder")}async function j(t,e){const s=await t.delete("/folders",{folders_uuids:e});if((s==null?void 0:s.status)==="error")throw new Error(s.msg||"Failed to delete folders")}async function B(t,e,s){const i=await t.post("/folders",{folders_uuids:e,new_folder_name:s});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to move folders")}const N={small:[null,1048576],medium:[1048576,10485760],large:[10485760,104857600],huge:[104857600,null]},be={today:0,week:7,month:30,year:365};function b(t,e){const s=new Date(e);return s.setUTCHours(0,0,0,0),s.setUTCDate(s.getUTCDate()-be[t]),s}const G=["cdn_permalink"],T={},p=(t,e)=>e.split(" ").forEach(s=>T[s]=t);p("image","jpg jpeg png gif webp svg avif bmp tif tiff heic ico");p("video","mp4 webm mov m4v avi mkv ogv");p("audio","mp3 wav ogg oga m4a aac flac");p("document","pdf doc docx xls xlsx ppt pptx txt csv rtf md");p("model","glb gltf obj fbx stl usdz ply 3ds dae");function Fe(t){const e=(t.name.split(".").pop()||"").toLowerCase();if(T[e]==="model")return"model";const s=(t.file_type||t.type||"").toLowerCase();return s.startsWith("image")?"image":s.startsWith("video")?"video":s.startsWith("audio")?"audio":s.includes("pdf")||s.includes("document")||s.includes("text")?"document":T[e]??"other"}function V(t){var e,s,i,r,o,c,a;return{uuid:t.uuid,name:t.name,folder:t.folder??"/",type:Fe(t),fileType:t.file_type??t.type,cdnUrl:t.cdn_permalink??t.cdn_url,thumbnailUrl:((e=t.info)==null?void 0:e.video_thumbnail)??((s=t.info)==null?void 0:s.image_thumbnail)??((i=t.info)==null?void 0:i.thumbnail)??((r=t.info)==null?void 0:r.preview),size:typeof t.size=="object"?(o=t.size)==null?void 0:o.bytes:t.size,duration:((c=t.info)==null?void 0:c.video_duration)??((a=t.info)==null?void 0:a.duration),width:t.width,height:t.height,createdAt:t.created_at,modifiedAt:t.modified_at}}function _e(t){var c;const e=t.fields??G,s=t.sortBy??"created_at",i=t.sortDirection??"desc",r=[];if(t.search&&r.push(t.search),t.q&&r.push(t.q),(c=t.types)!=null&&c.length&&r.push(`type:${t.types.map(a=>`"${a}"`).join(",")}`),t.sizeBucket){const[a,l]=N[t.sizeBucket];r.push(`size:"${a??""}..${l??""}"`)}if(t.durationRange){const{min:a,max:l}=t.durationRange;(a!=null||l!=null)&&r.push(`video_duration:"${a??""}..${l??""}"`)}const o=Date.now();return t.createdWithin&&r.push(`created>"${b(t.createdWithin,o).toISOString()}"`),t.updatedWithin&&r.push(`updated>"${b(t.updatedWithin,o).toISOString()}"`),{offset:t.offset??0,limit:t.limit??100,format:"json,regvar:api,select:internal",preview:2301,recursive:t.recursive??1,fields:e.length?e:void 0,sort:`${s}:${i}`,folder:t.folder,q:r.length?r.join(" "):void 0}}async function m(t,e={}){const s=_e(e),i=await t.get("/files",s),r=(i.files??[]).map(V),o=typeof i.total=="number"?i.total:i.count??r.length;return{assets:r,total:o}}async function Ae(t,e={}){return(await m(t,e)).assets}const Pe={image:"image",video:"video",audio:"audio",document:"document",model:"other",archive:"other",font:"other",other:"other"};function W(t,e,s){var i;if((i=e.types)!=null&&i.length&&!e.types.includes(Pe[t.type]))return!1;if(e.sizeBucket){const[r,o]=N[e.sizeBucket];if(t.size==null||r!=null&&t.size<r||o!=null&&t.size>=o)return!1}if(e.durationRange){const{min:r,max:o}=e.durationRange;if(t.duration==null||r!=null&&t.duration<r||o!=null&&t.duration>o)return!1}return!(e.createdWithin&&!((t.createdAt?Date.parse(t.createdAt):NaN)>=b(e.createdWithin,s).getTime())||e.updatedWithin&&!((t.modifiedAt?Date.parse(t.modifiedAt):NaN)>=b(e.updatedWithin,s).getTime()))}function X(t,e,s){const i=s==="asc"?1:-1,r=o=>{var c;switch(e){case"name":return((c=o.name)==null?void 0:c.toLowerCase())??"";case"size":return o.size??0;case"type":return o.type;case"modified_at":return o.modifiedAt?Date.parse(o.modifiedAt):0;default:return o.createdAt?Date.parse(o.createdAt):0}};return[...t].sort((o,c)=>{const a=r(o),l=r(c);return a<l?-i:a>l?i:0})}async function J(t,e,s={}){const i=s.fields??G,r=new Array(e.length);let o=0;const c=async()=>{for(;o<e.length;){const l=o++;try{const f=await t.get(`/file/${encodeURIComponent(e[l])}`,{format:"json,regvar:api,select:internal",preview:2301,fields:i.length?i:void 0});f!=null&&f.file&&(r[l]=V(f.file))}catch{}}},a=Math.min(s.concurrency??8,e.length);return await Promise.all(Array.from({length:a},c)),r.filter(l=>l!==void 0)}async function H(t,e,s){const i=await t.put(`/file/${encodeURIComponent(e)}/name`,{name:s});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to rename file")}async function K(t,e){const s=await t.delete("/files",{files_uuids:e});if((s==null?void 0:s.status)==="error")throw new Error(s.msg||"Failed to delete files")}async function Z(t,e,s){const i=await t.post("/files",{files_uuids:e,new_folder_name:s});if((i==null?void 0:i.status)==="error")throw new Error(i.msg||"Failed to move files")}async function Q(t){return(await t.get("/labels")).labels??[]}function Y(t){if(t.sid)return`labels:${t.sid.replace(/^#/,"")}`}function I(t,e){try{const s=new URL(t);return s.searchParams.set("p",e),s.toString()}catch{return t}}function U(t){var e,s,i,r,o;return{uuid:t.uuid,name:t.name,url:t.url,previewUrl:t.preview??t.url,width:(e=t.info)==null?void 0:e.img_w,height:(s=t.info)==null?void 0:s.img_h,size:(i=t.info)==null?void 0:i.size,format:(r=t.info)==null?void 0:r.img_type,isOriginal:!1,isPreset:!1,bgRemoved:((o=t.info)==null?void 0:o.remove_background)===!0}}function Ee(t){return{uuid:t.uuid,name:t.name,url:t.cdnUrl??"",previewUrl:t.thumbnailUrl??t.cdnUrl,width:t.width,height:t.height,size:t.size,format:t.fileType,isOriginal:!0,isPreset:!1,bgRemoved:!1}}function Te(t,e){const s=t.cdnUrl??"";return{uuid:`preset-${e.name}`,name:e.name,url:I(s,e.name),previewUrl:I(t.thumbnailUrl??s,e.name),isOriginal:!1,isPreset:!0,bgRemoved:!1}}function ee({asset:t,variants:e=[],presets:s=[]}){const i=new Set(s.map(a=>a.name)),r=e.filter(a=>{var l;return!i.has(a.name)&&((l=a.info)==null?void 0:l.remove_background)!==!0}).map(U),o=e.filter(a=>{var l;return((l=a.info)==null?void 0:l.remove_background)===!0&&!i.has(a.name)}).map(U),c=s.map(a=>Te(t,a));return[Ee(t),...r,...o,...c]}async function te(t,e){const s=await t.get(`/file/${encodeURIComponent(e)}/variants`);return(s==null?void 0:s.variants)??[]}function se(t){return Array.isArray(t)?t.map(e=>typeof e=="string"?{name:e}:e&&typeof e.name=="string"?{name:e.name,desc:e.desc}:null).filter(e=>e!==null):[]}async function ie(t){var i,r,o;const e=await t.get("/settings"),s=(e==null?void 0:e.presets)??((i=e==null?void 0:e.cloudimg)==null?void 0:i.presets)??((o=(r=e==null?void 0:e.settings)==null?void 0:r.cloudimg)==null?void 0:o.presets)??void 0;return se(s)}async function Ie(t,e){const[s,i]=await Promise.all([te(t,e.uuid),ie(t)]);return ee({asset:e,variants:s,presets:i})}async function re(t,e){const s=await t.post("/file-archive",{files_uuids:e.filesUuids??[],folders_uuids:e.foldersUuids??[],urls:e.urls??[]});if(!(s!=null&&s.task_id))throw new Error("Archive task was not created");return s.task_id}function ne(t,e){return t.get(`/file-archive/${encodeURIComponent(e)}`,{status_only:1})}const Ue=new Set(["PENDING","RUNNING","PROCESSING",""]);function oe(t){const e=((t==null?void 0:t.task_status)??"").toUpperCase(),s=typeof(t==null?void 0:t.task_percent)=="number"?t.task_percent:0;if(e==="DONE")return{done:!0,progress:100};if(Ue.has(e))return{done:!1,progress:s};throw new Error(`Archive job failed: ${(t==null?void 0:t.task_status)??"unknown status"}`)}async function ae(t,e,s={}){var h,d;const i=s.intervalMs??1500,r=s.timeoutMs??12e4,o=s.maxRetries??5,c=s.sleep??(u=>new Promise(g=>setTimeout(g,u))),a=s.now??Date.now,l=a()+r;let f=0;for(;;){if((h=s.signal)!=null&&h.aborted)throw new Error("Archive polling aborted");if(a()>l)throw new Error("Archive polling timed out");let u;try{u=await ne(t,e)}catch(_){if(f++<o){await c(i);continue}throw _}const{done:g,progress:w}=oe(u);if((d=s.onProgress)==null||d.call(s,w),g)return;await c(i)}}function le(t,e){const s=t.absoluteUrl(`/file-archive/${encodeURIComponent(e)}`),i=t.authKey;if(!i)return s;const r=s.includes("?")?"&":"?";return`${s}${r}secret_key=${encodeURIComponent(i)}`}async function $e(t,e,s={}){const i=await re(t,e);return await ae(t,i,s),le(t,i)}const xe=["cdn_permalink"],ce={created_at:"created_at",modified_at:"modified_at",name:"name",size:"size",type:"type"};function Ce(t){let e=t.fields??xe;t.permalinksEnabled||(e=e.filter(c=>c!=="cdn_permalink"));const s={offset:t.offset??0,limit:t.limit??100,format:"json,regvar:api,select:internal",preview:2301,recursive:t.recursive??1};e.length>0&&(s.fields=e);const i=t.sort_by??"created_at",r=t.sort_direction??"desc";s.sort=`${ce[i]||i}:${r}`,t.folder&&(s.folder=t.folder);const o=[];return t.search&&!t.with_ai&&o.push(t.search),t.q&&o.push(t.q),o.length>0&&(s.q=o.join(" ")),t.with_ai&&(s.with_ai=!0,t.ai_query&&(s.ai_query=t.ai_query),t.ai_lang&&(s.ai_lang=t.ai_lang)),t.collection_uuid&&(s.collection_uuid=t.collection_uuid),t.f64&&(s.f64=t.f64),s}function De(t,e){return t.get("/files",Ce(e))}function ke(t,e){const s={recursive:e.recursive??1};e.folder&&(s.folder=e.folder);const i=[];return e.search&&!e.with_ai&&i.push(e.search),e.q&&i.push(e.q),i.length>0&&(s.q=i.join(" ")),e.with_ai&&(s.with_ai=!0,e.ai_query&&(s.ai_query=e.ai_query),e.ai_lang&&(s.ai_lang=e.ai_lang)),e.collection_uuid&&(s.collection_uuid=e.collection_uuid),e.f64&&(s.f64=e.f64),t.get("/files/stats",s)}function Me(t,e={}){const s={recursive:e.recursive??0,folder:e.folderPath??"/",limit:e.limit??1e3,offset:e.offset??0};e.q&&(s.q=e.q);const i=e.sort_by??"created_at",r=e.sort_direction??"asc";return s.sort=`${ce[i]||i}:${r}`,t.get("/folders",s)}async function Re(t,e){return e.length===0?{}:(await t.post("/folders/previews",{folders:e})).folders||{}}const $=100,x=1e3,M={types:[],size:null,duration:null,created:null,updated:null};class F{constructor(e,s={}){this.client=e,this.listeners=new Set,this.loadSeq=0,this.treeSeq=0,this.fetchedCount=0,this.selectionAnchor=null,this.favAdapter=s.favourites,this.onScopeChange=s.onScopeChange,this.state={scope:{type:"folder",value:s.rootFolder??"/"},viewMode:s.viewMode??"grid",gridSize:s.gridSize??"m",sortBy:s.sortBy??"created_at",sortDirection:s.sortDirection??"desc",searchQuery:"",filters:{...M},folders:[],labels:[],assets:[],total:0,truncated:!1,hasMore:!1,loadingMore:!1,treeChildren:{},expandedFolders:new Set,selection:new Set,favourites:new Set,loading:!1,error:null}}async init(){await Promise.all([this.loadLabels(),this.loadFavourites(),this.loadFolderChildren("/")]),await this.load()}async loadFolderChildren(e){if(!this.state.treeChildren[e])try{const s=await y(this.client,{folderPath:e});this.set({treeChildren:{...this.state.treeChildren,[e]:s}})}catch{}}async toggleFolder(e){const s=new Set(this.state.expandedFolders);s.has(e)?(s.delete(e),this.set({expandedFolders:s})):(await this.loadFolderChildren(e),s.add(e),this.set({expandedFolders:s}))}async loadLabels(){try{this.set({labels:await Q(this.client)})}catch{}}async loadFavourites(){if(this.favAdapter)try{this.set({favourites:new Set(await this.favAdapter.list())})}catch{}}async toggleFavourite(e){const s=this.state.favourites.has(e),i=new Set(this.state.favourites);s?i.delete(e):i.add(e),this.set({favourites:i});try{this.favAdapter&&(s?await this.favAdapter.remove(e):await this.favAdapter.add(e))}catch{const r=new Set(this.state.favourites);s?r.add(e):r.delete(e),this.set({favourites:r});return}this.state.scope.type==="favourites"&&this.load()}getState(){return this.state}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}set(e){this.state={...this.state,...e};for(const s of this.listeners)s(this.state)}setScope(e){var s;this.selectionAnchor=null,this.set({scope:e,selection:new Set}),(s=this.onScopeChange)==null||s.call(this,e),this.load()}openFolder(e){this.setScope({type:"folder",value:e})}openLabel(e){this.setScope({type:"label",value:e})}openFavourites(){this.setScope({type:"favourites"})}setViewMode(e){this.set({viewMode:e})}setGridSize(e){this.set({gridSize:e})}setSort(e,s){this.set({sortBy:e,sortDirection:s}),this.load()}setSearch(e){this.set({searchQuery:e}),this.load()}setFilters(e){this.set({filters:{...this.state.filters,...e}}),this.load()}toggleType(e){const s=this.state.filters.types;this.setFilters({types:s.includes(e)?s.filter(i=>i!==e):[...s,e]})}get activeFilterCount(){const{types:e,size:s,duration:i,created:r,updated:o}=this.state.filters;return e.length+(s?1:0)+(i?1:0)+(r?1:0)+(o?1:0)}clearFilters(){this.activeFilterCount&&(this.set({filters:{...M}}),this.load())}toggleSelect(e,s=!1){const i=new Set(s?this.state.selection:[]),r=!i.has(e);r?i.add(e):i.delete(e),r&&(this.selectionAnchor=e),this.set({selection:i})}selectRange(e){const s=this.state.assets,i=s.findIndex(l=>l.uuid===e);if(i<0)return;const r=this.selectionAnchor!=null?s.findIndex(l=>l.uuid===this.selectionAnchor):-1;if(r<0){this.toggleSelect(e,!0);return}const[o,c]=r<=i?[r,i]:[i,r],a=new Set(this.state.selection);for(let l=o;l<=c;l++)a.add(s[l].uuid);this.set({selection:a})}setSelection(e){const s=new Set(e);let i=null;for(const r of s)i=r;this.selectionAnchor=i,this.set({selection:s})}clearSelection(){this.selectionAnchor=null,this.set({selection:new Set})}get currentFolderPath(){return this.state.scope.type==="folder"?this.state.scope.value??"/":"/"}async refreshTree(){const e=++this.treeSeq,s=new Set(["/",this.currentFolderPath,...this.state.expandedFolders]),i={};await Promise.all([...s].map(async r=>{try{i[r]=await y(this.client,{folderPath:r})}catch{}})),e===this.treeSeq&&this.set({treeChildren:{...this.state.treeChildren,...i}})}static parentOf(e){return e.replace(/\/[^/]*$/,"")||"/"}findFolderPath(e){return this.folderPath(e)}folderPath(e){for(const s of[this.state.folders,...Object.values(this.state.treeChildren)]){const i=s.find(r=>r.uuid===e);if(i)return i.path}}redirectScope(e,s){const{scope:i}=this.state;if(i.type!=="folder"||!i.value)return!1;const r=i.value;return r!==e&&!r.startsWith(e+"/")?!1:(s===null?this.openFolder(F.parentOf(e)):this.openFolder(r===e?s:s+r.slice(e.length)),!0)}async createFolder(e){await L(this.client,e,this.currentFolderPath),await this.refreshTree(),await this.load()}async renameFolderById(e,s){const i=this.folderPath(e);await q(this.client,e,s),await this.refreshTree();const r=i?`${F.parentOf(i).replace(/\/$/,"")}/${s}`:null;i&&r&&this.redirectScope(i,r)||await this.load()}async deleteFolderById(e){const s=this.folderPath(e);await j(this.client,[e]),await this.refreshTree(),s&&this.redirectScope(s,null)||await this.load()}async moveFolderById(e,s){const i=this.folderPath(e);await B(this.client,[e],s),await this.refreshTree();const r=(i==null?void 0:i.split("/").pop())??"",o=i?`${s.replace(/\/$/,"")}/${r}`:null;i&&o&&this.redirectScope(i,o)||await this.load()}async renameAsset(e,s){await H(this.client,e,s),await this.load()}async deleteAssets(e){await K(this.client,e),this.clearSelection(),await this.load()}async moveAssets(e,s){await Z(this.client,e,s),this.clearSelection(),await this.load()}facetParams(){const{types:e,size:s,duration:i,created:r,updated:o}=this.state.filters;return{types:e.length?e:void 0,sizeBucket:s??void 0,durationRange:i??void 0,createdWithin:r??void 0,updatedWithin:o??void 0}}async fetchAssetsPage(e){const{scope:s,sortBy:i,sortDirection:r}=this.state,o=this.state.searchQuery||void 0,c=this.facetParams();if(s.type==="favourites"){const h=[...this.state.favourites],d=await J(this.client,h.slice(0,x)),u=Date.now(),g=d.filter(_=>W(_,c,u)),w=X(g,i,r);return{assets:w,total:w.length,truncated:h.length>x,hasMore:!1,fetched:0}}const a={sortBy:i,sortDirection:r,search:o,...c,offset:e,limit:$};let l;if(s.type==="folder"){const h=this.state.searchQuery.trim()?1:0;l=await m(this.client,{...a,folder:s.value??"/",recursive:h})}else if(s.type==="label"){const h=this.state.labels.find(u=>u.uuid===s.value),d=h?Y(h):void 0;l=await m(this.client,{...a,recursive:1,q:d})}else l=await m(this.client,{...a,recursive:1});const f=l.assets.length===$;return{assets:l.assets,total:l.total,truncated:!1,hasMore:f,fetched:l.assets.length}}async load(){const e=++this.loadSeq;this.set({loading:!0,loadingMore:!1,error:null});try{const s=y(this.client,{folderPath:this.currentFolderPath}),i=this.fetchAssetsPage(0),[r,o]=await Promise.all([s,i]);if(e!==this.loadSeq)return;this.fetchedCount=o.fetched,this.set({folders:r,assets:o.assets,total:o.total,truncated:o.truncated,hasMore:o.hasMore,loading:!1,treeChildren:{...this.state.treeChildren,[this.currentFolderPath]:r}})}catch(s){if(e!==this.loadSeq)return;this.set({error:s instanceof Error?s.message:String(s),loading:!1})}}async loadMore(){if(this.state.loading||this.state.loadingMore||!this.state.hasMore)return;const e=this.loadSeq;this.set({loadingMore:!0});try{const s=await this.fetchAssetsPage(this.fetchedCount);if(e!==this.loadSeq)return;this.fetchedCount+=s.fetched;const i=new Set(this.state.assets.map(o=>o.uuid)),r=s.assets.filter(o=>!i.has(o.uuid));this.set({assets:[...this.state.assets,...r],total:s.total,hasMore:s.hasMore,loadingMore:!1,error:null})}catch(s){if(e!==this.loadSeq)return;this.set({error:s instanceof Error?s.message:String(s),loadingMore:!1})}}}class Oe{constructor(e="sfx-light-dam:favourites"){this.key=e}read(){try{const e=localStorage.getItem(this.key);return new Set(e?JSON.parse(e):[])}catch{return new Set}}write(e){try{localStorage.setItem(this.key,JSON.stringify([...e]))}catch{}}list(){return[...this.read()]}has(e){return this.read().has(e)}add(e){const s=this.read();s.add(e),this.write(s)}remove(e){const s=this.read();s.delete(e),this.write(s)}}function ze(t,e){const s=new URL(t);return e.width&&s.searchParams.set("w",String(e.width)),e.height&&s.searchParams.set("h",String(e.height)),e.quality!==void 0&&s.searchParams.set("q",String(e.quality)),s.toString()}const Le={excellent:90,good:75,fair:60},qe={fullhd:1920,large:1200,medium:600,small:300},je={webp:"awebp,webp",gif:"agif,gif"};function de(t,e){t.searchParams.delete("download"),e.width&&t.searchParams.set("w",String(e.width)),e.height&&t.searchParams.set("h",String(e.height)),e.quality!=null&&t.searchParams.set("q",String(e.quality)),e.format&&t.searchParams.set("force_format",je[e.format]??e.format),e.strictSizes!==void 0&&(e.width||e.height)&&t.searchParams.set("func",e.strictSizes?"bound":"cover")}function he(t,e){if(!e)return t;const s=e==="jpeg"?"jpg":e;return`${t.replace(/\.[^./\\]+$/,"")||t}.${s}`}function Be(t,e,s={}){const i=new URL(t);return de(i,s),i.searchParams.set("force_download",he(e,s.format)),i.toString()}function Ne(t,e={}){const s=new URL(t);return de(s,e),s.toString()}const R=/^(https:\/\/)([a-z0-9_-]+)\.filerobot\.com\/(?:v\d+\/)?/i;function S(t){if(!t)return"";const e=i=>i.replace(/(\.filerobot\.com\/[a-z0-9_-]+)\/v\d+\//i,"$1/");if(t.includes("assets.filerobot.com"))return e(t);const s=t.match(R);return s?e(t.replace(R,`$1assets.filerobot.com/${s[2]}/`)):t}function A(t,e){try{const s=new URL(t);for(const[i,r]of Object.entries(e))s.searchParams.set(i,r);return s.toString()}catch{return t}}function Ge(t,e=240){const s=String(e);if(t.type==="video")return t.thumbnailUrl?A(S(t.thumbnailUrl),{w:s,force_format:"webp,jpeg"}):"";if(t.type==="document"&&/\.pdf$/i.test(t.name)){const i=S(t.cdnUrl??"");if(!i)return"";const r=i.replace(/([?&])func=proxy&?/,"$1").replace(/[?&]$/,"");return A(r,{w:s,force_format:"webp,jpeg",doc_page:"1",bypass_process_proxy:"1"})}if(t.type==="image"||t.thumbnailUrl){const i=t.thumbnailUrl??t.cdnUrl;return i?A(S(i),{w:s,func:"bound"}):""}return""}const n="https://scaleflex.cloudimg.io/v7/assets/file-types/v3/",Ve='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" fill="none"><path d="M24 4 42 14v20L24 44 6 34V14z" fill="#eef2ff" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/><path d="M24 4 42 14 24 24 6 14z" fill="#c7d2fe" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/><path d="M24 24v20M24 24 6 14M24 24 42 14" stroke="#6366f1" stroke-width="2" stroke-linejoin="round"/></svg>',v=`data:image/svg+xml,${encodeURIComponent(Ve)}`,C={_default:n+"GENERIC.svg?vh=9a518a",png:n+"PNG.svg?vh=96cd9a",jpg:n+"JPG.svg?vh=06e819",jpg2:n+"JPG2.svg?vh=f0eb7f",jpeg:n+"JPEG.svg?vh=6a65e9",gif:n+"GIF.svg?vh=c3c2c3",bmp:n+"BMP.svg?vh=d2243a",webp:n+"WEBP.svg?vh=fedd74",svg:n+"SVG.svg?vh=a15e46",tiff:n+"TIFF.svg?vh=1f30c3",tif:n+"TIF.svg?vh=b383c9",heic:n+"HEIC.svg?vh=84adfe",avif:n+"AVIF.svg?vh=536b30",ico:n+"ICO.svg?vh=79063d",psd:n+"PSD.svg?vh=be6140",psb:n+"PSB.svg?vh=678646",ai:n+"AI.svg?vh=84b254",dwg:n+"DWG.svg?vh=971fb3",mp4:n+"MP4.svg?vh=42f175",webm:n+"WEBM.svg?vh=26a84a",avi:n+"AVI.svg?vh=d22ba8",mpeg:n+"MPEG.svg?vh=ba93bb",ogv:n+"OGV.svg?vh=74d453","3gp":n+"3GP.svg?vh=f0d388","3g2":n+"3G2.svg?vh=04c652",swf:n+"SWF.svg?vh=3955e2",fla:n+"FLA.svg?vh=daf585",m3u8:n+"M3U8.svg?vh=7d5e62",mp3:n+"MP3.svg?vh=66bbef",wav:n+"WAV.svg?vh=d7a7d5",aac:n+"AAC.svg?vh=07f3f9",oga:n+"OGA.svg?vh=a5c622",opus:n+"OPUS.svg?vh=9548b1",weba:n+"WEBA.svg?vh=4dcf70",mid:n+"MID.svg?vh=3f0e29",midi:n+"MIDI.svg?vh=9fedec",cda:n+"CDA.svg?vh=85b83b",pdf:n+"PDF.svg?vh=18c5f7",doc:n+"DOC.svg?vh=d1b47c",docx:n+"DOCX.svg?vh=1eb6b0",txt:n+"TXT.svg?vh=307979",rtf:n+"RTF.svg?vh=978c5f",xls:n+"XLS.svg?vh=13b5f7",xlsx:n+"XLSX.svg?vh=79d64a",ppt:n+"PPT.svg?vh=4ee29b",pptx:n+"PPTX.svg?vh=8b1568",csv:n+"CSV.svg?vh=4add78",odt:n+"ODT.svg?vh=940781",ods:n+"ODS.svg?vh=9fbe9a",odp:n+"ODP.svg?vh=bf892d",dbf:n+"DBF.svg?vh=457bd4",vsd:n+"VSD.svg?vh=8a9ccb",abw:n+"ABW.svg?vh=313dc7",epub:n+"EPUB.svg?vh=15263d",azw:n+"AZW.svg?vh=a018b1",ics:n+"ICS.svg?vh=909f63",ogx:n+"OGX.svg?vh=f694d2",zip:n+"ZIP.svg?vh=84f98b",rar:n+"RAR.svg?vh=1d6423","7z":n+"7Z.svg?vh=e007e5",tar:n+"TAR.svg?vh=603aed",gz:n+"GZ.svg?vh=de13f7",bz:n+"BZ.svg?vh=0374ff",bz2:n+"BZ2.svg?vh=e14294",arc:n+"ARC.svg?vh=942fad",jar:n+"JAR.svg?vh=149796",mpkg:n+"MPKG.svg?vh=dea655",ttf:n+"TTF.svg?vh=d2e2c1",otf:n+"OTF.svg?vh=c904fd",woff:n+"WOFF.svg?vh=4b8177",woff2:n+"WOFF2.svg?vh=b532d3",eot:n+"EOT.svg?vh=a54980",js:n+"JS.svg?vh=524691",mjs:n+"MJS.svg?vh=d57921",ts:n+"TS.svg?vh=9af3ae",css:n+"CSS.svg?vh=287863",html:n+"HTML.svg?vh=fa7a87",htm:n+"HTM.svg?vh=21323d",xhtml:n+"XHTML.svg?vh=e6d6a9",xul:n+"XUL.svg?vh=6c9c71",json:n+"JSON.svg?vh=104c9e",jsonld:n+"JSONLD.svg?vh=f30c0f",xml:n+"XML.svg?vh=7f7194",php:n+"PHP.svg?vh=503e36",sh:n+"SH.svg?vh=3b820e",csh:n+"CSH.svg?vh=08c0cc",exe:n+"EXE.svg?vh=ccca53",iso:n+"ISO.svg?vh=064b8f",bin:n+"BIN.svg?vh=1e9618",glb:v,gltf:v,obj:v,fbx:v,stl:v,usdz:v,ply:v,"3ds":v,dae:v};function We(){return C._default}function Xe(t){const e=(t.split(".").pop()||"").toLowerCase();return C[e]||C._default}function Je(t){if(t==null||!Number.isFinite(t)||t<0)return"—";const e=["B","KB","MB","GB","TB"];let s=t,i=0;for(;s>=1024&&i<e.length-1;)s/=1024,i++;const r=(a,l)=>{const f=l>0&&Math.round(a*10)/10<10?1:0,h=a.toFixed(f);return{str:h,rounded:Number(h)}},o=r(s,i);let c=o.str;return o.rounded>=1024&&i<e.length-1&&(s/=1024,i++,c=r(s,i).str),`${c} ${e[i]}`}function He(t){if(!t)return"—";const e=new Date(t);return Number.isNaN(e.getTime())?t:e.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function Ke(t,e){return t&&e?`${t} × ${e}`:"—"}function Ze(t,e){let s;const i=((...r)=>{clearTimeout(s),s=setTimeout(()=>t(...r),e)});return i.cancel=()=>clearTimeout(s),i}exports.BrowseStore=F;exports.DamClient=k;exports.LocalFavouritesAdapter=Oe;exports.MAX_FAVOURITES=x;exports.PAGE_SIZE=$;exports.QUALITY_LEVELS=Le;exports.RESIZE_PRESETS=qe;exports.addCdnParams=ze;exports.archiveDownloadUrl=le;exports.archiveStatusOutcome=oe;exports.assembleVariations=ee;exports.assetMatchesFacets=W;exports.buildAuthHeaders=P;exports.buildEmbedUrl=Ne;exports.buildTransformedDownloadUrl=Be;exports.createAndPollArchive=$e;exports.createArchive=re;exports.createFolder=L;exports.debounce=Ze;exports.deleteFiles=K;exports.deleteFolders=j;exports.exchangeSassKey=O;exports.formatDate=He;exports.formatDimensions=Ke;exports.formatFileSize=Je;exports.getApiBase=D;exports.getArchiveStatus=ne;exports.getDefaultFileTypeIconUrl=We;exports.getFileTypeIconUrl=Xe;exports.getFileVariations=te;exports.getFiles=Ae;exports.getFilesByUuids=J;exports.getFilesPage=m;exports.getFilesRaw=De;exports.getFilesStats=ke;exports.getFolderPreviews=Re;exports.getFolders=y;exports.getFoldersRaw=Me;exports.getFormattedPreviewUrl=S;exports.getLabels=Q;exports.getPresets=ie;exports.getThumbnailUrl=Ge;exports.labelFilterQuery=Y;exports.loadVariations=Ie;exports.moveFiles=Z;exports.moveFolders=B;exports.normalizeAuth=z;exports.normalizePresets=se;exports.normalizeVariation=U;exports.pollArchive=ae;exports.presetUrl=I;exports.renameFile=H;exports.renameFolder=q;exports.resolveAuth=E;exports.sortAssets=X;exports.transformedFileName=he;
2
2
  //# sourceMappingURL=index.cjs.map