@codingfactory/mediables-vue 2.4.22 → 2.4.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,342 @@
1
+ "use strict";var Vu=Object.defineProperty;var Su=(a,n,t)=>n in a?Vu(a,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[n]=t;var Z=(a,n,t)=>Su(a,typeof n!="symbol"?n+"":n,t);const Fa=require("pinia"),e=require("vue"),Pe=require("pixi.js"),dt=require("./editor-DjvxEsss.cjs"),D=require("@ionic/vue"),Cu=require("pixi-filters");function _u(a){const n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const t in a)if(t!=="default"){const o=Object.getOwnPropertyDescriptor(a,t);Object.defineProperty(n,t,o.get?o:{enumerable:!0,get:()=>a[t]})}}return n.default=a,Object.freeze(n)}const Ye=_u(Pe),Hi=1,Nu=new Set(["free","square","circle"]);function Tu(a){const n=typeof a;return n==="string"||n==="number"||n==="boolean"}function Mu(a){if(!a||typeof a!="object")return!1;const n=a;return typeof n.x=="number"&&typeof n.y=="number"&&typeof n.width=="number"&&typeof n.height=="number"}function gr(a){if(!a||typeof a!="object")return null;const n=a;if(n.version!==Hi)return null;const t=n.crop,o=t&&Mu(t.rect)?{...t.rect}:null,i=t&&typeof t.shape=="string"&&Nu.has(t.shape)?t.shape:"free",r=t&&typeof t.aspectRatio=="string"?t.aspectRatio:"free",s=n.filters,l=[];if(Array.isArray(s))for(const c of s){if(!c||typeof c!="object")continue;const d=c;if(typeof d.id!="string")continue;const u={},p=d.values;if(p&&typeof p=="object"&&!Array.isArray(p))for(const[v,h]of Object.entries(p))Tu(h)&&(u[v]=h);l.push({id:d.id,enabled:d.enabled!==!1,values:u})}return{version:Hi,crop:{rect:o,aspectRatio:r,shape:i},filters:l}}function Ml(a){const n=gr(a);return n?JSON.stringify(n):null}function Bu(a){try{const n=JSON.parse(a);return gr(n)}catch{return null}}function Iu(){return{version:Hi,crop:{rect:null,aspectRatio:"free",shape:"free"},filters:[]}}let Nt={apiBaseUrl:"/api/v1",isAdmin:!1};function jn(a){Nt={...Nt,...a}}function Bl(){return{...Nt}}function Il(a){Nt={...a}}function Fl(a){const n=Bl();return jn(a),()=>{Il(n)}}const Fu=async(a,n={})=>{var l;const t=(l=document.querySelector('meta[name="csrf-token"]'))==null?void 0:l.getAttribute("content"),o={Accept:"application/json",...n.headers};t&&(o["X-CSRF-TOKEN"]=t),n.body instanceof FormData||(o["Content-Type"]="application/json");const r={method:n.method||"GET",headers:o,credentials:"include"};n.body instanceof FormData?r.body=n.body:n.body!==void 0&&(r.body=JSON.stringify(n.body));const s=await fetch(a,r);if(!s.ok){const c=await s.json().catch(()=>({message:"Request failed"}));throw new Error(c.message||`HTTP ${s.status}`)}if(s.status!==204)return await s.json()},Ct=Fa.defineStore("media",()=>{const a=e.ref([]),n=e.ref([]),t=e.ref(!1),o=e.ref(null),i=e.ref(1),r=e.ref(1),s=e.ref(24),l=e.ref({type:null,uuid:null}),c=e.ref([]),d=e.ref(!1),u=e.ref(null),p=e.ref(new Map),v=e.ref(new Map),h=e.ref(new Set),g=e.ref(new Map),y=e.ref({}),V=5*60*1e3,B=e.computed(()=>{if(Nt.apiScope)return Nt.apiScope;if(Nt.isAdmin)return"admin"}),_=e.computed(()=>B.value==="admin");function b(){return Nt.httpClient||Fu}function m(ae){const ue=Nt.apiBaseUrl||"/api/v1",we=B.value?`/${B.value}`:"";return`${ue}${we}${ae}`}function w(ae,ue){return`${B.value??"default"}-${ae}-${JSON.stringify(ue)}`}function I(ae){return Date.now()-ae<V}function N(){g.value.clear(),y.value={}}function x(ae){if(!ae||!ae.data)return;const ue={};ae.data.forEach(we=>{const oe=`${we.file_name}-${we.collection_name||"default"}`,se=ue[oe];(!se||Object.keys(we.generated_conversions||{}).length>Object.keys(se.generated_conversions||{}).length)&&(ue[oe]=we)}),a.value=Object.values(ue),ae.meta&&(i.value=ae.meta.current_page,r.value=Math.ceil(ae.meta.total/ae.meta.per_page))}async function T(ae=1,ue={}){const we=w(ae,ue),oe=g.value.get(we);if(oe&&I(oe.timestamp)){const se=oe.data;return x(se),se}t.value=!0,o.value=null;try{const se=new URLSearchParams;se.append("page",ae.toString()),se.append("per_page",s.value.toString()),_.value&&se.append("linked","1");for(const ut in ue)if(Object.prototype.hasOwnProperty.call(ue,ut)){const Ze=ue[ut];Ze!=null&&Ze!==""&&se.append(ut,String(Ze))}const Se=await b()(m(`/media?${se}`));return g.value.set(we,{data:Se,timestamp:Date.now()}),x(Se),Se}catch(se){throw o.value=se instanceof Error?se.message:"Failed to fetch media",a.value=[],new Error(o.value)}finally{t.value=!1}}async function H(ae,ue){t.value=!0,o.value=null;const we=`${ae.name}-${Date.now()}`,oe={file:ae,progress:0,status:"uploading"};p.value.set(we,oe);try{const se=new FormData;se.append("file",ae),se.append("collection",ue.collection),ue.ownerUuid&&(se.append("owner_uuid",ue.ownerUuid),se.append("owner_type",ue.ownerType||"")),ue.usageUuid&&(se.append("usage_uuid",ue.usageUuid),se.append("usage_type",ue.usageType||""),se.append("usage_purpose",ue.usagePurpose||"")),ue.customProperties&&se.append("custom_properties",JSON.stringify(ue.customProperties));const Se=await b()(m("/media"),{method:"POST",body:se});return oe.status="completed",oe.progress=100,oe.media=Se==null?void 0:Se.data,i.value===1&&(Se!=null&&Se.data)&&(a.value=[Se.data,...a.value]),N(),(Se==null?void 0:Se.data)||null}catch(se){throw oe.status="error",oe.error=se instanceof Error?se.message:"Upload failed",o.value=oe.error,new Error(o.value)}finally{t.value=!1,setTimeout(()=>{p.value.delete(we)},5e3)}}async function E(ae){t.value=!0,o.value=null;const ue=a.value.findIndex(oe=>oe.uuid===ae);let we;ue!==-1&&(we=a.value.splice(ue,1)[0]);try{return await b()(m(`/media/${ae}`),{method:"DELETE"}),h.value.delete(ae),N(),!0}catch(oe){throw we&&ue!==-1&&a.value.splice(ue,0,we),o.value=oe instanceof Error?oe.message:"Failed to delete media",new Error(o.value)}finally{t.value=!1}}async function R(ae,ue){t.value=!0,o.value=null;try{const oe=await b()(m(`/media/${ae}`),{method:"PATCH",body:ue,data:ue});if(oe!=null&&oe.data){const se=a.value.findIndex(ke=>ke.uuid===ae);return se!==-1&&(a.value[se]={...a.value[se],...oe.data}),N(),oe.data}return null}catch(we){throw o.value=we instanceof Error?we.message:"Failed to update media",new Error(o.value)}finally{t.value=!1}}async function A(){t.value=!0,o.value=null;try{const ue=await b()(m("/media/collections"));return n.value=(ue==null?void 0:ue.data)||[],n.value}catch(ae){throw o.value=ae instanceof Error?ae.message:"Failed to fetch collections",n.value=[],new Error(o.value)}finally{t.value=!1}}async function P(ae,ue,we="images",oe){d.value=!0,u.value=null;try{const se=new URLSearchParams;se.append("collection",we),oe&&se.append("search",oe);const Se=await b()(m(`/media/model/${ae}/${ue}?${se}`));return Se!=null&&Se.data?(c.value=Se.data,Se.data):[]}catch(se){throw u.value=se instanceof Error?se.message:"Failed to fetch model media",c.value=[],new Error(u.value)}finally{d.value=!1}}async function M(ae,ue,we,oe="images"){d.value=!0,u.value=null;const se=[...c.value];try{const Se=await b()(m(`/media/model/${ae}/${ue}/attach`),{method:"POST",body:{media_uuids:we,collection:oe}});return await P(ae,ue,oe),(Se==null?void 0:Se.data)||[]}catch(ke){throw c.value=se,u.value=ke instanceof Error?ke.message:"Failed to attach media",new Error(u.value)}finally{d.value=!1}}async function j(ae,ue,we,oe="images"){d.value=!0,u.value=null;const se=[...c.value];c.value=c.value.filter(ke=>ke.uuid!==we);try{return await b()(m(`/media/model/${ae}/${ue}/detach`),{method:"POST",body:{media_uuid:we,collection:oe}}),!0}catch(ke){throw c.value=se,u.value=ke instanceof Error?ke.message:"Failed to detach media",new Error(u.value)}finally{d.value=!1}}async function U(ae,ue,we,oe="images"){d.value=!0,u.value=null;const se=[...c.value],ke=new Map(c.value.map(Se=>[Se.uuid,Se]));c.value=we.map(Se=>ke.get(Se)).filter(Se=>Se!==void 0);try{return await b()(m(`/media/model/${ae}/${ue}/reorder`),{method:"POST",body:{media_uuids:we,collection:oe}}),!0}catch(Se){throw c.value=se,u.value=Se instanceof Error?Se.message:"Failed to reorder media",new Error(u.value)}finally{d.value=!1}}async function S(ae,ue,we={}){const oe=b(),se=Nt.apiBaseUrl||"/api/v1",ke=new FormData,Se=ue.imageData,ut=Se.match(/^data:(image\/\w+);base64,/),Ze=ut?ut[1]:"image/png",Vt=Se.replace(/^data:image\/\w+;base64,/,""),He=atob(Vt),nt=new Uint8Array(He.length);for(let yt=0;yt<He.length;yt++)nt[yt]=He.charCodeAt(yt);const St=new Blob([nt],{type:Ze});ke.append("image_file",St,`edited.${Ze==="image/jpeg"?"jpg":"png"}`);const $t=Ml(ue.state);$t&&ke.append("editor_state",$t),ue.metadata&&(ke.append("filters",JSON.stringify(ue.metadata.filters)),ue.metadata.cropRect&&ke.append("crop_data",JSON.stringify(ue.metadata.cropRect))),ke.append("save_as_new","true"),we.asVariant&&ke.append("as_variant","true"),we.name!==void 0&&ke.append("name",we.name);const st=await oe(`${se}/editor/${ae}/save`,{method:"POST",body:ke});if("media"in st&&st.media)return st.media;if("status_url"in st&&st.status_url)return F(oe,st.status_url,we.pollTimeout??6e4);throw new Error("Unexpected response from editor save endpoint")}async function F(ae,ue,we){const oe=Date.now(),se=2e3;for(;Date.now()-oe<we;){await new Promise(Se=>setTimeout(Se,se));const ke=await ae(ue);if(ke.status==="completed"&&ke.media)return ke.media;if(ke.status==="failed")throw new Error(ke.error??"Image processing failed")}throw new Error("Image processing timed out")}function J(ae,ue,we){l.value=we!==void 0?{type:ae,uuid:ue,collection:we}:{type:ae,uuid:ue},y.value[`${ae}-${ue}`]={timestamp:Date.now()}}function G(){l.value={type:null,uuid:null},c.value=[],u.value=null}async function Q(){if(!l.value.type||!l.value.uuid)return;const ae=await P(l.value.type,l.value.uuid,l.value.collection||"images");c.value=ae||[]}function ge(){a.value.forEach(ae=>h.value.add(ae.uuid))}function be(){h.value.clear()}function te(ae){h.value.has(ae)?h.value.delete(ae):h.value.add(ae)}function $(ae){return h.value.has(ae)}function O(){return Array.from(p.value.values()).some(ae=>ae.status==="uploading")}function me(ae){return p.value.get(ae)||v.value.get(ae)}function ne(){return[...Array.from(p.value.values()),...Array.from(v.value.values())]}async function ee(){const ae=Array.from(h.value);let ue=0;for(const we of ae)try{await E(we),ue++}catch{}return be(),ue}function pe(ae,ue){var we;return ue&&((we=ae.conversion_urls)!=null&&we[ue])?ae.conversion_urls[ue]||"":ae.original_url||ae.url||""}return{items:a,collections:n,loading:t,error:o,currentPage:i,totalPages:r,itemsPerPage:s,isAdmin:_,modelContext:l,modelMedia:c,isLoadingModelMedia:d,modelMediaError:u,selectedItems:h,uploadProgress:p,uploadQueue:v,cachedResponses:y,fetchMedia:T,uploadFile:H,deleteMedia:E,updateMedia:R,clearCache:N,fetchCollections:A,fetchModelMedia:P,attachMedia:M,detachMedia:j,reorderMedia:U,saveEditedImage:S,setModelContext:J,clearModelContext:G,refreshModelMedia:Q,selectAllItems:ge,clearSelection:be,toggleSelection:te,isSelected:$,deleteSelectedItems:ee,getHttpClient:b,getApiUrl:m,hasActiveUploads:O,getUploadProgress:me,getAllUploadProgress:ne,getMediaUrl:pe}}),$l=()=>((Nt.apiScope!=="admin"||Nt.isAdmin!==!0)&&jn({...Nt,apiScope:"admin",isAdmin:!0}),Ct());function $u(a,n){try{let t=dt.getFilter(a);if(t||(dt.registerCorePixiFilters(),t=dt.getFilter(a)),!t){try{const r=dt.getAllFilters()}catch{}return null}const o={...t.defaultParams,...n};return t.createFilter(o)}catch{return null}}const Ru=e.defineComponent({__name:"ImageEditor",props:{initialImage:{},initialState:{default:null},sessionKey:{default:0},theme:{default:"auto"},cropShape:{default:"square"},preset:{},primaryColor:{default:"#3880ff"},secondaryColor:{default:"#5260ff"},saveButtonColor:{default:"#3880ff"},downloadButtonColor:{default:"#2dd36f"}},emits:["save","cancel","error"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(null);let r=null,s=null;function l(){var B;if(!r){o("error",new Error("Editor not initialized"));return}const p=r.exportImage("png",.92);if(!p){o("error",new Error("Failed to export image — the image could not be processed"));return}const v=r.getSerializableState(),h=r._renderer,g=((B=h.getExportDimensions)==null?void 0:B.call(h))??{width:0,height:0},y={width:Math.round(g.width),height:Math.round(g.height)};o("save",{imageData:p,dimensions:y,state:v})}function c(){o("cancel")}function d(){if(!i.value||r)return;window.PIXI=Ye,dt.initializeFilterRegistry();const p={theme:t.theme};t.preset&&(p.preset=t.preset),t.preset?t.cropShape==="circle"&&(p.cropShape="circle",p.initialAspectRatio="1:1",p.initialMode="crop"):(p.cropShape=t.cropShape==="circle"?"circle":"free",p.initialAspectRatio=t.cropShape==="circle"?"1:1":"free",p.initialMode=t.cropShape==="circle"?"crop":"adjust"),r=new dt.VanillaImageEditor(i.value,p),r.setFilterRegistry({getAllFilters:dt.getAllFilters,getFilter:dt.getFilter,getFiltersByCategory:dt.getFiltersByCategory}),r.save=function(){l()},r.on("cancel",c),t.initialImage&&r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})}e.onMounted(()=>{i.value&&(i.value.clientWidth>0?d():(s=new ResizeObserver(p=>{const v=p[0];v&&v.contentRect.width>0&&!r&&(d(),s==null||s.disconnect(),s=null)}),s.observe(i.value)))});const u=()=>{!r||!t.initialImage||r.loadImage(t.initialImage,{state:t.initialState??null,sessionKey:t.sessionKey})};return e.watch(()=>t.initialImage,(p,v)=>{!r||!p||p===v||u()}),e.watch(()=>t.sessionKey,(p,v)=>{p!==v&&u()}),e.watch(()=>t.initialState,(p,v)=>{p!==v&&u()}),e.onUnmounted(()=>{s==null||s.disconnect(),s=null,r&&(r.destroy(),r=null)}),(p,v)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"containerRef",ref:i,class:"vanilla-editor-wrapper","data-testid":"vanilla-image-editor"},null,512))}}),Te=(a,n)=>{const t=a.__vccOpts||a;for(const[o,i]of n)t[o]=i;return t},Rl=Te(Ru,[["__scopeId","data-v-d5646104"]]),Du={class:"editor-modal-panel"},Au={class:"editor-fill"},Uu=e.defineComponent({__name:"ImageEditorModal",props:{modelValue:{type:Boolean,default:!1},initialImage:{},initialState:{default:null},sessionKey:{default:0},acceptedFormats:{default:"image/jpeg,image/png,image/webp,image/gif"},maxFileSize:{default:10},theme:{default:"auto"},cropShape:{default:"square"},preset:{},primaryColor:{default:"#3880ff"},secondaryColor:{default:"#5260ff"},saveButtonColor:{default:"#3880ff"},downloadButtonColor:{default:"#2dd36f"}},emits:["update:modelValue","save","cancel","error"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(null),r=e.ref(t.modelValue),s=e.ref(!1),l=e.ref(null),c=y=>{o("error",y)},d=()=>{e.nextTick(()=>{if(i.value){const y=i.value.querySelector("button:not([disabled]), [href], input:not([disabled])");y&&y.focus()}})};e.watch(()=>t.modelValue,y=>{r.value=y,y&&(l.value=document.activeElement,d())},{immediate:!0});const u=y=>{try{s.value=!0,o("save",y)}catch(V){c(V)}finally{s.value=!1}},p=()=>{o("cancel"),h()},v=()=>{s.value||h()},h=()=>{r.value=!1,o("update:modelValue",!1),l.value&&l.value instanceof HTMLElement&&(l.value.focus(),l.value=null)},g=y=>{if(y.key==="Escape"&&r.value&&!s.value){h();return}if(y.key==="Tab"&&r.value&&i.value){const V=i.value.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])');if(V.length===0)return;const B=V[0],_=V[V.length-1];y.shiftKey&&document.activeElement===B?(y.preventDefault(),_.focus()):!y.shiftKey&&document.activeElement===_&&(y.preventDefault(),B.focus())}};return e.onMounted(()=>{document.addEventListener("keydown",g)}),e.onBeforeUnmount(()=>{document.removeEventListener("keydown",g)}),(y,V)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"overlayRef",ref:i,role:"dialog","aria-modal":"true","aria-label":"Image editor",class:"editor-modal-overlay","data-testid":"image-editor-modal",onKeydown:e.withKeys(v,["escape"])},[e.createElementVNode("div",{class:"editor-modal-backdrop",onClick:v}),e.createElementVNode("div",Du,[e.createElementVNode("div",Au,[e.createVNode(Rl,{"initial-image":y.initialImage,"initial-state":y.initialState,"session-key":y.sessionKey,theme:y.theme,"crop-shape":y.cropShape,preset:y.preset,"primary-color":y.primaryColor,"secondary-color":y.secondaryColor,"save-button-color":y.saveButtonColor,"download-button-color":y.downloadButtonColor,onSave:u,onCancel:p,onError:c},null,8,["initial-image","initial-state","session-key","theme","crop-shape","preset","primary-color","secondary-color","save-button-color","download-button-color"])])])],544)):e.createCommentVNode("",!0)]))}}),Dl=Te(Uu,[["__scopeId","data-v-437b6a27"]]),Lu={class:"media-workspace"},Ou={class:"media-workspace-toolbar"},zu={class:"media-workspace-label"},Pu=["value"],ju={class:"media-workspace-grid"},Wu=["onClick"],Zu=e.defineComponent({__name:"MediaWorkspace",props:{apiScope:{},subScopes:{},initialScopeId:{}},emits:["scope-change","update:media","upload","preview"],setup(a,{emit:n}){var p;const t=a,o=n,i=Ct(),r=e.ref(t.initialScopeId??((p=t.subScopes[0])==null?void 0:p.id)??""),s=e.computed(()=>t.subScopes),l=e.computed(()=>s.value.find(v=>v.id===r.value));let c=null;function d(){c&&(c(),c=null),t.apiScope&&(c=Fl({apiScope:t.apiScope,isAdmin:t.apiScope==="admin"}))}async function u(){var h;const v={};(h=l.value)!=null&&h.collection&&(v.collection=l.value.collection),await i.fetchMedia(1,v),o("update:media",[...i.items])}return e.watch(()=>t.initialScopeId,v=>{v&&v!==r.value&&(r.value=v)}),e.watch(()=>t.subScopes,v=>{if(v.length===0){r.value="";return}v.some(h=>h.id===r.value)||(r.value=v[0].id)},{deep:!0}),e.watch(()=>t.apiScope,()=>{d(),u()}),e.watch(r,v=>{v&&(o("scope-change",v),u())}),e.onMounted(()=>{d(),u()}),e.onUnmounted(()=>{c&&(c(),c=null)}),(v,h)=>(e.openBlock(),e.createElementBlock("div",Lu,[e.createElementVNode("div",Ou,[e.createElementVNode("label",zu,[h[2]||(h[2]=e.createElementVNode("span",{class:"media-workspace-label-text"},"Scope",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[0]||(h[0]=g=>r.value=g),"data-testid":"scope-select",class:"media-workspace-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,g=>(e.openBlock(),e.createElementBlock("option",{key:g.id,value:g.id},e.toDisplayString(g.label),9,Pu))),128))],512),[[e.vModelSelect,r.value]])]),e.createElementVNode("button",{type:"button",class:"media-workspace-upload","data-testid":"upload-button",onClick:h[1]||(h[1]=g=>o("upload"))}," Upload ")]),e.createElementVNode("div",ju,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(i).items,g=>(e.openBlock(),e.createElementBlock("button",{key:g.uuid,type:"button",class:"media-workspace-item","data-testid":"media-item",onClick:y=>o("preview",g)},e.toDisplayString(g.file_name),9,Wu))),128))])]))}}),Xu=Te(Zu,[["__scopeId","data-v-895f26fe"]]),Hu={class:"managed-media-gallery"},Gu={class:"gallery-grid"},Ju=e.defineComponent({__name:"ManagedMediaGallery",props:{media:{},selectable:{type:Boolean},multiple:{type:Boolean}},emits:["select","remove"],setup(a){return(n,t)=>(e.openBlock(),e.createElementBlock("div",Hu,[e.createElementVNode("div",Gu,[e.renderSlot(n.$slots,"default",{},void 0,!0)])]))}}),Yu=Te(Ju,[["__scopeId","data-v-a60fdcd7"]]),Ku="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M256 176v160M336 256H176' class='ionicon-fill-none ionicon-stroke-width'/></svg>",yr="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M256 112v288M400 256H112' class='ionicon-fill-none ionicon-stroke-width'/></svg>",qu="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm0 319.91a20 20 0 1120-20 20 20 0 01-20 20zm21.72-201.15l-5.74 122a16 16 0 01-32 0l-5.74-121.94v-.05a21.74 21.74 0 1143.44 0z'/></svg>",br="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M250.26 166.05L256 288l5.73-121.95a5.74 5.74 0 00-5.79-6h0a5.74 5.74 0 00-5.68 6z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M256 367.91a20 20 0 1120-20 20 20 0 01-20 20z'/></svg>",Qu="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M244 400L100 256l144-144M120 256h292' class='ionicon-fill-none'/></svg>",em="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M268 112l144 144-144 144M392 256H100' class='ionicon-fill-none'/></svg>",po="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M452.37 59.63h0a40.49 40.49 0 00-57.26 0L184 294.74c23.08 4.7 46.12 27.29 49.26 49.26l219.11-227.11a40.49 40.49 0 000-57.26zM138 336c-29.88 0-54 24.5-54 54.86 0 23.95-20.88 36.57-36 36.57C64.56 449.74 92.82 464 120 464c39.78 0 72-32.73 72-73.14 0-30.36-24.12-54.86-54-54.86z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",tm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M350.54 148.68l-26.62-42.06C318.31 100.08 310.62 96 302 96h-92c-8.62 0-16.31 4.08-21.92 10.62l-26.62 42.06C155.85 155.23 148.62 160 140 160H80a32 32 0 00-32 32v192a32 32 0 0032 32h352a32 32 0 0032-32V192a32 32 0 00-32-32h-59c-8.65 0-16.85-4.77-22.46-11.32z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='256' cy='272' r='80' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M124 158v-22h-24v22' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Al="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm108.25 138.29l-134.4 160a16 16 0 01-12 5.71h-.27a16 16 0 01-11.89-5.3l-57.6-64a16 16 0 1123.78-21.4l45.29 50.32 122.59-145.91a16 16 0 0124.5 20.58z'/></svg>",Ul="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M416 128L192 384l-96-96' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Fs="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M328 112L184 256l144 144' class='ionicon-fill-none'/></svg>",nm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M112 184l144 144 144-144' class='ionicon-fill-none'/></svg>",om="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M184 112l144 144-144 144' class='ionicon-fill-none'/></svg>",$s="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' stroke-width='48' d='M184 112l144 144-144 144' class='ionicon-fill-none'/></svg>",Wn="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M368 368L144 144M368 144L144 368' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Rs="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M320 367.79h76c55 0 100-29.21 100-83.6s-53-81.47-96-83.6c-8.89-85.06-71-136.8-144-136.8-69 0-113.44 45.79-128 91.2-60 5.7-112 43.88-112 106.4s54 106.4 120 106.4h56' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M320 255.79l-64-64-64 64M256 448.21V207.79' class='ionicon-fill-none ionicon-stroke-width'/></svg>",am="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><circle cx='256' cy='184' r='120' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='344' cy='328' r='120' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='168' cy='328' r='120' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",fn="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M430.11 347.9c-6.6-6.1-16.3-7.6-24.6-9-11.5-1.9-15.9-4-22.6-10-14.3-12.7-14.3-31.1 0-43.8l30.3-26.9c46.4-41 46.4-108.2 0-149.2-34.2-30.1-80.1-45-127.8-45-55.7 0-113.9 20.3-158.8 60.1-83.5 73.8-83.5 194.7 0 268.5 41.5 36.7 97.5 55 152.9 55.4h1.7c55.4 0 110-17.9 148.8-52.4 14.4-12.7 11.99-36.6.1-47.7z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='144' cy='208' r='32'/><circle cx='152' cy='311' r='32'/><circle cx='224' cy='144' r='32'/><circle cx='256' cy='367' r='48'/><circle cx='328' cy='144' r='32'/></svg>",im="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M304 416V304h112M314.2 314.23L432 432M208 96v112H96M197.8 197.77L80 80M416 208H304V96M314.23 197.8L432 80M96 304h112v112M197.77 314.2L80 432' class='ionicon-fill-none ionicon-stroke-width'/></svg>",ro="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><circle cx='256' cy='256' r='208' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M256 464c-114.88 0-208-93.12-208-208S141.12 48 256 48z'/></svg>",rm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><rect x='128' y='128' width='336' height='336' rx='57' ry='57' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M383.5 128l.5-24a56.16 56.16 0 00-56-56H112a64.19 64.19 0 00-64 64v216a56.16 56.16 0 0056 56h24' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",sm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M384 224v184a40 40 0 01-40 40H104a40 40 0 01-40-40V168a40 40 0 0140-40h167.48' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M459.94 53.25a16.06 16.06 0 00-23.22-.56L424.35 65a8 8 0 000 11.31l11.34 11.32a8 8 0 0011.34 0l12.06-12c6.1-6.09 6.67-16.01.85-22.38zM399.34 90L218.82 270.2a9 9 0 00-2.31 3.93L208.16 299a3.91 3.91 0 004.86 4.86l24.85-8.35a9 9 0 003.93-2.31L422 112.66a9 9 0 000-12.66l-9.95-10a9 9 0 00-12.71 0z'/></svg>",Ds="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M144 48v272a48 48 0 0048 48h272' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M368 304V192a48 48 0 00-48-48H208M368 368v96M144 144H48' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Ll="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><circle cx='104' cy='152' r='56' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='104' cy='360' r='56' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M157 175l-11 15 37 15s3.46-6.42 7-10z' stroke-linecap='square' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M154.17 334.43L460 162c-2.5-6.7-28-12-64-4-29.12 6.47-121.16 29.05-159.16 56.05C205.85 236.06 227 272 192 298c-25.61 19-44.43 22.82-44.43 22.82zM344.47 278.24L295 306.67c14.23 6.74 65.54 33.27 117 36.33 14.92.89 30 .39 39-6z' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='256' cy='240' r='32' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",So="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M336 176h40a40 40 0 0140 40v208a40 40 0 01-40 40H136a40 40 0 01-40-40V216a40 40 0 0140-40h40' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M176 272l80 80 80-80M256 48v288' class='ionicon-fill-none ionicon-stroke-width'/></svg>",lm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M432 320v112H320M421.8 421.77L304 304M80 192V80h112M90.2 90.23L208 208M320 80h112v112M421.77 90.2L304 208M192 432H80V320M90.23 421.8L208 304' class='ionicon-fill-none ionicon-stroke-width'/></svg>",cm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M432 320v112H320M421.8 421.77L304 304M80 192V80h112M90.2 90.23L208 208M320 80h112v112M421.77 90.2L304 208M192 432H80V320M90.23 421.8L208 304' class='ionicon-fill-none ionicon-stroke-width'/></svg>",dm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M432 448a15.92 15.92 0 01-11.31-4.69l-352-352a16 16 0 0122.62-22.62l352 352A16 16 0 01432 448zM255.66 384c-41.49 0-81.5-12.28-118.92-36.5-34.07-22-64.74-53.51-88.7-91v-.08c19.94-28.57 41.78-52.73 65.24-72.21a2 2 0 00.14-2.94L93.5 161.38a2 2 0 00-2.71-.12c-24.92 21-48.05 46.76-69.08 76.92a31.92 31.92 0 00-.64 35.54c26.41 41.33 60.4 76.14 98.28 100.65C162 402 207.9 416 255.66 416a239.13 239.13 0 0075.8-12.58 2 2 0 00.77-3.31l-21.58-21.58a4 4 0 00-3.83-1 204.8 204.8 0 01-51.16 6.47zM490.84 238.6c-26.46-40.92-60.79-75.68-99.27-100.53C349 110.55 302 96 255.66 96a227.34 227.34 0 00-74.89 12.83 2 2 0 00-.75 3.31l21.55 21.55a4 4 0 003.88 1 192.82 192.82 0 0150.21-6.69c40.69 0 80.58 12.43 118.55 37 34.71 22.4 65.74 53.88 89.76 91a.13.13 0 010 .16 310.72 310.72 0 01-64.12 72.73 2 2 0 00-.15 2.95l19.9 19.89a2 2 0 002.7.13 343.49 343.49 0 0068.64-78.48 32.2 32.2 0 00-.1-34.78z'/><path d='M256 160a95.88 95.88 0 00-21.37 2.4 2 2 0 00-1 3.38l112.59 112.56a2 2 0 003.38-1A96 96 0 00256 160zM165.78 233.66a2 2 0 00-3.38 1 96 96 0 00115 115 2 2 0 001-3.38z'/></svg>",fo="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M255.66 112c-77.94 0-157.89 45.11-220.83 135.33a16 16 0 00-.27 17.77C82.92 340.8 161.8 400 255.66 400c92.84 0 173.34-59.38 221.79-135.25a16.14 16.14 0 000-17.47C428.89 172.28 347.8 112 255.66 112z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='256' cy='256' r='80' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",As="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M80 464V68.14a8 8 0 014-6.9C91.81 56.66 112.92 48 160 48c64 0 145 48 192 48a199.53 199.53 0 0077.23-15.77 2 2 0 012.77 1.85v219.36a4 4 0 01-2.39 3.65C421.37 308.7 392.33 320 352 320c-48 0-128-32-192-32s-80 16-80 16' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Mi="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M315.27 33L96 304h128l-31.51 173.23a2.36 2.36 0 002.33 2.77h0a2.36 2.36 0 001.89-.95L416 208H288l31.66-173.25a2.45 2.45 0 00-2.44-2.75h0a2.42 2.42 0 00-1.95 1z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",um="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M496 152a56 56 0 00-56-56H220.11a23.89 23.89 0 01-13.31-4L179 73.41A55.77 55.77 0 00147.89 64H72a56 56 0 00-56 56v48a8 8 0 008 8h464a8 8 0 008-8zM16 392a56 56 0 0056 56h368a56 56 0 0056-56V216a8 8 0 00-8-8H24a8 8 0 00-8 8z'/></svg>",mm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><circle cx='129' cy='96' r='48' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='129' cy='416' r='48' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M129 144v224' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='385' cy='288' r='48' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M129 144c0 96 112 144 208 144' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Bi="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M432 112V96a48.14 48.14 0 00-48-48H64a48.14 48.14 0 00-48 48v256a48.14 48.14 0 0048 48h16' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><rect x='96' y='128' width='400' height='336' rx='45.99' ry='45.99' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><ellipse cx='372.92' cy='219.64' rx='30.77' ry='30.55' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M342.15 372.17L255 285.78a30.93 30.93 0 00-42.18-1.21L96 387.64M265.23 464l118.59-117.73a31 31 0 0141.46-1.87L496 402.91' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",pm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M248 64C146.39 64 64 146.39 64 248s82.39 184 184 184 184-82.39 184-184S349.61 64 248 64z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M220 220h32v116' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-miterlimit='10' d='M208 340h88' class='ionicon-fill-none ionicon-stroke-width'/><path d='M248 130a26 26 0 1026 26 26 26 0 00-26-26z'/></svg>",fm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M368 128h80M64 128h240M368 384h80M64 384h240M208 256h240M64 256h80' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='336' cy='128' r='32' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='176' cy='256' r='32' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='336' cy='384' r='32' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",hm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M208 432h-48a16 16 0 01-16-16V96a16 16 0 0116-16h48a16 16 0 0116 16v320a16 16 0 01-16 16zM352 432h-48a16 16 0 01-16-16V96a16 16 0 0116-16h48a16 16 0 0116 16v320a16 16 0 01-16 16z'/></svg>",vm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm-32 272a16 16 0 01-32 0V192a16 16 0 0132 0zm96 0a16 16 0 01-32 0V192a16 16 0 0132 0z'/></svg>",Ol="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-miterlimit='10' d='M208 192v128M304 192v128' class='ionicon-fill-none ionicon-stroke-width'/></svg>",zl="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M176 96h16v320h-16zM320 96h16v320h-16z' class='ionicon-fill-none ionicon-stroke-width'/></svg>",gm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M133 440a35.37 35.37 0 01-17.5-4.67c-12-6.8-19.46-20-19.46-34.33V111c0-14.37 7.46-27.53 19.46-34.33a35.13 35.13 0 0135.77.45l247.85 148.36a36 36 0 010 61l-247.89 148.4A35.5 35.5 0 01133 440z'/></svg>",ym="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M30.71 229.47l188.87-113a30.54 30.54 0 0131.09-.39 33.74 33.74 0 0116.76 29.47v79.05l180.72-108.16a30.54 30.54 0 0131.09-.39A33.74 33.74 0 01496 145.52v221A33.73 33.73 0 01479.24 396a30.54 30.54 0 01-31.09-.39L267.43 287.4v79.08A33.73 33.73 0 01250.67 396a30.54 30.54 0 01-31.09-.39l-188.87-113a31.27 31.27 0 010-53z'/></svg>",bm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M480 145.52v221c0 13.28-13 21.72-23.63 15.35L267.5 268.8c-9.24-5.53-9.24-20.07 0-25.6l188.87-113C467 123.8 480 132.24 480 145.52zM251.43 145.52v221c0 13.28-13 21.72-23.63 15.35L38.93 268.8c-9.24-5.53-9.24-20.07 0-25.6l188.87-113c10.64-6.4 23.63 2.04 23.63 15.32z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",wm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208 208-93.31 208-208S370.69 48 256 48zm74.77 217.3l-114.45 69.14a10.78 10.78 0 01-16.32-9.31V186.87a10.78 10.78 0 0116.32-9.31l114.45 69.14a10.89 10.89 0 010 18.6z'/></svg>",Pl="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M216.32 334.44l114.45-69.14a10.89 10.89 0 000-18.6l-114.45-69.14a10.78 10.78 0 00-16.32 9.31v138.26a10.78 10.78 0 0016.32 9.31z'/></svg>",km="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M481.29 229.47l-188.87-113a30.54 30.54 0 00-31.09-.39 33.74 33.74 0 00-16.76 29.47v79.05L63.85 116.44a30.54 30.54 0 00-31.09-.39A33.74 33.74 0 0016 145.52v221A33.74 33.74 0 0032.76 396a30.54 30.54 0 0031.09-.39L244.57 287.4v79.08A33.74 33.74 0 00261.33 396a30.54 30.54 0 0031.09-.39l188.87-113a31.27 31.27 0 000-53z'/></svg>",xm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M32 145.52v221c0 13.28 13 21.72 23.63 15.35l188.87-113c9.24-5.53 9.24-20.07 0-25.6l-188.87-113C45 123.8 32 132.24 32 145.52zM260.57 145.52v221c0 13.28 13 21.72 23.63 15.35l188.87-113c9.24-5.53 9.24-20.07 0-25.6l-188.87-113c-10.64-6.47-23.63 1.97-23.63 15.25z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",jl="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M112 111v290c0 17.44 17 28.52 31 20.16l247.9-148.37c12.12-7.25 12.12-26.33 0-33.58L143 90.84c-14-8.36-31 2.72-31 20.16z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Em="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M400 111v290c0 17.44-17 28.52-31 20.16L121.09 272.79c-12.12-7.25-12.12-26.33 0-33.58L369 90.84c14-8.36 31 2.72 31 20.16z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-miterlimit='10' d='M112 80v352' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Vm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M112 111v290c0 17.44 17 28.52 31 20.16l247.9-148.37c12.12-7.25 12.12-26.33 0-33.58L143 90.84c-14-8.36-31 2.72-31 20.16z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-miterlimit='10' d='M400 80v352' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Gn="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M320 146s24.36-12-64-12a160 160 0 10160 160' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M256 58l80 80-80 80' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Sm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M448 256c0-106-86-192-192-192S64 150 64 256s86 192 192 192 192-86 192-192z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-linejoin='round' d='M336 256H176' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Cm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M400 256H112' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Us="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M304 96h112v112M405.77 106.2L111.98 400.02M208 416H96V304' class='ionicon-fill-none ionicon-stroke-width'/></svg>",wr="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M380.93 57.37A32 32 0 00358.3 48H94.22A46.21 46.21 0 0048 94.22v323.56A46.21 46.21 0 0094.22 464h323.56A46.36 46.36 0 00464 417.78V153.7a32 32 0 00-9.37-22.63zM256 416a64 64 0 1164-64 63.92 63.92 0 01-64 64zm48-224H112a16 16 0 01-16-16v-64a16 16 0 0116-16h192a16 16 0 0116 16v64a16 16 0 01-16 16z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",_m="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><circle cx='256' cy='256' r='48'/><path d='M470.39 300l-.47-.38-31.56-24.75a16.11 16.11 0 01-6.1-13.33v-11.56a16 16 0 016.11-13.22L469.92 212l.47-.38a26.68 26.68 0 005.9-34.06l-42.71-73.9a1.59 1.59 0 01-.13-.22A26.86 26.86 0 00401 92.14l-.35.13-37.1 14.93a15.94 15.94 0 01-14.47-1.29q-4.92-3.1-10-5.86a15.94 15.94 0 01-8.19-11.82l-5.59-39.59-.12-.72A27.22 27.22 0 00298.76 26h-85.52a26.92 26.92 0 00-26.45 22.39l-.09.56-5.57 39.67a16 16 0 01-8.13 11.82 175.21 175.21 0 00-10 5.82 15.92 15.92 0 01-14.43 1.27l-37.13-15-.35-.14a26.87 26.87 0 00-32.48 11.34l-.13.22-42.77 73.95a26.71 26.71 0 005.9 34.1l.47.38 31.56 24.75a16.11 16.11 0 016.1 13.33v11.56a16 16 0 01-6.11 13.22L42.08 300l-.47.38a26.68 26.68 0 00-5.9 34.06l42.71 73.9a1.59 1.59 0 01.13.22 26.86 26.86 0 0032.45 11.3l.35-.13 37.07-14.93a15.94 15.94 0 0114.47 1.29q4.92 3.11 10 5.86a15.94 15.94 0 018.19 11.82l5.56 39.59.12.72A27.22 27.22 0 00213.24 486h85.52a26.92 26.92 0 0026.45-22.39l.09-.56 5.57-39.67a16 16 0 018.18-11.82c3.42-1.84 6.76-3.79 10-5.82a15.92 15.92 0 0114.43-1.27l37.13 14.95.35.14a26.85 26.85 0 0032.48-11.34 2.53 2.53 0 01.13-.22l42.71-73.89a26.7 26.7 0 00-5.89-34.11zm-134.48-40.24a80 80 0 11-83.66-83.67 80.21 80.21 0 0183.66 83.67z'/></svg>",Ii="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M400 304l48 48-48 48M400 112l48 48-48 48M64 352h85.19a80 80 0 0066.56-35.62L256 256' class='ionicon-fill-none ionicon-stroke-width'/><path d='M64 160h85.19a80 80 0 0166.56 35.62l80.5 120.76A80 80 0 00362.81 352H416M416 160h-53.19a80 80 0 00-66.56 35.62L288 208' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",pn="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' class='ionicon'><path d='M259.92 262.91L216.4 149.77a9 9 0 00-16.8 0l-43.52 113.14a9 9 0 01-5.17 5.17L37.77 311.6a9 9 0 000 16.8l113.14 43.52a9 9 0 015.17 5.17l43.52 113.14a9 9 0 0016.8 0l43.52-113.14a9 9 0 015.17-5.17l113.14-43.52a9 9 0 000-16.8l-113.14-43.52a9 9 0 01-5.17-5.17zM108 68L88 16 68 68 16 88l52 20 20 52 20-52 52-20-52-20zM426.67 117.33L400 48l-26.67 69.33L304 144l69.33 26.67L400 240l26.67-69.33L496 144l-69.33-26.67z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",so="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-miterlimit='10' d='M256 48v48M256 416v48M403.08 108.92l-33.94 33.94M142.86 369.14l-33.94 33.94M464 256h-48M96 256H48M403.08 403.08l-33.94-33.94M142.86 142.86l-33.94-33.94' class='ionicon-fill-none ionicon-stroke-width'/><circle cx='256' cy='256' r='80' stroke-linecap='round' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Ls="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M304 48l112 112-112 112M398.87 160H96M208 464L96 352l112-112M114 352h302' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Nm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M512 128v256a64.07 64.07 0 01-64 64H64a64.07 64.07 0 01-64-64V128a64.07 64.07 0 0164-64h384a64.07 64.07 0 0164 64zM32 384a32 32 0 0032 32h384a32 32 0 0032-32V128a32 32 0 00-32-32H64a32 32 0 00-32 32z'/><path d='M0 128a64.07 64.07 0 0164-64h384a64.07 64.07 0 0164 64v256a64.07 64.07 0 01-64 64H64a64.07 64.07 0 01-64-64V128m480 256V128a32 32 0 00-32-32H64a32 32 0 00-32 32v256a32 32 0 0032 32h384a32 32 0 0032-32m-16 0a16 16 0 01-16 16H64a16 16 0 01-16-16V128a16 16 0 0116-16h384a16 16 0 0116 16v256z'/></svg>",Wl="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-linejoin='round' d='M32 415.5l120-320 120 320M230 303.5H74M326 239.5c12.19-28.69 41-48 74-48h0c46 0 80 32 80 80v144' class='ionicon-fill-none ionicon-stroke-width'/><path d='M320 358.5c0 36 26.86 58 60 58 54 0 100-27 100-106v-15c-20 0-58 1-92 5-32.77 3.86-68 19-68 58z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Tm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M112 112l20 320c.95 18.49 14.4 32 32 32h184c17.67 0 30.87-13.51 32-32l20-320' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path stroke-linecap='round' stroke-miterlimit='10' d='M80 112h352' class='ionicon-stroke-width'/><path d='M192 112V72h0a23.93 23.93 0 0124-24h80a23.93 23.93 0 0124 24h0v40M256 176v224M184 176l8 224M328 176l-8 224' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Zl="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M374.79 308.78L457.5 367a16 16 0 0022.5-14.62V159.62A16 16 0 00457.5 145l-82.71 58.22A16 16 0 00368 216.3v79.4a16 16 0 006.79 13.08z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M268 384H84a52.15 52.15 0 01-52-52V180a52.15 52.15 0 0152-52h184.48A51.68 51.68 0 01320 179.52V332a52.15 52.15 0 01-52 52z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/></svg>",Mm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M232 416a23.88 23.88 0 01-14.2-4.68 8.27 8.27 0 01-.66-.51L125.76 336H56a24 24 0 01-24-24V200a24 24 0 0124-24h69.75l91.37-74.81a8.27 8.27 0 01.66-.51A24 24 0 01256 120v272a24 24 0 01-24 24zm-106.18-80zm-.27-159.86zM320 336a16 16 0 01-14.29-23.19c9.49-18.87 14.3-38 14.3-56.81 0-19.38-4.66-37.94-14.25-56.73a16 16 0 0128.5-14.54C346.19 208.12 352 231.44 352 256c0 23.86-6 47.81-17.7 71.19A16 16 0 01320 336z'/><path d='M368 384a16 16 0 01-13.86-24C373.05 327.09 384 299.51 384 256c0-44.17-10.93-71.56-29.82-103.94a16 16 0 0127.64-16.12C402.92 172.11 416 204.81 416 256c0 50.43-13.06 83.29-34.13 120a16 16 0 01-13.87 8z'/><path d='M416 432a16 16 0 01-13.39-24.74C429.85 365.47 448 323.76 448 256c0-66.5-18.18-108.62-45.49-151.39a16 16 0 1127-17.22C459.81 134.89 480 181.74 480 256c0 64.75-14.66 113.63-50.6 168.74A16 16 0 01416 432z'/></svg>",Bm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M296 416.19a23.92 23.92 0 01-14.21-4.69l-.66-.51-91.46-75H120a24 24 0 01-24-24V200a24 24 0 0124-24h69.65l91.46-75 .66-.51A24 24 0 01320 119.83v272.34a24 24 0 01-24 24zM384 336a16 16 0 01-14.29-23.18c9.49-18.9 14.3-38 14.3-56.82 0-19.36-4.66-37.92-14.25-56.73a16 16 0 0128.5-14.54C410.2 208.16 416 231.47 416 256c0 23.83-6 47.78-17.7 71.18A16 16 0 01384 336z'/></svg>",Im="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M264 416.19a23.92 23.92 0 01-14.21-4.69l-.66-.51-91.46-75H88a24 24 0 01-24-24V200a24 24 0 0124-24h69.65l91.46-75 .66-.51A24 24 0 01288 119.83v272.34a24 24 0 01-24 24zM352 336a16 16 0 01-14.29-23.18c9.49-18.9 14.3-38 14.3-56.82 0-19.36-4.66-37.92-14.25-56.73a16 16 0 0128.5-14.54C378.2 208.16 384 231.47 384 256c0 23.83-6 47.78-17.7 71.18A16 16 0 01352 336z'/><path d='M400 384a16 16 0 01-13.87-24C405 327.05 416 299.45 416 256c0-44.12-10.94-71.52-29.83-103.95A16 16 0 01413.83 136C434.92 172.16 448 204.88 448 256c0 50.36-13.06 83.24-34.12 120a16 16 0 01-13.88 8z'/></svg>",Fm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M157.65 192H88a8 8 0 00-8 8v112a8 8 0 008 8h69.65a16 16 0 0110.14 3.63l91.47 75a8 8 0 0012.74-6.46V119.83a8 8 0 00-12.74-6.44l-91.47 75a16 16 0 01-10.14 3.61zM352 320c9.74-19.41 16-40.81 16-64 0-23.51-6-44.4-16-64M400 368c19.48-34 32-64 32-112s-12-77.7-32-112' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>",$m="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-miterlimit='10' d='M416 432L64 80' class='ionicon-fill-none ionicon-stroke-width'/><path d='M243.33 98.86a23.89 23.89 0 00-25.55 1.82l-.66.51-28.52 23.35a8 8 0 00-.59 11.85l54.33 54.33a8 8 0 0013.66-5.66v-64.49a24.51 24.51 0 00-12.67-21.71zM251.33 335.29L96.69 180.69A16 16 0 0085.38 176H56a24 24 0 00-24 24v112a24 24 0 0024 24h69.76l92 75.31a23.9 23.9 0 0025.87 1.69A24.51 24.51 0 00256 391.45v-44.86a16 16 0 00-4.67-11.3zM352 256c0-24.56-5.81-47.87-17.75-71.27a16 16 0 10-28.5 14.55C315.34 218.06 320 236.62 320 256q0 4-.31 8.13a8 8 0 002.32 6.25l14.36 14.36a8 8 0 0013.55-4.31A146 146 0 00352 256zM416 256c0-51.18-13.08-83.89-34.18-120.06a16 16 0 00-27.64 16.12C373.07 184.44 384 211.83 384 256c0 23.83-3.29 42.88-9.37 60.65a8 8 0 001.9 8.26L389 337.4a8 8 0 0013.13-2.79C411 311.76 416 287.26 416 256z'/><path d='M480 256c0-74.25-20.19-121.11-50.51-168.61a16 16 0 10-27 17.22C429.82 147.38 448 189.5 448 256c0 46.19-8.43 80.27-22.43 110.53a8 8 0 001.59 9l11.92 11.92a8 8 0 0012.92-2.16C471.6 344.9 480 305 480 256z'/></svg>",Rm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path stroke-linecap='round' stroke-miterlimit='10' d='M416 432L64 80' class='ionicon-fill-none ionicon-stroke-width'/><path d='M224 136.92v33.8a4 4 0 001.17 2.82l24 24a4 4 0 006.83-2.82v-74.15a24.53 24.53 0 00-12.67-21.72 23.91 23.91 0 00-25.55 1.83 8.27 8.27 0 00-.66.51l-31.94 26.15a4 4 0 00-.29 5.92l17.05 17.06a4 4 0 005.37.26zM224 375.08l-78.07-63.92a32 32 0 00-20.28-7.16H64v-96h50.72a4 4 0 002.82-6.83l-24-24a4 4 0 00-2.82-1.17H56a24 24 0 00-24 24v112a24 24 0 0024 24h69.76l91.36 74.8a8.27 8.27 0 00.66.51 23.93 23.93 0 0025.85 1.69A24.49 24.49 0 00256 391.45v-50.17a4 4 0 00-1.17-2.82l-24-24a4 4 0 00-6.83 2.82zM125.82 336zM352 256c0-24.56-5.81-47.88-17.75-71.27a16 16 0 00-28.5 14.54C315.34 218.06 320 236.62 320 256q0 4-.31 8.13a8 8 0 002.32 6.25l19.66 19.67a4 4 0 006.75-2A146.89 146.89 0 00352 256zM416 256c0-51.19-13.08-83.89-34.18-120.06a16 16 0 00-27.64 16.12C373.07 184.44 384 211.83 384 256c0 23.83-3.29 42.88-9.37 60.65a8 8 0 001.9 8.26l16.77 16.76a4 4 0 006.52-1.27C410.09 315.88 416 289.91 416 256z'/><path d='M480 256c0-74.26-20.19-121.11-50.51-168.61a16 16 0 10-27 17.22C429.82 147.38 448 189.5 448 256c0 47.45-8.9 82.12-23.59 113a4 4 0 00.77 4.55L443 391.39a4 4 0 006.4-1C470.88 348.22 480 307 480 256z'/></svg>",Dm="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M85.57 446.25h340.86a32 32 0 0028.17-47.17L284.18 82.58c-12.09-22.44-44.27-22.44-56.36 0L57.4 399.08a32 32 0 0028.17 47.17z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M250.26 195.39l5.74 122 5.73-121.95a5.74 5.74 0 00-5.79-6h0a5.74 5.74 0 00-5.68 5.95z' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/><path d='M256 397.25a20 20 0 1120-20 20 20 0 01-20 20z'/></svg>",qo="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'><path d='M400 320c0 88.37-55.63 144-144 144s-144-55.63-144-144c0-94.83 103.23-222.85 134.89-259.88a12 12 0 0118.23 0C296.77 97.15 400 225.17 400 320z' stroke-miterlimit='10' class='ionicon-fill-none ionicon-stroke-width'/><path d='M344 328a72 72 0 01-72 72' stroke-linecap='round' stroke-linejoin='round' class='ionicon-fill-none ionicon-stroke-width'/></svg>";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Os=()=>{};function Am(a,n){function t(...o){return new Promise((i,r)=>{Promise.resolve(a(()=>n.apply(this,o),{fn:n,thisArg:this,args:o})).then(i).catch(r)})}return t}function Um(a,n={}){let t,o,i=Os;const r=c=>{clearTimeout(c),i(),i=Os};let s;return c=>{const d=e.toValue(a),u=e.toValue(n.maxWait);return t&&r(t),d<=0||u!==void 0&&u<=0?(o&&(r(o),o=null),Promise.resolve(c())):new Promise((p,v)=>{i=n.rejectOnCancel?v:p,s=c,u&&!o&&(o=setTimeout(()=>{t&&r(t),o=null,p(s())},u)),t=setTimeout(()=>{o&&r(o),o=null,p(c())},d)})}}function Lm(a,n=200,t={}){return Am(Um(n,t),a)}const lo=new Map;function Om(a){const n=e.getCurrentScope();function t(l){var c;const d=lo.get(a)||new Set;d.add(l),lo.set(a,d);const u=()=>i(l);return(c=n==null?void 0:n.cleanups)==null||c.push(u),u}function o(l){function c(...d){i(c),l(...d)}return t(c)}function i(l){const c=lo.get(a);c&&(c.delete(l),c.size||r())}function r(){lo.delete(a)}function s(l,c){var d;(d=lo.get(a))==null||d.forEach(u=>u(l,c))}return{on:t,once:o,off:i,emit:s,reset:r}}function Xl(){var r,s;const a=typeof window<"u"&&"Capacitor"in window&&((s=(r=window.Capacitor)==null?void 0:r.isNativePlatform)==null?void 0:s.call(r));return{selection:()=>{var l,c;if(a)try{const d=(c=(l=window.Capacitor)==null?void 0:l.Plugins)==null?void 0:c.Haptics;d&&d.impact({style:"LIGHT"})}catch{}else"vibrate"in navigator&&navigator.vibrate(10)},success:()=>{var l,c;if(a)try{const d=(c=(l=window.Capacitor)==null?void 0:l.Plugins)==null?void 0:c.Haptics;d&&d.impact({style:"MEDIUM"})}catch{}else"vibrate"in navigator&&navigator.vibrate(30)},error:()=>{var l,c;if(a)try{const d=(c=(l=window.Capacitor)==null?void 0:l.Plugins)==null?void 0:c.Haptics;d&&d.impact({style:"HEAVY"})}catch{}else"vibrate"in navigator&&navigator.vibrate([50,50,50])},notification:()=>{var l,c;if(a)try{const d=(c=(l=window.Capacitor)==null?void 0:l.Plugins)==null?void 0:c.Haptics;d&&d.notification({type:"SUCCESS"})}catch{}else"vibrate"in navigator&&navigator.vibrate([20,100,20])}}}function zm(a){const n=e.ref(new Set),t=e.ref(null),o=e.ref(-1),i=Om("media-selection"),r=Xl(),s=e.computed(()=>a.value.filter(w=>n.value.has(w.uuid))),l=e.computed(()=>n.value.size);e.watch(n,w=>{i.emit({type:"selection:changed",count:w.size,selectedIds:Array.from(w)})},{deep:!0});const c=e.computed(()=>a.value.length>0&&a.value.every(w=>n.value.has(w.uuid))),d=e.computed(()=>a.value.some(w=>n.value.has(w.uuid)));function u(w){return n.value.has(w)}function p(w){n.value.has(w)?(n.value.delete(w),t.value===w&&(t.value=null,o.value=-1)):(n.value.add(w),t.value=w,o.value=a.value.findIndex(I=>I.uuid===w),n.value.size===1&&r.selection())}function v(w){n.value.add(w),t.value=w,o.value=a.value.findIndex(I=>I.uuid===w)}function h(w){n.value.delete(w),t.value===w&&(t.value=null,o.value=-1)}function g(){a.value.forEach(w=>n.value.add(w.uuid))}function y(){n.value.clear(),t.value=null,o.value=-1}function V(){c.value?y():g()}function B(w,I){const N=a.value.findIndex(x=>x.uuid===w);if(N!==-1)if(I!=null&&I.shiftKey&&o.value!==-1){const x=Math.min(o.value,N),T=Math.max(o.value,N);for(let H=x;H<=T;H++)n.value.add(a.value[H].uuid)}else p(w)}function _(){if(a.value.length===0)return;let w=o.value+1;w>=a.value.length&&(w=0),y(),v(a.value[w].uuid)}function b(){if(a.value.length===0)return;let w=o.value-1;w<0&&(w=a.value.length-1),y(),v(a.value[w].uuid)}function m(w){switch(w.key){case"ArrowDown":w.preventDefault(),_();break;case"ArrowUp":w.preventDefault(),b();break;case"a":(w.ctrlKey||w.metaKey)&&(w.preventDefault(),g());break;case"Escape":w.preventDefault(),y();break;case" ":t.value&&(w.preventDefault(),p(t.value));break}}return{selectedIds:e.computed(()=>n.value),selectedItems:s,selectedCount:l,isAllSelected:c,isSomeSelected:d,lastSelectedId:e.computed(()=>t.value),isSelected:u,toggle:p,select:v,deselect:h,selectAll:g,clear:y,toggleAll:V,rangeSelect:B,selectNext:_,selectPrevious:b,handleKeydown:m,selectionBus:i}}const Pm={class:"flex items-center justify-between w-full px-4"},jm={class:"p-4"},Wm={key:0,class:"mb-4 p-4 bg-gray-50 dark:bg-gray-800 rounded-lg"},Zm={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"},Xm=["value"],Hm={class:"flex gap-2 mt-4"},Gm={class:"flex justify-end mb-4"},Jm={key:1,class:"flex justify-center items-center h-64"},Ym={key:2,class:"flex flex-col items-center justify-center h-64 text-center"},Km={class:"text-sm text-theme-secondary"},qm={key:0},Qm={class:"mb-4"},ep={class:"mb-4"},tp={class:"flex gap-2"},np={class:"flex items-center justify-between px-4 py-2"},op={class:"text-sm text-theme-secondary"},ap={key:0},ip={key:0},rp={key:1},sp={class:"flex gap-2"},lp=e.defineComponent({__name:"AdminMediaBrowser",props:{isOpen:{type:Boolean},selectionMode:{default:"single"},selectedItems:{default:()=>[]},modelType:{},modelId:{},collection:{default:"images"},maxSelection:{}},emits:["close","confirm"],setup(a,{emit:n}){const t=a,o=n,i=e.ref("recent"),r=e.ref("grid"),s=e.ref(""),l=e.ref(!1),c=e.ref([]),{selectedItems:d}=e.toRefs(t),u=e.ref(new Set(d.value)),p=e.ref(!1),v=e.ref({}),h=e.ref(["images","documents","videos"]),g=e.ref(1),y=e.ref(!0),V=e.ref(!1),B=$l(),_=zm(c);function b($){var ue;const O=$.conversion_urls||{},me=$.proxy_url||$.original_url||$.url||"",ne=O.thumb||O.preview||$.preview_url||$.thumbnail_url||me,ee=$.custom_properties||{},pe=ee.width,ae=ee.height;return{...$,uuid:$.uuid,name:$.name||$.file_name,file_name:$.file_name,filename:$.file_name,mime_type:$.mime_type,size:$.size,collection_name:$.collection_name||"images",disk:$.disk,original_url:me,url:me,thumbnail_url:ne,conversions:$.conversions||{},conversion_urls:O,generated_conversions:$.generated_conversions||{},custom_properties:ee,caption:$.caption||null,alt_text:$.alt_text||null,created_at:$.created_at,updated_at:$.updated_at,is_image:((ue=$.mime_type)==null?void 0:ue.startsWith("image/"))||!1,...typeof pe=="number"?{width:pe}:{},...typeof ae=="number"?{height:ae}:{},...$.formatted_size!==void 0?{formatted_size:$.formatted_size}:{}}}e.watch(()=>t.selectedItems,$=>{u.value=new Set($),_.clear(),$.forEach(O=>_.select(O))});const m=e.computed(()=>{var O;let $=c.value;return(O=v.value.types)!=null&&O.length&&($=$.filter(me=>{var ee,pe;const ne=(ee=me.mime_type)==null?void 0:ee.split("/")[0];return(pe=v.value.types)==null?void 0:pe.includes(ne)})),(v.value.sizeMin!==void 0||v.value.sizeMax!==void 0)&&($=$.filter(me=>{const ne=me.size/1048576;return!(v.value.sizeMin!==void 0&&ne<v.value.sizeMin||v.value.sizeMax!==void 0&&ne>v.value.sizeMax)})),$}),w=e.computed(()=>{var O;let $=0;return v.value.search&&$++,v.value.collection&&$++,(v.value.dateFrom||v.value.dateTo)&&$++,(O=v.value.types)!=null&&O.length&&($+=v.value.types.length),(v.value.sizeMin!==void 0||v.value.sizeMax!==void 0)&&$++,$}),I=e.computed(()=>{const $=_.selectedCount.value;return $===0?"Select Media":`Select ${t.selectionMode==="multiple"?`${$} ${$===1?"Item":"Items"}`:"Item"}`}),N=e.computed(()=>{const $=_.selectedCount.value;return!!($===0||t.selectionMode==="single"&&$>1||t.maxSelection&&$>t.maxSelection)}),x=e.computed(()=>{switch(i.value){case"recent":return"Recent Uploads";case"model":return"Model Media";case"library":return"Media Library";default:return"Media Browser"}});async function T($=!0){$?(l.value=!0,c.value=[],g.value=1,y.value=!0):V.value=!0;try{const O={collection:v.value.collection||t.collection,per_page:24};switch((s.value||v.value.search)&&(O.search=s.value||v.value.search||""),v.value.dateFrom&&(O.from_date=v.value.dateFrom),v.value.dateTo&&(O.to_date=v.value.dateTo),i.value){case"recent":await B.fetchMedia(g.value,O),$?c.value=B.items.map(me=>b(me)):c.value=[...c.value,...B.items.map(me=>b(me))],y.value=B.currentPage<B.totalPages;break;case"model":if(t.modelType&&t.modelId){const me=await B.fetchModelMedia(t.modelType,t.modelId,O.collection,O.search);c.value=me?me.map(ne=>b(ne)):[],y.value=!1}break;case"library":await B.fetchMedia(g.value,O),$?c.value=B.items.map(me=>b(me)):c.value=[...c.value,...B.items.map(me=>b(me))],y.value=B.currentPage<B.totalPages;break}}catch{}finally{l.value=!1,V.value=!1}}async function H($){if(!y.value||V.value){$!=null&&$.target&&$.target.complete();return}g.value++,await T(!1),$!=null&&$.target&&($.target.complete(),y.value||($.target.disabled=!0))}function E($){return $==="recent"||$==="model"||$==="library"}function R($){i.value=$,T()}function A($){typeof $=="string"&&E($)&&R($)}async function P($){t.selectionMode==="single"?(_.clear(),_.select($.uuid)):(_.toggle($.uuid),t.maxSelection&&_.selectedCount.value>t.maxSelection&&(_.deselect($.uuid),await(await D.toastController.create({message:`Maximum ${t.maxSelection} items can be selected`,duration:2e3,color:"warning"})).present()))}function M(){o("confirm",_.selectedItems.value)}function j(){o("close")}function U($){}const S=e.ref(null),F=e.ref(!1);function J($){S.value=$,F.value=!0}function G($){const O=c.value.findIndex(ne=>ne.uuid===$.uuid);O!==-1&&(c.value[O]=$);const me={};$.alt_text!==void 0&&(me.alt_text=$.alt_text),$.caption!==void 0&&(me.caption=$.caption),$.custom_properties!==void 0&&(me.custom_properties=$.custom_properties),B.updateMedia($.uuid,me)}function Q(){T()}function ge(){v.value={},s.value="",T()}const be=Lm(()=>{T(!0)},300);e.watch(s,()=>{t.isOpen&&be()});async function te($){try{await(await D.alertController.create({header:"Delete Media",message:"Are you sure you want to delete this media item?",buttons:[{text:"Cancel",role:"cancel"},{text:"Delete",role:"destructive",handler:async()=>{await B.deleteMedia($),await T()}}]})).present()}catch{}}return e.watch(()=>t.isOpen,$=>{$&&T()}),e.onMounted(()=>{t.selectedItems.length>0&&t.selectedItems.forEach($=>_.select($))}),($,O)=>{const me=e.resolveComponent("AdminMediaGrid"),ne=e.resolveComponent("AdminMediaListItem");return e.openBlock(),e.createBlock(e.unref(D.IonModal),{"is-open":$.isOpen,onDidDismiss:j,"backdrop-dismiss":!1,class:"media-browser-modal"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(D.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{onClick:j},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(D.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(x.value),1)]),_:1})]),_:1}),e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",Pm,[e.createVNode(e.unref(D.IonSegment),{value:i.value,onIonChange:O[0]||(O[0]=ee=>A(ee.detail.value)),class:"max-w-xs"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonSegmentButton),{value:"recent"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[15]||(O[15]=[e.createTextVNode("Recent",-1)])]),_:1})]),_:1}),t.modelType&&t.modelId?(e.openBlock(),e.createBlock(e.unref(D.IonSegmentButton),{key:0,value:"model"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[16]||(O[16]=[e.createTextVNode("Model",-1)])]),_:1})]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonSegmentButton),{value:"library"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[17]||(O[17]=[e.createTextVNode("Library",-1)])]),_:1})]),_:1})]),_:1},8,["value"]),e.createVNode(e.unref(D.IonButton),{fill:"clear",size:"small",onClick:O[1]||(O[1]=ee=>p.value=!p.value),class:"relative"},{"icon-only":e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{name:"filter-outline"})]),default:e.withCtx(()=>[w.value>0?(e.openBlock(),e.createBlock(e.unref(D.IonBadge),{key:0,color:"primary",class:"absolute -top-1 -right-1 min-w-[20px] h-5 rounded-full flex items-center justify-center text-xs"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(w.value),1)]),_:1})):e.createCommentVNode("",!0)]),_:1})])]),_:1})]),_:1}),e.createVNode(e.unref(D.IonContent),null,{default:e.withCtx(()=>[e.createElementVNode("div",jm,[p.value?(e.openBlock(),e.createElementBlock("div",Wm,[e.createElementVNode("div",Zm,[e.createElementVNode("div",null,[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[18]||(O[18]=[e.createTextVNode("Collection",-1)])]),_:1}),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":O[2]||(O[2]=ee=>v.value.collection=ee),class:"w-full p-2 border rounded"},[O[19]||(O[19]=e.createElementVNode("option",{value:""},"All Collections",-1)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,ee=>(e.openBlock(),e.createElementBlock("option",{key:ee,value:ee},e.toDisplayString(ee),9,Xm))),128))],512),[[e.vModelSelect,v.value.collection]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[20]||(O[20]=[e.createTextVNode("From Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":O[3]||(O[3]=ee=>v.value.dateFrom=ee),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,v.value.dateFrom]])]),e.createElementVNode("div",null,[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[21]||(O[21]=[e.createTextVNode("To Date",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":O[4]||(O[4]=ee=>v.value.dateTo=ee),type:"date",class:"w-full p-2 border rounded"},null,512),[[e.vModelText,v.value.dateTo]])])]),e.createElementVNode("div",Hm,[e.createVNode(e.unref(D.IonButton),{size:"small",onClick:Q},{default:e.withCtx(()=>[...O[22]||(O[22]=[e.createTextVNode("Apply",-1)])]),_:1}),e.createVNode(e.unref(D.IonButton),{size:"small",fill:"clear",onClick:ge},{default:e.withCtx(()=>[...O[23]||(O[23]=[e.createTextVNode("Clear",-1)])]),_:1})])])):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonSearchbar),{modelValue:s.value,"onUpdate:modelValue":O[5]||(O[5]=ee=>s.value=ee),placeholder:"Search media...",debounce:300,class:"mb-4"},null,8,["modelValue"]),e.createElementVNode("div",Gm,[e.createVNode(e.unref(D.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{fill:r.value==="grid"?"solid":"clear",size:"small",onClick:O[6]||(O[6]=ee=>r.value="grid")},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{name:"grid-outline"})]),_:1},8,["fill"]),e.createVNode(e.unref(D.IonButton),{fill:r.value==="list"?"solid":"clear",size:"small",onClick:O[7]||(O[7]=ee=>r.value="list")},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{name:"list-outline"})]),_:1},8,["fill"])]),_:1})]),l.value?(e.openBlock(),e.createElementBlock("div",Jm,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"})])):m.value.length===0?(e.openBlock(),e.createElementBlock("div",Ym,[e.createVNode(e.unref(D.IonIcon),{name:"images-outline",class:"text-6xl text-theme-secondary mb-4"}),O[24]||(O[24]=e.createElementVNode("h3",{class:"text-lg font-medium text-theme mb-2"}," No Media Found ",-1)),e.createElementVNode("p",Km,e.toDisplayString(s.value?"Try adjusting your search":"No media items available"),1)])):r.value==="grid"?(e.openBlock(),e.createBlock(me,{key:3,"media-items":m.value,"selected-items":e.unref(_).selectedItems.value,"is-loading":!1,"selection-mode":!0,columns:{mobile:2,sm:3,md:4,lg:5,xl:6},onToggleSelect:P,onPreview:U,onEdit:J,onDelete:te},null,8,["media-items","selected-items"])):(e.openBlock(),e.createBlock(e.unref(D.IonList),{key:4,lines:"none",class:"rounded-lg overflow-hidden"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,(ee,pe)=>(e.openBlock(),e.createBlock(ne,{key:ee.uuid,media:ee,selected:e.unref(_).isSelected(ee.uuid),"selection-mode":!0,index:pe,onToggleSelect:P,onPreview:U,onEdit:J,onDelete:te},null,8,["media","selected","index"]))),128))]),_:1})),!l.value&&m.value.length>0&&i.value!=="model"?(e.openBlock(),e.createBlock(e.unref(D.IonInfiniteScroll),{key:5,threshold:"100px",onIonInfinite:O[8]||(O[8]=ee=>H(ee))},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonInfiniteScrollContent),{"loading-spinner":"crescent","loading-text":"Loading more media..."})]),_:1})):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(e.unref(D.IonModal),{"is-open":F.value,onDidDismiss:O[14]||(O[14]=ee=>F.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{end:e.withCtx(()=>[e.createVNode(e.unref(D.IonButtons),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{onClick:O[9]||(O[9]=ee=>F.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{name:"close-outline"})]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createVNode(e.unref(D.IonTitle),null,{default:e.withCtx(()=>[...O[25]||(O[25]=[e.createTextVNode("Edit Media Info",-1)])]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(D.IonContent),{class:"p-4"},{default:e.withCtx(()=>[S.value?(e.openBlock(),e.createElementBlock("div",qm,[e.createElementVNode("div",Qm,[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[26]||(O[26]=[e.createTextVNode("Caption",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":O[10]||(O[10]=ee=>S.value.caption=ee),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter caption..."},null,512),[[e.vModelText,S.value.caption]])]),e.createElementVNode("div",ep,[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...O[27]||(O[27]=[e.createTextVNode("Alt Text",-1)])]),_:1}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":O[11]||(O[11]=ee=>S.value.alt_text=ee),type:"text",class:"w-full p-2 border rounded mt-1",placeholder:"Enter alt text..."},null,512),[[e.vModelText,S.value.alt_text]])]),e.createElementVNode("div",tp,[e.createVNode(e.unref(D.IonButton),{onClick:O[12]||(O[12]=ee=>G(S.value))},{default:e.withCtx(()=>[...O[28]||(O[28]=[e.createTextVNode("Save",-1)])]),_:1}),e.createVNode(e.unref(D.IonButton),{fill:"clear",onClick:O[13]||(O[13]=ee=>F.value=!1)},{default:e.withCtx(()=>[...O[29]||(O[29]=[e.createTextVNode("Cancel",-1)])]),_:1})])])):e.createCommentVNode("",!0)]),_:1})]),_:1},8,["is-open"]),e.createVNode(e.unref(D.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createElementVNode("div",np,[e.createElementVNode("div",op,[e.unref(_).selectedCount.value>0?(e.openBlock(),e.createElementBlock("span",ap,[e.createTextVNode(e.toDisplayString(e.unref(_).selectedCount.value)+" selected ",1),t.maxSelection?(e.openBlock(),e.createElementBlock("span",ip," / "+e.toDisplayString(t.maxSelection)+" max ",1)):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("span",rp," Select "+e.toDisplayString(t.selectionMode==="multiple"?"items":"an item"),1))]),e.createElementVNode("div",sp,[e.createVNode(e.unref(D.IonButton),{fill:"clear",onClick:j},{default:e.withCtx(()=>[...O[30]||(O[30]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(D.IonButton),{disabled:N.value,onClick:M},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(I.value),1)]),_:1},8,["disabled"])])])]),_:1})]),_:1})]),_:1},8,["is-open"])}}}),cp=Te(lp,[["__scopeId","data-v-9a8c0954"]]),dp={key:1,class:"flex flex-col items-center justify-center py-16"},up=["draggable","onDragstart","onDragover","onDrop"],mp={key:0,class:"absolute top-2 left-2 z-20"},pp=["checked","onChange"],fp={key:2,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-move"},hp=["data-media-id"],vp={key:0,class:"w-full h-full flex items-center justify-center"},gp=["src","alt","onError","onLoad"],yp={key:2,class:"w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-700"},bp={class:"text-center"},wp={class:"text-4xl text-gray-400 mb-2"},kp={class:"text-sm font-medium text-gray-500"},xp={class:"absolute inset-0 bg-black/70 opacity-0 group-hover:opacity-100 transition-opacity flex items-center justify-center gap-2"},Ep=["onClick"],Vp=["onClick"],Sp=["onClick"],Cp={class:"p-3"},_p={class:"text-sm font-medium truncate mb-1"},Np={class:"text-xs text-gray-600 dark:text-gray-400"},Tp={key:0},Mp={key:0,class:"text-xs text-gray-500 dark:text-gray-500 mt-1 truncate"},Bp=e.defineComponent({__name:"MediaGrid",props:{mediaItems:{default:()=>[]},selectedItems:{default:()=>[]},isLoading:{type:Boolean,default:!1},selectionMode:{type:Boolean,default:!1},reorderable:{type:Boolean,default:!1},showEditButton:{type:Boolean,default:!1},columns:{default:()=>({mobile:2,sm:3,md:4,lg:5,xl:6})}},emits:["toggleSelect","preview","edit","delete","reorder","upload"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(null),r=e.ref(null),s=e.ref(new Set),l=e.ref(null),c=N=>t.selectedItems.some(x=>x.uuid===N.uuid),d=e.computed(()=>{const N=t.columns,x=["grid","gap-4"];switch(N.mobile){case 1:x.push("grid-cols-1");break;case 2:x.push("grid-cols-2");break;case 3:x.push("grid-cols-3");break;case 4:x.push("grid-cols-4");break;default:x.push("grid-cols-2");break}switch(N.sm){case 1:x.push("sm:grid-cols-1");break;case 2:x.push("sm:grid-cols-2");break;case 3:x.push("sm:grid-cols-3");break;case 4:x.push("sm:grid-cols-4");break;case 5:x.push("sm:grid-cols-5");break;default:x.push("sm:grid-cols-3");break}switch(N.md){case 2:x.push("md:grid-cols-2");break;case 3:x.push("md:grid-cols-3");break;case 4:x.push("md:grid-cols-4");break;case 5:x.push("md:grid-cols-5");break;case 6:x.push("md:grid-cols-6");break;default:x.push("md:grid-cols-4");break}switch(N.lg){case 3:x.push("lg:grid-cols-3");break;case 4:x.push("lg:grid-cols-4");break;case 5:x.push("lg:grid-cols-5");break;case 6:x.push("lg:grid-cols-6");break;case 7:x.push("lg:grid-cols-7");break;default:x.push("lg:grid-cols-5");break}switch(N.xl){case 4:x.push("xl:grid-cols-4");break;case 5:x.push("xl:grid-cols-5");break;case 6:x.push("xl:grid-cols-6");break;case 7:x.push("xl:grid-cols-7");break;case 8:x.push("xl:grid-cols-8");break;default:x.push("xl:grid-cols-6");break}return x.join(" ")});function u(N,x,T){t.reorderable&&(i.value=x,N.dataTransfer&&(N.dataTransfer.effectAllowed="move",N.dataTransfer.setData("text/html","")))}function p(N,x){t.reorderable&&(N.preventDefault(),r.value=x)}function v(){r.value=null}function h(N,x){if(!t.reorderable||!i.value)return;N.preventDefault();const T=[...t.mediaItems],H=T.findIndex(E=>{var R;return E.uuid===((R=i.value)==null?void 0:R.uuid)});if(H!==-1&&H!==x&&i.value){const[E]=T.splice(H,1);T.splice(x,0,E),o("reorder",T)}i.value=null,r.value=null}function g(N){return N<1024?N+" B":N<1024*1024?(N/1024).toFixed(1)+" KB":(N/(1024*1024)).toFixed(1)+" MB"}function y(N){var T;return N.thumbnail_url||((T=N.conversion_urls)==null?void 0:T.thumb)||N.original_url||N.url||""}function V(N){var H,E,R;const x=((H=N.mime_type)==null?void 0:H.startsWith("image/"))||!1,T=!!(N.thumbnail_url||(E=N.conversion_urls)!=null&&E.thumb||(R=N.conversion_urls)!=null&&R.preview||N.original_url||N.url);return x&&T}function B(N){var x;return((x=N.split(".").pop())==null?void 0:x.toUpperCase())||""}function _(N){var T;const x=((T=N.mime_type)==null?void 0:T.toLowerCase())||"";return x.startsWith("image/")?"image":x.startsWith("video/")?"videocam":x.startsWith("audio/")?"musical-notes":x.includes("pdf")?"document-text":x.includes("zip")||x.includes("rar")?"archive":x.includes("sheet")||x.includes("excel")?"grid":x.includes("document")||x.includes("word")?"document-text":"document"}e.onMounted(()=>{typeof window<"u"&&"IntersectionObserver"in window&&(l.value=new IntersectionObserver(N=>{N.forEach(x=>{var T;if(x.isIntersecting){const H=x.target.getAttribute("data-media-id");H&&(s.value.add(H),(T=l.value)==null||T.unobserve(x.target))}})},{rootMargin:"50px"}))}),e.onUnmounted(()=>{l.value&&l.value.disconnect()});function b(N){return!0}function m(){l.value&&e.nextTick(()=>{document.querySelectorAll("[data-media-id]").forEach(x=>{var H;const T=x.getAttribute("data-media-id");T&&!s.value.has(T)&&((H=l.value)==null||H.observe(x))})})}e.watch(()=>t.mediaItems,()=>{s.value.clear(),m()},{immediate:!0,deep:!0});function w(N,x){const T=N.target;delete T.dataset.fallbackIndex}function I(N,x){const T=N.target,H=T.closest("[data-media-id]"),E=[x.original_url,x.url,x.thumbnail_url,"preview_url"in x?x.preview_url:void 0].filter(R=>R&&R.trim()!==""&&R!==T.src);if(E.length>0&&T.dataset.fallbackIndex){const R=parseInt(T.dataset.fallbackIndex);if(R<E.length){T.dataset.fallbackIndex=(R+1).toString(),T.src=E[R]||"";return}}else if(E.length>0){T.dataset.fallbackIndex="1",T.src=E[0]||"";return}if(T.style.display="none",H&&!H.querySelector(".media-fallback-icon")){const A=document.createElement("div");A.className="media-fallback-icon w-full h-full flex items-center justify-center bg-gray-100 dark:bg-gray-800",A.innerHTML=`
2
+ <div class="text-center">
3
+ <div class="text-4xl text-gray-400 mb-2">${_(x)}</div>
4
+ <p class="text-sm font-medium text-gray-500">${B(x.file_name)}</p>
5
+ </div>
6
+ `,H.appendChild(A)}}return(N,x)=>N.isLoading?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(d.value)},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(12,T=>e.createElementVNode("div",{key:`skeleton-${T}`,class:"relative"},[...x[1]||(x[1]=[e.createStaticVNode('<div class="bg-white dark:bg-gray-800 rounded-lg shadow" data-v-f0c343b7><div class="aspect-square bg-gray-200 dark:bg-gray-700 animate-pulse rounded-t-lg" data-v-f0c343b7></div><div class="p-3" data-v-f0c343b7><div class="h-4 bg-gray-200 dark:bg-gray-700 animate-pulse rounded w-3/4 mb-2" data-v-f0c343b7></div><div class="h-3 bg-gray-200 dark:bg-gray-700 animate-pulse rounded w-1/2" data-v-f0c343b7></div></div></div>',1)])])),64))],2)):!N.mediaItems||!N.mediaItems.length?(e.openBlock(),e.createElementBlock("div",dp,[x[2]||(x[2]=e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-16 h-16 text-gray-400 mb-4"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m2.25 15.75 5.159-5.159a2.25 2.25 0 0 1 3.182 0l5.159 5.159m-1.5-1.5 1.409-1.409a2.25 2.25 0 0 1 3.182 0l2.909 2.909m-18 3.75h16.5a1.5 1.5 0 0 0 1.5-1.5V6a1.5 1.5 0 0 0-1.5-1.5H3.75A1.5 1.5 0 0 0 2.25 6v12a1.5 1.5 0 0 0 1.5 1.5Zm10.5-11.25h.008v.008h-.008V8.25Zm.375 0a.375.375 0 1 1-.75 0 .375.375 0 0 1 .75 0Z"})],-1)),x[3]||(x[3]=e.createElementVNode("h3",{class:"text-lg font-medium mb-2"}," No Media Items ",-1)),x[4]||(x[4]=e.createElementVNode("p",{class:"text-sm text-gray-600 dark:text-gray-400 mb-4"}," Upload some files to get started ",-1)),e.createElementVNode("button",{onClick:x[0]||(x[0]=T=>o("upload")),class:"px-3 py-2 bg-blue-500 text-white rounded hover:bg-blue-600"}," Upload Media ")])):(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(d.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(N.mediaItems,(T,H)=>(e.openBlock(),e.createElementBlock("div",{key:T.uuid,class:e.normalizeClass(["relative group",{"ring-2 ring-blue-500 ring-offset-2":r.value===H}]),draggable:N.reorderable,onDragstart:E=>u(E,T),onDragover:E=>p(E,H),onDragleave:v,onDrop:E=>h(E,H)},[N.selectionMode?(e.openBlock(),e.createElementBlock("div",mp,[e.createElementVNode("input",{type:"checkbox",checked:c(T),onChange:E=>o("toggleSelect",T),class:"w-5 h-5 bg-white dark:bg-gray-800 rounded cursor-pointer"},null,40,pp)])):e.createCommentVNode("",!0),N.$slots.badge?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["absolute top-2 z-20",N.selectionMode?"left-10":"left-2"])},[e.renderSlot(N.$slots,"badge",{media:T,index:H},void 0,!0)],2)):e.createCommentVNode("",!0),N.reorderable?(e.openBlock(),e.createElementBlock("div",fp,[...x[5]||(x[5]=[e.createElementVNode("div",{class:"bg-black/70 text-white p-2 rounded"},[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-4 h-4"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"})])],-1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden h-full",{"ring-2 ring-blue-500":c(T)}])},[e.createElementVNode("div",{class:"relative aspect-square bg-gray-100 dark:bg-gray-700 overflow-hidden","data-media-id":T.uuid},[V(T)&&!b(T.uuid)?(e.openBlock(),e.createElementBlock("div",vp,[...x[6]||(x[6]=[e.createElementVNode("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500"},null,-1)])])):e.createCommentVNode("",!0),V(T)&&b(T.uuid)?(e.openBlock(),e.createElementBlock("img",{key:1,src:y(T),alt:T.alt_text||T.file_name,class:"w-full h-full object-cover",loading:"lazy",onError:E=>I(E,T),onLoad:E=>w(E)},null,40,gp)):(e.openBlock(),e.createElementBlock("div",yp,[e.createElementVNode("div",bp,[e.createElementVNode("div",wp,e.toDisplayString(_(T)),1),e.createElementVNode("p",kp,e.toDisplayString(B(T.file_name)),1)])])),e.createElementVNode("div",xp,[e.createElementVNode("button",{onClick:E=>o("preview",T),class:"p-2 bg-white/20 text-white rounded hover:bg-white/30",title:"Preview"},[...x[7]||(x[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-5 h-5"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M2.036 12.322a1.012 1.012 0 010-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178z"}),e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})],-1)])],8,Ep),N.showEditButton&&V(T)?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:E=>o("edit",T),class:"p-2 bg-white/20 text-white rounded hover:bg-white/30",title:"Edit"},[...x[8]||(x[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-5 h-5"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M16.862 4.487l1.687-1.688a1.875 1.875 0 112.652 2.652L10.582 16.07a4.5 4.5 0 01-1.897 1.13L6 18l.8-2.685a4.5 4.5 0 011.13-1.897l8.932-8.931zm0 0L19.5 7.125M18 14v4.75A2.25 2.25 0 0115.75 21H5.25A2.25 2.25 0 013 18.75V8.25A2.25 2.25 0 015.25 6H10"})],-1)])],8,Vp)):e.createCommentVNode("",!0),e.createElementVNode("button",{onClick:E=>o("delete",T.uuid),class:"p-2 bg-red-500/20 text-red-300 rounded hover:bg-red-500/30",title:"Delete"},[...x[9]||(x[9]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"w-5 h-5"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"})],-1)])],8,Sp)])],8,hp),e.createElementVNode("div",Cp,[e.createElementVNode("h4",_p,e.toDisplayString(T.file_name),1),e.createElementVNode("p",Np,[e.createTextVNode(e.toDisplayString(g(T.size))+" ",1),T.width&&T.height?(e.openBlock(),e.createElementBlock("span",Tp," • "+e.toDisplayString(T.width)+"x"+e.toDisplayString(T.height),1)):e.createCommentVNode("",!0)]),T.caption?(e.openBlock(),e.createElementBlock("p",Mp,e.toDisplayString(T.caption),1)):e.createCommentVNode("",!0)])],2)],42,up))),128))],2))}}),Ip=Te(Bp,[["__scopeId","data-v-f0c343b7"]]),Fp={class:"model-media-manager"},$p=["accept","multiple"],Rp={class:"flex items-center justify-between mb-4"},Dp={key:0,class:"text-lg font-medium"},Ap={class:"flex gap-2"},Up={key:0,class:"flex items-center justify-center py-8"},Lp={key:1,class:"flex flex-col items-center justify-center py-12 text-center border-2 border-dashed border-gray-300 dark:border-gray-600 rounded-lg"},Op={class:"text-gray-600 dark:text-gray-400"},zp={class:"flex gap-2 mt-4"},Pp={key:0,class:"px-2 py-1 bg-blue-500 text-white text-xs font-medium rounded"},jp=e.defineComponent({__name:"ModelMediaManager",props:{mediableType:{},mediableId:{},collection:{},mode:{default:"user"},initialMedia:{},maxFiles:{},acceptedMimeTypes:{},maxFileSize:{},allowReorder:{type:Boolean,default:!0},allowUpload:{type:Boolean,default:!0},allowBrowse:{type:Boolean,default:!0},allowDetach:{type:Boolean,default:!0},allowEdit:{type:Boolean,default:!1},editMode:{default:"replace"},showPrimaryBadge:{type:Boolean,default:!0},emptyText:{default:"No media attached"},title:{default:"Media"}},emits:["loading","update:media","error","attach","detach","reorder","upload-progress","edit-complete"],setup(a,{emit:n}){const t=a,o=n,i=Ct(),r=e.ref(!1),s=e.ref(!1),l=e.ref(!1),c=e.ref(!1),d=e.ref(null),u=e.ref(0),p=e.ref(null),v=e.ref(void 0),h=e.ref(null),g=e.ref(null),y=e.computed(()=>{if(t.maxFiles!==void 0)return Math.max(0,t.maxFiles-i.modelMedia.length)}),V=e.computed(()=>i.modelMedia.map(F=>F.uuid)),B=e.computed(()=>{if(!(!t.acceptedMimeTypes||t.acceptedMimeTypes.length===0))return t.acceptedMimeTypes.join(",")});function _(){jn({isAdmin:t.mode==="admin"})}async function b(F){await(await D.toastController.create({message:F,duration:3e3,color:"danger",position:"bottom"})).present()}async function m(){if(!s.value)if(s.value=!0,_(),i.setModelContext(t.mediableType,t.mediableId,t.collection),t.initialMedia&&t.initialMedia.length>0)i.modelMedia=[...t.initialMedia],o("update:media",i.modelMedia);else{r.value=!0,o("loading",!0);try{await i.fetchModelMedia(t.mediableType,t.mediableId,t.collection),o("update:media",i.modelMedia)}catch(F){const J=F instanceof Error?F.message:"Failed to fetch media";o("error",{operation:"fetch",message:J,details:F})}finally{r.value=!1,o("loading",!1)}}}e.watch(()=>i.modelMedia,F=>{s.value&&o("update:media",F)},{deep:!0}),e.watch(()=>[t.mediableType,t.mediableId,t.collection],()=>{s.value=!1,m()}),e.watch(()=>t.mode,()=>{_()}),e.onMounted(()=>{m()}),e.onUnmounted(()=>{i.clearModelContext()});function w(){return i.modelMedia.length>0}function I(){return t.maxFiles===void 0?!1:i.modelMedia.length>=t.maxFiles}function N(F){var G,Q,ge;if(!((G=F.mime_type)!=null&&G.startsWith("image/")))return null;const J=F.original_url||F.url||((Q=F.conversion_urls)==null?void 0:Q.preview)||((ge=F.conversion_urls)==null?void 0:ge.thumb)||F.thumbnail_url;return J&&J.trim()!==""?J:null}function x(){l.value=!0}function T(){var F;(F=g.value)==null||F.click()}function H(){l.value=!1}async function E(F){if(!t.allowEdit)return;const J=N(F);if(J){d.value=F,u.value++;try{const G=i.getHttpClient(),Q=i.getApiUrl(""),ge=await G(`${Q.replace(/\/$/,"")}/editor/${F.uuid}/edit`);v.value=ge.editable_source_url||J,p.value=ge.editor_state??null}catch{v.value=J,p.value=null}c.value=!0}}function R(){c.value=!1,d.value=null,v.value=void 0,p.value=null}async function A(F){if(!d.value)throw new Error("No media selected for editing");const J=d.value,G=t.editMode==="variant";try{h.value=null;const Q=await i.saveEditedImage(J.uuid,F,{asVariant:G,name:J.file_name});G||await i.detachMedia(t.mediableType,t.mediableId,J.uuid,t.collection),await i.attachMedia(t.mediableType,t.mediableId,[Q.uuid],t.collection),o("edit-complete",{originalMedia:J,editedMedia:Q,mode:t.editMode}),c.value=!1,d.value=null}catch(Q){const ge=Q instanceof Error?Q.message:"Failed to save edited image";throw h.value=ge,await b(ge),Q}}function P(F){if(h.value===F.message){h.value=null;return}b(F.message)}async function M(F){const J=F.target,G=J.files;if(!(!G||G.length===0)){for(let Q=0;Q<G.length;Q++){const ge=G[Q];if(y.value!==void 0&&y.value<=0)break;if(t.acceptedMimeTypes&&t.acceptedMimeTypes.length>0&&!t.acceptedMimeTypes.includes(ge.type)){o("error",{operation:"upload",message:`File type ${ge.type} is not accepted`,details:{file:ge.name}});continue}if(t.maxFileSize!==void 0&&ge.size>t.maxFileSize){o("error",{operation:"upload",message:`File size exceeds limit of ${t.maxFileSize} bytes`,details:{file:ge.name,size:ge.size}});continue}o("upload-progress",{status:"uploading",progress:0,file:ge});try{const be=await i.uploadFile(ge,{collection:t.collection});be!=null&&be.uuid&&(await i.attachMedia(t.mediableType,t.mediableId,[be.uuid],t.collection),o("upload-progress",{status:"complete",progress:100,file:ge}),o("attach",[be]))}catch(be){const te=be instanceof Error?be.message:"Upload failed";o("error",{operation:"upload",message:te,details:be}),o("upload-progress",{status:"error",progress:0,file:ge,error:te})}}J.value=""}}async function j(F){const J=F.map(G=>G.uuid);try{await i.reorderMedia(t.mediableType,t.mediableId,J,t.collection),o("reorder",i.modelMedia)}catch(G){const Q=G instanceof Error?G.message:"Failed to reorder media";o("error",{operation:"reorder",message:Q,details:G}),await b(Q)}}async function U(F){const J=i.modelMedia.find(G=>G.uuid===F);try{await i.detachMedia(t.mediableType,t.mediableId,F,t.collection),J&&o("detach",J)}catch(G){const Q=G instanceof Error?G.message:"Failed to detach media";o("error",{operation:"detach",message:Q,details:G}),await b(Q)}}async function S(F){l.value=!1;const J=F.map(ge=>ge.uuid),G=new Set(V.value);let Q=Array.from(new Set(J)).filter(ge=>!G.has(ge));if(y.value!==void 0&&Q.length>y.value&&(Q=Q.slice(0,y.value)),Q.length!==0)try{await i.attachMedia(t.mediableType,t.mediableId,Q,t.collection);const ge=i.modelMedia.filter(be=>Q.includes(be.uuid));o("attach",ge)}catch(ge){const be=ge instanceof Error?ge.message:"Failed to attach media";o("error",{operation:"attach",message:be,details:ge})}}return(F,J)=>(e.openBlock(),e.createElementBlock("div",Fp,[e.createElementVNode("input",{ref_key:"fileInputRef",ref:g,type:"file",accept:B.value,multiple:y.value===void 0||y.value>1,class:"hidden","data-testid":"upload-input",onChange:M},null,40,$p),e.createElementVNode("div",Rp,[F.title?(e.openBlock(),e.createElementBlock("h3",Dp,e.toDisplayString(F.title),1)):e.createCommentVNode("",!0),e.createElementVNode("div",Ap,[F.allowBrowse?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:0,fill:"outline",size:"small",disabled:I(),"data-testid":"browse-button",onClick:x},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"start",icon:e.unref(Bi)},null,8,["icon"]),J[1]||(J[1]=e.createTextVNode(" Browse ",-1))]),_:1},8,["disabled"])):e.createCommentVNode("",!0),F.allowUpload?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:1,fill:"solid",size:"small",disabled:I(),"data-testid":"upload-button",onClick:T},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"start",icon:e.unref(Rs)},null,8,["icon"]),J[2]||(J[2]=e.createTextVNode(" Upload ",-1))]),_:1},8,["disabled"])):e.createCommentVNode("",!0)])]),r.value||e.unref(i).isLoadingModelMedia?(e.openBlock(),e.createElementBlock("div",Up,[e.createVNode(e.unref(D.IonSpinner),{"data-testid":"spinner"})])):w()?(e.openBlock(),e.createBlock(Ip,{key:2,"media-items":e.unref(i).modelMedia,reorderable:!!F.allowReorder,"is-loading":r.value||e.unref(i).isLoadingModelMedia,"show-edit-button":!!F.allowEdit,"selection-mode":!1,onReorder:j,onDelete:U,onEdit:E},e.createSlots({_:2},[F.showPrimaryBadge?{name:"badge",fn:e.withCtx(({index:G})=>[G===0?(e.openBlock(),e.createElementBlock("div",Pp," Primary ")):e.createCommentVNode("",!0)]),key:"0"}:void 0]),1032,["media-items","reorderable","is-loading","show-edit-button"])):(e.openBlock(),e.createElementBlock("div",Lp,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Bi),class:"w-12 h-12 text-gray-400 mb-4"},null,8,["icon"]),e.createElementVNode("p",Op,e.toDisplayString(F.emptyText),1),e.createElementVNode("div",zp,[F.allowBrowse?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:0,fill:"outline",size:"small","data-testid":"browse-button-empty",onClick:x},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"start",icon:e.unref(Bi)},null,8,["icon"]),J[3]||(J[3]=e.createTextVNode(" Browse Library ",-1))]),_:1})):e.createCommentVNode("",!0),F.allowUpload?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:1,fill:"solid",size:"small","data-testid":"upload-button-empty",onClick:T},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"start",icon:e.unref(Rs)},null,8,["icon"]),J[4]||(J[4]=e.createTextVNode(" Upload Files ",-1))]),_:1})):e.createCommentVNode("",!0)])])),e.createVNode(cp,e.mergeProps({"is-open":l.value,"selected-items":V.value,collection:F.collection},y.value!==null&&y.value!==void 0?{maxSelection:y.value}:{},{onConfirm:S,onClose:H}),null,16,["is-open","selected-items","collection"]),e.createVNode(Dl,{modelValue:c.value,"onUpdate:modelValue":J[0]||(J[0]=G=>c.value=G),"initial-image":v.value,"initial-state":p.value,"session-key":u.value,onSave:A,onCancel:R,onError:P},null,8,["modelValue","initial-image","initial-state","session-key"])]))}}),Wp=Te(jp,[["__scopeId","data-v-f68e70ec"]]),Zp={class:"existing-media-selector","data-testid":"existing-media-selector"},Xp={key:0,class:"existing-media-selector__status","data-testid":"existing-media-loading"},Hp=["data-testid"],Gp={class:"existing-media-selector__section-header"},Jp={class:"existing-media-selector__section-title"},Yp=["data-testid","aria-label","onClick"],Kp={class:"existing-media-selector__grid"},qp=["data-testid","aria-label","aria-pressed","onClick"],Qp=["src","alt"],ef={key:0,class:"existing-media-selector__selected-badge"},tf={key:1,class:"existing-media-selector__caption"},nf={key:0,class:"existing-media-selector__section existing-media-selector__section--albums","data-testid":"existing-media-albums"},of={class:"existing-media-selector__section-header"},af={class:"existing-media-selector__section-title"},rf={class:"existing-media-selector__albums"},sf=["data-testid","aria-label","aria-pressed","onClick"],lf={class:"existing-media-selector__album-name"},cf={key:0,class:"existing-media-selector__album-count"},df={class:"existing-media-selector__album-panel","data-testid":"existing-media-active-album"},uf={class:"existing-media-selector__section-header"},mf={class:"existing-media-selector__section-subtitle"},pf={key:0,class:"existing-media-selector__section-description"},ff={key:0,class:"existing-media-selector__status","data-testid":"existing-media-active-album-loading"},hf={key:1,class:"existing-media-selector__grid"},vf=["data-testid","aria-label","aria-pressed","onClick"],gf=["src","alt"],yf={key:0,class:"existing-media-selector__selected-badge"},bf={key:1,class:"existing-media-selector__caption"},wf={key:2,class:"existing-media-selector__empty","data-testid":"existing-media-active-album-empty"},kf={key:1,class:"existing-media-selector__empty","data-testid":"existing-media-empty"},xf=e.defineComponent({__name:"ExistingMediaSelector",props:{sections:{default:()=>[]},albums:{default:()=>[]},selectedId:{default:null},activeAlbumId:{default:null},activeAlbumItems:{default:()=>[]},activeAlbumTitle:{},activeAlbumDescription:{},isLoading:{type:Boolean,default:!1},isAlbumLoading:{type:Boolean,default:!1},emptyMessage:{default:"No media available yet."},albumBrowseTitle:{default:"Browse Your Albums"},albumSectionTitle:{default:"Selected Album"},activeAlbumEmptyMessage:{default:"No media available in this album yet."}},emits:["select","update:activeAlbumId"],setup(a,{emit:n}){const t=a,o=n,i=e.reactive({}),r=e.computed(()=>t.sections.filter(m=>m.items.length>0)),s=e.computed(()=>t.albums.length>0),l=e.computed(()=>r.value.length>0||s.value),c=e.computed(()=>{if(typeof t.activeAlbumTitle=="string"&&t.activeAlbumTitle.trim().length>0)return t.activeAlbumTitle.trim();const m=t.albums.find(w=>w.id===t.activeAlbumId);return m!=null&&m.name.trim().length?m.name.trim():t.albumSectionTitle}),d=e.computed(()=>{if(typeof t.activeAlbumDescription=="string"&&t.activeAlbumDescription.trim().length>0)return t.activeAlbumDescription.trim();const m=t.albums.find(w=>w.id===t.activeAlbumId);return typeof(m==null?void 0:m.description)=="string"&&m.description.trim().length>0?m.description.trim():""});function u(m){const w=m.initialVisibleCount??6;return w>0?w:6}function p(m){return i[m]===!0}function v(m){i[m]=!p(m)}function h(m){return p(m.id)?m.items:m.items.slice(0,u(m))}function g(m){return m.items.length>u(m)}function y(m){o("select",m)}function V(m){o("update:activeAlbumId",m)}function B(m){var I;const w=(I=m.description)==null?void 0:I.trim();return w&&w.length>0?`Select ${w}`:"Select existing media"}function _(m,w){var N;const I=(N=w.description)==null?void 0:N.trim();return typeof w.alt=="string"&&w.alt.trim().length>0?w.alt.trim():I&&I.length>0?I:m.title}function b(m){const w=typeof m.mediaCount=="number"?` with ${m.mediaCount} item${m.mediaCount===1?"":"s"}`:"";return`Browse album ${m.name}${w}`}return(m,w)=>(e.openBlock(),e.createElementBlock("div",Zp,[m.isLoading?(e.openBlock(),e.createElementBlock("div",Xp," Loading your media... ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,I=>(e.openBlock(),e.createElementBlock("section",{key:I.id,class:"existing-media-selector__section","data-testid":`existing-media-section-${I.id}`},[e.createElementVNode("div",Gp,[e.createElementVNode("h3",Jp,e.toDisplayString(I.title),1),g(I)?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"existing-media-selector__toggle","data-testid":`existing-media-toggle-${I.id}`,"aria-label":p(I.id)?`Show fewer items from ${I.title}`:`Show more items from ${I.title}`,onClick:N=>v(I.id)},e.toDisplayString(p(I.id)?"See less":"See more"),9,Yp)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Kp,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h(I),N=>(e.openBlock(),e.createElementBlock("button",{key:N.id,type:"button",class:e.normalizeClass(["existing-media-selector__item",{"is-selected":m.selectedId===N.id}]),"data-testid":`existing-media-item-${I.id}-${N.id}`,"aria-label":B(N),"aria-pressed":m.selectedId===N.id?"true":"false",onClick:x=>y(N)},[e.createElementVNode("img",{class:"existing-media-selector__image",src:N.previewUrl,alt:_(I,N)},null,8,Qp),m.selectedId===N.id?(e.openBlock(),e.createElementBlock("div",ef," Selected ")):e.createCommentVNode("",!0),N.description?(e.openBlock(),e.createElementBlock("div",tf,e.toDisplayString(N.description),1)):e.createCommentVNode("",!0)],10,qp))),128))])],8,Hp))),128)),s.value?(e.openBlock(),e.createElementBlock("section",nf,[e.createElementVNode("div",of,[e.createElementVNode("h3",af,e.toDisplayString(m.albumBrowseTitle),1)]),e.createElementVNode("div",rf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.albums,I=>(e.openBlock(),e.createElementBlock("button",{key:I.id,type:"button",class:e.normalizeClass(["existing-media-selector__album",{"is-active":m.activeAlbumId===I.id}]),"data-testid":`existing-media-album-${I.id}`,"aria-label":b(I),"aria-pressed":m.activeAlbumId===I.id?"true":"false",onClick:N=>V(I.id)},[e.createElementVNode("span",lf,e.toDisplayString(I.name),1),typeof I.mediaCount=="number"?(e.openBlock(),e.createElementBlock("span",cf,e.toDisplayString(I.mediaCount),1)):e.createCommentVNode("",!0)],10,sf))),128))]),e.createElementVNode("div",df,[e.createElementVNode("div",uf,[e.createElementVNode("div",null,[e.createElementVNode("h4",mf,e.toDisplayString(c.value),1),d.value?(e.openBlock(),e.createElementBlock("p",pf,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)])]),m.isAlbumLoading?(e.openBlock(),e.createElementBlock("div",ff," Loading album... ")):m.activeAlbumItems.length>0?(e.openBlock(),e.createElementBlock("div",hf,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.activeAlbumItems,I=>(e.openBlock(),e.createElementBlock("button",{key:I.id,type:"button",class:e.normalizeClass(["existing-media-selector__item",{"is-selected":m.selectedId===I.id}]),"data-testid":`existing-media-item-album-${I.id}`,"aria-label":B(I),"aria-pressed":m.selectedId===I.id?"true":"false",onClick:N=>y(I)},[e.createElementVNode("img",{class:"existing-media-selector__image",src:I.previewUrl,alt:I.alt||I.description||c.value},null,8,gf),m.selectedId===I.id?(e.openBlock(),e.createElementBlock("div",yf," Selected ")):e.createCommentVNode("",!0),I.description?(e.openBlock(),e.createElementBlock("div",bf,e.toDisplayString(I.description),1)):e.createCommentVNode("",!0)],10,vf))),128))])):(e.openBlock(),e.createElementBlock("p",wf,e.toDisplayString(m.activeAlbumEmptyMessage),1))])])):e.createCommentVNode("",!0),l.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("p",kf,e.toDisplayString(m.emptyMessage),1))],64))]))}}),Ef=Te(xf,[["__scopeId","data-v-47f04509"]]);function Qo(a,n,t,o){if(t<=0||o<=0)return!1;try{return n.drawImage(a,0,0,t,o),!0}catch(i){return i instanceof DOMException&&i.name==="InvalidStateError",!1}}function Vf(a,n){return a?{display:"block",position:"absolute",inset:"0",width:"100%",height:"100%",objectFit:n,opacity:"0",pointerEvents:"none"}:{display:"block",position:"relative",inset:"auto",width:"100%",height:"100%",objectFit:n,opacity:"1",pointerEvents:"auto"}}const Sf=["src","crossorigin"],Cf={class:"preview-controls"},_f=["aria-label"],Nf={class:"time-display"},Tf={class:"current-time"},Mf={class:"total-time"},Bf={key:0,class:"fps-display"},If={key:0,class:"loading-overlay"},Ff={key:1,class:"error-overlay"},$f=.1,Rf=e.defineComponent({__name:"VideoPreview",props:{source:{},filters:{},playhead:{},fallbackDuration:{default:0},isPlaying:{type:Boolean,default:!1},showFps:{type:Boolean,default:!1},targetFps:{default:30},fitMode:{default:"contain"},active:{type:Boolean,default:!0}},emits:["frame-update","play-pause","duration-change","error"],setup(a,{expose:n,emit:t}){const{ColorMatrixFilter:o,BlurFilter:i}=Ye,r=a,s=t,l=e.ref(),c=e.ref(),d=e.ref(),u=e.ref(!0),p=e.ref(),v=e.ref(0),h=e.ref(0),g=e.ref(!1);let y,V,B=null,_=null,b=null,m=[],w="",I=null,N=0,x=0,T=0,H=0,E=!1,R=0,A=0,P,M=null,j=!1,U=!1,S=0;const F=e.computed(()=>r.source&&typeof r.source=="string"?r.source:""),J=e.computed(()=>{const le=F.value;if(!(!le||le.startsWith("blob:")))return"anonymous"}),G=e.computed(()=>Vf(g.value,r.fitMode));function Q(le){return typeof le=="number"&&Number.isFinite(le)&&le>=0?le:Number.isFinite(r.fallbackDuration)&&r.fallbackDuration>0?r.fallbackDuration:0}function ge(le){const xe=Q(le.duration);return xe<=0?!1:le.currentTime>=Math.max(0,xe-$f)}async function be(){var le,xe;if(!U&&c.value&&!y&&!(!d.value||d.value.readyState<3)){U=!0;try{p.value=void 0;let Ee=((le=l.value)==null?void 0:le.clientWidth)||800,Oe=((xe=l.value)==null?void 0:xe.clientHeight)||450;if((Ee<=0||Oe<=0)&&(Ee=d.value.videoWidth||800,Oe=d.value.videoHeight||450),y=new Ye.Application,await y.init({width:Ee,height:Oe,background:0,resolution:window.devicePixelRatio||1,autoDensity:!0,antialias:!0,powerPreference:"high-performance",preserveDrawingBuffer:!0}),c.value.appendChild(y.canvas),d.value){if(d.value.videoWidth===0||d.value.videoHeight===0){setTimeout(()=>{d.value&&d.value.videoWidth>0&&!y&&be()},100),y&&(y.destroy(!0),y=null);return}if(N=d.value.videoWidth,x=d.value.videoHeight,_=document.createElement("canvas"),_.width=N,_.height=x,b=_.getContext("2d"),!b)throw new Error("Unable to create 2D canvas context for video preview");const C=Qo(d.value,b,N,x),L=Ye.Texture.from(_);B=L.source,V=new Ye.Sprite(L),V.visible=!0,V.alpha=1,St(),y.stage.addChild(V),y.renderer&&!y.renderer.destroyed&&y.render()}me(),r.targetFps<60?te():y.ticker.add($),g.value=!0,"ResizeObserver"in window&&(I=new ResizeObserver(C=>{E||(E=!0,requestAnimationFrame(()=>{E=!1;const L=C[C.length-1],{width:X,height:K}=L.contentRect;if(X<=0||K<=0)return;const ce=Math.round(X),fe=Math.round(K);ce===T&&fe===H||(T=ce,H=fe,St())}))}),I.observe(l.value)),r.filters&&r.filters.length>0&&me(),r.showFps&&ut(),S=0}catch{if(He(),!j&&!!d.value&&d.value.readyState>=2&&d.value.videoWidth>0&&d.value.videoHeight>0&&S<2){S+=1,window.setTimeout(()=>{j||be()},S*150);return}p.value="Failed to initialize video preview",s("error",p.value)}finally{U=!1}}}function te(){const le=1e3/r.targetFps;let xe=performance.now();function Ee(){if(j||!y)return;const Oe=performance.now(),C=Oe-xe;C>=le&&($(),xe=Oe-C%le),M=requestAnimationFrame(Ee)}M=requestAnimationFrame(Ee)}function $(){if(!(!y||!V||j)&&r.active)try{b&&_&&B&&d.value&&(d.value.readyState>=2&&Qo(d.value,b,_.width,_.height)&&B.update(),d.value.paused||s("frame-update",pe())),r.showFps&&A++,y.renderer&&!y.renderer.destroyed&&y.render()}catch{j=!0}}function O(){for(const le of m)try{le.destroy()}catch{}m=[]}function me(){if(V){if(!r.filters||r.filters.length===0){V.filters=null,O();return}O(),r.filters.forEach(le=>{const xe=ne(le);xe&&m.push(xe)}),V.filters=m.length>0?m:null,w=JSON.stringify(r.filters),y&&y.render()}}function ne(le){const xe=le.filterId,Ee=le.params||{},Oe=dt.getFilter(xe);if(Oe&&!dt.isFilterCompatibleWithMedia(xe,"video"))return null;if(Oe&&Oe.createFilter)try{return Oe.createFilter(Ee)}catch{}const C=(L,X,K)=>Math.min(K,Math.max(X,L));switch(xe){case"brightness":{const L=new o,X=C(typeof Ee.brightness=="number"?Ee.brightness:typeof Ee.value=="number"?Ee.value:1,0,5);return L.brightness(X,!0),L}case"contrast":{const L=new o,X=C(typeof Ee.contrast=="number"?Ee.contrast:typeof Ee.value=="number"?Ee.value:1,0,5);return L.contrast(X,!0),L}case"saturation":{const L=new o,X=C(typeof Ee.saturation=="number"?Ee.saturation:typeof Ee.value=="number"?Ee.value:1,0,5);return L.saturate(X,!0),L}case"hue":{const L=new o,X=C(typeof Ee.value=="number"?Ee.value:0,-180,180);return L.hue(X,!0),L}case"gaussian-blur":case"blur":{const L=C(typeof Ee.blur=="number"?Ee.blur:typeof Ee.value=="number"?Ee.value:2,0,10);return new i(L)}case"grayscale":{const L=new o;return L.desaturate(),L}case"sepia":case"color-matrix":{const L=new o;return L.sepia(!0),L}case"vignette":{const L=typeof Ee.value=="number"?Ee.value:.3;return ee(C(L,0,1))}default:return null}}function ee(le){const xe=`
7
+ precision mediump float;
8
+ varying vec2 vTextureCoord;
9
+ uniform sampler2D uSampler;
10
+ uniform float strength;
11
+ void main(void){
12
+ vec2 uv = vTextureCoord - 0.5;
13
+ float dist = length(uv) * 2.0;
14
+ float vignette = smoothstep(1.0, 1.0 - strength, dist);
15
+ vec4 color = texture2D(uSampler, vTextureCoord);
16
+ gl_FragColor = vec4(color.rgb * (1.0 - vignette), color.a);
17
+ }
18
+ `;return new Ye.Filter(void 0,xe,{strength:le})}function pe(){var xe;return!y||!V?null:{dataUrl:y.canvas.toDataURL("image/jpeg",.8),timestamp:((xe=d.value)==null?void 0:xe.currentTime)||0,width:N||0,height:x||0}}function ae(){var le;v.value=Q((le=d.value)==null?void 0:le.duration),s("duration-change",v.value)}function ue(){u.value=!1,p.value=void 0}function we(){u.value&&(u.value=!1),!g.value&&r.active?be():g.value}function oe(){var xe,Ee,Oe;const le=((xe=d.value)==null?void 0:xe.currentTime)||0;s("frame-update",{dataUrl:null,timestamp:le,width:((Ee=d.value)==null?void 0:Ee.videoWidth)||0,height:((Oe=d.value)==null?void 0:Oe.videoHeight)||0})}function se(){d.value&&(d.value.currentTime=0),s("play-pause")}function ke(le){var Ee;const xe=le.target;if(xe!=null&&xe.error)switch(xe.error.code){case xe.error.MEDIA_ERR_ABORTED:p.value="Video playback aborted";break;case xe.error.MEDIA_ERR_NETWORK:p.value="Network error loading video";break;case xe.error.MEDIA_ERR_DECODE:p.value="Video format not supported";break;case xe.error.MEDIA_ERR_SRC_NOT_SUPPORTED:p.value=`Video source not supported: ${(Ee=xe.src)==null?void 0:Ee.substring(0,100)}`;break;default:p.value="Failed to load video"}else p.value="Failed to load video";s("error",p.value),u.value=!1}function Se(le){d.value&&(d.value.currentTime=Math.max(0,Math.min(le,v.value)))}function ut(){P=window.setInterval(()=>{const le=performance.now(),xe=le-R;h.value=Math.round(A*1e3/xe),A=0,R=le},1e3)}function Ze(le){if(!Number.isFinite(le)||le<0)return"00:00";const xe=Math.floor(le/60),Ee=Math.floor(le%60);return`${xe.toString().padStart(2,"0")}:${Ee.toString().padStart(2,"0")}`}function Vt(){p.value=void 0,u.value=!0,S=0,He(),d.value&&d.value.load()}function He(){if(I&&(I.disconnect(),I=null),M&&(cancelAnimationFrame(M),M=null),y!=null&&y.ticker&&(y.ticker.stop(),y.ticker.remove($)),y)try{y.destroy(!0,{children:!0,texture:!0})}catch{}c.value&&(c.value.innerHTML=""),O(),y=null,V=null,B=null,_=null,b=null,g.value=!1,E=!1,w=""}function nt(){y&&(E||(E=!0,requestAnimationFrame(()=>{E=!1,St()})))}function St(){if(!y||!V||!N||!x||!l.value)return;const le=Math.round(l.value.clientWidth),xe=Math.round(l.value.clientHeight);if(le<=0||xe<=0)return;y.renderer.resize(le,xe);const Ee=y.screen.width/N,Oe=y.screen.height/x;let C=1;switch(r.fitMode){case"cover":C=Math.max(Ee,Oe);break;case"none":C=1;break;case"contain":default:C=Math.min(Ee,Oe);break}V.scale.set(C),V.anchor.set(.5),V.position.set(y.screen.width/2,y.screen.height/2),V.visible=!0,V.alpha=1,y.renderer&&!y.renderer.destroyed&&y.render()}e.watch(()=>r.filters,()=>{g.value&&me()},{deep:!0}),e.watch(()=>r.active,async le=>{if(le&&!y&&d.value&&d.value.readyState>=2){await be();return}y&&(le&&(await e.nextTick(),l.value&&l.value.getBoundingClientRect(),V&&b&&_&&B&&(d.value&&d.value.readyState>=2&&Qo(d.value,b,_.width,_.height)&&B.update(),St(),y.renderer&&!y.renderer.destroyed&&y.render())),r.targetFps>=60&&y.ticker&&(le?y.ticker.start():y.ticker.stop()))}),e.watch(F,le=>{le?(u.value=!0,p.value=void 0,e.nextTick(()=>{d.value&&d.value.load()})):(u.value=!1,p.value="No video source provided")},{immediate:!0});async function $t(){if(d.value){p.value=void 0,ge(d.value)&&(d.value.currentTime=0);try{await d.value.play();return}catch{if(!d.value.muted){d.value.muted=!0;try{await d.value.play();return}catch{}}}p.value="Unable to start preview playback",s("error",p.value)}}e.watch(()=>r.isPlaying,le=>{d.value&&(le?$t():d.value.pause())}),e.watch(()=>r.playhead,le=>{d.value&&Math.abs(d.value.currentTime-le)>.5&&Se(le)}),e.watch(()=>r.fitMode,()=>{St()}),e.onMounted(()=>{j=!1,e.nextTick(()=>{l.value&&l.value.getBoundingClientRect(),d.value}),window.addEventListener("resize",nt),R=performance.now(),e.nextTick(()=>{d.value&&d.value.readyState>=2&&!g.value?be():d.value&&d.value.src&&d.value.readyState===0&&d.value.load()})}),e.onUnmounted(()=>{if(j=!0,M&&(cancelAnimationFrame(M),M=null),window.removeEventListener("resize",nt),I&&(I.disconnect(),I=null),P&&clearInterval(P),y&&y.ticker&&(y.ticker.stop(),y.ticker.remove($)),y){try{y.destroy(!0,{children:!0,texture:!0})}catch{}y=null}m.forEach(le=>{try{le.destroy()}catch{}}),m=[],V=null,B=null,_=null,b=null,d.value&&(d.value.pause(),d.value.removeAttribute("src"),d.value.load())});async function st(le){if(!await yt()||!d.value||!b||!_||!B)return null;const Ee=d.value,Oe=Number.isFinite(v.value)&&v.value>0?v.value:Number.isFinite(Ee.duration)&&Ee.duration>0?Ee.duration:0,C=Math.max(0,Math.min(le,Oe));return await new Promise(X=>{let K=!1,ce=0;const fe=()=>{K||(K=!0,Ee.removeEventListener("seeked",_e),window.clearTimeout(ce),X())},_e=()=>{fe()},Fe=Number.isFinite(Ee.currentTime)?Ee.currentTime:0;if(Math.abs(Fe-C)<.016){requestAnimationFrame(()=>fe());return}Ee.addEventListener("seeked",_e),ce=window.setTimeout(()=>fe(),700),Ee.currentTime=C}),Qo(Ee,b,_.width,_.height)?(B.update(),y.render(),y.canvas):null}async function yt(){if(!d.value)return!1;if(!y){if(!(d.value.readyState>=2))return!1;await be()}if(!y||!V||!b||!_||!B)return!1;if(r.filters&&r.filters.length>0){const le=V.filters,xe=Array.isArray(le)?le.length:0,Oe=JSON.stringify(r.filters)!==w;(xe===0||xe!==r.filters.length||Oe)&&me()}return await e.nextTick(),await new Promise(le=>{requestAnimationFrame(()=>le())}),!0}return n({captureFrameAt:st,ensureReadyForCapture:yt,duration:v,pixiCanvas:e.computed(()=>y?y.canvas:null),videoElement:e.computed(()=>d.value??null)}),(le,xe)=>(e.openBlock(),e.createElementBlock("div",{class:"video-preview",ref_key:"containerRef",ref:l},[e.createElementVNode("div",{class:"canvas-container",ref_key:"canvasContainerRef",ref:c},null,512),e.createElementVNode("video",{ref_key:"videoRef",ref:d,src:F.value,onLoadedmetadata:ae,onLoadeddata:ue,onCanplay:we,onTimeupdate:oe,onEnded:se,onError:ke,style:e.normalizeStyle(G.value),crossorigin:J.value,preload:"auto",playsinline:"",controls:""},null,44,Sf),e.createElementVNode("div",Cf,[e.createElementVNode("button",{class:"play-button",onClick:xe[0]||(xe[0]=Ee=>le.$emit("play-pause")),"aria-label":le.isPlaying?"Pause":"Play"},[e.createVNode(e.unref(D.IonIcon),{icon:le.isPlaying?e.unref(Ol):e.unref(Pl)},null,8,["icon"])],8,_f),e.createElementVNode("div",Nf,[e.createElementVNode("span",Tf,e.toDisplayString(Ze(le.playhead)),1),xe[1]||(xe[1]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",Mf,e.toDisplayString(Ze(v.value)),1)]),le.showFps?(e.openBlock(),e.createElementBlock("div",Bf,e.toDisplayString(h.value)+" FPS ",1)):e.createCommentVNode("",!0)]),u.value?(e.openBlock(),e.createElementBlock("div",If,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"}),xe[2]||(xe[2]=e.createElementVNode("p",null,"Loading video...",-1))])):e.createCommentVNode("",!0),p.value?(e.openBlock(),e.createElementBlock("div",Ff,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(br)},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(p.value),1),e.createElementVNode("button",{onClick:Vt},"Retry")])):e.createCommentVNode("",!0)],512))}}),zs=Te(Rf,[["__scopeId","data-v-dd1744f4"]]);var kr=(a,n,t)=>{if(!n.has(a))throw TypeError("Cannot "+t)},z=(a,n,t)=>(kr(a,n,"read from private field"),t?t.call(a):n.get(a)),Ie=(a,n,t)=>{if(n.has(a))throw TypeError("Cannot add the same private member more than once");n instanceof WeakSet?n.add(a):n.set(a,t)},rt=(a,n,t,o)=>(kr(a,n,"write to private field"),n.set(a,t),t),Df=(a,n,t,o)=>({set _(i){rt(a,n,i)},get _(){return z(a,n,o)}}),$e=(a,n,t)=>(kr(a,n,"access private method"),t),Re=new Uint8Array(8),Kt=new DataView(Re.buffer),tt=a=>[(a%256+256)%256],ze=a=>(Kt.setUint16(0,a,!1),[Re[0],Re[1]]),Af=a=>(Kt.setInt16(0,a,!1),[Re[0],Re[1]]),Hl=a=>(Kt.setUint32(0,a,!1),[Re[1],Re[2],Re[3]]),ye=a=>(Kt.setUint32(0,a,!1),[Re[0],Re[1],Re[2],Re[3]]),Uf=a=>(Kt.setInt32(0,a,!1),[Re[0],Re[1],Re[2],Re[3]]),Tn=a=>(Kt.setUint32(0,Math.floor(a/2**32),!1),Kt.setUint32(4,a,!1),[Re[0],Re[1],Re[2],Re[3],Re[4],Re[5],Re[6],Re[7]]),xr=a=>(Kt.setInt16(0,2**8*a,!1),[Re[0],Re[1]]),Gt=a=>(Kt.setInt32(0,2**16*a,!1),[Re[0],Re[1],Re[2],Re[3]]),Fi=a=>(Kt.setInt32(0,2**30*a,!1),[Re[0],Re[1],Re[2],Re[3]]),It=(a,n=!1)=>{let t=Array(a.length).fill(null).map((o,i)=>a.charCodeAt(i));return n&&t.push(0),t},ka=a=>a&&a[a.length-1],Er=a=>{let n;for(let t of a)(!n||t.presentationTimestamp>n.presentationTimestamp)&&(n=t);return n},Yt=(a,n,t=!0)=>{let o=a*n;return t?Math.round(o):o},Gl=a=>{let n=a*(Math.PI/180),t=Math.cos(n),o=Math.sin(n);return[t,o,0,-o,t,0,0,0,1]},Jl=Gl(0),Yl=a=>[Gt(a[0]),Gt(a[1]),Fi(a[2]),Gt(a[3]),Gt(a[4]),Fi(a[5]),Gt(a[6]),Gt(a[7]),Fi(a[8])],bo=a=>!a||typeof a!="object"?a:Array.isArray(a)?a.map(bo):Object.fromEntries(Object.entries(a).map(([n,t])=>[n,bo(t)])),Zn=a=>a>=0&&a<2**32,qe=(a,n,t)=>({type:a,contents:n&&new Uint8Array(n.flat(10)),children:t}),je=(a,n,t,o,i)=>qe(a,[tt(n),Hl(t),o??[]],i),Lf=a=>{let n=512;return a.fragmented?qe("ftyp",[It("iso5"),ye(n),It("iso5"),It("iso6"),It("mp41")]):qe("ftyp",[It("isom"),ye(n),It("isom"),a.holdsAvc?It("avc1"):[],It("mp41")])},Gi=a=>({type:"mdat",largeSize:a}),Of=a=>({type:"free",size:a}),ca=(a,n,t=!1)=>qe("moov",null,[zf(n,a),...a.map(o=>Pf(o,n)),t?bh(a):null]),zf=(a,n)=>{let t=Yt(Math.max(0,...n.filter(s=>s.samples.length>0).map(s=>{const l=Er(s.samples);return l.presentationTimestamp+l.duration})),Ki),o=Math.max(...n.map(s=>s.id))+1,i=!Zn(a)||!Zn(t),r=i?Tn:ye;return je("mvhd",+i,0,[r(a),r(a),ye(Ki),r(t),Gt(1),xr(1),Array(10).fill(0),Yl(Jl),Array(24).fill(0),ye(o)])},Pf=(a,n)=>qe("trak",null,[jf(a,n),Wf(a,n)]),jf=(a,n)=>{let t=Er(a.samples),o=Yt(t?t.presentationTimestamp+t.duration:0,Ki),i=!Zn(n)||!Zn(o),r=i?Tn:ye,s;return a.info.type==="video"?s=typeof a.info.rotation=="number"?Gl(a.info.rotation):a.info.rotation:s=Jl,je("tkhd",+i,3,[r(n),r(n),ye(a.id),ye(0),r(o),Array(8).fill(0),ze(0),ze(0),xr(a.info.type==="audio"?1:0),ze(0),Yl(s),Gt(a.info.type==="video"?a.info.width:0),Gt(a.info.type==="video"?a.info.height:0)])},Wf=(a,n)=>qe("mdia",null,[Zf(a,n),Xf(a.info.type==="video"?"vide":"soun"),Hf(a)]),Zf=(a,n)=>{let t=Er(a.samples),o=Yt(t?t.presentationTimestamp+t.duration:0,a.timescale),i=!Zn(n)||!Zn(o),r=i?Tn:ye;return je("mdhd",+i,0,[r(n),r(n),ye(a.timescale),r(o),ze(21956),ze(0)])},Xf=a=>je("hdlr",0,0,[It("mhlr"),It(a),ye(0),ye(0),ye(0),It("mp4-muxer-hdlr",!0)]),Hf=a=>qe("minf",null,[a.info.type==="video"?Gf():Jf(),Yf(),Qf(a)]),Gf=()=>je("vmhd",0,1,[ze(0),ze(0),ze(0),ze(0)]),Jf=()=>je("smhd",0,0,[ze(0),ze(0)]),Yf=()=>qe("dinf",null,[Kf()]),Kf=()=>je("dref",0,0,[ye(1)],[qf()]),qf=()=>je("url ",0,1),Qf=a=>{const n=a.compositionTimeOffsetTable.length>1||a.compositionTimeOffsetTable.some(t=>t.sampleCompositionTimeOffset!==0);return qe("stbl",null,[eh(a),ph(a),fh(a),hh(a),vh(a),gh(a),n?yh(a):null])},eh=a=>je("stsd",0,0,[ye(1)],[a.info.type==="video"?th(Th[a.info.codec],a):dh(Bh[a.info.codec],a)]),th=(a,n)=>qe(a,[Array(6).fill(0),ze(1),ze(0),ze(0),Array(12).fill(0),ze(n.info.width),ze(n.info.height),ye(4718592),ye(4718592),ye(0),ze(1),Array(32).fill(0),ze(24),Af(65535)],[Mh[n.info.codec](n),n.info.decoderConfig.colorSpace?ih(n):null]),nh={bt709:1,bt470bg:5,smpte170m:6},oh={bt709:1,smpte170m:6,"iec61966-2-1":13},ah={rgb:0,bt709:1,bt470bg:5,smpte170m:6},ih=a=>qe("colr",[It("nclx"),ze(nh[a.info.decoderConfig.colorSpace.primaries]),ze(oh[a.info.decoderConfig.colorSpace.transfer]),ze(ah[a.info.decoderConfig.colorSpace.matrix]),tt((a.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),rh=a=>a.info.decoderConfig&&qe("avcC",[...new Uint8Array(a.info.decoderConfig.description)]),sh=a=>a.info.decoderConfig&&qe("hvcC",[...new Uint8Array(a.info.decoderConfig.description)]),lh=a=>{if(!a.info.decoderConfig)return null;let n=a.info.decoderConfig;if(!n.colorSpace)throw new Error("'colorSpace' is required in the decoder config for VP9.");let t=n.codec.split("."),o=Number(t[1]),i=Number(t[2]),l=(Number(t[3])<<4)+(0<<1)+Number(n.colorSpace.fullRange);return je("vpcC",1,0,[tt(o),tt(i),tt(l),tt(2),tt(2),tt(2),ze(0)])},ch=()=>{let t=(1<<7)+1;return qe("av1C",[t,0,0,0])},dh=(a,n)=>qe(a,[Array(6).fill(0),ze(1),ze(0),ze(0),ye(0),ze(n.info.numberOfChannels),ze(16),ze(0),ze(0),Gt(n.info.sampleRate)],[Ih[n.info.codec](n)]),uh=a=>{let n=new Uint8Array(a.info.decoderConfig.description);return je("esds",0,0,[ye(58753152),tt(32+n.byteLength),ze(1),tt(0),ye(75530368),tt(18+n.byteLength),tt(64),tt(21),Hl(0),ye(130071),ye(130071),ye(92307584),tt(n.byteLength),...n,ye(109084800),tt(1),tt(2)])},mh=a=>{var i;let n=3840,t=0;const o=(i=a.info.decoderConfig)==null?void 0:i.description;if(o){if(o.byteLength<18)throw new TypeError("Invalid decoder description provided for Opus; must be at least 18 bytes long.");const r=ArrayBuffer.isView(o)?new DataView(o.buffer,o.byteOffset,o.byteLength):new DataView(o);n=r.getUint16(10,!0),t=r.getInt16(14,!0)}return qe("dOps",[tt(0),tt(a.info.numberOfChannels),ze(n),ye(a.info.sampleRate),xr(t),tt(0)])},ph=a=>je("stts",0,0,[ye(a.timeToSampleTable.length),a.timeToSampleTable.map(n=>[ye(n.sampleCount),ye(n.sampleDelta)])]),fh=a=>{if(a.samples.every(t=>t.type==="key"))return null;let n=[...a.samples.entries()].filter(([,t])=>t.type==="key");return je("stss",0,0,[ye(n.length),n.map(([t])=>ye(t+1))])},hh=a=>je("stsc",0,0,[ye(a.compactlyCodedChunkTable.length),a.compactlyCodedChunkTable.map(n=>[ye(n.firstChunk),ye(n.samplesPerChunk),ye(1)])]),vh=a=>je("stsz",0,0,[ye(0),ye(a.samples.length),a.samples.map(n=>ye(n.size))]),gh=a=>a.finalizedChunks.length>0&&ka(a.finalizedChunks).offset>=2**32?je("co64",0,0,[ye(a.finalizedChunks.length),a.finalizedChunks.map(n=>Tn(n.offset))]):je("stco",0,0,[ye(a.finalizedChunks.length),a.finalizedChunks.map(n=>ye(n.offset))]),yh=a=>je("ctts",0,0,[ye(a.compositionTimeOffsetTable.length),a.compositionTimeOffsetTable.map(n=>[ye(n.sampleCount),ye(n.sampleCompositionTimeOffset)])]),bh=a=>qe("mvex",null,a.map(wh)),wh=a=>je("trex",0,0,[ye(a.id),ye(1),ye(0),ye(0),ye(0)]),Ps=(a,n)=>qe("moof",null,[kh(a),...n.map(xh)]),kh=a=>je("mfhd",0,0,[ye(a)]),Kl=a=>{let n=0,t=0,o=0,i=0,r=a.type==="delta";return t|=+r,r?n|=1:n|=2,n<<24|t<<16|o<<8|i},xh=a=>qe("traf",null,[Eh(a),Vh(a),Sh(a)]),Eh=a=>{let n=0;n|=8,n|=16,n|=32,n|=131072;let t=a.currentChunk.samples[1]??a.currentChunk.samples[0],o={duration:t.timescaleUnitsToNextSample,size:t.size,flags:Kl(t)};return je("tfhd",0,n,[ye(a.id),ye(o.duration),ye(o.size),ye(o.flags)])},Vh=a=>je("tfdt",1,0,[Tn(Yt(a.currentChunk.startTimestamp,a.timescale))]),Sh=a=>{let n=a.currentChunk.samples.map(y=>y.timescaleUnitsToNextSample),t=a.currentChunk.samples.map(y=>y.size),o=a.currentChunk.samples.map(Kl),i=a.currentChunk.samples.map(y=>Yt(y.presentationTimestamp-y.decodeTimestamp,a.timescale)),r=new Set(n),s=new Set(t),l=new Set(o),c=new Set(i),d=l.size===2&&o[0]!==o[1],u=r.size>1,p=s.size>1,v=!d&&l.size>1,h=c.size>1||[...c].some(y=>y!==0),g=0;return g|=1,g|=4*+d,g|=256*+u,g|=512*+p,g|=1024*+v,g|=2048*+h,je("trun",1,g,[ye(a.currentChunk.samples.length),ye(a.currentChunk.offset-a.currentChunk.moofOffset||0),d?ye(o[0]):[],a.currentChunk.samples.map((y,V)=>[u?ye(n[V]):[],p?ye(t[V]):[],v?ye(o[V]):[],h?Uf(i[V]):[]])])},Ch=a=>qe("mfra",null,[...a.map(_h),Nh()]),_h=(a,n)=>je("tfra",1,0,[ye(a.id),ye(63),ye(a.finalizedChunks.length),a.finalizedChunks.map(o=>[Tn(Yt(o.startTimestamp,a.timescale)),Tn(o.moofOffset),ye(n+1),ye(1),ye(1)])]),Nh=()=>je("mfro",0,0,[ye(0)]),Th={avc:"avc1",hevc:"hvc1",vp9:"vp09",av1:"av01"},Mh={avc:rh,hevc:sh,vp9:lh,av1:ch},Bh={aac:"mp4a",opus:"Opus"},Ih={aac:uh,opus:mh},$a=class{},Vr=class extends $a{constructor(){super(...arguments),this.buffer=null}},ql=class extends $a{constructor(a){if(super(),this.options=a,typeof a!="object")throw new TypeError("StreamTarget requires an options object to be passed to its constructor.");if(a.onData){if(typeof a.onData!="function")throw new TypeError("options.onData, when provided, must be a function.");if(a.onData.length<2)throw new TypeError("options.onData, when provided, must be a function that takes in at least two arguments (data and position). Ignoring the position argument, which specifies the byte offset at which the data is to be written, can lead to broken outputs.")}if(a.chunked!==void 0&&typeof a.chunked!="boolean")throw new TypeError("options.chunked, when provided, must be a boolean.");if(a.chunkSize!==void 0&&(!Number.isInteger(a.chunkSize)||a.chunkSize<1024))throw new TypeError("options.chunkSize, when provided, must be an integer and not smaller than 1024.")}},Fh=class extends $a{constructor(a,n){if(super(),this.stream=a,this.options=n,!(a instanceof FileSystemWritableFileStream))throw new TypeError("FileSystemWritableFileStreamTarget requires a FileSystemWritableFileStream instance.");if(n!==void 0&&typeof n!="object")throw new TypeError("FileSystemWritableFileStreamTarget's options, when provided, must be an object.");if(n&&n.chunkSize!==void 0&&(!Number.isInteger(n.chunkSize)||n.chunkSize<=0))throw new TypeError("options.chunkSize, when provided, must be a positive integer")}},bn,Ln,Ql=class{constructor(){this.pos=0,Ie(this,bn,new Uint8Array(8)),Ie(this,Ln,new DataView(z(this,bn).buffer)),this.offsets=new WeakMap}seek(a){this.pos=a}writeU32(a){z(this,Ln).setUint32(0,a,!1),this.write(z(this,bn).subarray(0,4))}writeU64(a){z(this,Ln).setUint32(0,Math.floor(a/2**32),!1),z(this,Ln).setUint32(4,a,!1),this.write(z(this,bn).subarray(0,8))}writeAscii(a){for(let n=0;n<a.length;n++)z(this,Ln).setUint8(n%8,a.charCodeAt(n)),n%8===7&&this.write(z(this,bn));a.length%8!==0&&this.write(z(this,bn).subarray(0,a.length%8))}writeBox(a){if(this.offsets.set(a,this.pos),a.contents&&!a.children)this.writeBoxHeader(a,a.size??a.contents.byteLength+8),this.write(a.contents);else{let n=this.pos;if(this.writeBoxHeader(a,0),a.contents&&this.write(a.contents),a.children)for(let i of a.children)i&&this.writeBox(i);let t=this.pos,o=a.size??t-n;this.seek(n),this.writeBoxHeader(a,o),this.seek(t)}}writeBoxHeader(a,n){this.writeU32(a.largeSize?1:n),this.writeAscii(a.type),a.largeSize&&this.writeU64(n)}measureBoxHeader(a){return 8+(a.largeSize?8:0)}patchBox(a){let n=this.pos;this.seek(this.offsets.get(a)),this.writeBox(a),this.seek(n)}measureBox(a){if(a.contents&&!a.children)return this.measureBoxHeader(a)+a.contents.byteLength;{let n=this.measureBoxHeader(a);if(a.contents&&(n+=a.contents.byteLength),a.children)for(let t of a.children)t&&(n+=this.measureBox(t));return n}}};bn=new WeakMap;Ln=new WeakMap;var da,_n,Co,ho,ua,Ji,$h=class extends Ql{constructor(a){super(),Ie(this,ua),Ie(this,da,void 0),Ie(this,_n,new ArrayBuffer(2**16)),Ie(this,Co,new Uint8Array(z(this,_n))),Ie(this,ho,0),rt(this,da,a)}write(a){$e(this,ua,Ji).call(this,this.pos+a.byteLength),z(this,Co).set(a,this.pos),this.pos+=a.byteLength,rt(this,ho,Math.max(z(this,ho),this.pos))}finalize(){$e(this,ua,Ji).call(this,this.pos),z(this,da).buffer=z(this,_n).slice(0,Math.max(z(this,ho),this.pos))}};da=new WeakMap;_n=new WeakMap;Co=new WeakMap;ho=new WeakMap;ua=new WeakSet;Ji=function(a){let n=z(this,_n).byteLength;for(;n<a;)n*=2;if(n===z(this,_n).byteLength)return;let t=new ArrayBuffer(n),o=new Uint8Array(t);o.set(z(this,Co),0),rt(this,_n,t),rt(this,Co,o)};var Rh=2**24,Dh=2,wo,wn,vo,on,Tt,xa,Yi,Sr,ec,Cr,tc,ko,Ea,_r=class extends Ql{constructor(a){var n,t;super(),Ie(this,xa),Ie(this,Sr),Ie(this,Cr),Ie(this,ko),Ie(this,wo,void 0),Ie(this,wn,[]),Ie(this,vo,void 0),Ie(this,on,void 0),Ie(this,Tt,[]),rt(this,wo,a),rt(this,vo,((n=a.options)==null?void 0:n.chunked)??!1),rt(this,on,((t=a.options)==null?void 0:t.chunkSize)??Rh)}write(a){z(this,wn).push({data:a.slice(),start:this.pos}),this.pos+=a.byteLength}flush(){var t,o;if(z(this,wn).length===0)return;let a=[],n=[...z(this,wn)].sort((i,r)=>i.start-r.start);a.push({start:n[0].start,size:n[0].data.byteLength});for(let i=1;i<n.length;i++){let r=a[a.length-1],s=n[i];s.start<=r.start+r.size?r.size=Math.max(r.size,s.start+s.data.byteLength-r.start):a.push({start:s.start,size:s.data.byteLength})}for(let i of a){i.data=new Uint8Array(i.size);for(let r of z(this,wn))i.start<=r.start&&r.start<i.start+i.size&&i.data.set(r.data,r.start-i.start);z(this,vo)?($e(this,xa,Yi).call(this,i.data,i.start),$e(this,ko,Ea).call(this)):(o=(t=z(this,wo).options).onData)==null||o.call(t,i.data,i.start)}z(this,wn).length=0}finalize(){z(this,vo)&&$e(this,ko,Ea).call(this,!0)}};wo=new WeakMap;wn=new WeakMap;vo=new WeakMap;on=new WeakMap;Tt=new WeakMap;xa=new WeakSet;Yi=function(a,n){let t=z(this,Tt).findIndex(l=>l.start<=n&&n<l.start+z(this,on));t===-1&&(t=$e(this,Cr,tc).call(this,n));let o=z(this,Tt)[t],i=n-o.start,r=a.subarray(0,Math.min(z(this,on)-i,a.byteLength));o.data.set(r,i);let s={start:i,end:i+r.byteLength};if($e(this,Sr,ec).call(this,o,s),o.written[0].start===0&&o.written[0].end===z(this,on)&&(o.shouldFlush=!0),z(this,Tt).length>Dh){for(let l=0;l<z(this,Tt).length-1;l++)z(this,Tt)[l].shouldFlush=!0;$e(this,ko,Ea).call(this)}r.byteLength<a.byteLength&&$e(this,xa,Yi).call(this,a.subarray(r.byteLength),n+r.byteLength)};Sr=new WeakSet;ec=function(a,n){let t=0,o=a.written.length-1,i=-1;for(;t<=o;){let r=Math.floor(t+(o-t+1)/2);a.written[r].start<=n.start?(t=r+1,i=r):o=r-1}for(a.written.splice(i+1,0,n),(i===-1||a.written[i].end<n.start)&&i++;i<a.written.length-1&&a.written[i].end>=a.written[i+1].start;)a.written[i].end=Math.max(a.written[i].end,a.written[i+1].end),a.written.splice(i+1,1)};Cr=new WeakSet;tc=function(a){let t={start:Math.floor(a/z(this,on))*z(this,on),data:new Uint8Array(z(this,on)),written:[],shouldFlush:!1};return z(this,Tt).push(t),z(this,Tt).sort((o,i)=>o.start-i.start),z(this,Tt).indexOf(t)};ko=new WeakSet;Ea=function(a=!1){var n,t;for(let o=0;o<z(this,Tt).length;o++){let i=z(this,Tt)[o];if(!(!i.shouldFlush&&!a)){for(let r of i.written)(t=(n=z(this,wo).options).onData)==null||t.call(n,i.data.subarray(r.start,r.end),i.start+r.start);z(this,Tt).splice(o--,1)}}};var Ah=class extends _r{constructor(a){var n;super(new ql({onData:(t,o)=>a.stream.write({type:"write",data:t,position:o}),chunked:!0,chunkSize:(n=a.options)==null?void 0:n.chunkSize}))}},Ki=1e3,Uh=["avc","hevc","vp9","av1"],Lh=["aac","opus"],Oh=2082844800,zh=["strict","offset","cross-track-offset"],Ce,Ne,Va,_t,ct,it,On,zn,Nr,kn,xn,xo,qi,nc,Qi,oc,Tr,ac,er,ic,Mr,rc,ma,tr,Ht,nn,Br,sc,Eo,Sa,Ca,Ir,Xn,To,pa,nr,lc=class{constructor(a){if(Ie(this,qi),Ie(this,Qi),Ie(this,Tr),Ie(this,er),Ie(this,Mr),Ie(this,ma),Ie(this,Ht),Ie(this,Br),Ie(this,Eo),Ie(this,Ca),Ie(this,Xn),Ie(this,pa),Ie(this,Ce,void 0),Ie(this,Ne,void 0),Ie(this,Va,void 0),Ie(this,_t,void 0),Ie(this,ct,null),Ie(this,it,null),Ie(this,On,Math.floor(Date.now()/1e3)+Oh),Ie(this,zn,[]),Ie(this,Nr,1),Ie(this,kn,[]),Ie(this,xn,[]),Ie(this,xo,!1),$e(this,qi,nc).call(this,a),a.video=bo(a.video),a.audio=bo(a.audio),a.fastStart=bo(a.fastStart),this.target=a.target,rt(this,Ce,{firstTimestampBehavior:"strict",...a}),a.target instanceof Vr)rt(this,Ne,new $h(a.target));else if(a.target instanceof ql)rt(this,Ne,new _r(a.target));else if(a.target instanceof Fh)rt(this,Ne,new Ah(a.target));else throw new Error(`Invalid target: ${a.target}`);$e(this,er,ic).call(this),$e(this,Qi,oc).call(this)}addVideoChunk(a,n,t,o){if(!(a instanceof EncodedVideoChunk))throw new TypeError("addVideoChunk's first argument (sample) must be of type EncodedVideoChunk.");if(n&&typeof n!="object")throw new TypeError("addVideoChunk's second argument (meta), when provided, must be an object.");if(t!==void 0&&(!Number.isFinite(t)||t<0))throw new TypeError("addVideoChunk's third argument (timestamp), when provided, must be a non-negative real number.");if(o!==void 0&&!Number.isFinite(o))throw new TypeError("addVideoChunk's fourth argument (compositionTimeOffset), when provided, must be a real number.");let i=new Uint8Array(a.byteLength);a.copyTo(i),this.addVideoChunkRaw(i,a.type,t??a.timestamp,a.duration,n,o)}addVideoChunkRaw(a,n,t,o,i,r){if(!(a instanceof Uint8Array))throw new TypeError("addVideoChunkRaw's first argument (data) must be an instance of Uint8Array.");if(n!=="key"&&n!=="delta")throw new TypeError("addVideoChunkRaw's second argument (type) must be either 'key' or 'delta'.");if(!Number.isFinite(t)||t<0)throw new TypeError("addVideoChunkRaw's third argument (timestamp) must be a non-negative real number.");if(!Number.isFinite(o)||o<0)throw new TypeError("addVideoChunkRaw's fourth argument (duration) must be a non-negative real number.");if(i&&typeof i!="object")throw new TypeError("addVideoChunkRaw's fifth argument (meta), when provided, must be an object.");if(r!==void 0&&!Number.isFinite(r))throw new TypeError("addVideoChunkRaw's sixth argument (compositionTimeOffset), when provided, must be a real number.");if($e(this,pa,nr).call(this),!z(this,Ce).video)throw new Error("No video track declared.");if(typeof z(this,Ce).fastStart=="object"&&z(this,ct).samples.length===z(this,Ce).fastStart.expectedVideoChunks)throw new Error(`Cannot add more video chunks than specified in 'fastStart' (${z(this,Ce).fastStart.expectedVideoChunks}).`);let s=$e(this,ma,tr).call(this,z(this,ct),a,n,t,o,i,r);if(z(this,Ce).fastStart==="fragmented"&&z(this,it)){for(;z(this,xn).length>0&&z(this,xn)[0].decodeTimestamp<=s.decodeTimestamp;){let l=z(this,xn).shift();$e(this,Ht,nn).call(this,z(this,it),l)}s.decodeTimestamp<=z(this,it).lastDecodeTimestamp?$e(this,Ht,nn).call(this,z(this,ct),s):z(this,kn).push(s)}else $e(this,Ht,nn).call(this,z(this,ct),s)}addAudioChunk(a,n,t){if(!(a instanceof EncodedAudioChunk))throw new TypeError("addAudioChunk's first argument (sample) must be of type EncodedAudioChunk.");if(n&&typeof n!="object")throw new TypeError("addAudioChunk's second argument (meta), when provided, must be an object.");if(t!==void 0&&(!Number.isFinite(t)||t<0))throw new TypeError("addAudioChunk's third argument (timestamp), when provided, must be a non-negative real number.");let o=new Uint8Array(a.byteLength);a.copyTo(o),this.addAudioChunkRaw(o,a.type,t??a.timestamp,a.duration,n)}addAudioChunkRaw(a,n,t,o,i){if(!(a instanceof Uint8Array))throw new TypeError("addAudioChunkRaw's first argument (data) must be an instance of Uint8Array.");if(n!=="key"&&n!=="delta")throw new TypeError("addAudioChunkRaw's second argument (type) must be either 'key' or 'delta'.");if(!Number.isFinite(t)||t<0)throw new TypeError("addAudioChunkRaw's third argument (timestamp) must be a non-negative real number.");if(!Number.isFinite(o)||o<0)throw new TypeError("addAudioChunkRaw's fourth argument (duration) must be a non-negative real number.");if(i&&typeof i!="object")throw new TypeError("addAudioChunkRaw's fifth argument (meta), when provided, must be an object.");if($e(this,pa,nr).call(this),!z(this,Ce).audio)throw new Error("No audio track declared.");if(typeof z(this,Ce).fastStart=="object"&&z(this,it).samples.length===z(this,Ce).fastStart.expectedAudioChunks)throw new Error(`Cannot add more audio chunks than specified in 'fastStart' (${z(this,Ce).fastStart.expectedAudioChunks}).`);let r=$e(this,ma,tr).call(this,z(this,it),a,n,t,o,i);if(z(this,Ce).fastStart==="fragmented"&&z(this,ct)){for(;z(this,kn).length>0&&z(this,kn)[0].decodeTimestamp<=r.decodeTimestamp;){let s=z(this,kn).shift();$e(this,Ht,nn).call(this,z(this,ct),s)}r.decodeTimestamp<=z(this,ct).lastDecodeTimestamp?$e(this,Ht,nn).call(this,z(this,it),r):z(this,xn).push(r)}else $e(this,Ht,nn).call(this,z(this,it),r)}finalize(){if(z(this,xo))throw new Error("Cannot finalize a muxer more than once.");if(z(this,Ce).fastStart==="fragmented"){for(let n of z(this,kn))$e(this,Ht,nn).call(this,z(this,ct),n);for(let n of z(this,xn))$e(this,Ht,nn).call(this,z(this,it),n);$e(this,Ca,Ir).call(this,!1)}else z(this,ct)&&$e(this,Eo,Sa).call(this,z(this,ct)),z(this,it)&&$e(this,Eo,Sa).call(this,z(this,it));let a=[z(this,ct),z(this,it)].filter(Boolean);if(z(this,Ce).fastStart==="in-memory"){let n;for(let o=0;o<2;o++){let i=ca(a,z(this,On)),r=z(this,Ne).measureBox(i);n=z(this,Ne).measureBox(z(this,_t));let s=z(this,Ne).pos+r+n;for(let l of z(this,zn)){l.offset=s;for(let{data:c}of l.samples)s+=c.byteLength,n+=c.byteLength}if(s<2**32)break;n>=2**32&&(z(this,_t).largeSize=!0)}let t=ca(a,z(this,On));z(this,Ne).writeBox(t),z(this,_t).size=n,z(this,Ne).writeBox(z(this,_t));for(let o of z(this,zn))for(let i of o.samples)z(this,Ne).write(i.data),i.data=null}else if(z(this,Ce).fastStart==="fragmented"){let n=z(this,Ne).pos,t=Ch(a);z(this,Ne).writeBox(t);let o=z(this,Ne).pos-n;z(this,Ne).seek(z(this,Ne).pos-4),z(this,Ne).writeU32(o)}else{let n=z(this,Ne).offsets.get(z(this,_t)),t=z(this,Ne).pos-n;z(this,_t).size=t,z(this,_t).largeSize=t>=2**32,z(this,Ne).patchBox(z(this,_t));let o=ca(a,z(this,On));if(typeof z(this,Ce).fastStart=="object"){z(this,Ne).seek(z(this,Va)),z(this,Ne).writeBox(o);let i=n-z(this,Ne).pos;z(this,Ne).writeBox(Of(i))}else z(this,Ne).writeBox(o)}$e(this,Xn,To).call(this),z(this,Ne).finalize(),rt(this,xo,!0)}};Ce=new WeakMap;Ne=new WeakMap;Va=new WeakMap;_t=new WeakMap;ct=new WeakMap;it=new WeakMap;On=new WeakMap;zn=new WeakMap;Nr=new WeakMap;kn=new WeakMap;xn=new WeakMap;xo=new WeakMap;qi=new WeakSet;nc=function(a){if(typeof a!="object")throw new TypeError("The muxer requires an options object to be passed to its constructor.");if(!(a.target instanceof $a))throw new TypeError("The target must be provided and an instance of Target.");if(a.video){if(!Uh.includes(a.video.codec))throw new TypeError(`Unsupported video codec: ${a.video.codec}`);if(!Number.isInteger(a.video.width)||a.video.width<=0)throw new TypeError(`Invalid video width: ${a.video.width}. Must be a positive integer.`);if(!Number.isInteger(a.video.height)||a.video.height<=0)throw new TypeError(`Invalid video height: ${a.video.height}. Must be a positive integer.`);const n=a.video.rotation;if(typeof n=="number"&&![0,90,180,270].includes(n))throw new TypeError(`Invalid video rotation: ${n}. Has to be 0, 90, 180 or 270.`);if(Array.isArray(n)&&(n.length!==9||n.some(t=>typeof t!="number")))throw new TypeError(`Invalid video transformation matrix: ${n.join()}`);if(a.video.frameRate!==void 0&&(!Number.isInteger(a.video.frameRate)||a.video.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${a.video.frameRate}. Must be a positive integer.`)}if(a.audio){if(!Lh.includes(a.audio.codec))throw new TypeError(`Unsupported audio codec: ${a.audio.codec}`);if(!Number.isInteger(a.audio.numberOfChannels)||a.audio.numberOfChannels<=0)throw new TypeError(`Invalid number of audio channels: ${a.audio.numberOfChannels}. Must be a positive integer.`);if(!Number.isInteger(a.audio.sampleRate)||a.audio.sampleRate<=0)throw new TypeError(`Invalid audio sample rate: ${a.audio.sampleRate}. Must be a positive integer.`)}if(a.firstTimestampBehavior&&!zh.includes(a.firstTimestampBehavior))throw new TypeError(`Invalid first timestamp behavior: ${a.firstTimestampBehavior}`);if(typeof a.fastStart=="object"){if(a.video){if(a.fastStart.expectedVideoChunks===void 0)throw new TypeError("'fastStart' is an object but is missing property 'expectedVideoChunks'.");if(!Number.isInteger(a.fastStart.expectedVideoChunks)||a.fastStart.expectedVideoChunks<0)throw new TypeError("'expectedVideoChunks' must be a non-negative integer.")}if(a.audio){if(a.fastStart.expectedAudioChunks===void 0)throw new TypeError("'fastStart' is an object but is missing property 'expectedAudioChunks'.");if(!Number.isInteger(a.fastStart.expectedAudioChunks)||a.fastStart.expectedAudioChunks<0)throw new TypeError("'expectedAudioChunks' must be a non-negative integer.")}}else if(![!1,"in-memory","fragmented"].includes(a.fastStart))throw new TypeError("'fastStart' option must be false, 'in-memory', 'fragmented' or an object.");if(a.minFragmentDuration!==void 0&&(!Number.isFinite(a.minFragmentDuration)||a.minFragmentDuration<0))throw new TypeError("'minFragmentDuration' must be a non-negative number.")};Qi=new WeakSet;oc=function(){var a;if(z(this,Ne).writeBox(Lf({holdsAvc:((a=z(this,Ce).video)==null?void 0:a.codec)==="avc",fragmented:z(this,Ce).fastStart==="fragmented"})),rt(this,Va,z(this,Ne).pos),z(this,Ce).fastStart==="in-memory")rt(this,_t,Gi(!1));else if(z(this,Ce).fastStart!=="fragmented"){if(typeof z(this,Ce).fastStart=="object"){let n=$e(this,Tr,ac).call(this);z(this,Ne).seek(z(this,Ne).pos+n)}rt(this,_t,Gi(!0)),z(this,Ne).writeBox(z(this,_t))}$e(this,Xn,To).call(this)};Tr=new WeakSet;ac=function(){if(typeof z(this,Ce).fastStart!="object")return;let a=0,n=[z(this,Ce).fastStart.expectedVideoChunks,z(this,Ce).fastStart.expectedAudioChunks];for(let t of n)t&&(a+=8*Math.ceil(2/3*t),a+=4*t,a+=12*Math.ceil(2/3*t),a+=4*t,a+=8*t);return a+=4096,a};er=new WeakSet;ic=function(){if(z(this,Ce).video&&rt(this,ct,{id:1,info:{type:"video",codec:z(this,Ce).video.codec,width:z(this,Ce).video.width,height:z(this,Ce).video.height,rotation:z(this,Ce).video.rotation??0,decoderConfig:null},timescale:z(this,Ce).video.frameRate??57600,samples:[],finalizedChunks:[],currentChunk:null,firstDecodeTimestamp:void 0,lastDecodeTimestamp:-1,timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,compactlyCodedChunkTable:[]}),z(this,Ce).audio&&(rt(this,it,{id:z(this,Ce).video?2:1,info:{type:"audio",codec:z(this,Ce).audio.codec,numberOfChannels:z(this,Ce).audio.numberOfChannels,sampleRate:z(this,Ce).audio.sampleRate,decoderConfig:null},timescale:z(this,Ce).audio.sampleRate,samples:[],finalizedChunks:[],currentChunk:null,firstDecodeTimestamp:void 0,lastDecodeTimestamp:-1,timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,compactlyCodedChunkTable:[]}),z(this,Ce).audio.codec==="aac")){let a=$e(this,Mr,rc).call(this,2,z(this,Ce).audio.sampleRate,z(this,Ce).audio.numberOfChannels);z(this,it).info.decoderConfig={codec:z(this,Ce).audio.codec,description:a,numberOfChannels:z(this,Ce).audio.numberOfChannels,sampleRate:z(this,Ce).audio.sampleRate}}};Mr=new WeakSet;rc=function(a,n,t){let i=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350].indexOf(n),r=t,s="";s+=a.toString(2).padStart(5,"0"),s+=i.toString(2).padStart(4,"0"),i===15&&(s+=n.toString(2).padStart(24,"0")),s+=r.toString(2).padStart(4,"0");let l=Math.ceil(s.length/8)*8;s=s.padEnd(l,"0");let c=new Uint8Array(s.length/8);for(let d=0;d<s.length;d+=8)c[d/8]=parseInt(s.slice(d,d+8),2);return c};ma=new WeakSet;tr=function(a,n,t,o,i,r,s){let l=o/1e6,c=(o-(s??0))/1e6,d=i/1e6,u=$e(this,Br,sc).call(this,l,c,a);return l=u.presentationTimestamp,c=u.decodeTimestamp,r!=null&&r.decoderConfig&&(a.info.decoderConfig===null?a.info.decoderConfig=r.decoderConfig:Object.assign(a.info.decoderConfig,r.decoderConfig)),{presentationTimestamp:l,decodeTimestamp:c,duration:d,data:n,size:n.byteLength,type:t,timescaleUnitsToNextSample:Yt(d,a.timescale)}};Ht=new WeakSet;nn=function(a,n){z(this,Ce).fastStart!=="fragmented"&&a.samples.push(n);const t=Yt(n.presentationTimestamp-n.decodeTimestamp,a.timescale);if(a.lastTimescaleUnits!==null){let i=Yt(n.decodeTimestamp,a.timescale,!1),r=Math.round(i-a.lastTimescaleUnits);if(a.lastTimescaleUnits+=r,a.lastSample.timescaleUnitsToNextSample=r,z(this,Ce).fastStart!=="fragmented"){let s=ka(a.timeToSampleTable);s.sampleCount===1?(s.sampleDelta=r,s.sampleCount++):s.sampleDelta===r?s.sampleCount++:(s.sampleCount--,a.timeToSampleTable.push({sampleCount:2,sampleDelta:r}));const l=ka(a.compositionTimeOffsetTable);l.sampleCompositionTimeOffset===t?l.sampleCount++:a.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:t})}}else a.lastTimescaleUnits=0,z(this,Ce).fastStart!=="fragmented"&&(a.timeToSampleTable.push({sampleCount:1,sampleDelta:Yt(n.duration,a.timescale)}),a.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:t}));a.lastSample=n;let o=!1;if(!a.currentChunk)o=!0;else{let i=n.presentationTimestamp-a.currentChunk.startTimestamp;if(z(this,Ce).fastStart==="fragmented"){let r=z(this,ct)??z(this,it);const s=z(this,Ce).minFragmentDuration??1;a===r&&n.type==="key"&&i>=s&&(o=!0,$e(this,Ca,Ir).call(this))}else o=i>=.5}o&&(a.currentChunk&&$e(this,Eo,Sa).call(this,a),a.currentChunk={startTimestamp:n.presentationTimestamp,samples:[]}),a.currentChunk.samples.push(n)};Br=new WeakSet;sc=function(a,n,t){var s,l;const o=z(this,Ce).firstTimestampBehavior==="strict",i=t.lastDecodeTimestamp===-1;if(o&&i&&n!==0)throw new Error(`The first chunk for your media track must have a timestamp of 0 (received DTS=${n}).Non-zero first timestamps are often caused by directly piping frames or audio data from a MediaStreamTrack into the encoder. Their timestamps are typically relative to the age of thedocument, which is probably what you want.
19
+
20
+ If you want to offset all timestamps of a track such that the first one is zero, set firstTimestampBehavior: 'offset' in the options.
21
+ `);if(z(this,Ce).firstTimestampBehavior==="offset"||z(this,Ce).firstTimestampBehavior==="cross-track-offset"){t.firstDecodeTimestamp===void 0&&(t.firstDecodeTimestamp=n);let c;z(this,Ce).firstTimestampBehavior==="offset"?c=t.firstDecodeTimestamp:c=Math.min(((s=z(this,ct))==null?void 0:s.firstDecodeTimestamp)??1/0,((l=z(this,it))==null?void 0:l.firstDecodeTimestamp)??1/0),n-=c,a-=c}if(n<t.lastDecodeTimestamp)throw new Error(`Timestamps must be monotonically increasing (DTS went from ${t.lastDecodeTimestamp*1e6} to ${n*1e6}).`);return t.lastDecodeTimestamp=n,{presentationTimestamp:a,decodeTimestamp:n}};Eo=new WeakSet;Sa=function(a){if(z(this,Ce).fastStart==="fragmented")throw new Error("Can't finalize individual chunks if 'fastStart' is set to 'fragmented'.");if(a.currentChunk){if(a.finalizedChunks.push(a.currentChunk),z(this,zn).push(a.currentChunk),(a.compactlyCodedChunkTable.length===0||ka(a.compactlyCodedChunkTable).samplesPerChunk!==a.currentChunk.samples.length)&&a.compactlyCodedChunkTable.push({firstChunk:a.finalizedChunks.length,samplesPerChunk:a.currentChunk.samples.length}),z(this,Ce).fastStart==="in-memory"){a.currentChunk.offset=0;return}a.currentChunk.offset=z(this,Ne).pos;for(let n of a.currentChunk.samples)z(this,Ne).write(n.data),n.data=null;$e(this,Xn,To).call(this)}};Ca=new WeakSet;Ir=function(a=!0){if(z(this,Ce).fastStart!=="fragmented")throw new Error("Can't finalize a fragment unless 'fastStart' is set to 'fragmented'.");let n=[z(this,ct),z(this,it)].filter(l=>l&&l.currentChunk);if(n.length===0)return;let t=Df(this,Nr)._++;if(t===1){let l=ca(n,z(this,On),!0);z(this,Ne).writeBox(l)}let o=z(this,Ne).pos,i=Ps(t,n);z(this,Ne).writeBox(i);{let l=Gi(!1),c=0;for(let u of n)for(let p of u.currentChunk.samples)c+=p.size;let d=z(this,Ne).measureBox(l)+c;d>=2**32&&(l.largeSize=!0,d=z(this,Ne).measureBox(l)+c),l.size=d,z(this,Ne).writeBox(l)}for(let l of n){l.currentChunk.offset=z(this,Ne).pos,l.currentChunk.moofOffset=o;for(let c of l.currentChunk.samples)z(this,Ne).write(c.data),c.data=null}let r=z(this,Ne).pos;z(this,Ne).seek(z(this,Ne).offsets.get(i));let s=Ps(t,n);z(this,Ne).writeBox(s),z(this,Ne).seek(r);for(let l of n)l.finalizedChunks.push(l.currentChunk),z(this,zn).push(l.currentChunk),l.currentChunk=null;a&&$e(this,Xn,To).call(this)};Xn=new WeakSet;To=function(){z(this,Ne)instanceof _r&&z(this,Ne).flush()};pa=new WeakSet;nr=function(){if(z(this,xo))throw new Error("Cannot add new video or audio chunks after the file has been finalized.")};const _o=30;class Hn extends Error{constructor({message:t="",code:o=""},...i){super(t,...i);Z(this,"message");Z(this,"code");this.code=o,this.message=t}}class an extends Hn{}class Ke extends Hn{}class _a extends Hn{}class js extends Hn{}function Ph(a,n=_o){if(n<1)throw new Ke({code:"invalidArgument",message:"FPS must be greater or equal to 1"});return Math.round(a*n)}function Pn(a,n=_o){if(n<1)throw new Ke({code:"invalidArgument",message:"FPS must be greater or equal to 1"});return Math.round(a/n*1e3)}class ve{constructor(n=0){Z(this,"time");this.time=Math.round(n)}get millis(){return this.time}set millis(n){this.time=Math.round(n)}get frames(){return Ph(this.millis/1e3)}set frames(n){this.millis=Pn(n)}get seconds(){return this.millis/1e3}set seconds(n){this.millis=n*1e3}addMillis(n){return this.millis=this.millis+n,this}addFrames(n){const t=Pn(n);return this.millis=this.millis+t,this}add(n){return new ve(n.millis+this.millis)}subtract(n){return new ve(this.millis-n.millis)}static fromSeconds(n){const t=new ve;return t.millis=n*1e3,t}static fromFrames(n,t){const o=new ve;return o.millis=Pn(n,t),o}copy(){return new ve(this.millis)}toJSON(){return this.millis}static fromJSON(n){return new ve(n)}}function Ws(a,n){return[a.slice(0,n),a.slice(n)].filter(t=>t.length>0)}function fa(a,n){return n?Math.floor(Math.random()*(n-a+1)+a):a}function jh(a,n,t){t<0&&(t=0);const o=a[n];a.splice(n,1),a.splice(t,0,o)}function Zs(a){return typeof a!="function"?!1:/^class\s/.test(Function.prototype.toString.call(a))}function Wh(a){const n=a.numberOfChannels,t=a.length,o=new Int16Array(t*n);for(let i=0;i<t;i++)for(let r=0;r<n;r++){let s=a.getChannelData(r)[i]*32767;s>32767&&(s=32767),s<-32767&&(s=-32767),o[i*n+r]=s}return o}function Zh(a,n=44100,t=2){if(a.sampleRate==n&&a.numberOfChannels==t)return a;const o=Math.floor(a.duration*n),i=new OfflineAudioContext(t,1,n).createBuffer(t,o,n);for(let r=0;r<a.numberOfChannels;r++){const s=a.getChannelData(r),l=i.getChannelData(r),c=a.sampleRate/n;for(let d=0;d<l.length;d++){const u=d*c,p=Math.floor(u),v=Math.ceil(u);if(v>=s.length)l[d]=s[p];else{const h=u-p;l[d]=s[p]*(1-h)+s[v]*h}}}return i}async function Xh(a){const{fps:n,height:t,width:o,bitrate:i}=a,r=["avc1.640034","avc1.4d0034","avc1.640028","avc1.640C32","avc1.64001f","avc1.42001E"],s=["prefer-hardware","prefer-software"],l=[];for(const d of r)for(const u of s)l.push({codec:d,hardwareAcceleration:u,width:o,height:t,bitrate:i,framerate:n});const c=[];if(!("VideoEncoder"in window))return c;for(const d of l){const u=await VideoEncoder.isConfigSupported(d);u.supported&&c.push(u.config??d)}return c.sort(Hh)}function Hh(a,n){const t=a.hardwareAcceleration??"",o=n.hardwareAcceleration??"";return t<o?-1:t>o?1:0}async function Gh(a,n="untitled"){const t=document.createElement("a");if(document.head.appendChild(t),t.download=n,typeof a=="string"&&a.startsWith("data:image/svg+xml;base64,")){const o=a.split(",")[1],i=atob(o),r=new Array(i.length);for(let c=0;c<i.length;c++)r[c]=i.charCodeAt(c);const s=new Uint8Array(r),l=new Blob([s],{type:"image/svg+xml"});t.href=URL.createObjectURL(l),t.download=n.split(".")[0]+".svg"}else typeof a=="string"?t.href=a:t.href=URL.createObjectURL(a);t.click(),t.remove()}function Xs(a){return`${a.hours.toString().padStart(2,"0")}:${a.minutes.toString().padStart(2,"0")}:${a.seconds.toString().padStart(2,"0")},`+a.milliseconds.toString().padStart(3,"0")}function Hs(a){const n=new Date(1970,0,1);return n.setSeconds(a),n.setMilliseconds(Math.round(a%1*1e3)),{hours:n.getHours(),minutes:n.getMinutes(),seconds:n.getSeconds(),milliseconds:n.getMilliseconds()}}class ea{constructor(n){Z(this,"words",[]);n&&(this.words=n)}get duration(){return this.stop.subtract(this.start)}get text(){return this.words.map(({text:n})=>n).join(" ")}get start(){var n;return((n=this.words.at(0))==null?void 0:n.start)??new ve}get stop(){var n;return((n=this.words.at(-1))==null?void 0:n.stop)??new ve}}var or=(a=>(a.en="en",a.de="de",a))(or||{});class Gs{constructor(n,t,o,i){Z(this,"id",crypto.randomUUID());Z(this,"text");Z(this,"start");Z(this,"stop");Z(this,"confidence");this.text=n,this.start=new ve(t),this.stop=new ve(o),this.confidence=i}get duration(){return this.stop.subtract(this.start)}}class Vn{constructor(n=[],t=or.en){Z(this,"id",crypto.randomUUID());Z(this,"language",or.en);Z(this,"groups",[]);this.groups=n,this.language=t}get text(){return this.groups.map(({text:n})=>n).join(" ")}get words(){return this.groups.flatMap(({words:n})=>n)}*iter({count:n,duration:t,length:o}){for(const i of this.groups){let r;for(const[s,l]of i.words.entries())r&&(n&&r.words.length>=fa(...n)?(yield r,r=void 0):t&&(r==null?void 0:r.duration.seconds)>=fa(...t)?(yield r,r=void 0):o&&r.text.length>=fa(...o)&&(yield r,r=void 0)),r?r.words.push(l):r=new ea([l]),s==i.words.length-1&&(yield r)}}optimize(){const n=this.groups.flatMap(t=>t.words);for(let t=0;t<n.length-1;t++){const o=n[t],i=n[t+1];i.start.millis-o.stop.millis<0?i.start.millis=o.stop.millis+1:o.stop.millis=i.start.millis-1}return this}toSRT(n={}){let t=1,o="";for(const i of this.iter(n)){const r=Hs(i.start.seconds),s=Hs(i.stop.seconds);o+=`${t}
22
+ `+Xs(r)+" --> "+Xs(s)+`
23
+ ${i.text}
24
+
25
+ `,t+=1}return{text:o,blob:new Blob([o],{type:"text/plain;charset=utf8"})}}toJSON(){return this.groups.map(n=>n.words.map(t=>({token:t.text,start:t.start.millis,stop:t.stop.millis})))}slice(n,t=!0){let o=0;const i=[];for(const r of this.groups)for(const s of r.words)if(i.length==0&&t&&(o=s.start.millis),i.push(new Gs(s.text,s.start.millis-o,s.stop.millis-o)),i.length==n)return new Vn([new ea(i)]);return new Vn([new ea(i)])}copy(){return Vn.fromJSON(this.toJSON())}static fromJSON(n){const t=new Vn;for(const o of n){const i=new ea;for(const r of o)i.words.push(new Gs(r.token,r.start,r.stop));t.groups.push(i)}return t}static async from(n,t){const o=await fetch(n,t);if(!o.ok)throw new an({code:"unexpectedIOError",message:"An unexpected error occurred while fetching the file"});return Vn.fromJSON(await o.json())}}function ha(a,n,t){return a+(n-a)*t}function Jh(a,n,t){const o=Number.parseInt(a.slice(1),16),i=Number.parseInt(n.slice(1),16),r=o>>16&255,s=o>>8&255,l=o&255,c=i>>16&255,d=i>>8&255,u=i&255,p=Math.round(ha(r,c,t)),v=Math.round(ha(s,d,t)),h=Math.round(ha(l,u,t));return`#${((1<<24)+(p<<16)+(v<<8)+h).toString(16).slice(1)}`}const Yh={linear:a=>a,easeIn:a=>a*a,easeOut:a=>a*(2-a),easeInOut:a=>a<.5?2*a*a:-1+(4-2*a)*a};class Ve{constructor(n,t,o={}){Z(this,"input");Z(this,"output");Z(this,"options");if(n.length!==t.length)throw new Ke({code:"invalidKeyframes",message:"inputRange and outputRange must have the same length"});this.input=n.map(i=>Pn(i)),this.output=t,this.options={extrapolate:"clamp",easing:"linear",type:"number",...JSON.parse(JSON.stringify(o))}}normalize(n){const{input:t}=this;if(n<t[0])return this.options.extrapolate==="clamp"?{t:0,segment:0}:{t:(n-t[0])/(t[1]-t[0]),segment:0};if(n>t[t.length-1])return this.options.extrapolate==="clamp"?{t:1,segment:t.length-2}:{t:(n-t[t.length-2])/(t[t.length-1]-t[t.length-2]),segment:t.length-2};for(let o=0;o<t.length-1;o++){const i=t[o],r=t[o+1];if(n>=i&&n<=r)return{t:(n-i)/(r-i),segment:o}}return{t:0,segment:0}}interpolate(n,t){const o=this.output[t],i=this.output[t+1],r=Yh[this.options.easing](n);if(typeof o=="number"&&typeof i=="number")return ha(o,i,r);if(typeof o=="string"&&typeof i=="string")return Jh(o,i,r);if(this.output.length==1)return this.output[0];throw new Ke({code:"invalidKeyframes",message:"Unsupported output range types"})}value(n){const{t,segment:o}=this.normalize(typeof n=="number"?n:n.millis);return this.interpolate(t,o)}push(n,t){return this.input.push(Pn(n)),this.output.push(t),this}toJSON(){return this}static fromJSON(n){const t=new Ve([],[]);return Object.assign(t,n),t}}class Ft{constructor(){Z(this,"id",crypto.randomUUID())}toJSON(){const n={};return(this.constructor.__serializableProperties||[]).forEach(({propertyKey:t,serializer:o})=>{const i=this[t];o&&i instanceof o?n[t]=i.toJSON():n[t]=i}),n}static fromJSON(n){const t=new this;return(this.__serializableProperties||[]).forEach(({propertyKey:o,serializer:i})=>{if(n.hasOwnProperty(o))if(i){const r=i.fromJSON(n[o]);t[o]=r}else t[o]=n[o]}),t}}function he(a){return function(n,t){n.constructor.__serializableProperties||(n.constructor.__serializableProperties=[]),n.constructor.__serializableProperties.push({propertyKey:t,serializer:a})}}function Mo(a){return class extends a{constructor(){super(...arguments);Z(this,"_handlers",{})}on(t,o){if(typeof o!="function")throw new Error("The callback of an event listener needs to be a function.");const i=crypto.randomUUID();return this._handlers[t]?this._handlers[t][i]=o:this._handlers[t]={[i]:o},i}off(t,...o){if(t){if(t==="*"){this._handlers={};return}for(const i of Object.values(this._handlers))t in i&&delete i[t];for(const i of o)this.off(i)}}trigger(t,o){var r,s;const i=new CustomEvent(t,{detail:o});Object.defineProperty(i,"currentTarget",{writable:!1,value:this});for(const l in this._handlers[t]??{})(r=this._handlers[t])==null||r[l](i);for(const l in this._handlers["*"]??{})(s=this._handlers["*"])==null||s[l](i)}bubble(t){return this.on("*",o=>{t.trigger(o.type,o.detail)})}resolve(t){return(o,i)=>{this.on("error",i),this.on(t,o)}}}}function Fr(a,n,t=0){if(!(a instanceof Pe.Container||a instanceof Pe.Filter||t==3))for(const o in a){const i=a[o];o&&(i instanceof Ve&&(a[o]=i.value(n)),i!=null&&typeof i=="object"&&Object.keys(i).length&&Fr(i,n,t+1))}}var Kh=Object.defineProperty,Ra=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Kh(n,t,i),i};const Bo=class cc extends Mo(Ft){constructor(t={}){super();Z(this,"_name");Z(this,"_start",new ve);Z(this,"_stop",ve.fromSeconds(16));Z(this,"type","base");Z(this,"source");Z(this,"view",new Pe.Container);Z(this,"createdAt",new Date);Z(this,"disabled",!1);Z(this,"state","IDLE");Z(this,"track");Object.assign(this,t)}get name(){var t;return this._name??((t=this.source)==null?void 0:t.name)}set name(t){this._name=t}get start(){return this._start}get stop(){return this._stop}async connect(t){this.state="ATTACHED",this.track=t,this.trigger("attach",void 0)}set start(t){typeof t=="number"?this.start.frames=t:this._start=t,this.start.millis>=this.stop.millis&&(this.stop.millis=this.start.millis+1),this.trigger("frame",this.start.frames)}set stop(t){typeof t=="number"?this.stop.frames=t:this._stop=t,this.stop.millis<=this.start.millis&&(this.start.millis=this.stop.millis-1),this.trigger("frame",this.stop.frames)}offsetBy(t){return typeof t=="number"?(this.start.addFrames(t),this.stop.addFrames(t),this.trigger("offsetBy",ve.fromFrames(t))):(this.start.addMillis(t.millis),this.stop.addMillis(t.millis),this.trigger("offsetBy",t)),this.trigger("frame",void 0),this}async init(){}enter(){}update(t){}exit(){}detach(){var t;return(t=this.track)==null||t.remove(this),this}async split(t){var r,s;if(t||(t=(s=(r=this.track)==null?void 0:r.composition)==null?void 0:s.frame),typeof t=="number"&&(t=ve.fromFrames(t)),!t||t.millis<=this.start.millis||t.millis>=this.stop.millis)throw new Ke({code:"splitOutOfRange",message:"Cannot split clip at the specified time"});if(!this.track)throw new Ke({code:"trackNotAttached",message:"Track must be attached to a track"});const o=this.copy();this.stop=t.copy(),o.start=t.copy().addMillis(1),Fr(o,o.start.subtract(this.start));const i=this.track.clips.findIndex(l=>l.id==this.id);return await this.track.add(o,i+1),o}copy(){return cc.fromJSON(JSON.parse(JSON.stringify(this)))}set(t){return t&&Object.assign(this,t),this.trigger("update",void 0),this}};Ra([he()],Bo.prototype,"_name");Ra([he(ve)],Bo.prototype,"_start");Ra([he(ve)],Bo.prototype,"_stop");Ra([he()],Bo.prototype,"disabled");let Io=Bo;var qh=Object.defineProperty,Bn=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&qh(n,t,i),i};class qt extends Mo(Ft){constructor(){super(...arguments);Z(this,"state","IDLE");Z(this,"metadata");Z(this,"objectURL");Z(this,"duration",ve.fromSeconds(16));Z(this,"added",!1);Z(this,"type","base");Z(this,"name","");Z(this,"mimeType");Z(this,"externalURL");Z(this,"external",!1);Z(this,"file")}async createObjectURL(){return this.objectURL?this.objectURL:(this.objectURL=URL.createObjectURL(await this.getFile()),this.objectURL)}async getFile(){if(!this.file&&this.state=="LOADING"&&await new Promise(this.resolve("load")),!this.file)throw new Ke({code:"fileNotAccessible",message:"The desired file cannot be accessed"});return this.file}async loadFile(t){this.name=t.name,this.mimeType=sr(t.type),this.external=!1,this.file=t}async loadUrl(t,o){const i=await fetch(t,o);if(!(i!=null&&i.ok))throw new an({code:"unexpectedIOError",message:"An unexpected error occurred while fetching the file"});const r=await i.blob();this.name=t.toString().split("/").at(-1)??"",this.external=!0,this.file=new File([r],this.name,{type:r.type}),this.externalURL=t,this.mimeType=sr(r.type)}async from(t,o){try{this.state="LOADING",t instanceof File?await this.loadFile(t):await this.loadUrl(t,o),this.state="READY",this.trigger("load",void 0)}catch(i){throw this.state=="ERROR",this.trigger("error",new Error(String(i))),i}return this}async arrayBuffer(){return await(await this.getFile()).arrayBuffer()}async remove(){this.state="IDLE",this.objectURL&&(URL.revokeObjectURL(this.objectURL),this.objectURL=void 0),delete this.file}async download(){const t=await this.getFile();Gh(t,this.name)}async thumbnail(){return document.createElement("div")}static async from(t,o,i=new this){return i.from(t,o)}}Bn([he()],qt.prototype,"objectURL");Bn([he()],qt.prototype,"duration");Bn([he()],qt.prototype,"type");Bn([he()],qt.prototype,"name");Bn([he()],qt.prototype,"mimeType");Bn([he()],qt.prototype,"externalURL");Bn([he()],qt.prototype,"external");const Js="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E";function Qh(a){const n=new TextEncoder().encode(a);let t="";const o=n.byteLength;for(let i=0;i<o;i++)t+=String.fromCharCode(n[i]);return btoa(t)}function Ys(a){if(!a||!a.body)return Js;const n=a.body.scrollWidth,t=a.body.scrollHeight,o=a.cloneNode(!0),i=o.getElementsByTagName("style").item(0),r=o.getElementsByTagName("body").item(0);if(r==null||r.setAttribute("xmlns","http://www.w3.org/1999/xhtml"),!r)return Js;const s=new XMLSerializer,l=i?s.serializeToString(i):"",c=s.serializeToString(r),d=`
26
+ <svg xmlns="http://www.w3.org/2000/svg" width="${n}" height="${t}">
27
+ body { padding: 0; }
28
+ ${l}
29
+ <foreignObject width="100%" height="100%">
30
+ ${c}
31
+ </foreignObject>
32
+ </svg>`;return"data:image/svg+xml;base64,"+Qh(d)}class Ks extends qt{constructor(){super();Z(this,"type","html");Z(this,"iframe");const t=document.createElement("iframe");t.style.position="absolute",t.style.width="0",t.style.height="0",t.style.border="0",t.style.visibility="hidden",document.body.appendChild(t),this.iframe=t}get document(){var t;return(t=this.iframe.contentWindow)==null?void 0:t.document}async createObjectURL(){return!this.file&&this.state=="LOADING"&&await new Promise(this.resolve("load")),this.objectURL?this.objectURL:(this.objectURL=Ys(this.document),this.objectURL)}async loadUrl(t,o){await super.loadUrl(t,o),this.iframe.setAttribute("src",URL.createObjectURL(this.file)),await new Promise((i,r)=>{this.iframe.onload=()=>i(),this.iframe.onerror=s=>r(s)})}async loadFile(t){await super.loadFile(t),this.iframe.setAttribute("src",URL.createObjectURL(this.file)),await new Promise((o,i)=>{this.iframe.onload=()=>o(),this.iframe.onerror=r=>i(r)})}update(){this.objectURL&&(this.objectURL=Ys(this.document))}async thumbnail(){const t=new Image;return t.src=await this.createObjectURL(),t.className="object-contain w-full aspect-video h-auto",t}}function ev(a,n={}){const{threshold:t=.02,hopSize:o=1024,minDuration:i=500}=n,r=[],s=a.getChannelData(0),l=a.sampleRate,c=Math.floor(i/1e3*l);let d=null,u=0;for(let p=0;p<s.length;p+=o){let v=0;const h=Math.min(p+o,s.length);for(let g=p;g<h;g++)v+=s[g]*s[g];v=Math.sqrt(v/(h-p)),v<t?(u+=o,d===null&&(d=p)):(d!==null&&u>=c&&r.push({start:ve.fromSeconds(d/l),stop:ve.fromSeconds(p/l)}),d=null,u=0)}return d!==null&&u>=c&&r.push({start:ve.fromSeconds(d/l),stop:ve.fromSeconds(s.length/l)}),r}const $i=3e3;class hn extends qt{constructor(){super(...arguments);Z(this,"type","audio");Z(this,"decoding",!1);Z(this,"_silences");Z(this,"transcript");Z(this,"audioBuffer")}async decode(t=2,o=48e3,i=!1){if(this.decoding&&i&&(await new Promise(this.resolve("update")),this.audioBuffer))return this.audioBuffer;this.decoding=!0;const r=await this.arrayBuffer(),s=await new OfflineAudioContext(t,1,o).decodeAudioData(r);return this.duration.seconds=s.duration,i&&(this.audioBuffer=s),this.decoding=!1,this.trigger("update",void 0),s}async samples(t=60,o=50,i=0){const r=this.audioBuffer??await this.decode(1,3e3,!0),s=Math.round(r.sampleRate/o),l=r.sampleRate*r.duration-s,c=Math.ceil(l/t),d=r.getChannelData(0),u=[];for(let p=0;p<l;p+=c){let v=0;for(let h=p;h<p+s;h++)v+=Math.abs(d[p]);u.push(Math.log1p(v/s*100))}return u.map(p=>Math.round(p/Math.max(...u)*(100-i))+i)}async fastsampler({length:t=60,start:o=0,stop:i,logarithmic:r=!1}={}){typeof o=="object"&&(o=o.millis),typeof i=="object"&&(i=i.millis);const s=this.audioBuffer??await this.decode(1,$i,!0),l=s.getChannelData(0),c=Math.floor(Math.max(o*$i/1e3,0)),d=i?Math.floor(Math.min(i*$i/1e3,s.length)):s.length,u=Math.floor((d-c)/t),p=new Float32Array(t);for(let v=0;v<t;v++){const h=c+v*u,g=h+u;let y=-1/0;for(let V=h;V<g;V++){const B=l[V];B>y&&(y=B)}p[v]=r?Math.log2(1+y):y}return p}async thumbnail(...t){const o=await this.samples(...t),i=document.createElement("div");i.className="flex flex-row absolute space-between inset-0 audio-samples";for(const r of o){const s=document.createElement("div");s.className="audio-sample-item",s.style.height=`${r}%`,i.appendChild(s)}return i}async silences(t={}){if(this._silences)return this._silences;const o=await this.arrayBuffer(),i=new AudioContext,r=await i.decodeAudioData(o);return this._silences=ev(r,t),i.close(),this._silences}}class ar extends qt{constructor(){super(...arguments);Z(this,"type","image")}async thumbnail(){const t=new Image;return t.src=await this.createObjectURL(),t.className="object-cover w-full aspect-video h-auto",t}}class Sn extends hn{constructor(){super(...arguments);Z(this,"type","video");Z(this,"downloadInProgress",!0)}async loadUrl(t,o){const i=await fetch(t,o);if(!(i!=null&&i.ok))throw new an({code:"unexpectedIOError",message:"An unexpected error occurred while fetching the file"});this.name=t.toString().split("/").at(-1)??"",this.external=!0,this.externalURL=t,this.objectURL=String(t),this.mimeType=sr(i.headers.get("Content-type")),this.getBlob(i)}async getFile(){if(!this.file&&this.downloadInProgress&&await new Promise(this.resolve("load")),!this.file)throw new Ke({code:"fileNotAccessible",message:"The desired file cannot be accessed"});return this.file}async thumbnail(){const t=document.createElement("video");return t.className="object-cover w-full aspect-video h-auto",t.controls=!1,t.addEventListener("loadedmetadata",()=>{this.duration.seconds=t.duration,this.trigger("update",void 0)}),t.addEventListener("mousemove",o=>{const i=o.currentTarget,r=i==null?void 0:i.getBoundingClientRect(),s=o.clientX-((r==null?void 0:r.left)??0),l=i==null?void 0:i.duration;l&&r&&r.width>0&&(i.currentTime=Math.round(l*(s/r.width)))}),t.src=await this.createObjectURL(),t}async getBlob(t){try{this.downloadInProgress=!0;const o=await t.blob();this.file=new File([o],this.name,{type:o.type}),this.trigger("load",void 0)}catch(o){this.state=="ERROR",this.trigger("error",new Error(String(o)))}finally{this.downloadInProgress=!1}}}class tv{static fromJSON(n){return[new ve(n[0]),new ve(n[1])]}}var nv=Object.defineProperty,ov=Object.getOwnPropertyDescriptor,Jn=(a,n,t,o)=>{for(var i=o>1?void 0:o?ov(n,t):n,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=(o?s(n,t,i):s(i))||i);return o&&i&&nv(n,t,i),i};const In=class dc extends Io{constructor(t={}){super();Z(this,"source",new hn);Z(this,"_offset",new ve);Z(this,"playing",!1);Z(this,"duration",new ve);Z(this,"range",[new ve,this.duration]);Object.assign(this,t)}get transcript(){return this.source.transcript}set transcript(t){this.source.transcript=t}get start(){return this.range[0].add(this.offset)}get stop(){return this.range[1].add(this.offset)}set start(t){typeof t=="number"&&(t=ve.fromFrames(t));const o=t.subtract(this.offset);o.millis>=0&&o.millis<this.range[1].millis?this.range[0].millis=o.millis:o.millis<0?this.range[0].millis=0:this.range[0].millis=this.range[1].millis-1,this.trigger("frame",void 0)}set stop(t){typeof t=="number"&&(t=ve.fromFrames(t));const o=t.subtract(this.offset);o.millis>this.range[0].millis&&o.millis<=this.duration.millis?this.range[1]=o:o.millis>this.duration.millis?this.range[1]=this.duration:this.range[1].millis=this.range[0].millis+1,this.trigger("frame",void 0)}get offset(){return this._offset}set offset(t){typeof t=="number"?this._offset.frames=t:this._offset=t,this.trigger("frame",this.offset.frames)}offsetBy(t){return typeof t=="number"?(this.offset.addFrames(t),this.trigger("offsetBy",ve.fromFrames(t))):(this.offset.addMillis(t.millis),this.trigger("offsetBy",t)),this.trigger("frame",void 0),this}get muted(){var t;return((t=this.element)==null?void 0:t.muted)??!1}set muted(t){this.element&&(this.element.muted=t)}seek(t){return new Promise((o,i)=>{if(!this.element)return i(new js({code:"elementNotDefined",message:"Cannot seek on undefined element"}));(t.millis<this.start.millis||t.millis>this.stop.millis)&&(t=this.start),this.element.onerror=()=>{var r;return i((r=this.element)==null?void 0:r.error)},this.element.pause(),this.element.currentTime=t.subtract(this.offset).seconds,this.element.onseeked=()=>o()})}subclip(t,o){if(t||(t=this.range[0]),o||(o=this.range[1]),typeof t=="number"&&(t=ve.fromFrames(t)),typeof o=="number"&&(o=ve.fromFrames(o)),t.millis>=o.millis)throw new Ke({code:"invalidKeyframe",message:"Start can't lower than or equal the stop"});return t.millis<0&&(this.range[0].millis=0,t=this.range[0]),o.millis>this.duration.millis&&this.duration.millis&&(o=this.duration),this.range=[t,o],this.trigger("frame",void 0),this}get volume(){var t;return((t=this.element)==null?void 0:t.volume)??1}set volume(t){this.element&&(this.element.volume=t)}copy(){const t=dc.fromJSON(JSON.parse(JSON.stringify(this)));return t.source=this.source,t}async split(t){var r,s;if(t||(t=(s=(r=this.track)==null?void 0:r.composition)==null?void 0:s.frame),typeof t=="number"&&(t=ve.fromFrames(t)),!t||t.millis<=this.start.millis||t.millis>=this.stop.millis)throw new Ke({code:"invalidKeyframe",message:"Cannot split clip at the specified time"});if(!this.track)throw new js({code:"trackNotDefined",message:"Clip must be attached to a track"});t=t.subtract(this.offset);const o=this.copy();this.range[1]=t.copy(),o.range[0]=t.copy().addMillis(1),Fr(o,o.start.subtract(this.start));const i=this.track.clips.findIndex(l=>l.id==this.id);return await this.track.add(o,i+1),o}async addCaptions(t){var o;if(!((o=this.track)!=null&&o.composition))throw new Ke({code:"compositionNotDefined",message:"Captions can only be generated after the clip has been added to the composition"});return await this.track.composition.createTrack("caption").from(this).generate(t)}set(t){return super.set(t)}async generateCaptions(t){return this.addCaptions(t)}async removeSilences(t={}){["READY","ATTACHED"].includes(this.state)||await this.init();const o=(await this.source.silences(t)).filter(s=>qs(s,this.range)).sort((s,l)=>s.start.millis-l.start.millis);if(o.length==0)return[this];const i=t.padding??500,r=[this];for(const s of o){const l=r.at(-1);if(!l)break;if(!qs(s,l.range))continue;const c=new ve(Math.min(s.start.millis+i,s.stop.millis));if(s.start.millis>l.range[0].millis&&s.stop.millis<l.range[1].millis){const d=l.copy();l.range[1]=c,d.range[0]=s.stop,r.push(d)}else s.start.millis<=l.range[0].millis?l.range[0]=s.stop:s.stop.millis>=l.range[1].millis&&(l.range[1]=c)}return r}};Jn([he(ve)],In.prototype,"_offset",2);Jn([he(ve)],In.prototype,"duration",2);Jn([he(tv)],In.prototype,"range",2);Jn([he(Vn)],In.prototype,"transcript",1);Jn([he()],In.prototype,"muted",1);Jn([he()],In.prototype,"volume",1);let Da=In;function qs(a,n){return a.start.millis>=n[0].millis&&a.start.millis<=n[1].millis||a.stop.millis<=n[1].millis&&a.stop.millis>=n[0].millis}class ta{static fromJSON(n){return typeof n=="object"?Ve.fromJSON(n):n}}class Ri{static fromJSON(n){return typeof n.x=="object"&&(n.x=Ve.fromJSON(n.x)),typeof n.y=="object"&&(n.y=Ve.fromJSON(n.y)),n}}let av=class{constructor(a){Z(this,"target");Z(this,"animation");this.target=a}init(a,n,t=0,o){if(!(a in this.target))throw new Error(`Property [${String(a)}] cannot be assigned`);const i=[t],r=[n];typeof this.target[a]==typeof n&&t!=0&&(i.unshift(0),r.unshift(this.target[a])),this.target[a]=this.animation=new Ve(i,r,{easing:o})}};function iv(a){const n=new Proxy(a,{get(t,o){return o=="to"?(i,r)=>{if(!t.animation)throw new Ke({code:"undefinedKeyframe",message:"Cannot use 'to() before selecting a property"});const s=new ve(t.animation.input.at(-1)).frames+r;return t.animation.push(s,i),n}:(i,r,s)=>(t.init(o,i,r,s),n)}});return n}class rv extends av{}var sv=Object.defineProperty,lv=Object.getOwnPropertyDescriptor,mn=(a,n,t,o)=>{for(var i=o>1?void 0:o?lv(n,t):n,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=(o?s(n,t,i):s(i))||i);return o&&i&&sv(n,t,i),i};function Aa(a){class n extends a{constructor(){super(...arguments);Z(this,"filters");Z(this,"_height");Z(this,"_width");Z(this,"_position",{x:this.view.position.x,y:this.view.position.y});Z(this,"_scale");Z(this,"rotation",this.view.angle);Z(this,"alpha",1);Z(this,"translate",{x:0,y:0})}get position(){return this._position}set position(i){typeof i=="string"?(this._position={x:"50%",y:"50%"},this.anchor={x:.5,y:.5}):this._position=i}get scale(){return this._scale??{x:this.view.scale.x,y:this.view.scale.y}}set scale(i){typeof i=="number"||i instanceof Ve||typeof i=="function"?this._scale={x:i,y:i}:this._scale=i}get x(){return this._position.x}set x(i){this._position.x=i}get y(){return this._position.y}set y(i){this._position.y=i}get translateX(){return this.translate.x}set translateX(i){this.translate.x=i}get translateY(){return this.translate.y}set translateY(i){this.translate.y=i}get height(){return this._height??this.view.height}set height(i){this._height=i}get width(){return this._width??this.view.width}set width(i){this._width=i}get mask(){return this.view.mask}set mask(i){this.view.mask=i??null}get anchor(){return this.view.children[0]instanceof Pe.Sprite?{x:this.view.children[0].anchor.x,y:this.view.children[0].anchor.y}:{x:0,y:0}}set anchor(i){const r=typeof i=="number"?{x:i,y:i}:i;for(const s of this.view.children)s instanceof Pe.Sprite&&s.anchor.set(r.x,r.y)}enter(){this.filters&&!this.view.filters&&(this.view.filters=this.filters)}exit(){this.filters&&this.view.filters&&(this.view.filters=null)}animate(){return iv(new rv(this))}}return mn([he(ta)],n.prototype,"_height",2),mn([he(ta)],n.prototype,"_width",2),mn([he(Ri)],n.prototype,"_position",2),mn([he(Ri)],n.prototype,"_scale",2),mn([he(ta)],n.prototype,"rotation",2),mn([he(ta)],n.prototype,"alpha",2),mn([he(Ri)],n.prototype,"translate",2),mn([he()],n.prototype,"anchor",1),n}function Ua(a,n,t){const o=t.value;return t.value=function(...i){var p,v,h,g;const r=i[0].subtract(this.start),s={width:((v=(p=this.track)==null?void 0:p.composition)==null?void 0:v.width)??1920,height:((g=(h=this.track)==null?void 0:h.composition)==null?void 0:g.height)??1080};let l;typeof this.translate.x=="number"?l=this.translate.x:typeof this.translate.x=="function"?l=this.translate.x.bind(this)(r):l=this.translate.x.value(r);let c;typeof this.translate.y=="number"?c=this.translate.y:typeof this.translate.y=="function"?c=this.translate.y.bind(this)(r):c=this.translate.y.value(r);let d;typeof this._position.x=="number"?d=this._position.x:typeof this._position.x=="string"?d=Number.parseFloat(this._position.x)*s.width/100:typeof this._position.x=="function"?d=this._position.x.bind(this)(r):d=this._position.x.value(r);let u;if(typeof this._position.y=="number"?u=this._position.y:typeof this._position.y=="string"?u=Number.parseFloat(this._position.y)*s.height/100:typeof this._position.y=="function"?u=this._position.y.bind(this)(r):u=this._position.y.value(r),this.view.position.set(d+l,u+c),typeof this._height=="string"?this.view.height=Math.round(Number.parseFloat(this._height)*s.height/100):typeof this._height=="object"?this.view.height=this._height.value(r):typeof this._height=="function"?this.view.height=this._height.bind(this)(r):this._height&&(this.view.height=this._height),this._height&&!this._width&&this.view.scale.set(this.view.scale.y),typeof this._width=="string"?this.view.width=Math.round(Number.parseFloat(this._width)*s.width/100):typeof this._width=="object"?this.view.width=this._width.value(r):typeof this._width=="function"?this.view.width=this._width.bind(this)(r):this._width&&(this.view.width=this._width),this._width&&!this._height&&this.view.scale.set(this.view.scale.x),this._scale){let y;typeof this._scale.x=="number"?y=this._scale.x:typeof this._scale.x=="function"?y=this._scale.x.bind(this)(r):y=this._scale.x.value(r);let V;typeof this._scale.y=="number"?V=this._scale.y:typeof this._scale.y=="function"?V=this._scale.y.bind(this)(r):V=this._scale.y.value(r),(this._width||this._height)&&(y*=this.view.scale._x,V*=this.view.scale._y),this.view.scale.set(y,V)}return typeof this.rotation=="number"?this.view.angle=this.rotation:typeof this.rotation=="function"?this.view.angle=this.rotation.bind(this)(r):this.view.angle=this.rotation.value(r),typeof this.alpha=="number"?this.view.alpha=this.alpha:typeof this.alpha=="function"?this.view.alpha=this.alpha.bind(this)(r):this.view.alpha=this.alpha.value(r),o.apply(this,i)},t}var cv=Object.defineProperty,dv=Object.getOwnPropertyDescriptor,uv=(a,n,t,o)=>{for(var i=dv(n,t),r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&cv(n,t,i),i};const uc=class mc extends Aa(Io){constructor(t,o={}){super();Z(this,"type","image");Z(this,"element",new Image);Z(this,"source",new ar);Z(this,"sprite",new Pe.Sprite);this.view.addChild(this.sprite),t instanceof ar&&(this.source=t),t instanceof File&&this.source.from(t),Object.assign(this,o)}async init(){this.element.setAttribute("src",await this.source.createObjectURL()),await new Promise((t,o)=>{this.element.onload=()=>{this.sprite.texture=Pe.Texture.from(this.element),this.state="READY",t()},this.element.onerror=i=>{this.state="ERROR",o(new an({code:"sourceNotProcessable",message:"An error occurred while processing the input medium."}))}})}update(t){}copy(){const t=mc.fromJSON(JSON.parse(JSON.stringify(this)));return t.filters=this.filters,t.source=this.source,t}};uv([Ua],uc.prototype,"update");let mv=uc;const na={"The Bold Font":{weights:["500"],url:"https://diffusion-studio-public.s3.eu-central-1.amazonaws.com/fonts/the-bold-font.ttf"},"Komika Axis":{weights:["400"],url:"https://diffusion-studio-public.s3.eu-central-1.amazonaws.com/fonts/komika-axis.ttf"},Geologica:{weights:["100","200","300","400","500","600","700","800","900"],url:"https://fonts.gstatic.com/s/geologica/v1/oY1l8evIr7j9P3TN9YwNAdyjzUyDKkKdAGOJh1UlCDUIhAIdhCZOn1fLsig7jfvCCPHZckUWE1lELWNN-w.woff2"},Figtree:{weights:["300","400","500","600","700","800","900"],url:"https://fonts.gstatic.com/s/figtree/v5/_Xms-HUzqDCFdgfMm4S9DaRvzig.woff2"},Urbanist:{weights:["100","200","300","400","500","600","700","800","900"],url:"https://fonts.gstatic.com/s/urbanist/v15/L0x-DF02iFML4hGCyMqlbS1miXK2.woff2"},Montserrat:{weights:["100","200","300","400","500","600","700","800","900"],url:"https://fonts.gstatic.com/s/montserrat/v26/JTUSjIg1_i6t8kCHKm459WlhyyTh89Y.woff2"},Bangers:{weights:["400"],url:"https://fonts.gstatic.com/s/bangers/v20/FeVQS0BTqb0h60ACH55Q2J5hm24.woff2"},Chewy:{weights:["400"],url:"https://fonts.gstatic.com/s/chewy/v18/uK_94ruUb-k-wn52KjI9OPec.woff2"},"Source Code Pro":{weights:["200","300","400","500","600","700","800","900"],url:"https://fonts.gstatic.com/s/sourcecodepro/v22/HI_SiYsKILxRpg3hIP6sJ7fM7PqlPevWnsUnxg.woff2"}};var pv=Object.defineProperty,La=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&pv(n,t,i),i};const Fo=class ir extends Mo(Ft){constructor(t){super();Z(this,"loaded",!1);Z(this,"family");Z(this,"weight");Z(this,"source");Z(this,"style");t!=null&&t.source.startsWith("https://")&&(t.source=`url(${t.source})`),this.family=(t==null?void 0:t.family)??"Arial",this.source=t==null?void 0:t.source,this.style=t==null?void 0:t.style,this.weight=t==null?void 0:t.weight}get name(){return this.family+" "+(this.style??this.weight)}async load(){if(this.loaded||!this.source||!this.family)return this;const t=new FontFace(this.name,this.source);return this.weight&&(t.weight=this.weight),await new Promise(o=>{t.load().then(i=>{document.fonts.add(i),o(null)})}),this.loaded=!0,this.trigger("load",void 0),this}copy(){const t=ir.fromJSON(JSON.parse(JSON.stringify(this)));return t.loaded=this.loaded,t}static async localFonts(){const t={};"queryLocalFonts"in window||Object.assign(window,{queryLocalFonts:()=>[]});for(const o of await window.queryLocalFonts()){if(o.family in t){t[o.family].push(o);continue}t[o.family]=[o]}return Object.keys(t).map(o=>({family:o,variants:t[o].map(i=>({family:o,style:i.style,source:`local('${i.fullName}'), local('${i.postscriptName}')`}))}))}static webFonts(){return Object.keys(na).map(t=>({family:t,variants:na[t].weights.map(o=>({family:t,source:`url(${na[t].url})`,weight:o}))}))}static fromFamily({family:t,weight:o}){return new ir({family:t,source:`url(${na[t].url})`,weight:o})}};La([he()],Fo.prototype,"family");La([he()],Fo.prototype,"weight");La([he()],Fo.prototype,"source");La([he()],Fo.prototype,"style");let pt=Fo;const Jt=4,pc={center:.5,justify:.5,left:0,right:1},fc={alphabetic:0,top:0,middle:.5,hanging:1,bottom:1,ideographic:1};var fv=Object.defineProperty,hv=Object.getOwnPropertyDescriptor,Et=(a,n,t,o)=>{for(var i=hv(n,t),r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&fv(n,t,i),i};const gt=class hc extends Aa(Io){constructor(t){super();Z(this,"type","text");Z(this,"_text","");Z(this,"_textCase");Z(this,"_anchor",{x:0,y:0});Z(this,"_font",new pt);Z(this,"style",new Pe.TextStyle({fill:"#FFFFFF",fontFamily:this._font.family,fontSize:16}));this.style.padding=20,typeof t=="string"?(this.text=t,this.reflectUpdate()):t&&(Object.assign(this,t),this.reflectUpdate()),this.on("update",this.reflectUpdate.bind(this))}get text(){return this._text}set text(t){if(this._text=t,!this.view.children.length){const o=new Pe.Text({text:this.transformedText,style:this.style,resolution:Jt,scale:Jt});this.view.addChild(o)}this.view.children[0]instanceof Pe.Text&&this.transformedText&&(this.view.children[0].text=this.transformedText)}get name(){return this._text}get font(){return this._font}set font(t){if(this._font=t,t.loaded){this.style.fontFamily=t.name;return}this._font.load().then(()=>{this.style.fontFamily=t.name,this.trigger("update",void 0)})}get maxWidth(){if(this.style.wordWrap)return this.style.wordWrapWidth*Jt}set maxWidth(t){t?(this.style.wordWrap=!0,this.style.wordWrapWidth=t/Jt):this.style.wordWrap=!1}get textAlign(){return this.style.align}set textAlign(t){this.style.align=t,this.anchor.x=pc[t]}get padding(){return this.style.padding}set padding(t){this.style.padding=t}get textBaseline(){return this.style.textBaseline}set textBaseline(t){this.style.textBaseline=t,this.anchor.y=fc[t]}get fillStyle(){const{fill:t}=this.style;return new Pe.Color(t.toString()).toHex().toUpperCase()}set fillStyle(t){this.style.fill=t}get anchor(){return this._anchor}set anchor(t){typeof t=="number"?this._anchor={x:t,y:t}:this._anchor=t}get stroke(){if(!this.style.stroke)return;let{color:t="#000000",alpha:o=1,width:i=3,join:r="round",miterLimit:s}=this.style.stroke;return t=new Pe.Color(t).toHex().toUpperCase(),{color:t,alpha:o,width:i,join:r,miterLimit:s}}set stroke(t){if(!t){this.style.stroke=void 0;return}const{color:o="#000000",alpha:i=1,width:r=3,join:s="round",miterLimit:l}=t;this.style.stroke={color:o,alpha:i,width:r,join:s,miterLimit:l}}get textCase(){return this._textCase}set textCase(t){this._textCase=t,this.view.children[0]instanceof Pe.Text&&this.transformedText&&(this.view.children[0].text=this.transformedText)}get shadow(){if(!this.style.dropShadow)return;const{alpha:t,angle:o,blur:i,color:r,distance:s}=this.style.dropShadow,l=new Pe.Color(r).toHex().toUpperCase();return{alpha:t,angle:o,blur:i,color:l,distance:s}}set shadow(t){t?this.style.dropShadow=t:this.style.dropShadow=!1}get fontFamily(){return Array.isArray(this.style.fontFamily)?this.style.fontFamily[0]:this.style.fontFamily}get fontSize(){return this.style.fontSize}set fontSize(t){this.style.fontSize=t}get leading(){return this.style.leading}set leading(t){this.style.leading=t}update(t){}copy(){const t=hc.fromJSON(JSON.parse(JSON.stringify(this)));return t.filters=this.filters,t.font=this.font,t}get transformedText(){return this.textCase=="lower"?this._text.toLocaleLowerCase():this.textCase=="upper"?this._text.toUpperCase():this._text}reflectUpdate(){var r,s,l;const t=((r=this.view.children[0])==null?void 0:r.width)??0,o=((s=this.view.children[0])==null?void 0:s.height)??0,i=(((l=this.style.dropShadow)==null?void 0:l.distance)??0)*Jt;this.view.pivot={x:(t-i)*this._anchor.x,y:(o-i)*this._anchor.y}}set(t){return super.set(t)}};Et([he()],gt.prototype,"text");Et([he(pt)],gt.prototype,"font");Et([he()],gt.prototype,"maxWidth");Et([he()],gt.prototype,"textAlign");Et([he()],gt.prototype,"padding");Et([he()],gt.prototype,"textBaseline");Et([he()],gt.prototype,"fillStyle");Et([he()],gt.prototype,"anchor");Et([he()],gt.prototype,"stroke");Et([he()],gt.prototype,"textCase");Et([he()],gt.prototype,"shadow");Et([he()],gt.prototype,"fontSize");Et([he()],gt.prototype,"leading");Et([Ua],gt.prototype,"update");let Yn=gt;function Di(a){const n=a.split(" ").map(t=>`${t} `);return n[n.length-1]=n[n.length-1].replace(/ $/,""),n}const vv={get(a,n){const t=a[n];return typeof t=="number"?t*Jt:Array.isArray(t)&&typeof t[0]=="number"?t.map(o=>o*Jt):t}};function gv(a){return new Proxy(a,vv)}class yv{constructor(){Z(this,"tokens",[])}get width(){return this.tokens.reduce((n,t)=>n+t.metrics.lineWidths[0],0)}get height(){return Math.max(...this.tokens.map(n=>n.metrics.lineHeight))}}class Qs{constructor(){Z(this,"lines",[])}get width(){return Math.max(...this.lines.map(n=>n.width))}get height(){return this.lines.reduce((n,t)=>n+t.height,0)}}class bv{static fromJSON(n){return n.map(t=>(t.font&&(t.font=pt.fromJSON(t.font)),t))}}var wv=Object.defineProperty,kv=Object.getOwnPropertyDescriptor,Kn=(a,n,t,o)=>{for(var i=o>1?void 0:o?kv(n,t):n,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=(o?s(n,t,i):s(i))||i);return o&&i&&wv(n,t,i),i};const Fn=class vc extends Yn{constructor(t){super();Z(this,"type","complex_text");Z(this,"_maxWidth");Z(this,"_textAlign","left");Z(this,"_textBaseline","top");Z(this,"model",new Pe.Container);Z(this,"segments",[]);Z(this,"metrics",new Qs);Z(this,"background");Z(this,"styles");this.view.addChild(this.model),typeof t=="string"?(this.text=t,this.reflectUpdate()):t&&(Object.assign(this,t),this.reflectUpdate())}get text(){return this._text}set text(t){this._text=t}get maxWidth(){return this._maxWidth}set maxWidth(t){this._maxWidth=t}get textAlign(){return this._textAlign}set textAlign(t){this._textAlign=t,this._anchor.x=pc[t];const o=this.metrics.width;for(const i of this.metrics.lines){let r=0;(t=="center"||t=="justify")&&(r=(o-i.width)/2),t=="right"&&(r=o-i.width);for(const s of i.tokens)this.model.children[s.index].x=r,r+=s.metrics.lineWidths[0]}}get textBaseline(){return this._textBaseline}set textBaseline(t){this._textBaseline=t,this._anchor.y=fc[t];let o=0;for(const i of this.metrics.lines){const r=i.height;for(const s of i.tokens){let l=0;t=="middle"&&(l=(r-s.metrics.lineHeight)/2),t=="bottom"&&(l=r-s.metrics.lineHeight),this.model.children[s.index].y=o+l}o+=r}}copy(){const t=vc.fromJSON(JSON.parse(JSON.stringify(this)));return t.filters=this.filters,t.font=this.font,t}createRenderSplits(t=[]){var r,s;const o=this.transformedText??"",i=[{index:void 0,tokens:Di(o.substring(0,(r=t==null?void 0:t.at(0))==null?void 0:r.start))}];for(let l=0;l<t.length;l++)i.push({index:t[l].index,tokens:Di(o.substring(t[l].start,t[l].stop))}),!((t[l].stop??o.length)>=o.length)&&i.push({index:void 0,tokens:Di(o.substring(t[l].stop,(s=t.at(l+1))==null?void 0:s.start))});return i.filter(l=>l.tokens.join("").trim().length)}createTextMetrics(t,o){var r,s,l;const i=new Qs;for(const c of t){const d=c.index!=null?o[c.index]:this.style;for(let u=0;u<c.tokens.length;u++){const p=gv(Pe.CanvasTextMetrics.measureText(c.tokens[u],d)),v=(((r=i.lines.at(-1))==null?void 0:r.width)??0)+p.lineWidths[0],h=this.maxWidth??Number.POSITIVE_INFINITY,g=(s=c.tokens.at(u-1))==null?void 0:s.match(/(\n|\\n).$/gim);(v>h||g||!i.lines.length)&&i.lines.push(new yv),this.model.addChild(new Pe.Text({text:c.tokens[u],style:d,resolution:Jt,scale:Jt})),(l=i.lines.at(-1))==null||l.tokens.push({metrics:p,index:this.model.children.length-1})}}return i}createTextStyles(){var t;return((t=this.styles)==null?void 0:t.map(o=>{var r;const i=this.style.clone();return i.fill=o.fillStyle??this.style.fill,i.fontSize=o.fontSize??this.style.fontSize,i.stroke=o.stroke??this.style.stroke,i.fontFamily=((r=o.font)==null?void 0:r.name)??this.style.fontFamily,i}))??[]}drawBackground(){var l,c;if(this.view.children.length>1&&this.view.removeChildAt(0),!this.background)return;const t=this.model.width,o=this.model.height,i=((l=this.background.padding)==null?void 0:l.x)??40,r=((c=this.background.padding)==null?void 0:c.y)??10,s=new Pe.Graphics;s.roundRect(0-i/2,2-r/2,t+i,o+r,this.background.borderRadius??20),s.fill(this.background.fill??"#000000"),s.alpha=this.background.alpha??1,this.view.addChildAt(s,0)}reflectUpdate(){var l;if(!this.transformedText)return;this.model.removeChildren();const t=this.createRenderSplits(this.segments),o=this.createTextStyles();this.metrics=this.createTextMetrics(t,o),this.textAlign=this.textAlign,this.textBaseline=this.textBaseline;const i=this.view.width,r=this.view.height,s=(((l=this.style.dropShadow)==null?void 0:l.distance)??0)*Jt;this.view.pivot={x:(i-s)*this._anchor.x,y:(r-s)*this._anchor.y},this.drawBackground()}};Kn([he()],Fn.prototype,"background",2);Kn([he(bv)],Fn.prototype,"styles",2);Kn([he()],Fn.prototype,"text",1);Kn([he()],Fn.prototype,"maxWidth",1);Kn([he()],Fn.prototype,"textAlign",1);Kn([he()],Fn.prototype,"textBaseline",1);let Oa=Fn;const gc="KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBtPSh0PT4odFt0LkFWTUVESUFfVFlQRV9VTktOT1dOPS0xXT0iQVZNRURJQV9UWVBFX1VOS05PV04iLHRbdC5BVk1FRElBX1RZUEVfVklERU89MF09IkFWTUVESUFfVFlQRV9WSURFTyIsdFt0LkFWTUVESUFfVFlQRV9BVURJTz0xXT0iQVZNRURJQV9UWVBFX0FVRElPIix0W3QuQVZNRURJQV9UWVBFX0RBVEE9Ml09IkFWTUVESUFfVFlQRV9EQVRBIix0W3QuQVZNRURJQV9UWVBFX1NVQlRJVExFPTNdPSJBVk1FRElBX1RZUEVfU1VCVElUTEUiLHRbdC5BVk1FRElBX1RZUEVfQVRUQUNITUVOVD00XT0iQVZNRURJQV9UWVBFX0FUVEFDSE1FTlQiLHRbdC5BVk1FRElBX1RZUEVfTkI9NV09IkFWTUVESUFfVFlQRV9OQiIsdCkpKG18fHt9KSxvPSh0PT4odC5GRm1wZWdXb3JrZXJMb2FkZWQ9IkZGbXBlZ1dvcmtlckxvYWRlZCIsdC5XQVNNUnVudGltZUluaXRpYWxpemVkPSJXQVNNUnVudGltZUluaXRpYWxpemVkIix0LkxvYWRXQVNNPSJMb2FkV0FTTSIsdC5HZXRBVlBhY2tldD0iR2V0QVZQYWNrZXQiLHQuR2V0QVZQYWNrZXRzPSJHZXRBVlBhY2tldHMiLHQuR2V0QVZTdHJlYW09IkdldEFWU3RyZWFtIix0LkdldEFWU3RyZWFtcz0iR2V0QVZTdHJlYW1zIix0LlJlYWRBVlBhY2tldD0iUmVhZEFWUGFja2V0Iix0LkFWUGFja2V0U3RyZWFtPSJBVlBhY2tldFN0cmVhbSIsdC5SZWFkTmV4dEFWUGFja2V0PSJSZWFkTmV4dEFWUGFja2V0Iix0LlN0b3BSZWFkQVZQYWNrZXQ9IlN0b3BSZWFkQVZQYWNrZXQiLHQpKShvfHx7fSk7Y29uc3QgQT0iS0daMWJtTjBhVzl1S0NsN0luVnpaU0J6ZEhKcFkzUWlPMnhsZENCbU8zTmxiR1l1Y0c5emRFMWxjM05oWjJVb2UzUjVjR1U2SWtaR2JYQmxaMWR2Y210bGNreHZZV1JsWkNKOUtTeHpaV3htTG1Ga1pFVjJaVzUwVEdsemRHVnVaWElvSW0xbGMzTmhaMlVpTEdGemVXNWpJR1oxYm1OMGFXOXVLR3dwZTJOdmJuTjBlM1I1Y0dVNmRDeGtZWFJoT21NOWUzMHNiWE5uU1dRNmIzMDliQzVrWVhSaE8zUnllWHRwWmloMFBUMDlJa3h2WVdSWFFWTk5JaWw3WTI5dWMzUjdkMkZ6YlV4dllXUmxjbEJoZEdnNlpYMDlZM3g4ZTMwN1pqMWhkMkZwZENoaGQyRnBkQ0JwYlhCdmNuUW9aU2twTG1SbFptRjFiSFFvS1gxbGJITmxJR2xtS0hROVBUMGlSMlYwUVZaVGRISmxZVzBpS1h0amIyNXpkSHRtYVd4bE9tVXNjM1J5WldGdFZIbHdaVHB6TEhOMGNtVmhiVWx1WkdWNE9tRjlQV01zY2oxbUxtZGxkRUZXVTNSeVpXRnRLR1VzY3l4aEtUdHpaV3htTG5CdmMzUk5aWE56WVdkbEtIdDBlWEJsT25Rc2JYTm5TV1E2Ynl4eVpYTjFiSFE2Y24wc1czSXVZMjlrWldOd1lYSXVaWGgwY21Ga1lYUmhMbUoxWm1abGNsMHBmV1ZzYzJVZ2FXWW9kRDA5UFNKSFpYUkJWbE4wY21WaGJYTWlLWHRqYjI1emRIdG1hV3hsT21WOVBXTXNjejFtTG1kbGRFRldVM1J5WldGdGN5aGxLVHR6Wld4bUxuQnZjM1JOWlhOellXZGxLSHQwZVhCbE9uUXNiWE5uU1dRNmJ5eHlaWE4xYkhRNmMzMHNjeTV0WVhBb1lUMCtZUzVqYjJSbFkzQmhjaTVsZUhSeVlXUmhkR0V1WW5WbVptVnlLU2w5Wld4elpTQnBaaWgwUFQwOUlrZGxkRUZXVUdGamEyVjBJaWw3WTI5dWMzUjdabWxzWlRwbExIUnBiV1U2Y3l4emRISmxZVzFVZVhCbE9tRXNjM1J5WldGdFNXNWtaWGc2Y24wOVl5eHVQV1l1WjJWMFFWWlFZV05yWlhRb1pTeHpMR0VzY2lrN2MyVnNaaTV3YjNOMFRXVnpjMkZuWlNoN2RIbHdaVHAwTEcxelowbGtPbThzY21WemRXeDBPbTU5TEZ0dUxtUmhkR0V1WW5WbVptVnlYU2w5Wld4elpTQnBaaWgwUFQwOUlrZGxkRUZXVUdGamEyVjBjeUlwZTJOdmJuTjBlMlpwYkdVNlpTeDBhVzFsT25OOVBXTXNZVDFtTG1kbGRFRldVR0ZqYTJWMGN5aGxMSE1wTzNObGJHWXVjRzl6ZEUxbGMzTmhaMlVvZTNSNWNHVTZkQ3h0YzJkSlpEcHZMSEpsYzNWc2REcGhmU3hoTG0xaGNDaHlQVDV5TG1SaGRHRXVZblZtWm1WeUtTbDlaV3h6WlNCcFppaDBQVDA5SWxKbFlXUkJWbEJoWTJ0bGRDSXBlMk52Ym5OMGUyWnBiR1U2WlN4emRHRnlkRHB6TEdWdVpEcGhMSE4wY21WaGJWUjVjR1U2Y2l4emRISmxZVzFKYm1SbGVEcHVmVDFqTEdROVppNXlaV0ZrUVZaUVlXTnJaWFFvYnl4bExITXNZU3h5TEc0cE8zTmxiR1l1Y0c5emRFMWxjM05oWjJVb2UzUjVjR1U2ZEN4dGMyZEpaRHB2TEhKbGMzVnNkRHBrZlNsOWZXTmhkR05vS0dVcGUzTmxiR1l1Y0c5emRFMWxjM05oWjJVb2UzUjVjR1U2ZEN4dGMyZEpaRHB2TEdWeWNrMXpaenBsSUdsdWMzUmhibU5sYjJZZ1JYSnliM0kvWlM1dFpYTnpZV2RsT2lKVmJtdHViM2R1SUVWeWNtOXlJbjBwZlgwcGZTa29LVHNLIixnPXQ9PlVpbnQ4QXJyYXkuZnJvbShhdG9iKHQpLGU9PmUuY2hhckNvZGVBdCgwKSksVj10eXBlb2Ygc2VsZjwidSImJnNlbGYuQmxvYiYmbmV3IEJsb2IoW2coQSldLHt0eXBlOiJ0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCJ9KTtmdW5jdGlvbiBFKHQpe2xldCBlO3RyeXtpZihlPVYmJihzZWxmLlVSTHx8c2VsZi53ZWJraXRVUkwpLmNyZWF0ZU9iamVjdFVSTChWKSwhZSl0aHJvdyIiO2NvbnN0IHM9bmV3IFdvcmtlcihlLHtuYW1lOnQ/Lm5hbWV9KTtyZXR1cm4gcy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9Pnsoc2VsZi5VUkx8fHNlbGYud2Via2l0VVJMKS5yZXZva2VPYmplY3RVUkwoZSl9KSxzfWNhdGNoe3JldHVybiBuZXcgV29ya2VyKCJkYXRhOnRleHQvamF2YXNjcmlwdDtiYXNlNjQsIitBLHtuYW1lOnQ/Lm5hbWV9KX1maW5hbGx5e2UmJihzZWxmLlVSTHx8c2VsZi53ZWJraXRVUkwpLnJldm9rZU9iamVjdFVSTChlKX19Y29uc3QgdT0xZTY7Y2xhc3MgcHtmZm1wZWdXb3JrZXI7ZmZtcGVnV29ya2VyTG9hZFN0YXR1czttc2dJZDtmaWxlO2NvbnN0cnVjdG9yKGUpe3RoaXMuZmZtcGVnV29ya2VyPW5ldyBFLHRoaXMuZmZtcGVnV29ya2VyTG9hZFN0YXR1cz1uZXcgUHJvbWlzZSgocyxhKT0+e3RoaXMuZmZtcGVnV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGk9Pntjb25zdHt0eXBlOnIsZXJyTXNnOmR9PWkuZGF0YTtyPT09by5GRm1wZWdXb3JrZXJMb2FkZWQmJnRoaXMucG9zdChvLkxvYWRXQVNNLHt3YXNtTG9hZGVyUGF0aDplLndhc21Mb2FkZXJQYXRofSkscj09PW8uV0FTTVJ1bnRpbWVJbml0aWFsaXplZCYmcyghMCkscj09PW8uTG9hZFdBU00mJmQmJmEoZCl9KX0pLHRoaXMubXNnSWQ9MH1wb3N0KGUscyxhKXt0aGlzLmZmbXBlZ1dvcmtlci5wb3N0TWVzc2FnZSh7dHlwZTplLG1zZ0lkOmE/P3RoaXMubXNnSWQrKyxkYXRhOnN9KX1hc3luYyBsb2FkKGUpe2NvbnN0IHM9YXdhaXQgdGhpcy5mZm1wZWdXb3JrZXJMb2FkU3RhdHVzO3JldHVybiB0aGlzLmZpbGU9ZSxzfWRlc3Ryb3koKXt0aGlzLmZpbGU9dm9pZCAwLHRoaXMuZmZtcGVnV29ya2VyLnRlcm1pbmF0ZSgpfWdldEFWU3RyZWFtKGU9bS5BVk1FRElBX1RZUEVfVklERU8scz0tMSl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGkpPT57aWYoIXRoaXMuZmlsZSl7aSgiZmlsZSBpcyBub3QgbG9hZGVkIik7cmV0dXJufWNvbnN0IHI9dGhpcy5tc2dJZCxkPSh7ZGF0YTpufSk9PntuLnR5cGU9PT1vLkdldEFWU3RyZWFtJiZuLm1zZ0lkPT09ciYmKG4uZXJyTXNnP2kobi5lcnJNc2cpOmEobi5yZXN1bHQpLHRoaXMuZmZtcGVnV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGQpKX07dGhpcy5mZm1wZWdXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZCksdGhpcy5wb3N0KG8uR2V0QVZTdHJlYW0se2ZpbGU6dGhpcy5maWxlLHN0cmVhbVR5cGU6ZSxzdHJlYW1JbmRleDpzfSl9KX1nZXRBVlN0cmVhbXMoKXtyZXR1cm4gbmV3IFByb21pc2UoKGUscyk9PntpZighdGhpcy5maWxlKXtzKCJmaWxlIGlzIG5vdCBsb2FkZWQiKTtyZXR1cm59Y29uc3QgYT10aGlzLm1zZ0lkLGk9KHtkYXRhOnJ9KT0+e3IudHlwZT09PW8uR2V0QVZTdHJlYW1zJiZyLm1zZ0lkPT09YSYmKHIuZXJyTXNnP3Moci5lcnJNc2cpOmUoci5yZXN1bHQpLHRoaXMuZmZtcGVnV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpKX07dGhpcy5mZm1wZWdXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSksdGhpcy5wb3N0KG8uR2V0QVZTdHJlYW1zLHtmaWxlOnRoaXMuZmlsZX0pfSl9Z2V0QVZQYWNrZXQoZSxzPW0uQVZNRURJQV9UWVBFX1ZJREVPLGE9LTEpe3JldHVybiBuZXcgUHJvbWlzZSgoaSxyKT0+e2lmKCF0aGlzLmZpbGUpe3IoImZpbGUgaXMgbm90IGxvYWRlZCIpO3JldHVybn1jb25zdCBkPXRoaXMubXNnSWQsbj1oPT57Y29uc3QgbD1oLmRhdGE7bC50eXBlPT09by5HZXRBVlBhY2tldCYmbC5tc2dJZD09PWQmJihsLmVyck1zZz9yKGwuZXJyTXNnKTppKGwucmVzdWx0KSx0aGlzLmZmbXBlZ1dvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixuKSl9O3RoaXMuZmZtcGVnV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG4pLHRoaXMucG9zdChvLkdldEFWUGFja2V0LHtmaWxlOnRoaXMuZmlsZSx0aW1lOmUsc3RyZWFtVHlwZTpzLHN0cmVhbUluZGV4OmF9KX0pfWdldEFWUGFja2V0cyhlKXtyZXR1cm4gbmV3IFByb21pc2UoKHMsYSk9PntpZighdGhpcy5maWxlKXthKCJmaWxlIGlzIG5vdCBsb2FkZWQiKTtyZXR1cm59Y29uc3QgaT10aGlzLm1zZ0lkLHI9ZD0+e2NvbnN0IG49ZC5kYXRhO24udHlwZT09PW8uR2V0QVZQYWNrZXRzJiZuLm1zZ0lkPT09aSYmKG4uZXJyTXNnP2Eobi5lcnJNc2cpOnMobi5yZXN1bHQpLHRoaXMuZmZtcGVnV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpKX07dGhpcy5mZm1wZWdXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksdGhpcy5wb3N0KG8uR2V0QVZQYWNrZXRzLHtmaWxlOnRoaXMuZmlsZSx0aW1lOmV9KX0pfXJlYWRBVlBhY2tldChlPTAscz0wLGE9bS5BVk1FRElBX1RZUEVfVklERU8saT0tMSl7Y29uc3Qgcj1uZXcgQ291bnRRdWV1aW5nU3RyYXRlZ3koe2hpZ2hXYXRlck1hcms6MX0pLGQ9dGhpcy5tc2dJZDtsZXQgbj0wO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0Omg9PntpZighdGhpcy5maWxlKXtoLmVycm9yKCJmaWxlIGlzIG5vdCBsb2FkZWQiKTtyZXR1cm59Y29uc3QgbD1mPT57Y29uc3QgYz1mLmRhdGE7Yy50eXBlPT09by5SZWFkQVZQYWNrZXQmJmMubXNnSWQ9PT1kJiZjLmVyck1zZyYmKGguZXJyb3IoYy5lcnJNc2cpLHRoaXMuZmZtcGVnV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGwpKSxjLnR5cGU9PT1vLkFWUGFja2V0U3RyZWFtJiZjLm1zZ0lkPT09ZCYmKGMucmVzdWx0P2guZW5xdWV1ZShjLnJlc3VsdCk6aC5jbG9zZSgpKX07dGhpcy5mZm1wZWdXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbCksdGhpcy5wb3N0KG8uUmVhZEFWUGFja2V0LHtmaWxlOnRoaXMuZmlsZSxzdGFydDplLGVuZDpzLHN0cmVhbVR5cGU6YSxzdHJlYW1JbmRleDppfSl9LHB1bGw6KCk9PntuPjAmJnRoaXMucG9zdChvLlJlYWROZXh0QVZQYWNrZXQsdm9pZCAwLGQpLG4rK30sY2FuY2VsOigpPT57dGhpcy5wb3N0KG8uU3RvcFJlYWRBVlBhY2tldCx2b2lkIDAsZCl9fSxyKX1nZXRWaWRlb1N0cmVhbShlKXtyZXR1cm4gdGhpcy5nZXRBVlN0cmVhbShtLkFWTUVESUFfVFlQRV9WSURFTyxlKX1nZXRBdWRpb1N0cmVhbShlKXtyZXR1cm4gdGhpcy5nZXRBVlN0cmVhbShtLkFWTUVESUFfVFlQRV9BVURJTyxlKX1zZWVrVmlkZW9QYWNrZXQoZSl7cmV0dXJuIHRoaXMuZ2V0QVZQYWNrZXQoZSxtLkFWTUVESUFfVFlQRV9WSURFTyl9c2Vla0F1ZGlvUGFja2V0KGUpe3JldHVybiB0aGlzLmdldEFWUGFja2V0KGUsbS5BVk1FRElBX1RZUEVfQVVESU8pfXJlYWRWaWRlb1BhY2tldChlLHMpe3JldHVybiB0aGlzLnJlYWRBVlBhY2tldChlLHMsbS5BVk1FRElBX1RZUEVfVklERU8pfXJlYWRBdWRpb1BhY2tldChlLHMpe3JldHVybiB0aGlzLnJlYWRBVlBhY2tldChlLHMsbS5BVk1FRElBX1RZUEVfQVVESU8pfWdlblZpZGVvRGVjb2RlckNvbmZpZyhlKXtyZXR1cm57Y29kZWM6ZS5jb2RlY3Bhci5jb2RlY19zdHJpbmcsY29kZWRXaWR0aDplLmNvZGVjcGFyLndpZHRoLGNvZGVkSGVpZ2h0OmUuY29kZWNwYXIuaGVpZ2h0LGRlc2NyaXB0aW9uOmUuY29kZWNwYXIuZXh0cmFkYXRhPy5sZW5ndGg+MD9lLmNvZGVjcGFyLmV4dHJhZGF0YTp2b2lkIDB9fWdlbkVuY29kZWRWaWRlb0NodW5rKGUpe3JldHVybiBuZXcgRW5jb2RlZFZpZGVvQ2h1bmsoe3R5cGU6ZS5rZXlmcmFtZT09PTE/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6ZS50aW1lc3RhbXAqdSxkdXJhdGlvbjplLmR1cmF0aW9uKnUsZGF0YTplLmRhdGF9KX1nZW5BdWRpb0RlY29kZXJDb25maWcoZSl7cmV0dXJue2NvZGVjOmUuY29kZWNwYXIuY29kZWNfc3RyaW5nfHwiIixzYW1wbGVSYXRlOmUuY29kZWNwYXIuc2FtcGxlX3JhdGUsbnVtYmVyT2ZDaGFubmVsczplLmNvZGVjcGFyLmNoYW5uZWxzLGRlc2NyaXB0aW9uOmUuY29kZWNwYXIuZXh0cmFkYXRhPy5sZW5ndGg+MD9lLmNvZGVjcGFyLmV4dHJhZGF0YTp2b2lkIDB9fWdlbkVuY29kZWRBdWRpb0NodW5rKGUpe3JldHVybiBuZXcgRW5jb2RlZEF1ZGlvQ2h1bmsoe3R5cGU6ZS5rZXlmcmFtZT09PTE/ImtleSI6ImRlbHRhIix0aW1lc3RhbXA6ZS50aW1lc3RhbXAqdSxkdXJhdGlvbjplLmR1cmF0aW9uKnUsZGF0YTplLmRhdGF9KX1hc3luYyBnZXRWaWRlb0RlY29kZXJDb25maWcoKXtjb25zdCBlPWF3YWl0IHRoaXMuZ2V0VmlkZW9TdHJlYW0oKTtyZXR1cm4gdGhpcy5nZW5WaWRlb0RlY29kZXJDb25maWcoZSl9YXN5bmMgc2Vla0VuY29kZWRWaWRlb0NodW5rKGUpe2NvbnN0IHM9YXdhaXQgdGhpcy5zZWVrVmlkZW9QYWNrZXQoZSk7cmV0dXJuIHRoaXMuZ2VuRW5jb2RlZFZpZGVvQ2h1bmsocyl9YXN5bmMgZ2V0QXVkaW9EZWNvZGVyQ29uZmlnKCl7Y29uc3QgZT1hd2FpdCB0aGlzLmdldEF1ZGlvU3RyZWFtKCk7cmV0dXJuIHRoaXMuZ2VuQXVkaW9EZWNvZGVyQ29uZmlnKGUpfWFzeW5jIHNlZWtFbmNvZGVkQXVkaW9DaHVuayhlKXtjb25zdCBzPWF3YWl0IHRoaXMuc2Vla0F1ZGlvUGFja2V0KGUpO3JldHVybiB0aGlzLmdlbkVuY29kZWRBdWRpb0NodW5rKHMpfX1jbGFzcyBre3ZpZGVvO2N1cnJlbnRGcmFtZXM9MDt0b3RhbEZyYW1lcztjdXJyZW50VGltZTtmcHM7Zmlyc3RUaW1lc3RhbXA7Y29uc3RydWN0b3IoZSxzKXt0aGlzLmN1cnJlbnRUaW1lPWVbMF0qMWU2LHRoaXMuZmlyc3RUaW1lc3RhbXA9ZVswXSoxZTYsdGhpcy50b3RhbEZyYW1lcz0oZVsxXS1lWzBdKSpzKzEsdGhpcy5mcHM9cyx0aGlzLnZpZGVvPW5ldyBWaWRlb0RlY29kZXIoe291dHB1dDp0aGlzLmhhbmRsZUZyYW1lT3V0cHV0LmJpbmQodGhpcyksZXJyb3I6dGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpfSl9cG9zdEZyYW1lKGUpe3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6ImZyYW1lIixmcmFtZTplfSksdGhpcy5jdXJyZW50VGltZSs9TWF0aC5mbG9vcigxL3RoaXMuZnBzKjFlNiksdGhpcy5jdXJyZW50RnJhbWVzKz0xfWhhbmRsZUZyYW1lT3V0cHV0KGUpe2NvbnN0IHM9ZS50aW1lc3RhbXAsYT1lLmR1cmF0aW9uPz8wLGk9cythO2lmKCF0aGlzLmlzRnJhbWVJblJhbmdlKHMpKXtlLmNsb3NlKCk7cmV0dXJufWZvcig7aT50aGlzLmN1cnJlbnRUaW1lJiZ0aGlzLmN1cnJlbnRGcmFtZXM8PXRoaXMudG90YWxGcmFtZXM7KXRoaXMucG9zdEZyYW1lKGUpO2UuY2xvc2UoKX1pc0ZyYW1lSW5SYW5nZShlKXtyZXR1cm4gZT49dGhpcy5maXJzdFRpbWVzdGFtcH1oYW5kbGVFcnJvcihlKXtjb25zb2xlLmVycm9yKCJlcnJvciBpbiB3b3JrZXIiLGUpLHNlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixtZXNzYWdlOmUubWVzc2FnZT8/IkFuIHVua25vd24gd29ya2VyIGVycm9yIG9jY3VycmVkIn0pLHNlbGYuY2xvc2UoKX19ZnVuY3Rpb24gSSh0KXtyZXR1cm4gYXN5bmMgZT0+e3RyeXthd2FpdCB0KGUpfWNhdGNoKHMpe3NlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixtZXNzYWdlOnM/Lm1lc3NhZ2U/PyJBbiB1bmtvd24gd29ya2VyIGVycm9yIG9jY3VyZWQifSl9fX1mdW5jdGlvbiBXKHQpe3JldHVybiB0LmNvZGVjPT0idnAwOSImJih0LmNvZGVjPSJ2cDA5LjAwLjEwLjA4IiksdH1jb25zdCBaPTMwO2FzeW5jIGZ1bmN0aW9uIFAodCl7aWYodC5kYXRhPy50eXBlIT0iaW5pdCIpcmV0dXJuO2NvbnN0e2ZpbGU6ZSxyYW5nZTpzLGZwczphfT10LmRhdGEsaT1uZXcgcCh7d2FzbUxvYWRlclBhdGg6Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGRpZmZ1c2lvbnN0dWRpby9mZm1wZWctd2FzbUAxLjAuMC9kaXN0L2ZmbXBlZy5qcyJ9KTthd2FpdCBpLmxvYWQoZSk7Y29uc3Qgcj1hd2FpdCBpLmdldFZpZGVvRGVjb2RlckNvbmZpZygpO1cocik7Y29uc3QgZD1uZXcgayhzLGEpO2QudmlkZW8uY29uZmlndXJlKHIpO2NvbnN0IG49aS5yZWFkQVZQYWNrZXQoc1swXSxzWzFdKS5nZXRSZWFkZXIoKTtuLnJlYWQoKS50aGVuKGFzeW5jIGZ1bmN0aW9uIGgoe2RvbmU6bCx2YWx1ZTpmfSl7aWYobCl7YXdhaXQgZC52aWRlby5mbHVzaCgpLHNlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6ImRvbmUifSksc2VsZi5jbG9zZSgpO3JldHVybn1jb25zdCBjPWkuZ2VuRW5jb2RlZFZpZGVvQ2h1bmsoZik7cmV0dXJuIGQudmlkZW8uZGVjb2RlUXVldWVTaXplPlomJmF3YWl0IG5ldyBQcm9taXNlKEw9PntkLnZpZGVvLm9uZGVxdWV1ZT0oKT0+TCgpfSksYy50aW1lc3RhbXA8PXNbMV0qMWU2JiZkLnZpZGVvLmRlY29kZShjKSxuLnJlYWQoKS50aGVuKGgpfSl9c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixJKFApKX0pKCk7Cg==",xv=a=>Uint8Array.from(atob(a),n=>n.charCodeAt(0)),el=typeof self<"u"&&self.Blob&&new Blob([xv(gc)],{type:"text/javascript;charset=utf-8"});function Ev(a){let n;try{if(n=el&&(self.URL||self.webkitURL).createObjectURL(el),!n)throw"";const t=new Worker(n,{name:a==null?void 0:a.name});return t.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(n)}),t}catch{return new Worker("data:text/javascript;base64,"+gc,{name:a==null?void 0:a.name})}finally{n&&(self.URL||self.webkitURL).revokeObjectURL(n)}}class Vv{constructor(){Z(this,"frames",[]);Z(this,"state","active");Z(this,"onenqueue");Z(this,"onclose")}enqueue(n){var t;this.frames.unshift(n),(t=this.onenqueue)==null||t.call(this)}async dequeue(){if(this.frames.length==0&&this.state=="active"&&await this.waitFor(2e4),!(this.frames.length==0&&this.state=="closed"))return this.frames.pop()}close(){var n;this.state="closed",(n=this.onclose)==null||n.call(this)}terminate(){for(const n of this.frames)n.close()}async waitFor(n){await new Promise((t,o)=>{const i=setTimeout(()=>{o(`Promise timed out after ${n} ms`)},n);this.onenqueue=()=>{clearTimeout(i),t()},this.onclose=()=>{clearTimeout(i),t()}})}}function Sv(a,n,t){const o=t.value;return t.value=function(...i){var r,s,l,c;return(s=(r=this.track)==null?void 0:r.composition)!=null&&s.rendering&&this.sprite.texture.source.uid!=this.textrues.canvas.source.uid&&(this.sprite.texture=this.textrues.canvas),!((c=(l=this.track)==null?void 0:l.composition)!=null&&c.rendering)&&this.sprite.texture.source.uid!=this.textrues.html5.source.uid&&(this.sprite.texture=this.textrues.html5),o.apply(this,i)},t}var Cv=Object.defineProperty,_v=Object.getOwnPropertyDescriptor,Nv=(a,n,t,o)=>{for(var i=_v(n,t),r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Cv(n,t,i),i};const yc=class bc extends Aa(Da){constructor(t,o={}){super();Z(this,"source",new Sn);Z(this,"type","video");Z(this,"worker");Z(this,"buffer");Z(this,"canvas",document.createElement("canvas"));Z(this,"context",this.canvas.getContext("2d"));Z(this,"element",document.createElement("video"));Z(this,"textrues",{html5:Pe.Texture.from(this.element),canvas:Pe.Texture.from(this.canvas)});Z(this,"sprite",new Pe.Sprite);this.element.controls=!1,this.element.playsInline=!0,this.element.style.display="hidden",this.element.crossOrigin="anonymous",this.textrues.html5.source.autoPlay=!1,this.textrues.html5.source.loop=!1,this.sprite.texture=this.textrues.html5,this.view.addChild(this.sprite),t instanceof Sn&&(this.source=t),t instanceof File&&this.source.from(t),this.element.addEventListener("play",()=>{this.playing=!0}),this.element.addEventListener("pause",()=>{this.playing=!1}),Object.assign(this,o)}async init(){const t=await this.source.createObjectURL();this.element.setAttribute("src",t),await new Promise((o,i)=>{this.element.oncanplay=()=>{this.duration.seconds=this.element.duration,this.state="READY",o()},this.element.onerror=()=>{this.state="ERROR";const r=new an({code:"sourceNotProcessable",message:"An error occurred while processing the input medium."});i(this.element.error??r)}})}async connect(t){var i;super.connect(t);const o=((i=t.composition)==null?void 0:i.frame)??0;await this.seek(ve.fromFrames(o))}enter(){var t,o,i;super.enter(),(o=(t=this.track)==null?void 0:t.composition)!=null&&o.rendering&&((i=this.buffer)==null?void 0:i.state)!="active"&&this.decodeVideo()}update(t){var o,i,r,s,l,c;if((i=(o=this.track)==null?void 0:o.composition)!=null&&i.playing&&!this.playing)this.element.play();else if(!((s=(r=this.track)==null?void 0:r.composition)!=null&&s.playing)&&this.playing)this.element.pause();else if((c=(l=this.track)==null?void 0:l.composition)!=null&&c.rendering)return this.nextFrame()}exit(){this.playing&&this.element.pause(),this.filters&&this.view.filters&&(this.view.filters=null)}copy(){const t=bc.fromJSON(JSON.parse(JSON.stringify(this)));return t.filters=this.filters,t.source=this.source,t}async decodeVideo(){var t,o;return this.buffer=new Vv,this.worker=new Ev,this.worker.addEventListener("message",i=>{var r,s;i.data.type=="frame"?(r=this.buffer)==null||r.enqueue(i.data.frame):i.data.type=="error"?this.cancelDecoding():i.data.type=="done"&&((s=this.buffer)==null||s.close())}),this.worker.postMessage({type:"init",file:await this.source.getFile(),range:this.demuxRange,fps:((o=(t=this.track)==null?void 0:t.composition)==null?void 0:o.fps)??_o}),this.buffer}async nextFrame(){if(!this.buffer)return;const t=await this.buffer.dequeue();t&&(this.canvas.width=t.displayWidth,this.canvas.height=t.displayHeight,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.drawImage(t,0,0),this.textrues.canvas.source.update(),t.close())}get demuxRange(){var r;const t=(r=this.track)==null?void 0:r.composition;let o;this.start.millis<0?o=Math.abs(this.offset.seconds):o=this.range[0].seconds;let i;return t&&this.stop.millis>t.duration.millis?i=t.duration.subtract(this.offset).seconds:i=this.range[1].seconds,[o,i]}cancelDecoding(){var t,o;(t=this.worker)==null||t.terminate(),this.worker=void 0,(o=this.buffer)==null||o.terminate(),this.buffer=void 0}};Nv([Ua,Sv],yc.prototype,"update");let rr=yc;class Na extends Da{constructor(t,o={}){super();Z(this,"type","audio");Z(this,"source",new hn);Z(this,"element",new Audio);t instanceof hn&&(this.source=t),t instanceof File&&this.source.from(t),this.element.addEventListener("play",()=>{this.playing=!0}),this.element.addEventListener("pause",()=>{this.playing=!1}),Object.assign(this,o)}async init(){const t=await this.source.createObjectURL();this.element.setAttribute("src",t),this.element.load(),await new Promise((o,i)=>{this.element.oncanplay=()=>{this.duration.seconds=this.element.duration,this.state="READY",o()},this.element.onerror=()=>{this.state="ERROR";const r=new an({code:"sourceNotProcessable",message:"An error occurred while processing the input medium."});i(this.element.error??r)}})}update(){var t,o,i,r,s,l;if((o=(t=this.track)==null?void 0:t.composition)!=null&&o.rendering)return this.exit();(r=(i=this.track)==null?void 0:i.composition)!=null&&r.playing&&!this.playing?this.element.play():!((l=(s=this.track)==null?void 0:s.composition)!=null&&l.playing)&&this.playing&&this.element.pause()}exit(){this.playing&&this.element.pause()}copy(){const t=Na.fromJSON(JSON.parse(JSON.stringify(this)));return t.source=this.source,t}}const Tv={IMAGE:{"image/jpeg":"jpg","image/png":"png","image/webp":"webp","image/svg+xml":"svg"},VIDEO:{"video/mp4":"mp4","video/webm":"webm","video/quicktime":"mov"},AUDIO:{"audio/mp3":"mp3","audio/mpeg":"mp3","audio/aac":"aac","audio/wav":"wav","audio/x-wav":"wav"},DOCUMENT:{"text/html":"html"},get MIXED(){return{...this.IMAGE,...this.VIDEO,...this.AUDIO,...this.DOCUMENT}}};function sr(a){if(!Object.keys(Tv.MIXED).includes(a??""))throw new Ke({message:`${a} is not an accepted mime type`,code:"invalid_mimetype"});return a}var Mv=Object.defineProperty,Bv=Object.getOwnPropertyDescriptor,Iv=(a,n,t,o)=>{for(var i=Bv(n,t),r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Mv(n,t,i),i};const Fv=class wc extends Aa(Io){constructor(t,o={}){super();Z(this,"type","html");Z(this,"source",new Ks);Z(this,"element",new Image);Z(this,"canvas",document.createElement("canvas"));Z(this,"context",this.canvas.getContext("2d"));Z(this,"sprite",new Pe.Sprite);this.view.addChild(this.sprite),Object.assign(this,o),t instanceof Ks&&(this.source=t),t instanceof File&&this.source.from(t),this.element.addEventListener("load",()=>{var s,l,c,d;const i=(l=(s=this.source.document)==null?void 0:s.body)==null?void 0:l.scrollWidth,r=(d=(c=this.source.document)==null?void 0:c.body)==null?void 0:d.scrollHeight;!i||!r||(this.canvas.width=i,this.canvas.height=r,this.context.imageSmoothingEnabled=!1,this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.drawImage(this.element,0,0),this.sprite.texture=Pe.Texture.from(this.canvas,!0),this.trigger("load",void 0))}),this.element.addEventListener("error",i=>{this.state="ERROR",this.trigger("error",new an({code:"sourceNotProcessable",message:"An error occurred while processing the input medium."})),this.track&&this.detach()}),this.on("update",async()=>{this.source.update(),this.element.setAttribute("src",await this.source.createObjectURL())})}async init(){this.element.setAttribute("src",await this.source.createObjectURL()),await new Promise((t,o)=>{this.element.onload=()=>{var s,l,c,d;const i=(l=(s=this.source.document)==null?void 0:s.body)==null?void 0:l.scrollWidth,r=(d=(c=this.source.document)==null?void 0:c.body)==null?void 0:d.scrollHeight;if(!i||!r)return o(new an({code:"sourceNotProcessable",message:"Cannot display source with height or width at 0"}));this.state="READY",t()},this.element.onerror=i=>{o(new an({code:"sourceNotProcessable",message:"An error occurred while processing the input medium."}))}})}update(t){}copy(){const t=wc.fromJSON(JSON.parse(JSON.stringify(this)));return t.filters=this.filters,t.source=this.source,t}};Iv([Ua],Fv.prototype,"update");const kc=["DEFAULT","STACK"];class tl{constructor(){Z(this,"mode",kc[0]);Z(this,"pauseAlignmet",!1)}add(n,t){let o=!0;for(let i=0;i<t.clips.length&&(o=al(n,t.clips[i]),!!o);i++)ol(n,t.clips[i]);o&&(t.clips.push(n),t.clips.sort(nl))}update(n,t){if(!this.pauseAlignmet){t.clips.sort(nl);for(let o=0;o<t.clips.length;o++)if(n.id!=t.clips[o].id){if(!al(n,t.clips[o]))break;ol(n,t.clips[o])}}}offset(n,t){this.pauseAlignmet=!0;for(const o of t.clips)o.offsetBy(n);this.pauseAlignmet=!1}}class $v{constructor(){Z(this,"mode",kc[1])}add(n,t,o=void 0){var r;let i=-1;(o!=null&&o>0||o==null)&&(i=((r=t.clips.at((o??0)-1))==null?void 0:r.stop.millis)??-1),n.offsetBy(new ve(i-n.start.millis+1)),o==null?t.clips.push(n):(t.clips.splice(o,0,n),t.clips.slice(o+1).forEach(s=>{s.offsetBy(n.stop.subtract(n.start))}))}update(n,t){let o=0;for(const i of t.clips){if(i.start.millis!=o){const r=o-i.start.millis;i.offsetBy(new ve(r))}o=i.stop.millis+1}}offset(){}}function nl(a,n){return a.start.millis-n.start.millis}function ol(a,n){a.start.millis>=n.start.millis&&a.start.millis<=n.stop.millis&&(a.start=n.stop.copy().addMillis(1)),a.stop.millis>=n.start.millis&&a.stop.millis<=n.stop.millis&&(a.stop=n.start.copy().addMillis(-1))}function al(a,n){var t,o,i,r,s;if(a.start.millis>=n.start.millis&&a.stop.millis<=n.stop.millis){const l=(o=(t=n.track)==null?void 0:t.composition)==null?void 0:o.tracks.find(c=>c.type==a.type&&!c.clips.some(d=>a.id!=d.id&&a.start.millis>=d.start.millis&&a.stop.millis<=d.stop.millis));return l?(l.add(a.detach()),!1):((s=(r=(i=n.track)==null?void 0:i.composition)==null?void 0:r.createTrack(a.type))==null||s.add(a.detach()),!1)}return!0}class qn extends Mo(Ft){constructor(){super(...arguments);Z(this,"_disabled",!1);Z(this,"view",new Pe.Container);Z(this,"clips",[]);Z(this,"pointer",0);Z(this,"composition");Z(this,"type","base");Z(this,"strategy",new tl)}get disabled(){return this._disabled}set disabled(t){var o;t&&this.clipRef&&Ui(this.clipRef)&&(this.view.removeChild(this.clipRef.view),(o=this.clipRef)==null||o.exit()),this._disabled=t,this.trigger("update",void 0)}connect(t){this.composition=t}stacked(t=!0){return t?(this.strategy=new $v,this.strategy.update(new Io,this)):this.strategy=new tl,this.trigger("update",void 0),this}layer(t){var l,c;const o=((l=this.composition)==null?void 0:l.tracks)??[],i=o.findIndex(d=>d.id==this.id),r=o.length-1;if(i==-1)return this;let s=0;return t=="bottom"?s=r:t=="top"||t<0?s=0:t>r?s=r:s=t,jh(o,i,s),(c=this.composition)==null||c.stage.setChildIndex(this.view,r-s),this.trigger("update",void 0),this}seek(t){}offsetBy(t){return typeof t=="number"?this.strategy.offset(ve.fromFrames(t),this):this.strategy.offset(t,this),this}update(t){var i,r;if(this.disabled||!this.clips.length)return;const{millis:o}=t;if(Ui(this.clipRef)&&(!Ai(o,this.clipRef)||(i=this.clipRef)!=null&&i.disabled)&&(this.clipRef&&this.view.removeChild(this.clipRef.view),(r=this.clipRef)==null||r.exit()),!!Ai(o,this))for(let s=0;s<this.clips.length;s++){const l=(this.pointer+s)%this.clips.length,c=this.clips[l],d=this.clips[l-1];if(Ai(o,c)&&!c.disabled)return this.pointer=l,Ui(c)||(c.enter(),this.view.addChild(c.view)),c.update(t);if(o<c.start.millis&&o>((d==null?void 0:d.stop.millis)??0)){this.pointer=l;return}}}async add(t,o){return this.composition&&!this.composition.renderer&&await new Promise(this.composition.resolve("init")),await t.init(),await t.connect(this),await this.strategy.add(t,this,o),t.on("frame",()=>{this.strategy.update(t,this)}),t.bubble(this),this.trigger("attach",void 0),t}remove(t){const o=this.clips.findIndex(i=>i.id==t.id);if(t.state=="ATTACHED"&&(t.state="READY"),t.view.parent&&this.view.removeChild(t.view),o!=null&&o>=0)return this.clips.splice(o,1),this.strategy.update(t,this),this.trigger("detach",void 0),t.off("*"),t}get stop(){var t;return((t=this.clips.at(-1))==null?void 0:t.stop)??new ve}get start(){var t;return((t=this.clips.at(0))==null?void 0:t.start)??new ve}apply(t){this.clips.forEach(t)}detach(){var t;return(t=this.composition)==null||t.removeTrack(this),this}get clipRef(){return this.clips[this.pointer]}}function Ai(a,n){return n?a>=n.start.millis&&a<=n.stop.millis:!1}function Ui(a){return a?!!a.view.parent:!1}class Rv{static fromType(n){switch(n.type){case"video":return new Dv;case"audio":return new Uv;case"html":return new Lv;case"image":return new Av;case"text":return new il;case"complex_text":return new il;case"caption":return new zv;default:return new qn}}}class xc extends qn{constructor(){super(...arguments);Z(this,"clips",[])}async seek(t){for(const o of this.clips)await o.seek(t)}async removeSilences(t={}){const o=[];for(const i of this.clips.map(r=>r.detach()))o.push(...await i.removeSilences(t));for(const i of o)await this.add(i)}}class Dv extends xc{constructor(){super(...arguments);Z(this,"type","video")}async seek(t){var o;(o=this.composition)!=null&&o.rendering?this.view.removeChildren():super.seek(t)}}class Av extends qn{constructor(){super(...arguments);Z(this,"type","image")}}class Uv extends xc{constructor(){super(...arguments);Z(this,"type","audio")}}class il extends qn{constructor(){super(...arguments);Z(this,"type","text")}}class Lv extends qn{constructor(){super(...arguments);Z(this,"type","html")}}var Ov=Object.defineProperty,$r=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Ov(n,t,i),i};class $o extends Ft{constructor(t={}){super();Z(this,"generatorOptions");Z(this,"type","CLASSIC");Z(this,"position");this.generatorOptions=t.generatorOptions??{duration:[.2]},this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var r,s,l;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"Figtree",weight:"700"}).load();for(const c of t.clip.transcript.iter(this.generatorOptions))await t.add(new Yn({text:c.words.map(d=>d.text).join(" "),textAlign:"center",textBaseline:"middle",fontSize:21,fillStyle:"#FFFFFF",font:i,stroke:{color:"#000000",width:4,join:"round"},maxWidth:t.composition.width*.85,shadow:{color:"#000000",blur:0,distance:1.1,angle:Math.PI*.4,alpha:1},position:this.position,stop:c.stop.add(o),start:c.start.add(o),scale:new Ve([0,8],[.96,1],{easing:"easeOut"}),alpha:new Ve([0,4],[0,1],{easing:"easeOut"})}))}}$r([he()],$o.prototype,"generatorOptions");$r([he()],$o.prototype,"type");$r([he()],$o.prototype,"position");class zv extends qn{constructor(){super(...arguments);Z(this,"clip");Z(this,"type","caption");Z(this,"preset",new $o)}from(t){var o;return this.clip=t,(o=this.clip)==null||o.on("offsetBy",i=>this.offsetBy(i.detail)),this}async generate(t){let o=this.preset;return typeof t=="object"?o=t:t&&(o=new t),this.clips=[],this.trigger("update",void 0),this.preset=o,await o.applyTo(this),this.trigger("update",void 0),this}}var Pv=Object.defineProperty,za=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Pv(n,t,i),i};class Ro extends Ft{constructor(t={}){super();Z(this,"generatorOptions");Z(this,"type","SPOTLIGHT");Z(this,"color");Z(this,"position");this.generatorOptions=t.generatorOptions??{duration:[.2]},this.color=t.color??"#00FF4C",this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var r,s,l;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"The Bold Font",weight:"500"}).load();for(const c of t.clip.transcript.iter(this.generatorOptions))for(let d=0;d<c.words.length;d++){const u=c.words.map(p=>p.text);await t.add(new Oa({text:u.join(" "),textAlign:"center",textBaseline:"middle",fillStyle:"#FFFFFF",fontSize:22,maxWidth:t.composition.width*.8,font:i,stroke:{width:5,color:"#000000"},shadow:{color:"#000000",blur:12,alpha:.7,angle:Math.PI/4,distance:2},position:this.position,styles:[{fillStyle:this.color}],segments:c.words.length>1?[{index:0,start:u.slice(0,d).join(" ").length,stop:u.slice(0,d+1).join(" ").length}]:void 0,stop:c.words[d].stop.add(o),start:c.words[d].start.add(o)}))}}}za([he()],Ro.prototype,"generatorOptions");za([he()],Ro.prototype,"type");za([he()],Ro.prototype,"color");za([he()],Ro.prototype,"position");var jv=Object.defineProperty,Rr=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&jv(n,t,i),i};class Pa extends Ft{constructor(t={}){super();Z(this,"type","GUINEA");Z(this,"colors");Z(this,"position");this.colors=t.colors??["#1BD724","#FFEE0C","#FF2E17"],this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var r,s,l,c,d,u,p;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"The Bold Font",weight:"500"}).load();for(const v of t.clip.transcript.iter({length:[18]})){const{segments:h,words:g}=this.splitSequence(v);for(let y=0;y<v.words.length;y++){const V=(d=(c=g[y])==null?void 0:c.at(0))==null?void 0:d.start,B=(p=(u=g[y])==null?void 0:u.at(-1))==null?void 0:p.stop;!V||!B||await t.add(new Oa({text:h.join(`
33
+ `),textAlign:"center",textBaseline:"middle",fontSize:20,fillStyle:"#FFFFFF",shadow:{color:"#000000",blur:16,alpha:.8,angle:Math.PI/4,distance:1},stroke:{width:4,color:"#000000"},maxWidth:t.composition.width*.8,leading:1.3,font:i,textCase:"upper",position:this.position,stop:B.add(o),start:V.add(o),styles:[{fillStyle:this.colors[0],fontSize:23},{fillStyle:this.colors[1],fontSize:23},{fillStyle:this.colors[2],fontSize:23}],segments:[{index:fa(0,2),start:h.slice(0,y).join(" ").length,stop:h.slice(0,y+1).join(" ").length+y*2}]}))}}}splitSequence(t){const o=t.text,i=Math.ceil(o.length/2);let r=o.length;for(let c=i,d=i;c>0&&d<t.text.length-1;c--,d++){if(o[c].match(/ /)){r=c;break}if(o[d].match(/ /)){r=d;break}}const s=[...Ws(o,r).map(c=>c.trim())],l=Ws(t.words,s[0].split(/ /).length);return{segments:s,words:l}}}Rr([he()],Pa.prototype,"type");Rr([he()],Pa.prototype,"colors");Rr([he()],Pa.prototype,"position");var Wv=Object.defineProperty,Dr=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Wv(n,t,i),i};class ja extends Ft{constructor(t={}){super();Z(this,"generatorOptions");Z(this,"type","CASCADE");Z(this,"position");this.generatorOptions=t.generatorOptions??{duration:[1.4]},this.position=t.position??{x:"12%",y:"44%"}}async applyTo(t){var r,s,l;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"Geologica",weight:"400"}).load();for(const c of t.clip.transcript.iter(this.generatorOptions))for(let d=0;d<c.words.length;d++){const u=()=>c.words.length==1?c.text:c.words.map(p=>p.text).slice(0,d+1).join(" ");await t.add(new Yn({text:u(),textAlign:"left",textBaseline:"top",fillStyle:"#FFFFFF",fontSize:16,font:i,maxWidth:t.composition.width*.7,stroke:{color:"#000000",width:4,join:"round"},shadow:{color:"#000000",blur:8,alpha:.4,angle:Math.PI/4,distance:2},position:this.position,stop:c.words[d].stop.add(o),start:c.words[d].start.add(o)}))}}}Dr([he()],ja.prototype,"generatorOptions");Dr([he()],ja.prototype,"type");Dr([he()],ja.prototype,"position");var Zv=Object.defineProperty,Ar=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Zv(n,t,i),i};class Wa extends Ft{constructor(t={}){super();Z(this,"generatorOptions");Z(this,"type","SOLAR");Z(this,"position");this.generatorOptions=t.generatorOptions??{duration:[.2]},this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var s,l,c;if(!((s=t.clip)!=null&&s.transcript)||!((l=t.composition)!=null&&l.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=await pt.fromFamily({family:"Urbanist",weight:"800"}).load(),i=((c=t.clip)==null?void 0:c.offset)??new ve,r=new Cu.GlowFilter({color:"#fffe41",alpha:.25,distance:90,quality:.05});for(const d of t.clip.transcript.iter(this.generatorOptions))await t.add(new Yn({text:d.words.map(u=>u.text).join(" "),textAlign:"center",textBaseline:"middle",fontSize:19,fillStyle:"#fffe41",font:o,maxWidth:t.composition.width*.85,textCase:"upper",shadow:{color:"#ab7a00",blur:0,distance:2.1,angle:Math.PI/2.5,alpha:1},position:this.position,stop:d.stop.add(i),start:d.start.add(i),scale:new Ve([0,8],[.96,1],{easing:"easeOut"}),alpha:new Ve([0,4],[0,1],{easing:"easeOut"}),filters:r}))}}Ar([he()],Wa.prototype,"generatorOptions");Ar([he()],Wa.prototype,"type");Ar([he()],Wa.prototype,"position");var Xv=Object.defineProperty,Za=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Xv(n,t,i),i};class Do extends Ft{constructor(t={}){super();Z(this,"generatorOptions");Z(this,"type","WHISPER");Z(this,"color");Z(this,"position");this.generatorOptions=t.generatorOptions??{length:[20]},this.color=t.color??"#8c8c8c",this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var r,s,l;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"Montserrat",weight:"300"}).load();for(const c of t.clip.transcript.iter(this.generatorOptions))for(let d=0;d<c.words.length;d++){const u=c.words.map(p=>p.text);await t.add(new Oa({text:u.join(" "),textAlign:"center",textBaseline:"middle",fillStyle:"#FFFFFF",fontSize:13,background:{alpha:.3,padding:{x:50,y:30}},maxWidth:t.composition.width*.8,font:i,position:this.position,styles:[{fillStyle:this.color}],stop:c.words[d].stop.add(o),start:c.words[d].start.add(o),segments:u.length>1?[{index:0,start:u.slice(0,d+1).join(" ").length}]:void 0}))}}}Za([he()],Do.prototype,"generatorOptions");Za([he()],Do.prototype,"type");Za([he()],Do.prototype,"color");Za([he()],Do.prototype,"position");var Hv=Object.defineProperty,Xa=(a,n,t,o)=>{for(var i=void 0,r=a.length-1,s;r>=0;r--)(s=a[r])&&(i=s(n,t,i)||i);return i&&Hv(n,t,i),i};class Ha extends Ft{constructor(t={}){super();Z(this,"type","VERDANT");Z(this,"generatorOptions");Z(this,"color");Z(this,"position");this.generatorOptions=t.generatorOptions??{duration:[1]},this.color=t.color??"#69E34C",this.position=t.position??{x:"50%",y:"50%"}}async applyTo(t){var r,s,l;if(!((r=t.clip)!=null&&r.transcript)||!((s=t.composition)!=null&&s.width))throw new Ke({code:"referenceError",message:"Captions need to be applied with a defined transcript and composition"});const o=((l=t.clip)==null?void 0:l.offset)??new ve,i=await pt.fromFamily({family:"Montserrat",weight:"800"}).load();for(const c of t.clip.transcript.iter(this.generatorOptions))for(let d=0;d<c.words.length;d++){const u=c.words.map(p=>p.text);await t.add(new Oa({text:u.join(" "),textAlign:"center",textBaseline:"middle",fontSize:15,fillStyle:"#FFFFFF",shadow:{color:"#000000",blur:4,alpha:.7,angle:Math.PI/4,distance:2},stroke:{width:3,color:"#000000"},maxWidth:t.composition.width*.5,leading:1.1,font:i,textCase:"upper",styles:[{fillStyle:this.color,fontSize:19}],position:this.position,stop:c.words[d].stop.add(o),start:c.words[d].start.add(o),segments:[{index:0,start:u.slice(0,d).join(" ").length,stop:u.slice(0,d+1).join(" ").length}]}))}}}Xa([he()],Ha.prototype,"type");Xa([he()],Ha.prototype,"generatorOptions");Xa([he()],Ha.prototype,"color");Xa([he()],Ha.prototype,"position");class Gv extends Mo(Ft){constructor({height:t=1080,width:o=1920,background:i="#000000",backend:r="webgpu"}={}){super();Z(this,"_duration",new ve);Z(this,"renderer");Z(this,"stage",new Pe.Container);Z(this,"settings");Z(this,"tracks",[]);Z(this,"frame",0);Z(this,"fixedDuration");Z(this,"state","IDLE");Z(this,"fps",_o);Z(this,"canvas");Z(this,"context");this.settings={height:t,width:o,background:i,backend:r},this.on("update",this.update.bind(this)),this.on("attach",this.update.bind(this)),this.on("detach",this.update.bind(this)),this.on("load",this.update.bind(this)),this.on("frame",this.update.bind(this)),this.on("error",this.update.bind(this)),Pe.autoDetectRenderer({...this.settings,preference:r}).then(s=>{this.renderer=s,this.trigger("init",void 0)}).catch(s=>{this.trigger("error",new Hn({code:"backendDetectionError",message:`${s}`}))})}get playing(){return this.state=="PLAY"}get rendering(){return this.state=="RENDER"}get width(){return this.settings.width}get height(){return this.settings.height}get duration(){return this.fixedDuration?this.fixedDuration:this._duration}set duration(t){var o;t?t instanceof ve?this.fixedDuration=t:this.fixedDuration=ve.fromFrames(t):this.fixedDuration=void 0,this.trigger("frame",((o=this.fixedDuration)==null?void 0:o.frames)??0)}resize(t,o){var i;this.settings.width=t,this.settings.height=o,(i=this.renderer)==null||i.resize(t,o),this.canvas&&(this.canvas.height=o,this.canvas.width=t),this.trigger("resize",void 0),this.computeFrame()}attachPlayer(t){this.canvas||(this.canvas=document.createElement("canvas"),this.canvas.height=this.settings.height,this.canvas.width=this.settings.width,this.canvas.style.background="black",this.context=this.canvas.getContext("2d"),this.context.imageSmoothingEnabled=!1,this.computeFrame()),t.appendChild(this.canvas)}detachPlayer(t){this.canvas&&t.removeChild(this.canvas)}shiftTrack(t){const o=typeof t=="object"?t:new t;return o.connect(this),this.stage.addChild(o.view),this.tracks.unshift(o),o.bubble(this),this.trigger("update",void 0),o}createTrack(t){const o=Rv.fromType({type:t});return this.shiftTrack(o),o}async add(t){return await this.createTrack(t.type).add(t),t}remove(t){for(const o of this.tracks)if(o.clips.find(i=>i.id==t.id))return o.remove(t)}removeTracks(t){const o=this.tracks.filter(i=>i instanceof t);return this.tracks=this.tracks.filter(i=>!(i instanceof t)),o.forEach(i=>this.removeTrack(i)),o}findTracks(t){return this.tracks.filter(o=>{let i;return Zs(t)?i=o instanceof t:i=t(o),i})}findClips(t){const o=[];for(const i of this.tracks)for(const r of i.clips){let s;Zs(t)?s=r instanceof t:s=t(r),s&&o.push(r)}return o}computeFrame(){var t,o;if(this.renderer){for(let i=0;i<this.tracks.length;i++)this.tracks[i].update(ve.fromFrames(this.frame));this.renderer.render(this.stage),(t=this.context)==null||t.clearRect(0,0,this.settings.width,this.settings.height),(o=this.context)==null||o.drawImage(this.renderer.canvas,0,0),this.trigger("currentframe",this.frame),this.playing&&this.frame++}}screenshot(t="png",o=1){if(this.computeFrame(),!this.renderer)throw new Hn({code:"rendererNotDefined",message:"Please wait until the renderer is defined"});return this.renderer.canvas.toDataURL(`image/${t}`,o)}async seek(t){typeof t=="number"?this.frame=Math.round(t>0?t:0):this.frame=t.frames>0?t.frames:0,this.playing&&this.pause();for(const o of this.tracks)await o.seek(ve.fromFrames(this.frame));this.rendering||this.computeFrame()}async play(){if(!this.rendering){this.state="PLAY",this.frame>=this.duration.frames&&(this.frame=0);for(const t of this.tracks)await t.seek(ve.fromFrames(this.frame));this.ticker(),this.trigger("play",this.frame)}}async pause(){this.state="IDLE",this.computeFrame(),this.trigger("pause",this.frame)}async audio(t=2,o=48e3){var s;const i=this.duration.seconds*o,r=new OfflineAudioContext({sampleRate:o,length:i,numberOfChannels:t}).createBuffer(t,i,o);for(const l of this.findClips(Da)){if(l.disabled||l.muted||(s=l.track)!=null&&s.disabled)continue;const c=Math.round(l.offset.seconds*r.sampleRate),d=Math.round(l.range[0].seconds*r.sampleRate),u=Math.round(l.range[1].seconds*r.sampleRate);try{const p=await l.source.decode(t,o),v=p.numberOfChannels-1;for(let h=0;h<t;h++){const g=r.getChannelData(h),y=p.getChannelData(h>v?v:h);for(let V=0;V<g.length-1;V++)V<c+d||V>c+u||V-c<0||(g[V]+=(y[V-c]??0)*l.volume,g[V]>1&&(g[V]=1),g[V]<-1&&(g[V]=-1));r.getChannelData(h).set(g)}}catch{}}return r}time(t){const o=Pn(this.frame),i=t!=null&&t.hours?11:14,r=t!=null&&t.milliseconds?23:19;return new Date(o).toISOString().slice(i,r)+" / "+new Date(this.duration.millis).toISOString().slice(i,r)}removeTrack(t){const o=this.tracks.findIndex(i=>i.id==t.id);if(t.view.parent&&this.stage.removeChild(t.view),o!=null&&o>=0)return this.tracks.splice(o,1),this.trigger("detach",void 0),t.off("*"),t}async ticker(){const t=1e3/_o;let o=performance.now(),i=0;do{const r=await new Promise(requestAnimationFrame);r-o<t-i||(i=Math.min(t,i+r-o-t),o=r,this.computeFrame())}while(this.frame<=this.duration.frames&&this.playing);this.playing&&this.seek(0)}update(){this._duration.frames=Math.max(...this.tracks.filter(t=>!t.disabled).map(t=>{var o;return((o=t.stop)==null?void 0:o.frames)??0}),0),this.computeFrame()}}function Jv(a,n){const t=new Uint8Array(19);return t[0]=79,t[1]=112,t[2]=117,t[3]=115,t[4]=72,t[5]=101,t[6]=97,t[7]=100,t[8]=1,t[9]=n,t[10]=0,t[11]=0,t[12]=a&255,t[13]=a>>8&255,t[14]=a>>16&255,t[15]=a>>24&255,t[16]=0,t[17]=0,t[18]=0,t}const lr=[8e3,12e3,16e3,24e3,48e3],Yv="https://cdn.jsdelivr.net/npm/@diffusionstudio/libopus-wasm@1.0.0/dist/opus.wasm",Kv="https://cdn.jsdelivr.net/npm/@diffusionstudio/libopus-wasm@1.0.0/dist/opus.js";class qv{constructor(n){Z(this,"output");Z(this,"error");Z(this,"config");Z(this,"encoder");Z(this,"opus");Z(this,"meta");this.output=n.output,this.error=n.error}async configure(n){const t=await import(Kv),{numberOfChannels:o,sampleRate:i}=this.config=n;if(!lr.includes(i))throw new _a({code:"sampleRateNotSupported",message:`Unsupported sample rate, supported: ${lr.join()}`});this.opus=await t.default({locateFile(r,s){return r.endsWith(".wasm")?Yv:s+r}}),this.encoder=this.opus._opus_encoder_create(i,o,2048),this.meta={decoderConfig:{codec:"opus",description:Jv(i,o).buffer,numberOfChannels:o,sampleRate:i}}}encode({data:n,numberOfFrames:t,timestamp:o=0}){if(!this.encoder||!this.opus||!this.config||!this.meta)throw new _a({code:"unconfiguredEncoder",message:"Cannot encode samples using an unconfigured encoder"});const{sampleRate:i,numberOfChannels:r}=this.config,s=Math.floor(i/1e3*20);let l=0;const c=s/i*1e6;for(;l<t;){const d=n.subarray(l*r,(l+s)*r),u=this.opus._malloc(d.length*2);this.opus.HEAP16.set(d,u>>1);const p=4e3,v=this.opus._malloc(p),h=this.opus._opus_encode(this.encoder,u,s,v,p);if(h>0){const g=new Uint8Array(this.opus.HEAPU8.subarray(v,v+h));this.output({data:g,timestamp:o,type:"key",duration:c},this.meta)}else this.error(new DOMException("PCM chunk could not be encoded"));this.opus._free(u),this.opus._free(v),l+=s,o+=c}}}function Qv(a){const n=lr;let t=48e3;for(const o of n)Math.abs(a-o)<Math.abs(a-t)&&(t=o);return t}class e0{constructor(n,t){Z(this,"canvas");Z(this,"muxer");Z(this,"videoEncoder");Z(this,"frame",0);Z(this,"sampleRate");Z(this,"numberOfChannels");Z(this,"videoBitrate");Z(this,"gpuBatchSize");Z(this,"fps");Z(this,"height");Z(this,"width");Z(this,"audio");this.canvas=n,this.width=n.width,this.height=n.height,this.fps=(t==null?void 0:t.fps)??30,this.sampleRate=Qv((t==null?void 0:t.sampleRate)??48e3),this.numberOfChannels=(t==null?void 0:t.numberOfChannels)??2,this.videoBitrate=(t==null?void 0:t.videoBitrate)??1e7,this.gpuBatchSize=(t==null?void 0:t.gpuBatchSize)??5,this.audio=(t==null?void 0:t.audio)??!1}async init(){const n=await Xh({height:Math.round(this.height),width:Math.round(this.width),bitrate:this.videoBitrate,fps:this.fps});this.muxer=new lc({target:new Vr,video:{...n[0],codec:"avc"},firstTimestampBehavior:"offset",fastStart:"in-memory",audio:this.audio?{numberOfChannels:this.numberOfChannels,sampleRate:this.sampleRate,codec:"opus"}:void 0});const t={output:(o,i)=>{i&&this.muxer.addVideoChunk(o,i)},error:console.error};this.videoEncoder=new VideoEncoder(t),this.videoEncoder.configure(n[0])}async encodeVideo(n){var o;this.videoEncoder||await this.init(),this.videoEncoder.encodeQueueSize>this.gpuBatchSize&&await new Promise(i=>{this.videoEncoder.ondequeue=()=>i(null)});const t=new VideoFrame(n??this.canvas,{timestamp:Math.floor(this.frame/this.fps*1e6),duration:Math.floor(1e6/this.fps)});(o=this.videoEncoder)==null||o.encode(t,{keyFrame:this.frame%(3*this.fps)==0}),t.close(),this.frame++}async encodeAudio(n){if(!this.audio)throw new _a({code:"initializationError",message:"Encoder must be initialized using {audio: true} to use this method"});this.muxer||await this.init();const t=Zh(n,this.sampleRate,this.numberOfChannels),o=new qv({output:(i,r)=>{var s;(s=this.muxer)==null||s.addAudioChunkRaw(i.data,i.type,i.timestamp,i.duration,r)},error:console.error});await o.configure({numberOfChannels:this.numberOfChannels,sampleRate:this.sampleRate}),o.encode({data:Wh(t),numberOfFrames:t.length})}async blob(){var t,o,i;await((t=this.videoEncoder)==null?void 0:t.flush()),(o=this.muxer)==null||o.finalize();const n=(i=this.muxer)==null?void 0:i.target.buffer;if(!n)throw new _a({code:"unexpectedRenderError",message:"Muxer could not be finalized because the target buffer is not defined"});return new Blob([n],{type:"video/mp4"})}async export(){return this.blob()}}async function t0(a){var o,i;const n=(o=a.metadata)==null?void 0:o.source_url;if(n)return n;const t=(i=a.source)==null?void 0:i.media_uuid;if(t){if(typeof window<"u"){const r=window;if(r.MEDIABLES_MEDIA_URLS&&r.MEDIABLES_MEDIA_URLS[t])return r.MEDIABLES_MEDIA_URLS[t]}if(!t.startsWith("temp-"))try{if(typeof fetch<"u"){const r=await fetch(`/api/media/${t}`);if(r.ok){const s=await r.json();return s.playback_url||s.url||void 0}}}catch{}}}function Dt(a,n){if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"){const t=Number(a);if(Number.isFinite(t))return t}return n}function oa(a){return a>5?a/100:a}function At(a,n,t){return Math.min(t,Math.max(n,a))}function wt(){return new Ye.ColorMatrixFilter}function n0(a,n){switch(a){case"brightness":{const t=wt(),o=Dt(n.value??n.brightness,1);return t.brightness(At(oa(o),0,5),!1),t}case"contrast":{const t=wt(),o=Dt(n.value??n.contrast,1);return t.contrast(At(oa(o),0,5),!1),t}case"saturation":{const t=wt(),o=Dt(n.value??n.saturation,1);return t.saturate(At(oa(o),0,5),!1),t}case"hue":{const t=wt(),o=Dt(n.degrees??n.value,0);return t.hue(At(o,-180,180),!1),t}case"blur":case"softFocus":{const t=a==="softFocus"?1:0,o=Dt(n.radius??n.blur??n.value,t);return new Ye.BlurFilter({strength:At(o,0,32),quality:4})}case"grayscale":{const t=wt(),o=At(Dt(n.amount,100),0,100);return o<=0?null:(o>=100?t.desaturate():t.saturate(1-o/100,!1),t)}case"sepia":{if(At(Dt(n.amount,100),0,100)<=0)return null;const o=wt();return o.sepia(!1),o}case"invert":{if(At(Dt(n.amount,100),0,100)<=0)return null;const o=wt();return o.negative(!1),o}case"warmth":{const t=wt(),o=At(Dt(n.value,0),-50,50);return o>0?(t.sepia(!1),t.saturate(1+o/100,!1)):o<0&&t.hue(Math.abs(o)/50*-20,!1),t}case"tint":{const t=wt(),o=At(Dt(n.intensity,.3),0,1),i=typeof n.color=="string"?n.color:"#ff0000",r=i.startsWith("#")?i.slice(1):i;if(r.length===6){const s=parseInt(r.slice(0,2),16)/255,l=parseInt(r.slice(2,4),16)/255,c=parseInt(r.slice(4,6),16)/255;t.matrix=[1-o+o*s,0,0,0,0,0,1-o+o*l,0,0,0,0,0,1-o+o*c,0,0,0,0,0,1,0]}return t}case"vintage":{const t=wt();return t.sepia(!1),t.saturate(1.4,!1),t.contrast(1.1,!1),t}case"blackAndWhite":{const t=wt(),o=At(oa(Dt(n.contrast,120)),.5,3);return t.desaturate(),t.contrast(o,!1),t}case"cinematic":{const t=wt();return t.contrast(1.2,!1),t.brightness(.95,!1),t.saturate(.85,!1),t}case"dramatic":{const t=wt();return t.contrast(1.4,!1),t.brightness(.9,!1),t.saturate(1.1,!1),t.sepia(!1),t}case"dreamy":{const t=wt();return t.brightness(1.05,!1),t.saturate(.9,!1),t.contrast(.95,!1),t}default:return null}}typeof window<"u"&&!window.PIXI&&(window.PIXI=Ye);class Ec{constructor(n=1920,t=1080,o=30,i){this.player=null,this.clips=new Map,this.clipTimelineStart=new Map,this.resizeObserver=null,this.recipeSourceDimensions=null,this.filterCache=new Map,this.animationFrameId=null,this.lastRenderedFrame=-1,this.fps=o,this.fitMode=(i==null?void 0:i.fitMode)??"contain",this.composition=new Gv({width:n,height:t,background:"#000000"}),this.initPromise=new Promise(r=>{const s=()=>{this.isDebug()&&this.dbg("init:renderer-ready"),r()};this.composition.on("init",s),queueMicrotask(()=>{var c,d,u,p;const l=this.composition;((d=(c=l==null?void 0:l.app)==null?void 0:c.renderer)!=null&&d.view||(u=l==null?void 0:l.renderer)!=null&&u.view||(p=l==null?void 0:l.renderer)!=null&&p.canvas)&&s()})}),this.setupEventHandlers()}isDebug(){try{if(typeof window<"u"&&window.MEDIABLES_DEBUG===1||typeof localStorage<"u"&&localStorage.getItem("mediables.debug")==="1")return!0}catch{}return!1}dbg(...n){this.isDebug()}setupEventHandlers(){this.composition.on("play",()=>this.onPlay()),this.composition.on("pause",()=>this.onPause()),this.composition.on("currentframe",()=>this.onFrameUpdate())}onPlay(){}onPause(){}onFrameUpdate(){}async attachPlayer(n){this.player=n,this.isDebug()&&this.dbg("attachPlayer:begin",{w:n.clientWidth,h:n.clientHeight}),this.composition.attachPlayer(n),await this.initPromise;const t=this.composition;this.isDebug()&&this.dbg("attachPlayer:ready",{hasRenderer:!!(t!=null&&t.renderer),hasCanvas:!!(t!=null&&t.canvas),canvasSize:t!=null&&t.canvas?{w:t.canvas.width,h:t.canvas.height}:null}),this.setupResponsiveScaling(),this.composition.seek(0),this.startRenderLoop()}setupResponsiveScaling(){this.player&&(this.player.style.position="absolute",this.player.style.top="50%",this.player.style.left="50%",this.resizeObserver=new ResizeObserver(()=>{var o;const n=(o=this.player)==null?void 0:o.parentElement;if(!this.player||!n)return;const t=Math.min(n.clientWidth/this.composition.width,n.clientHeight/this.composition.height);this.player.style.width=`${this.composition.width}px`,this.player.style.height=`${this.composition.height}px`,this.player.style.transform=`translate(-50%, -50%) scale(${t})`,this.player.style.transformOrigin="center"}),this.resizeObserver.observe(this.player.parentElement??this.player))}async loadFromRecipe(n){var o,i,r;await this.initPromise,this.clips.clear(),this.recipeSourceDimensions=Number.isFinite((o=n.source)==null?void 0:o.original_width)&&n.source.original_width>0&&Number.isFinite((i=n.source)==null?void 0:i.original_height)&&n.source.original_height>0?{width:n.source.original_width,height:n.source.original_height}:null;const t=await t0(n);for(const s of n.timeline)await this.addTimelineClip(s,t);if(n.textOverlays)for(const s of n.textOverlays)await this.addTextOverlay(s);await new Promise(s=>requestAnimationFrame(s));for(const s of n.timeline)(r=s.filters)!=null&&r.length&&this.applyFiltersToClip(s.id,s.filters);this.composition.seek(0),this.applyFitModeToClips(),this.composition.computeFrame()}async addTimelineClip(n,t){var o,i;try{const r=n.url||t;if(!r)throw new Error("No video source URL available for clip");if(!r.startsWith("blob:")){if(!/^https?:/i.test(String(r)))return}const s=await((o=Sn.from)==null?void 0:o.call(Sn,r,{crossOrigin:"anonymous"}))??await Sn.from(r),l=new rr(s,{muted:n.muted||!1,scale:n.scale||1,position:"center"});let c=0,d=null;if(n.sourceIn!==void 0||n.sourceOut!==void 0){const v=Math.max(0,Math.floor((n.sourceIn||0)*this.fps)),h=n.sourceOut!==void 0?Math.max(v+1,Math.floor(n.sourceOut*this.fps)):null;c=v,d=h;try{if(l.offset=l.offset||{frames:0},l.offset.frames=v,h!==null){const g=Math.max(1,h-v);l.duration=l.duration||{frames:g},l.duration.frames=g}}catch{}}const u=await this.composition.add(l);if(d!==null&&c>=0)try{const v=Math.max(1,d-c);u.offset=u.offset||{frames:0},u.offset.frames=c,u.duration=u.duration||{frames:v},u.duration.frames=v}catch{}const p=Math.floor(n.timelineStart*this.fps);p>0&&u.offsetBy(p),this.clipTimelineStart.set(n.id,n.timelineStart),this.applyFitToClip(u),this.clips.set(n.id,u),(i=n.filters)!=null&&i.length&&(await new Promise(v=>requestAnimationFrame(v)),this.applyFiltersToClip(n.id,n.filters))}catch{}}async addTextOverlay(n){try{const t=pt.fromFamily({family:n.fontFamily||"Arial",weight:n.fontWeight||"400"}),o=new Yn({text:n.content,font:t,fontSize:n.fontSize||34,position:n.position||"center",fillStyle:n.color||"#FFFFFF",textAlign:n.textAlign||"center",textBaseline:n.textBaseline||"middle"});if(n.animation){const r=n.animation.duration||1,s=0,l=r*this.fps,c=n.animation.easing||"linear";n.animation.type==="rotate"&&n.animation.rotation?o.rotation=new Ve([s,l],[n.animation.rotation.from,n.animation.rotation.to],{easing:c}):n.animation.type==="scale"&&n.animation.scale&&(o.scale=new Ve([s,l],[n.animation.scale.from,n.animation.scale.to],{easing:c}))}n.startTime&&n.startTime>0&&o.offsetBy(n.startTime*this.fps),n.duration&&o.subclip(0,n.duration*this.fps);const i=await this.composition.add(o);this.clips.set(n.id||`text-${Date.now()}`,i)}catch{}}applyFiltersToClip(n,t){const o=this.clips.get(n);if(!o)return;const i=this.filterCache.get(n)??new Map,r=new Set(t.map(c=>c.id));for(const[c,d]of i.entries())if(!r.has(c)){try{typeof d.instance.destroy=="function"&&d.instance.destroy()}catch{}i.delete(c)}const s=[];for(const c of t){const d=this.buildFilterSignature(c),u=i.get(c.id);let p=null;if(u&&u.signature===d)p=u.instance;else{if(u)try{u.instance.destroy()}catch{}p=this.createPixiFilter(c),p?i.set(c.id,{instance:p,signature:d}):i.delete(c.id)}p&&s.push(p)}this.filterCache.set(n,i);const l=o.view??o.sprite??o.displayObject??null;if("filters"in o)try{o.filters=s}catch{}if(l&&"filters"in l)try{l.filters=s}catch{}typeof o.enter=="function"&&o.enter()}buildFilterSignature(n){const t=typeof n.params=="object"&&n.params!==null?n.params:{},o=Object.keys(t).sort((i,r)=>i.localeCompare(r)).map(i=>[i,t[i]]);return JSON.stringify({filterId:n.filterId,intensity:n.intensity??1,params:o})}setClipFilters(n,t){this.applyFiltersToClip(n,t),this.composition.computeFrame()}createPixiFilter(n){const t=n.intensity??1,o=n.params||{};if(dt.getFilter(n.filterId)&&!dt.isFilterCompatibleWithMedia(n.filterId,"video"))return null;let r=$u(n.filterId,o);return r||(r=n0(n.filterId,o)),r?(t!==1&&r&&(n.filterId==="colorOverlay"||n.filterId==="alpha"||("alpha"in r&&!o.alpha&&(r.alpha*=t),"strength"in r&&(r.strength*=t))),r):null}play(){this.composition.play(),this.startRenderLoop()}pause(){this.composition.pause(),this.composition.computeFrame()}seek(n){this.composition.seek(n)}seekToTime(n){this.composition.seek(n*this.fps)}get currentFrame(){return this.composition.frame}get currentTime(){return this.composition.time().seconds.toFixed(2)}get currentTimeInSeconds(){return this.composition.frame/this.fps}get duration(){return this.composition.duration.frames}get durationInSeconds(){return this.composition.duration.frames/this.fps}async export(n={}){var s,l,c,d,u,p,v,h,g;const t=n.fps??this.fps,o=this.composition.canvas??((l=(s=this.composition)==null?void 0:s.renderer)==null?void 0:l.view)??((u=(d=(c=this.composition)==null?void 0:c.app)==null?void 0:d.renderer)==null?void 0:u.view)??((v=(p=this.composition)==null?void 0:p.renderer)==null?void 0:v.canvas);if(!o)throw new Error("Export failed: composition canvas is not initialized");(h=n.onProgress)==null||h.call(n,0);const i=new e0(o,{fps:t});await i.init();const r=await i.export();return(g=n.onProgress)==null||g.call(n,100),r}destroy(){if(this.stopRenderLoop(),this.composition.pause(),this.clips.clear(),this.clipTimelineStart.clear(),this.filterCache.clear(),this.player&&this.composition.detachPlayer(this.player),this.resizeObserver){try{this.resizeObserver.disconnect()}catch{}this.resizeObserver=null}this.player=null}startRenderLoop(){this.stopRenderLoop(),this.isDebug()&&this.dbg("renderLoop:start");const n=()=>{(this.composition.state==="PLAY"||this.composition.frame!==this.lastRenderedFrame)&&(this.composition.computeFrame(),this.lastRenderedFrame=this.composition.frame),this.animationFrameId=requestAnimationFrame(n)};n()}stopRenderLoop(){this.animationFrameId&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null,this.isDebug()&&this.dbg("renderLoop:stop"))}moveClip(n,t){const o=this.clips.get(n);if(!o)return;const i=this.clipTimelineStart.get(n)||0,r=t-i;r!==0&&(o.offsetBy(r*this.fps),this.clipTimelineStart.set(n,t),this.composition.computeFrame())}setFitMode(n){this.fitMode=n,this.applyFitModeToClips()}applyFitModeToClips(){for(const n of this.clips.values())"scale"in n&&typeof n.scale<"u"&&this.applyFitToClip(n);this.composition.computeFrame()}applyFitToClip(n){var t,o;if(this.fitMode!=="none")try{const i=this.composition.width,r=this.composition.height,s=n.source,l=(s==null?void 0:s.width)??(s==null?void 0:s.videoWidth)??((t=this.recipeSourceDimensions)==null?void 0:t.width),c=(s==null?void 0:s.height)??(s==null?void 0:s.videoHeight)??((o=this.recipeSourceDimensions)==null?void 0:o.height);if(!l||!c)return;const d=Math.min(i/l,r/c),u=Math.max(i/l,r/c),p=this.fitMode==="contain"?d:u;n.scale=p}catch{}}trimClip(n,t,o){const i=this.clips.get(n);if(!i)return;const r=Math.max(0,Math.floor(t*this.fps)),s=Math.max(r+1,Math.floor(o*this.fps));try{i.offset=i.offset||{frames:0},i.offset.frames=r,i.duration=i.duration||{frames:s-r},i.duration.frames=s-r,this.composition.computeFrame()}catch{}}resolveSourceFrame(n){var t,o;for(const[i,r]of this.clips.entries()){const s=this.clipTimelineStart.get(i)||0,l=Math.floor(s*this.fps),c=((t=r.duration)==null?void 0:t.frames)??Math.round(r.duration.seconds*this.fps),d=l+c;if(n>=l&&n<d){const u=n-l;return{sourceFrame:(((o=r.offset)==null?void 0:o.frames)??0)+u,clipId:i}}}return{sourceFrame:0,clipId:null}}}const o0=["src"],a0={class:"preview-controls"},i0=["aria-label"],r0={class:"time-display"},s0={class:"current-time"},l0={class:"total-time"},c0={key:2,class:"loading-overlay"},d0={key:3,class:"error-overlay"},u0=e.defineComponent({__name:"VideoPreviewEngine",props:{mediaUuid:{},recipe:{},media:{},autoPlay:{type:Boolean,default:!1},enableEngine:{type:Boolean,default:!0},fitMode:{default:"contain"}},emits:["time-update","duration-change","play-state-change","error","engine-ready"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(),r=e.ref(),s=e.ref(),l=e.ref(!1),c=e.ref("Initializing..."),d=e.ref(null),u=e.ref(!1),p=e.ref(0),v=e.ref(0);let h=null;const g=e.computed(()=>!!t.enableEngine&&!!t.recipe),y=e.computed(()=>{switch(t.fitMode){case"cover":return"cover";case"none":return"none";default:return"contain"}}),V=e.computed(()=>{var E,R;return(E=t.media)!=null&&E.url?t.media.url:(((R=t.media)==null?void 0:R.file)instanceof File,"")});async function B(){var E,R,A;if(!(!r.value||!t.recipe))try{l.value=!0,c.value="Initializing video engine...";const P=((E=t.recipe.source)==null?void 0:E.original_width)||1920,M=((R=t.recipe.source)==null?void 0:R.original_height)||1080,j=((A=t.recipe.output)==null?void 0:A.fps)||30;h=new Ec(P,M,j,{fitMode:t.fitMode}),h.attachPlayer(r.value),c.value="Loading composition...",await h.loadFromRecipe(t.recipe),v.value=h.durationInSeconds,o("duration-change",v.value),_(),l.value=!1,o("engine-ready",h),t.autoPlay&&(h.play(),u.value=!0)}catch(P){const M=P instanceof Error?P.message:String(P);d.value=`Failed to initialize: ${M}`,l.value=!1}}function _(){if(!h)return;const E=setInterval(()=>{h&&u.value&&(p.value=h.currentTimeInSeconds,o("time-update",p.value))},100);H.value=E}function b(){g.value&&h?(u.value?h.pause():h.play(),u.value=!u.value,o("play-state-change",u.value)):s.value&&(u.value?s.value.pause():s.value.play(),u.value=!u.value,o("play-state-change",u.value))}function m(E){const R=Math.floor(E/60),A=Math.floor(E%60);return`${R}:${A.toString().padStart(2,"0")}`}function w(){d.value=null,g.value&&B()}function I(){!g.value&&s.value&&(v.value=s.value.duration,o("duration-change",v.value))}function N(){!g.value&&s.value&&(p.value=s.value.currentTime,o("time-update",p.value))}function x(){u.value=!1,o("play-state-change",!1)}function T(E){d.value="Failed to load video",o("error",d.value)}e.onMounted(()=>{g.value&&t.recipe&&B()}),e.onUnmounted(()=>{h&&(h.destroy(),h=null),H.value&&(clearInterval(H.value),H.value=null),s.value&&(s.value.pause(),s.value.removeAttribute("src"),s.value.load())}),e.watch(()=>t.recipe,async E=>{if(g.value&&E)if(h)try{await h.loadFromRecipe(E),v.value=h.durationInSeconds,o("duration-change",v.value)}catch{}else await B()}),e.watch(()=>t.enableEngine,async E=>{E?await B():h&&(H.value&&(clearInterval(H.value),H.value=null),h.destroy(),h=null)}),e.watch(()=>t.fitMode,async E=>{if(!(!g.value||!h))try{h.setFitMode(E||"contain")}catch{}});const H=e.ref(null);return(E,R)=>(e.openBlock(),e.createElementBlock("div",{class:"video-preview-engine",ref_key:"containerRef",ref:i},[g.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"videoEnginePlayer",ref:r,class:"video-engine-player",style:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center"}},null,512)):(e.openBlock(),e.createElementBlock("video",{key:1,ref_key:"videoRef",ref:s,src:V.value,onLoadedmetadata:I,onTimeupdate:N,onEnded:x,onError:T,style:e.normalizeStyle({width:"100%",height:"100%",objectFit:y.value}),playsinline:"",controls:""},null,44,o0)),e.createElementVNode("div",a0,[e.createElementVNode("button",{class:"play-button",onClick:b,"aria-label":u.value?"Pause":"Play"},[e.createVNode(e.unref(D.IonIcon),{icon:u.value?e.unref(Ol):e.unref(Pl)},null,8,["icon"])],8,i0),e.createElementVNode("div",r0,[e.createElementVNode("span",s0,e.toDisplayString(m(p.value)),1),R[0]||(R[0]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",l0,e.toDisplayString(m(v.value)),1)])]),l.value?(e.openBlock(),e.createElementBlock("div",c0,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"}),e.createElementVNode("p",null,e.toDisplayString(c.value),1)])):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("div",d0,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(br)},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(d.value),1),e.createElementVNode("button",{onClick:w},"Retry")])):e.createCommentVNode("",!0)],512))}}),rl=Te(u0,[["__scopeId","data-v-7e604791"]]),m0=["aria-label"],p0=["aria-label"],f0={class:"clip-content"},h0={key:0,class:"clip-thumbnail"},v0=["src","alt"],g0={class:"clip-waveform"},y0={class:"clip-info"},b0={class:"clip-label"},w0={class:"clip-duration"},k0={key:1,class:"filter-indicators"},x0={key:2,class:"speed-indicator"},E0={key:0,class:"selection-overlay"},V0=420,S0=8,C0=e.defineComponent({__name:"TimelineClip",props:{clip:{},scale:{},scrollOffset:{default:0},selected:{type:Boolean,default:!1},isMobile:{type:Boolean,default:!1}},emits:["select","long-press","trim-start","trim-end","drag","trim-start-abs","trim-end-abs","drag-abs"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(),r=e.ref(!1),s=e.ref(null),l=e.ref(0),c=e.ref(0),d=e.ref(0),u=e.ref(0),p=e.ref(!1),v=e.ref(!1),h=e.ref(null),g=e.computed(()=>{const S=(t.clip.timelineEnd-t.clip.timelineStart)*t.scale;return{left:`${t.clip.timelineStart*t.scale-t.scrollOffset}px`,width:`${S}px`}}),y=e.computed(()=>t.clip.label||`Clip ${t.clip.id.slice(-4)}`),V=e.computed(()=>{const U=t.clip.timelineEnd-t.clip.timelineStart;return b(U)}),B=e.computed(()=>t.clip.filters&&t.clip.filters.length>0),_=e.computed(()=>t.clip.filters||[]);function b(U){if(U<1)return`${Math.round(U*30)}f`;if(U<60)return`${U.toFixed(1)}s`;{const S=Math.floor(U/60),F=Math.floor(U%60);return`${S}:${F.toString().padStart(2,"0")}`}}function m(U){return!U||typeof U!="string"?Us:U.includes("color")||U.includes("brightness")?fn:U.includes("blur")?dm:U.includes("style")?po:U.includes("effect")?pn:Us}function w(){r.value||o("select")}function I(U){U.button===0&&(T("move",U.clientX),U.preventDefault())}function N(U){if(U.touches.length!==1)return;const S=U.touches[0];if(!t.isMobile){T("move",S.clientX),U.preventDefault();return}d.value=S.clientX,u.value=S.clientY,p.value=!1,v.value=!1,H(),E(),h.value=window.setTimeout(()=>{v.value=!0,E(),t.selected||o("select"),o("long-press")},V0),document.addEventListener("touchmove",R),document.addEventListener("touchend",A),document.addEventListener("touchcancel",A),U.preventDefault()}function x(U,S){const F="touches"in S?S.touches[0].clientX:S.clientX;s.value=U==="start"?"trim-start":"trim-end",T(s.value,F),S.preventDefault(),S.stopPropagation()}function T(U,S){H(),E(),r.value=!0,s.value=U,l.value=S,U==="move"?c.value=t.clip.timelineStart:U==="trim-start"?c.value=t.clip.sourceIn:U==="trim-end"&&(c.value=t.clip.sourceOut),document.addEventListener("mousemove",P),document.addEventListener("mouseup",M),document.addEventListener("touchmove",P),document.addEventListener("touchend",M),t.selected||o("select")}function H(){h.value!==null&&(window.clearTimeout(h.value),h.value=null)}function E(){document.removeEventListener("touchmove",R),document.removeEventListener("touchend",A),document.removeEventListener("touchcancel",A)}function R(U){if(U.touches.length!==1)return;const S=U.touches[0],F=S.clientX-d.value,J=S.clientY-u.value;Math.hypot(F,J)<S0||(p.value=!0,H(),E(),T("move",S.clientX),P(U),U.preventDefault())}function A(){const U=!p.value&&!v.value&&!r.value;H(),E(),p.value=!1,v.value=!1,U&&o("select")}function P(U){if(!r.value||!s.value)return;const S="touches"in U?U.touches[0].clientX:U.clientX,J=S-l.value;s.value==="move"?(o("drag",J),o("drag-abs",S)):s.value==="trim-start"?(o("trim-start",J),o("trim-start-abs",S)):s.value==="trim-end"&&(o("trim-end",J),o("trim-end-abs",S))}function M(){r.value=!1,s.value=null,document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",M),document.removeEventListener("touchmove",P),document.removeEventListener("touchend",M)}function j(){if(!i.value)return;const U=i.value,S=U.getContext("2d");if(!S)return;U.width=U.clientWidth*window.devicePixelRatio,U.height=U.clientHeight*window.devicePixelRatio,S.scale(window.devicePixelRatio,window.devicePixelRatio),S.strokeStyle="rgba(255, 255, 255, 0.3)",S.lineWidth=1,S.beginPath();const F=U.clientWidth,J=U.clientHeight,G=J/2;S.moveTo(0,G),S.lineTo(F,G);for(let Q=0;Q<F;Q+=4){const ge=Math.sin(Q*.05)*(J*.3);S.moveTo(Q,G-ge),S.lineTo(Q,G+ge)}S.stroke()}return e.onMounted(()=>{j(),window.addEventListener("resize",j)}),e.onUnmounted(()=>{M(),H(),E(),window.removeEventListener("resize",j)}),(U,S)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["timeline-clip",{selected:U.selected,mobile:U.isMobile,"has-filters":B.value}]),style:e.normalizeStyle(g.value),onClick:w,onMousedown:I,onTouchstart:N},[e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:S[0]||(S[0]=e.withModifiers(F=>x("start",F),["stop"])),onTouchstart:S[1]||(S[1]=e.withModifiers(F=>x("start",F),["stop"])),"aria-label":`Trim start of ${U.clip.label||"clip"}`},[...S[4]||(S[4]=[e.createElementVNode("div",{class:"trim-grip"},null,-1)])],40,m0),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:S[2]||(S[2]=e.withModifiers(F=>x("end",F),["stop"])),onTouchstart:S[3]||(S[3]=e.withModifiers(F=>x("end",F),["stop"])),"aria-label":`Trim end of ${U.clip.label||"clip"}`},[...S[5]||(S[5]=[e.createElementVNode("div",{class:"trim-grip"},null,-1)])],40,p0),e.createElementVNode("div",f0,[U.clip.thumbnail?(e.openBlock(),e.createElementBlock("div",h0,[e.createElementVNode("img",{src:U.clip.thumbnail,alt:U.clip.label||"Video clip"},null,8,v0)])):e.createCommentVNode("",!0),e.createElementVNode("div",g0,[e.createElementVNode("canvas",{ref_key:"waveformCanvas",ref:i},null,512)]),e.createElementVNode("div",y0,[e.createElementVNode("span",b0,e.toDisplayString(y.value),1),e.createElementVNode("span",w0,e.toDisplayString(V.value),1)]),B.value?(e.openBlock(),e.createElementBlock("div",k0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(_.value,F=>(e.openBlock(),e.createBlock(e.unref(D.IonIcon),{key:F.id||F.filterId,icon:m(F.filterId||F.id),title:`Filter: ${F.filterId||F.id}`},null,8,["icon","title"]))),128))])):e.createCommentVNode("",!0),U.clip.speed&&U.clip.speed!==1?(e.openBlock(),e.createElementBlock("div",x0,e.toDisplayString(U.clip.speed)+"x ",1)):e.createCommentVNode("",!0)]),U.selected?(e.openBlock(),e.createElementBlock("div",E0)):e.createCommentVNode("",!0)],38))}}),_0=Te(C0,[["__scopeId","data-v-be208792"]]);class Vc{constructor(n=30){this.fps=30,this.fps=n}setFps(n){this.fps=n}async convertTimelineClipToEngine(n,t){const o=new rr(t,{muted:n.muted||!1,scale:n.scale||1,position:"center"});if(n.sourceIn!==void 0||n.sourceOut!==void 0){const i=this.secondsToFrames(n.sourceIn||0),r=n.sourceOut?this.secondsToFrames(n.sourceOut):o.duration.frames;o.subclip(i,r)}return n.timelineStart&&n.timelineStart>0&&o.offsetBy(this.secondsToFrames(n.timelineStart)),n.transform&&this.applyTransformations(o,n.transform),o}convertEngineClipToTimeline(n,t,o){const i=this.framesToSeconds(n.duration.frames),r=n.offset?this.framesToSeconds(n.offset.frames):0;return{id:t,url:o,type:"video",timelineStart:r,timelineEnd:r+i,sourceIn:0,sourceOut:i,duration:i,muted:n.muted||!1,scale:n.scale.x||1}}async buildCompositionFromRecipe(n,t){var o;(o=t.clear)==null||o.call(t);for(const i of n.timeline)try{if(!i.url)continue;const r=await Sn.from(i.url),s=await this.convertTimelineClipToEngine(i,r);await t.add(s)}catch{}n.duration&&(t.duration=ve.fromFrames(this.secondsToFrames(n.duration)))}extractTimelineFromComposition(n){const t=[];return(n.clips||[]).forEach((i,r)=>{var s,l;i instanceof rr&&t.push(this.convertEngineClipToTimeline(i,`clip-${r}`,((s=i.source)==null?void 0:s.externalURL)||((l=i.source)==null?void 0:l.objectURL)||""))}),t}applyTransformations(n,t){(t.x!==void 0||t.y!==void 0)&&(n.x=t.x||0,n.y=t.y||0),t.rotation!==void 0&&(n.rotation=t.rotation),t.opacity!==void 0&&(n.alpha=t.opacity),t.scale!==void 0&&(n.scale={x:t.scale,y:t.scale})}secondsToFrames(n){return Math.round(n*this.fps)}framesToSeconds(n){return n/this.fps}framesToTime(n){const t=this.framesToSeconds(n),o=Math.floor(t/60),i=Math.floor(t%60),r=Math.floor(t%1*1e3);return`${o.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}.${r.toString().padStart(3,"0")}`}formatTime(n){const t=Math.floor(n/3600),o=Math.floor(n%3600/60),i=Math.floor(n%60);return`${t.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}:${i.toString().padStart(2,"0")}`}parseTime(n){const t=n.split(":");let o=0;if(t.length===2){const[i,r]=t;o=parseInt(i)*60+parseFloat(r)}else if(t.length===3){const[i,r,s]=t;o=parseInt(i)*3600+parseInt(r)*60+parseFloat(s)}else o=parseFloat(n);return o}timeToFrames(n){const t=n.split(":");let o=0;if(t.length===2){const[i,r]=t;o=parseInt(i)*60+parseFloat(r)}else if(t.length===3){const[i,r,s]=t;o=parseInt(i)*3600+parseInt(r)*60+parseFloat(s)}else o=parseFloat(n);return this.secondsToFrames(o)}}const N0={class:"time-markers"},T0=["aria-label","title"],M0={key:0,class:"timeline-scrollbar"},B0=e.defineComponent({__name:"VideoTimeline",props:{playhead:{},clips:{},duration:{},zoomLevel:{default:50},isMobile:{type:Boolean,default:!1},snapEnabled:{type:Boolean,default:!0},selectedClipId:{},fps:{default:30},useFrameMode:{type:Boolean,default:!1},sensitivity:{default:.25}},emits:["update:playhead","trim","split","clip-select","clip-move","clip-long-press","snap-state-change","toggle-frame-mode"],setup(a,{expose:n,emit:t}){const o=a,i=e.computed(()=>o.isMobile===!0),r=t,s=e.ref(),l=e.ref(o.selectedClipId||null),c=e.ref(!1),d=e.ref(0),u=e.ref(),p=e.ref(0),v=e.computed(()=>o.selectedClipId??l.value);e.watch(()=>o.selectedClipId,C=>{C!==void 0&&(l.value=C)});const h=new Vc(o.fps),g=e.ref(!1),y=e.ref(null),V=e.ref(0),B=e.ref(0),_=e.ref(null),b=e.ref(0),m=e.ref(0),w=e.ref(0),I=e.ref(!1),N=e.ref(0),x=e.ref(o.zoomLevel),T=e.computed(()=>o.zoomLevel);function H(C){const L=o.clips.find(K=>K.id===C);if(!L)return null;const X=o.clips.filter(K=>K.id!==C&&K.timelineStart>=L.timelineEnd-1e-9).map(K=>K.timelineStart);return X.length?Math.min(...X):null}function E(C){const L=C.sourceMaxOut??o.duration,X=C.timelineStart+(L-C.sourceIn),K=H(C.id),ce=K!=null?Math.max(C.timelineStart,K):1/0;return Math.min(X,ce)}function R(C){const L=C.sourceMinIn??0,K=(C.sourceMaxOut??o.duration)-L,ce=C.sourceIn-L;return{left:`${(C.timelineStart-ce)*T.value-d.value}px`,width:`${K*T.value}px`,top:"0px",height:"80px",opacity:v.value===C.id?.25:.15}}const A=e.computed(()=>o.useFrameMode?o.zoomLevel:o.zoomLevel/o.fps),P=e.computed(()=>h.secondsToFrames(o.duration)),M=e.computed(()=>o.useFrameMode?P.value*A.value:o.duration*T.value),j=e.computed(()=>{var C;return p.value||((C=s.value)==null?void 0:C.clientWidth)||800}),U=e.computed(()=>M.value>j.value),S=e.computed(()=>Math.max(0,M.value-j.value)),F=e.computed(()=>d.value>0),J=e.computed(()=>d.value<S.value),G=e.computed(()=>o.useFrameMode?h.secondsToFrames(o.playhead)*A.value-d.value:o.playhead*T.value-d.value),Q=e.computed(()=>_.value===null?null:o.useFrameMode?h.secondsToFrames(_.value)*A.value-d.value:_.value*T.value-d.value),ge=e.computed(()=>{const C=Math.max(50,j.value/M.value*j.value),L=d.value/S.value*(j.value-C);return{width:`${C}px`,left:`${L}px`}}),be=e.computed(()=>{const C=[],L=te();for(let X=0;X<=o.duration;X+=L){const K=X*T.value-d.value;K>=-50&&K<=j.value+50&&C.push({position:K,label:$(X),time:X})}return C});function te(){const L=80/T.value;return L<=1?1:L<=5?5:L<=10?10:L<=30?30:L<=60?60:Math.ceil(L/60)*60}function $(C){if(o.useFrameMode)return`F${h.secondsToFrames(C)}`;{const L=Math.floor(C/60),X=Math.floor(C%60),K=Math.floor(C%1*o.fps);return T.value>100?`${L}:${X.toString().padStart(2,"0")}:${K.toString().padStart(2,"0")}`:`${L}:${X.toString().padStart(2,"0")}`}}function O(C){const L=s.value.getBoundingClientRect();let K=(C.clientX-L.left+d.value)/T.value;const ce=o.clips.find(fe=>K>=fe.timelineStart&&K<=fe.timelineEnd);if(ce)K=Math.max(ce.timelineStart,Math.min(ce.timelineEnd,K));else if(o.selectedClipId){const fe=o.clips.find(_e=>_e.id===o.selectedClipId);if(fe){const _e=Math.abs(K-fe.timelineStart),Fe=Math.abs(K-fe.timelineEnd);K=_e<Fe?fe.timelineStart:fe.timelineEnd}}else K=Math.max(0,Math.min(K,o.duration));r("update:playhead",K)}function me(C){if(!U.value)return;const L=Math.abs(C.deltaX)>Math.abs(C.deltaY)?C.deltaX:C.deltaY;L!==0&&(C.preventDefault(),d.value=Math.max(0,Math.min(S.value,d.value+L)))}function ne(){return[...o.clips].sort((C,L)=>C.timelineStart-L.timelineStart)}function ee(C){const L=ne(),X=L.findIndex(K=>K.id===C);return{previous:X>0?L[X-1]:null,next:X!==-1&&X<L.length-1?L[X+1]:null}}function pe(C){const L=C.timelineEnd-C.timelineStart,{previous:X,next:K}=ee(C.id),ce=X?X.timelineEnd:0,fe=K?K.timelineStart-L:Math.max(C.timelineStart,o.duration-L);return{minStart:ce,maxStart:Math.max(ce,fe)}}function ae(){return 12/Math.max(T.value,1)}function ue(C){return Array.from(new Set(C.filter(L=>typeof L=="number"&&Number.isFinite(L))))}function we(C,L,X,K){const ce=Math.max(X,Math.min(C,K));if(!o.snapEnabled)return{value:ce,guideTime:null};const fe=ae();let _e=ce,Fe=null,Me=Number.POSITIVE_INFINITY;for(const De of ue(L)){if(De<X||De>K)continue;const Qe=Math.abs(De-ce);Qe<=fe&&Qe<Me&&(_e=De,Fe=De,Me=Qe)}return{value:_e,guideTime:Fe}}function oe(C){if(C.touches.length===2){I.value=!0;const L=C.touches[0],X=C.touches[1];N.value=Math.hypot(X.clientX-L.clientX,X.clientY-L.clientY),x.value=o.zoomLevel}else C.touches.length===1&&(b.value=C.touches[0].clientX,m.value=C.touches[0].clientY,w.value=b.value)}function se(C){if(I.value&&C.touches.length===2){const L=C.touches[0],X=C.touches[1],ce=Math.hypot(X.clientX-L.clientX,X.clientY-L.clientY)/N.value;Math.max(10,Math.min(200,x.value*ce)),r("update:playhead",o.playhead)}else if(C.touches.length===1&&!I.value){const L=C.touches[0],X=w.value-L.clientX;Math.abs(X)>Math.abs(L.clientY-m.value)&&(C.preventDefault(),d.value=Math.max(0,Math.min(M.value-j.value,d.value+X)),w.value=L.clientX)}}function ke(){I.value=!1}function Se(C){const L=C.target;if(L.closest(".playhead-handle"))return;const X=C.button===1,K=!!L.closest(".video-track");(X||!K&&U.value)&&ut(C)}function ut(C){g.value=!0,y.value="pan",V.value=C.clientX,B.value=d.value,document.addEventListener("mousemove",He),document.addEventListener("mouseup",nt)}function Ze(C){C.preventDefault(),C.stopPropagation(),g.value=!0,y.value="playhead";const L="touches"in C?C.touches[0].clientX:C.clientX;V.value=L,B.value=o.playhead,"touches"in C?(document.addEventListener("touchmove",He),document.addEventListener("touchend",nt)):(document.addEventListener("mousemove",He),document.addEventListener("mouseup",nt))}function Vt(C){C.preventDefault(),C.stopPropagation(),g.value=!0,y.value="scrollbar";const L="touches"in C?C.touches[0].clientX:C.clientX;V.value=L,B.value=d.value,"touches"in C?(document.addEventListener("touchmove",He),document.addEventListener("touchend",nt)):(document.addEventListener("mousemove",He),document.addEventListener("mouseup",nt))}function He(C){if(!g.value)return;const X=("touches"in C?C.touches[0].clientX:C.clientX)-V.value;if(y.value==="playhead"){const K=X/T.value;let ce=B.value+K;if(o.selectedClipId){const fe=o.clips.find(_e=>_e.id===o.selectedClipId);fe?ce=Math.max(fe.timelineStart,Math.min(fe.timelineEnd,ce)):ce=Math.max(0,Math.min(o.duration,ce))}else{const fe=o.clips.find(_e=>o.playhead>=_e.timelineStart&&o.playhead<=_e.timelineEnd);fe?ce=Math.max(fe.timelineStart,Math.min(fe.timelineEnd,ce)):ce=Math.max(0,Math.min(o.duration,ce))}r("update:playhead",ce)}else if(y.value==="scrollbar"){const K=X/j.value*M.value;d.value=Math.max(0,Math.min(S.value,B.value+K))}else if(y.value==="pan"){const K=B.value-X;d.value=Math.max(0,Math.min(S.value,K))}}function nt(){g.value=!1,y.value=null,_.value=null,document.removeEventListener("mousemove",He),document.removeEventListener("mouseup",nt),document.removeEventListener("touchmove",He),document.removeEventListener("touchend",nt)}function St(C){l.value=l.value===C?null:C,r("clip-select",l.value)}function $t(C){l.value=C,r("clip-select",C),r("clip-long-press",C)}function st(C,L){const X=o.clips.find(ce=>ce.id===C);if(!X||Math.abs(L)<2)return;const K=L/T.value*o.sensitivity;if(o.useFrameMode){const ce=h.secondsToFrames(X.sourceIn),fe=h.secondsToFrames(K),_e=Math.max(0,ce+fe),Fe=h.framesToSeconds(_e);r("trim",C,"start",Fe)}else{const ce=Math.max(0,X.sourceIn+K);r("trim",C,"start",ce)}}function yt(C,L){const X=o.clips.find(Ot=>Ot.id===C);if(!X||!s.value)return;const K=s.value.getBoundingClientRect(),ce=L-K.left,fe=80;if(ce<fe)d.value=Math.max(0,d.value-8);else if(ce>K.width-fe){const Ot=Math.max(0,M.value-j.value);d.value=Math.min(Ot,d.value+8)}const _e=ce+d.value,Fe=1/o.fps;let Me=_e/T.value;const{previous:De}=ee(X.id),Qe=we(Me,[0,De==null?void 0:De.timelineEnd,o.playhead],0,X.timelineEnd-Fe);Me=Qe.value,_.value=Qe.guideTime;let ht=X.sourceIn+(Me-X.timelineStart);ht=Math.round(ht*o.fps)/o.fps,r("trim",C,"start",ht)}function le(C,L){const X=o.clips.find(to=>to.id===C);if(!X||!s.value)return;const K=s.value.getBoundingClientRect(),ce=L-K.left,fe=80;if(ce<fe)d.value=Math.max(0,d.value-8);else if(ce>K.width-fe){const to=Math.max(0,M.value-j.value);d.value=Math.min(to,d.value+8)}const _e=ce+d.value,Fe=1/o.fps,Me=E(X);let De=_e/T.value;const{next:Qe}=ee(X.id),ht=we(De,[Qe==null?void 0:Qe.timelineStart,o.playhead],X.timelineStart+Fe,Me);De=ht.value,_.value=ht.guideTime;let Ot=X.sourceIn+(De-X.timelineStart);Ot=Math.round(Ot*o.fps)/o.fps,r("trim",C,"end",Ot)}function xe(C,L){const X=o.clips.find(ht=>ht.id===C);if(!X||!s.value)return;const K=s.value.getBoundingClientRect(),ce=L-K.left,fe=80;if(ce<fe)d.value=Math.max(0,d.value-8);else if(ce>K.width-fe){const ht=Math.max(0,M.value-j.value);d.value=Math.min(ht,d.value+8)}const _e=ce+d.value,Fe=X.timelineEnd-X.timelineStart,Me=pe(X);let De=_e/T.value;const Qe=we(De,[Me.minStart,Me.maxStart,o.playhead,o.playhead-Fe],Me.minStart,Me.maxStart);De=Qe.value,_.value=Qe.guideTime,De=Math.round(De*o.fps)/o.fps,r("clip-move",C,De)}function Ee(C,L){const X=o.clips.find(fe=>fe.id===C);if(!X||Math.abs(L)<2)return;const K=L/T.value*o.sensitivity,ce=fe=>Math.max(0,Math.round(fe*o.fps)/o.fps);if(o.useFrameMode){const fe=h.secondsToFrames(X.sourceOut),_e=h.secondsToFrames(K),Fe=E(X),Me=X.sourceIn+(Fe-X.timelineStart),De=h.secondsToFrames(Me),Qe=Math.min(De,fe+_e),ht=h.framesToSeconds(Qe);r("trim",C,"end",ht)}else{const fe=E(X),_e=X.sourceIn+(fe-X.timelineStart),Fe=Math.min(_e,X.sourceOut+K),Me=ce(Fe);r("trim",C,"end",Me)}}function Oe(C,L){const X=o.clips.find(fe=>fe.id===C);if(!X||Math.abs(L)<2)return;const K=L/T.value*o.sensitivity,ce=fe=>Math.max(0,Math.round(fe*o.fps)/o.fps);if(o.useFrameMode){const fe=h.secondsToFrames(X.timelineStart),_e=h.secondsToFrames(K),Fe=Math.max(0,fe+_e),Me=h.framesToSeconds(Fe);r("clip-move",C,Me)}else{const fe=Math.max(0,X.timelineStart+K),_e=ce(fe);r("clip-move",C,_e)}}return n({handleTrimStart:st,handleTrimEnd:Ee,handleClipDrag:Oe,handleTrimStartAbs:yt,handleTrimEndAbs:le,handleClipDragAbs:xe,handleClipLongPress:$t}),e.watch(()=>o.playhead,C=>{const L=C*T.value;L<d.value+50?d.value=Math.max(0,L-50):L>d.value+j.value-50&&(d.value=Math.min(S.value,L-j.value+50))}),e.onMounted(()=>{const C=new ResizeObserver(L=>{L[0]&&(p.value=Math.round(L[0].contentRect.width))});s.value&&C.observe(s.value),e.onUnmounted(()=>C.disconnect())}),e.onUnmounted(()=>{nt()}),e.watch([M,j],()=>{d.value>S.value&&(d.value=S.value)}),e.watch(_,(C,L)=>{const X=C!==null;X!==(L!==null)&&r("snap-state-change",X)}),(C,L)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-timeline",{mobile:i.value}]),ref_key:"timelineRef",ref:s,onWheel:me},[e.createElementVNode("div",{class:"timeline-ruler",onClick:O},[e.createElementVNode("div",N0,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(be.value,X=>(e.openBlock(),e.createElementBlock("span",{key:X.position,class:"time-marker",style:e.normalizeStyle({left:`${X.position}px`})},e.toDisplayString(X.label),5))),128))])]),e.createElementVNode("div",{class:e.normalizeClass(["timeline-content",{"is-pannable":U.value,"is-panning":g.value&&y.value==="pan","overflow-left":F.value,"overflow-right":J.value}]),onTouchstart:oe,onTouchmove:se,onTouchend:ke,onMousedown:Se},[e.createElementVNode("div",{class:"video-track",ref_key:"trackRef",ref:u},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.clips,X=>(e.openBlock(),e.createElementBlock("div",{key:`${X.id}-extent`,class:"clip-extent",style:e.normalizeStyle(R(X)),"aria-hidden":"true"},null,4))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(C.clips,X=>(e.openBlock(),e.createBlock(_0,{key:X.id,clip:X,scale:T.value,"scroll-offset":d.value,selected:v.value===X.id,"is-mobile":i.value,onSelect:K=>St(X.id),onLongPress:K=>$t(X.id),onTrimStartAbs:K=>yt(X.id,K),onTrimEndAbs:K=>le(X.id,K),onDragAbs:K=>xe(X.id,K)},null,8,["clip","scale","scroll-offset","selected","is-mobile","onSelect","onLongPress","onTrimStartAbs","onTrimEndAbs","onDragAbs"]))),128))],512),e.createElementVNode("div",{class:"playhead",style:e.normalizeStyle({left:`${G.value}px`}),onMousedown:Ze,onTouchstart:Ze},[...L[1]||(L[1]=[e.createElementVNode("div",{class:"playhead-handle"},[e.createElementVNode("div",{class:"playhead-line"})],-1)])],36),c.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"split-indicator",style:e.normalizeStyle({left:`${G.value}px`})},null,4)):e.createCommentVNode("",!0),Q.value!==null?(e.openBlock(),e.createElementBlock("div",{key:1,class:"snap-guide",style:e.normalizeStyle({left:`${Q.value}px`}),"aria-hidden":"true"},null,4)):e.createCommentVNode("",!0),i.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:2,class:"frame-mode-toggle",onClick:L[0]||(L[0]=X=>C.$emit("toggle-frame-mode")),"aria-label":C.useFrameMode?"Switch to time mode":"Switch to frame mode",title:C.useFrameMode?"Switch to time mode":"Switch to frame mode"},e.toDisplayString(C.useFrameMode?"F":"T"),9,T0))],34),U.value?(e.openBlock(),e.createElementBlock("div",M0,[e.createElementVNode("div",{class:"scrollbar-thumb",style:e.normalizeStyle(ge.value),onMousedown:Vt,onTouchstart:Vt},null,36)])):e.createCommentVNode("",!0)],34))}}),sl=Te(B0,[["__scopeId","data-v-d46ec03b"]]),I0={class:"control-group zoom-controls"},F0={class:"zoom-slider"},$0=["value"],R0={class:"control-group playback-controls"},D0=["aria-label"],A0={key:0,class:"control-group speed-control"},U0=["value"],L0=e.defineComponent({__name:"TimelineControls",props:{selectedClip:{},canSplit:{type:Boolean,default:!1},canDelete:{type:Boolean,default:!1},isPlaying:{type:Boolean,default:!1},zoomLevel:{default:50},playbackSpeed:{default:1},isMobile:{type:Boolean,default:!1}},emits:["split","delete","duplicate","zoom-in","zoom-out","zoom-change","fit-to-window","play-pause","frame-forward","frame-backward","skip-to-start","skip-to-end","speed-change"],setup(a,{emit:n}){const t=n;function o(u){const p=u.target;t("zoom-change",Number(p.value))}function i(){t("fit-to-window")}function r(){t("frame-forward")}function s(){t("frame-backward")}function l(){t("skip-to-start")}function c(){t("skip-to-end")}function d(u){const p=u.target;t("speed-change",Number(p.value))}return(u,p)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["timeline-controls",{mobile:u.isMobile}])},[e.createElementVNode("div",I0,[e.createElementVNode("button",{class:"control-button zoom-button",onClick:p[0]||(p[0]=v=>u.$emit("zoom-out")),"aria-label":"Zoom out"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Sm)},null,8,["icon"])]),e.createElementVNode("div",F0,[e.createElementVNode("input",{type:"range",value:u.zoomLevel,onInput:o,min:"10",max:"200",step:"5","aria-label":"Timeline zoom"},null,40,$0)]),e.createElementVNode("button",{class:"control-button zoom-button",onClick:p[1]||(p[1]=v=>u.$emit("zoom-in")),"aria-label":"Zoom in"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Ku)},null,8,["icon"])]),e.createElementVNode("button",{class:"control-button",onClick:i,"aria-label":"Fit timeline to window"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(cm)},null,8,["icon"]),p[3]||(p[3]=e.createElementVNode("span",{class:"control-label"},"Fit",-1))])]),e.createElementVNode("div",R0,[e.createElementVNode("button",{class:"control-button",onClick:l,"aria-label":"Skip to start"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Em)},null,8,["icon"])]),e.createElementVNode("button",{class:"control-button",onClick:s,"aria-label":"Previous frame"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(bm)},null,8,["icon"])]),e.createElementVNode("button",{class:"control-button play-button",onClick:p[2]||(p[2]=v=>u.$emit("play-pause")),"aria-label":u.isPlaying?"Pause":"Play"},[e.createVNode(e.unref(D.IonIcon),{icon:u.isPlaying?e.unref(zl):e.unref(jl)},null,8,["icon"])],8,D0),e.createElementVNode("button",{class:"control-button",onClick:r,"aria-label":"Next frame"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(xm)},null,8,["icon"])]),e.createElementVNode("button",{class:"control-button",onClick:c,"aria-label":"Skip to end"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Vm)},null,8,["icon"])])]),u.isMobile?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",A0,[p[5]||(p[5]=e.createElementVNode("label",{class:"speed-label"},"Speed:",-1)),e.createElementVNode("select",{value:u.playbackSpeed,onChange:d,class:"speed-select","aria-label":"Playback speed"},[...p[4]||(p[4]=[e.createStaticVNode('<option value="0.25" data-v-7bf65ab9>0.25x</option><option value="0.5" data-v-7bf65ab9>0.5x</option><option value="1" data-v-7bf65ab9>1x</option><option value="1.5" data-v-7bf65ab9>1.5x</option><option value="2" data-v-7bf65ab9>2x</option>',5)])],40,U0)]))],2))}}),O0=Te(L0,[["__scopeId","data-v-7bf65ab9"]]),z0={key:0,class:"category-section"},P0={class:"category-carousel-wrapper"},j0=["disabled"],W0=["onClick","data-testid","aria-label"],Z0={class:"category-name"},X0=["disabled"],H0={class:"filter-section"},G0={class:"filter-carousel-wrapper"},J0=["disabled"],Y0=["onClick","onKeydown","data-testid","aria-label"],K0=["onClick"],q0={class:"filter-preview"},Q0={class:"filter-placeholder"},eg={class:"filter-name"},tg=["disabled"],ng={class:"carousel-pagination"},og=["onClick"],ag={key:1,class:"filter-adjustments"},ig={class:"adjustment-header"},rg={class:"adjustment-actions"},sg={key:0},lg={key:0,class:"slider-control"},cg={class:"control-label"},dg={class:"slider-wrapper"},ug={class:"slider-value"},mg={key:1,class:"color-control"},pg={class:"control-label"},fg={class:"color-wrapper"},hg=["value","onInput","disabled"],vg={class:"color-value"},gg={key:2,class:"toggle-control"},yg={class:"control-label"},bg={key:3,class:"select-control"},wg={class:"control-label"},kg=["value","onChange","disabled"],xg=["value"],Eg={key:1,class:"no-params"},Vg=e.defineComponent({__name:"VideoFilterCarousel",props:{filters:{},activeFilters:{},thumbnailUrl:{},showCategories:{type:Boolean,default:!0},compact:{type:Boolean,default:!1}},emits:["apply-filter","remove-filter","update-param","preview-filter"],setup(a,{emit:n}){const t=a,o=n,i=e.ref("all"),r=e.ref(null),s=e.ref(0),l=e.ref(0),c=e.ref(new Map),d=e.ref(),u=e.ref(),p={all:pn,adjust:ro,color:fn,blur:qo,light:so,effects:Mi,stylize:po,advanced:pn,distortion:fo,transform:fo};function v(S){return S.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function h(S){return S.replace(/[-_]/g," ").replace(/\b\w/g,F=>F.toUpperCase())}function g(S){return p[S.toLowerCase()]??pn}const y=e.computed(()=>{const S=Array.from(new Set(t.filters.map(F=>F.category).filter(F=>typeof F=="string"&&F.length>0))).sort((F,J)=>F.localeCompare(J));return[{id:"all",name:"All",icon:pn},...S.map(F=>({id:F,name:h(F),icon:g(F)}))]}),V=e.computed(()=>i.value==="all"?t.filters:t.filters.filter(S=>S.category===i.value));e.watch(y,S=>{new Set(S.map(G=>G.id)).has(i.value)||(i.value="all");const J=Math.max(0,S.length-3);s.value>J&&(s.value=J)},{immediate:!0});function B(S){var F;return((F=t.activeFilters)==null?void 0:F.has(S))||!1}function _(S){if(r.value=S,!B(S.id)&&(o("apply-filter",S),S.params&&S.params.length>0)){const F=new Map;S.params.forEach(J=>{F.set(J.id,J.default)}),c.value.set(S.id,F)}o("preview-filter",S)}function b(S){var F;o("remove-filter",S),c.value.delete(S),((F=r.value)==null?void 0:F.id)===S&&(r.value=null)}function m(S){if(typeof S=="number"&&Number.isFinite(S))return S;if(typeof S=="string"){const F=Number(S);return Number.isFinite(F)?F:null}return null}function w(S,F){var $;const J=t.filters.find(O=>O.id===S),G=J==null?void 0:J.params.find(O=>O.id===F),Q=(G==null?void 0:G.default)??0,ge=O=>typeof Q=="number"?m(O)??Q:typeof Q=="boolean"?typeof O=="boolean"?O:Q:typeof O=="string"?O:Q,be=($=t.activeFilters)==null?void 0:$.get(S);if(be&&be.params){const O=be.params[F];if(O!=null)return ge(O)}const te=c.value.get(S);if(te){const O=te.get(F);if(O!=null)return ge(O)}return Q}function I(S,F,J){var G;c.value.has(S)||c.value.set(S,new Map),(G=c.value.get(S))==null||G.set(F,J),o("update-param",S,F,J)}function N(S){if(typeof S=="boolean")return S?"On":"Off";if(typeof S=="string"){const J=m(S);return J===null?"0":Number.isInteger(J)?J.toString():J.toFixed(2)}const F=m(S);return F===null?"0":Number.isInteger(F)?F.toString():F.toFixed(2)}function x(){if(r.value&&(o("apply-filter",r.value),r.value.params&&r.value.params.length>0)){const S=new Map;r.value.params.forEach(F=>{S.set(F.id,F.default)}),c.value.set(r.value.id,S)}}function T(S){const F=t.filters.find(J=>J.id===S);F&&F.params&&F.params.forEach(J=>{I(S,J.id,J.default)})}function H(S){return{basic:ro,color:fn,blur:qo,light:so,effects:Mi,stylize:po,adjustment:ro,"color-matrix":fn,glow:pn,distortion:fo}[S]||pn}function E(S){return{adjustment:ro,brightness:so,contrast:ro,saturation:fn,blur:qo,"gaussian-blur":qo,"color-matrix":fn,grayscale:po,sepia:po,vignette:fo,glow:pn,glitch:Mi,godray:so,lightmap:so}[S.id]||H(S.category)}function R(){s.value>0&&(s.value--,U(d.value,s.value))}function A(){s.value<y.value.length-3&&(s.value++,U(d.value,s.value))}function P(){l.value>0&&(l.value--,U(u.value,l.value))}function M(){l.value<V.value.length-4&&(l.value++,U(u.value,l.value))}function j(S){l.value=S*4,U(u.value,l.value)}function U(S,F){var J;if(S){const G=((J=S.querySelector(".category-chip, .filter-card"))==null?void 0:J.clientWidth)||100;S.scrollTo({left:F*(G+8),behavior:"smooth"})}}return(S,F)=>{var J;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-filter-carousel-container",{compact:S.compact}])},[S.showCategories?(e.openBlock(),e.createElementBlock("div",z0,[e.createElementVNode("div",P0,[e.createElementVNode("button",{onClick:R,class:"carousel-nav carousel-nav-left",disabled:s.value===0,"aria-label":"Previous categories","data-testid":"btn-filter-category-prev"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Fs)},null,8,["icon"])],8,j0),e.createElementVNode("div",{ref_key:"categoryCarouselRef",ref:d,class:"category-carousel"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(y.value,G=>(e.openBlock(),e.createElementBlock("button",{key:G.id,onClick:Q=>i.value=G.id,class:e.normalizeClass(["category-chip",{active:i.value===G.id}]),"data-testid":`btn-filter-category-${v(G.id)}`,"aria-label":`Filter category ${G.name}`},[e.createVNode(e.unref(D.IonIcon),{icon:G.icon,class:"category-icon"},null,8,["icon"]),e.createElementVNode("span",Z0,e.toDisplayString(G.name),1)],10,W0))),128))],512),e.createElementVNode("button",{onClick:A,class:"carousel-nav carousel-nav-right",disabled:s.value>=y.value.length-3,"aria-label":"Next categories","data-testid":"btn-filter-category-next"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref($s)},null,8,["icon"])],8,X0)])])):e.createCommentVNode("",!0),e.createElementVNode("div",H0,[e.createElementVNode("div",G0,[e.createElementVNode("button",{onClick:P,class:"carousel-nav carousel-nav-left",disabled:l.value===0,"aria-label":"Previous filters","data-testid":"btn-filter-carousel-prev"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Fs)},null,8,["icon"])],8,J0),e.createElementVNode("div",{ref_key:"filterCarouselRef",ref:u,class:"filter-carousel"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,G=>{var Q;return e.openBlock(),e.createElementBlock("div",{key:G.id,class:e.normalizeClass(["filter-card",{active:B(G.id),selected:((Q=r.value)==null?void 0:Q.id)===G.id}]),onClick:ge=>_(G),onKeydown:[e.withKeys(ge=>_(G),["enter"]),e.withKeys(e.withModifiers(ge=>_(G),["prevent"]),["space"])],role:"button",tabindex:"0","data-testid":`btn-video-filter-${v(G.id)}`,"aria-label":`Select filter ${G.name}`},[B(G.id)?(e.openBlock(),e.createElementBlock("div",{key:0,class:"filter-checkmark",onClick:e.withModifiers(ge=>b(G.id),["stop"])},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Al)},null,8,["icon"])],8,K0)):e.createCommentVNode("",!0),e.createElementVNode("div",q0,[e.createElementVNode("div",Q0,[e.createVNode(e.unref(D.IonIcon),{icon:E(G),class:"filter-icon"},null,8,["icon"])])]),e.createElementVNode("span",eg,e.toDisplayString(G.name),1)],42,Y0)}),128))],512),e.createElementVNode("button",{onClick:M,class:"carousel-nav carousel-nav-right",disabled:l.value>=Math.max(0,V.value.length-4),"aria-label":"Next filters","data-testid":"btn-filter-carousel-next"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref($s)},null,8,["icon"])],8,tg)]),e.createElementVNode("div",ng,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Math.ceil(V.value.length/4),(G,Q)=>(e.openBlock(),e.createElementBlock("span",{key:Q,class:e.normalizeClass(["pagination-dot",{active:Math.floor(l.value/4)===Q}]),onClick:ge=>j(Q)},null,10,og))),128))])]),r.value?(e.openBlock(),e.createElementBlock("div",ag,[e.createElementVNode("div",ig,[e.createElementVNode("h4",null,e.toDisplayString(r.value.name),1),e.createElementVNode("div",rg,[B(r.value.id)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,onClick:x,class:"apply-btn","data-testid":"btn-apply-selected-filter"}," Apply Filter ")),B(r.value.id)?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:F[0]||(F[0]=G=>b(r.value.id)),class:"remove-btn","data-testid":"btn-remove-selected-filter"}," Remove Filter ")):e.createCommentVNode("",!0),B(r.value.id)&&((J=r.value.params)==null?void 0:J.length)>0?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:F[1]||(F[1]=G=>T(r.value.id)),class:"reset-btn","data-testid":"btn-reset-selected-filter"}," Reset ")):e.createCommentVNode("",!0)])]),r.value.params&&r.value.params.length>0?(e.openBlock(),e.createElementBlock("div",sg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value.params,G=>(e.openBlock(),e.createElementBlock("div",{key:G.id,class:"adjustment-control"},[!G.type||G.type==="slider"?(e.openBlock(),e.createElementBlock("div",lg,[e.createElementVNode("label",cg,e.toDisplayString(G.label||G.id),1),e.createElementVNode("div",dg,[e.createVNode(e.unref(D.IonRange),{value:w(r.value.id,G.id),onIonChange:Q=>I(r.value.id,G.id,Q.detail.value),min:G.min,max:G.max,step:G.step||.01,color:"primary",class:"compact-slider",disabled:!B(r.value.id),"data-testid":`range-filter-${v(r.value.id)}-${v(G.id)}`,"aria-label":`Adjust ${G.label||G.id} for ${r.value.name}`},null,8,["value","onIonChange","min","max","step","disabled","data-testid","aria-label"]),e.createElementVNode("span",ug,e.toDisplayString(N(w(r.value.id,G.id))),1)])])):G.type==="color"?(e.openBlock(),e.createElementBlock("div",mg,[e.createElementVNode("label",pg,e.toDisplayString(G.label||G.id),1),e.createElementVNode("div",fg,[e.createElementVNode("input",{type:"color",value:w(r.value.id,G.id),onInput:Q=>I(r.value.id,G.id,Q.target.value),disabled:!B(r.value.id),class:"color-input"},null,40,hg),e.createElementVNode("span",vg,e.toDisplayString(w(r.value.id,G.id)),1)])])):G.type==="toggle"?(e.openBlock(),e.createElementBlock("div",gg,[e.createElementVNode("label",yg,e.toDisplayString(G.label||G.id),1),e.createVNode(e.unref(D.IonToggle),{checked:!!w(r.value.id,G.id),onIonChange:Q=>I(r.value.id,G.id,Q.detail.checked),disabled:!B(r.value.id),color:"primary"},null,8,["checked","onIonChange","disabled"])])):G.type==="select"?(e.openBlock(),e.createElementBlock("div",bg,[e.createElementVNode("label",wg,e.toDisplayString(G.label||G.id),1),e.createElementVNode("select",{value:w(r.value.id,G.id),onChange:Q=>I(r.value.id,G.id,Q.target.value),disabled:!B(r.value.id),class:"select-input"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(G.options,Q=>(e.openBlock(),e.createElementBlock("option",{key:String(Q.value),value:Q.value},e.toDisplayString(Q.label),9,xg))),128))],40,kg)])):e.createCommentVNode("",!0)]))),128))])):(e.openBlock(),e.createElementBlock("div",Eg," This filter has no adjustable parameters "))])):e.createCommentVNode("",!0)],2)}}}),Sg=Te(Vg,[["__scopeId","data-v-9efd15d9"]]);class Cg{constructor(n){this.pixiFilters=new Map,this.filterParams=new Map,this.filterTypes=new Map,this.filterIntensity=new Map,this.composition=n}setComposition(n){this.composition=n}mapMediablesToPIXI(n){switch(n.filterId){case"blur":return this.createBlurFilter(n.params);case"brightness":return this.createBrightnessFilter(n.params);case"contrast":return this.createContrastFilter(n.params);case"saturation":return this.createSaturationFilter(n.params);case"hue":return this.createHueFilter(n.params);case"vintage":return this.createVintageFilter(n.params);case"grayscale":return this.createGrayscaleFilter();case"sepia":return this.createSepiaFilter();default:return null}}createBlurFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.BlurFilter;if(!i)return null;const r=new i;return r.blur=n.intensity||5,r.quality=n.quality||4,r}catch{return null}}createBrightnessFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.ColorMatrixFilter;if(!i)return null;const r=new i;return r.brightness(n.value||1,!1),r}catch{return null}}createContrastFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.ColorMatrixFilter;if(!i)return null;const r=new i;return r.contrast(n.value||1,!1),r}catch{return null}}createSaturationFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.ColorMatrixFilter;if(!i)return null;const r=new i;return r.saturate(n.value||1,!1),r}catch{return null}}createHueFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.ColorMatrixFilter;if(!i)return null;const r=new i;return r.hue(n.rotation||0,!1),r}catch{return null}}createVintageFilter(n){var t,o;try{const i=(o=(t=window.PIXI)==null?void 0:t.filters)==null?void 0:o.ColorMatrixFilter;if(!i)return null;const r=new i;return r.vintage(!1),n.intensity&&(r.contrast(1.2,!1),r.saturate(.8,!1)),r}catch{return null}}createGrayscaleFilter(){var n,t;try{const o=(t=(n=window.PIXI)==null?void 0:n.filters)==null?void 0:t.ColorMatrixFilter;if(!o)return null;const i=new o;return i.desaturate(),i}catch{return null}}createSepiaFilter(){var n,t;try{const o=(t=(n=window.PIXI)==null?void 0:n.filters)==null?void 0:t.ColorMatrixFilter;if(!o)return null;const i=new o;return i.sepia(!1),i}catch{return null}}async applyFilters(n){if(this.composition){this.clearFilters();for(const t of n){const o=this.mapMediablesToPIXI(t);o&&(this.pixiFilters.set(t.id,o),this.filterParams.set(t.id,t.params),this.filterTypes.set(t.id,t.filterId),this.filterIntensity.set(t.id,t.intensity),await this.applyToComposition(t.id,o))}}}async applyToComposition(n,t){try{this.composition.applyFilter&&await this.composition.applyFilter(n,t)}catch{}}updateFilterParams(n,t){var i;const o=this.pixiFilters.get(n);o&&(this.filterParams.set(n,t),"blur"in o&&(o.blur=t.intensity||o.blur),"brightness"in o&&o.brightness(t.value||1,!1),"contrast"in o&&o.contrast(t.value||1,!1),"saturate"in o&&o.saturate(t.value||1,!1),"hue"in o&&o.hue(t.rotation||0,!1),(i=this.composition)!=null&&i.update&&this.composition.update())}getFilterParams(n){return this.filterParams.get(n)||{}}removeFilter(n){var t;this.pixiFilters.delete(n),this.filterParams.delete(n),this.filterTypes.delete(n),this.filterIntensity.delete(n),(t=this.composition)!=null&&t.removeFilter&&this.composition.removeFilter(n)}clearFilters(){var n;this.pixiFilters.clear(),this.filterParams.clear(),this.filterTypes.clear(),this.filterIntensity.clear(),(n=this.composition)!=null&&n.clearFilters&&this.composition.clearFilters()}getActiveFilters(){return Array.from(this.pixiFilters.values())}exportFilterConfig(){const n=[];return this.pixiFilters.forEach((t,o)=>{const i=this.filterParams.get(o)??{},r=this.filterTypes.get(o)??"unknown",s=this.filterIntensity.get(o)??1;n.push({id:o,filterId:r,params:i,intensity:s})}),n}async importFilterConfig(n){await this.applyFilters(n)}destroy(){this.clearFilters(),this.composition=null}}const _g={class:"video-filter-preview"},Ng={class:"preview-title"},Tg={class:"filter-controls"},Mg={class:"control-input"},Bg=["value","onInput","min","max","step"],Ig={class:"param-value"},Fg={class:"preview-container"},$g={key:0,class:"filter-presets"},Rg=["onClick"],Dg={class:"preview-actions"},Ag=e.defineComponent({__name:"VideoFilterPreview",props:{filter:{},currentFrame:{},useVideoEngine:{type:Boolean,default:!1},composition:{}},emits:["update-params","apply"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(),r=e.ref(!1),s=e.ref({});let l,c,d=null,u=null;const p=e.computed(()=>{var x;return((x=t.filter)==null?void 0:x.paramRanges)||{}}),v=e.computed(()=>h.value.length>0),h=e.computed(()=>t.filter?{brightness:[{name:"Subtle",params:{value:.1}},{name:"Medium",params:{value:.3}},{name:"Strong",params:{value:.5}}],contrast:[{name:"Low",params:{value:.8}},{name:"Normal",params:{value:1}},{name:"High",params:{value:1.5}}],"gaussian-blur":[{name:"Subtle",params:{value:1}},{name:"Medium",params:{value:3}},{name:"Strong",params:{value:5}}]}[t.filter.id]||[]:[]);async function g(){var x;if(i.value){t.useVideoEngine&&t.composition&&(u=new Cg(t.composition));try{if(l=new Ye.Application,await l.init({width:i.value.clientWidth,height:i.value.clientHeight,background:0,resolution:window.devicePixelRatio||1,autoDensity:!0,canvas:i.value}),(x=t.currentFrame)!=null&&x.dataUrl){const T=await Ye.Assets.load(t.currentFrame.dataUrl);c=new Ye.Sprite(T);const H=Math.min(l.screen.width/c.texture.width,l.screen.height/c.texture.height);c.scale.set(H),c.anchor.set(.5),c.position.set(l.screen.width/2,l.screen.height/2),l.stage.addChild(c)}y()}catch{}}}function y(){if(!(!c||!t.filter))if(t.useVideoEngine&&u){const x={id:t.filter.id,filterId:t.filter.id,params:s.value,intensity:s.value.value??s.value.intensity??1};u.applyFilters([x]).then(()=>{}).catch(T=>{}),d&&(d.destroy(),d=null),d=V(t.filter.id,s.value),d&&(c.filters=r.value?null:[d])}else d&&(d.destroy(),d=null),d=V(t.filter.id,s.value),d&&(c.filters=r.value?null:[d])}function V(x,T){switch(x){case"brightness":{const H=new Ye.ColorMatrixFilter,E=1+(T.value??0);return typeof H.brightness=="function"&&H.brightness(E,!1),H}case"contrast":{const H=new Ye.ColorMatrixFilter,E=T.value??1;return typeof H.contrast=="function"&&H.contrast(E,!1),H}case"saturation":{const H=new Ye.ColorMatrixFilter,E=T.value??1;return typeof H.saturate=="function"&&H.saturate(E,!1),H}case"hue":{const H=new Ye.ColorMatrixFilter,E=T.value??0;return typeof H.hue=="function"&&H.hue(E,!1),H}case"gaussian-blur":{const H=T.value??5;return new Ye.BlurFilter({strength:H,quality:4})}case"sepia":{const H=new Ye.ColorMatrixFilter;return typeof H.sepia=="function"&&H.sepia(!1),H}case"grayscale":{const H=new Ye.ColorMatrixFilter;return typeof H.desaturate=="function"&&H.desaturate(),H}default:return null}}function B(x,T){const H=T.target,E=Number.parseFloat(H.value),R=Number.isFinite(E)?E:0;s.value={...s.value,[x]:R},t.useVideoEngine&&u&&t.filter&&u.updateFilterParams(t.filter.id,s.value),o("update-params",s.value),y()}function _(x){return x.charAt(0).toUpperCase()+x.slice(1).replace(/_/g," ")}function b(x,T){var E;const H=typeof x=="number"?x:Number(x);return Number.isFinite(H)?T==="hue"||T==="angle"?`${H}°`:T==="value"&&((E=t.filter)==null?void 0:E.id)==="brightness"?`${Math.round((1+H)*100)}%`:Number.isInteger(H)?H.toString():H.toFixed(2):"0"}function m(){var x;s.value=((x=t.filter)==null?void 0:x.defaultParams)||{},o("update-params",s.value),y()}function w(x){s.value={...x.params},o("update-params",s.value),y()}function I(x){return JSON.stringify(x.params)===JSON.stringify(s.value)}function N(){o("apply")}return e.watch(()=>t.filter,x=>{x&&(s.value={...x.defaultParams},y())}),e.watch(()=>t.currentFrame,async x=>{if(x!=null&&x.dataUrl&&c){const T=await Ye.Assets.load(x.dataUrl);c.texture=T}}),e.watch(r,y),e.onMounted(()=>{t.filter&&(s.value={...t.filter.defaultParams}),g()}),e.onUnmounted(()=>{l&&l.destroy(!0,{children:!0,texture:!0}),d&&d.destroy(),u&&u.destroy()}),(x,T)=>{var H;return e.openBlock(),e.createElementBlock("div",_g,[e.createElementVNode("h4",Ng,e.toDisplayString((H=x.filter)==null?void 0:H.name)+" Settings",1),e.createElementVNode("div",Tg,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value,(E,R)=>(e.openBlock(),e.createElementBlock("div",{key:R,class:"control-group"},[e.createElementVNode("label",null,e.toDisplayString(_(R)),1),e.createElementVNode("div",Mg,[e.createElementVNode("input",{type:"range",value:s.value[R],onInput:A=>B(R,A),min:E.min,max:E.max,step:E.step,class:"param-slider"},null,40,Bg),e.createElementVNode("span",Ig,e.toDisplayString(b(s.value[R],R)),1)])]))),128))]),e.createElementVNode("div",Fg,[e.createElementVNode("canvas",{ref_key:"previewCanvas",ref:i,class:"preview-canvas"},null,512),e.createElementVNode("button",{class:"compare-button",onMousedown:T[0]||(T[0]=E=>r.value=!0),onMouseup:T[1]||(T[1]=E=>r.value=!1),onTouchstart:T[2]||(T[2]=E=>r.value=!0),onTouchend:T[3]||(T[3]=E=>r.value=!1)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(fo)},null,8,["icon"]),T[4]||(T[4]=e.createTextVNode(" Hold to compare ",-1))],32)]),v.value?(e.openBlock(),e.createElementBlock("div",$g,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,E=>(e.openBlock(),e.createElementBlock("button",{key:E.name,class:e.normalizeClass(["preset-button",{active:I(E)}]),onClick:R=>w(E)},e.toDisplayString(E.name),11,Rg))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",Dg,[e.createElementVNode("button",{class:"action-button",onClick:m},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn)},null,8,["icon"]),T[5]||(T[5]=e.createTextVNode(" Reset ",-1))]),e.createElementVNode("button",{class:"action-button primary",onClick:N},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Ul)},null,8,["icon"]),T[6]||(T[6]=e.createTextVNode(" Apply Filter ",-1))])])])}}}),Ug=Te(Ag,[["__scopeId","data-v-3de3dd04"]]),Lg={class:"export-settings"},Og={class:"setting-group"},zg={class:"setting-group"},Pg={class:"estimated-size"},jg={key:0,class:"export-progress"},Wg={class:"progress-header"},Zg={class:"progress-percentage"},Xg={class:"progress-time"},Hg={class:"action-buttons"},Gg=["disabled"],Jg=["disabled"],Yg=["disabled"],Kg={class:"export-options"},qg=e.defineComponent({__name:"EditorControls",props:{canExport:{type:Boolean,default:!1},isExporting:{type:Boolean,default:!1},exportProgress:{default:0},isMobile:{type:Boolean,default:!1},duration:{default:0}},emits:["export","save-draft","reset","cancel-export"],setup(a,{emit:n}){const t=a,o=n,i=e.ref("1080p"),r=e.ref("mp4"),s=e.ref(!0),l=e.ref(!1),c=e.ref(0),d=e.ref(0),u=e.ref(0);let p=null;const v=e.computed(()=>{const m=({"360p":1,"480p":2.5,"720p":5,"1080p":8,"1440p":16,"2160p":35}[i.value]||8)*t.duration/8;return m<1e3?`~${Math.round(m)} MB`:`~${(m/1e3).toFixed(1)} GB`});function h(){t.isExporting?(o("cancel-export"),V()):g()}function g(){const _={quality:i.value,format:r.value,optimizeForWeb:s.value,includeWatermark:l.value};o("export",_),y()}function y(){c.value=Date.now(),d.value=0,p=window.setInterval(()=>{if(d.value=Math.floor((Date.now()-c.value)/1e3),t.exportProgress>0){const _=d.value/t.exportProgress*100;u.value=Math.max(0,_-d.value)}},1e3)}function V(){p&&(clearInterval(p),p=null)}function B(_){const b=Math.floor(_/60),m=Math.floor(_%60);return`${b}:${m.toString().padStart(2,"0")}`}return e.watch(()=>t.isExporting,_=>{_||V()}),e.onUnmounted(()=>{V()}),(_,b)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["editor-controls",{mobile:_.isMobile}])},[e.createElementVNode("div",Lg,[b[10]||(b[10]=e.createElementVNode("h3",{class:"section-title"},"Export Settings",-1)),e.createElementVNode("div",Og,[b[7]||(b[7]=e.createElementVNode("label",null,"Quality",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":b[0]||(b[0]=m=>i.value=m),class:"setting-select"},[...b[6]||(b[6]=[e.createStaticVNode('<option value="360p" data-v-e1338d5e>360p (Low)</option><option value="480p" data-v-e1338d5e>480p (SD)</option><option value="720p" data-v-e1338d5e>720p (HD)</option><option value="1080p" data-v-e1338d5e>1080p (Full HD)</option><option value="1440p" data-v-e1338d5e>1440p (2K)</option><option value="2160p" data-v-e1338d5e>2160p (4K)</option>',6)])],512),[[e.vModelSelect,i.value]])]),e.createElementVNode("div",zg,[b[9]||(b[9]=e.createElementVNode("label",null,"Format",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":b[1]||(b[1]=m=>r.value=m),class:"setting-select"},[...b[8]||(b[8]=[e.createElementVNode("option",{value:"mp4"},"MP4 (Most Compatible)",-1),e.createElementVNode("option",{value:"webm"},"WebM (Web Optimized)",-1),e.createElementVNode("option",{value:"mov"},"MOV (Apple)",-1)])],512),[[e.vModelSelect,r.value]])]),e.createElementVNode("div",Pg,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(pm)},null,8,["icon"]),e.createElementVNode("span",null,"Estimated size: "+e.toDisplayString(v.value),1)])]),_.isExporting?(e.openBlock(),e.createElementBlock("div",jg,[e.createElementVNode("div",Wg,[b[11]||(b[11]=e.createElementVNode("span",null,"Exporting...",-1)),e.createElementVNode("span",Zg,e.toDisplayString(_.exportProgress??0)+"%",1)]),e.createVNode(e.unref(D.IonProgressBar),{value:(_.exportProgress??0)/100},null,8,["value"]),e.createElementVNode("div",Xg,[e.createElementVNode("span",null,e.toDisplayString(B(d.value))+" elapsed",1),e.createElementVNode("span",null,e.toDisplayString(B(u.value))+" remaining",1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",Hg,[e.createElementVNode("button",{class:"control-button secondary",onClick:b[2]||(b[2]=m=>_.$emit("save-draft")),disabled:!_.canExport||_.isExporting},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(wr)},null,8,["icon"]),b[12]||(b[12]=e.createTextVNode(" Save Draft ",-1))],8,Gg),e.createElementVNode("button",{class:"control-button secondary",onClick:b[3]||(b[3]=m=>_.$emit("reset")),disabled:_.isExporting},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn)},null,8,["icon"]),b[13]||(b[13]=e.createTextVNode(" Reset ",-1))],8,Jg),e.createElementVNode("button",{class:"control-button primary",onClick:h,disabled:!_.canExport&&!_.isExporting,"data-testid":"video-export-button"},[e.createVNode(e.unref(D.IonIcon),{icon:_.isExporting?e.unref(Wn):e.unref(So)},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(_.isExporting?"Cancel":"Export Video"),1)],8,Yg)]),e.createElementVNode("div",Kg,[e.createVNode(e.unref(D.IonItem),{lines:"none"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonCheckbox),{modelValue:s.value,"onUpdate:modelValue":b[4]||(b[4]=m=>s.value=m)},null,8,["modelValue"]),e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...b[14]||(b[14]=[e.createTextVNode("Optimize for web streaming",-1)])]),_:1})]),_:1}),e.createVNode(e.unref(D.IonItem),{lines:"none"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonCheckbox),{modelValue:l.value,"onUpdate:modelValue":b[5]||(b[5]=m=>l.value=m)},null,8,["modelValue"]),e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...b[15]||(b[15]=[e.createTextVNode("Include watermark",-1)])]),_:1})]),_:1})])],2))}}),Qg=Te(qg,[["__scopeId","data-v-e1338d5e"]]),e1={class:"thumbnail-picker"},t1={class:"thumbnail-grid"},n1=["onClick"],o1=["src","alt"],a1={key:1,class:"thumbnail-placeholder"},i1={class:"thumbnail-time"},r1={class:"custom-selector"},s1={class:"time-input-group"},l1=["max"],c1={class:"time-value"},d1=["disabled"],u1={class:"picker-actions"},m1=["disabled"],p1=e.defineComponent({__name:"ThumbnailPicker",props:{mediaUuid:{},duration:{},currentTime:{default:0}},emits:["select","cancel"],setup(a,{emit:n}){const t=a,o=n,i=e.ref([]),r=e.ref(-1),s=e.ref(t.currentTime),l=e.ref(!1);function c(){const B=[];if(t.duration<=10)for(let b=0;b<Math.min(9,t.duration);b++)B.push(b);else{const b=t.duration/10;for(let m=1;m<=9;m++)B.push(b*m)}return B}async function d(B){try{const _=document.createElement("video");return _.crossOrigin="anonymous",_.src=await u(),new Promise(b=>{_.addEventListener("loadedmetadata",()=>{_.currentTime=B}),_.addEventListener("seeked",()=>{const m=document.createElement("canvas");m.width=_.videoWidth,m.height=_.videoHeight;const w=m.getContext("2d");w?(w.drawImage(_,0,0),b(m.toDataURL("image/jpeg",.8))):b(null),_.remove()}),_.addEventListener("error",()=>{b(null),_.remove()})})}catch{return null}}async function u(){try{return(await(await fetch(`/api/media/${t.mediaUuid}/playback`)).json()).playback_url}catch{return`/media/${t.mediaUuid}/video`}}async function p(){const B=c();i.value=B.map(b=>({time:b,loading:!0}));const _=3;for(let b=0;b<i.value.length;b+=_){const m=i.value.slice(b,b+_);await Promise.all(m.map(async w=>{const I=await d(w.time);I&&(w.dataUrl=I),w.loading=!1}))}}function v(B){r.value=B,s.value=i.value[B].time}function h(){r.value=-1}async function g(){l.value=!0;try{const B=await d(s.value);if(B){const _=i.value.findIndex(b=>Math.abs(b.time-s.value)<.1);_>=0?(i.value[_].dataUrl=B,r.value=_):(i.value.push({time:s.value,dataUrl:B}),r.value=i.value.length-1,i.value.sort((b,m)=>b.time-m.time),r.value=i.value.findIndex(b=>b.time===s.value))}}finally{l.value=!1}}function y(){const B=r.value>=0?i.value[r.value].time:s.value;o("select",B)}function V(B){const _=Math.floor(B/60),b=Math.floor(B%60),m=Math.floor(B%1*100);return _>0?`${_}:${b.toString().padStart(2,"0")}.${m.toString().padStart(2,"0")}`:`${b}.${m.toString().padStart(2,"0")}s`}return e.onMounted(()=>{p()}),(B,_)=>(e.openBlock(),e.createElementBlock("div",e1,[_[5]||(_[5]=e.createElementVNode("h4",{class:"picker-title"},"Select Video Thumbnail",-1)),e.createElementVNode("div",t1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,(b,m)=>(e.openBlock(),e.createElementBlock("div",{key:m,class:e.normalizeClass(["thumbnail-item",{selected:r.value===m}]),onClick:w=>v(m)},[b.dataUrl?(e.openBlock(),e.createElementBlock("img",{key:0,src:b.dataUrl,alt:`Frame at ${V(b.time)}`},null,8,o1)):(e.openBlock(),e.createElementBlock("div",a1,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"})])),e.createElementVNode("div",i1,e.toDisplayString(V(b.time)),1)],10,n1))),128))]),e.createElementVNode("div",r1,[_[3]||(_[3]=e.createElementVNode("label",null,"Custom time:",-1)),e.createElementVNode("div",s1,[e.withDirectives(e.createElementVNode("input",{type:"range","onUpdate:modelValue":_[0]||(_[0]=b=>s.value=b),min:0,max:B.duration,step:.1,onInput:h,class:"time-slider"},null,40,l1),[[e.vModelText,s.value]]),e.createElementVNode("span",c1,e.toDisplayString(V(s.value)),1)]),e.createElementVNode("button",{class:"capture-button",onClick:g,disabled:l.value},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(tm)},null,8,["icon"]),_[2]||(_[2]=e.createTextVNode(" Capture Frame ",-1))],8,d1)]),e.createElementVNode("div",u1,[e.createElementVNode("button",{class:"action-button",onClick:_[1]||(_[1]=b=>B.$emit("cancel"))}," Cancel "),e.createElementVNode("button",{class:"action-button primary",onClick:y,disabled:r.value===-1},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Ul)},null,8,["icon"]),_[4]||(_[4]=e.createTextVNode(" Set Thumbnail ",-1))],8,m1)])]))}}),f1=Te(p1,[["__scopeId","data-v-336c322c"]]),h1={class:"text-overlay-panel p-4 bg-white dark:bg-gray-800 rounded-lg shadow-lg"},v1={class:"mb-4"},g1={class:"space-y-2 max-h-64 overflow-y-auto"},y1={class:"flex items-center justify-between"},b1={class:"flex-1"},w1={class:"font-medium text-gray-900 dark:text-white"},k1={class:"text-sm text-gray-500 dark:text-gray-400"},x1={class:"flex items-center space-x-2"},E1=["onClick"],V1=["onClick"],S1={key:0,class:"text-center py-8 text-gray-500 dark:text-gray-400"},C1={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl p-6 w-full max-w-lg mx-4"},_1={class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"},N1={class:"space-y-4"},T1={class:"grid grid-cols-2 gap-4"},M1={class:"grid grid-cols-2 gap-4"},B1={key:0,class:"p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},I1={class:"grid grid-cols-2 gap-3"},F1={class:"flex justify-end space-x-3 mt-6"},$1=e.defineComponent({__name:"TextOverlayPanel",props:{overlays:{}},emits:["add-overlay","update-overlay","remove-overlay"],setup(a,{emit:n}){const t=n,o=e.ref(!1),i=e.ref(null),r=()=>({id:"",text:"",fontSize:24,color:"#ffffff",position:"center",startTime:0,duration:5,animationType:"",animationDuration:1,animationEasing:"linear"}),s=e.reactive(r());function l(v){Object.assign(s,v),i.value=v}function c(){o.value=!1,i.value=null,Object.assign(s,r())}function d(){const v={text:s.text,fontSize:s.fontSize,color:s.color,position:s.position,startTime:s.startTime,duration:s.duration};if(s.animationType&&(v.animation={type:s.animationType},s.animationDuration!==void 0&&(v.animation.duration=s.animationDuration),s.animationEasing&&(v.animation.easing=s.animationEasing),v.animation))switch(s.animationType){case"rotate":v.animation.rotation={from:0,to:360};break;case"scale":v.animation.scale={from:.5,to:1};break;case"slide":v.animation.translate={fromX:-100,toX:0,fromY:0,toY:0};break}i.value?t("update-overlay",i.value.id,v):t("add-overlay",v),c()}function u(v){confirm("Are you sure you want to remove this text overlay?")&&t("remove-overlay",v)}function p(v){const h=Math.floor(v/60),g=Math.floor(v%60);return`${h}:${g.toString().padStart(2,"0")}`}return(v,h)=>(e.openBlock(),e.createElementBlock("div",h1,[e.createElementVNode("div",v1,[h[11]||(h[11]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-2"}," Text Overlays ",-1)),e.createElementVNode("button",{onClick:h[0]||(h[0]=g=>o.value=!0),class:"w-full px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"},[...h[10]||(h[10]=[e.createElementVNode("svg",{class:"w-5 h-5 inline-block mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Add Text Overlay ",-1)])])]),e.createElementVNode("div",g1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(v.overlays,g=>(e.openBlock(),e.createElementBlock("div",{key:g.id,class:"p-3 border border-gray-200 dark:border-gray-700 rounded-lg hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors"},[e.createElementVNode("div",y1,[e.createElementVNode("div",b1,[e.createElementVNode("div",w1,e.toDisplayString(g.text.substring(0,30))+e.toDisplayString(g.text.length>30?"...":""),1),e.createElementVNode("div",k1,e.toDisplayString(p(g.startTime??0))+" - "+e.toDisplayString(p((g.startTime||0)+(g.duration||5))),1)]),e.createElementVNode("div",x1,[e.createElementVNode("button",{onClick:y=>l(g),class:"p-1 text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-900 rounded",title:"Edit"},[...h[12]||(h[12]=[e.createElementVNode("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"})],-1)])],8,E1),e.createElementVNode("button",{onClick:y=>u(g.id),class:"p-1 text-red-600 hover:bg-red-50 dark:hover:bg-red-900 rounded",title:"Remove"},[...h[13]||(h[13]=[e.createElementVNode("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])],8,V1)])])]))),128)),v.overlays.length===0?(e.openBlock(),e.createElementBlock("div",S1," No text overlays added yet ")):e.createCommentVNode("",!0)]),o.value||i.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",onClick:e.withModifiers(c,["self"])},[e.createElementVNode("div",C1,[e.createElementVNode("h4",_1,e.toDisplayString(i.value?"Edit":"Add")+" Text Overlay ",1),e.createElementVNode("div",N1,[e.createElementVNode("div",null,[h[14]||(h[14]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Text ",-1)),e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":h[1]||(h[1]=g=>s.text=g),rows:"3",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white",placeholder:"Enter your text..."},null,512),[[e.vModelText,s.text]])]),e.createElementVNode("div",T1,[e.createElementVNode("div",null,[h[15]||(h[15]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Font Size ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[2]||(h[2]=g=>s.fontSize=g),type:"number",min:"10",max:"200",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,s.fontSize,void 0,{number:!0}]])]),e.createElementVNode("div",null,[h[16]||(h[16]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Color ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[3]||(h[3]=g=>s.color=g),type:"color",class:"w-full h-10 border border-gray-300 dark:border-gray-600 rounded-lg cursor-pointer"},null,512),[[e.vModelText,s.color]])])]),e.createElementVNode("div",null,[h[18]||(h[18]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Position ",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[4]||(h[4]=g=>s.position=g),class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},[...h[17]||(h[17]=[e.createStaticVNode('<option value="center" data-v-f86e688c>Center</option><option value="top" data-v-f86e688c>Top</option><option value="bottom" data-v-f86e688c>Bottom</option><option value="left" data-v-f86e688c>Left</option><option value="right" data-v-f86e688c>Right</option>',5)])],512),[[e.vModelSelect,s.position]])]),e.createElementVNode("div",M1,[e.createElementVNode("div",null,[h[19]||(h[19]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Start Time (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[5]||(h[5]=g=>s.startTime=g),type:"number",min:"0",step:"0.1",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,s.startTime,void 0,{number:!0}]])]),e.createElementVNode("div",null,[h[20]||(h[20]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Duration (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[6]||(h[6]=g=>s.duration=g),type:"number",min:"0.1",step:"0.1",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,s.duration,void 0,{number:!0}]])])]),e.createElementVNode("div",null,[h[22]||(h[22]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Animation ",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[7]||(h[7]=g=>s.animationType=g),class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},[...h[21]||(h[21]=[e.createStaticVNode('<option value="" data-v-f86e688c>None</option><option value="fade-in" data-v-f86e688c>Fade In</option><option value="fade-out" data-v-f86e688c>Fade Out</option><option value="slide" data-v-f86e688c>Slide</option><option value="scale" data-v-f86e688c>Scale</option><option value="rotate" data-v-f86e688c>Rotate</option><option value="typewriter" data-v-f86e688c>Typewriter</option>',7)])],512),[[e.vModelSelect,s.animationType]])]),s.animationType?(e.openBlock(),e.createElementBlock("div",B1,[h[26]||(h[26]=e.createElementVNode("div",{class:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"}," Animation Settings ",-1)),e.createElementVNode("div",I1,[e.createElementVNode("div",null,[h[23]||(h[23]=e.createElementVNode("label",{class:"block text-xs text-gray-600 dark:text-gray-400 mb-1"}," Duration (s) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":h[8]||(h[8]=g=>s.animationDuration=g),type:"number",min:"0.1",step:"0.1",class:"w-full px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded focus:ring-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-white"},null,512),[[e.vModelText,s.animationDuration,void 0,{number:!0}]])]),e.createElementVNode("div",null,[h[25]||(h[25]=e.createElementVNode("label",{class:"block text-xs text-gray-600 dark:text-gray-400 mb-1"}," Easing ",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":h[9]||(h[9]=g=>s.animationEasing=g),class:"w-full px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded focus:ring-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-white"},[...h[24]||(h[24]=[e.createElementVNode("option",{value:"linear"},"Linear",-1),e.createElementVNode("option",{value:"easeIn"},"Ease In",-1),e.createElementVNode("option",{value:"easeOut"},"Ease Out",-1),e.createElementVNode("option",{value:"easeInOut"},"Ease In Out",-1)])],512),[[e.vModelSelect,s.animationEasing]])])])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",F1,[e.createElementVNode("button",{onClick:c,class:"px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors"}," Cancel "),e.createElementVNode("button",{onClick:d,class:"px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors"},e.toDisplayString(i.value?"Save":"Add"),1)])])])):e.createCommentVNode("",!0)]))}}),R1=Te($1,[["__scopeId","data-v-f86e688c"]]),Vo=class Vo{constructor(n){this.transitions=new Map,this.nextId=0,this.composition=n}async applyTransition(n,t,o){const i=`transition-${this.nextId++}`,r=Math.round(o.duration*30),s=o.easing||"linear",l=this.findTrackForClip(n),c=this.findTrackForClip(t);if(!l||!c)throw new Error("Clips must be added to composition before applying transitions");const d=n.stop.frames-r,u=n.stop.frames;switch(o.type){case"fade":await this.applyFadeTransition(n,t,d,u,s);break;case"dissolve":case"cross-fade":await this.applyCrossFadeTransition(n,t,d,u,s);break;case"wipe-left":case"wipe-right":case"wipe-up":case"wipe-down":await this.applyWipeTransition(n,t,o.type,d,u,s);break;case"slide-left":case"slide-right":case"slide-up":case"slide-down":await this.applySlideTransition(n,t,o.type,d,u,s);break;case"zoom-in":case"zoom-out":await this.applyZoomTransition(n,t,o.type,d,u,s);break;case"dip-to-black":case"dip-to-white":await this.applyDipTransition(n,t,o.type,d,u,s);break}return this.transitions.set(i,o),i}async applyFadeTransition(n,t,o,i,r){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Fade transitions require VideoClip instances");n.alpha=new Ve([o,i],[1,0],{easing:r}),t.alpha=new Ve([o,i],[0,1],{easing:r}),t.start=ve.fromFrames(o)}async applyCrossFadeTransition(n,t,o,i,r){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Cross-fade transitions require VideoClip instances");n.alpha=new Ve([o,i],[1,0],{easing:r}),t.alpha=new Ve([o,i],[0,1],{easing:r}),t.start=ve.fromFrames(o)}async applyWipeTransition(n,t,o,i,r,s){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Wipe transitions require VideoClip instances");const l={x:0,y:0},c={x:0,y:0};switch(o){case"wipe-left":l.x=new Ve([i,r],[0,-1920],{easing:s}),c.x=new Ve([i,r],[1920,0],{easing:s});break;case"wipe-right":l.x=new Ve([i,r],[0,1920],{easing:s}),c.x=new Ve([i,r],[-1920,0],{easing:s});break;case"wipe-up":l.y=new Ve([i,r],[0,-1080],{easing:s}),c.y=new Ve([i,r],[1080,0],{easing:s});break;case"wipe-down":l.y=new Ve([i,r],[0,1080],{easing:s}),c.y=new Ve([i,r],[-1080,0],{easing:s});break}n.translate=l,t.translate=c,t.start=ve.fromFrames(i)}async applySlideTransition(n,t,o,i,r,s){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Slide transitions require VideoClip instances");const l={x:0,y:0},c={x:0,y:0};switch(o){case"slide-left":l.x=new Ve([i,r],[0,-1920],{easing:s}),c.x=new Ve([i,r],[1920,0],{easing:s});break;case"slide-right":l.x=new Ve([i,r],[0,1920],{easing:s}),c.x=new Ve([i,r],[-1920,0],{easing:s});break;case"slide-up":l.y=new Ve([i,r],[0,-1080],{easing:s}),c.y=new Ve([i,r],[1080,0],{easing:s});break;case"slide-down":l.y=new Ve([i,r],[0,1080],{easing:s}),c.y=new Ve([i,r],[-1080,0],{easing:s});break}n.translate=l,t.translate=c,t.start=ve.fromFrames(i)}async applyZoomTransition(n,t,o,i,r,s){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Zoom transitions require VideoClip instances");o==="zoom-in"?(n.scale=new Ve([i,r],[1,2],{easing:s}),n.alpha=new Ve([i,r],[1,0],{easing:s}),t.scale=new Ve([i,r],[.5,1],{easing:s}),t.alpha=new Ve([i,r],[0,1],{easing:s})):(n.scale=new Ve([i,r],[1,.5],{easing:s}),n.alpha=new Ve([i,r],[1,0],{easing:s}),t.scale=new Ve([i,r],[2,1],{easing:s}),t.alpha=new Ve([i,r],[0,1],{easing:s})),t.start=ve.fromFrames(i)}async applyDipTransition(n,t,o,i,r,s){if(!this.isVideoClip(n)||!this.isVideoClip(t))throw new Error("Dip transitions require VideoClip instances");const l=Math.round((i+r)/2),c=o==="dip-to-black"?"#000000":"#ffffff",d=await ar.fromColor(c),u=new mv(d,{start:ve.fromFrames(i),stop:ve.fromFrames(r)});n.alpha=new Ve([i,l],[1,0],{easing:s}),u.alpha=new Ve([i,l,r],[0,1,0],{easing:s}),t.alpha=new Ve([l,r],[0,1],{easing:s}),await this.composition.add(u),t.start=ve.fromFrames(l)}findTrackForClip(n){for(const t of this.composition.tracks)if(t.clips.includes(n))return t}removeTransition(n){this.transitions.delete(n)}getTransitions(){return new Map(this.transitions)}static getAvailableTransitions(){return[...Vo.TRANSITIONS]}static previewTransition(n){return Vo.TRANSITIONS.find(t=>t.type===n)}isVideoClip(n){return"alpha"in n&&"scale"in n&&"translate"in n}};Vo.TRANSITIONS=[{type:"fade",name:"Fade",description:"Simple fade transition"},{type:"dissolve",name:"Dissolve",description:"Cross-dissolve between clips"},{type:"wipe-left",name:"Wipe Left",description:"Wipe from right to left"},{type:"wipe-right",name:"Wipe Right",description:"Wipe from left to right"},{type:"wipe-up",name:"Wipe Up",description:"Wipe from bottom to top"},{type:"wipe-down",name:"Wipe Down",description:"Wipe from top to bottom"},{type:"slide-left",name:"Slide Left",description:"Slide out to the left"},{type:"slide-right",name:"Slide Right",description:"Slide out to the right"},{type:"slide-up",name:"Slide Up",description:"Slide out upward"},{type:"slide-down",name:"Slide Down",description:"Slide out downward"},{type:"zoom-in",name:"Zoom In",description:"Zoom into the next clip"},{type:"zoom-out",name:"Zoom Out",description:"Zoom out to the next clip"},{type:"cross-fade",name:"Cross Fade",description:"Cross-fade between clips"},{type:"dip-to-black",name:"Dip to Black",description:"Fade through black"},{type:"dip-to-white",name:"Dip to White",description:"Fade through white"}];let Ta=Vo;const D1={class:"transition-selector p-4 bg-white dark:bg-gray-800 rounded-lg shadow-lg"},A1={class:"grid grid-cols-3 gap-3 max-h-96 overflow-y-auto"},U1=["onClick"],L1={class:"w-full h-16 bg-gradient-to-r from-gray-300 to-gray-400 dark:from-gray-600 dark:to-gray-700 rounded mb-2 flex items-center justify-center"},O1={key:0,class:"w-8 h-8 text-white",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},z1={key:0,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},P1={key:1,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M14 5l7 7m0 0l-7 7m7-7H3"},j1={key:2,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"},W1={key:3,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"},Z1={key:4,"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 5a1 1 0 011-1h14a1 1 0 011 1v14a1 1 0 01-1 1H5a1 1 0 01-1-1V5z"},X1={class:"text-sm font-medium text-gray-900 dark:text-white text-center"},H1={key:0,class:"mt-4 p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},G1={class:"space-y-3"},J1={class:"flex items-center space-x-2"},Y1=["disabled"],K1=["disabled"],q1={key:1,class:"mt-4"},Q1={class:"space-y-2 max-h-32 overflow-y-auto"},ey={class:"text-sm text-gray-700 dark:text-gray-300"},ty=["onClick"],ny=e.defineComponent({__name:"TransitionSelector",props:{selectedClips:{},appliedTransitions:{}},emits:["apply-transition","remove-transition","preview-transition"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(Ta.getAvailableTransitions()),r=e.ref(null),s=e.ref(.5),l=e.ref("linear"),c=e.computed(()=>r.value&&t.selectedClips&&t.selectedClips.length>=2);function d(g){r.value=g}function u(){if(!r.value||!c.value)return;const g={type:r.value.type,duration:s.value,easing:l.value};o("apply-transition",g),r.value=null}function p(){if(!r.value)return;const g={type:r.value.type,duration:s.value,easing:l.value};o("preview-transition",g)}function v(g){o("remove-transition",g)}function h(g){return["fade","wipe","slide","zoom"].some(y=>g.includes(y))}return(g,y)=>(e.openBlock(),e.createElementBlock("div",D1,[y[9]||(y[9]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"}," Transitions ",-1)),e.createElementVNode("div",A1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(i.value,V=>{var B;return e.openBlock(),e.createElementBlock("div",{key:V.type,onClick:_=>d(V),class:e.normalizeClass(["transition-item cursor-pointer rounded-lg p-3 border-2 transition-all",((B=r.value)==null?void 0:B.type)===V.type?"border-blue-500 bg-blue-50 dark:bg-blue-900":"border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600"])},[e.createElementVNode("div",L1,[h(V.type)?(e.openBlock(),e.createElementBlock("svg",O1,[V.type.includes("fade")?(e.openBlock(),e.createElementBlock("path",z1)):V.type.includes("wipe")?(e.openBlock(),e.createElementBlock("path",P1)):V.type.includes("slide")?(e.openBlock(),e.createElementBlock("path",j1)):V.type.includes("zoom")?(e.openBlock(),e.createElementBlock("path",W1)):(e.openBlock(),e.createElementBlock("path",Z1))])):e.createCommentVNode("",!0)]),e.createElementVNode("div",X1,e.toDisplayString(V.name),1)],10,U1)}),128))]),r.value?(e.openBlock(),e.createElementBlock("div",H1,[y[6]||(y[6]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-3"}," Transition Settings ",-1)),e.createElementVNode("div",G1,[e.createElementVNode("div",null,[y[3]||(y[3]=e.createElementVNode("label",{class:"block text-xs text-gray-600 dark:text-gray-400 mb-1"}," Duration (seconds) ",-1)),e.createElementVNode("div",J1,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[0]||(y[0]=V=>s.value=V),type:"range",min:"0.1",max:"3",step:"0.1",class:"flex-1"},null,512),[[e.vModelText,s.value,void 0,{number:!0}]]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":y[1]||(y[1]=V=>s.value=V),type:"number",min:"0.1",max:"3",step:"0.1",class:"w-16 px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded focus:ring-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-white"},null,512),[[e.vModelText,s.value,void 0,{number:!0}]])])]),e.createElementVNode("div",null,[y[5]||(y[5]=e.createElementVNode("label",{class:"block text-xs text-gray-600 dark:text-gray-400 mb-1"}," Easing ",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":y[2]||(y[2]=V=>l.value=V),class:"w-full px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded focus:ring-2 focus:ring-blue-500 dark:bg-gray-600 dark:text-white"},[...y[4]||(y[4]=[e.createElementVNode("option",{value:"linear"},"Linear",-1),e.createElementVNode("option",{value:"easeIn"},"Ease In",-1),e.createElementVNode("option",{value:"easeOut"},"Ease Out",-1),e.createElementVNode("option",{value:"easeInOut"},"Ease In Out",-1)])],512),[[e.vModelSelect,l.value]])]),e.createElementVNode("button",{onClick:u,disabled:!c.value,class:e.normalizeClass(["w-full px-3 py-2 rounded-lg font-medium transition-colors",c.value?"bg-blue-600 text-white hover:bg-blue-700":"bg-gray-300 dark:bg-gray-600 text-gray-500 dark:text-gray-400 cursor-not-allowed"])}," Apply Transition ",10,Y1),e.createElementVNode("button",{onClick:p,disabled:!r.value,class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg font-medium text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-600 transition-colors"}," Preview ",8,K1)])])):e.createCommentVNode("",!0),g.appliedTransitions.length>0?(e.openBlock(),e.createElementBlock("div",q1,[y[8]||(y[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 dark:text-gray-300 mb-2"}," Applied Transitions ",-1)),e.createElementVNode("div",Q1,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(g.appliedTransitions,(V,B)=>(e.openBlock(),e.createElementBlock("div",{key:B,class:"flex items-center justify-between p-2 bg-gray-50 dark:bg-gray-700 rounded"},[e.createElementVNode("div",ey,e.toDisplayString(V.name)+" ("+e.toDisplayString(V.duration)+"s) ",1),e.createElementVNode("button",{onClick:_=>v(B),class:"p-1 text-red-600 hover:bg-red-50 dark:hover:bg-red-900 rounded"},[...y[7]||(y[7]=[e.createElementVNode("svg",{class:"w-4 h-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})],-1)])],8,ty)]))),128))])])):e.createCommentVNode("",!0),y[10]||(y[10]=e.createElementVNode("div",{class:"mt-4 text-xs text-gray-500 dark:text-gray-400"},[e.createElementVNode("p",null,"Select clips in the timeline, then choose a transition to apply between them.")],-1))]))}}),oy=Te(ny,[["__scopeId","data-v-5ef1b100"]]),ay={class:"audio-track-manager p-4 bg-white dark:bg-gray-800 rounded-lg shadow-lg"},iy={class:"mb-4"},ry={class:"mb-4 p-3 bg-gray-50 dark:bg-gray-700 rounded-lg"},sy={class:"flex items-center justify-between mb-2"},ly={class:"text-sm text-gray-600 dark:text-gray-400"},cy={class:"flex items-center space-x-2"},dy={class:"space-y-3 max-h-64 overflow-y-auto"},uy={class:"flex items-center justify-between mb-2"},my={class:"font-medium text-gray-900 dark:text-white"},py={class:"flex items-center space-x-2"},fy=["onClick","title"],hy={key:0,class:"w-5 h-5",fill:"currentColor",viewBox:"0 0 20 20"},vy={key:1,class:"w-5 h-5",fill:"currentColor",viewBox:"0 0 20 20"},gy=["onClick"],yy=["onClick"],by={class:"flex items-center space-x-2"},wy={class:"text-xs text-gray-500 dark:text-gray-400 w-10"},ky=["value","onInput","disabled"],xy={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Ey={key:0,class:"ml-2"},Vy={key:1,class:"ml-2"},Sy={key:0,class:"text-center py-8 text-gray-500 dark:text-gray-400"},Cy={class:"bg-white dark:bg-gray-800 rounded-lg shadow-xl p-6 w-full max-w-lg mx-4"},_y={class:"text-lg font-semibold text-gray-900 dark:text-white mb-4"},Ny={class:"space-y-4"},Ty={class:"space-y-2"},My={class:"flex items-center"},By={class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"},Iy={class:"grid grid-cols-2 gap-4"},Fy={class:"grid grid-cols-2 gap-4"},$y={class:"flex items-center"},Ry={class:"flex justify-end space-x-3 mt-6"},Dy=["disabled"],Ay=e.defineComponent({__name:"AudioTrackManager",props:{audioLayers:{},masterVolume:{}},emits:["add-track","update-track","remove-track","update-volume","toggle-mute","update-master-volume"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(!1),r=e.ref(null),s=e.ref(t.masterVolume),l=()=>({id:"",source:"",sourceUrl:"",name:"Background Music",volume:.7,startTime:0,fadeIn:0,fadeOut:0,loop:!1}),c=e.reactive(l()),d=e.computed(()=>c.sourceUrl||c.sourceFile);function u(b){const m=b.target;m.files&&m.files[0]&&(c.sourceFile=m.files[0],c.name=c.name||m.files[0].name.replace(/\.[^/.]+$/,""))}function p(b){Object.assign(c,b),r.value=b}function v(){i.value=!1,r.value=null,Object.assign(c,l())}function h(){if(!d.value)return;const b={source:c.sourceFile??c.sourceUrl??"",name:c.name,volume:c.volume,startTime:c.startTime,loop:c.loop};c.duration!==void 0&&(b.duration=c.duration),c.fadeIn>0&&(b.fadeIn=c.fadeIn),c.fadeOut>0&&(b.fadeOut=c.fadeOut),r.value?o("update-track",r.value.id,b):o("add-track",b),v()}function g(b){confirm("Are you sure you want to remove this audio track?")&&o("remove-track",b)}function y(b,m){const w=m.target,I=parseFloat(w.value);o("update-volume",b.id,I)}function V(b){o("toggle-mute",b.id,!b.muted)}function B(){o("update-master-volume",s.value)}function _(b){const m=Math.floor(b/60),w=Math.floor(b%60);return`${m}:${w.toString().padStart(2,"0")}`}return(b,m)=>(e.openBlock(),e.createElementBlock("div",ay,[e.createElementVNode("div",iy,[m[11]||(m[11]=e.createElementVNode("h3",{class:"text-lg font-semibold text-gray-900 dark:text-white mb-2"}," Audio Tracks ",-1)),e.createElementVNode("button",{onClick:m[0]||(m[0]=w=>i.value=!0),class:"w-full px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700 transition-colors"},[...m[10]||(m[10]=[e.createElementVNode("svg",{class:"w-5 h-5 inline-block mr-2",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),e.createTextVNode(" Add Audio Track ",-1)])])]),e.createElementVNode("div",ry,[e.createElementVNode("div",sy,[m[12]||(m[12]=e.createElementVNode("label",{class:"text-sm font-medium text-gray-700 dark:text-gray-300"}," Master Volume ",-1)),e.createElementVNode("span",ly,e.toDisplayString(Math.round(s.value*100))+"% ",1)]),e.createElementVNode("div",cy,[m[13]||(m[13]=e.createElementVNode("svg",{class:"w-4 h-4 text-gray-500",fill:"currentColor",viewBox:"0 0 20 20"},[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.707.707L4.586 13H2a1 1 0 01-1-1V8a1 1 0 011-1h2.586l3.707-3.707a1 1 0 011.09-.217zM12.293 7.293a1 1 0 011.414 0L15 8.586l1.293-1.293a1 1 0 111.414 1.414L16.414 10l1.293 1.293a1 1 0 01-1.414 1.414L15 11.414l-1.293 1.293a1 1 0 01-1.414-1.414L13.586 10l-1.293-1.293a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[1]||(m[1]=w=>s.value=w),onInput:B,type:"range",min:"0",max:"1",step:"0.01",class:"flex-1"},null,544),[[e.vModelText,s.value,void 0,{number:!0}]]),m[14]||(m[14]=e.createElementVNode("svg",{class:"w-4 h-4 text-gray-500",fill:"currentColor",viewBox:"0 0 20 20"},[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.707.707L4.586 13H2a1 1 0 01-1-1V8a1 1 0 011-1h2.586l3.707-3.707a1 1 0 011.09-.217zM14.657 2.929a1 1 0 011.414 0l3 3a1 1 0 010 1.414l-3 3a1 1 0 01-1.414-1.414L16.586 7l-1.929-1.929a1 1 0 010-1.414z","clip-rule":"evenodd"})],-1))])]),e.createElementVNode("div",dy,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.audioLayers,w=>(e.openBlock(),e.createElementBlock("div",{key:w.id,class:"p-3 border border-gray-200 dark:border-gray-700 rounded-lg"},[e.createElementVNode("div",uy,[e.createElementVNode("div",my,e.toDisplayString(w.name),1),e.createElementVNode("div",py,[e.createElementVNode("button",{onClick:I=>V(w),class:e.normalizeClass(["p-1 rounded",w.muted?"text-red-600 bg-red-50 dark:bg-red-900":"text-gray-600 hover:bg-gray-100 dark:hover:bg-gray-700"]),title:w.muted?"Unmute":"Mute"},[w.muted?(e.openBlock(),e.createElementBlock("svg",vy,[...m[16]||(m[16]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.707.707L4.586 13H2a1 1 0 01-1-1V8a1 1 0 011-1h2.586l3.707-3.707a1 1 0 011.09-.217zM12.293 7.293a1 1 0 011.414 0L15 8.586l1.293-1.293a1 1 0 111.414 1.414L16.414 10l1.293 1.293a1 1 0 01-1.414 1.414L15 11.414l-1.293 1.293a1 1 0 01-1.414-1.414L13.586 10l-1.293-1.293a1 1 0 010-1.414z","clip-rule":"evenodd"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",hy,[...m[15]||(m[15]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.707.707L4.586 13H2a1 1 0 01-1-1V8a1 1 0 011-1h2.586l3.707-3.707a1 1 0 011.09-.217zM14.657 2.929a1 1 0 011.414 0l3 3a1 1 0 010 1.414l-3 3a1 1 0 01-1.414-1.414L16.586 7l-1.929-1.929a1 1 0 010-1.414z","clip-rule":"evenodd"},null,-1)])]))],10,fy),e.createElementVNode("button",{onClick:I=>p(w),class:"p-1 text-blue-600 hover:bg-blue-50 dark:hover:bg-blue-900 rounded",title:"Settings"},[...m[17]||(m[17]=[e.createElementVNode("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"})],-1)])],8,gy),e.createElementVNode("button",{onClick:I=>g(w.id),class:"p-1 text-red-600 hover:bg-red-50 dark:hover:bg-red-900 rounded",title:"Remove"},[...m[18]||(m[18]=[e.createElementVNode("svg",{class:"w-5 h-5",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"})],-1)])],8,yy)])]),e.createElementVNode("div",by,[e.createElementVNode("span",wy,e.toDisplayString(Math.round((w.volume||1)*100))+"% ",1),e.createElementVNode("input",{value:w.volume||1,onInput:I=>y(w,I),type:"range",min:"0",max:"1",step:"0.01",class:"flex-1",disabled:w.muted},null,40,ky)]),e.createElementVNode("div",xy,[e.createTextVNode(e.toDisplayString(_(w.startTime||0))+" - "+e.toDisplayString(_((w.startTime||0)+(w.duration||0)))+" ",1),w.fadeIn?(e.openBlock(),e.createElementBlock("span",Ey,"Fade In: "+e.toDisplayString(w.fadeIn)+"s",1)):e.createCommentVNode("",!0),w.fadeOut?(e.openBlock(),e.createElementBlock("span",Vy,"Fade Out: "+e.toDisplayString(w.fadeOut)+"s",1)):e.createCommentVNode("",!0)])]))),128)),b.audioLayers.length===0?(e.openBlock(),e.createElementBlock("div",Sy," No audio tracks added yet ")):e.createCommentVNode("",!0)]),i.value||r.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",onClick:e.withModifiers(v,["self"])},[e.createElementVNode("div",Cy,[e.createElementVNode("h4",_y,e.toDisplayString(r.value?"Edit":"Add")+" Audio Track ",1),e.createElementVNode("div",Ny,[e.createElementVNode("div",null,[m[20]||(m[20]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Audio Source ",-1)),e.createElementVNode("div",Ty,[e.createElementVNode("input",{type:"file",accept:"audio/*",onChange:u,class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,32),e.createElementVNode("div",My,[m[19]||(m[19]=e.createElementVNode("span",{class:"text-sm text-gray-500 dark:text-gray-400 mr-2"},"or URL:",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[2]||(m[2]=w=>c.sourceUrl=w),type:"url",placeholder:"https://example.com/audio.mp3",class:"flex-1 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.sourceUrl]])])])]),e.createElementVNode("div",null,[m[21]||(m[21]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Track Name ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[3]||(m[3]=w=>c.name=w),type:"text",placeholder:"Background Music",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.name]])]),e.createElementVNode("div",null,[e.createElementVNode("label",By," Volume: "+e.toDisplayString(Math.round(c.volume*100))+"% ",1),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[4]||(m[4]=w=>c.volume=w),type:"range",min:"0",max:"1",step:"0.01",class:"w-full"},null,512),[[e.vModelText,c.volume,void 0,{number:!0}]])]),e.createElementVNode("div",Iy,[e.createElementVNode("div",null,[m[22]||(m[22]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Start Time (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[5]||(m[5]=w=>c.startTime=w),type:"number",min:"0",step:"0.1",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.startTime,void 0,{number:!0}]])]),e.createElementVNode("div",null,[m[23]||(m[23]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Duration (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[6]||(m[6]=w=>c.duration=w),type:"number",min:"0.1",step:"0.1",placeholder:"Auto",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.duration,void 0,{number:!0}]])])]),e.createElementVNode("div",Fy,[e.createElementVNode("div",null,[m[24]||(m[24]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Fade In (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[7]||(m[7]=w=>c.fadeIn=w),type:"number",min:"0",max:"10",step:"0.1",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.fadeIn,void 0,{number:!0}]])]),e.createElementVNode("div",null,[m[25]||(m[25]=e.createElementVNode("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"}," Fade Out (seconds) ",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[8]||(m[8]=w=>c.fadeOut=w),type:"number",min:"0",max:"10",step:"0.1",class:"w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg focus:ring-2 focus:ring-blue-500 dark:bg-gray-700 dark:text-white"},null,512),[[e.vModelText,c.fadeOut,void 0,{number:!0}]])])]),e.createElementVNode("div",$y,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":m[9]||(m[9]=w=>c.loop=w),type:"checkbox",id:"loop-checkbox",class:"mr-2 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"},null,512),[[e.vModelCheckbox,c.loop]]),m[26]||(m[26]=e.createElementVNode("label",{for:"loop-checkbox",class:"text-sm text-gray-700 dark:text-gray-300"}," Loop audio track ",-1))])]),e.createElementVNode("div",Ry,[e.createElementVNode("button",{onClick:v,class:"px-4 py-2 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 rounded-lg transition-colors"}," Cancel "),e.createElementVNode("button",{onClick:h,disabled:!d.value,class:e.normalizeClass(["px-4 py-2 rounded-lg transition-colors",d.value?"bg-green-600 text-white hover:bg-green-700":"bg-gray-300 dark:bg-gray-600 text-gray-500 dark:text-gray-400 cursor-not-allowed"])},e.toDisplayString(r.value?"Save":"Add"),11,Dy)])])])):e.createCommentVNode("",!0)]))}}),Uy=Te(Ay,[["__scopeId","data-v-593719ac"]]);function Ue(a,n={},...t){const o=document.createElement(a);for(const[i,r]of Object.entries(n))r!=null&&(i==="className"?o.className=r:i==="style"&&typeof r=="object"?Object.assign(o.style,r):i.startsWith("on")&&typeof r=="function"?o.addEventListener(i.slice(2).toLowerCase(),r):i==="dataset"&&typeof r=="object"?Object.assign(o.dataset,r):o.setAttribute(i,r));for(const i of t)typeof i=="string"?o.appendChild(document.createTextNode(i)):i instanceof HTMLElement&&o.appendChild(i);return o}function ll(a){return typeof a=="boolean"?a?"On":"Off":typeof a=="number"?Number.isInteger(a)?String(a):a.toFixed(2):String(a??"")}let cl=!1;function Ly(){if(cl)return;cl=!0;const a=`
34
+ /* ── MobileVideoFilterPanel — global (not scoped) ── */
35
+ .mvfp {
36
+ display: flex;
37
+ flex-direction: column;
38
+ width: 100%;
39
+ position: relative;
40
+ background: var(--app-surface, var(--ion-background-color, #1a1a1a));
41
+ }
42
+
43
+ /* ── Horizontal scroll rows ── */
44
+ .mvfp-row {
45
+ display: flex;
46
+ gap: 8px;
47
+ padding: 8px 12px;
48
+ overflow-x: auto;
49
+ -webkit-overflow-scrolling: touch;
50
+ scrollbar-width: none;
51
+ flex-shrink: 0;
52
+ }
53
+ .mvfp-row::-webkit-scrollbar { display: none; }
54
+
55
+ /* ── Category chips ── */
56
+ .mvfp-cat {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 6px;
60
+ min-height: 36px;
61
+ padding: 8px 14px;
62
+ border-radius: 20px;
63
+ border: 1.5px solid var(--app-border, var(--ion-color-step-300, #444));
64
+ background: var(--app-surface-variant, var(--ion-color-step-50, #222));
65
+ color: var(--app-text, var(--ion-text-color, #eee));
66
+ font-size: 13px;
67
+ font-weight: 500;
68
+ white-space: nowrap;
69
+ cursor: pointer;
70
+ flex-shrink: 0;
71
+ transition: all 0.15s;
72
+ -webkit-tap-highlight-color: transparent;
73
+ }
74
+ .mvfp-cat.active {
75
+ background: var(--app-accent, var(--ion-color-primary, #3880ff));
76
+ border-color: var(--app-accent, var(--ion-color-primary, #3880ff));
77
+ color: #fff;
78
+ }
79
+
80
+ /* ── Filter cards ── */
81
+ .mvfp-filter {
82
+ display: flex;
83
+ flex-direction: column;
84
+ align-items: center;
85
+ justify-content: center;
86
+ min-width: 72px;
87
+ max-width: 100px;
88
+ min-height: 48px;
89
+ padding: 10px 12px;
90
+ border-radius: 12px;
91
+ border: 2px solid var(--app-border, var(--ion-color-step-300, #444));
92
+ background: var(--app-surface-variant, var(--ion-color-step-50, #222));
93
+ color: var(--app-text, var(--ion-text-color, #eee));
94
+ font-size: 12px;
95
+ text-align: center;
96
+ line-height: 1.3;
97
+ cursor: pointer;
98
+ flex-shrink: 0;
99
+ position: relative;
100
+ transition: all 0.15s;
101
+ -webkit-tap-highlight-color: transparent;
102
+ }
103
+ .mvfp-filter.active {
104
+ border-color: var(--app-success, var(--ion-color-success, #2dd36f));
105
+ }
106
+ .mvfp-filter.selected {
107
+ background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.15);
108
+ border-color: var(--app-accent, var(--ion-color-primary, #3880ff));
109
+ }
110
+ .mvfp-filter .mvfp-check {
111
+ position: absolute;
112
+ top: -5px;
113
+ right: -5px;
114
+ width: 18px;
115
+ height: 18px;
116
+ border-radius: 50%;
117
+ background: var(--app-success, var(--ion-color-success, #2dd36f));
118
+ color: #fff;
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ font-size: 11px;
123
+ cursor: pointer;
124
+ }
125
+
126
+ /* ── Active filter chips ── */
127
+ .mvfp-active-row {
128
+ display: flex;
129
+ gap: 6px;
130
+ padding: 6px 12px;
131
+ overflow-x: auto;
132
+ -webkit-overflow-scrolling: touch;
133
+ scrollbar-width: none;
134
+ flex-shrink: 0;
135
+ }
136
+ .mvfp-active-row::-webkit-scrollbar { display: none; }
137
+
138
+ .mvfp-achip {
139
+ display: flex;
140
+ align-items: center;
141
+ gap: 6px;
142
+ padding: 6px 10px 6px 12px;
143
+ background: rgba(var(--ion-color-primary-rgb, 56, 128, 255), 0.12);
144
+ border: 1px solid var(--app-accent, var(--ion-color-primary, #3880ff));
145
+ border-radius: 20px;
146
+ white-space: nowrap;
147
+ flex-shrink: 0;
148
+ font-size: 12px;
149
+ color: var(--app-text, var(--ion-text-color, #eee));
150
+ cursor: pointer;
151
+ transition: all 0.15s;
152
+ }
153
+ .mvfp-achip.selected {
154
+ background: var(--app-accent, var(--ion-color-primary, #3880ff));
155
+ color: #fff;
156
+ }
157
+ .mvfp-achip-x {
158
+ width: 20px;
159
+ height: 20px;
160
+ border-radius: 50%;
161
+ border: 1.5px solid currentColor;
162
+ background: transparent;
163
+ color: inherit;
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ cursor: pointer;
168
+ padding: 0;
169
+ opacity: 0.7;
170
+ flex-shrink: 0;
171
+ }
172
+ .mvfp-achip-x:hover, .mvfp-achip-x:active {
173
+ background: var(--ion-color-danger, #ef4444);
174
+ border-color: var(--ion-color-danger, #ef4444);
175
+ color: #fff;
176
+ opacity: 1;
177
+ }
178
+
179
+ .mvfp-placeholder {
180
+ font-size: 12px;
181
+ color: var(--app-text-secondary, var(--ion-color-medium, #888));
182
+ padding: 6px 12px;
183
+ }
184
+
185
+ /* ── Drawer ── */
186
+ .mvfp-drawer {
187
+ position: absolute;
188
+ bottom: 0;
189
+ left: 0;
190
+ right: 0;
191
+ background: var(--app-surface, var(--ion-background-color, #1a1a1a));
192
+ border-top: 1px solid var(--app-border, var(--ion-color-step-300, #444));
193
+ transform: translateY(100%);
194
+ z-index: 20;
195
+ display: flex;
196
+ flex-direction: column;
197
+ overflow: hidden;
198
+ border-radius: 14px 14px 0 0;
199
+ }
200
+ .mvfp-drawer-hdr {
201
+ display: flex;
202
+ justify-content: space-between;
203
+ align-items: center;
204
+ padding: 8px 14px;
205
+ border-bottom: 1px solid var(--app-border, var(--ion-color-step-200, #333));
206
+ flex-shrink: 0;
207
+ }
208
+ .mvfp-drawer-title {
209
+ font-weight: 600;
210
+ font-size: 14px;
211
+ color: var(--app-text, var(--ion-text-color, #eee));
212
+ }
213
+ .mvfp-drawer-actions {
214
+ display: flex;
215
+ align-items: center;
216
+ gap: 10px;
217
+ }
218
+ .mvfp-drawer-btn {
219
+ background: none;
220
+ border: none;
221
+ font-size: 13px;
222
+ font-weight: 500;
223
+ cursor: pointer;
224
+ padding: 4px 6px;
225
+ color: var(--app-accent, var(--ion-color-primary, #3880ff));
226
+ }
227
+ .mvfp-drawer-btn.danger {
228
+ color: var(--ion-color-danger, #ef4444);
229
+ }
230
+ .mvfp-drawer-close {
231
+ width: 28px;
232
+ height: 28px;
233
+ border: none;
234
+ border-radius: 50%;
235
+ background: var(--app-surface-sunken, var(--ion-color-step-100, #2a2a2a));
236
+ color: var(--app-text-secondary, var(--ion-color-medium, #888));
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: center;
240
+ cursor: pointer;
241
+ padding: 0;
242
+ }
243
+ .mvfp-drawer-body {
244
+ flex: 1 1 auto;
245
+ overflow-y: auto;
246
+ -webkit-overflow-scrolling: touch;
247
+ padding: 10px 14px 16px;
248
+ }
249
+
250
+ /* ── Drawer slider controls ── */
251
+ .mvfp-ctl {
252
+ margin-bottom: 12px;
253
+ }
254
+ .mvfp-ctl-label {
255
+ display: block;
256
+ font-size: 11px;
257
+ font-weight: 600;
258
+ color: var(--app-text-secondary, var(--ion-color-medium, #888));
259
+ text-transform: uppercase;
260
+ letter-spacing: 0.5px;
261
+ margin-bottom: 4px;
262
+ }
263
+ .mvfp-slider-row {
264
+ display: flex;
265
+ align-items: center;
266
+ gap: 10px;
267
+ }
268
+ .mvfp-range {
269
+ flex: 1;
270
+ height: 6px;
271
+ -webkit-appearance: none;
272
+ appearance: none;
273
+ background: var(--app-border, var(--ion-color-step-200, #333));
274
+ border-radius: 3px;
275
+ outline: none;
276
+ }
277
+ .mvfp-range::-webkit-slider-thumb {
278
+ -webkit-appearance: none;
279
+ width: 22px;
280
+ height: 22px;
281
+ border-radius: 50%;
282
+ background: var(--app-accent, var(--ion-color-primary, #3880ff));
283
+ cursor: pointer;
284
+ border: 2px solid #fff;
285
+ box-shadow: 0 1px 4px rgba(0,0,0,0.3);
286
+ }
287
+ .mvfp-range-val {
288
+ min-width: 3rem;
289
+ text-align: right;
290
+ font-size: 12px;
291
+ font-weight: 500;
292
+ color: var(--app-text-secondary, var(--ion-color-medium, #888));
293
+ }
294
+ .mvfp-toggle-row {
295
+ display: flex;
296
+ align-items: center;
297
+ justify-content: space-between;
298
+ gap: 10px;
299
+ }
300
+ .mvfp-color-row {
301
+ display: flex;
302
+ align-items: center;
303
+ justify-content: space-between;
304
+ gap: 10px;
305
+ }
306
+ .mvfp-color-input {
307
+ width: 36px;
308
+ height: 36px;
309
+ border: 1px solid var(--app-border, var(--ion-color-step-300, #444));
310
+ border-radius: 8px;
311
+ padding: 2px;
312
+ cursor: pointer;
313
+ background: transparent;
314
+ }
315
+ .mvfp-select-row {
316
+ display: flex;
317
+ align-items: center;
318
+ justify-content: space-between;
319
+ gap: 10px;
320
+ }
321
+ .mvfp-select {
322
+ padding: 6px 10px;
323
+ border: 1px solid var(--app-border, var(--ion-color-step-300, #444));
324
+ border-radius: 8px;
325
+ background: var(--app-surface, var(--ion-background-color, #1a1a1a));
326
+ color: var(--app-text, var(--ion-text-color, #eee));
327
+ font-size: 13px;
328
+ }
329
+ .mvfp-no-params {
330
+ text-align: center;
331
+ color: var(--app-text-secondary, var(--ion-color-medium, #888));
332
+ font-style: italic;
333
+ font-size: 13px;
334
+ padding: 12px 0;
335
+ }
336
+ `,n=document.createElement("style");n.textContent=a,document.head.appendChild(n)}class Oy{constructor({filters:n=[],callbacks:t={}}){Ly(),this._filters=n,this._cb=t,this._selectedCategory="all",this._selectedFilterId=null,this._activeFilters=new Map,this._drawerOpen=!1,this._drawerFilterId=null,this._root=null,this._catRow=null,this._filterRow=null,this._activeRow=null,this._drawer=null,this._drawerTitle=null,this._drawerBody=null}mount(n){return this._root=Ue("div",{className:"mvfp"}),this._catRow=Ue("div",{className:"mvfp-row"}),this._root.appendChild(this._catRow),this._filterRow=Ue("div",{className:"mvfp-row"}),this._root.appendChild(this._filterRow),this._activeRow=Ue("div",{className:"mvfp-active-row"}),this._root.appendChild(this._activeRow),this._buildDrawer(),this._root.appendChild(this._drawer),this._renderCategories(),this._renderFilters(),this._renderActiveChips(),n.appendChild(this._root),this._root}setFilters(n){this._filters=n,this._renderCategories(),this._renderFilters()}setActiveFilters(n){this._activeFilters.clear(),n&&n.forEach((t,o)=>{this._activeFilters.set(o,t)}),this._renderFilters(),this._renderActiveChips(),this._drawerOpen&&this._drawerFilterId&&!this._activeFilters.has(this._drawerFilterId)&&this.closeDrawer()}destroy(){var n;this.closeDrawer(),(n=this._root)==null||n.remove(),this._root=null}_getCategories(){const n=new Map;n.set("all","All");for(const t of this._filters){const o=t.category||"other";n.has(o)||n.set(o,o.charAt(0).toUpperCase()+o.slice(1))}return n}_renderCategories(){this._catRow.innerHTML="",this._getCategories().forEach((t,o)=>{const i=Ue("div",{className:`mvfp-cat${this._selectedCategory===o?" active":""}`,onClick:()=>{this._selectedCategory=o,this._renderCategories(),this._renderFilters()}},t);this._catRow.appendChild(i)})}_currentFilters(){return this._selectedCategory==="all"?this._filters:this._filters.filter(n=>(n.category||"other")===this._selectedCategory)}_renderFilters(){this._filterRow.innerHTML="";for(const n of this._currentFilters()){const t=this._activeFilters.has(n.id),o=this._selectedFilterId===n.id,i=Ue("div",{className:`mvfp-filter${t?" active":""}${o?" selected":""}`,onClick:()=>this._selectFilter(n)});if(t){const r=Ue("div",{className:"mvfp-check",onClick:s=>{s.stopPropagation(),this._removeFilter(n.id)}});r.innerHTML="✓",i.appendChild(r)}i.appendChild(Ue("span",{},n.name)),this._filterRow.appendChild(i)}}_selectFilter(n){var t,o,i,r;this._selectedFilterId=n.id,this._activeFilters.has(n.id)||(o=(t=this._cb).onApplyFilter)==null||o.call(t,n),(r=(i=this._cb).onPreviewFilter)==null||r.call(i,n),this._renderFilters(),n.params&&n.params.length>0&&this.openDrawer(n.id)}_removeFilter(n){var t,o;(o=(t=this._cb).onRemoveFilter)==null||o.call(t,n),this._selectedFilterId===n&&(this._selectedFilterId=null)}_renderActiveChips(){if(this._activeRow.innerHTML="",this._activeFilters.size===0){this._activeRow.appendChild(Ue("div",{className:"mvfp-placeholder"},"No active filters"));return}this._activeFilters.forEach((n,t)=>{const o=this._filters.find(c=>c.id===t);if(!o)return;const i=this._drawerOpen&&this._drawerFilterId===t,r=Ue("div",{className:`mvfp-achip${i?" selected":""}`}),s=Ue("span",{style:{cursor:"pointer"},onClick:()=>{this._selectedFilterId=t,this._renderFilters(),o.params&&o.params.length>0&&this.openDrawer(t)}},o.name),l=Ue("button",{className:"mvfp-achip-x","aria-label":`Remove ${o.name}`,onClick:c=>{c.stopPropagation(),this._removeFilter(t)}});l.innerHTML='<svg width="10" height="10" viewBox="0 0 12 12"><path d="M3 3l6 6M9 3l-6 6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',r.appendChild(s),r.appendChild(l),this._activeRow.appendChild(r)})}_buildDrawer(){this._drawer=Ue("div",{className:"mvfp-drawer"});const n=Ue("div",{className:"mvfp-drawer-hdr"});this._drawerTitle=Ue("span",{className:"mvfp-drawer-title"},"Filter");const t=Ue("div",{className:"mvfp-drawer-actions"});t.appendChild(Ue("button",{className:"mvfp-drawer-btn",onClick:()=>this._resetDrawerFilter()},"Reset")),t.appendChild(Ue("button",{className:"mvfp-drawer-btn danger",onClick:()=>{this._drawerFilterId&&(this._removeFilter(this._drawerFilterId),this.closeDrawer())}},"Remove"));const o=Ue("button",{className:"mvfp-drawer-close","aria-label":"Close",onClick:()=>this.closeDrawer()});o.innerHTML='<svg width="14" height="14" viewBox="0 0 14 14"><path d="M3 3l8 8M11 3l-8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>',t.appendChild(o),n.appendChild(this._drawerTitle),n.appendChild(t),this._drawer.appendChild(n),this._drawerBody=Ue("div",{className:"mvfp-drawer-body"}),this._drawer.appendChild(this._drawerBody)}openDrawer(n){const t=this._filters.find(o=>o.id===n);if(t&&(this._drawerFilterId=n,this._drawerTitle.textContent=t.name,this._renderDrawerControls(t),this._renderActiveChips(),!this._drawerOpen)){this._drawerOpen=!0;const o=this._root.offsetHeight;o>0&&(this._drawer.style.height=o+"px"),this._drawer.style.transition="none",this._drawer.style.transform="translateY(100%)",this._drawer.offsetHeight,this._drawer.style.transition="transform 0.25s cubic-bezier(0.33, 1, 0.68, 1)",this._drawer.style.transform="translateY(0)"}}closeDrawer(){this._drawerOpen&&(this._drawerOpen=!1,this._drawerFilterId=null,this._drawer.style.transition="transform 0.2s cubic-bezier(0.32, 0, 0.67, 0)",this._drawer.style.transform="translateY(100%)",this._renderActiveChips())}_renderDrawerControls(n){if(this._drawerBody.innerHTML="",!n.params||n.params.length===0){this._drawerBody.appendChild(Ue("div",{className:"mvfp-no-params"},"No adjustable parameters"));return}const t=this._activeFilters.get(n.id),o=(t==null?void 0:t.params)||{};for(const i of n.params){const r=o[i.id]??i.default,s=Ue("div",{className:"mvfp-ctl"}),l=Ue("label",{className:"mvfp-ctl-label"},i.label||i.id);s.appendChild(l);const c=i.type||"slider";if(c==="slider"||c==="range"){const d=Ue("div",{className:"mvfp-slider-row"}),u=Ue("span",{className:"mvfp-range-val"},ll(r)),p=Ue("input",{type:"range",className:"mvfp-range",min:String(i.min??0),max:String(i.max??1),step:String(i.step??.01),value:String(typeof r=="number"?r:i.default??0),onInput:v=>{var g,y;const h=parseFloat(v.target.value);u.textContent=ll(h),(y=(g=this._cb).onUpdateParam)==null||y.call(g,n.id,i.id,h)}});d.appendChild(p),d.appendChild(u),s.appendChild(d)}else if(c==="toggle"||c==="checkbox"){const d=Ue("div",{className:"mvfp-toggle-row"}),u=Ue("input",{type:"checkbox",checked:r?"checked":void 0,onChange:p=>{var v,h;return(h=(v=this._cb).onUpdateParam)==null?void 0:h.call(v,n.id,i.id,p.target.checked)}});d.appendChild(u),s.appendChild(d)}else if(c==="color"){const d=Ue("div",{className:"mvfp-color-row"}),u=Ue("input",{type:"color",className:"mvfp-color-input",value:typeof r=="string"?r:"#000000",onInput:p=>{var v,h;return(h=(v=this._cb).onUpdateParam)==null?void 0:h.call(v,n.id,i.id,p.target.value)}});d.appendChild(u),s.appendChild(d)}else if(c==="select"||c==="dropdown"){const d=Ue("div",{className:"mvfp-select-row"}),u=Ue("select",{className:"mvfp-select",onChange:p=>{var v,h;return(h=(v=this._cb).onUpdateParam)==null?void 0:h.call(v,n.id,i.id,p.target.value)}});for(const p of i.options||[]){const v=Ue("option",{value:p.value},p.label||String(p.value));p.value===r&&(v.selected=!0),u.appendChild(v)}d.appendChild(u),s.appendChild(d)}this._drawerBody.appendChild(s)}}_resetDrawerFilter(){var t,o;if(!this._drawerFilterId)return;const n=this._filters.find(i=>i.id===this._drawerFilterId);if(n!=null&&n.params){for(const i of n.params)(o=(t=this._cb).onUpdateParam)==null||o.call(t,this._drawerFilterId,i.id,i.default);this._renderDrawerControls(n)}}}function dl(a){var s,l;zy(a);const n=Py(a.clips),t=[],o=jy(a),i=Wy(a),r={version:"1.0",source:{media_uuid:a.mediaUuid,duration:a.originalDuration,original_width:((s=a.media)==null?void 0:s.width)||1920,original_height:((l=a.media)==null?void 0:l.height)||1080},timeline:n,filters:t,audio:o,output:i,metadata:{created_at:new Date().toISOString(),editor_version:"2.0.0"}};return a.textOverlays&&(r.textOverlays=a.textOverlays),a.audioTracks&&(r.audioTracks=a.audioTracks.filter(c=>typeof c.source=="string")),r}function zy(a){if(!a.mediaUuid)throw new Error("Media UUID is required");if(!a.clips||a.clips.length===0)throw new Error("At least one clip is required");const n=[...a.clips].sort((t,o)=>t.timelineStart-o.timelineStart);for(let t=1;t<n.length;t++)if(n[t].timelineStart<n[t-1].timelineEnd)throw new Error(`Clips ${n[t-1].id} and ${n[t].id} overlap on timeline`)}function Py(a){return a.map(n=>{const t=n.speed||1,o=typeof n.sourceIn=="number"&&!Number.isNaN(n.sourceIn),i=typeof n.sourceOut=="number"&&!Number.isNaN(n.sourceOut),r=Math.max(0,n.timelineEnd-n.timelineStart),s=n.sourceOffset??n.trimStart??0;let l=Number(o?n.sourceIn:s),c=i?Number(n.sourceOut):Number(s)+r/t;return c>l||(c=l+Math.max(.033,r/Math.max(1e-6,t))),{id:n.id,type:"clip",timelineStart:n.timelineStart,timelineEnd:n.timelineEnd,sourceIn:l,sourceOut:c,speed:t,filters:n.filters?[...n.filters]:[]}})}function jy(a){const n={volume:a.audioVolume,muted:a.audioVolume===0};return a.audioFadeIn>0&&(n.fadeIn=a.audioFadeIn),a.audioFadeOut>0&&(n.fadeOut=a.audioFadeOut),n}function Wy(a){var r;const n={"360p":{bitrate:1e6},"480p":{bitrate:25e5},"720p":{bitrate:5e6},"1080p":{bitrate:8e6},"1440p":{bitrate:16e6},"2160p":{bitrate:35e6}},t=n[a.exportQuality]||n["1080p"],o=(r=a.media)==null?void 0:r.frame_rate,i=o&&Number.isFinite(o)&&o>0?o:30;return{format:a.exportFormat||"mp4",codec:"h264",quality:a.exportQuality||"1080p",fps:i,bitrate:t.bitrate}}function Zy(a,n,t){var Ee,Oe;const o=typeof a=="string"&&a.trim()!==""?a.trim():`temp-${Date.now()}`,i=e.reactive({mediaUuid:o,clips:[],playheadPosition:0,totalDuration:0,originalDuration:0,filters:[],audioVolume:1,audioFadeIn:0,audioFadeOut:0,exportQuality:"1080p",exportFormat:"mp4",hasChanges:!1,isPlaying:!1,zoomLevel:100}),r=e.ref(null),s=e.ref([]),l=e.ref([]),c=e.ref(void 0);let d=typeof(t==null?void 0:t.duration)=="number"&&t.duration>0&&t.duration!==1;const u=e.ref(!1),p=e.shallowRef(null),v=new Vc(30),h=e.ref(30),g=e.ref(!1),y=e.ref(!1);n&&n.timeline&&n.timeline.length>0?(N(n),(Ee=n.output)!=null&&Ee.fps&&(h.value=n.output.fps,v.setFps(h.value))):(m(),n&&((Oe=n.output)!=null&&Oe.fps&&(h.value=n.output.fps,v.setFps(h.value)),n.audio&&(i.audioVolume=n.audio.volume||1,i.audioFadeIn=n.audio.fadeIn||0,i.audioFadeOut=n.audio.fadeOut||0),n.output&&(i.exportFormat=n.output.format||"mp4",i.exportQuality=n.output.quality||"1080p")));const V=e.ref(1),B=e.computed(()=>i.selectedClipId?i.clips.find(C=>C.id===i.selectedClipId)??null:null);e.watch(B,C=>{V.value=(C==null?void 0:C.speed)??1},{immediate:!0});const _=e.computed(()=>s.value.length>0),b=e.computed(()=>l.value.length>0);function m(){const C=typeof(t==null?void 0:t.duration)=="number"&&t.duration>0?t.duration:1;t&&(i.media=t),i.originalDuration=C,i.totalDuration=C;const L=ee(),X={id:L,type:"clip",timelineStart:0,timelineEnd:C,sourceIn:0,sourceOut:C,sourceMinIn:0,sourceMaxOut:C,speed:1};i.clips=[X],i.selectedClipId=L,c.value=L,!(t||o.startsWith("temp-"))&&(async()=>{try{const K=await fetch(`/api/v1/video/${encodeURIComponent(o)}`);if(!K.ok)throw new Error(`Failed to fetch media: ${K.status}`);const ce=await K.json(),fe=typeof ce=="object"&&ce!==null&&"data"in ce?ce.data:ce;if(!fe||typeof fe!="object")throw new Error("Failed to parse media payload");const _e=fe;i.media=_e;const Fe=typeof _e.duration=="number"&&_e.duration>0?_e.duration:C;if(i.hasChanges||i.clips.length!==1||i.clips[0].id!==L)return;i.originalDuration=Fe,i.totalDuration=Fe;const Me=i.clips[0];Me.timelineStart=0,Me.timelineEnd=Fe,Me.sourceIn=0,Me.sourceOut=Fe,Me.sourceMinIn=0,Me.sourceMaxOut=Fe,F(),d=!0}catch{}})()}function w(C,L){if(C.originalDuration!==1)return;C.originalDuration=L,C.totalDuration===1&&(C.totalDuration=L);const X=C.clips[0],K=!n&&C.clips.length===1&&X!==void 0&&X.timelineStart===0&&X.timelineEnd===1&&X.sourceIn===0&&X.sourceOut===1;for(const ce of C.clips)(ce.sourceMaxOut===1||ce.sourceMaxOut===void 0)&&(ce.sourceMaxOut=L);K&&X!==void 0&&(X.sourceOut=L,X.timelineEnd=L)}function I(C){if(!Number.isFinite(C)||C<=0||d)return;const L=i.hasChanges;i.originalDuration=C,i.totalDuration=Math.max(i.totalDuration,C),i.media&&(i.media.duration=C);for(const ce of i.clips)ce.sourceMaxOut=C;const X=i.clips[0];!n&&i.clips.length===1&&X!==void 0&&X.timelineStart===0&&X.timelineEnd===1&&X.sourceIn===0&&X.sourceOut===1&&X!==void 0&&(X.sourceOut=C,X.timelineEnd=X.timelineStart+(X.sourceOut-X.sourceIn)),F();for(const ce of s.value)w(ce,C);for(const ce of l.value)w(ce,C);d=!0,e.nextTick(()=>{L||(i.hasChanges=!1)})}function N(C){i.clips=C.timeline.map(L=>({...L,sourceMinIn:L.sourceMinIn??0,sourceMaxOut:L.sourceMaxOut??C.source.duration})),i.filters=[],i.audioVolume=C.audio.volume,i.audioFadeIn=C.audio.fadeIn||0,i.audioFadeOut=C.audio.fadeOut||0,i.exportFormat=C.output.format,i.exportQuality=C.output.quality,i.originalDuration=C.source.duration,i.clips.length>0?(i.selectedClipId=i.clips[0].id,c.value=i.selectedClipId):(delete i.selectedClipId,c.value=void 0),F()}function x(){s.value.push(JSON.parse(JSON.stringify(i))),l.value=[],i.hasChanges=!0}function T(){if(!_.value)return;const C=s.value.pop();l.value.push(JSON.parse(JSON.stringify(i))),Object.assign(i,C)}function H(){if(!b.value)return;const C=l.value.pop();s.value.push(JSON.parse(JSON.stringify(i))),Object.assign(i,C)}function E(C,L,X){x();const K=i.clips.find(Me=>Me.id===C);if(!K)return;const fe=1/30,_e=K.sourceMinIn??0,Fe=K.sourceMaxOut??i.originalDuration;if(L==="start"){const Me=K.sourceIn,De=Math.max(_e,Math.min(X,K.sourceOut-fe));K.sourceIn=De;const Qe=De-Me;K.timelineStart+=Qe}else{const Me=Math.max(K.sourceIn+fe,Math.min(X,Fe));K.sourceOut=Me;const De=K.sourceOut-K.sourceIn;K.timelineEnd=K.timelineStart+De}F(),p.value&&p.value.trimClip(C,K.sourceIn,K.sourceOut)}function R(C){x();const L=i.clips.find(_e=>C>_e.timelineStart&&C<_e.timelineEnd);if(!L)return;const X=C-L.timelineStart,K=L.sourceIn+X,ce={id:ee(),type:"clip",timelineStart:C,timelineEnd:L.timelineEnd,sourceIn:K,sourceOut:L.sourceOut,speed:L.speed??1,sourceMinIn:L.sourceMinIn??0,sourceMaxOut:L.sourceMaxOut??i.originalDuration,filters:[...L.filters||[]]};L.timelineEnd=C,L.sourceOut=K;const fe=i.clips.indexOf(L);i.clips.splice(fe+1,0,ce),i.selectedClipId=ce.id}function A(){R(i.playheadPosition)}function P(C){var X;const L=C??i.selectedClipId??c.value??((X=i.clips[0])==null?void 0:X.id);L&&(i.selectedClipId=L,c.value=L)}function M(){if(!i.selectedClipId||i.clips.length<=1)return;x();const C=i.clips.findIndex(L=>L.id===i.selectedClipId);if(C!==-1){i.clips.splice(C,1);const L=Math.min(C,i.clips.length-1);i.selectedClipId=i.clips[L].id,c.value=i.selectedClipId,F()}}function j(){return[...i.clips].sort((C,L)=>C.timelineStart-L.timelineStart)}function U(C){const L=j(),X=L.findIndex(De=>De.id===C);if(X===-1)return null;const K=L[X],ce=K.timelineEnd-K.timelineStart,fe=X>0?L[X-1]:null,_e=X<L.length-1?L[X+1]:null,Fe=fe?fe.timelineEnd:0,Me=_e?_e.timelineStart-ce:Math.max(K.timelineStart,i.totalDuration-ce);return{minStart:Fe,maxStart:Math.max(Fe,Me)}}function S(C,L){const X=i.clips.find(_e=>_e.id===C);if(!X)return;const K=U(C),ce=K?Math.min(K.maxStart,Math.max(K.minStart,L)):Math.max(0,L);if(ce===X.timelineStart)return;x();const fe=ce-X.timelineStart;X.timelineStart=ce,X.timelineEnd+=fe,F(),p.value&&p.value.moveClip(C,ce)}function F(){if(i.clips.length===0){i.totalDuration=0;return}const C=i.clips.reduce((L,X)=>X.timelineEnd>L.timelineEnd?X:L);i.totalDuration=C.timelineEnd}function J(){i.zoomLevel=Math.min(200,i.zoomLevel*1.2)}function G(){i.zoomLevel=Math.max(10,i.zoomLevel/1.2)}function Q(C){i.zoomLevel=Math.max(10,Math.min(600,Math.round(C)))}function ge(){i.isPlaying=!i.isPlaying}function be(C){i.isPlaying=C}function te(C){i.playheadPosition=Math.max(0,Math.min(C,i.totalDuration))}function $(){const C=dl(i);try{localStorage.setItem(`video-draft-${o}`,JSON.stringify(C))}catch{}return C}function O(){i.hasChanges=!1}function me(){return confirm("Are you sure you want to reset all changes?")?(x(),m(),i.hasChanges=!1,!0):!1}function ne(){return dl(i)}function ee(){return`clip-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}async function pe(C=1920,L=1080){if(u.value)try{p.value=new Ec(C,L,h.value),await ae()}catch{p.value=null}}async function ae(){if(!(!p.value||y.value)){y.value=!0;try{const C=ne();await p.value.loadFromRecipe(C);const L=v.secondsToFrames(i.playheadPosition);p.value.seek(L)}catch{}finally{y.value=!1}}}function ue(C){}function we(C){return v.secondsToFrames(C)}function oe(C){return v.framesToSeconds(C)}function se(C){const L=oe(C);te(L),p.value&&p.value.seek(C)}function ke(){g.value=!g.value}function Se(){ae()}function ut(C){u.value=!1,p.value=null}e.watch(()=>i.clips,()=>{i.hasChanges=!0,u.value&&p.value&&ae()},{deep:!0}),e.watch(()=>i.filters,()=>{i.hasChanges=!0,u.value&&p.value&&ae()},{deep:!0}),e.watch(()=>i.clips.map(C=>C.id),()=>{var L;if(!i.clips.length){delete i.selectedClipId,c.value=void 0;return}if(!i.clips.some(X=>X.id===i.selectedClipId)){const X=c.value&&((L=i.clips.find(K=>K.id===c.value))==null?void 0:L.id);i.selectedClipId=X??i.clips[0].id,c.value=i.selectedClipId}},{deep:!0});function Ze(C){const L=i.selectedClipId?i.clips.find(X=>X.id===i.selectedClipId):i.clips[0];L&&(L.filters=[...C],i.hasChanges=!0)}function Vt(C){i.textOverlays=[...C]}function He(C){i.audioTracks=[...C]}e.watch(u,C=>{C?pe():p.value&&(p.value.destroy(),p.value=null)}),e.watch(g,()=>{}),e.watch(h,C=>{v.setFps(C)});function nt(){if(!i.selectedClipId)return;x();const C=i.clips.find(K=>K.id===i.selectedClipId);if(!C)return;const L={...C,id:ee(),timelineStart:C.timelineEnd,timelineEnd:C.timelineEnd+(C.timelineEnd-C.timelineStart),filters:[...C.filters||[]]},X=i.clips.indexOf(C);i.clips.splice(X+1,0,L),i.selectedClipId=L.id,i.hasChanges=!0}function St(C){const L=C??800,X=i.totalDuration;if(X<=0){i.zoomLevel=50;return}const K=L*.8/X;i.zoomLevel=Math.max(10,Math.min(600,Math.round(K)))}function $t(){const C=1/h.value;te(Math.min(i.playheadPosition+C,i.totalDuration))}function st(){const C=1/h.value;te(Math.max(i.playheadPosition-C,0))}function yt(){te(0)}function le(){te(i.totalDuration)}function xe(C){if(!Number.isFinite(C)||C<=0)return;const L=B.value??i.clips[0];if(!L){V.value=C;return}const X=L.speed??1;if(X===C){V.value=C;return}x();const K=Math.max(1/h.value,L.sourceOut-L.sourceIn),ce=K/X,fe=K/C,_e=fe-ce;L.speed=C,L.timelineEnd=L.timelineStart+fe;const Fe=i.clips.findIndex(Me=>Me.id===L.id);if(Fe!==-1&&_e!==0)for(let Me=Fe+1;Me<i.clips.length;Me+=1){const De=i.clips[Me];De.timelineStart+=_e,De.timelineEnd+=_e}F(),i.playheadPosition=Math.max(0,Math.min(i.playheadPosition,i.totalDuration)),i.hasChanges=!0,V.value=C}return{currentFrame:r,playheadPosition:e.computed(()=>i.playheadPosition),timelineClips:e.computed(()=>i.clips),totalDuration:e.computed(()=>i.totalDuration),hasChanges:e.computed(()=>i.hasChanges),isPlaying:e.computed(()=>i.isPlaying),selectedClip:B,zoomLevel:e.computed(()=>i.zoomLevel),playbackSpeed:V,useVideoEngine:u,compositionAdapter:e.computed(()=>p.value),fps:h,useFrameMode:g,handleTrim:E,handleSplit:R,handleClipSelect:P,splitAtPlayhead:A,deleteSelectedClip:M,duplicateSelectedClip:nt,setFilters:Ze,setTextOverlays:Vt,setAudioTracks:He,moveClip:S,saveDraft:$,clearHasChanges:O,resetChanges:me,generateRecipe:ne,zoomIn:J,zoomOut:G,setZoomLevel:Q,fitToWindow:St,togglePlayback:ge,setPlaying:be,seekTo:te,frameForward:$t,frameBackward:st,skipToStart:yt,skipToEnd:le,setPlaybackSpeed:xe,updateSourceDuration:I,undo:T,redo:H,canUndo:_,canRedo:b,initializeComposition:pe,syncCompositionWithState:ae,syncWithComposition:ue,convertToFrames:we,convertToSeconds:oe,seekToFrame:se,toggleFrameMode:ke,onCompositionReady:Se,onCompositionError:ut}}const Xy=[{id:"brightness",name:"Brightness",category:"color",ffmpeg:"eq=brightness={value}",pixiFilter:"AdjustmentFilter",defaultParams:{value:0},paramRanges:{value:{min:-1,max:1,step:.05}}},{id:"contrast",name:"Contrast",category:"color",ffmpeg:"eq=contrast={value}",pixiFilter:"AdjustmentFilter",defaultParams:{value:1},paramRanges:{value:{min:.5,max:2,step:.05}}},{id:"saturation",name:"Saturation",category:"color",ffmpeg:"eq=saturation={value}",pixiFilter:"AdjustmentFilter",defaultParams:{value:1},paramRanges:{value:{min:0,max:2,step:.05}}},{id:"hue",name:"Hue Shift",category:"color",ffmpeg:"hue=h={value}",pixiFilter:"HueRotateFilter",defaultParams:{value:0},paramRanges:{value:{min:-180,max:180,step:5}}},{id:"gaussian-blur",name:"Gaussian Blur",category:"blur",ffmpeg:"gblur=sigma={value}",pixiFilter:"BlurFilter",defaultParams:{value:2},paramRanges:{value:{min:0,max:10,step:.5}}},{id:"motion-blur",name:"Motion Blur",category:"blur",ffmpeg:"minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:me=epzs:vsbmc=1",pixiFilter:"MotionBlurFilter",defaultParams:{velocity:5,angle:0},paramRanges:{velocity:{min:0,max:20,step:1},angle:{min:0,max:360,step:15}}},{id:"vintage",name:"Vintage",category:"stylize",ffmpeg:"curves=preset=vintage",pixiFilter:"ColorMatrixFilter",defaultParams:{preset:"vintage"},paramRanges:{}},{id:"sepia",name:"Sepia",category:"stylize",ffmpeg:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",pixiFilter:"ColorMatrixFilter",defaultParams:{preset:"sepia"},paramRanges:{}},{id:"grayscale",name:"Black & White",category:"stylize",ffmpeg:"colorchannelmixer=0.3:0.59:0.11:0:0.3:0.59:0.11:0:0.3:0.59:0.11",pixiFilter:"ColorMatrixFilter",defaultParams:{preset:"grayscale"},paramRanges:{}},{id:"vignette",name:"Vignette",category:"effects",ffmpeg:"vignette=a={value}",pixiFilter:"VignetteFilter",defaultParams:{value:.3},paramRanges:{value:{min:0,max:1,step:.05}}},{id:"sharpen",name:"Sharpen",category:"effects",ffmpeg:"unsharp=5:5:{value}:5:5:0",pixiFilter:"SharpenFilter",defaultParams:{value:1},paramRanges:{value:{min:0,max:5,step:.25}}},{id:"denoise",name:"Noise Reduction",category:"effects",ffmpeg:"nlmeans=s={value}",pixiFilter:"NoiseFilter",defaultParams:{value:1},paramRanges:{value:{min:.1,max:5,step:.1}}},{id:"motion-blur",name:"Motion Blur",category:"effects",ffmpeg:"minterpolate=fps=30:mi_mode=blend",pixiFilter:"MotionBlurFilter",defaultParams:{velocity:[0,0],kernelSize:5},paramRanges:{velocityX:{min:-100,max:100,step:1},velocityY:{min:-100,max:100,step:1},kernelSize:{min:3,max:15,step:2}}},{id:"radial-blur",name:"Radial Blur",category:"effects",ffmpeg:"boxblur={radius}:{radius}",pixiFilter:"RadialBlurFilter",defaultParams:{radius:.1,angle:0,kernelSize:5},paramRanges:{radius:{min:0,max:1,step:.01},angle:{min:-180,max:180,step:1},kernelSize:{min:3,max:15,step:2}}},{id:"kawase-blur",name:"Kawase Blur",category:"effects",ffmpeg:"gblur=sigma={blur}:steps={quality}",pixiFilter:"KawaseBlurFilter",defaultParams:{blur:4,quality:3},paramRanges:{blur:{min:0,max:20,step:.5},quality:{min:1,max:10,step:1}}},{id:"flip-horizontal",name:"Flip Horizontal",category:"transform",ffmpeg:"hflip",pixiFilter:"FlipFilter",defaultParams:{horizontal:!0},paramRanges:{}},{id:"flip-vertical",name:"Flip Vertical",category:"transform",ffmpeg:"vflip",pixiFilter:"FlipFilter",defaultParams:{vertical:!0},paramRanges:{}},{id:"rotate",name:"Rotate",category:"transform",ffmpeg:"rotate={value}*PI/180",pixiFilter:"RotateFilter",defaultParams:{value:0},paramRanges:{value:{min:-180,max:180,step:15}}}],Hy={dropShadow:"drop-shadow",softFocus:"blur",blackAndWhite:"grayscale",gaussianBlur:"blur","gaussian-blur":"blur"};function Ga(a){return typeof a=="object"&&a!==null}function Gy(a,n){if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"){const t=Number(a);if(Number.isFinite(t))return t}return n}function Ja(a){if(typeof a=="number"||typeof a=="string"||typeof a=="boolean")return a}function Jy(a){const n={id:a.id,type:a.type,label:a.label};a.property!==void 0&&(n.property=a.property),a.min!==void 0&&(n.min=a.min),a.max!==void 0&&(n.max=a.max),a.step!==void 0&&(n.step=a.step);const t=Ja(a.default);return t!==void 0&&(n.default=t),a.options!==void 0&&(n.options=a.options),n}function Sc(a,n,t){const o=dt.getFilter(a),i={},r=(o==null?void 0:o.defaultParams)??t;if(r&&Ga(r))for(const[s,l]of Object.entries(r))i[s]=Ja(l)??null;for(const s of n){const l=s.property??s.id;i[l]===void 0&&s.default!==void 0&&(i[l]=s.default)}return i}function Cc(a){const n={};for(const t of a){if(t.type!=="slider")continue;const o=t.property??t.id;n[o]={min:t.min??0,max:t.max??100,step:t.step??1}}return n}function Yy(a,n,t,o){const i=o.map(Jy);return{id:a,name:n,category:t,controls:i,params:i,defaultParams:Sc(a,i),paramRanges:Cc(i)}}function Ky(a){const n=a.paramRanges??{},t=Object.entries(n).map(([o,i])=>{var l;const r={id:o,type:"slider",label:o.replace(/[-_]/g," ").replace(/\b\w/g,c=>c.toUpperCase()),property:o,min:i.min,max:i.max,step:i.step},s=Ja((l=a.defaultParams)==null?void 0:l[o]);return s!==void 0&&(r.default=s),r});return{id:a.id,name:a.name,category:a.category,controls:t,params:t,defaultParams:Sc(a.id,t,a.defaultParams),paramRanges:Cc(t)}}function qy(a,n){return n.toLowerCase()==="unlisted"?!1:dt.isFilterCompatibleWithMedia(a,"video")}function Li(a){return Hy[a]??a}function go(a){const n=Gy(a,1);return Math.max(0,Math.min(1,n))}function yo(a){if(!Ga(a))return{};const n={};for(const[t,o]of Object.entries(a))n[t]=Ja(o)??null;return n}function Qy(a){return!Ga(a)||typeof a.filterId!="string"?null:{filterId:a.filterId,params:yo(a.params),intensity:go(a.intensity)}}function eb(a){if(!Ga(a)||typeof a.id!="string"||typeof a.name!="string")return null;const t=(Array.isArray(a.filters)?a.filters:[]).map(i=>Qy(i)).filter(i=>i!==null),o=typeof a.created_at=="string"?a.created_at:new Date().toISOString();return{id:a.id,name:a.name,filters:t,created_at:o}}function tb(){dt.initializeFilterRegistry();const a=e.ref([]),n=e.ref(null),t=e.ref(null),o=e.ref([]),i=e.ref(null),r=e.reactive({}),s=e.computed(()=>{const A=new Map,P=dt.getRegisteredFilters();for(const M of P)qy(M.id,M.category)&&A.set(M.id,Yy(M.id,M.name,M.category,M.controls));for(const M of Xy)A.has(M.id)||A.set(M.id,Ky(M));return Array.from(A.values())}),l=e.computed(()=>{const A=new Map;for(const P of s.value)A.set(P.id,P);return A}),c=e.computed(()=>a.value.length>0),d=e.computed(()=>{const A={};for(const P of s.value)A[P.category]||(A[P.category]=[]),A[P.category].push(P);return A});function u(A){const P=l.value.get(A);if(P)return P;const M=Li(A);return l.value.get(M)??null}function p(A){const P=l.value.get(A);if(P)return P.id;const M=Li(A),j=l.value.get(M);return j?j.id:null}function v(A){const P=A?u(A):n.value;if(!P)return;const M=P.defaultParams||{},j={id:T(),filterId:P.id,params:{...M},intensity:1};return a.value.push(j),i.value=j.id,n.value=P,Object.keys(r).forEach(U=>delete r[U]),Object.assign(r,j.params),t.value=null,j}function h(A){const P=u(A);if(!P)return;n.value=P;const M=P.defaultParams||E(A);Object.assign(r,M),t.value={id:"preview",filterId:P.id,params:{...M},intensity:1}}function g(A){if(Object.assign(r,A),t.value&&(t.value.params={...r}),i.value){const P=a.value.find(M=>M.id===i.value);P&&(P.params={...r})}}function y(A){const P=a.value.findIndex(M=>M.id===A);P!==-1&&a.value.splice(P,1)}function V(A,P){if(A<0||A>=a.value.length||P<0||P>=a.value.length)return;const[M]=a.value.splice(A,1);a.value.splice(P,0,M)}function B(A,P){const M=a.value.find(j=>j.id===A);M&&(M.intensity=Math.max(0,Math.min(1,P)))}function _(A){const P=a.value.find(M=>M.id===A);P&&(P.intensity=P.intensity>0?0:1)}function b(){a.value=[],t.value=null,n.value=null,i.value=null,Object.keys(r).forEach(A=>delete r[A])}function m(A){const P={id:H(),name:A,filters:a.value.map(j=>({filterId:j.filterId,params:yo(j.params),intensity:go(j.intensity)})),created_at:new Date().toISOString()};o.value.push(P);const M=o.value.map(j=>({...j}));return localStorage.setItem("video-filter-presets",JSON.stringify(M)),P}function w(A){const P=o.value.find(M=>M.id===A);if(P){b();for(const M of P.filters){const j=u(M.filterId);j&&a.value.push({id:T(),filterId:j.id,params:{...M.params},intensity:go(M.intensity)})}}}function I(A){const P=o.value.findIndex(M=>M.id===A);P!==-1&&(o.value.splice(P,1),localStorage.setItem("video-filter-presets",JSON.stringify(o.value)))}function N(){try{const A=localStorage.getItem("video-filter-presets");if(!A)return;const P=JSON.parse(A);if(!Array.isArray(P))return;o.value=P.map(M=>eb(M)).filter(M=>M!==null)}catch{}}function x(){if(a.value.length===0)return"No filters applied";const A=a.value.map(P=>{const M=R(P.filterId);return(M==null?void 0:M.name)||P.filterId});return A.length===1?A[0]:A.length===2?`${A[0]} + ${A[1]}`:`${A[0]} + ${A.length-1} more`}function T(){return`filter-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function H(){return`preset-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function E(A){const P=u(A);return P?P.defaultParams||{}:{}}function R(A){return u(A)}return N(),{videoCompatibleFilters:s,activeFilters:a,selectedFilter:n,previewFilter:t,filterPresets:o,filterParams:r,hasActiveFilters:c,filtersByCategory:d,applyFilter:v,previewFilterEffect:h,updateFilterParams:g,removeFilter:y,reorderFilters:V,updateFilterIntensity:B,toggleFilter:_,clearAllFilters:b,saveFilterPreset:m,loadFilterPreset:w,deleteFilterPreset:I,getFilterSummary:x,setActiveFilters(A){var M;const P=[];for(const j of A){const U=p(j.filterId);if(!U){const S=Li(j.filterId);P.push({...j,filterId:S,params:yo(j.params),intensity:go(j.intensity)});continue}P.push({...j,filterId:U,params:yo(j.params),intensity:go(j.intensity)})}a.value=P,i.value=((M=a.value[0])==null?void 0:M.id)??null,Object.keys(r).forEach(j=>delete r[j]),a.value[0]&&Object.assign(r,yo(a.value[0].params))}}}class nb{constructor(n){this.textClips=new Map,this.fonts=new Map,this.nextId=0,this.composition=n,this.initializeDefaultFonts()}initializeDefaultFonts(){try{this.fonts.set("default",new pt({source:"https://fonts.googleapis.com/css2?family=Inter:wght@400",family:"Inter",weight:"400"})),this.fonts.set("bold",new pt({source:"https://fonts.googleapis.com/css2?family=Inter:wght@700",family:"Inter",weight:"700"})),this.fonts.set("serif",new pt({source:"https://fonts.googleapis.com/css2?family=Merriweather:wght@400",family:"Merriweather",weight:"400"}))}catch{}}async loadWebFont(n,t,o,i="400"){const r=new pt({source:t,family:o,weight:i});this.fonts.set(n,r)}loadLocalFont(n,t,o="400"){const i=new pt({source:`local('${t}')`,family:t,weight:o});this.fonts.set(n,i)}async addTextOverlay(n){const t=`text-overlay-${this.nextId++}`,o={text:n.text,fontSize:n.fontSize||24,fillStyle:n.color||"#ffffff",textAlign:n.textAlign||"center",textBaseline:n.textBaseline||"middle"},i=n.fontFamily||"default",r=this.fonts.get(i)||this.fonts.get("default");if(o.font=r,n.position)if(typeof n.position=="string")switch(n.position){case"center":o.position="center";break;case"top":o.x="50%",o.y="10%";break;case"bottom":o.x="50%",o.y="90%";break;case"left":o.x="10%",o.y="50%";break;case"right":o.x="90%",o.y="50%";break}else o.x=n.position.x,o.y=n.position.y;else o.position="center";if(n.startTime!==void 0&&(o.start=ve.fromSeconds(n.startTime)),n.duration!==void 0){const l=n.startTime||0;o.stop=ve.fromSeconds(l+n.duration)}n.animation&&this.applyAnimation(o,n.animation,n);const s=new Yn(o);return await this.composition.add(s),this.textClips.set(t,s),t}applyAnimation(n,t,o){if(!t)return;const i=o.startTime?Math.round(o.startTime*30):0,r=t.duration||1,s=Math.round(r*30),l=i+s,c=t.easing||"linear";switch(t.type){case"fade-in":n.alpha=new Ve([i,l],[0,1],{easing:c});break;case"fade-out":n.alpha=new Ve([i,l],[1,0],{easing:c});break;case"rotate":t.rotation&&(n.rotation=new Ve([i,l],[t.rotation.from,t.rotation.to],{easing:c}));break;case"scale":t.scale&&(n.scale=new Ve([i,l],[t.scale.from,t.scale.to],{easing:c}));break;case"slide":t.translate&&(n.translate={x:new Ve([i,l],[t.translate.fromX,t.translate.toX],{easing:c}),y:new Ve([i,l],[t.translate.fromY,t.translate.toY],{easing:c})});break;case"typewriter":n.alpha=new Ve([i,l],[0,1],{easing:"linear"});break;case"custom":t.rotation&&(n.rotation=new Ve([i,l],[t.rotation.from,t.rotation.to],{easing:c})),t.scale&&(n.scale=new Ve([i,l],[t.scale.from,t.scale.to],{easing:c})),t.translate&&(n.translate={x:new Ve([i,l],[t.translate.fromX,t.translate.toX],{easing:c}),y:new Ve([i,l],[t.translate.fromY,t.translate.toY],{easing:c})});break}}async updateTextOverlay(n,t){if(!this.textClips.get(n))throw new Error(`Text overlay with id ${n} not found`);await this.removeTextOverlay(n);const i={...t};await this.addTextOverlay(i)}async removeTextOverlay(n){const t=this.textClips.get(n);if(!t)throw new Error(`Text overlay with id ${n} not found`);const o=this.composition.tracks;for(const i of o){const r=i.clips.indexOf(t);if(r!==-1){i.clips.splice(r,1);break}}this.textClips.delete(n)}getTextOverlays(){return new Map(this.textClips)}async clearAllTextOverlays(){const n=Array.from(this.textClips.keys());for(const t of n)await this.removeTextOverlay(t)}getOverlays(){const n=[];return this.textClips.forEach((t,o)=>{const i={text:t.text||"",fontSize:t.fontSize,color:t.fillStyle,fontFamily:"default",position:"center"};n.push({id:o,config:i})}),n}async addCaptions(n,t="classic",o){var c,d;const r={classic:$o,cascade:ja,guinea:Pa,solar:Wa,spotlight:Ro,whisper:Do}[t],s=await this.composition.createTrack("caption"),l=new Da({transcript:n});if(await s.add(l),await((c=s.generate)==null?void 0:c.call(s,r)),o&&s.clips.length>0){const u=s.clips[0];(d=u.set)==null||d.call(u,o)}}}class ob{constructor(n){this.audioLayers=new Map,this.audioSources=new Map,this.nextId=0,this.masterVolume=1,this.composition=n}async loadAudioSource(n,t){try{const o=await hn.from(n),i=t||`audio-source-${this.nextId++}`;return this.audioSources.set(i,o),o}catch(o){throw o instanceof Error?o:new Error("Failed to load audio source")}}async addBackgroundMusic(n){return this.addAudioTrack({...n,name:n.name||"Background Music"})}async addAudioTrack(n){const t=`audio-track-${this.nextId++}`;let o;try{if(typeof n.source=="object"&&n.source instanceof hn)o=n.source;else if(typeof n.source=="string")o=await hn.from(n.source);else if(typeof n.source=="object"&&n.source instanceof File)o=await hn.from(URL.createObjectURL(n.source));else throw new Error("Invalid audio source")}catch(c){throw c instanceof Error?c:new Error("Failed to create audio source")}const i={source:o,volume:(n.volume??1)*this.masterVolume};if(n.startTime!==void 0&&(i.start=ve.fromSeconds(n.startTime)),n.duration!==void 0){const c=n.startTime||0;i.stop=ve.fromSeconds(c+n.duration)}(n.fadeIn||n.fadeOut)&&(i.volume=this.createVolumeKeyframes(n));const r=new Na(i);let s=this.composition.tracks.find(c=>c.kind==="audio");s||(s=await this.composition.createTrack("audio")),await s.add(r);const l={id:t,name:n.name||`Audio Track ${this.audioLayers.size+1}`,clip:r,track:s,config:n};return this.audioLayers.set(t,l),t}createVolumeKeyframes(n){const t=(n.volume??1)*this.masterVolume,o=n.startTime?Math.round(n.startTime*30):0,i=n.duration,r=[],s=[];if(n.fadeIn){const l=Math.round(n.fadeIn*30);r.push(o,o+l),s.push(0,t)}else r.push(o),s.push(t);if(n.fadeOut&&i){const l=o+Math.round(i*30),c=Math.round(n.fadeOut*30);n.fadeIn||(r.push(l-c),s.push(t)),r.push(l),s.push(0)}return new Ve(r,s,{easing:"linear"})}async updateVolume(n,t){const o=this.audioLayers.get(n);if(!o)throw new Error(`Audio track with id ${n} not found`);const i=Math.max(0,Math.min(1,t));o.clip.volume=i*this.masterVolume,o.config.volume=i}async applyFadeIn(n,t){const o=this.audioLayers.get(n);if(!o)throw new Error(`Audio track with id ${n} not found`);o.config.fadeIn=t,o.clip.set({volume:this.createVolumeKeyframes(o.config)})}async applyFadeOut(n,t){const o=this.audioLayers.get(n);if(!o)throw new Error(`Audio track with id ${n} not found`);o.config.fadeOut=t,o.clip.set({volume:this.createVolumeKeyframes(o.config)})}async removeAudioTrack(n){const t=this.audioLayers.get(n);if(!t)throw new Error(`Audio track with id ${n} not found`);const o=t.track.clips.indexOf(t.clip);o!==-1&&t.track.clips.splice(o,1),this.audioLayers.delete(n)}async muteTrack(n,t){const o=this.audioLayers.get(n);if(!o)throw new Error(`Audio track with id ${n} not found`);t?o.clip.volume=0:o.clip.volume=(o.config.volume??1)*this.masterVolume}setMasterVolume(n){this.masterVolume=Math.max(0,Math.min(1,n));for(const t of this.audioLayers.values())t.clip.volume=(t.config.volume??1)*this.masterVolume}getMasterVolume(){return this.masterVolume}getAudioLayers(){return Array.from(this.audioLayers.values())}getAudioLayer(n){return this.audioLayers.get(n)}async clearAllAudioTracks(){const n=Array.from(this.audioLayers.keys());for(const t of n)await this.removeAudioTrack(t)}async syncWithVideo(n,t){for(const o of this.audioLayers.values()){const i=o.config.startTime||0,r=o.config.duration||t-n;if(i+r>t){o.config.duration=t-i;const s=new Na({source:o.clip.source,start:ve.fromSeconds(i),stop:ve.fromSeconds(t),volume:o.clip.volume}),l=o.track.clips.indexOf(o.clip);l!==-1&&(o.track.clips[l]=s,o.clip=s)}}}exportConfiguration(){return Array.from(this.audioLayers.values()).map(n=>({id:n.id,name:n.name,config:{...n.config,source:n.config.source&&typeof n.config.source=="object"&&"type"in n.config.source?"[AudioSource]":n.config.source}}))}async importConfiguration(n){for(const{name:t,config:o}of n)await this.addAudioTrack({...o,name:t})}}function _c(a,n){return function(){return a.apply(n,arguments)}}const{toString:ab}=Object.prototype,{getPrototypeOf:Ur}=Object,{iterator:Ya,toStringTag:Nc}=Symbol,Ka=(a=>n=>{const t=ab.call(n);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),Lt=a=>(a=a.toLowerCase(),n=>Ka(n)===a),qa=a=>n=>typeof n===a,{isArray:Qn}=Array,No=qa("undefined");function Ao(a){return a!==null&&!No(a)&&a.constructor!==null&&!No(a.constructor)&&kt(a.constructor.isBuffer)&&a.constructor.isBuffer(a)}const Tc=Lt("ArrayBuffer");function ib(a){let n;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?n=ArrayBuffer.isView(a):n=a&&a.buffer&&Tc(a.buffer),n}const rb=qa("string"),kt=qa("function"),Mc=qa("number"),Uo=a=>a!==null&&typeof a=="object",sb=a=>a===!0||a===!1,va=a=>{if(Ka(a)!=="object")return!1;const n=Ur(a);return(n===null||n===Object.prototype||Object.getPrototypeOf(n)===null)&&!(Nc in a)&&!(Ya in a)},lb=a=>{if(!Uo(a)||Ao(a))return!1;try{return Object.keys(a).length===0&&Object.getPrototypeOf(a)===Object.prototype}catch{return!1}},cb=Lt("Date"),db=Lt("File"),ub=Lt("Blob"),mb=Lt("FileList"),pb=a=>Uo(a)&&kt(a.pipe),fb=a=>{let n;return a&&(typeof FormData=="function"&&a instanceof FormData||kt(a.append)&&((n=Ka(a))==="formdata"||n==="object"&&kt(a.toString)&&a.toString()==="[object FormData]"))},hb=Lt("URLSearchParams"),[vb,gb,yb,bb]=["ReadableStream","Request","Response","Headers"].map(Lt),wb=a=>a.trim?a.trim():a.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Lo(a,n,{allOwnKeys:t=!1}={}){if(a===null||typeof a>"u")return;let o,i;if(typeof a!="object"&&(a=[a]),Qn(a))for(o=0,i=a.length;o<i;o++)n.call(null,a[o],o,a);else{if(Ao(a))return;const r=t?Object.getOwnPropertyNames(a):Object.keys(a),s=r.length;let l;for(o=0;o<s;o++)l=r[o],n.call(null,a[l],l,a)}}function Bc(a,n){if(Ao(a))return null;n=n.toLowerCase();const t=Object.keys(a);let o=t.length,i;for(;o-- >0;)if(i=t[o],n===i.toLowerCase())return i;return null}const Cn=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Ic=a=>!No(a)&&a!==Cn;function cr(){const{caseless:a}=Ic(this)&&this||{},n={},t=(o,i)=>{const r=a&&Bc(n,i)||i;va(n[r])&&va(o)?n[r]=cr(n[r],o):va(o)?n[r]=cr({},o):Qn(o)?n[r]=o.slice():n[r]=o};for(let o=0,i=arguments.length;o<i;o++)arguments[o]&&Lo(arguments[o],t);return n}const kb=(a,n,t,{allOwnKeys:o}={})=>(Lo(n,(i,r)=>{t&&kt(i)?a[r]=_c(i,t):a[r]=i},{allOwnKeys:o}),a),xb=a=>(a.charCodeAt(0)===65279&&(a=a.slice(1)),a),Eb=(a,n,t,o)=>{a.prototype=Object.create(n.prototype,o),a.prototype.constructor=a,Object.defineProperty(a,"super",{value:n.prototype}),t&&Object.assign(a.prototype,t)},Vb=(a,n,t,o)=>{let i,r,s;const l={};if(n=n||{},a==null)return n;do{for(i=Object.getOwnPropertyNames(a),r=i.length;r-- >0;)s=i[r],(!o||o(s,a,n))&&!l[s]&&(n[s]=a[s],l[s]=!0);a=t!==!1&&Ur(a)}while(a&&(!t||t(a,n))&&a!==Object.prototype);return n},Sb=(a,n,t)=>{a=String(a),(t===void 0||t>a.length)&&(t=a.length),t-=n.length;const o=a.indexOf(n,t);return o!==-1&&o===t},Cb=a=>{if(!a)return null;if(Qn(a))return a;let n=a.length;if(!Mc(n))return null;const t=new Array(n);for(;n-- >0;)t[n]=a[n];return t},_b=(a=>n=>a&&n instanceof a)(typeof Uint8Array<"u"&&Ur(Uint8Array)),Nb=(a,n)=>{const o=(a&&a[Ya]).call(a);let i;for(;(i=o.next())&&!i.done;){const r=i.value;n.call(a,r[0],r[1])}},Tb=(a,n)=>{let t;const o=[];for(;(t=a.exec(n))!==null;)o.push(t);return o},Mb=Lt("HTMLFormElement"),Bb=a=>a.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,o,i){return o.toUpperCase()+i}),ul=(({hasOwnProperty:a})=>(n,t)=>a.call(n,t))(Object.prototype),Ib=Lt("RegExp"),Fc=(a,n)=>{const t=Object.getOwnPropertyDescriptors(a),o={};Lo(t,(i,r)=>{let s;(s=n(i,r,a))!==!1&&(o[r]=s||i)}),Object.defineProperties(a,o)},Fb=a=>{Fc(a,(n,t)=>{if(kt(a)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const o=a[t];if(kt(o)){if(n.enumerable=!1,"writable"in n){n.writable=!1;return}n.set||(n.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},$b=(a,n)=>{const t={},o=i=>{i.forEach(r=>{t[r]=!0})};return Qn(a)?o(a):o(String(a).split(n)),t},Rb=()=>{},Db=(a,n)=>a!=null&&Number.isFinite(a=+a)?a:n;function Ab(a){return!!(a&&kt(a.append)&&a[Nc]==="FormData"&&a[Ya])}const Ub=a=>{const n=new Array(10),t=(o,i)=>{if(Uo(o)){if(n.indexOf(o)>=0)return;if(Ao(o))return o;if(!("toJSON"in o)){n[i]=o;const r=Qn(o)?[]:{};return Lo(o,(s,l)=>{const c=t(s,i+1);!No(c)&&(r[l]=c)}),n[i]=void 0,r}}return o};return t(a,0)},Lb=Lt("AsyncFunction"),Ob=a=>a&&(Uo(a)||kt(a))&&kt(a.then)&&kt(a.catch),$c=((a,n)=>a?setImmediate:n?((t,o)=>(Cn.addEventListener("message",({source:i,data:r})=>{i===Cn&&r===t&&o.length&&o.shift()()},!1),i=>{o.push(i),Cn.postMessage(t,"*")}))(`axios@${Math.random()}`,[]):t=>setTimeout(t))(typeof setImmediate=="function",kt(Cn.postMessage)),zb=typeof queueMicrotask<"u"?queueMicrotask.bind(Cn):typeof process<"u"&&process.nextTick||$c,Pb=a=>a!=null&&kt(a[Ya]),Y={isArray:Qn,isArrayBuffer:Tc,isBuffer:Ao,isFormData:fb,isArrayBufferView:ib,isString:rb,isNumber:Mc,isBoolean:sb,isObject:Uo,isPlainObject:va,isEmptyObject:lb,isReadableStream:vb,isRequest:gb,isResponse:yb,isHeaders:bb,isUndefined:No,isDate:cb,isFile:db,isBlob:ub,isRegExp:Ib,isFunction:kt,isStream:pb,isURLSearchParams:hb,isTypedArray:_b,isFileList:mb,forEach:Lo,merge:cr,extend:kb,trim:wb,stripBOM:xb,inherits:Eb,toFlatObject:Vb,kindOf:Ka,kindOfTest:Lt,endsWith:Sb,toArray:Cb,forEachEntry:Nb,matchAll:Tb,isHTMLForm:Mb,hasOwnProperty:ul,hasOwnProp:ul,reduceDescriptors:Fc,freezeMethods:Fb,toObjectSet:$b,toCamelCase:Bb,noop:Rb,toFiniteNumber:Db,findKey:Bc,global:Cn,isContextDefined:Ic,isSpecCompliantForm:Ab,toJSONObject:Ub,isAsyncFn:Lb,isThenable:Ob,setImmediate:$c,asap:zb,isIterable:Pb};function Be(a,n,t,o,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=a,this.name="AxiosError",n&&(this.code=n),t&&(this.config=t),o&&(this.request=o),i&&(this.response=i,this.status=i.status?i.status:null)}Y.inherits(Be,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Y.toJSONObject(this.config),code:this.code,status:this.status}}});const Rc=Be.prototype,Dc={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(a=>{Dc[a]={value:a}});Object.defineProperties(Be,Dc);Object.defineProperty(Rc,"isAxiosError",{value:!0});Be.from=(a,n,t,o,i,r)=>{const s=Object.create(Rc);return Y.toFlatObject(a,s,function(c){return c!==Error.prototype},l=>l!=="isAxiosError"),Be.call(s,a.message,n,t,o,i),s.cause=a,s.name=a.name,r&&Object.assign(s,r),s};const jb=null;function dr(a){return Y.isPlainObject(a)||Y.isArray(a)}function Ac(a){return Y.endsWith(a,"[]")?a.slice(0,-2):a}function ml(a,n,t){return a?a.concat(n).map(function(i,r){return i=Ac(i),!t&&r?"["+i+"]":i}).join(t?".":""):n}function Wb(a){return Y.isArray(a)&&!a.some(dr)}const Zb=Y.toFlatObject(Y,{},null,function(n){return/^is[A-Z]/.test(n)});function Qa(a,n,t){if(!Y.isObject(a))throw new TypeError("target must be an object");n=n||new FormData,t=Y.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(y,V){return!Y.isUndefined(V[y])});const o=t.metaTokens,i=t.visitor||u,r=t.dots,s=t.indexes,c=(t.Blob||typeof Blob<"u"&&Blob)&&Y.isSpecCompliantForm(n);if(!Y.isFunction(i))throw new TypeError("visitor must be a function");function d(g){if(g===null)return"";if(Y.isDate(g))return g.toISOString();if(Y.isBoolean(g))return g.toString();if(!c&&Y.isBlob(g))throw new Be("Blob is not supported. Use a Buffer instead.");return Y.isArrayBuffer(g)||Y.isTypedArray(g)?c&&typeof Blob=="function"?new Blob([g]):Buffer.from(g):g}function u(g,y,V){let B=g;if(g&&!V&&typeof g=="object"){if(Y.endsWith(y,"{}"))y=o?y:y.slice(0,-2),g=JSON.stringify(g);else if(Y.isArray(g)&&Wb(g)||(Y.isFileList(g)||Y.endsWith(y,"[]"))&&(B=Y.toArray(g)))return y=Ac(y),B.forEach(function(b,m){!(Y.isUndefined(b)||b===null)&&n.append(s===!0?ml([y],m,r):s===null?y:y+"[]",d(b))}),!1}return dr(g)?!0:(n.append(ml(V,y,r),d(g)),!1)}const p=[],v=Object.assign(Zb,{defaultVisitor:u,convertValue:d,isVisitable:dr});function h(g,y){if(!Y.isUndefined(g)){if(p.indexOf(g)!==-1)throw Error("Circular reference detected in "+y.join("."));p.push(g),Y.forEach(g,function(B,_){(!(Y.isUndefined(B)||B===null)&&i.call(n,B,Y.isString(_)?_.trim():_,y,v))===!0&&h(B,y?y.concat(_):[_])}),p.pop()}}if(!Y.isObject(a))throw new TypeError("data must be an object");return h(a),n}function pl(a){const n={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(a).replace(/[!'()~]|%20|%00/g,function(o){return n[o]})}function Lr(a,n){this._pairs=[],a&&Qa(a,this,n)}const Uc=Lr.prototype;Uc.append=function(n,t){this._pairs.push([n,t])};Uc.toString=function(n){const t=n?function(o){return n.call(this,o,pl)}:pl;return this._pairs.map(function(i){return t(i[0])+"="+t(i[1])},"").join("&")};function Xb(a){return encodeURIComponent(a).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function Lc(a,n,t){if(!n)return a;const o=t&&t.encode||Xb;Y.isFunction(t)&&(t={serialize:t});const i=t&&t.serialize;let r;if(i?r=i(n,t):r=Y.isURLSearchParams(n)?n.toString():new Lr(n,t).toString(o),r){const s=a.indexOf("#");s!==-1&&(a=a.slice(0,s)),a+=(a.indexOf("?")===-1?"?":"&")+r}return a}class fl{constructor(){this.handlers=[]}use(n,t,o){return this.handlers.push({fulfilled:n,rejected:t,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(n){this.handlers[n]&&(this.handlers[n]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(n){Y.forEach(this.handlers,function(o){o!==null&&n(o)})}}const Oc={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Hb=typeof URLSearchParams<"u"?URLSearchParams:Lr,Gb=typeof FormData<"u"?FormData:null,Jb=typeof Blob<"u"?Blob:null,Yb={isBrowser:!0,classes:{URLSearchParams:Hb,FormData:Gb,Blob:Jb},protocols:["http","https","file","blob","url","data"]},Or=typeof window<"u"&&typeof document<"u",ur=typeof navigator=="object"&&navigator||void 0,Kb=Or&&(!ur||["ReactNative","NativeScript","NS"].indexOf(ur.product)<0),qb=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",Qb=Or&&window.location.href||"http://localhost",ew=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:Or,hasStandardBrowserEnv:Kb,hasStandardBrowserWebWorkerEnv:qb,navigator:ur,origin:Qb},Symbol.toStringTag,{value:"Module"})),ft={...ew,...Yb};function tw(a,n){return Qa(a,new ft.classes.URLSearchParams,{visitor:function(t,o,i,r){return ft.isNode&&Y.isBuffer(t)?(this.append(o,t.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...n})}function nw(a){return Y.matchAll(/\w+|\[(\w*)]/g,a).map(n=>n[0]==="[]"?"":n[1]||n[0])}function ow(a){const n={},t=Object.keys(a);let o;const i=t.length;let r;for(o=0;o<i;o++)r=t[o],n[r]=a[r];return n}function zc(a){function n(t,o,i,r){let s=t[r++];if(s==="__proto__")return!0;const l=Number.isFinite(+s),c=r>=t.length;return s=!s&&Y.isArray(i)?i.length:s,c?(Y.hasOwnProp(i,s)?i[s]=[i[s],o]:i[s]=o,!l):((!i[s]||!Y.isObject(i[s]))&&(i[s]=[]),n(t,o,i[s],r)&&Y.isArray(i[s])&&(i[s]=ow(i[s])),!l)}if(Y.isFormData(a)&&Y.isFunction(a.entries)){const t={};return Y.forEachEntry(a,(o,i)=>{n(nw(o),i,t,0)}),t}return null}function aw(a,n,t){if(Y.isString(a))try{return(n||JSON.parse)(a),Y.trim(a)}catch(o){if(o.name!=="SyntaxError")throw o}return(t||JSON.stringify)(a)}const Oo={transitional:Oc,adapter:["xhr","http","fetch"],transformRequest:[function(n,t){const o=t.getContentType()||"",i=o.indexOf("application/json")>-1,r=Y.isObject(n);if(r&&Y.isHTMLForm(n)&&(n=new FormData(n)),Y.isFormData(n))return i?JSON.stringify(zc(n)):n;if(Y.isArrayBuffer(n)||Y.isBuffer(n)||Y.isStream(n)||Y.isFile(n)||Y.isBlob(n)||Y.isReadableStream(n))return n;if(Y.isArrayBufferView(n))return n.buffer;if(Y.isURLSearchParams(n))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),n.toString();let l;if(r){if(o.indexOf("application/x-www-form-urlencoded")>-1)return tw(n,this.formSerializer).toString();if((l=Y.isFileList(n))||o.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return Qa(l?{"files[]":n}:n,c&&new c,this.formSerializer)}}return r||i?(t.setContentType("application/json",!1),aw(n)):n}],transformResponse:[function(n){const t=this.transitional||Oo.transitional,o=t&&t.forcedJSONParsing,i=this.responseType==="json";if(Y.isResponse(n)||Y.isReadableStream(n))return n;if(n&&Y.isString(n)&&(o&&!this.responseType||i)){const s=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(n)}catch(l){if(s)throw l.name==="SyntaxError"?Be.from(l,Be.ERR_BAD_RESPONSE,this,null,this.response):l}}return n}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ft.classes.FormData,Blob:ft.classes.Blob},validateStatus:function(n){return n>=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};Y.forEach(["delete","get","head","post","put","patch"],a=>{Oo.headers[a]={}});const iw=Y.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),rw=a=>{const n={};let t,o,i;return a&&a.split(`
337
+ `).forEach(function(s){i=s.indexOf(":"),t=s.substring(0,i).trim().toLowerCase(),o=s.substring(i+1).trim(),!(!t||n[t]&&iw[t])&&(t==="set-cookie"?n[t]?n[t].push(o):n[t]=[o]:n[t]=n[t]?n[t]+", "+o:o)}),n},hl=Symbol("internals");function co(a){return a&&String(a).trim().toLowerCase()}function ga(a){return a===!1||a==null?a:Y.isArray(a)?a.map(ga):String(a)}function sw(a){const n=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=t.exec(a);)n[o[1]]=o[2];return n}const lw=a=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(a.trim());function Oi(a,n,t,o,i){if(Y.isFunction(o))return o.call(this,n,t);if(i&&(n=t),!!Y.isString(n)){if(Y.isString(o))return n.indexOf(o)!==-1;if(Y.isRegExp(o))return o.test(n)}}function cw(a){return a.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(n,t,o)=>t.toUpperCase()+o)}function dw(a,n){const t=Y.toCamelCase(" "+n);["get","set","has"].forEach(o=>{Object.defineProperty(a,o+t,{value:function(i,r,s){return this[o].call(this,n,i,r,s)},configurable:!0})})}let xt=class{constructor(n){n&&this.set(n)}set(n,t,o){const i=this;function r(l,c,d){const u=co(c);if(!u)throw new Error("header name must be a non-empty string");const p=Y.findKey(i,u);(!p||i[p]===void 0||d===!0||d===void 0&&i[p]!==!1)&&(i[p||c]=ga(l))}const s=(l,c)=>Y.forEach(l,(d,u)=>r(d,u,c));if(Y.isPlainObject(n)||n instanceof this.constructor)s(n,t);else if(Y.isString(n)&&(n=n.trim())&&!lw(n))s(rw(n),t);else if(Y.isObject(n)&&Y.isIterable(n)){let l={},c,d;for(const u of n){if(!Y.isArray(u))throw TypeError("Object iterator must return a key-value pair");l[d=u[0]]=(c=l[d])?Y.isArray(c)?[...c,u[1]]:[c,u[1]]:u[1]}s(l,t)}else n!=null&&r(t,n,o);return this}get(n,t){if(n=co(n),n){const o=Y.findKey(this,n);if(o){const i=this[o];if(!t)return i;if(t===!0)return sw(i);if(Y.isFunction(t))return t.call(this,i,o);if(Y.isRegExp(t))return t.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(n,t){if(n=co(n),n){const o=Y.findKey(this,n);return!!(o&&this[o]!==void 0&&(!t||Oi(this,this[o],o,t)))}return!1}delete(n,t){const o=this;let i=!1;function r(s){if(s=co(s),s){const l=Y.findKey(o,s);l&&(!t||Oi(o,o[l],l,t))&&(delete o[l],i=!0)}}return Y.isArray(n)?n.forEach(r):r(n),i}clear(n){const t=Object.keys(this);let o=t.length,i=!1;for(;o--;){const r=t[o];(!n||Oi(this,this[r],r,n,!0))&&(delete this[r],i=!0)}return i}normalize(n){const t=this,o={};return Y.forEach(this,(i,r)=>{const s=Y.findKey(o,r);if(s){t[s]=ga(i),delete t[r];return}const l=n?cw(r):String(r).trim();l!==r&&delete t[r],t[l]=ga(i),o[l]=!0}),this}concat(...n){return this.constructor.concat(this,...n)}toJSON(n){const t=Object.create(null);return Y.forEach(this,(o,i)=>{o!=null&&o!==!1&&(t[i]=n&&Y.isArray(o)?o.join(", "):o)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([n,t])=>n+": "+t).join(`
338
+ `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(n){return n instanceof this?n:new this(n)}static concat(n,...t){const o=new this(n);return t.forEach(i=>o.set(i)),o}static accessor(n){const o=(this[hl]=this[hl]={accessors:{}}).accessors,i=this.prototype;function r(s){const l=co(s);o[l]||(dw(i,s),o[l]=!0)}return Y.isArray(n)?n.forEach(r):r(n),this}};xt.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Y.reduceDescriptors(xt.prototype,({value:a},n)=>{let t=n[0].toUpperCase()+n.slice(1);return{get:()=>a,set(o){this[t]=o}}});Y.freezeMethods(xt);function zi(a,n){const t=this||Oo,o=n||t,i=xt.from(o.headers);let r=o.data;return Y.forEach(a,function(l){r=l.call(t,r,i.normalize(),n?n.status:void 0)}),i.normalize(),r}function Pc(a){return!!(a&&a.__CANCEL__)}function eo(a,n,t){Be.call(this,a??"canceled",Be.ERR_CANCELED,n,t),this.name="CanceledError"}Y.inherits(eo,Be,{__CANCEL__:!0});function jc(a,n,t){const o=t.config.validateStatus;!t.status||!o||o(t.status)?a(t):n(new Be("Request failed with status code "+t.status,[Be.ERR_BAD_REQUEST,Be.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function uw(a){const n=/^([-+\w]{1,25})(:?\/\/|:)/.exec(a);return n&&n[1]||""}function mw(a,n){a=a||10;const t=new Array(a),o=new Array(a);let i=0,r=0,s;return n=n!==void 0?n:1e3,function(c){const d=Date.now(),u=o[r];s||(s=d),t[i]=c,o[i]=d;let p=r,v=0;for(;p!==i;)v+=t[p++],p=p%a;if(i=(i+1)%a,i===r&&(r=(r+1)%a),d-s<n)return;const h=u&&d-u;return h?Math.round(v*1e3/h):void 0}}function pw(a,n){let t=0,o=1e3/n,i,r;const s=(d,u=Date.now())=>{t=u,i=null,r&&(clearTimeout(r),r=null),a(...d)};return[(...d)=>{const u=Date.now(),p=u-t;p>=o?s(d,u):(i=d,r||(r=setTimeout(()=>{r=null,s(i)},o-p)))},()=>i&&s(i)]}const Ma=(a,n,t=3)=>{let o=0;const i=mw(50,250);return pw(r=>{const s=r.loaded,l=r.lengthComputable?r.total:void 0,c=s-o,d=i(c),u=s<=l;o=s;const p={loaded:s,total:l,progress:l?s/l:void 0,bytes:c,rate:d||void 0,estimated:d&&l&&u?(l-s)/d:void 0,event:r,lengthComputable:l!=null,[n?"download":"upload"]:!0};a(p)},t)},vl=(a,n)=>{const t=a!=null;return[o=>n[0]({lengthComputable:t,total:a,loaded:o}),n[1]]},gl=a=>(...n)=>Y.asap(()=>a(...n)),fw=ft.hasStandardBrowserEnv?((a,n)=>t=>(t=new URL(t,ft.origin),a.protocol===t.protocol&&a.host===t.host&&(n||a.port===t.port)))(new URL(ft.origin),ft.navigator&&/(msie|trident)/i.test(ft.navigator.userAgent)):()=>!0,hw=ft.hasStandardBrowserEnv?{write(a,n,t,o,i,r){const s=[a+"="+encodeURIComponent(n)];Y.isNumber(t)&&s.push("expires="+new Date(t).toGMTString()),Y.isString(o)&&s.push("path="+o),Y.isString(i)&&s.push("domain="+i),r===!0&&s.push("secure"),document.cookie=s.join("; ")},read(a){const n=document.cookie.match(new RegExp("(^|;\\s*)("+a+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove(a){this.write(a,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function vw(a){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(a)}function gw(a,n){return n?a.replace(/\/?\/$/,"")+"/"+n.replace(/^\/+/,""):a}function Wc(a,n,t){let o=!vw(n);return a&&(o||t==!1)?gw(a,n):n}const yl=a=>a instanceof xt?{...a}:a;function Mn(a,n){n=n||{};const t={};function o(d,u,p,v){return Y.isPlainObject(d)&&Y.isPlainObject(u)?Y.merge.call({caseless:v},d,u):Y.isPlainObject(u)?Y.merge({},u):Y.isArray(u)?u.slice():u}function i(d,u,p,v){if(Y.isUndefined(u)){if(!Y.isUndefined(d))return o(void 0,d,p,v)}else return o(d,u,p,v)}function r(d,u){if(!Y.isUndefined(u))return o(void 0,u)}function s(d,u){if(Y.isUndefined(u)){if(!Y.isUndefined(d))return o(void 0,d)}else return o(void 0,u)}function l(d,u,p){if(p in n)return o(d,u);if(p in a)return o(void 0,d)}const c={url:r,method:r,data:r,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:l,headers:(d,u,p)=>i(yl(d),yl(u),p,!0)};return Y.forEach(Object.keys({...a,...n}),function(u){const p=c[u]||i,v=p(a[u],n[u],u);Y.isUndefined(v)&&p!==l||(t[u]=v)}),t}const Zc=a=>{const n=Mn({},a);let{data:t,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:r,headers:s,auth:l}=n;n.headers=s=xt.from(s),n.url=Lc(Wc(n.baseURL,n.url,n.allowAbsoluteUrls),a.params,a.paramsSerializer),l&&s.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):"")));let c;if(Y.isFormData(t)){if(ft.hasStandardBrowserEnv||ft.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if((c=s.getContentType())!==!1){const[d,...u]=c?c.split(";").map(p=>p.trim()).filter(Boolean):[];s.setContentType([d||"multipart/form-data",...u].join("; "))}}if(ft.hasStandardBrowserEnv&&(o&&Y.isFunction(o)&&(o=o(n)),o||o!==!1&&fw(n.url))){const d=i&&r&&hw.read(r);d&&s.set(i,d)}return n},yw=typeof XMLHttpRequest<"u",bw=yw&&function(a){return new Promise(function(t,o){const i=Zc(a);let r=i.data;const s=xt.from(i.headers).normalize();let{responseType:l,onUploadProgress:c,onDownloadProgress:d}=i,u,p,v,h,g;function y(){h&&h(),g&&g(),i.cancelToken&&i.cancelToken.unsubscribe(u),i.signal&&i.signal.removeEventListener("abort",u)}let V=new XMLHttpRequest;V.open(i.method.toUpperCase(),i.url,!0),V.timeout=i.timeout;function B(){if(!V)return;const b=xt.from("getAllResponseHeaders"in V&&V.getAllResponseHeaders()),w={data:!l||l==="text"||l==="json"?V.responseText:V.response,status:V.status,statusText:V.statusText,headers:b,config:a,request:V};jc(function(N){t(N),y()},function(N){o(N),y()},w),V=null}"onloadend"in V?V.onloadend=B:V.onreadystatechange=function(){!V||V.readyState!==4||V.status===0&&!(V.responseURL&&V.responseURL.indexOf("file:")===0)||setTimeout(B)},V.onabort=function(){V&&(o(new Be("Request aborted",Be.ECONNABORTED,a,V)),V=null)},V.onerror=function(){o(new Be("Network Error",Be.ERR_NETWORK,a,V)),V=null},V.ontimeout=function(){let m=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const w=i.transitional||Oc;i.timeoutErrorMessage&&(m=i.timeoutErrorMessage),o(new Be(m,w.clarifyTimeoutError?Be.ETIMEDOUT:Be.ECONNABORTED,a,V)),V=null},r===void 0&&s.setContentType(null),"setRequestHeader"in V&&Y.forEach(s.toJSON(),function(m,w){V.setRequestHeader(w,m)}),Y.isUndefined(i.withCredentials)||(V.withCredentials=!!i.withCredentials),l&&l!=="json"&&(V.responseType=i.responseType),d&&([v,g]=Ma(d,!0),V.addEventListener("progress",v)),c&&V.upload&&([p,h]=Ma(c),V.upload.addEventListener("progress",p),V.upload.addEventListener("loadend",h)),(i.cancelToken||i.signal)&&(u=b=>{V&&(o(!b||b.type?new eo(null,a,V):b),V.abort(),V=null)},i.cancelToken&&i.cancelToken.subscribe(u),i.signal&&(i.signal.aborted?u():i.signal.addEventListener("abort",u)));const _=uw(i.url);if(_&&ft.protocols.indexOf(_)===-1){o(new Be("Unsupported protocol "+_+":",Be.ERR_BAD_REQUEST,a));return}V.send(r||null)})},ww=(a,n)=>{const{length:t}=a=a?a.filter(Boolean):[];if(n||t){let o=new AbortController,i;const r=function(d){if(!i){i=!0,l();const u=d instanceof Error?d:this.reason;o.abort(u instanceof Be?u:new eo(u instanceof Error?u.message:u))}};let s=n&&setTimeout(()=>{s=null,r(new Be(`timeout ${n} of ms exceeded`,Be.ETIMEDOUT))},n);const l=()=>{a&&(s&&clearTimeout(s),s=null,a.forEach(d=>{d.unsubscribe?d.unsubscribe(r):d.removeEventListener("abort",r)}),a=null)};a.forEach(d=>d.addEventListener("abort",r));const{signal:c}=o;return c.unsubscribe=()=>Y.asap(l),c}},kw=function*(a,n){let t=a.byteLength;if(t<n){yield a;return}let o=0,i;for(;o<t;)i=o+n,yield a.slice(o,i),o=i},xw=async function*(a,n){for await(const t of Ew(a))yield*kw(t,n)},Ew=async function*(a){if(a[Symbol.asyncIterator]){yield*a;return}const n=a.getReader();try{for(;;){const{done:t,value:o}=await n.read();if(t)break;yield o}}finally{await n.cancel()}},bl=(a,n,t,o)=>{const i=xw(a,n);let r=0,s,l=c=>{s||(s=!0,o&&o(c))};return new ReadableStream({async pull(c){try{const{done:d,value:u}=await i.next();if(d){l(),c.close();return}let p=u.byteLength;if(t){let v=r+=p;t(v)}c.enqueue(new Uint8Array(u))}catch(d){throw l(d),d}},cancel(c){return l(c),i.return()}},{highWaterMark:2})},ei=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",Xc=ei&&typeof ReadableStream=="function",Vw=ei&&(typeof TextEncoder=="function"?(a=>n=>a.encode(n))(new TextEncoder):async a=>new Uint8Array(await new Response(a).arrayBuffer())),Hc=(a,...n)=>{try{return!!a(...n)}catch{return!1}},Sw=Xc&&Hc(()=>{let a=!1;const n=new Request(ft.origin,{body:new ReadableStream,method:"POST",get duplex(){return a=!0,"half"}}).headers.has("Content-Type");return a&&!n}),wl=64*1024,mr=Xc&&Hc(()=>Y.isReadableStream(new Response("").body)),Ba={stream:mr&&(a=>a.body)};ei&&(a=>{["text","arrayBuffer","blob","formData","stream"].forEach(n=>{!Ba[n]&&(Ba[n]=Y.isFunction(a[n])?t=>t[n]():(t,o)=>{throw new Be(`Response type '${n}' is not supported`,Be.ERR_NOT_SUPPORT,o)})})})(new Response);const Cw=async a=>{if(a==null)return 0;if(Y.isBlob(a))return a.size;if(Y.isSpecCompliantForm(a))return(await new Request(ft.origin,{method:"POST",body:a}).arrayBuffer()).byteLength;if(Y.isArrayBufferView(a)||Y.isArrayBuffer(a))return a.byteLength;if(Y.isURLSearchParams(a)&&(a=a+""),Y.isString(a))return(await Vw(a)).byteLength},_w=async(a,n)=>{const t=Y.toFiniteNumber(a.getContentLength());return t??Cw(n)},Nw=ei&&(async a=>{let{url:n,method:t,data:o,signal:i,cancelToken:r,timeout:s,onDownloadProgress:l,onUploadProgress:c,responseType:d,headers:u,withCredentials:p="same-origin",fetchOptions:v}=Zc(a);d=d?(d+"").toLowerCase():"text";let h=ww([i,r&&r.toAbortSignal()],s),g;const y=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let V;try{if(c&&Sw&&t!=="get"&&t!=="head"&&(V=await _w(u,o))!==0){let w=new Request(n,{method:"POST",body:o,duplex:"half"}),I;if(Y.isFormData(o)&&(I=w.headers.get("content-type"))&&u.setContentType(I),w.body){const[N,x]=vl(V,Ma(gl(c)));o=bl(w.body,wl,N,x)}}Y.isString(p)||(p=p?"include":"omit");const B="credentials"in Request.prototype;g=new Request(n,{...v,signal:h,method:t.toUpperCase(),headers:u.normalize().toJSON(),body:o,duplex:"half",credentials:B?p:void 0});let _=await fetch(g,v);const b=mr&&(d==="stream"||d==="response");if(mr&&(l||b&&y)){const w={};["status","statusText","headers"].forEach(T=>{w[T]=_[T]});const I=Y.toFiniteNumber(_.headers.get("content-length")),[N,x]=l&&vl(I,Ma(gl(l),!0))||[];_=new Response(bl(_.body,wl,N,()=>{x&&x(),y&&y()}),w)}d=d||"text";let m=await Ba[Y.findKey(Ba,d)||"text"](_,a);return!b&&y&&y(),await new Promise((w,I)=>{jc(w,I,{data:m,headers:xt.from(_.headers),status:_.status,statusText:_.statusText,config:a,request:g})})}catch(B){throw y&&y(),B&&B.name==="TypeError"&&/Load failed|fetch/i.test(B.message)?Object.assign(new Be("Network Error",Be.ERR_NETWORK,a,g),{cause:B.cause||B}):Be.from(B,B&&B.code,a,g)}}),pr={http:jb,xhr:bw,fetch:Nw};Y.forEach(pr,(a,n)=>{if(a){try{Object.defineProperty(a,"name",{value:n})}catch{}Object.defineProperty(a,"adapterName",{value:n})}});const kl=a=>`- ${a}`,Tw=a=>Y.isFunction(a)||a===null||a===!1,Gc={getAdapter:a=>{a=Y.isArray(a)?a:[a];const{length:n}=a;let t,o;const i={};for(let r=0;r<n;r++){t=a[r];let s;if(o=t,!Tw(t)&&(o=pr[(s=String(t)).toLowerCase()],o===void 0))throw new Be(`Unknown adapter '${s}'`);if(o)break;i[s||"#"+r]=o}if(!o){const r=Object.entries(i).map(([l,c])=>`adapter ${l} `+(c===!1?"is not supported by the environment":"is not available in the build"));let s=n?r.length>1?`since :
339
+ `+r.map(kl).join(`
340
+ `):" "+kl(r[0]):"as no adapter specified";throw new Be("There is no suitable adapter to dispatch the request "+s,"ERR_NOT_SUPPORT")}return o},adapters:pr};function Pi(a){if(a.cancelToken&&a.cancelToken.throwIfRequested(),a.signal&&a.signal.aborted)throw new eo(null,a)}function xl(a){return Pi(a),a.headers=xt.from(a.headers),a.data=zi.call(a,a.transformRequest),["post","put","patch"].indexOf(a.method)!==-1&&a.headers.setContentType("application/x-www-form-urlencoded",!1),Gc.getAdapter(a.adapter||Oo.adapter)(a).then(function(o){return Pi(a),o.data=zi.call(a,a.transformResponse,o),o.headers=xt.from(o.headers),o},function(o){return Pc(o)||(Pi(a),o&&o.response&&(o.response.data=zi.call(a,a.transformResponse,o.response),o.response.headers=xt.from(o.response.headers))),Promise.reject(o)})}const Jc="1.11.0",ti={};["object","boolean","number","function","string","symbol"].forEach((a,n)=>{ti[a]=function(o){return typeof o===a||"a"+(n<1?"n ":" ")+a}});const El={};ti.transitional=function(n,t,o){function i(r,s){return"[Axios v"+Jc+"] Transitional option '"+r+"'"+s+(o?". "+o:"")}return(r,s,l)=>{if(n===!1)throw new Be(i(s," has been removed"+(t?" in "+t:"")),Be.ERR_DEPRECATED);return t&&!El[s]&&(El[s]=!0),n?n(r,s,l):!0}};ti.spelling=function(n){return(t,o)=>!0};function Mw(a,n,t){if(typeof a!="object")throw new Be("options must be an object",Be.ERR_BAD_OPTION_VALUE);const o=Object.keys(a);let i=o.length;for(;i-- >0;){const r=o[i],s=n[r];if(s){const l=a[r],c=l===void 0||s(l,r,a);if(c!==!0)throw new Be("option "+r+" must be "+c,Be.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new Be("Unknown option "+r,Be.ERR_BAD_OPTION)}}const ya={assertOptions:Mw,validators:ti},Xt=ya.validators;let Nn=class{constructor(n){this.defaults=n||{},this.interceptors={request:new fl,response:new fl}}async request(n,t){try{return await this._request(n,t)}catch(o){if(o instanceof Error){let i={};Error.captureStackTrace?Error.captureStackTrace(i):i=new Error;const r=i.stack?i.stack.replace(/^.+\n/,""):"";try{o.stack?r&&!String(o.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(o.stack+=`
341
+ `+r):o.stack=r}catch{}}throw o}}_request(n,t){typeof n=="string"?(t=t||{},t.url=n):t=n||{},t=Mn(this.defaults,t);const{transitional:o,paramsSerializer:i,headers:r}=t;o!==void 0&&ya.assertOptions(o,{silentJSONParsing:Xt.transitional(Xt.boolean),forcedJSONParsing:Xt.transitional(Xt.boolean),clarifyTimeoutError:Xt.transitional(Xt.boolean)},!1),i!=null&&(Y.isFunction(i)?t.paramsSerializer={serialize:i}:ya.assertOptions(i,{encode:Xt.function,serialize:Xt.function},!0)),t.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ya.assertOptions(t,{baseUrl:Xt.spelling("baseURL"),withXsrfToken:Xt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&Y.merge(r.common,r[t.method]);r&&Y.forEach(["delete","get","head","post","put","patch","common"],g=>{delete r[g]}),t.headers=xt.concat(s,r);const l=[];let c=!0;this.interceptors.request.forEach(function(y){typeof y.runWhen=="function"&&y.runWhen(t)===!1||(c=c&&y.synchronous,l.unshift(y.fulfilled,y.rejected))});const d=[];this.interceptors.response.forEach(function(y){d.push(y.fulfilled,y.rejected)});let u,p=0,v;if(!c){const g=[xl.bind(this),void 0];for(g.unshift(...l),g.push(...d),v=g.length,u=Promise.resolve(t);p<v;)u=u.then(g[p++],g[p++]);return u}v=l.length;let h=t;for(p=0;p<v;){const g=l[p++],y=l[p++];try{h=g(h)}catch(V){y.call(this,V);break}}try{u=xl.call(this,h)}catch(g){return Promise.reject(g)}for(p=0,v=d.length;p<v;)u=u.then(d[p++],d[p++]);return u}getUri(n){n=Mn(this.defaults,n);const t=Wc(n.baseURL,n.url,n.allowAbsoluteUrls);return Lc(t,n.params,n.paramsSerializer)}};Y.forEach(["delete","get","head","options"],function(n){Nn.prototype[n]=function(t,o){return this.request(Mn(o||{},{method:n,url:t,data:(o||{}).data}))}});Y.forEach(["post","put","patch"],function(n){function t(o){return function(r,s,l){return this.request(Mn(l||{},{method:n,headers:o?{"Content-Type":"multipart/form-data"}:{},url:r,data:s}))}}Nn.prototype[n]=t(),Nn.prototype[n+"Form"]=t(!0)});let Bw=class Yc{constructor(n){if(typeof n!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(r){t=r});const o=this;this.promise.then(i=>{if(!o._listeners)return;let r=o._listeners.length;for(;r-- >0;)o._listeners[r](i);o._listeners=null}),this.promise.then=i=>{let r;const s=new Promise(l=>{o.subscribe(l),r=l}).then(i);return s.cancel=function(){o.unsubscribe(r)},s},n(function(r,s,l){o.reason||(o.reason=new eo(r,s,l),t(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(n){if(this.reason){n(this.reason);return}this._listeners?this._listeners.push(n):this._listeners=[n]}unsubscribe(n){if(!this._listeners)return;const t=this._listeners.indexOf(n);t!==-1&&this._listeners.splice(t,1)}toAbortSignal(){const n=new AbortController,t=o=>{n.abort(o)};return this.subscribe(t),n.signal.unsubscribe=()=>this.unsubscribe(t),n.signal}static source(){let n;return{token:new Yc(function(i){n=i}),cancel:n}}};function Iw(a){return function(t){return a.apply(null,t)}}function Fw(a){return Y.isObject(a)&&a.isAxiosError===!0}const fr={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fr).forEach(([a,n])=>{fr[n]=a});function Kc(a){const n=new Nn(a),t=_c(Nn.prototype.request,n);return Y.extend(t,Nn.prototype,n,{allOwnKeys:!0}),Y.extend(t,n,null,{allOwnKeys:!0}),t.create=function(i){return Kc(Mn(a,i))},t}const Je=Kc(Oo);Je.Axios=Nn;Je.CanceledError=eo;Je.CancelToken=Bw;Je.isCancel=Pc;Je.VERSION=Jc;Je.toFormData=Qa;Je.AxiosError=Be;Je.Cancel=Je.CanceledError;Je.all=function(n){return Promise.all(n)};Je.spread=Iw;Je.isAxiosError=Fw;Je.mergeConfig=Mn;Je.AxiosHeaders=xt;Je.formToJSON=a=>zc(Y.isHTMLForm(a)?new FormData(a):a);Je.getAdapter=Gc.getAdapter;Je.HttpStatusCode=fr;Je.default=Je;const{Axios:YS,AxiosError:KS,CanceledError:qS,isCancel:QS,CancelToken:eC,VERSION:tC,all:nC,Cancel:oC,isAxiosError:aC,spread:iC,toFormData:rC,AxiosHeaders:sC,HttpStatusCode:lC,formToJSON:cC,getAdapter:dC,mergeConfig:uC}=Je;class zr{constructor(n="/api/v1"){this.eventSource=null,this.progressCallbacks=new Map,this.api=Je.create({baseURL:n,headers:{"Content-Type":"application/json",Accept:"application/json"}}),this.api.interceptors.request.use(t=>{const o=this.getAuthToken();return o&&(t.headers.Authorization=`Bearer ${o}`),t}),this.api.interceptors.response.use(t=>t,t=>{var o;return(o=t.response)==null||o.status,Promise.reject(t)})}async createJob(n){try{const t=await this.api.post("/video/jobs",n);return this.normalizeJob(t.data.data)}catch(t){throw t}}async createRenderJob(n){try{const t=await this.api.post("/video/jobs/render",n);return this.normalizeJob(t.data.data)}catch(t){throw t}}async pollRenderJob(n,t,o=3e3,i=6e5){const r=Date.now();return new Promise((s,l)=>{const c=setInterval(async()=>{try{const d=await this.getJob(n);t==null||t(d.progress,d.status),d.status==="completed"?(clearInterval(c),s(d)):d.status==="failed"?(clearInterval(c),l(new Error(d.error_message??"Render job failed"))):Date.now()-r>i&&(clearInterval(c),l(new Error("Render job timed out")))}catch(d){clearInterval(c),l(d)}},o)})}async getJob(n){try{const t=await this.api.get(`/video/jobs/${n}`);return this.normalizeJob(t.data.data)}catch(t){throw t}}async listJobs(n){try{return(await this.api.get("/video/jobs",{params:n})).data}catch(t){throw t}}async cancelJob(n){try{await this.api.delete(`/video/jobs/${n}`),this.unsubscribeFromProgress(n)}catch(t){throw t}}async retryJob(n){try{const t=await this.api.post(`/video/jobs/${n}/retry`);return this.normalizeJob(t.data.data)}catch(t){throw t}}subscribeToProgress(n,t){this.progressCallbacks.set(n,t),this.eventSource||this.initializeEventSource(),this.eventSource||this.pollProgress(n)}unsubscribeFromProgress(n){this.progressCallbacks.delete(n),this.progressCallbacks.size===0&&this.eventSource&&(this.eventSource.close(),this.eventSource=null)}initializeEventSource(){try{const n=this.getAuthToken(),t=`/api/v1/video/jobs/events${n?`?token=${n}`:""}`;this.eventSource=new EventSource(t),this.eventSource.addEventListener("progress",o=>{const i=JSON.parse(o.data),r=this.progressCallbacks.get(i.jobId);r&&r(i.progress)}),this.eventSource.addEventListener("complete",o=>{const i=JSON.parse(o.data),r=this.progressCallbacks.get(i.jobId);r&&(r(100),this.unsubscribeFromProgress(i.jobId))}),this.eventSource.addEventListener("error",o=>{this.progressCallbacks.forEach((i,r)=>{this.pollProgress(r)})})}catch{}}async pollProgress(n){const t=setInterval(async()=>{try{const o=await this.getJob(n),i=this.progressCallbacks.get(n);i&&i(o.progress),(o.status==="completed"||o.status==="failed")&&(clearInterval(t),this.unsubscribeFromProgress(n))}catch{clearInterval(t)}},2e3)}getAuthToken(){const n=localStorage.getItem("auth_token");if(n)return n;const t=document.cookie.split(";");for(const o of t){const[i,r]=o.trim().split("=");if(i==="auth_token")return decodeURIComponent(r)}return null}async downloadVideo(n){try{return(await this.api.get(`/video/jobs/${n}/download`,{responseType:"blob"})).data}catch(t){throw t}}async getThumbnail(n,t=0){try{const o=await this.api.get(`/video/jobs/${n}/thumbnail`,{params:{time:t},responseType:"blob"});return URL.createObjectURL(o.data)}catch(o){throw o}}normalizeJob(n){const t=n,o={...t,user_id:t.user_id??t.userId??"",source_media_id:t.source_media_id??t.sourceMediaId??"",created_at:t.created_at??t.createdAt??"",updated_at:t.updated_at??t.updatedAt??""},i=t.output_media_id??t.outputMediaId;typeof i=="string"&&i!==""&&(o.output_media_id=i);const r=t.error_message??t.errorMessage;typeof r=="string"&&r!==""&&(o.error_message=r);const s=t.started_at??t.startedAt;typeof s=="string"&&s!==""&&(o.started_at=s);const l=t.completed_at??t.completedAt;return typeof l=="string"&&l!==""&&(o.completed_at=l),o}}new zr;const $w={key:0,class:"mobile-layout"},Rw={class:"mobile-toolbar"},Dw={class:"mobile-toolbar-left"},Aw=["aria-label"],Uw={class:"mobile-toolbar-right"},Lw=["disabled"],Ow=["disabled"],zw={class:"preview-section"},Pw={key:0,class:"mobile-export-overlay"},jw={class:"mobile-export-progress"},Ww={class:"mobile-export-bar"},Zw={class:"mobile-timeline-zoom"},Xw={class:"mobile-edit-strip"},Hw={class:"mobile-selection-summary"},Gw={class:"mobile-selection-title"},Jw={class:"mobile-selection-meta"},Yw={class:"mobile-readout-row"},Kw=["disabled"],qw={class:"mobile-readout-grid"},Qw={class:"mobile-readout-chip","data-testid":"mobile-playhead-readout"},e2={class:"mobile-readout-chip","data-testid":"mobile-clip-in-readout"},t2={class:"mobile-readout-chip","data-testid":"mobile-clip-out-readout"},n2={class:"mobile-readout-chip","data-testid":"mobile-duration-readout"},o2=["disabled"],a2={class:"mobile-speed-strip"},i2={class:"mobile-speed-chips"},r2=["data-testid","onClick"],s2={class:"mobile-edit-actions"},l2=["disabled"],c2=["disabled"],d2=["disabled"],u2=["disabled"],m2=["disabled"],p2={class:"mobile-action-sheet-header"},f2={class:"mobile-action-sheet-title"},h2={class:"mobile-action-sheet-subtitle"},v2={class:"mobile-action-sheet-actions"},g2=["disabled"],y2=["disabled"],b2=["disabled"],w2=["disabled"],k2=["disabled"],x2={key:1,class:"desktop-layout"},E2={class:"desktop-main-row"},V2={class:"preview-panel"},S2={class:"fit-toggle"},C2={class:"editor-content"},_2={class:"editor-tabs"},N2={class:"tab-header"},T2=["onClick"],M2={class:"tab-content-area"},B2={class:"filter-controls"},I2={class:"text-controls"},F2={class:"transition-controls"},$2={class:"audio-controls"},R2={class:"adjustments-controls"},D2={key:1,class:"no-filter-selected"},A2={class:"export-controls"},U2={key:0,"data-testid":"video-export-status-completed"},L2={key:1,"data-testid":"video-export-status-message",class:"export-status-message"},O2={class:"desktop-timeline-row"},z2={class:"timeline-zoom"},P2=["value"],j2={class:"zoom-readout"},W2={key:0,class:"dev-editor-controls","data-testid":"video-editor-dev-controls"},Z2={class:"dev-editor-row"},X2={class:"dev-editor-field"},H2={class:"dev-editor-field"},G2=["disabled"],J2=["disabled"],Y2=["disabled"],K2={class:"dev-editor-row"},q2={class:"dev-editor-field dev-editor-field--wide"},Q2=["value"],ek=["disabled"],tk=["disabled"],nk=["disabled"],ok=["disabled"],ak=e.defineComponent({__name:"VideoEditor",props:{mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},workflowMode:{default:"full"},featureFlags:{},clientExportThreshold:{default:20},maxDuration:{default:300},serverRenderEndpoint:{default:null}},emits:["recipe-generated","export-started","draft-saved","video-exported","thumbnail-selected","server-render-started","server-render-progress","server-render-completed","server-render-failed","close"],setup(a,{expose:n,emit:t}){const o=a,i=t,r=e.computed(()=>{if(!o.media||typeof o.media!="object")return;const f=o.media.uuid??o.media.id;return typeof f=="string"&&f.trim()!==""?f.trim():void 0}),s=e.computed(()=>{const f=typeof o.mediaUuid=="string"?o.mediaUuid.trim():"";return f!==""?f:r.value??`temp-${Date.now()}`}),l=e.ref(typeof window<"u"?window.innerWidth<768:!1),c=e.ref("filters"),d=e.ref("filters"),u=e.computed(()=>{const f=o.workflowMode==="uploader"?{filters:!0,adjustments:!0,text:!1,transitions:!1,audio:!1,export:!1}:{filters:!0,adjustments:!0,text:!0,transitions:!0,audio:!0,export:!0},k=o.featureFlags;return k?{filters:typeof k.filters=="boolean"?k.filters:f.filters,adjustments:typeof k.adjustments=="boolean"?k.adjustments:f.adjustments,text:typeof k.text=="boolean"?k.text:f.text,transitions:typeof k.transitions=="boolean"?k.transitions:f.transitions,audio:typeof k.audio=="boolean"?k.audio:f.audio,export:typeof k.export=="boolean"?k.export:f.export}:f}),p=e.computed(()=>l.value?c.value:d.value),v=e.computed(()=>p.value==="filters"||V.value),h=e.computed(()=>p.value!=="filters"&&!V.value),g=e.ref(null),y=e.ref(null),V=e.ref(!1),B=e.computed(()=>l.value?g.value:y.value);function _(f){return f==="contain"||f==="cover"||f==="none"}function b(f){if(!(f!=null&&f.metadata))return null;const k=f.metadata.fit_mode;return _(k)?k:null}const m=e.shallowRef(null),w=e.ref(null),I=e.ref(b(o.initialRecipe)??"contain"),N=e.ref(null),x=e.ref(null),T=e.ref(null),H=e.ref(!1),E=new Map,R=e.ref([]),A=e.ref([]),P=e.ref([]),M=e.ref([]),j=e.ref(1),U=()=>{l.value=window.innerWidth<768},S=[{id:"filters",label:"Filters",icon:fn},{id:"adjustments",label:"Adjust",icon:fm},{id:"text",label:"Text",icon:"text-outline"},{id:"transitions",label:"Transitions",icon:"swap-horizontal-outline"},{id:"audio",label:"Audio",icon:"musical-notes-outline"},{id:"export",label:"Export",icon:So}],F=[{id:"filters",label:"Filters"},{id:"adjustments",label:"Adjustments"},{id:"text",label:"Text"},{id:"transitions",label:"Transitions"},{id:"audio",label:"Audio"},{id:"export",label:"Export"}],J=e.computed(()=>S.filter(f=>u.value[f.id])),G=e.computed(()=>F.filter(f=>u.value[f.id])),Q=e.computed(()=>{var f,k;return((f=G.value[0])==null?void 0:f.id)??((k=J.value[0])==null?void 0:k.id)??"filters"});e.watch(u,f=>{f[c.value]||(c.value=Q.value),f[d.value]||(d.value=Q.value)},{immediate:!0,deep:!0}),e.watch(Q,f=>{u.value[c.value]||(c.value=f),u.value[d.value]||(d.value=f)},{immediate:!0}),e.watch(u,f=>{f.export||(c.value==="export"&&(c.value=Q.value),d.value==="export"&&(d.value=Q.value))},{immediate:!0,deep:!0});const ge=e.computed(()=>typeof window>"u"?!1:window.__MEDIABLES_EDITOR_DEV__===!0),be=Xl(),{currentFrame:te,playheadPosition:$,timelineClips:O,totalDuration:me,hasChanges:ne,isPlaying:ee,selectedClip:pe,zoomLevel:ae,playbackSpeed:ue,handleTrim:we,handleSplit:oe,handleClipSelect:se,splitAtPlayhead:ke,deleteSelectedClip:Se,duplicateSelectedClip:ut,setZoomLevel:Ze,moveClip:Vt,setFilters:He,setTextOverlays:nt,setAudioTracks:St,saveDraft:$t,clearHasChanges:st,resetChanges:yt,generateRecipe:le,zoomIn:xe,zoomOut:Ee,fitToWindow:Oe,togglePlayback:C,setPlaying:L,seekTo:X,frameForward:K,frameBackward:ce,skipToStart:fe,skipToEnd:_e,setPlaybackSpeed:Fe,updateSourceDuration:Me,undo:De,redo:Qe,canUndo:ht,canRedo:Ot}=Zy(s.value,o.initialRecipe,o.media),{videoCompatibleFilters:to,activeFilters:et,selectedFilter:Kr,previewFilter:zo,previewFilterEffect:qr,applyFilter:Qr,updateFilterParams:ud,removeFilter:md,clearAllFilters:es,setActiveFilters:pd}=tb();function no(f){var W,q;const k=((W=pe.value)==null?void 0:W.id)??((q=O.value[0])==null?void 0:q.id);k&&(H.value=!0,typeof f=="object"&&f.id?Qr(f.id):typeof f=="string"&&Qr(f),He(et.value),m.value?m.value.setClipFilters(k,et.value):E.set(k,[...et.value]),se(k),H.value=!1,jt())}function fd(){var k,W;const f=((k=pe.value)==null?void 0:k.id)??((W=O.value[0])==null?void 0:W.id);f&&se(f)}function ts(f){const k=et.value.find(W=>W.filterId===f);k&&md(k.id)}const oo=e.computed(()=>to.value.map(k=>{var q;const W=[];if(k.controls&&k.controls.length>0)for(const de of k.controls){const ie=de.type;if(ie==="button"||ie==="text"||ie==="range")continue;const re={id:de.property||de.id,label:de.label||de.id,type:ie,default:de.default??(ie==="toggle"?!1:ie==="color"?"#ffffff":0)};ie==="slider"&&(re.min=de.min??0,re.max=de.max??1,re.step=de.step??.01),ie==="select"&&de.options&&(re.options=de.options),W.push(re)}else if(k.paramRanges){const de=Object.entries(k.paramRanges);for(const[ie,re]of de){const Ae=ie.replace(/[-_]/g," ").replace(/\b\w/g,Wt=>Wt.toUpperCase()),vt=(q=k.defaultParams)==null?void 0:q[ie],tn=(re.min+re.max)/2;W.push({id:ie,label:Ae,min:re.min,max:re.max,step:re.step??.01,default:typeof vt=="number"?vt:tn})}}return{id:k.id,name:k.name,category:k.category,params:W}})),$n=e.ref("0.00"),Rn=e.ref("0.00"),rn=e.ref("");e.watch(oo,f=>{if(f.length===0){rn.value="";return}f.some(W=>W.id===rn.value)||(rn.value=f[0].id)},{immediate:!0});const ot=e.ref(!1),Xe=e.ref(0),Qt=e.ref(!1),We=e.ref(null),Rt=e.ref(null);let Po=null,Mt=!1,en=null;const ii=e.computed(()=>{const f=new Map;return et.value.forEach(k=>f.set(k.filterId,k)),f}),hd=e.computed(()=>{var f,k;return te.value?te.value:((f=o.media)==null?void 0:f.thumbnail_url)||((k=o.media)==null?void 0:k.url)}),zt=e.ref("");e.watch(()=>{var f,k;return{file:(f=o.media)==null?void 0:f.file,url:(k=o.media)==null?void 0:k.url}},(f,k,W)=>{var de,ie;const q=zt.value;W(()=>{q&&q.startsWith("blob:")&&URL.revokeObjectURL(q)}),(de=o.media)!=null&&de.file?zt.value=URL.createObjectURL(o.media.file):(ie=o.media)!=null&&ie.url?zt.value=o.media.url:zt.value=""},{immediate:!0}),e.onUnmounted(()=>{zt.value&&zt.value.startsWith("blob:")&&URL.revokeObjectURL(zt.value)});const ri=e.computed(()=>zt.value),ns=e.computed(()=>{if(!o.media)return null;const{file:f,...k}=o.media;return{...k,url:zt.value}}),os=e.computed(()=>{var k;const f=(k=o.media)==null?void 0:k.url;return!!(f&&/^https?:/i.test(f))}),as=e.computed(()=>et.value),is=e.computed(()=>$.value),si=e.computed(()=>!!pe.value&&$.value>0),li=e.computed(()=>!!pe.value&&O.value.length>1),rs=e.computed(()=>!!pe.value),sn=e.ref(!0),vd=[.5,1,1.5,2],jo=e.computed(()=>{const f=new Set([0,Bt.value]);for(const k of O.value)f.add(k.timelineStart),f.add(k.timelineEnd);return Array.from(f).filter(k=>Number.isFinite(k)).sort((k,W)=>k-W)}),gd=e.computed(()=>jo.value.some(f=>f<$.value-.001)),yd=e.computed(()=>jo.value.some(f=>f>$.value+.001)),Wo=e.ref(!1),Zo=e.ref(null);function ln(f){if(!Number.isFinite(f)||f<0)return"0:00";const k=Math.floor(f/60),W=Math.floor(f%60);return`${k}:${W.toString().padStart(2,"0")}`}const bd=e.computed(()=>{var W;const f=pe.value??O.value[0];if(!f)return"No clip selected";const k=(W=f.label)==null?void 0:W.trim();return k&&k.length>0?k:`Clip ${f.id.slice(-4)}`}),wd=e.computed(()=>{const f=pe.value??O.value[0];if(!f)return"Tap a clip to start editing";const k=Math.max(0,f.timelineEnd-f.timelineStart);return`${ln(f.timelineStart)} - ${ln(f.timelineEnd)} • ${k.toFixed(1)}s`});function ss(f){return!Number.isFinite(f)||f<0?"0.0s":f<60?`${f.toFixed(1)}s`:ln(f)}const kd=e.computed(()=>ln($.value)),xd=e.computed(()=>{const f=pe.value??O.value[0];return f?ln(f.sourceIn):"0:00"}),Ed=e.computed(()=>{const f=pe.value??O.value[0];return f?ln(f.sourceOut):"0:00"}),Vd=e.computed(()=>{const f=pe.value??O.value[0];return f?ss(f.timelineEnd-f.timelineStart):"0.0s"}),ci=e.computed(()=>Zo.value===null?pe.value??O.value[0]??null:O.value.find(f=>f.id===Zo.value)??null),Sd=e.computed(()=>{var W;const f=ci.value;if(!f)return"Clip actions";const k=(W=f.label)==null?void 0:W.trim();return k&&k.length>0?k:`Clip ${f.id.slice(-4)}`}),Cd=e.computed(()=>{const f=ci.value;return f?`${ln(f.timelineStart)} - ${ln(f.timelineEnd)} • ${ss(f.timelineEnd-f.timelineStart)}`:"Choose an action"}),di=e.ref(0),Bt=e.computed(()=>{try{const f=me.value??me;return f&&typeof f=="number"&&f>0?f:di.value}catch{return di.value}}),Dn=e.ref(),ui=e.ref(),mi=e.ref(),pi=e.ref(),Xo=e.ref(0),vn=e.ref(!1);let bt=null,Pt=null;e.watch(Bt,f=>{var W;if(vn.value||!f||f<=0)return;const k=Xo.value||((W=Dn.value)==null?void 0:W.clientWidth)||0;k>0&&(vn.value=!0,Oe(k))}),e.watch(Xo,f=>{if(vn.value||!f||f<=0)return;Bt.value>0&&(vn.value=!0,Oe(f))}),e.watch(l,f=>{f||gn()}),e.watch(()=>{var f;return(f=ci.value)==null?void 0:f.id},f=>{Wo.value&&!f&&gn()});function An(f){return Number.isFinite(f)?f.toFixed(2):"0.00"}function ls(f){const k=Number(f);return Number.isFinite(k)?k:null}function _d(f){f&&($n.value=An(f.sourceIn),Rn.value=An(f.sourceOut))}e.watch(()=>{var f,k,W;return[(f=pe.value)==null?void 0:f.id,(k=pe.value)==null?void 0:k.sourceIn,(W=pe.value)==null?void 0:W.sourceOut]},()=>{_d(pe.value)},{immediate:!0});function cs(f){const k=pe.value;if(!k)return;const W=1/30,q=k.sourceMinIn??0,de=k.sourceMaxOut??Bt.value,ie=k.sourceIn+($.value-k.timelineStart);if(f==="start"){const Ae=Math.max(q,Math.min(ie,k.sourceOut-W));$n.value=An(Ae);return}const re=Math.max(k.sourceIn+W,Math.min(ie,de));Rn.value=An(re)}function Nd(){const f=pe.value;if(!f)return;const k=ls($n.value),W=ls(Rn.value);if(k===null||W===null)return;const q=1/30,de=f.sourceMinIn??0,ie=f.sourceMaxOut??Bt.value,re=Math.max(de,Math.min(k,ie-q)),Ae=Math.max(re+q,Math.min(W,ie));we(f.id,"start",re),we(f.id,"end",Ae),$n.value=An(re),Rn.value=An(Ae),pe.value&&X(pe.value.timelineStart)}function Td(){rn.value.trim()!==""&&no(rn.value)}function Md(){var f;es(),He(et.value),(f=pe.value)!=null&&f.id&&(m.value?m.value.setClipFilters(pe.value.id,et.value):E.set(pe.value.id,[...et.value])),jt()}function ds(f,k,W){var de,ie;const q=et.value.find(re=>re.filterId===f);q?(q.params={...q.params,[k]:W},He(et.value),m.value&&((de=pe.value)!=null&&de.id)?m.value.setClipFilters(pe.value.id,et.value):(ie=pe.value)!=null&&ie.id&&E.set(pe.value.id,[...et.value]),jt(),fd()):zo.value&&zo.value.filterId===f&&(zo.value.params={...zo.value.params||{},[k]:W})}function us(f){X(f)}function ms(f){!f||!Number.isFinite(f.timestamp)||X(f.timestamp)}function ps(f){L(f)}function Ho(f){!Number.isFinite(f)||f<=0||(di.value=f,Me(f))}function gn(){Wo.value=!1,Zo.value=null}function Bd(f){l.value&&(Zo.value=f,Wo.value=!0)}function fi(f){var q,de,ie,re;const k=((q=pe.value)==null?void 0:q.id)??((de=O.value[0])==null?void 0:de.id)??null;se(f),(((ie=pe.value)==null?void 0:ie.id)??((re=O.value[0])==null?void 0:re.id)??null)!==k&&be.selection()}function fs(f){fi(f),Bd(f)}function hs(f){f&&be.selection()}function vs(){sn.value=!sn.value,be.selection()}function gs(){const f=jo.value.filter(W=>W<$.value-.001),k=f.length>0?f[f.length-1]:0;X(k)}function ys(){const f=jo.value.find(k=>k>$.value+.001);X(f??Bt.value)}function hi(){De()}function vi(){Qe()}function Go(){const f=O.value.length;ke(),O.value.length>f&&(be.success(),gn())}function bs(f){const k=O.value.length;oe(f),O.value.length>k&&be.success()}function gi(){const f=O.value.length;ut(),O.value.length>f&&(be.selection(),gn())}function yi(){const f=O.value.length;Se(),O.value.length<f&&(be.error(),gn())}function Id(f){const k=ue.value;Fe(f),ue.value!==k&&be.selection()}function Fd(f){return f instanceof HTMLElement?f.closest('input, textarea, select, button, [contenteditable="true"]')!==null:!1}function ws(f){if(l.value||Fd(f.target))return;const k=f.key.toLowerCase(),W=f.metaKey||f.ctrlKey;if(f.code==="Space"){f.preventDefault(),C();return}if(!W&&k==="s"){f.preventDefault(),Go();return}if(k==="arrowleft"){f.preventDefault(),ce();return}if(k==="arrowright"){f.preventDefault(),K();return}if(k==="home"){f.preventDefault(),fe();return}if(k==="end"){f.preventDefault(),_e();return}if(!W&&k==="["){f.preventDefault(),gs();return}if(!W&&k==="]"){f.preventDefault(),ys();return}if(W&&k==="z"&&f.shiftKey){f.preventDefault(),vi();return}W&&k==="z"&&(f.preventDefault(),hi())}function $d(){var k;const f=Xo.value||((k=Dn.value)==null?void 0:k.clientWidth)||800;Oe(f)}function bi(f){vn.value=!0,Ze(f)}function Rd(){vn.value=!0,xe()}function Dd(){vn.value=!0,Ee()}function Ad(f){const k=f.target,W=Number(k.value);bi(W)}function ks(f){const k=Math.min(600,Math.max(10,ae.value+f));bi(k)}function wi(){Pt==null||Pt(),Pt=null;const f=mi.value,k=pi.value;if(!l.value||!f||!k)return;const W=()=>{ks(-20)},q=()=>{ks(20)};f.addEventListener("click",W),k.addEventListener("click",q),Pt=()=>{f.removeEventListener("click",W),k.removeEventListener("click",q)}}e.watch([l,mi,pi],()=>{wi()},{flush:"post"});function xs(f){var k;m.value=f,(k=m.value)!=null&&k.composition&&(N.value=new nb(m.value.composition),x.value=new Ta(m.value.composition),T.value=new ob(m.value.composition));try{E.size&&(E.forEach((W,q)=>{m.value.setClipFilters(q,W)}),E.clear(),m.value.composition.computeFrame())}catch{}}function Ud(f){f!=null&&f.id&&qr(f.id)}function Ld(f){ud(f),jt()}async function Od(f){if(!N.value)return;const k=await N.value.addTextOverlay(f);R.value.push({id:k,...f})}async function zd(f,k){if(!N.value)return;await N.value.updateTextOverlay(f,k);const W=R.value.findIndex(q=>q.id===f);W!==-1&&(R.value[W]={...R.value[W],...k})}async function Pd(f){N.value&&(await N.value.removeTextOverlay(f),R.value=R.value.filter(k=>k.id!==f))}async function jd(f){if(!x.value||M.value.length<2)return;const[k,W]=M.value,q=await x.value.applyTransition(k,W,f);A.value.push({id:q,...f,name:f.type})}function Wd(f){if(!x.value)return;const k=A.value[f];k&&(x.value.removeTransition(k.id),A.value.splice(f,1))}function Zd(f){}async function Xd(f){if(!T.value)return;const k=await T.value.addAudioTrack(f);P.value.push({id:k,...f})}async function Hd(f,k){if(!T.value)return;const W=P.value.findIndex(q=>q.id===f);W!==-1&&(P.value[W]={...P.value[W],...k})}async function Gd(f){T.value&&(await T.value.removeAudioTrack(f),P.value=P.value.filter(k=>k.id!==f))}async function Jd(f,k){if(!T.value)return;await T.value.updateVolume(f,k);const W=P.value.find(q=>q.id===f);W&&(W.volume=k)}async function Yd(f,k){if(!T.value)return;await T.value.muteTrack(f,k);const W=P.value.find(q=>q.id===f);W&&(W.muted=k)}function Kd(f){T.value&&(T.value.setMasterVolume(f),j.value=f)}function qd(f){i("thumbnail-selected",f)}function cn(){Po!==null&&(clearInterval(Po),Po=null)}function Qd(f,k){return k?{...f,output:{...f.output,format:k.format,quality:k.quality}}:f}function ao(f){var k;return f.metadata||(f.metadata={created_at:new Date().toISOString(),editor_version:"2.0.0"}),f.metadata.fit_mode=I.value,(k=o.media)!=null&&k.url&&/^https?:/i.test(o.media.url)?f.metadata.source_url=o.media.url:delete f.metadata.source_url,f}function Ge(f,k,W){return Math.min(W,Math.max(k,f))}function ki(f,k){if(typeof f=="number"&&Number.isFinite(f))return f;if(typeof f=="string"){const W=Number(f);if(Number.isFinite(W))return W}return k}function mt(f,k,W){for(const q of k)if(q in f)return ki(f[q],W);return W}function eu(f){const k=typeof f.params=="object"&&f.params!==null?f.params:{};switch(f.filterId.trim().toLowerCase()){case"brightness":return[{type:"brightness",value:Ge(mt(k,["value","brightness"],0),-1,1)}];case"contrast":return[{type:"contrast",value:Ge(mt(k,["value","contrast"],1),.1,3)}];case"saturation":return[{type:"saturation",value:Ge(mt(k,["value","saturation"],1),0,3)}];case"blur":case"gaussian-blur":case"kawase-blur":case"radial-blur":return[{type:"blur",value:Ge(mt(k,["value","blur","radius"],0),0,25)}];case"sharpen":return[{type:"sharpen",value:Ge(mt(k,["value","amount"],1),0,5)}];case"sepia":return[{type:"sepia",value:1}];case"grayscale":return[{type:"grayscale",value:1}];case"adjustment":{const q=Ge(mt(k,["brightness"],1)-1,-1,1),de=Ge(mt(k,["contrast"],1),.1,3),ie=Ge(mt(k,["saturation"],1),0,3);return[{type:"brightness",value:q},{type:"contrast",value:de},{type:"saturation",value:ie}]}default:return[]}}function tu(f){const k=f.timeline[0],W=Array.isArray(k==null?void 0:k.filters)?k.filters:[],q=[];for(const ie of W)if(q.push(...eu(ie)),q.length>=12)break;const de={...f,filters:q.slice(0,12)};if(f.timeline.length===1&&k){const ie=Math.max(0,ki(k.sourceIn,0)),re=ki(k.sourceOut,ie);re>ie&&(de.trim={start:ie,end:re})}return de}function nu(f){return{"360p":[640,360],"480p":[854,480],"720p":[1280,720],"1080p":[1920,1080],"1440p":[2560,1440],"2160p":[3840,2160]}[f??""]??[1920,1080]}function ou(f){if(!f||typeof f!="object")return null;const k=f.duration;if(typeof k=="number"&&Number.isFinite(k)&&k>0)return k;if(k&&typeof k=="object"&&"value"in k){const W=k.value;if(typeof W=="number"&&Number.isFinite(W)&&W>0)return W}return null}async function Es(f,k,W){var tn,Wt,Un,un;const q=f.timeline[0],de=q?Math.max(0,q.sourceIn):0,ie=q?q.sourceOut:void 0,[re,Ae]=nu((k==null?void 0:k.quality)??((tn=f.output)==null?void 0:tn.quality)),vt=((Wt=f.output)==null?void 0:Wt.fps)||30;L(!1),V.value=!0,await e.nextTick();try{const at=[200,500,1e3];let lt=!1;for(const Ti of at){await new Promise(Eu=>setTimeout(Eu,Ti));const Ko=B.value;if(!(!Ko||typeof Ko.captureFrameAt!="function")&&typeof Ko.ensureReadyForCapture=="function"&&(lt=await Ko.ensureReadyForCapture(),lt))break}const Zt=B.value;if(!Zt||typeof Zt.captureFrameAt!="function")throw new Error("PIXI preview not available for export. Ensure the preview is mounted.");if(!lt)throw new Error("PIXI preview not ready for frame capture after retries. The video may still be loading.");const{exportWithPixiFrames:io,isWebCodecsSupported:_i}=await Promise.resolve().then(()=>require("./PixiFrameExporter-DmyELJBR.cjs"));if(!_i())throw new Error("WebCodecs is not supported in this browser. Export requires Chrome 94+ or equivalent.");en=new AbortController;const Yo={width:re,height:Ae,fps:vt,trimStart:de,signal:en.signal};ie!==void 0&&(Yo.trimEnd=ie),W&&(Yo.onProgress=W);const Is=zt.value;Is!==""&&(Yo.sourceUrl=Is);const yu=typeof Zt.duration=="number"&&Zt.duration>0?Zt.duration:((Un=f.source)==null?void 0:Un.duration)??ie??0,bu=await io({captureFrameAt:Ti=>Zt.captureFrameAt(Ti),duration:{value:yu}},Yo),Ni=new File([bu],`edited-video-${Date.now()}.mp4`,{type:"video/mp4"}),wu=ou(Zt),ku=((un=f.source)==null?void 0:un.duration)??0,xu=Math.max(0,(ie??wu??ku)-de);return{file:Ni,recipe:f,meta:{duration:xu,width:re,height:Ae,format:"mp4",sizeBytes:Ni.size,size_bytes:Ni.size}}}finally{V.value=!1,en=null}}async function au(f,k){var un;cn(),Mt=!1,en=null,Rt.value=null,We.value=null,Qt.value=!1,Xe.value=0;const W=ao(f??le()),q=Ms(W),de=Array.isArray(q.filters)&&q.filters.length>0,ie=Vi(q);if(!(ne.value||de||ie))return st(),i("video-exported",null),null;const Ae=q.timeline[0],vt=Ae?Math.max(0,Ae.sourceIn):0,Wt=((Ae==null?void 0:Ae.sourceOut)??((un=q.source)==null?void 0:un.duration)??Bt.value)-vt,Un=o.serverRenderEndpoint!=null&&o.clientExportThreshold>0&&Wt>o.clientExportThreshold;if(Un){ot.value=!0;try{return await iu(q),null}catch(at){const lt=at instanceof Error?at.message:"Server render failed";throw We.value=lt,i("server-render-failed",lt),at}finally{ot.value=!1}}if(o.maxDuration>0&&Wt>o.maxDuration&&!Un){const at=`This video is too long for in-browser export (${Math.round(Wt)}s). Server rendering is not available. Try a shorter clip.`;return We.value=at,i("video-exported",null),null}ot.value=!0;try{const at=await Es(q,k,lt=>{Mt||(Xe.value=lt)});return Mt?(We.value="Export canceled.",Xe.value=0,i("video-exported",null),null):(st(),i("recipe-generated",q),i("video-exported",at),Xe.value=100,Qt.value=!0,at)}catch(at){if(Mt)return We.value="Export canceled.",Xe.value=0,i("video-exported",null),null;const lt=at instanceof Error?at.message:"Local WebGL export failed.";throw We.value=lt,new Error(`Video export failed: ${lt}`)}finally{ot.value=!1}}function Jo(){return new zr(o.serverRenderEndpoint??"/api/v1")}async function iu(f){const k=Jo();We.value="Starting server render...",Xe.value=0;const W=await k.createRenderJob({source_media_uuid:s.value,recipe:f});Rt.value=W.id,i("server-render-started",W.id),i("export-started",W.id),We.value="Rendering on server...";const q=await k.pollRenderJob(W.id,(ie,re)=>{Xe.value=ie,re==="processing"&&(We.value=`Server rendering: ${ie}%`)},3e3,(o.maxDuration>0?o.maxDuration*3:1800)*1e3);Xe.value=100,Qt.value=!0,We.value="Server render complete!",st(),i("recipe-generated",f);const de={id:q.id};typeof q.output_media_id=="string"&&q.output_media_id!==""&&(de.output_media_id=q.output_media_id),i("server-render-completed",de)}async function Vs(){if(!ot.value)return;Mt=!0,V.value=!1,en&&(en.abort(),en=null),cn();const f=Rt.value;if(f)try{await Jo().cancelJob(f)}catch(k){const W=k instanceof Error?k.message:"Failed to cancel export";We.value=W,ot.value=!1,Rt.value=null;return}ot.value=!1,Xe.value=0,Qt.value=!1,Rt.value=null,We.value="Export canceled."}async function Ss(f){cn(),Mt=!1,en=null,Rt.value=null,We.value=null,Qt.value=!1,ot.value=!0,Xe.value=0;try{const k=ao(Qd(le(),f));i("recipe-generated",k);const W=s.value.startsWith("temp-"),q=k.timeline[0],de=Array.isArray(q==null?void 0:q.filters)?q.filters:[],ie=!0,re=typeof window<"u"&&window.MEDIABLES_ALLOW_SERVER_EXPORT_FALLBACK===1||typeof localStorage<"u"&&localStorage.getItem("mediables.export.allowServerFallback")==="1";if(ie)try{const lt=await Es(k,f,_i=>{Mt||(Xe.value=_i)});if(Mt){We.value="Export canceled.",ot.value=!1,Xe.value=0;return}i("video-exported",lt);const Zt=URL.createObjectURL(lt.file),io=document.createElement("a");io.href=Zt,io.download=`edited-video-${Date.now()}.mp4`,io.click(),setTimeout(()=>URL.revokeObjectURL(Zt),100),ot.value=!1,Xe.value=100,Qt.value=!0;return}catch(lt){if(Mt){We.value="Export canceled.",ot.value=!1,Xe.value=0;return}if(W||!re)throw lt;Xe.value=0,We.value="Local filter export failed, falling back to server render."}const Ae={"360p":"low","480p":"low","720p":"medium","1080p":"high","1440p":"ultra","2160p":"ultra"},vt=(f==null?void 0:f.quality)??k.output.quality,tn=Ae[vt]??"high",Wt={...tu(k),export:{format:(f==null?void 0:f.format)??k.output.format,quality:tn,resolution:vt,framerate:k.output.fps}},un=await Jo().createJob({source_media_id:s.value,recipe:Wt}),at=typeof un.id=="string"?un.id:null;if(!at)throw new Error("Export failed: missing job id");Rt.value=at,i("export-started",at),vu(at)}catch(k){if(V.value=!1,en=null,Mt){We.value="Export canceled.",ot.value=!1,Xe.value=0,Rt.value=null;return}try{const W=ao(le()),q=new Blob([JSON.stringify(W,null,2)],{type:"application/json"}),de=URL.createObjectURL(q),ie=document.createElement("a");ie.href=de,ie.download=`video-recipe-${Date.now()}.json`,ie.click(),setTimeout(()=>URL.revokeObjectURL(de),100)}finally{ot.value=!1,Xe.value=0,Rt.value=null,We.value=k instanceof Error?k.message:"Export failed"}}}const xi=async f=>{await new Promise(k=>{window.setTimeout(k,f)})},Ei=f=>{if(!f||f.width<=0||f.height<=0)return null;try{return f.toDataURL("image/jpeg",.85)}catch{return null}},ru=f=>{if(!f||typeof f!="object")return null;const W=f.pixiCanvas;if(W&&typeof W=="object"&&"value"in W){const q=W.value;return q instanceof HTMLCanvasElement?q:null}return W instanceof HTMLCanvasElement?W:null},su=f=>{if(!f||typeof f!="object")return null;const k=f.duration;if(typeof k=="number"&&Number.isFinite(k))return k;if(k&&typeof k=="object"&&"value"in k){const W=k.value;if(typeof W=="number"&&Number.isFinite(W))return W}return null},lu=f=>{if(!f||typeof f!="object")return null;const W=f.videoElement;if(W&&typeof W=="object"&&"value"in W){const q=W.value;return q instanceof HTMLVideoElement?q:null}return W instanceof HTMLVideoElement?W:null},Cs=f=>typeof f.params=="object"&&f.params!==null?f.params:{},cu=f=>{const k=[];for(const W of f){const q=Cs(W),de=W.filterId.trim().toLowerCase();if(de==="brightness"){const re=(Ge(mt(q,["value","brightness"],0),-1,1)+1)*100;k.push(`brightness(${re.toFixed(2)}%)`);continue}if(de==="contrast"){const ie=Ge(mt(q,["value","contrast"],1),.1,4);k.push(`contrast(${(ie*100).toFixed(2)}%)`);continue}if(de==="saturation"||de==="saturate"){const ie=Ge(mt(q,["value","saturation"],1),0,4);k.push(`saturate(${(ie*100).toFixed(2)}%)`);continue}if(de==="grayscale"){k.push("grayscale(100%)");continue}if(de==="sepia"){k.push("sepia(100%)");continue}if(de==="blur"||de==="gaussian-blur"||de==="kawase-blur"){const ie=Ge(mt(q,["value","blur","radius"],0),0,30);ie>.01&&k.push(`blur(${ie.toFixed(2)}px)`);continue}if(de==="adjustment"){const ie=mt(q,["brightness"],1),re=mt(q,["contrast"],1),Ae=mt(q,["saturation"],1);Math.abs(ie-1)>.01&&k.push(`brightness(${(Ge(ie,0,5)*100).toFixed(2)}%)`),Math.abs(re-1)>.01&&k.push(`contrast(${(Ge(re,.1,5)*100).toFixed(2)}%)`),Math.abs(Ae-1)>.01&&k.push(`saturate(${(Ge(Ae,0,5)*100).toFixed(2)}%)`);continue}if(de==="cinematic"){k.push("contrast(120%) brightness(95%) saturate(85%)");continue}if(de==="dramatic"){k.push("contrast(140%) brightness(90%) saturate(110%) sepia(10%)");continue}if(de==="dreamy"){k.push("blur(0.5px) brightness(105%) saturate(90%) contrast(95%)");continue}}return k.join(" ")},du=f=>{const k=f.find(de=>de.filterId.trim().toLowerCase()==="noise");if(!k)return 0;const W=Cs(k),q=mt(W,["noise","value","amount","intensity"],.2);return q<=1?Ge(q,0,1):Ge(q/100,0,1)},uu=(f,k,W,q)=>{if(q<=0)return;const de=f.getImageData(0,0,k,W),ie=255*q;for(let re=0;re<de.data.length;re+=4){const Ae=(Math.random()*2-1)*ie;de.data[re]=Ge(de.data[re]+Ae,0,255),de.data[re+1]=Ge(de.data[re+1]+Ae,0,255),de.data[re+2]=Ge(de.data[re+2]+Ae,0,255)}f.putImageData(de,0,0)},_s=async f=>{f.readyState>=2&&f.videoWidth>0&&f.videoHeight>0||await new Promise(k=>{let W=!1,q=0;const de=()=>{W||(W=!0,f.removeEventListener("loadedmetadata",ie),f.removeEventListener("loadeddata",ie),f.removeEventListener("canplay",ie),window.clearTimeout(q),k())},ie=()=>{de()};f.addEventListener("loadedmetadata",ie),f.addEventListener("loadeddata",ie),f.addEventListener("canplay",ie),q=window.setTimeout(()=>de(),800),f.play().catch(()=>{})})},mu=async(f,k)=>{await new Promise(W=>{let q=!1,de=0;const ie=()=>{q||(q=!0,f.removeEventListener("seeked",re),window.clearTimeout(de),W())},re=()=>{ie()};if(Math.abs(f.currentTime-k)<.016){requestAnimationFrame(()=>ie());return}f.addEventListener("seeked",re),de=window.setTimeout(()=>ie(),700),f.currentTime=k})},Ns=async(f,k)=>{await _s(f);const W=Math.floor(f.videoWidth),q=Math.floor(f.videoHeight);if(W<=0||q<=0)return null;const de=Number.isFinite(f.duration)&&f.duration>0?f.duration:0,ie=de>0?Ge(k,0,de):0;await mu(f,ie);const re=document.createElement("canvas");re.width=W,re.height=q;const Ae=re.getContext("2d");if(!Ae)return null;const vt=cu(et.value);vt!==""&&(Ae.filter=vt);try{Ae.drawImage(f,0,0,W,q)}catch{return null}const tn=du(et.value);return uu(Ae,W,q,tn),Ei(re)},pu=async(f,k)=>{const W=document.createElement("video");W.src=f,W.muted=!0,W.playsInline=!0,W.preload="auto",f.startsWith("blob:")||(W.crossOrigin="anonymous");try{return await _s(W),await Ns(W,k)}catch{return null}finally{W.pause(),W.removeAttribute("src"),W.load()}},fu=async f=>{const k=B.value,W=Ei(ru(k));if(W)return W;if(k!=null&&k.captureFrameAt)for(let ie=0;ie<4;ie+=1){const re=su(k);if(re!==null&&re<=0&&ie<2){await xi(80);continue}const Ae=await Promise.race([k.captureFrameAt(f),xi(450).then(()=>null)]),vt=Ei(Ae);if(vt)return vt;await xi(80)}const q=lu(k);if(q){const ie=await Ns(q,f);if(ie)return ie}const de=ri.value.trim();if(de!==""){const ie=await pu(de,f);if(ie)return ie}return null},Ts=f=>f.map(k=>({...k,params:k.params&&typeof k.params=="object"?{...k.params}:k.params}));function Ms(f){const k=Ts(et.value);if(!Vi(f)&&k.length>0&&Array.isArray(f.timeline)&&f.timeline.length>0){const q=f.timeline[0];q&&(f.timeline=[{...q,filters:k},...f.timeline.slice(1)])}return f}const Vi=f=>Array.isArray(f.timeline)?f.timeline.some(k=>Array.isArray(k.filters)&&k.filters.length>0):!1,hu=f=>{if(!f||typeof f!="object")return null;const k=f.posterFrame;if(typeof k!="string")return null;const W=k.trim();return W!==""?W:null};async function Si(){const f=ao(Ms($t())),k=Ts(et.value),W=Vi(f)||k.length>0,q=hu(o.initialRecipe);if(W){const de=$.value>0?$.value:.1;try{const ie=await fu(de);ie?f.posterFrame=ie:q&&(f.posterFrame=q)}catch{q&&(f.posterFrame=q)}}else delete f.posterFrame;return st(),i("draft-saved",f),f}function Bs(){yt()&&(es(),jt())}async function vu(f){cn();const k=Jo();Po=window.setInterval(async()=>{try{if(Mt){cn();return}const W=await k.getJob(f),q=Number(W.progress??0);if(Xe.value=Number.isFinite(q)?q:0,W.status==="completed"||W.status==="failed"||W.status==="cancelled")if(cn(),ot.value=!1,Rt.value=null,W.status==="completed")Xe.value=100,Qt.value=!0,We.value=null;else{const de=W.status==="cancelled"||typeof W.error_message=="string"&&/cancel/i.test(W.error_message);We.value=de?"Export canceled.":typeof W.error_message=="string"&&W.error_message.trim()!==""?W.error_message:"Export failed"}}catch(W){cn(),ot.value=!1,Rt.value=null,We.value=W instanceof Error?W.message:"Failed to check export progress"}},2e3)}function Ci(){const f=ao(le());try{const k=f.timeline??[]}catch{}w.value=f}let yn=null;function jt(){yn&&clearTimeout(yn),yn=setTimeout(()=>{Ci(),yn=null},200)}e.watch(()=>O.value,jt,{deep:!0}),e.watch(()=>pe.value,f=>{if(H.value||!f)return;const k=(f==null?void 0:f.filters)??[];pd(k)},{immediate:!0}),e.watch(()=>et.value,f=>{He(f),jt()},{deep:!0}),e.watch(()=>R.value,f=>{nt(f),jt()},{deep:!0}),e.watch(()=>P.value,f=>{const k=f.map(W=>({...W,source:typeof W.source=="string"?W.source:void 0}));St(k),jt()},{deep:!0}),e.watch(()=>$.value,jt),n({saveDraft:Si,exportForUpload:au}),Ci(),e.onUnmounted(()=>{cn(),Mt=!0,yn&&(clearTimeout(yn),yn=null),m.value&&(m.value.destroy(),m.value=null),N.value=null,x.value=null,T.value=null});function gu(){bt||!ui.value||(bt=new Oy({filters:oo.value,callbacks:{onApplyFilter:f=>{no(f.id)},onRemoveFilter:f=>{ts(f)},onUpdateParam:(f,k,W)=>{ds(f,k,W)},onPreviewFilter:f=>{qr(f.id)}}}),bt.mount(ui.value),bt.setActiveFilters(ii.value))}e.watch(ii,f=>{bt==null||bt.setActiveFilters(f)},{deep:!0}),e.watch(oo,f=>{bt==null||bt.setFilters(f)});let dn=null;return e.onMounted(()=>{window.addEventListener("resize",U),window.addEventListener("keydown",ws);const f=()=>{!Dn.value||dn||(dn=new ResizeObserver(k=>{k[0]&&(Xo.value=Math.round(k[0].contentRect.width))}),dn.observe(Dn.value))};f(),dn||e.nextTick(f),l.value&&(wi(),Pt||e.nextTick(wi)),o.media&&Ci(),l.value&&e.nextTick(()=>{gu()}),e.nextTick(()=>{const k=document.querySelector(".video-editor");k&&k.getBoundingClientRect();const W=document.querySelector(".mobile-layout");W&&W.getBoundingClientRect()})}),e.onUnmounted(()=>{window.removeEventListener("resize",U),window.removeEventListener("keydown",ws),dn==null||dn.disconnect(),dn=null,Pt==null||Pt(),Pt=null,bt==null||bt.destroy(),bt=null}),(f,k)=>{var W,q,de,ie;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-editor",{mobile:l.value}])},[l.value?(e.openBlock(),e.createElementBlock("div",$w,[e.createElementVNode("div",Rw,[e.createElementVNode("div",Dw,[e.createElementVNode("button",{class:e.normalizeClass(["mobile-toolbar-btn",{active:e.unref(ee)}]),onClick:k[0]||(k[0]=(...re)=>e.unref(C)&&e.unref(C)(...re)),"aria-label":e.unref(ee)?"Pause":"Play","data-testid":"btn-mobile-play"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(ee)?e.unref(zl):e.unref(jl)},null,8,["icon"])],10,Aw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:Bs,"aria-label":"Reset all changes","data-testid":"btn-mobile-reset"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn)},null,8,["icon"])])]),e.createElementVNode("div",Uw,[e.createElementVNode("button",{class:"mobile-toolbar-btn mobile-toolbar-save",onClick:Si,"aria-label":"Save","data-testid":"btn-mobile-save",disabled:!e.unref(ne)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(wr)},null,8,["icon"]),k[13]||(k[13]=e.createElementVNode("span",null,"Save",-1))],8,Lw),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:k[1]||(k[1]=re=>Ss()),"aria-label":"Export","data-testid":"btn-mobile-export",disabled:ot.value||!e.unref(ne)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(So)},null,8,["icon"])],8,Ow),e.createElementVNode("button",{class:"mobile-toolbar-btn",onClick:k[2]||(k[2]=re=>i("close")),"aria-label":"Close","data-testid":"btn-mobile-close"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Wn)},null,8,["icon"])])])]),e.createElementVNode("div",zw,[e.withDirectives(e.createVNode(zs,{ref_key:"pixiPreviewMobileRef",ref:g,"aria-hidden":!v.value,class:"preview-host-child",source:ri.value,"fallback-duration":Bt.value,filters:as.value,playhead:is.value,"is-playing":e.unref(ee),"fit-mode":I.value,active:v.value,onPlayPause:e.unref(C),onFrameUpdate:ms,onDurationChange:Ho},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,v.value]]),e.withDirectives(e.createVNode(rl,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:w.value,media:ns.value,"enable-engine":h.value&&os.value,"fit-mode":I.value,onTimeUpdate:us,onPlayStateChange:ps,onDurationChange:Ho,onEngineReady:xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),ot.value?(e.openBlock(),e.createElementBlock("div",Pw,[e.createElementVNode("div",jw,[e.createElementVNode("span",null,"Exporting "+e.toDisplayString(Xe.value)+"%",1),e.createElementVNode("div",Ww,[e.createElementVNode("div",{class:"mobile-export-bar-fill",style:e.normalizeStyle({width:Xe.value+"%"})},null,4)]),e.createElementVNode("button",{class:"mobile-export-cancel",onClick:Vs},"Cancel")])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Dn,class:"timeline-section"},[e.createElementVNode("div",Zw,[e.createElementVNode("button",{ref_key:"mobileZoomOutButtonRef",ref:mi,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom out timeline","data-testid":"btn-timeline-zoom-out"},[...k[14]||(k[14]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512),e.createElementVNode("button",{ref_key:"mobileZoomInButtonRef",ref:pi,type:"button",class:"mobile-zoom-btn","aria-label":"Zoom in timeline","data-testid":"btn-timeline-zoom-in"},[...k[15]||(k[15]=[e.createElementVNode("svg",{width:"16",height:"16",viewBox:"0 0 16 16"},[e.createElementVNode("path",{d:"M4 8h8M8 4v8",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])],512)]),e.createVNode(sl,{playhead:e.unref($),clips:e.unref(O),"selected-clip-id":((W=e.unref(pe))==null?void 0:W.id)??((q=e.unref(O)[0])==null?void 0:q.id)??null,duration:Bt.value,"zoom-level":e.unref(ae),"snap-enabled":sn.value,sensitivity:.25,"is-mobile":!0,"onUpdate:playhead":e.unref(X),onTrim:e.unref(we),onSplit:bs,onClipSelect:fi,onClipMove:e.unref(Vt),onClipLongPress:fs,onSnapStateChange:hs},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"])],512),e.createElementVNode("div",Xw,[e.createElementVNode("div",Hw,[e.createElementVNode("span",Gw,e.toDisplayString(bd.value),1),e.createElementVNode("span",Jw,e.toDisplayString(wd.value),1)]),e.createElementVNode("div",Yw,[e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-prev-cut","aria-label":"Jump to previous cut",disabled:!gd.value,onClick:gs}," Prev Cut ",8,Kw),e.createElementVNode("div",qw,[e.createElementVNode("span",Qw,"Playhead "+e.toDisplayString(kd.value),1),e.createElementVNode("span",e2,"In "+e.toDisplayString(xd.value),1),e.createElementVNode("span",t2,"Out "+e.toDisplayString(Ed.value),1),e.createElementVNode("span",n2,"Duration "+e.toDisplayString(Vd.value),1)]),e.createElementVNode("button",{type:"button",class:"mobile-cut-nav-btn","data-testid":"btn-mobile-next-cut","aria-label":"Jump to next cut",disabled:!yd.value,onClick:ys}," Next Cut ",8,o2)]),e.createElementVNode("div",a2,[e.createElementVNode("button",{type:"button",class:e.normalizeClass(["mobile-snap-toggle",{active:sn.value}]),"data-testid":"btn-mobile-snap-toggle",onClick:vs},e.toDisplayString(sn.value?"Snap On":"Snap Off"),3),e.createElementVNode("div",i2,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(vd,re=>e.createElementVNode("button",{key:re,type:"button",class:e.normalizeClass(["mobile-speed-chip",{active:e.unref(ue)===re}]),"data-testid":`btn-mobile-speed-${String(re).replace(".","-")}`,onClick:Ae=>Id(re)},e.toDisplayString(re)+"x ",11,r2)),64))])]),e.createElementVNode("div",s2,[e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-undo","aria-label":"Undo",disabled:!e.unref(ht),onClick:hi}," Undo ",8,l2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-redo","aria-label":"Redo",disabled:!e.unref(Ot),onClick:vi}," Redo ",8,c2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-split","aria-label":"Split at playhead",disabled:!si.value,onClick:Go}," Split ",8,d2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn","data-testid":"btn-mobile-duplicate","aria-label":"Duplicate selected clip",disabled:!rs.value,onClick:gi}," Duplicate ",8,u2),e.createElementVNode("button",{type:"button",class:"mobile-edit-btn mobile-edit-btn--danger","data-testid":"btn-mobile-delete","aria-label":"Delete selected clip",disabled:!li.value,onClick:yi}," Delete ",8,m2)])]),e.createElementVNode("div",{ref_key:"mobileControlsRef",ref:ui,class:"controls-section mobile-controls"},null,512),Wo.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"mobile-action-sheet-backdrop","data-testid":"video-mobile-action-sheet",onClick:gn},[e.createElementVNode("div",{class:"mobile-action-sheet",onClick:k[3]||(k[3]=e.withModifiers(()=>{},["stop"]))},[k[16]||(k[16]=e.createElementVNode("div",{class:"mobile-action-sheet-handle"},null,-1)),e.createElementVNode("div",p2,[e.createElementVNode("span",f2,e.toDisplayString(Sd.value),1),e.createElementVNode("span",h2,e.toDisplayString(Cd.value),1)]),e.createElementVNode("div",v2,[e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-undo",disabled:!e.unref(ht),onClick:hi},"Undo",8,g2),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-redo",disabled:!e.unref(Ot),onClick:vi},"Redo",8,y2),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-split",disabled:!si.value,onClick:Go},"Split",8,b2),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-duplicate",disabled:!rs.value,onClick:gi},"Duplicate",8,w2),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn mobile-action-sheet-btn--danger","data-testid":"btn-mobile-sheet-delete",disabled:!li.value,onClick:yi},"Delete",8,k2),e.createElementVNode("button",{type:"button",class:"mobile-action-sheet-btn","data-testid":"btn-mobile-sheet-close",onClick:gn},"Close")])])])):e.createCommentVNode("",!0)])):(e.openBlock(),e.createElementBlock("div",x2,[e.createElementVNode("div",E2,[e.createElementVNode("div",V2,[e.createElementVNode("div",S2,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":k[4]||(k[4]=re=>I.value=re),"aria-label":"Fit mode","data-testid":"select-video-fit-mode"},[...k[17]||(k[17]=[e.createElementVNode("option",{value:"contain"},"Contain",-1),e.createElementVNode("option",{value:"cover"},"Cover",-1),e.createElementVNode("option",{value:"none"},"None",-1)])],512),[[e.vModelSelect,I.value]])])]),e.withDirectives(e.createVNode(zs,{ref_key:"pixiPreviewDesktopRef",ref:y,"aria-hidden":!v.value,class:"preview-host-child",source:ri.value,"fallback-duration":Bt.value,filters:as.value,playhead:is.value,"is-playing":e.unref(ee),"fit-mode":I.value,active:v.value,onPlayPause:e.unref(C),onFrameUpdate:ms,onDurationChange:Ho},null,8,["aria-hidden","source","fallback-duration","filters","playhead","is-playing","fit-mode","active","onPlayPause"]),[[e.vShow,v.value]]),e.withDirectives(e.createVNode(rl,{"aria-hidden":!h.value,class:"preview-host-child","media-uuid":s.value,recipe:w.value,media:ns.value,"enable-engine":h.value&&os.value,"fit-mode":I.value,onTimeUpdate:us,onPlayStateChange:ps,onDurationChange:Ho,onEngineReady:xs},null,8,["aria-hidden","media-uuid","recipe","media","enable-engine","fit-mode"]),[[e.vShow,h.value]]),f.showThumbnailPicker?(e.openBlock(),e.createBlock(f1,{key:0,"media-uuid":s.value,duration:Bt.value,onSelect:qd},null,8,["media-uuid","duration"])):e.createCommentVNode("",!0)]),e.createElementVNode("div",C2,[e.createElementVNode("div",_2,[e.createElementVNode("div",N2,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(G.value,re=>(e.openBlock(),e.createElementBlock("button",{key:re.id,class:e.normalizeClass(["tab-btn",{active:d.value===re.id}]),onClick:Ae=>d.value=re.id},e.toDisplayString(re.label),11,T2))),128))]),e.createElementVNode("div",M2,[e.withDirectives(e.createElementVNode("div",B2,[e.createVNode(Sg,{filters:oo.value,"active-filters":ii.value,"thumbnail-url":hd.value,onApplyFilter:no,onRemoveFilter:ts,onUpdateParam:ds,onPreviewFilter:Ud},null,8,["filters","active-filters","thumbnail-url"])],512),[[e.vShow,d.value==="filters"]]),e.withDirectives(e.createElementVNode("div",I2,[e.createVNode(R1,{overlays:R.value,onAddOverlay:Od,onUpdateOverlay:zd,onRemoveOverlay:Pd},null,8,["overlays"])],512),[[e.vShow,d.value==="text"]]),e.withDirectives(e.createElementVNode("div",F2,[e.createVNode(oy,{"selected-clips":M.value,"applied-transitions":A.value,onApplyTransition:jd,onRemoveTransition:Wd,onPreviewTransition:Zd},null,8,["selected-clips","applied-transitions"])],512),[[e.vShow,d.value==="transitions"]]),e.withDirectives(e.createElementVNode("div",$2,[e.createVNode(Uy,{"audio-layers":P.value,"master-volume":j.value,onAddTrack:Xd,onUpdateTrack:Hd,onRemoveTrack:Gd,onUpdateVolume:Jd,onToggleMute:Yd,onUpdateMasterVolume:Kd},null,8,["audio-layers","master-volume"])],512),[[e.vShow,d.value==="audio"]]),e.withDirectives(e.createElementVNode("div",R2,[e.unref(Kr)?(e.openBlock(),e.createBlock(Ug,{key:0,filter:e.unref(Kr),"current-frame":e.unref(te),onUpdateParams:Ld},null,8,["filter","current-frame"])):(e.openBlock(),e.createElementBlock("div",D2,[...k[18]||(k[18]=[e.createElementVNode("p",null,"Select a filter from the Filters tab to adjust its parameters",-1)])]))],512),[[e.vShow,d.value==="adjustments"]]),e.withDirectives(e.createElementVNode("div",A2,[e.createVNode(Qg,{"can-export":e.unref(ne),"is-exporting":ot.value,"export-progress":Xe.value,onExport:Ss,onCancelExport:Vs,onSaveDraft:Si,onReset:Bs},null,8,["can-export","is-exporting","export-progress"]),Qt.value?(e.openBlock(),e.createElementBlock("div",U2," Export complete ")):e.createCommentVNode("",!0),We.value&&!Qt.value?(e.openBlock(),e.createElementBlock("div",L2,e.toDisplayString(We.value),1)):e.createCommentVNode("",!0)],512),[[e.vShow,d.value==="export"]])])])])]),e.createElementVNode("div",O2,[e.createElementVNode("div",{ref_key:"timelineContainerRef",ref:Dn,class:"timeline-container"},[e.createElementVNode("div",z2,[e.createElementVNode("label",null,[k[19]||(k[19]=e.createTextVNode(" Zoom ",-1)),e.createElementVNode("input",{type:"range",min:"10",max:"600",value:e.unref(ae),onInput:k[5]||(k[5]=re=>Ad(re))},null,40,P2)]),e.createElementVNode("span",j2,e.toDisplayString(Math.round(e.unref(ae)))+" px/s",1),e.createElementVNode("button",{type:"button",class:e.normalizeClass(["desktop-snap-toggle",{active:sn.value}]),"data-testid":"btn-desktop-snap-toggle",onClick:vs},e.toDisplayString(sn.value?"Snap On":"Snap Off"),3)]),e.createVNode(sl,{playhead:e.unref($),clips:e.unref(O),"selected-clip-id":((de=e.unref(pe))==null?void 0:de.id)??((ie=e.unref(O)[0])==null?void 0:ie.id)??null,duration:Bt.value,"zoom-level":e.unref(ae),"snap-enabled":sn.value,sensitivity:.25,"onUpdate:playhead":e.unref(X),onTrim:e.unref(we),onSplit:bs,onClipSelect:fi,onClipMove:e.unref(Vt),onClipLongPress:fs,onSnapStateChange:hs},null,8,["playhead","clips","selected-clip-id","duration","zoom-level","snap-enabled","onUpdate:playhead","onTrim","onClipMove"]),e.createVNode(O0,{"selected-clip":e.unref(pe),"can-split":si.value,"can-delete":li.value,"is-playing":e.unref(ee),"zoom-level":e.unref(ae),"playback-speed":e.unref(ue),onSplit:Go,onDelete:yi,onDuplicate:gi,onZoomIn:Rd,onZoomOut:Dd,onZoomChange:bi,onFitToWindow:$d,onPlayPause:e.unref(C),onFrameForward:e.unref(K),onFrameBackward:e.unref(ce),onSkipToStart:e.unref(fe),onSkipToEnd:e.unref(_e),onSpeedChange:e.unref(Fe)},null,8,["selected-clip","can-split","can-delete","is-playing","zoom-level","playback-speed","onPlayPause","onFrameForward","onFrameBackward","onSkipToStart","onSkipToEnd","onSpeedChange"]),ge.value?(e.openBlock(),e.createElementBlock("div",W2,[e.createElementVNode("div",Z2,[e.createElementVNode("label",X2,[k[20]||(k[20]=e.createElementVNode("span",null,"Trim start (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[6]||(k[6]=re=>$n.value=re),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-start"},null,512),[[e.vModelText,$n.value]])]),e.createElementVNode("label",H2,[k[21]||(k[21]=e.createElementVNode("span",null,"Trim end (s)",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":k[7]||(k[7]=re=>Rn.value=re),type:"number",step:"0.01",min:"0",inputmode:"decimal","data-testid":"video-dev-trim-end"},null,512),[[e.vModelText,Rn.value]])]),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-start-playhead",disabled:!e.unref(pe),onClick:k[8]||(k[8]=re=>cs("start"))}," Start = Playhead ",8,G2),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-trim-end-playhead",disabled:!e.unref(pe),onClick:k[9]||(k[9]=re=>cs("end"))}," End = Playhead ",8,J2),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-trim",disabled:!e.unref(pe),onClick:Nd}," Apply Trim ",8,Y2)]),e.createElementVNode("div",K2,[e.createElementVNode("label",q2,[k[22]||(k[22]=e.createElementVNode("span",null,"Quick filter",-1)),e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":k[10]||(k[10]=re=>rn.value=re),"data-testid":"video-dev-filter-select"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(oo.value,re=>(e.openBlock(),e.createElementBlock("option",{key:re.id,value:re.id},e.toDisplayString(re.name),9,Q2))),128))],512),[[e.vModelSelect,rn.value]])]),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"video-dev-apply-filter",disabled:!e.unref(pe)||rn.value==="",onClick:Td}," Apply Filter ",8,ek),e.createElementVNode("button",{class:"dev-editor-button",type:"button","data-testid":"video-dev-clear-filters",disabled:e.unref(et).length===0,onClick:Md}," Clear Filters ",8,tk),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"btn-apply-noise-filter","aria-label":"Apply noise filter for QA testing",disabled:!e.unref(pe),onClick:k[11]||(k[11]=re=>no("noise"))}," QA: Noise ",8,nk),e.createElementVNode("button",{class:"dev-editor-button dev-editor-button--primary",type:"button","data-testid":"btn-apply-grayscale-filter","aria-label":"Apply grayscale filter for QA testing",disabled:!e.unref(pe),onClick:k[12]||(k[12]=re=>no("grayscale"))}," QA: Grayscale ",8,ok)])])):e.createCommentVNode("",!0)],512)])]))],2)}}}),hr=Te(ak,[["__scopeId","data-v-f427827a"]]),Ut=a=>a===null||typeof a!="object"||Array.isArray(a)?null:a,Le=a=>{if(typeof a=="number"&&Number.isFinite(a))return a;if(typeof a=="string"){const n=Number(a);return Number.isFinite(n)?n:null}return null},ik=(a,n)=>{if(n===null)return;const t=Ut(a.source)??{},o=Le(t.duration);if(!(o!==null&&o>0&&o<=1&&n>o))return;t.duration=n,a.source=t;const r=Array.isArray(a.timeline)?a.timeline:[];if(r.length===1){const c=Ut(r[0]);if(c!==null){const d=Le(c.sourceIn)??0,u=Le(c.sourceOut)??Le(c.end)??Le(c.timelineEnd);if(d===0&&u!==null&&u>0&&u<=1){c.sourceOut=n;const v=Le(c.end);v!==null&&v>0&&v<=1&&(c.end=n);const h=Le(c.timelineEnd);h!==null&&h>0&&h<=1&&(c.timelineEnd=n)}}}const s=Le(a.trimEnd)??Le(a.trim_end);s!==null&&s>0&&s<=1&&(a.trimEnd=n);const l=Ut(a.trim);if(l!==null){const c=Le(l.end);c!==null&&c>0&&c<=1&&(l.end=n,a.trim=l)}},rk=(a,n)=>{if(!a)return!1;const t=Ut(a);if(t===null)return!1;const o=Ut(t.trim),i=Ut(t.source),s=Le(i==null?void 0:i.duration)??n,l=Array.isArray(a.filters)&&a.filters.length>0;let c=!1;if(Array.isArray(a.timeline)&&a.timeline.length===1){const h=a.timeline[0];h&&Array.isArray(h.filters)&&h.filters.length>0&&(c=!0)}let d=!1;const u=Le(t.trimStart)??Le(t.trim_start)??Le(o==null?void 0:o.start),p=Le(t.trimEnd)??Le(t.trim_end)??Le(o==null?void 0:o.end);if(u!==null&&u>0&&(d=!0),p!==null&&s!==void 0&&p<s&&(d=!0),!d&&Array.isArray(a.timeline)&&a.timeline.length===1){const h=a.timeline[0];if(h){const g=Le(h.sourceIn),y=Le(h.sourceOut);g!==null&&g>0&&(d=!0),y!==null&&s!==void 0&&y<s&&(d=!0)}}let v=!1;if(Array.isArray(a.timeline)&&a.timeline.length===1){const h=a.timeline[0];if(h){const g=Le(h.speed);v=g!==null&&g!==1}}return l||c||d||v},qc=a=>{if(!a)return!1;const n=Ut(a);return n===null?!1:!!(Array.isArray(n.textOverlays)&&n.textOverlays.length>0||Array.isArray(n.transitions)&&n.transitions.length>0||Array.isArray(a.timeline)&&a.timeline.length>1)},sk=(a,n={})=>{var v,h;const t=JSON.parse(JSON.stringify(a)),o=Array.isArray(t.timeline)?t.timeline:[],i=o.length>0?Ut(o[0]):null,r=Array.isArray(i==null?void 0:i.filters)?i.filters:[],s=Array.isArray(t.filters)?t.filters:[];if(s.length>0?t.filters=s:t.filters=r,o.length===1&&i!==null){const g=Le(i.sourceIn),y=Le(i.sourceOut);g!==null&&t.trimStart===void 0&&(t.trimStart=g),y!==null&&t.trimEnd===void 0&&(t.trimEnd=y)}const l=Ut(t.trim);if(t.trimStart===void 0){const g=Le(l==null?void 0:l.start);g!==null&&(t.trimStart=g)}if(t.trimEnd===void 0){const g=Le(l==null?void 0:l.end);g!==null&&(t.trimEnd=g)}const c=Ut(t.source),d=Le(t.width)??Le(c==null?void 0:c.original_width)??Le((v=n.exportMeta)==null?void 0:v.width);d!==null&&(t.width=d);const u=Le(t.height)??Le(c==null?void 0:c.original_height)??Le((h=n.exportMeta)==null?void 0:h.height);u!==null&&(t.height=u);const p=Ut(t.output);return t.fps=Le(t.fps)??Le(p==null?void 0:p.fps)??30,ik(t,n.mediaDuration??null),t},lk={key:0},ck=["data-testid"],dk={class:"ve-mobile-header"},uk=["data-testid"],mk={class:"ve-mobile-title"},pk=["data-testid","disabled"],fk={key:1,class:"ve-mobile-spacer","aria-hidden":"true"},hk={class:"ve-body"},vk=["data-testid"],gk=["aria-label"],yk={class:"ve-header"},bk={class:"ve-title"},wk=["data-testid"],kk={class:"ve-body"},xk={class:"ve-footer"},Ek=["data-testid"],Vk=["data-testid","disabled"],Sk=e.defineComponent({__name:"VideoEditorDialog",props:{open:{type:Boolean,default:!0},mediaUuid:{},initialRecipe:{},media:{},showThumbnailPicker:{type:Boolean,default:!1},title:{default:"Edit Video"},workflowMode:{default:"full"},featureFlags:{},clientExportThreshold:{default:20},maxDuration:{default:300},serverRenderEndpoint:{default:null},saveImmediate:{type:Boolean,default:!0},confirmText:{default:"Save"},savingText:{default:"Rendering..."},closeText:{default:"Cancel"},dataTestId:{default:"video-editor-dialog"}},emits:["update:open","close","recipe-generated","export-started","draft-saved","thumbnail-selected","video-exported","save-recipe","save-started","save-complete","save-error"],setup(a,{expose:n,emit:t}){const o=a,i=t,r=e.computed(()=>o.dataTestId),s=e.computed(()=>o.open),l=e.computed(()=>o.saveImmediate===!1),c=e.computed(()=>o.closeText),d=e.computed(()=>p.value?o.savingText:o.confirmText),u=e.ref(typeof window<"u"?window.innerWidth<768:!1),p=e.ref(!1),v=e.ref(!1),h=e.ref(null),g=`temp-${Date.now()}`,y=e.computed(()=>{var j;const M=(j=o.featureFlags)==null?void 0:j.export;return typeof M=="boolean"?M:o.workflowMode==="full"}),V=e.computed(()=>typeof o.mediaUuid=="string"&&o.mediaUuid.trim()!==""?o.mediaUuid.trim():o.media&&o.media.uuid.trim()!==""?o.media.uuid.trim():g),B=e.computed(()=>{const M={showThumbnailPicker:o.showThumbnailPicker,workflowMode:o.workflowMode,clientExportThreshold:o.clientExportThreshold,maxDuration:o.maxDuration,serverRenderEndpoint:o.serverRenderEndpoint};return o.featureFlags!==void 0&&(M.featureFlags=o.featureFlags),o.initialRecipe!==void 0&&(M.initialRecipe=o.initialRecipe),o.media!==void 0&&(M.media=o.media),M}),_=()=>{u.value=window.innerWidth<768};e.onMounted(()=>{window.addEventListener("resize",_)}),e.onUnmounted(()=>{window.removeEventListener("resize",_)}),e.onErrorCaptured(()=>(v.value=!0,!1));const b=M=>{const j=Array.isArray(M.timeline)?M.timeline:[];if(j.length===0)return 0;let U=0;for(const S of j){const F=Number(S.sourceIn),J=Number(S.sourceOut),G=Number(S.speed??1),Q=Number.isFinite(G)&&G>0?G:1;if(Number.isFinite(F)&&Number.isFinite(J)&&J>F){U+=(J-F)/Q;continue}const ge=Number(S.timelineStart),be=Number(S.timelineEnd);Number.isFinite(ge)&&Number.isFinite(be)&&be>ge&&(U+=be-ge)}return U},m=(M,j,U)=>{let S=null;const F=new Promise((J,G)=>{S=setTimeout(()=>G(new Error(`${U} timed out after ${j}ms`)),j)});return Promise.race([M,F]).finally(()=>{S!==null&&clearTimeout(S)})},w=()=>{var F;const U=(F=o.media)==null?void 0:F.duration;if(typeof U!="number"||!Number.isFinite(U)||U<=0)return 12e3;const S=Math.round(U*1e3);return Math.min(45e3,Math.max(12e3,S))},I=()=>{i("close"),i("update:open",!1)},N=()=>{p.value=!1,I()},x=M=>{i("recipe-generated",M)},T=M=>{i("export-started",M),i("save-started",M)},H=M=>{i("video-exported",M)},E=M=>{i("thumbnail-selected",M)},R=(M,j,U)=>{i("save-recipe",M);const S={recipe:M,exportPayload:j};U!==void 0&&(S.toastDescription=U),i("save-complete",S),I()},A=M=>{p.value||(i("draft-saved",M),R(M,null))},P=async()=>{var M;if(!p.value){if(v.value||h.value===null){i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),I();return}p.value=!0;try{const j=await m(h.value.saveDraft(),w(),"saveDraft");let U=null,S=!1,F;const J=b(j),G=J>0?J:((M=o.media)==null?void 0:M.duration)??0;if(y.value&&G>0&&G<=o.clientExportThreshold&&typeof h.value.exportForUpload=="function"){S=!0;const ge=Math.min(9e4,Math.max(15e3,o.clientExportThreshold*2e3));try{U=await m(h.value.exportForUpload(j),ge,"exportForUpload")}catch{U=null}}if(qc(j)&&U===null){i("save-error",{code:"unsupported-client-export-required",message:"These edits require in-browser export. Shorten the clip or remove text overlays, transitions, or extra clips and try again."});return}S&&U===null&&(F="Video edits saved. Final render will happen when you share."),R(j,U,F)}catch{i("save-error",{code:"save-failed",message:"Unable to save video edits. Please try again."}),I()}finally{p.value=!1}}};return n({saveDraft:P}),(M,j)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[s.value?(e.openBlock(),e.createElementBlock("div",lk,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ve-fullscreen","data-testid":r.value},[e.createElementVNode("header",dk,[e.createElementVNode("button",{class:"ve-mobile-action",type:"button","data-testid":`${r.value}-close-button`,onClick:N},e.toDisplayString(c.value),9,uk),e.createElementVNode("h2",mk,e.toDisplayString(M.title),1),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-mobile-action ve-mobile-action--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:p.value,onClick:P},e.toDisplayString(d.value),9,pk)):(e.openBlock(),e.createElementBlock("span",fk))]),e.createElementVNode("section",hk,[e.createVNode(hr,e.mergeProps({ref_key:"videoEditorRef",ref:h,"media-uuid":V.value},B.value,{onClose:N,onDraftSaved:A,onExportStarted:T,onRecipeGenerated:x,onThumbnailSelected:E,onVideoExported:H}),null,16,["media-uuid"])])],8,ck)):(e.openBlock(),e.createElementBlock("div",{key:1,class:"ve-overlay","data-testid":r.value,onClick:e.withModifiers(N,["self"])},[e.createElementVNode("div",{class:"ve-dialog",role:"dialog","aria-label":M.title,"aria-modal":"true"},[e.createElementVNode("header",yk,[e.createElementVNode("h2",bk,e.toDisplayString(M.title),1),e.createElementVNode("button",{class:"ve-close",type:"button","data-testid":`${r.value}-close-button`,"aria-label":"Close",onClick:N}," ✕ ",8,wk)]),e.createElementVNode("section",kk,[e.createVNode(hr,e.mergeProps({ref_key:"videoEditorRef",ref:h,"media-uuid":V.value},B.value,{onClose:N,onDraftSaved:A,onExportStarted:T,onRecipeGenerated:x,onThumbnailSelected:E,onVideoExported:H}),null,16,["media-uuid"])]),e.createElementVNode("footer",xk,[e.renderSlot(M.$slots,"footer",{close:N,isSaving:p.value,save:P},()=>[e.createElementVNode("button",{class:"ve-btn",type:"button","data-testid":`${r.value}-cancel-button`,onClick:N},e.toDisplayString(c.value),9,Ek),l.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"ve-btn ve-btn--primary",type:"button","data-testid":`${r.value}-confirm-button`,disabled:p.value,onClick:P},e.toDisplayString(d.value),9,Vk)):e.createCommentVNode("",!0)],!0)])],8,gk)],8,vk))])):e.createCommentVNode("",!0)]))}}),Ck=Te(Sk,[["__scopeId","data-v-0ff40919"]]),_k={class:"video-editor-modal"},Nk={class:"video-preview-container"},Tk=["src"],Mk={class:"video-overlay-controls"},Bk=["aria-label"],Ik={class:"time-display"},Fk={class:"timeline-container"},$k={class:"clip-name"},Rk={class:"timeline-time-labels"},Dk={class:"tool-tabs"},Ak=["onClick"],Uk={class:"tool-panel"},Lk={key:0,class:"trim-panel"},Ok={class:"trim-controls"},zk={key:1,class:"filters-panel"},Pk={class:"filter-grid"},jk=["onClick"],Wk={key:2,class:"text-panel"},Zk={key:3,class:"transitions-panel"},Xk={class:"transition-grid"},Hk=["onClick"],Gk={class:"action-buttons"},Jk=e.defineComponent({__name:"VideoEditorSimple",props:{media:{}},emits:["save","cancel"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(),r=e.ref(""),s=e.ref(!1),l=e.ref(0),c=e.ref(0),d=e.ref("video-1"),u=e.ref(0),p=e.ref(0),v=e.ref(null),h=e.ref("trim"),g=e.ref(null),y=e.ref(""),V=[{id:"trim",label:"Trim",icon:Ll},{id:"filters",label:"Filters",icon:am},{id:"text",label:"Text",icon:Wl},{id:"transitions",label:"Transitions",icon:mm}],B=[{id:"none",name:"None"},{id:"grayscale",name:"Grayscale"},{id:"sepia",name:"Sepia"},{id:"blur",name:"Blur"},{id:"brightness",name:"Brightness"},{id:"contrast",name:"Contrast"}],_=[{id:"fade",name:"Fade"},{id:"slide",name:"Slide"},{id:"zoom",name:"Zoom"},{id:"wipe",name:"Wipe"}],b=e.ref();e.onMounted(()=>{var S,F;(S=t.media)!=null&&S.url?r.value=t.media.url:(F=t.media)!=null&&F.file&&(r.value=URL.createObjectURL(t.media.file))}),e.onUnmounted(()=>{var S;(S=t.media)!=null&&S.file&&r.value&&URL.revokeObjectURL(r.value)});function m(){i.value&&(c.value=i.value.duration,p.value=c.value)}function w(){i.value&&(l.value=i.value.currentTime)}function I(){s.value=!1}function N(){i.value&&(s.value?(i.value.pause(),s.value=!1):(i.value.play(),s.value=!0))}function x(S){if(!S||isNaN(S))return"00:00";const F=Math.floor(S/60),J=Math.floor(S%60);return`${F.toString().padStart(2,"0")}:${J.toString().padStart(2,"0")}`}function T(S){if(!i.value||!b.value)return;const F=b.value.getBoundingClientRect(),Q=(S.clientX-F.left)/F.width*c.value;i.value.currentTime=Math.max(0,Math.min(Q,c.value))}function H(){u.value=l.value}function E(){p.value=l.value}function R(){u.value=0,p.value=c.value}function A(S){v.value=S;const F=G=>{if(!v.value||!b.value)return;const Q=b.value.getBoundingClientRect(),te=(G.clientX-Q.left)/Q.width*c.value;v.value==="start"?u.value=Math.max(0,Math.min(te,p.value-1)):p.value=Math.max(u.value+1,Math.min(te,c.value))},J=()=>{v.value=null,document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",J)};document.addEventListener("mousemove",F),document.addEventListener("mouseup",J)}function P(S){if(g.value=S,!i.value)return;const F={none:"none",grayscale:"grayscale(100%)",sepia:"sepia(100%)",blur:"blur(5px)",brightness:"brightness(150%)",contrast:"contrast(150%)"};i.value.style.filter=F[S]||"none"}function M(){}function j(S){}function U(){const S={timeline:[{id:d.value,url:r.value,startTime:0,endTime:c.value,sourceIn:u.value,sourceOut:p.value,track:0}],filters:g.value?[{type:g.value}]:[],textOverlays:y.value?[{content:y.value}]:[],duration:p.value-u.value};o("save",S)}return(S,F)=>(e.openBlock(),e.createElementBlock("div",_k,[e.createElementVNode("div",Nk,[e.createElementVNode("video",{ref_key:"videoElement",ref:i,class:"video-preview",src:r.value,onLoadedmetadata:m,onTimeupdate:w,onEnded:I,controls:""},null,40,Tk),e.createElementVNode("div",Mk,[e.createElementVNode("button",{class:"play-pause-btn",onClick:N,"aria-label":s.value?"Pause":"Play"},[e.createVNode(e.unref(D.IonIcon),{icon:s.value?e.unref(vm):e.unref(wm)},null,8,["icon"])],8,Bk),e.createElementVNode("div",Ik,e.toDisplayString(x(l.value))+" / "+e.toDisplayString(x(c.value)),1)])]),e.createElementVNode("div",Fk,[e.createElementVNode("div",{class:"timeline-track",onClick:T,ref_key:"timelineTrack",ref:b},[e.createElementVNode("div",{class:"timeline-clip",style:e.normalizeStyle({left:`${u.value/c.value*100}%`,right:`${100-p.value/c.value*100}%`})},[e.createElementVNode("span",$k,e.toDisplayString(d.value),1)],4),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:`${l.value/c.value*100}%`})},null,4),h.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:0,class:"trim-handle trim-start",style:e.normalizeStyle({left:`${u.value/c.value*100}%`}),onMousedown:F[0]||(F[0]=J=>A("start"))},null,36)):e.createCommentVNode("",!0),h.value==="trim"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"trim-handle trim-end",style:e.normalizeStyle({left:`${p.value/c.value*100}%`}),onMousedown:F[1]||(F[1]=J=>A("end"))},null,36)):e.createCommentVNode("",!0)],512),e.createElementVNode("div",Rk,[e.createElementVNode("span",null,e.toDisplayString(x(0)),1),e.createElementVNode("span",null,e.toDisplayString(x(c.value)),1)])]),e.createElementVNode("div",Dk,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(V,J=>e.createElementVNode("button",{key:J.id,class:e.normalizeClass(["tool-tab",{active:h.value===J.id}]),onClick:G=>h.value=J.id},[e.createVNode(e.unref(D.IonIcon),{icon:J.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(J.label),1)],10,Ak)),64))]),e.createElementVNode("div",Uk,[h.value==="trim"?(e.openBlock(),e.createElementBlock("div",Lk,[F[7]||(F[7]=e.createElementVNode("h3",null,"Trim Video",-1)),F[8]||(F[8]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",Ok,[e.createElementVNode("button",{class:"btn-trim",onClick:H},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Ds)},null,8,["icon"]),F[4]||(F[4]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:E},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Ds)},null,8,["icon"]),F[5]||(F[5]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"btn-trim",onClick:R},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Wn)},null,8,["icon"]),F[6]||(F[6]=e.createTextVNode(" Clear ",-1))])])])):h.value==="filters"?(e.openBlock(),e.createElementBlock("div",zk,[F[9]||(F[9]=e.createElementVNode("h3",null,"Filters",-1)),e.createElementVNode("div",Pk,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(B,J=>e.createElementVNode("button",{key:J.id,class:e.normalizeClass(["filter-option",{active:g.value===J.id}]),onClick:G=>P(J.id)},e.toDisplayString(J.name),11,jk)),64))])])):h.value==="text"?(e.openBlock(),e.createElementBlock("div",Wk,[F[10]||(F[10]=e.createElementVNode("h3",null,"Text Overlay",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":F[2]||(F[2]=J=>y.value=J),type:"text",placeholder:"Enter text...",class:"text-input"},null,512),[[e.vModelText,y.value]]),e.createElementVNode("button",{class:"btn-add-text",onClick:M},"Add Text")])):h.value==="transitions"?(e.openBlock(),e.createElementBlock("div",Zk,[F[11]||(F[11]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",Xk,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(_,J=>e.createElementVNode("button",{key:J.id,class:"transition-option",onClick:G=>(J.id,void 0)},e.toDisplayString(J.name),9,Hk)),64))])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",Gk,[e.createElementVNode("button",{class:"btn-cancel",onClick:F[3]||(F[3]=J=>S.$emit("cancel"))},"CANCEL"),e.createElementVNode("button",{class:"btn-save",onClick:U},"SAVE")])]))}}),Yk=Te(Jk,[["__scopeId","data-v-b933f33b"]]),Kk={class:"time-label"},qk=e.defineComponent({__name:"TimeRuler",props:{duration:{},zoom:{}},setup(a){const n=a,t=e.computed(()=>({width:`${n.duration*n.zoom*100}px`})),o=e.computed(()=>{const s=[],l=i(n.duration,n.zoom);for(let c=0;c<=n.duration;c+=l){const d=`${c/n.duration*100}%`,u=r(c),p=c%(l*5)===0;s.push({time:c,position:d,label:u,major:p})}return s});function i(s,l){const c=s/(10*l);return c<=1?1:c<=5?5:c<=10?10:c<=30?30:c<=60?60:Math.ceil(c/60)*60}function r(s){const l=Math.floor(s/60),c=Math.floor(s%60);return l===0?`${c}s`:c===0?`${l}m`:`${l}:${c.toString().padStart(2,"0")}`}return(s,l)=>(e.openBlock(),e.createElementBlock("div",{class:"time-ruler",style:e.normalizeStyle(t.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,c=>(e.openBlock(),e.createElementBlock("div",{key:c.time,class:"time-mark",style:e.normalizeStyle({left:c.position})},[e.createElementVNode("span",Kk,e.toDisplayString(c.label),1),e.createElementVNode("div",{class:e.normalizeClass(["time-tick",{major:c.major}])},null,2)],4))),128))],4))}}),Qk=Te(qk,[["__scopeId","data-v-0ef9c910"]]),ex=["data-track-index"],tx={class:"track-header"},nx={class:"track-label"},ox={class:"track-controls"},ax=["data-testid","aria-label"],ix=["data-testid","onMousedown","onClick"],rx={class:"clip-content"},sx={class:"clip-name"},lx={key:0,class:"clip-thumbnail"},cx=["src","alt"],dx=["onMousedown","aria-label"],ux=["onMousedown","aria-label"],mx=e.defineComponent({__name:"VideoTrack",props:{clips:{},trackIndex:{},zoom:{},duration:{}},emits:["clip-move","clip-trim","clip-select"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(null),r=e.ref(!1),s=e.ref(!1),l=e.ref(null),c=e.computed(()=>({width:`${t.duration*t.zoom*100}px`}));function d(V){const B=V.timelineEnd-V.timelineStart,_=V.timelineStart/t.duration*100,b=B/t.duration*100;return{left:`${_}%`,width:`${b}%`,backgroundColor:u(V)}}function u(V){const B=["#4A90E2","#7ED321","#F5A623","#BD10E0","#9013FE","#50E3C2","#B8E986","#F8E71C"],_=parseInt(V.id.replace(/\D/g,""))%B.length;return B[_]}function p(V){return V.label?V.label:V.url?(V.url.split("/").pop()||"Clip").split(".")[0]:`Clip ${V.id.slice(-4)}`}function v(V){i.value=V.id,o("clip-select",V.id)}function h(){r.value=!r.value}function g(V,B){if(l.value)return;s.value=!0;const _=B.clientX,b=V.timelineStart,m=I=>{if(!s.value)return;const N=I.clientX-_,x=parseFloat(c.value.width),T=N/(t.zoom*100)*(t.duration/x),H=Math.max(0,b+T);o("clip-move",V.id,H)},w=()=>{s.value=!1,document.removeEventListener("mousemove",m),document.removeEventListener("mouseup",w)};document.addEventListener("mousemove",m),document.addEventListener("mouseup",w)}function y(V,B,_){l.value=B;const b=_.clientX,m=V.sourceIn,w=V.sourceOut,I=x=>{if(!l.value)return;const T=x.clientX-b,H=parseFloat(c.value.width),E=T/(t.zoom*100)*(t.duration/H);if(l.value==="start"){const R=Math.max(0,m+E);o("clip-trim",V.id,R,w)}else{const R=Math.max(m+1,w+E);o("clip-trim",V.id,m,R)}},N=()=>{l.value=null,document.removeEventListener("mousemove",I),document.removeEventListener("mouseup",N)};document.addEventListener("mousemove",I),document.addEventListener("mouseup",N)}return(V,B)=>(e.openBlock(),e.createElementBlock("div",{class:"video-track","data-track-index":V.trackIndex},[e.createElementVNode("div",tx,[e.createElementVNode("span",nx,"Track "+e.toDisplayString(V.trackIndex+1),1),e.createElementVNode("div",ox,[V.clips.length>0?(e.openBlock(),e.createElementBlock("button",{key:0,class:"track-btn","data-testid":`btn-mute-track-${V.trackIndex}`,"aria-label":`${r.value?"Unmute":"Mute"} track ${V.trackIndex+1}`,onClick:h},[e.createVNode(e.unref(D.IonIcon),{icon:r.value?e.unref(Rm):e.unref(Fm)},null,8,["icon"])],8,ax)):e.createCommentVNode("",!0)])]),e.createElementVNode("div",{class:"track-timeline",style:e.normalizeStyle(c.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.clips,_=>(e.openBlock(),e.createElementBlock("div",{key:_.id,class:e.normalizeClass(["timeline-clip",{selected:_.id===i.value}]),style:e.normalizeStyle(d(_)),"data-testid":`clip-${_.id}`,onMousedown:b=>g(_,b),onClick:b=>v(_)},[e.createElementVNode("div",rx,[e.createElementVNode("span",sx,e.toDisplayString(p(_)),1),_.thumbnail?(e.openBlock(),e.createElementBlock("div",lx,[e.createElementVNode("img",{src:_.thumbnail,alt:p(_)},null,8,cx)])):e.createCommentVNode("",!0)]),e.createElementVNode("div",{class:"trim-handle trim-start",onMousedown:e.withModifiers(b=>y(_,"start",b),["stop"]),"aria-label":`Trim start of ${p(_)}`},null,40,dx),e.createElementVNode("div",{class:"trim-handle trim-end",onMousedown:e.withModifiers(b=>y(_,"end",b),["stop"]),"aria-label":`Trim end of ${p(_)}`},null,40,ux)],46,ix))),128))],4)],8,ex))}}),px=Te(mx,[["__scopeId","data-v-48e480d2"]]),fx={class:"video-timeline"},hx={class:"timeline-tracks"},vx=["aria-label","aria-valuenow","aria-valuemax"],gx={class:"timeline-controls"},yx={class:"zoom-level"},bx=e.defineComponent({__name:"VideoTimeline",props:{clips:{},duration:{},currentTime:{}},emits:["update:clips","seek","clip-move","clip-trim"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(1),r=e.ref(null),s=e.ref(!1),l=e.ref(),c=e.computed(()=>{const b=Math.max(0,...t.clips.map(m=>m.track||0));return Array(b+1).fill(null)}),d=e.computed(()=>`${t.currentTime/t.duration*100}%`);function u(b){return t.clips.filter(m=>(m.track||0)===b)}function p(b){const m=Math.floor(b/60),w=Math.floor(b%60);return`${m}:${w.toString().padStart(2,"0")}`}function v(b,m){o("clip-move",b,m)}function h(b,m,w){o("clip-trim",b,m,w)}function g(b){r.value=b}function y(){i.value=Math.min(i.value*1.2,5)}function V(){i.value=Math.max(i.value/1.2,.5)}function B(){s.value=!0;const b=w=>{if(!s.value||!l.value)return;const I=l.value.getBoundingClientRect(),T=Math.max(0,Math.min(w.clientX-I.left,I.width))/I.width*t.duration;o("seek",T)},m=()=>{s.value=!1,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",m)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",m)}function _(b){let m=t.currentTime;switch(b.key){case"ArrowLeft":m=Math.max(0,t.currentTime-1);break;case"ArrowRight":m=Math.min(t.duration,t.currentTime+1);break;case"Home":m=0;break;case"End":m=t.duration;break;default:return}b.preventDefault(),o("seek",m)}return e.onMounted(()=>{l.value=document.querySelector(".video-timeline")}),e.onUnmounted(()=>{}),(b,m)=>(e.openBlock(),e.createElementBlock("div",fx,[e.createVNode(Qk,{duration:b.duration,zoom:i.value},null,8,["duration","zoom"]),e.createElementVNode("div",hx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.value,(w,I)=>(e.openBlock(),e.createBlock(px,{key:`track-${I}`,"data-testid":`track-${I}`,clips:u(I),"track-index":I,zoom:i.value,duration:b.duration,onClipMove:v,onClipTrim:h,onClipSelect:g},null,8,["data-testid","clips","track-index","zoom","duration"]))),128))]),e.createElementVNode("div",{class:"timeline-playhead",style:e.normalizeStyle({left:d.value}),onMousedown:B,"data-testid":"playhead","aria-label":`Playhead at ${p(b.currentTime)}`,role:"slider","aria-valuenow":b.currentTime,"aria-valuemax":b.duration,tabindex:"0",onKeydown:_},null,44,vx),e.createElementVNode("div",gx,[e.createElementVNode("button",{"data-testid":"btn-zoom-in","aria-label":"Zoom in",onClick:y},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(yr)},null,8,["icon"])]),e.createElementVNode("span",yx,e.toDisplayString(Math.round(i.value*100))+"%",1),e.createElementVNode("button",{"data-testid":"btn-zoom-out","aria-label":"Zoom out",onClick:V},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Cm)},null,8,["icon"])])])]))}}),wx=Te(bx,[["__scopeId","data-v-001df415"]]),kx={class:"video-filters-panel"},xx={class:"filter-controls"},Ex=["for"],Vx={class:"filter-slider-group"},Sx=["id","onUpdate:modelValue","min","max","step","data-testid","aria-label","aria-valuenow","aria-valuemin","aria-valuemax","onInput"],Cx={class:"filter-value"},_x={class:"filter-actions"},Nx={key:0,class:"filter-presets"},Tx={class:"preset-list"},Mx=["data-testid","aria-label","onClick"],Bx=e.defineComponent({__name:"VideoFiltersPanel",emits:["filter-change"],setup(a,{emit:n}){const t=n,o=[{type:"brightness",label:"Brightness",min:0,max:200,step:1,default:100},{type:"contrast",label:"Contrast",min:0,max:200,step:1,default:100},{type:"saturation",label:"Saturation",min:0,max:200,step:1,default:100},{type:"hue",label:"Hue",min:-180,max:180,step:1,default:0},{type:"blur",label:"Blur",min:0,max:10,step:.5,default:0},{type:"sharpen",label:"Sharpen",min:0,max:10,step:.5,default:0},{type:"sepia",label:"Sepia",min:0,max:100,step:1,default:0},{type:"grayscale",label:"Grayscale",min:0,max:100,step:1,default:0}],i=e.reactive(o.reduce((v,h)=>(v[h.type]=h.default,v),{})),r=e.ref([{id:"vintage",name:"Vintage",values:{brightness:110,contrast:120,saturation:80,sepia:30}},{id:"noir",name:"Film Noir",values:{brightness:90,contrast:130,grayscale:100}},{id:"vibrant",name:"Vibrant",values:{brightness:110,contrast:110,saturation:140}},{id:"dreamy",name:"Dreamy",values:{brightness:120,blur:2,saturation:90}}]);function s(v,h){switch(v){case"brightness":case"contrast":case"saturation":case"sepia":case"grayscale":return`${h}%`;case"hue":return`${h}°`;case"blur":case"sharpen":return h.toFixed(1);default:return h.toString()}}function l(v){return["brightness","contrast","saturation","hue","blur","sharpen","sepia","grayscale"].includes(v)}function c(v){if(!l(v))return;const h={id:`filter-${v}`,filterId:v,params:{value:i[v]},intensity:1};t("filter-change",h)}function d(){o.forEach(v=>{i[v.type]=v.default,c(v.type)})}function u(){const v=prompt("Enter preset name:");if(!v)return;const h={id:`custom-${Date.now()}`,name:v,values:{...i}};r.value.push(h)}function p(v){Object.entries(v.values).forEach(([h,g])=>{i[h]=g,c(h)})}return(v,h)=>(e.openBlock(),e.createElementBlock("div",kx,[h[3]||(h[3]=e.createElementVNode("h3",null,"Video Filters",-1)),e.createElementVNode("div",xx,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(o,g=>e.createElementVNode("div",{key:g.type,class:"filter-control"},[e.createElementVNode("label",{for:`filter-${g.type}`},e.toDisplayString(g.label),9,Ex),e.createElementVNode("div",Vx,[e.withDirectives(e.createElementVNode("input",{id:`filter-${g.type}`,"onUpdate:modelValue":y=>i[g.type]=y,type:"range",min:g.min,max:g.max,step:g.step,class:"filter-slider","data-testid":`filter-${g.type}`,"aria-label":`${g.label} filter`,"aria-valuenow":i[g.type],"aria-valuemin":g.min,"aria-valuemax":g.max,onInput:y=>c(g.type)},null,40,Sx),[[e.vModelText,i[g.type],void 0,{number:!0}]]),e.createElementVNode("span",Cx,e.toDisplayString(s(g.type,i[g.type])),1)])])),64))]),e.createElementVNode("div",_x,[e.createElementVNode("button",{class:"reset-filters-btn","data-testid":"btn-reset-filters","aria-label":"Reset all filters to default",onClick:d},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn)},null,8,["icon"]),h[0]||(h[0]=e.createTextVNode(" Reset All Filters ",-1))]),e.createElementVNode("button",{class:"save-preset-btn","data-testid":"btn-save-preset","aria-label":"Save current filter settings as preset",onClick:u},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(wr)},null,8,["icon"]),h[1]||(h[1]=e.createTextVNode(" Save as Preset ",-1))])]),r.value.length>0?(e.openBlock(),e.createElementBlock("div",Nx,[h[2]||(h[2]=e.createElementVNode("h4",null,"Presets",-1)),e.createElementVNode("div",Tx,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,g=>(e.openBlock(),e.createElementBlock("button",{key:g.id,class:"preset-btn","data-testid":`preset-${g.id}`,"aria-label":`Apply ${g.name} preset`,onClick:y=>p(g)},e.toDisplayString(g.name),9,Mx))),128))])])):e.createCommentVNode("",!0)]))}}),Ix=Te(Bx,[["__scopeId","data-v-5ad2ac63"]]),Fx={class:"video-text-panel"},$x={class:"text-input-group"},Rx={class:"text-options"},Dx={class:"option-row"},Ax={class:"option-row"},Ux={class:"option-row"},Lx={class:"option-row"},Ox={class:"checkbox-label"},zx={class:"option-row"},Px={class:"text-overlay-list"},jx={key:0,class:"empty-state"},Wx=["data-testid"],Zx={class:"overlay-preview"},Xx={class:"overlay-controls"},Hx=["data-testid","aria-label","onClick"],Gx=["data-testid","aria-label","onClick"],Jx=["data-testid","aria-label","onClick"],Yx=e.defineComponent({__name:"VideoTextPanel",emits:["text-add","text-remove","text-update"],setup(a,{emit:n}){const t=n,o=e.ref([]),i=e.reactive({text:"",fontFamily:"Arial",fontSize:32,color:"#FFFFFF",backgroundColor:"#000000",hasBackground:!0,animation:"fade-in"});function r(){if(!i.text.trim())return;const d={id:`text-${Date.now()}`,text:i.text,x:50,y:50,fontSize:i.fontSize,fontFamily:i.fontFamily,color:i.color,startTime:0,opacity:1};i.hasBackground&&(d.backgroundColor=i.backgroundColor),i.animation!=="none"&&(d.animation=i.animation),o.value.push(d),t("text-add",d),i.text=""}function s(d){const u=o.value.findIndex(p=>p.id===d);u!==-1&&(o.value.splice(u,1),t("text-remove",d))}function l(d){i.text=d.text,i.fontFamily=d.fontFamily||"Arial",i.fontSize=d.fontSize,i.color=d.color,i.backgroundColor=d.backgroundColor||"#000000",i.hasBackground=!!d.backgroundColor,i.animation=d.animation||"none",s(d.id)}function c(d){const u={...d,id:`text-${Date.now()}`,x:d.x+10,y:d.y+10};o.value.push(u),t("text-add",u)}return(d,u)=>(e.openBlock(),e.createElementBlock("div",Fx,[u[17]||(u[17]=e.createElementVNode("h3",null,"Text Overlays",-1)),e.createElementVNode("div",$x,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[0]||(u[0]=p=>i.text=p),type:"text",placeholder:"Enter text...",class:"text-input","data-testid":"input-text","aria-label":"Text overlay content",onKeyup:e.withKeys(r,["enter"])},null,544),[[e.vModelText,i.text]]),e.createElementVNode("button",{class:"add-text-btn","data-testid":"btn-add-text","aria-label":"Add text overlay",onClick:r},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(yr)},null,8,["icon"]),u[7]||(u[7]=e.createTextVNode(" Add ",-1))])]),e.createElementVNode("div",Rx,[e.createElementVNode("div",Dx,[u[9]||(u[9]=e.createElementVNode("label",{for:"font-family"},"Font:",-1)),e.withDirectives(e.createElementVNode("select",{id:"font-family","onUpdate:modelValue":u[1]||(u[1]=p=>i.fontFamily=p),"data-testid":"select-font"},[...u[8]||(u[8]=[e.createStaticVNode('<option value="Arial" data-v-4d240e1e>Arial</option><option value="Helvetica" data-v-4d240e1e>Helvetica</option><option value="Times New Roman" data-v-4d240e1e>Times New Roman</option><option value="Georgia" data-v-4d240e1e>Georgia</option><option value="Courier New" data-v-4d240e1e>Courier New</option><option value="Impact" data-v-4d240e1e>Impact</option><option value="Comic Sans MS" data-v-4d240e1e>Comic Sans MS</option>',7)])],512),[[e.vModelSelect,i.fontFamily]])]),e.createElementVNode("div",Ax,[u[10]||(u[10]=e.createElementVNode("label",{for:"font-size"},"Size:",-1)),e.withDirectives(e.createElementVNode("input",{id:"font-size","onUpdate:modelValue":u[2]||(u[2]=p=>i.fontSize=p),type:"number",min:"10",max:"200","data-testid":"input-font-size"},null,512),[[e.vModelText,i.fontSize,void 0,{number:!0}]])]),e.createElementVNode("div",Ux,[u[11]||(u[11]=e.createElementVNode("label",{for:"text-color"},"Color:",-1)),e.withDirectives(e.createElementVNode("input",{id:"text-color","onUpdate:modelValue":u[3]||(u[3]=p=>i.color=p),type:"color","data-testid":"input-text-color"},null,512),[[e.vModelText,i.color]])]),e.createElementVNode("div",Lx,[u[13]||(u[13]=e.createElementVNode("label",{for:"bg-color"},"Background:",-1)),e.withDirectives(e.createElementVNode("input",{id:"bg-color","onUpdate:modelValue":u[4]||(u[4]=p=>i.backgroundColor=p),type:"color","data-testid":"input-bg-color"},null,512),[[e.vModelText,i.backgroundColor]]),e.createElementVNode("label",Ox,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[5]||(u[5]=p=>i.hasBackground=p),type:"checkbox","data-testid":"checkbox-bg"},null,512),[[e.vModelCheckbox,i.hasBackground]]),u[12]||(u[12]=e.createTextVNode(" Enable ",-1))])]),e.createElementVNode("div",zx,[u[15]||(u[15]=e.createElementVNode("label",{for:"text-animation"},"Animation:",-1)),e.withDirectives(e.createElementVNode("select",{id:"text-animation","onUpdate:modelValue":u[6]||(u[6]=p=>i.animation=p),"data-testid":"select-animation"},[...u[14]||(u[14]=[e.createStaticVNode('<option value="none" data-v-4d240e1e>None</option><option value="fade-in" data-v-4d240e1e>Fade In</option><option value="slide-left" data-v-4d240e1e>Slide from Left</option><option value="slide-right" data-v-4d240e1e>Slide from Right</option><option value="slide-up" data-v-4d240e1e>Slide from Bottom</option><option value="slide-down" data-v-4d240e1e>Slide from Top</option><option value="typewriter" data-v-4d240e1e>Typewriter</option><option value="bounce" data-v-4d240e1e>Bounce</option>',8)])],512),[[e.vModelSelect,i.animation]])])]),e.createElementVNode("div",Px,[u[16]||(u[16]=e.createElementVNode("h4",null,"Active Overlays",-1)),o.value.length===0?(e.openBlock(),e.createElementBlock("div",jx," No text overlays added yet ")):e.createCommentVNode("",!0),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(p,v)=>(e.openBlock(),e.createElementBlock("div",{key:p.id,class:"text-overlay-item","data-testid":`overlay-${v}`},[e.createElementVNode("div",Zx,[e.createElementVNode("span",{style:e.normalizeStyle({fontFamily:p.fontFamily,fontSize:`${Math.min(p.fontSize/4,16)}px`,color:p.color})},e.toDisplayString(p.text),5)]),e.createElementVNode("div",Xx,[e.createElementVNode("button",{class:"edit-btn","data-testid":`btn-edit-${v}`,"aria-label":`Edit overlay: ${p.text}`,onClick:h=>l(p)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(sm)},null,8,["icon"])],8,Hx),e.createElementVNode("button",{class:"duplicate-btn","data-testid":`btn-duplicate-${v}`,"aria-label":`Duplicate overlay: ${p.text}`,onClick:h=>c(p)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(rm)},null,8,["icon"])],8,Gx),e.createElementVNode("button",{class:"remove-btn","data-testid":`btn-remove-${v}`,"aria-label":`Remove overlay: ${p.text}`,onClick:h=>s(p.id)},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Tm)},null,8,["icon"])],8,Jx)])],8,Wx))),128))])]))}}),Kx=Te(Yx,[["__scopeId","data-v-4d240e1e"]]),qx={class:"video-tools-panel"},Qx={class:"tool-tabs"},eE=["data-testid","aria-label","aria-selected","onClick"],tE={class:"tool-content"},nE={key:0,class:"trim-panel",role:"tabpanel","aria-label":"Trim controls"},oE={class:"trim-actions"},aE={key:3,class:"transitions-panel",role:"tabpanel","aria-label":"Transition controls"},iE={class:"transition-types"},rE=["data-testid","aria-label","onClick"],sE={class:"transition-preview"},lE=e.defineComponent({__name:"VideoToolsPanel",props:{activeTool:{}},emits:["tool-change","filter-change","text-add","transition-add","trim-set-start","trim-set-end","trim-clear"],setup(a){const n=[{id:"trim",name:"Trim",icon:Ll},{id:"filters",name:"Filters",icon:fn},{id:"text",name:"Text",icon:Wl},{id:"transitions",name:"Transitions",icon:Ls}],t=[{id:"fade",name:"Fade",icon:Ii},{id:"slide-left",name:"Slide Left",icon:Qu},{id:"slide-right",name:"Slide Right",icon:em},{id:"dissolve",name:"Dissolve",icon:Ii},{id:"wipe",name:"Wipe",icon:Ls},{id:"zoom",name:"Zoom",icon:Ii}];return(o,i)=>(e.openBlock(),e.createElementBlock("div",qx,[e.createElementVNode("div",Qx,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(n,r=>e.createElementVNode("button",{key:r.id,class:e.normalizeClass(["tool-tab",{active:o.activeTool===r.id}]),"data-testid":`tab-${r.id}`,"aria-label":`${r.name} tool`,"aria-selected":o.activeTool===r.id,role:"tab",onClick:s=>o.$emit("tool-change",r.id)},[e.createVNode(e.unref(D.IonIcon),{icon:r.icon},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.name),1)],10,eE)),64))]),e.createElementVNode("div",tE,[o.activeTool==="trim"?(e.openBlock(),e.createElementBlock("div",nE,[i[8]||(i[8]=e.createElementVNode("h3",null,"Trim Video",-1)),i[9]||(i[9]=e.createElementVNode("p",null,"Click and drag on the timeline to set trim points",-1)),e.createElementVNode("div",oE,[e.createElementVNode("button",{class:"action-btn","data-testid":"btn-set-start","aria-label":"Set trim start at current position",onClick:i[0]||(i[0]=r=>o.$emit("trim-set-start"))},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(As)},null,8,["icon"]),i[5]||(i[5]=e.createTextVNode(" Set Start ",-1))]),e.createElementVNode("button",{class:"action-btn","data-testid":"btn-set-end","aria-label":"Set trim end at current position",onClick:i[1]||(i[1]=r=>o.$emit("trim-set-end"))},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(As)},null,8,["icon"]),i[6]||(i[6]=e.createTextVNode(" Set End ",-1))]),e.createElementVNode("button",{class:"action-btn","data-testid":"btn-clear-trim","aria-label":"Clear trim points",onClick:i[2]||(i[2]=r=>o.$emit("trim-clear"))},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Wn)},null,8,["icon"]),i[7]||(i[7]=e.createTextVNode(" Clear ",-1))])])])):e.createCommentVNode("",!0),o.activeTool==="filters"?(e.openBlock(),e.createBlock(Ix,{key:1,onFilterChange:i[3]||(i[3]=r=>o.$emit("filter-change",r))})):e.createCommentVNode("",!0),o.activeTool==="text"?(e.openBlock(),e.createBlock(Kx,{key:2,onTextAdd:i[4]||(i[4]=r=>o.$emit("text-add",r))})):e.createCommentVNode("",!0),o.activeTool==="transitions"?(e.openBlock(),e.createElementBlock("div",aE,[i[10]||(i[10]=e.createElementVNode("h3",null,"Transitions",-1)),e.createElementVNode("div",iE,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(t,r=>e.createElementVNode("button",{key:r.id,class:"transition-btn","data-testid":`transition-${r.id}`,"aria-label":`Add ${r.name} transition`,onClick:s=>o.$emit("transition-add",r.id)},[e.createElementVNode("div",sE,[e.createVNode(e.unref(D.IonIcon),{icon:r.icon},null,8,["icon"])]),e.createElementVNode("span",null,e.toDisplayString(r.name),1)],8,rE)),64))])])):e.createCommentVNode("",!0)])]))}}),cE=Te(lE,[["__scopeId","data-v-fc135306"]]),dE={class:"video-export-panel"},uE={class:"export-presets"},mE=["value"],pE={key:0,class:"preset-details"},fE={class:"detail-row"},hE={class:"detail-row"},vE={class:"detail-row"},gE={class:"advanced-options"},yE={class:"options-content"},bE={class:"option-group"},wE={class:"option-group"},kE={class:"option-group"},xE=["disabled"],EE={key:1,class:"export-progress"},VE={class:"progress-message"},SE={class:"progress-bar"},CE=["aria-valuenow"],_E={class:"progress-percentage"},NE=e.defineComponent({__name:"VideoExportPanel",props:{presets:{},isExporting:{type:Boolean},exportProgress:{}},emits:["export"],setup(a,{emit:n}){const t=a,o=n,i=e.ref("instagram-reel"),r=e.reactive({quality:"medium",bitrate:5,includeAudio:!0}),s=e.computed(()=>t.presets.find(d=>d.id===i.value)),l=e.computed(()=>t.exportProgress<10?"Initializing export...":t.exportProgress<30?"Processing video tracks...":t.exportProgress<50?"Applying filters and effects...":t.exportProgress<70?"Rendering frames...":t.exportProgress<90?"Encoding video...":t.exportProgress<100?"Finalizing export...":"Export complete!");function c(){s.value&&o("export",{...s.value,options:{...r}})}return(d,u)=>(e.openBlock(),e.createElementBlock("div",dE,[u[14]||(u[14]=e.createElementVNode("h3",null,"Export Video",-1)),e.createElementVNode("div",uE,[u[4]||(u[4]=e.createElementVNode("label",{for:"preset-select"},"Export Preset:",-1)),e.withDirectives(e.createElementVNode("select",{id:"preset-select","onUpdate:modelValue":u[0]||(u[0]=p=>i.value=p),"data-testid":"preset-select","aria-label":"Select export preset"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.presets,p=>(e.openBlock(),e.createElementBlock("option",{key:p.id,value:p.id},e.toDisplayString(p.name),9,mE))),128))],512),[[e.vModelSelect,i.value]])]),s.value?(e.openBlock(),e.createElementBlock("div",pE,[e.createElementVNode("div",fE,[u[5]||(u[5]=e.createElementVNode("span",null,"Resolution:",-1)),e.createElementVNode("span",null,e.toDisplayString(s.value.width)+"x"+e.toDisplayString(s.value.height),1)]),e.createElementVNode("div",hE,[u[6]||(u[6]=e.createElementVNode("span",null,"Frame Rate:",-1)),e.createElementVNode("span",null,e.toDisplayString(s.value.fps)+" fps",1)]),e.createElementVNode("div",vE,[u[7]||(u[7]=e.createElementVNode("span",null,"Format:",-1)),e.createElementVNode("span",null,e.toDisplayString(s.value.format.toUpperCase()),1)])])):e.createCommentVNode("",!0),e.createElementVNode("details",gE,[u[12]||(u[12]=e.createElementVNode("summary",null,"Advanced Options",-1)),e.createElementVNode("div",yE,[e.createElementVNode("div",bE,[u[9]||(u[9]=e.createElementVNode("label",{for:"quality-select"},"Quality:",-1)),e.withDirectives(e.createElementVNode("select",{id:"quality-select","onUpdate:modelValue":u[1]||(u[1]=p=>r.quality=p),"data-testid":"quality-select"},[...u[8]||(u[8]=[e.createElementVNode("option",{value:"low"},"Low (smaller file)",-1),e.createElementVNode("option",{value:"medium"},"Medium (balanced)",-1),e.createElementVNode("option",{value:"high"},"High (best quality)",-1)])],512),[[e.vModelSelect,r.quality]])]),e.createElementVNode("div",wE,[u[10]||(u[10]=e.createElementVNode("label",{for:"bitrate-input"},"Bitrate (Mbps):",-1)),e.withDirectives(e.createElementVNode("input",{id:"bitrate-input","onUpdate:modelValue":u[2]||(u[2]=p=>r.bitrate=p),type:"number",min:"1",max:"50","data-testid":"bitrate-input"},null,512),[[e.vModelText,r.bitrate,void 0,{number:!0}]])]),e.createElementVNode("div",kE,[e.createElementVNode("label",null,[e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":u[3]||(u[3]=p=>r.includeAudio=p),type:"checkbox","data-testid":"include-audio"},null,512),[[e.vModelCheckbox,r.includeAudio]]),u[11]||(u[11]=e.createTextVNode(" Include Audio ",-1))])])])]),e.createElementVNode("button",{class:"btn-export",disabled:d.isExporting||!s.value,"data-testid":"btn-start-export","aria-label":"Start video export",onClick:c},[d.isExporting?(e.openBlock(),e.createBlock(e.unref(D.IonSpinner),{key:0,name:"crescent"})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(So)},null,8,["icon"]),u[13]||(u[13]=e.createTextVNode(" Export Video ",-1))],64))],8,xE),d.isExporting?(e.openBlock(),e.createElementBlock("div",EE,[e.createElementVNode("div",VE,e.toDisplayString(l.value),1),e.createElementVNode("div",SE,[e.createElementVNode("div",{class:"progress-fill",style:e.normalizeStyle({width:`${d.exportProgress}%`}),role:"progressbar","aria-valuenow":d.exportProgress,"aria-valuemin":"0","aria-valuemax":"100"},null,12,CE)]),e.createElementVNode("div",_E,e.toDisplayString(d.exportProgress)+"% ",1)])):e.createCommentVNode("",!0)]))}}),TE=Te(NE,[["__scopeId","data-v-5caf8fe6"]]),ME=["data-testid"],BE={class:"progress-header"},IE={class:"file-info"},FE={class:"file-details"},$E={class:"file-name"},RE={class:"file-meta"},DE={class:"file-size"},AE={key:0,class:"separator"},UE={key:1,class:"upload-speed"},LE={key:2,class:"separator"},OE={key:3,class:"time-remaining"},zE={class:"progress-actions"},PE={key:0,class:"status-icon completed","data-testid":"video-upload-status-completed"},jE={key:1,class:"status-icon error","data-testid":"video-upload-status-error"},WE={key:2,class:"status-icon processing","data-testid":"video-upload-status-processing",role:"status","aria-label":"Processing video"},ZE=["aria-valuenow","aria-label"],XE={class:"progress-bar"},HE={class:"progress-percent"},GE={key:1,class:"error-message","data-testid":"video-upload-error"},JE={key:2,class:"thumbnail-preview","data-testid":"video-upload-thumbnail"},YE=["src","alt"],KE={key:0,class:"video-duration"},qE=e.defineComponent({__name:"VideoUploadProgress",props:{upload:{}},emits:["cancel","retry","remove"],setup(a){const n=a,t=e.computed(()=>({"is-uploading":n.upload.status==="uploading","is-processing":n.upload.status==="processing","is-completed":n.upload.status==="completed","is-error":n.upload.status==="error","is-pending":n.upload.status==="pending"})),o=e.computed(()=>Zl),i=e.computed(()=>["uploading","processing"].includes(n.upload.status)),r=e.computed(()=>(n.upload.status==="processing",n.upload.progress||0)),s=e.computed(()=>{if(!n.upload.timeRemaining||n.upload.status!=="uploading")return null;const v=n.upload.timeRemaining;if(v<60)return`${Math.round(v)}s`;const h=Math.floor(v/60);return h<60?`${h}m ${Math.round(v%60)}s`:`${Math.floor(h/60)}h ${h%60}m`}),l=e.computed(()=>{var v;return n.upload.status==="completed"&&((v=n.upload.media)!=null&&v.thumbnail_url)?n.upload.media.thumbnail_url:null}),c=e.computed(()=>{var v;return(v=n.upload.media)==null?void 0:v.duration});function d(v){if(v===0)return"0 B";const h=["B","KB","MB","GB","TB"],g=1024,y=Math.floor(Math.log(v)/Math.log(g));return`${(v/Math.pow(g,y)).toFixed(1)} ${h[y]}`}function u(v){if(v===0)return"0 B/s";const h=["B/s","KB/s","MB/s","GB/s"],g=1024,y=Math.floor(Math.log(v)/Math.log(g));return`${(v/Math.pow(g,y)).toFixed(1)} ${h[y]}`}function p(v){const h=Math.floor(v/3600),g=Math.floor(v%3600/60),y=Math.floor(v%60);return h>0?`${h}:${g.toString().padStart(2,"0")}:${y.toString().padStart(2,"0")}`:`${g}:${y.toString().padStart(2,"0")}`}return(v,h)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["upload-progress-item",t.value]),"data-testid":`video-upload-progress-${v.upload.id}`},[e.createElementVNode("div",BE,[e.createElementVNode("div",IE,[e.createVNode(e.unref(D.IonIcon),{icon:o.value,class:"file-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("div",FE,[e.createElementVNode("h4",$E,e.toDisplayString(v.upload.filename),1),e.createElementVNode("p",RE,[e.createElementVNode("span",DE,e.toDisplayString(d(v.upload.bytesTotal||0)),1),v.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",AE,"•")):e.createCommentVNode("",!0),v.upload.status==="uploading"?(e.openBlock(),e.createElementBlock("span",UE,e.toDisplayString(u(v.upload.uploadSpeed||0)),1)):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",LE,"•")):e.createCommentVNode("",!0),s.value?(e.openBlock(),e.createElementBlock("span",OE,e.toDisplayString(s.value)+" remaining ",1)):e.createCommentVNode("",!0)])])]),e.createElementVNode("div",zE,[v.upload.status==="completed"?(e.openBlock(),e.createElementBlock("div",PE,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Al)},null,8,["icon"])])):v.upload.status==="error"?(e.openBlock(),e.createElementBlock("div",jE,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(qu),"aria-hidden":"true"},null,8,["icon"])])):v.upload.status==="processing"?(e.openBlock(),e.createElementBlock("div",WE,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),v.upload.status==="uploading"?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:3,fill:"clear",size:"small",onClick:h[0]||(h[0]=g=>v.$emit("cancel")),"data-testid":"btn-cancel-video-upload","aria-label":"Cancel upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Wn),slot:"icon-only"},null,8,["icon"])]),_:1})):v.upload.status==="error"?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:4,fill:"clear",size:"small",onClick:h[1]||(h[1]=g=>v.$emit("retry")),"data-testid":"btn-retry-video-upload","aria-label":"Retry upload"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn),slot:"icon-only"},null,8,["icon"])]),_:1})):v.upload.status==="completed"?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:5,fill:"clear",size:"small",onClick:h[2]||(h[2]=g=>v.$emit("remove")),"data-testid":"btn-remove-video-upload","aria-label":"Remove from list"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Wn),slot:"icon-only"},null,8,["icon"])]),_:1})):e.createCommentVNode("",!0)])]),i.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"progress-bar-container","data-testid":"video-upload-progress-bar",role:"progressbar","aria-valuenow":Math.round(r.value),"aria-valuemin":"0","aria-valuemax":"100","aria-label":v.upload.status==="processing"?"Processing progress":"Upload progress"},[e.createElementVNode("div",XE,[e.createElementVNode("div",{class:e.normalizeClass(["progress-fill",{indeterminate:v.upload.status==="processing"}]),style:e.normalizeStyle({width:r.value+"%"})},null,6)]),e.createElementVNode("span",HE,e.toDisplayString(Math.round(r.value))+"%",1)],8,ZE)):e.createCommentVNode("",!0),v.upload.error?(e.openBlock(),e.createElementBlock("div",GE,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Dm)},null,8,["icon"]),e.createElementVNode("span",null,e.toDisplayString(v.upload.error),1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",JE,[e.createElementVNode("img",{src:l.value,alt:v.upload.filename},null,8,YE),c.value?(e.openBlock(),e.createElementBlock("div",KE,e.toDisplayString(p(c.value)),1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],10,ME))}}),QE=Te(qE,[["__scopeId","data-v-9eacbf91"]]),ji=4,e4=500,t4=new Set([408,425,429,500,502,503,504,520,521,522,523,524,525]);function ni(a){return typeof a=="object"&&a!==null}function Vl(a){return ni(a)?typeof a.upload_url=="string"&&typeof a.upload_id=="string"&&typeof a.media_uuid=="string"&&typeof a.expires_at=="string":!1}function n4(a){if(Vl(a))return a;if(ni(a)&&Vl(a.data))return a.data;throw new Error("Invalid upload response from backend")}function Sl(a){return ni(a)?typeof a.uuid=="string"&&typeof a.processing_status=="string":!1}function o4(a){if(Sl(a))return a;if(ni(a)&&Sl(a.data))return a.data;throw new Error("Invalid media response from backend")}function aa(a){return a?{...a}:{}}function Cl(a,n="PUT"){return typeof a.method=="string"&&a.method.trim()!==""?a.method.trim().toUpperCase():n}function a4(a){return a.resumable===!0?!0:/tusupload/i.test(a.upload_url)}function i4(a){if(typeof btoa=="function")try{return btoa(unescape(encodeURIComponent(a)))}catch{return btoa(a)}throw new Error("Base64 encoder is unavailable for TUS metadata")}function r4(a,n){return[["filename",a.filename],["filetype",a.file.type||"application/octet-stream"],["uploadid",n.upload_id],["mediauuid",n.media_uuid]].map(([o,i])=>`${o} ${i4(i)}`).join(",")}function ia(a,n){const t=Math.max(a.bytesTotal,1);a.bytesUploaded=n,a.progress=Math.min(100,n/t*100);const o=Math.max((Date.now()-a.startedAt.getTime())/1e3,.001);a.uploadSpeed=n/o;const i=Math.max(t-n,0);a.timeRemaining=i/Math.max(a.uploadSpeed,1)}function s4(a,n){return a instanceof Error?a:new Error(n)}function l4(a){if(!(a instanceof Error))return!1;const n=a.message.toLowerCase();return n.includes("failed to fetch")||n.includes("networkerror")||n.includes("network request failed")||n.includes("err_ssl_")}function _l(a){const n=Math.max(0,a-1),t=e4*Math.pow(2,n);return Math.min(5e3,t)}function Nl(a){return new Promise(n=>{window.setTimeout(n,a)})}async function Tl(a,n){for(let t=1;t<=ji;t+=1)try{const o=await n();if(o.ok||!t4.has(o.status)||t>=ji)return o;await Nl(_l(t))}catch(o){if(!l4(o)||t>=ji)throw o;await Nl(_l(t))}throw new Error(`${a} failed after retry attempts`)}function c4(a={}){const n=e.ref(new Map),t=e.ref(new Set),o=e.ref(null),i=new Map,r=new Map,s=e.computed(()=>t.value.size>0),l=e.computed(()=>Array.from(n.value.values())),c=e.computed(()=>{const E=Array.from(n.value.values());return E.length===0?0:E.reduce((A,P)=>A+P.progress,0)/E.length});function d(E){o.value=E}function u(){}async function p(E){var A;const R=E.filter(P=>v(P));if(R.length!==0&&((A=a.onFilesSelected)==null||A.call(a,R),a.autoUpload!==!1))for(const P of R)await h(P)}function v(E){return!(a.maxFileSize&&E.size>a.maxFileSize||a.allowedFormats&&a.allowedFormats.length>0&&!a.allowedFormats.includes(E.type))}async function h(E){var P,M,j;const R=H(E);if(n.value.has(R)){const U=n.value.get(R);if((U==null?void 0:U.status)==="uploading")return}const A={id:R,file:E,filename:E.name,progress:0,status:"pending",startedAt:new Date,bytesTotal:E.size,bytesUploaded:0};n.value.set(A.id,A),t.value.add(A.id);try{A.status="uploading",(P=a.onUploadStart)==null||P.call(a,A);const U=await g(E);a.resumable===!0||U.resumable===!0?await V(A,U):await y(A,U),A.status="processing",A.progress=100;const F=await w(U.media_uuid);A.status="completed",A.media=F,(M=a.onUploadComplete)==null||M.call(a,F)}catch(U){if(A.status!=="cancelled"){const S=s4(U,"Upload failed");A.status="error",A.error=S.message,(j=a.onUploadError)==null||j.call(a,S,A)}}finally{t.value.delete(A.id),i.delete(A.id),r.delete(A.id)}}async function g(E){if(!o.value)throw new Error("API client not configured");const R={collection:a.collection||"videos",filename:E.name,size:E.size,mime_type:E.type,...a.ownerUuid!==void 0?{ownerUuid:a.ownerUuid}:{},...a.ownerType!==void 0?{ownerType:a.ownerType}:{}},A=await o.value.post("/api/v1/video/upload",R);return n4(A)}async function y(E,R){const A=new XMLHttpRequest,P=Cl(R),M=aa(R.headers);return new Promise((j,U)=>{A.upload.addEventListener("progress",S=>{var F;S.lengthComputable&&(ia(E,S.loaded),(F=a.onUploadProgress)==null||F.call(a,E))}),A.addEventListener("load",()=>{i.delete(E.id),A.status>=200&&A.status<300?j():U(new Error(`Upload failed with status ${A.status}`))}),A.addEventListener("error",()=>{i.delete(E.id),U(new Error("Upload failed"))}),A.addEventListener("abort",()=>{i.delete(E.id),U(new Error("Upload cancelled"))}),A.open(P,R.upload_url),Object.entries(M).forEach(([S,F])=>{A.setRequestHeader(S,F)}),!Object.keys(M).some(S=>S.toLowerCase()==="content-type")&&E.file.type&&A.setRequestHeader("Content-Type",E.file.type),i.set(E.id,A),A.send(E.file)})}async function V(E,R){var U;if(a4(R)){await B(E,R);return}const A=a.chunkSize||5*1024*1024,P=_(E.file,A),M=new AbortController;r.set(E.id,M);const j=await m(R.upload_id);j&&(P.forEach(S=>{S.end<=j.bytesUploaded&&(S.uploaded=!0)}),ia(E,j.bytesUploaded));for(const S of P)S.uploaded||(await b(E,R,S,M),ia(E,S.end),(U=a.onUploadProgress)==null||U.call(a,E))}async function B(E,R){var J;const A=new AbortController;r.set(E.id,A);const P={...aa(R.headers),"Tus-Resumable":"1.0.0","Upload-Length":String(E.file.size),"Upload-Metadata":r4(E,R)},M=await Tl("Resumable upload initialization",()=>fetch(R.upload_url,{method:"POST",headers:P,signal:A.signal}));if(!M.ok)throw new Error(`Failed to initialize resumable upload: ${M.status}`);const j=M.headers.get("Location");if(!j)throw new Error("Resumable upload endpoint did not return upload location");const U=new URL(j,R.upload_url).toString(),S=a.chunkSize||5*1024*1024;let F=0;for(;F<E.file.size;){const G=Math.min(F+S,E.file.size),Q=E.file.slice(F,G),ge={...aa(R.headers),"Tus-Resumable":"1.0.0","Upload-Offset":String(F),"Content-Type":"application/offset+octet-stream"},be=await Tl("Resumable chunk upload",()=>fetch(U,{method:"PATCH",headers:ge,body:Q,signal:A.signal}));if(be.status===409){const $=Number(be.headers.get("Upload-Offset")??"-1");if(Number.isFinite($)&&$>=0){F=$;continue}}if(!be.ok)throw new Error(`Resumable chunk upload failed: ${be.status}`);const te=Number(be.headers.get("Upload-Offset")??String(G));F=Number.isFinite(te)&&te>F?te:G,ia(E,F),(J=a.onUploadProgress)==null||J.call(a,E)}}function _(E,R){const A=[];let P=0,M=0;for(;P<E.size;){const j=Math.min(P+R,E.size);A.push({start:P,end:j,blob:E.slice(P,j),index:M,uploaded:!1}),P=j,M++}return A}async function b(E,R,A,P){const M={...aa(R.headers),"Content-Range":`bytes ${A.start}-${A.end-1}/${E.file.size}`,"Content-Type":E.file.type||"application/octet-stream"},j=await fetch(R.upload_url,{method:Cl(R),headers:M,body:A.blob,signal:P.signal});if(!j.ok)throw new Error(`Chunk upload failed: ${j.status}`);A.uploaded=!0}async function m(E){return null}async function w(E){if(!o.value)throw new Error("API client not configured");const R=60;let A=0;for(;A<R;){const P=await o.value.get(`/api/v1/video/${E}`),M=o4(P),j=String(M.processing_status);if(j==="ready")return M;if(j==="failed"||j==="error")throw new Error("Video processing failed");await new Promise(U=>{window.setTimeout(U,5e3)}),A++}throw new Error("Video processing timeout")}function I(E){const R=n.value.get(E);if(!R)return;const A=i.get(E);A&&(A.abort(),i.delete(E));const P=r.get(E);P&&(P.abort(),r.delete(E)),R.status="cancelled",R.error="Upload cancelled",t.value.delete(E)}async function N(E){const R=n.value.get(E);R&&(R.status="pending",R.error="",R.progress=0,R.bytesUploaded=0,await h(R.file))}function x(E){n.value.delete(E),t.value.delete(E),i.delete(E),r.delete(E)}function T(){Array.from(n.value.entries()).forEach(([E,R])=>{R.status==="completed"&&n.value.delete(E)})}function H(E){return`${E.name}-${E.size}-${Date.now()}`}return{uploads:l,isUploading:s,totalProgress:c,openFilePicker:u,handleFileSelect:p,validateFile:v,startUpload:h,cancelUpload:I,retryUpload:N,removeUpload:x,clearCompleted:T,setApiClient:d}}const d4=["accept","multiple"],u4={key:0,class:"upload-trigger","data-testid":"video-uploader-trigger"},m4=["onKeydown"],p4={key:1,class:"upload-list","data-testid":"video-upload-list"},f4={class:"drag-content"},h4=e.defineComponent({__name:"VideoUploader",props:{collection:{default:"videos"},multiple:{type:Boolean,default:!1},maxFileSize:{default:5*1024*1024*1024},maxDuration:{},allowedFormats:{default:()=>["video/mp4","video/webm","video/quicktime","video/x-msvideo"]},autoUpload:{type:Boolean,default:!0},resumable:{type:Boolean,default:!0},label:{default:"Upload Video"},description:{default:"Click to select or drag and drop"},ownerUuid:{},ownerType:{},apiClient:{}},emits:["upload-start","upload-progress","upload-complete","upload-error","files-selected"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(),r=e.ref(!1),{uploads:s,isUploading:l,handleFileSelect:c,cancelUpload:d,retryUpload:u,removeUpload:p,setApiClient:v}=c4({collection:t.collection,...t.ownerUuid!==void 0?{ownerUuid:t.ownerUuid}:{},...t.ownerType!==void 0?{ownerType:t.ownerType}:{},maxFileSize:t.maxFileSize,...t.maxDuration!==void 0?{maxDuration:t.maxDuration}:{},allowedFormats:t.allowedFormats,autoUpload:t.autoUpload,resumable:t.resumable,onUploadStart:m=>o("upload-start",m),onUploadProgress:m=>o("upload-progress",m),onUploadComplete:m=>o("upload-complete",m),onUploadError:(m,w)=>o("upload-error",m,w),onFilesSelected:m=>o("files-selected",m)});t.apiClient&&v(t.apiClient);const h=e.computed(()=>t.allowedFormats.join(",")),g=e.computed(()=>t.multiple||s.value.length===0);function y(){i.value&&i.value.click()}function V(m){const w=m.target,I=Array.from(w.files||[]);I.length>0&&(c(I),w.value="")}function B(m){var N;m.preventDefault(),r.value=!1;const I=Array.from(((N=m.dataTransfer)==null?void 0:N.files)||[]).filter(x=>x.type.startsWith("video/"));I.length>0&&c(I)}function _(m){var w;m.preventDefault(),(w=m.dataTransfer)!=null&&w.types.includes("Files")&&(r.value=!0)}function b(m){m.target.closest(".video-uploader")||(r.value=!1)}return e.onMounted(()=>{document.addEventListener("dragover",_),document.addEventListener("dragleave",b),document.addEventListener("drop",m=>m.preventDefault())}),e.onUnmounted(()=>{document.removeEventListener("dragover",_),document.removeEventListener("dragleave",b),document.removeEventListener("drop",m=>m.preventDefault())}),(m,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-uploader",{"is-uploading":e.unref(l)}]),"data-testid":"video-uploader"},[e.createElementVNode("input",{ref_key:"fileInputEl",ref:i,type:"file",accept:h.value,multiple:m.multiple,onChange:V,"data-testid":"video-uploader-input","aria-label":"Select video files to upload",hidden:""},null,40,d4),!e.unref(l)||g.value?(e.openBlock(),e.createElementBlock("div",u4,[e.renderSlot(m.$slots,"trigger",{open:y},()=>[e.createElementVNode("div",{class:"default-upload-area","data-testid":"video-uploader-area",role:"button",tabindex:"0","aria-label":"Click to select video for upload",onClick:y,onKeydown:[e.withKeys(y,["enter"]),e.withKeys(e.withModifiers(y,["prevent"]),["space"])]},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Zl),class:"upload-icon","aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("h3",null,e.toDisplayString(m.label),1),e.createElementVNode("p",null,e.toDisplayString(m.description),1),e.createVNode(e.unref(D.IonButton),{size:"small","data-testid":"btn-select-video","aria-label":"Select video file"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(yr),slot:"start","aria-hidden":"true"},null,8,["icon"]),w[2]||(w[2]=e.createTextVNode(" Select Video ",-1))]),_:1})],40,m4)],!0)])):e.createCommentVNode("",!0),e.unref(s).length>0?(e.openBlock(),e.createElementBlock("div",p4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(s),I=>(e.openBlock(),e.createBlock(QE,{key:I.id,upload:I,onCancel:N=>e.unref(d)(I.id),onRetry:N=>e.unref(u)(I.id),onRemove:N=>e.unref(p)(I.id)},null,8,["upload","onCancel","onRetry","onRemove"]))),128))])):e.createCommentVNode("",!0),r.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"drag-overlay","data-testid":"video-uploader-drag-overlay",onDrop:B,onDragover:w[0]||(w[0]=e.withModifiers(()=>{},["prevent"])),onDragleave:w[1]||(w[1]=I=>r.value=!1)},[e.createElementVNode("div",f4,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(So),"aria-hidden":"true"},null,8,["icon"]),w[3]||(w[3]=e.createElementVNode("p",null,"Drop video files here",-1))])],32)):e.createCommentVNode("",!0)],2))}}),v4=Te(h4,[["__scopeId","data-v-ea7587f7"]]),g4=["aria-valuenow","aria-valuemax","aria-label"],y4={class:"progress-bar"},b4={class:"time-display","data-testid":"video-time-display"},w4={class:"current-time"},k4={class:"duration"},x4={class:"control-buttons"},E4={class:"controls-left"},V4=["aria-label"],S4={class:"controls-center"},C4={key:0,class:"volume-controls"},_4=["aria-label"],N4=["value"],T4={class:"controls-right"},M4={key:0,class:"quality-selector"},B4=["aria-expanded"],I4={class:"quality-label"},F4={key:0,class:"quality-menu","data-testid":"video-quality-menu",role:"menu"},$4=["data-testid","aria-label","onClick"],R4=["aria-label"],D4=e.defineComponent({__name:"VideoControls",props:{playing:{type:Boolean},currentTime:{},duration:{},buffered:{},volume:{default:100},muted:{type:Boolean,default:!1},fullscreen:{type:Boolean,default:!1},isLive:{type:Boolean,default:!1},qualityLevels:{default:()=>[]},currentQuality:{default:"Auto"}},emits:["play-pause","play","pause","seek","skip-forward","skip-backward","toggleMute","setVolume","toggleFullscreen","togglePiP","selectQuality"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(!0),r=e.ref(!1),s=e.ref(),l=D.isPlatform("mobile"),c="pictureInPictureEnabled"in document,d=e.computed(()=>({width:`${t.currentTime/t.duration*100}%`})),u=e.computed(()=>({left:`${t.currentTime/t.duration*100}%`})),p=e.computed(()=>{if(!t.buffered||t.buffered.length===0)return{width:"0%"};for(let m=0;m<t.buffered.length;m++){const w=t.buffered.start(m),I=t.buffered.end(m);if(t.currentTime>=w&&t.currentTime<=I)return{width:`${I/t.duration*100}%`}}return t.buffered.length>0?{width:`${t.buffered.end(0)/t.duration*100}%`}:{width:"0%"}}),v=e.computed(()=>t.muted||t.volume===0?$m:t.volume<33?Bm:t.volume<66?Im:Mm);let h=null;function g(){i.value=!0,y()}function y(){h&&clearTimeout(h),t.playing&&!l&&(h=setTimeout(()=>{i.value=!1},3e3))}function V(m){if(!s.value||t.isLive)return;const w=s.value.getBoundingClientRect(),N=(m.clientX-w.left)/w.width*t.duration;o("seek",Math.max(0,Math.min(N,t.duration)))}function B(m){const w=m.target;o("setVolume",parseInt(w.value))}function _(m){o("selectQuality",m),r.value=!1}function b(m){if(!isFinite(m))return"0:00";const w=Math.floor(m/3600),I=Math.floor(m%3600/60),N=Math.floor(m%60);return w>0?`${w}:${I.toString().padStart(2,"0")}:${N.toString().padStart(2,"0")}`:`${I}:${N.toString().padStart(2,"0")}`}return e.onMounted(()=>{document.addEventListener("mousemove",g),y()}),e.onUnmounted(()=>{document.removeEventListener("mousemove",g),h&&clearTimeout(h)}),(m,w)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-controls",{"controls-visible":i.value}]),"data-testid":"video-controls"},[e.createElementVNode("div",{class:"progress-container","data-testid":"video-progress-bar",role:"slider","aria-valuenow":Math.round(m.currentTime),"aria-valuemin":"0","aria-valuemax":Math.round(m.duration),"aria-label":m.isLive?"Live stream":"Video progress",tabindex:"0",onClick:V},[e.createElementVNode("div",y4,[e.createElementVNode("div",{class:"progress-buffered",style:e.normalizeStyle(p.value)},null,4),e.createElementVNode("div",{class:"progress-played",style:e.normalizeStyle(d.value)},null,4),e.createElementVNode("div",{class:"progress-thumb",style:e.normalizeStyle(u.value)},null,4)]),e.createElementVNode("div",b4,[e.createElementVNode("span",w4,e.toDisplayString(b(m.currentTime)),1),w[7]||(w[7]=e.createElementVNode("span",{class:"separator"},"/",-1)),e.createElementVNode("span",k4,e.toDisplayString(m.isLive?"LIVE":b(m.duration)),1)])],8,g4),e.createElementVNode("div",x4,[e.createElementVNode("div",E4,[e.createElementVNode("button",{class:"control-btn play-pause","data-testid":"btn-video-play-pause",onClick:w[0]||(w[0]=I=>m.$emit("play-pause")),"aria-label":m.playing?"Pause":"Play"},[e.createVNode(e.unref(D.IonIcon),{icon:m.playing?e.unref(hm):e.unref(gm),"aria-hidden":"true"},null,8,["icon"])],8,V4),m.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:0,class:"control-btn skip-backward","data-testid":"btn-video-skip-backward",onClick:w[1]||(w[1]=I=>m.$emit("skip-backward")),"aria-label":"Skip backward 10 seconds"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(ym),"aria-hidden":"true"},null,8,["icon"]),w[8]||(w[8]=e.createElementVNode("span",{class:"skip-label"},"10",-1))])),m.isLive?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("button",{key:1,class:"control-btn skip-forward","data-testid":"btn-video-skip-forward",onClick:w[2]||(w[2]=I=>m.$emit("skip-forward")),"aria-label":"Skip forward 10 seconds"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(km),"aria-hidden":"true"},null,8,["icon"]),w[9]||(w[9]=e.createElementVNode("span",{class:"skip-label"},"10",-1))]))]),e.createElementVNode("div",S4,[e.unref(l)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",C4,[e.createElementVNode("button",{class:"control-btn mute-btn","data-testid":"btn-video-mute",onClick:w[3]||(w[3]=I=>m.$emit("toggleMute")),"aria-label":m.muted?"Unmute":"Mute"},[e.createVNode(e.unref(D.IonIcon),{icon:v.value,"aria-hidden":"true"},null,8,["icon"])],8,_4),e.createElementVNode("input",{type:"range",class:"volume-slider","data-testid":"slider-video-volume",min:"0",max:"100",value:m.muted?0:m.volume,onInput:B,"aria-label":"Volume"},null,40,N4)]))]),e.createElementVNode("div",T4,[m.qualityLevels.length>1?(e.openBlock(),e.createElementBlock("div",M4,[e.createElementVNode("button",{class:"control-btn quality-btn","data-testid":"btn-video-quality",onClick:w[4]||(w[4]=I=>r.value=!r.value),"aria-label":"Quality settings","aria-expanded":r.value},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(_m),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("span",I4,e.toDisplayString(m.currentQuality),1)],8,B4),r.value?(e.openBlock(),e.createElementBlock("div",F4,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.qualityLevels,I=>(e.openBlock(),e.createElementBlock("button",{key:I.label,class:e.normalizeClass(["quality-option",{active:I.label===m.currentQuality}]),"data-testid":`btn-video-quality-${I.label}`,"aria-label":`Set quality to ${I.label}`,role:"menuitem",onClick:N=>_(I)},e.toDisplayString(I.label),11,$4))),128))])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),!e.unref(l)&&c?(e.openBlock(),e.createElementBlock("button",{key:1,class:"control-btn pip-btn","data-testid":"btn-video-pip",onClick:w[5]||(w[5]=I=>m.$emit("togglePiP")),"aria-label":"Picture in Picture"},[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Nm),"aria-hidden":"true"},null,8,["icon"])])):e.createCommentVNode("",!0),e.createElementVNode("button",{class:"control-btn fullscreen-btn","data-testid":"btn-video-fullscreen",onClick:w[6]||(w[6]=I=>m.$emit("toggleFullscreen")),"aria-label":m.fullscreen?"Exit fullscreen":"Enter fullscreen"},[e.createVNode(e.unref(D.IonIcon),{icon:m.fullscreen?e.unref(im):e.unref(lm),"aria-hidden":"true"},null,8,["icon"])],8,R4)])])],2))}}),A4=Te(D4,[["__scopeId","data-v-2ae77c13"]]);function U4(a={}){var Q,ge,be;const n=e.ref(),t=e.ref(),o=e.ref(!1),i=e.ref(0),r=e.ref(0),s=e.ref(100),l=e.ref(a.muted||!1),c=e.ref(!1),d=e.ref(),u=e.ref(1),p=e.ref(!1),v=e.ref(null),h=e.ref("idle"),g=e.ref(a.playbackUrl||((Q=a.media)==null?void 0:Q.playback_url)||((ge=a.media)==null?void 0:ge.url)||""),y=e.ref(null),V=e.ref(a.isLive||!1),B=e.ref(null),_=e.ref(null);function b(te){_.value=te}if((be=a.media)!=null&&be.token_expires_at){const te=new Date(a.media.token_expires_at);y.value=Number.isNaN(te.getTime())?null:te}async function m(){var $;const te=V.value?t.value:n.value;if(te)try{await te.play(),o.value=!0,h.value=V.value?"live":"playing",($=a.onPlay)==null||$.call(a)}catch{v.value="Failed to play video",h.value="error"}}function w(){var $;const te=V.value?t.value:n.value;te&&(te.pause(),o.value=!1,h.value="paused",($=a.onPause)==null||$.call(a))}function I(){o.value?w():m()}function N(te){const $=V.value?t.value:n.value;if(!$||V.value)return;const O=Number.isFinite($.duration)?$.duration:te;$.currentTime=Math.max(0,Math.min(te,O)),i.value=$.currentTime}function x(te=10){const $=n.value;!$||V.value||N($.currentTime+te)}function T(te=10){const $=n.value;!$||V.value||N($.currentTime-te)}function H(){const te=V.value?t.value:n.value;te&&(te.muted=!te.muted,l.value=te.muted)}function E(te){const $=V.value?t.value:n.value;if(!$)return;const O=Math.max(0,Math.min(100,te));$.volume=O/100,s.value=O,O>0&&$.muted&&($.muted=!1,l.value=!1)}function R(te){const $=n.value;!$||V.value||($.playbackRate=te,u.value=te)}async function A(){const te=document.querySelector(".video-player-container");if(te)try{document.fullscreenElement?(await document.exitFullscreen(),c.value=!1):(await te.requestFullscreen(),c.value=!0)}catch{}}async function P(){const te=V.value?t.value:n.value;if(te)try{document.pictureInPictureElement?await document.exitPictureInPicture():document.pictureInPictureEnabled&&await te.requestPictureInPicture()}catch{}}async function M(){var $;v.value=null,h.value="loading",($=a.media)!=null&&$.provider&&a.media.provider!=="local"&&await j();const te=V.value?t.value:n.value;te&&(te.load(),await m())}async function j(){if(!(!_.value||!a.media))try{p.value=!0;const te=await _.value.get(`/api/v1/video/${a.media.uuid}/playback`);g.value=te.playback_url,y.value=new Date(te.token_expires_at);const $=V.value?t.value:n.value;if($&&$.src!==g.value){const O=!$.paused,me=$.currentTime;$.src=g.value,V.value||($.currentTime=me),O&&await m()}}catch{v.value="Failed to refresh playback token",h.value="error"}finally{p.value=!1}}async function U(te){if(t.value){if(t.value.canPlayType("application/vnd.apple.mpegurl")){t.value.src=te;return}try{t.value.src=te}catch{v.value="Live streaming not supported in this browser",h.value="error"}}}function S(){B.value&&(B.value.destroy(),B.value=null)}function F(){var $;const te=V.value?t.value:n.value;te&&(i.value=te.currentTime,r.value=te.duration,($=a.onTimeUpdate)==null||$.call(a,te.currentTime))}const J=e.computed(()=>{if(!d.value||d.value.length===0||!r.value)return 0;for(let te=0;te<d.value.length;te++){const $=d.value.start(te),O=d.value.end(te);if(i.value>=$&&i.value<=O)return O/r.value*100}return 0});function G(){if(!y.value)return!1;const te=new Date;return y.value.getTime()-te.getTime()<5*60*1e3}return e.watch([n,t],([te,$])=>{const O=V.value?$:te;O&&(O.addEventListener("timeupdate",F),O.addEventListener("loadedmetadata",()=>{r.value=O.duration,h.value="ready"}),O.addEventListener("progress",()=>{d.value=O.buffered}),O.addEventListener("ended",()=>{var me;o.value=!1,h.value="ended",(me=a.onEnded)==null||me.call(a)}),O.addEventListener("error",me=>{var ne;h.value="error",(ne=a.onError)==null||ne.call(a,"Video playback error")}),O.volume=s.value/100,O.muted=l.value)}),e.onUnmounted(()=>{S();const te=V.value?t.value:n.value;te&&te.removeEventListener("timeupdate",F)}),{videoEl:n,liveVideoEl:t,playing:o,currentTime:i,duration:r,volume:s,muted:l,isFullscreen:c,bufferedRanges:d,bufferedPercent:J,playbackRate:u,isLoading:p,error:v,status:h,currentPlaybackUrl:g,tokenExpiresAt:y,play:m,pause:w,togglePlayPause:I,seek:N,skipForward:x,skipBackward:T,toggleMute:H,setVolume:E,setPlaybackRate:R,toggleFullscreen:A,togglePiP:P,retry:M,refreshToken:j,setupLiveStream:U,setApiClient:b,shouldRefreshToken:G}}const L4=["src","poster","controls","autoplay","muted","loop","preload"],O4={key:1,ref:"livePlayerEl",class:"live-player"},z4=["controls","muted"],P4={key:0,class:"live-indicator","data-testid":"video-live-indicator","aria-label":"Live stream"},j4={key:2,class:"video-loading","data-testid":"video-loading",role:"status","aria-label":"Loading video"},W4={key:3,class:"video-error","data-testid":"video-error",role:"alert"},Z4={key:5,class:"gesture-zones","data-testid":"video-gesture-zones"},X4=e.defineComponent({__name:"VideoPlayer",props:{media:{},playbackUrl:{},apiClient:{},isLive:{type:Boolean,default:!1},controls:{type:Boolean,default:!0},autoplay:{type:Boolean,default:!1},muted:{type:Boolean,default:!1},loop:{type:Boolean,default:!1},poster:{},preload:{default:"metadata"},showCustomControls:{type:Boolean,default:!1},enableGestures:{type:Boolean,default:!0},className:{},crossorigin:{}},emits:["play","pause","ended","error","timeupdate","loadedmetadata","progress"],setup(a,{emit:n}){const t=a,o=n,{videoEl:i,liveVideoEl:r,playing:s,currentTime:l,duration:c,volume:d,muted:u,isFullscreen:p,bufferedRanges:v,isLoading:h,error:g,status:y,currentPlaybackUrl:V,tokenExpiresAt:B,play:_,pause:b,seek:m,toggleMute:w,setVolume:I,toggleFullscreen:N,togglePlayPause:x,skipForward:T,skipBackward:H,retry:E,refreshToken:R,setApiClient:A,shouldRefreshToken:P,setupLiveStream:M}=U4({...t.media!==void 0?{media:t.media}:{},...t.playbackUrl!==void 0?{playbackUrl:t.playbackUrl}:{},isLive:t.isLive??!1,autoplay:t.autoplay??!1,muted:t.muted??!1});async function j(){await R()}const U=e.computed(()=>{const ne=["video-player-container"];return t.className&&ne.push(t.className),p.value&&ne.push("fullscreen"),t.isLive&&ne.push("is-live"),s.value&&ne.push("is-playing"),h.value&&ne.push("is-loading"),ne}),S=e.computed(()=>{var ne,ee;if(t.poster)return t.poster;if((ne=t.media)!=null&&ne.poster_url)return t.media.poster_url;if((ee=t.media)!=null&&ee.thumbnail_url)return t.media.thumbnail_url});function F(ne){const ee=ne.target;o("loadedmetadata",{duration:ee.duration,width:ee.videoWidth,height:ee.videoHeight})}function J(ne){const ee=ne.target;l.value=ee.currentTime,o("timeupdate",ee.currentTime)}function G(){s.value=!0,o("play")}function Q(){s.value=!1,o("pause")}function ge(){s.value=!1,o("ended")}function be(ne){const ee=ne.target;let pe="Failed to load video";if(ee.error)switch(ee.error.code){case ee.error.MEDIA_ERR_ABORTED:pe="Video playback aborted";break;case ee.error.MEDIA_ERR_NETWORK:pe="Network error while loading video";break;case ee.error.MEDIA_ERR_DECODE:pe="Video decoding error";break;case ee.error.MEDIA_ERR_SRC_NOT_SUPPORTED:pe="Video format not supported";break}g.value=pe,o("error",pe)}function te(ne){const ee=ne.target;v.value=ee.buffered,o("progress",ee.buffered)}function $(){h.value=!0}function O(){h.value=!1}e.watch(()=>t.apiClient,ne=>{ne&&A(ne)},{immediate:!0}),e.watch(()=>t.playbackUrl,ne=>{typeof ne=="string"&&ne.length>0&&(V.value=ne)},{immediate:!0}),e.watch(()=>{var ne;return(ne=t.media)==null?void 0:ne.token_expires_at},ne=>{if(!ne){B.value=null;return}const ee=new Date(ne);B.value=Number.isNaN(ee.getTime())?null:ee},{immediate:!0}),e.watch(()=>{var ne;return(ne=t.media)==null?void 0:ne.playback_url},async(ne,ee)=>{if(t.playbackUrl||!ne||ne===ee)return;const pe=i.value;if(!pe||t.isLive){V.value=ne;return}const ae=!pe.paused,ue=pe.currentTime;V.value=ne,await e.nextTick();try{pe.currentTime=ue}catch{}ae&&await _()},{immediate:!0});let me=null;return e.watch(()=>t.isLive,async ne=>{var pe;if(!ne)return;const ee=t.playbackUrl||((pe=t.media)==null?void 0:pe.playback_url)||"";ee&&await M(ee)},{immediate:!0}),e.onMounted(()=>{var ne;(ne=t.media)!=null&&ne.provider&&t.media.provider!=="local"&&(me=setInterval(()=>{P()&&j()},3e4)),D.isPlatform("mobile")&&t.showCustomControls}),e.onUnmounted(()=>{me&&clearInterval(me)}),(ne,ee)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["video-player-container",U.value]),"data-testid":"video-player"},[ne.isLive?(e.openBlock(),e.createElementBlock("div",O4,[e.createElementVNode("video",{ref_key:"liveVideoEl",ref:r,controls:ne.controls&&!ne.showCustomControls,autoplay:!0,muted:e.unref(u),onPlay:G,onPause:Q,onError:be,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,z4),e.unref(y)==="live"?(e.openBlock(),e.createElementBlock("div",P4,[...ee[3]||(ee[3]=[e.createElementVNode("span",{class:"live-dot"},null,-1),e.createElementVNode("span",{class:"live-text"},"LIVE",-1)])])):e.createCommentVNode("",!0)],512)):(e.openBlock(),e.createElementBlock("video",{key:0,ref_key:"videoEl",ref:i,src:e.unref(V),poster:S.value,controls:ne.controls&&!ne.showCustomControls,autoplay:ne.autoplay,muted:e.unref(u),loop:ne.loop,preload:ne.preload,onLoadedmetadata:F,onTimeupdate:J,onPlay:G,onPause:Q,onEnded:ge,onError:be,onProgress:te,onWaiting:$,onCanplay:O,playsinline:"",class:"video-element","data-testid":"video-element"},null,40,L4)),e.unref(h)?(e.openBlock(),e.createElementBlock("div",j4,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"})])):e.createCommentVNode("",!0),e.unref(g)?(e.openBlock(),e.createElementBlock("div",W4,[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(br),"aria-hidden":"true"},null,8,["icon"]),e.createElementVNode("p",null,e.toDisplayString(e.unref(g)),1),e.createVNode(e.unref(D.IonButton),{size:"small",onClick:e.unref(E),"data-testid":"btn-video-retry","aria-label":"Retry loading video"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{icon:e.unref(Gn),slot:"start","aria-hidden":"true"},null,8,["icon"]),ee[4]||(ee[4]=e.createTextVNode(" Retry ",-1))]),_:1},8,["onClick"])])):e.createCommentVNode("",!0),ne.showCustomControls&&!e.unref(g)?(e.openBlock(),e.createBlock(A4,{key:4,playing:e.unref(s),currentTime:e.unref(l),duration:e.unref(c),buffered:e.unref(v),volume:e.unref(d),muted:e.unref(u),fullscreen:e.unref(p),isLive:ne.isLive,onPlay:e.unref(_),onPause:e.unref(b),onSeek:e.unref(m),onToggleMute:e.unref(w),onSetVolume:e.unref(I),onToggleFullscreen:e.unref(N),class:"custom-controls"},null,8,["playing","currentTime","duration","buffered","volume","muted","fullscreen","isLive","onPlay","onPause","onSeek","onToggleMute","onSetVolume","onToggleFullscreen"])):e.createCommentVNode("",!0),ne.enableGestures&&!e.unref(g)?(e.openBlock(),e.createElementBlock("div",Z4,[e.createElementVNode("div",{class:"gesture-left","data-testid":"video-gesture-skip-back","aria-label":"Double tap to skip backward",onDblclick:ee[0]||(ee[0]=(...pe)=>e.unref(H)&&e.unref(H)(...pe))},null,32),e.createElementVNode("div",{class:"gesture-center","data-testid":"video-gesture-play-pause","aria-label":"Tap to play or pause",onClick:ee[1]||(ee[1]=(...pe)=>e.unref(x)&&e.unref(x)(...pe))}),e.createElementVNode("div",{class:"gesture-right","data-testid":"video-gesture-skip-forward","aria-label":"Double tap to skip forward",onDblclick:ee[2]||(ee[2]=(...pe)=>e.unref(T)&&e.unref(T)(...pe))},null,32)])):e.createCommentVNode("",!0)],2))}}),Qc=Te(X4,[["__scopeId","data-v-b8db4951"]]),H4=Fa.defineStore("video",()=>{const a=e.ref(new Map),n=e.ref(new Map),t=e.ref(new Map),o=e.ref(null),i=e.ref(!1),r=e.computed(()=>Array.from(a.value.values())),s=e.computed(()=>Array.from(n.value.values())),l=e.computed(()=>s.value.filter(M=>M.status==="live")),c=e.computed(()=>r.value.filter(M=>M.processing_status==="processing"));function d(M){a.value.set(M.uuid,M)}function u(M,j){const U=a.value.get(M);U&&a.value.set(M,{...U,...j})}function p(M){a.value.delete(M)}function v(M){return a.value.get(M)}function h(M){n.value.set(M.id,M)}function g(M,j){const U=n.value.get(M);U&&n.value.set(M,{...U,...j})}function y(M,j){const U=n.value.get(M);U&&n.value.set(M,{...U,status:j.status,viewer_count:j.viewer_count,peak_viewers:j.peak_viewers})}function V(M){n.value.delete(M)}function B(M){return n.value.get(M)}function _(M){return s.value.find(j=>j.media_uuid===M)}function b(M){t.value.set(M.id,M)}function m(M,j){const U=t.value.get(M);U&&t.value.set(M,{...U,...j})}function w(M){t.value.delete(M)}function I(M){return t.value.get(M)}function N(M){return Array.from(t.value.values()).filter(j=>j.media_uuid===M)}function x(M){o.value=M}function T(M){o.value&&(o.value={...o.value,...M})}function H(){o.value=null}function E(M){i.value=M}function R(){a.value.clear(),n.value.clear(),t.value.clear(),o.value=null,i.value=!1}function A(M){a.value.clear(),M.forEach(j=>{a.value.set(j.uuid,j)})}function P(M){n.value.clear(),M.forEach(j=>{n.value.set(j.id,j)})}return{videos:a,liveStreams:n,exportJobs:t,currentEditorState:o,isProcessing:i,allVideos:r,allLiveStreams:s,activeLiveStreams:l,processingVideos:c,setVideo:d,updateVideo:u,removeVideo:p,getVideo:v,setLiveStream:h,updateLiveStream:g,updateLiveStreamStats:y,removeLiveStream:V,getLiveStream:B,getLiveStreamByMedia:_,addExportJob:b,updateExportJob:m,removeExportJob:w,getExportJob:I,getExportJobsByMedia:N,setEditorState:x,updateEditorState:T,clearEditorState:H,setProcessing:E,clearAll:R,loadVideos:A,loadLiveStreams:P}});let En=null;function G4(a){En=a}const ra={post:async(a,n)=>{if(!En)throw new Error("HTTP client not configured");return await En(`/api/v1/video${a}`,{method:"POST",body:JSON.stringify(n),headers:{"Content-Type":"application/json"}})},get:async a=>{if(!En)throw new Error("HTTP client not configured");return await En(`/api/v1/video${a}`)},delete:async a=>{if(!En)throw new Error("HTTP client not configured");return await En(`/api/v1/video${a}`,{method:"DELETE"})}};function sa(a,n=null){const t=typeof a.id=="string"&&a.id!==""?a.id:typeof a.stream_id=="string"&&a.stream_id!==""?a.stream_id:n==null?void 0:n.id;if(!t)throw new Error("Invalid live stream response: missing stream id");const o={id:t,media_uuid:a.media_uuid??(n==null?void 0:n.media_uuid)??"",stream_key:a.stream_key??(n==null?void 0:n.stream_key)??"",rtmp_url:a.rtmp_url??(n==null?void 0:n.rtmp_url)??"",status:a.status??(n==null?void 0:n.status)??"idle",viewer_count:a.viewer_count??(n==null?void 0:n.viewer_count)??0,peak_viewers:a.peak_viewers??(n==null?void 0:n.peak_viewers)??0,auto_record:a.auto_record??(n==null?void 0:n.auto_record)??!0,low_latency:a.low_latency??(n==null?void 0:n.low_latency)??!1},i=a.playback_url??(n==null?void 0:n.playback_url);i!==void 0&&(o.playback_url=i);const r=a.started_at??(n==null?void 0:n.started_at);r!==void 0&&(o.started_at=r);const s=a.ended_at??(n==null?void 0:n.ended_at);return s!==void 0&&(o.ended_at=s),(n==null?void 0:n.metadata)!==void 0&&(o.metadata=n.metadata),(n==null?void 0:n.vod_media_uuid)!==void 0&&(o.vod_media_uuid=n.vod_media_uuid),o}function Wi(a,n){return a instanceof Error&&a.message?a.message:n}function J4(a){const n=H4(),t=e.ref(null),o=e.ref(!1),i=e.ref(!0),r=e.ref(""),s=e.ref(!1),l=e.ref(!1),c=e.ref(null),d=e.ref(null),u=e.ref(0),p=e.ref(0);let v;const h=e.computed(()=>d.value?Math.floor((new Date().getTime()-d.value.getTime())/1e3):0),g=e.computed(()=>{var H;if(!((H=t.value)!=null&&H.playback_url))return null;const T=new URL(t.value.playback_url);return T.searchParams.set("live","true"),o.value&&T.searchParams.set("latency","low"),T.toString()}),y=e.computed(()=>{var T;return((T=t.value)==null?void 0:T.status)==="live"}),V=e.computed(()=>{var T;return((T=t.value)==null?void 0:T.status)==="idle"}),B=e.computed(()=>{var T;return((T=t.value)==null?void 0:T.status)==="ended"});async function _(T={}){s.value=!0,c.value=null;try{const H=await ra.post("/live",{title:r.value||T.title||"Live Stream",low_latency:T.low_latency??o.value,auto_record:T.auto_record??i.value,...T}),E=sa(H);return t.value=E,n.setLiveStream(E),I(),E}catch(H){throw c.value=Wi(H,"Failed to create stream"),H instanceof Error?H:new Error(c.value)}finally{s.value=!1}}async function b(){if(!t.value)throw new Error("No active stream");l.value=!0,c.value=null;try{const T=await ra.post(`/live/${t.value.id}/end`),H=sa(T,t.value);return t.value=H,n.setLiveStream(H),N(),H}catch(T){throw c.value=Wi(T,"Failed to end stream"),T instanceof Error?T:new Error(c.value)}finally{l.value=!1}}async function m(){if(t.value)try{const T=await ra.get(`/live/${t.value.id}`),H=sa(T,t.value);u.value=H.viewer_count,p.value=H.peak_viewers,t.value=H;const E={status:H.status,viewer_count:H.viewer_count,peak_viewers:H.peak_viewers};H.started_at&&(E.started_at=H.started_at),H.ended_at&&(E.ended_at=H.ended_at),n.updateLiveStreamStats(H.id,E),H.status==="live"&&!d.value&&H.started_at&&(d.value=new Date(H.started_at)),H.status==="ended"&&N()}catch{}}async function w(T){try{const H=await ra.get(`/live/${T}`),E=sa(H,t.value);return{rtmp_url:E.rtmp_url,stream_key:E.stream_key,playback_url:E.playback_url||""}}catch(H){throw c.value=Wi(H,"Failed to get stream credentials"),H instanceof Error?H:new Error(c.value)}}function I(T=5e3){N(),v=window.setInterval(()=>{m()},T)}function N(){v!==void 0&&(clearInterval(v),v=void 0)}async function x(){if(!a)return;const T=n.getLiveStreamByMedia(a);T&&(t.value=T,u.value=T.viewer_count,p.value=T.peak_viewers,T.status==="live"&&(I(),T.started_at&&(d.value=new Date(T.started_at))))}return a&&x(),e.onUnmounted(()=>{N()}),{stream:t,lowLatency:o,autoRecord:i,streamTitle:r,isCreating:s,isEnding:l,error:c,streamDuration:h,viewerCount:u,peakViewers:p,playbackUrl:g,isLive:y,isIdle:V,hasEnded:B,createStream:_,endStream:b,refreshStreamStatus:m,getStreamCredentials:w,startStatusPolling:I,stopStatusPolling:N}}const Y4={class:"stream-status"},K4={class:"flex items-center justify-between"},q4={class:"flex items-center gap-3"},Q4={key:0,class:"flex items-center"},e3={key:2,class:"text-sm text-gray-600"},t3={key:0,class:"flex items-center gap-2"},n3={class:"text-sm font-medium text-gray-700"},o3={key:0,class:"text-xs text-gray-500"},a3=e.defineComponent({__name:"StreamStatus",props:{status:{},viewers:{},peakViewers:{},duration:{}},setup(a){const n=a,t=e.computed(()=>({idle:"Ready to Stream",live:"Live",ended:"Stream Ended",error:"Error"})[n.status]||n.status),o=e.computed(()=>{const r="px-3 py-1 rounded-full text-xs font-semibold uppercase",s={idle:"bg-gray-100 text-gray-700",live:"bg-red-100 text-red-700",ended:"bg-blue-100 text-blue-700",error:"bg-yellow-100 text-yellow-700"};return`${r} ${s[n.status]||s.idle}`}),i=e.computed(()=>{if(!n.duration)return null;const r=Math.floor(n.duration/3600),s=Math.floor(n.duration%3600/60),l=n.duration%60;return r>0?`${r}:${s.toString().padStart(2,"0")}:${l.toString().padStart(2,"0")}`:`${s}:${l.toString().padStart(2,"0")}`});return(r,s)=>(e.openBlock(),e.createElementBlock("div",Y4,[e.createElementVNode("div",K4,[e.createElementVNode("div",q4,[r.status==="live"?(e.openBlock(),e.createElementBlock("div",Q4,[...s[0]||(s[0]=[e.createElementVNode("span",{class:"relative flex h-3 w-3"},[e.createElementVNode("span",{class:"animate-ping absolute inline-flex h-full w-full rounded-full bg-red-400 opacity-75"}),e.createElementVNode("span",{class:"relative inline-flex rounded-full h-3 w-3 bg-red-500"})],-1),e.createElementVNode("span",{class:"ml-2 text-sm font-semibold text-red-600 uppercase"},"Live",-1)])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(o.value)},e.toDisplayString(t.value),3)),i.value?(e.openBlock(),e.createElementBlock("div",e3,e.toDisplayString(i.value),1)):e.createCommentVNode("",!0)]),r.viewers!==void 0?(e.openBlock(),e.createElementBlock("div",t3,[s[1]||(s[1]=e.createElementVNode("svg",{class:"w-4 h-4 text-gray-500",fill:"currentColor",viewBox:"0 0 20 20"},[e.createElementVNode("path",{d:"M10 12a2 2 0 100-4 2 2 0 000 4z"}),e.createElementVNode("path",{"fill-rule":"evenodd",d:"M.458 10C1.732 5.943 5.522 3 10 3s8.268 2.943 9.542 7c-1.274 4.057-5.064 7-9.542 7S1.732 14.057.458 10zM14 10a4 4 0 11-8 0 4 4 0 018 0z","clip-rule":"evenodd"})],-1)),e.createElementVNode("span",n3,e.toDisplayString(r.viewers)+" "+e.toDisplayString(r.viewers===1?"viewer":"viewers"),1),r.peakViewers>r.viewers?(e.openBlock(),e.createElementBlock("span",o3," (Peak: "+e.toDisplayString(r.peakViewers)+") ",1)):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)])]))}}),i3=Te(a3,[["__scopeId","data-v-1d09c19f"]]),r3={class:"stream-credentials"},s3={class:"space-y-3"},l3={class:"credential-field"},c3={class:"flex gap-2"},d3=["value"],u3={class:"credential-field"},m3={class:"flex gap-2"},p3=["value","type"],f3=["aria-label"],h3={key:0,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},v3={key:1,class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},g3={key:0,class:"mt-2 text-sm text-green-600"},y3=e.defineComponent({__name:"StreamCredentials",props:{rtmpUrl:{},streamKey:{}},emits:["copy"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(!1),r=e.ref(""),s=e.computed(()=>{if(i.value)return t.streamKey;if(t.streamKey.length>8){const d=t.streamKey.slice(0,4),u=t.streamKey.slice(-4);return`${d}${"•".repeat(16)}${u}`}return"•".repeat(t.streamKey.length)});function l(){i.value=!i.value}async function c(d,u){try{await navigator.clipboard.writeText(d),r.value=u,o("copy",d,u),setTimeout(()=>{r.value=""},2e3)}catch{}}return(d,u)=>(e.openBlock(),e.createElementBlock("div",r3,[u[8]||(u[8]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Stream Settings",-1)),e.createElementVNode("div",s3,[e.createElementVNode("div",l3,[u[3]||(u[3]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"RTMP Server URL",-1)),e.createElementVNode("div",c3,[e.createElementVNode("input",{value:d.rtmpUrl,readonly:"",type:"text",class:"flex-1 px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm font-mono text-gray-700","aria-label":"RTMP server URL"},null,8,d3),e.createElementVNode("button",{onClick:u[0]||(u[0]=p=>c(d.rtmpUrl,"RTMP URL")),class:"px-3 py-2 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors","aria-label":"Copy RTMP URL"},[...u[2]||(u[2]=[e.createElementVNode("svg",{class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)])])])]),e.createElementVNode("div",u3,[u[7]||(u[7]=e.createElementVNode("label",{class:"block text-xs font-medium text-gray-500 mb-1"},"Stream Key",-1)),e.createElementVNode("div",m3,[e.createElementVNode("input",{value:s.value,readonly:"",type:i.value?"text":"password",class:"flex-1 px-3 py-2 bg-gray-50 border border-gray-200 rounded-md text-sm font-mono text-gray-700","aria-label":"Stream key"},null,8,p3),e.createElementVNode("button",{onClick:l,class:"px-3 py-2 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors","aria-label":i.value?"Hide stream key":"Show stream key"},[i.value?(e.openBlock(),e.createElementBlock("svg",v3,[...u[5]||(u[5]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21"},null,-1)])])):(e.openBlock(),e.createElementBlock("svg",h3,[...u[4]||(u[4]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"},null,-1),e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"},null,-1)])]))],8,f3),e.createElementVNode("button",{onClick:u[1]||(u[1]=p=>c(d.streamKey,"Stream Key")),class:"px-3 py-2 bg-white border border-gray-300 rounded-md hover:bg-gray-50 transition-colors","aria-label":"Copy stream key"},[...u[6]||(u[6]=[e.createElementVNode("svg",{class:"w-4 h-4 text-gray-600",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"})],-1)])])])])]),u[9]||(u[9]=e.createElementVNode("details",{class:"mt-4"},[e.createElementVNode("summary",{class:"cursor-pointer text-sm text-blue-600 hover:text-blue-700"}," How to connect with OBS Studio "),e.createElementVNode("div",{class:"mt-2 p-3 bg-blue-50 rounded-md text-sm text-gray-700"},[e.createElementVNode("ol",{class:"list-decimal list-inside space-y-1"},[e.createElementVNode("li",null,"Open OBS Studio"),e.createElementVNode("li",null,"Go to Settings → Stream"),e.createElementVNode("li",null,'Set Service to "Custom"'),e.createElementVNode("li",null,'Paste the RTMP URL in "Server"'),e.createElementVNode("li",null,'Paste the Stream Key in "Stream Key"'),e.createElementVNode("li",null,'Click OK and then "Start Streaming"')])])],-1)),e.createVNode(e.Transition,{name:"fade"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock("div",g3,e.toDisplayString(r.value)+" copied to clipboard! ",1)):e.createCommentVNode("",!0)]),_:1})]))}}),b3=Te(y3,[["__scopeId","data-v-306d92f6"]]),w3={class:"live-stream-manager","data-testid":"live-stream-manager"},k3={key:0,class:"stream-setup"},x3={class:"space-y-4"},E3={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},V3={class:"flex items-center justify-between p-4 bg-gray-50 rounded-lg"},S3=["disabled"],C3={key:0},_3={key:1,class:"flex items-center justify-center"},N3={key:1,class:"stream-active space-y-6"},T3={key:1,class:"video-preview"},M3={key:2,class:"analytics-panel"},B3={class:"grid grid-cols-2 gap-4"},I3={class:"bg-gray-50 p-3 rounded"},F3={class:"text-2xl font-bold text-gray-900"},$3={class:"bg-gray-50 p-3 rounded"},R3={class:"text-2xl font-bold text-gray-900"},D3={class:"stream-controls flex gap-3"},A3=["disabled"],U3={key:0},L3={key:1},O3={key:2,class:"mt-4 p-4 bg-red-50 border border-red-200 rounded-lg"},z3={class:"text-red-600 text-sm"},P3=e.defineComponent({__name:"LiveStreamManager",props:{mediaUuid:{},onStreamCreated:{type:Function},onStreamEnded:{type:Function},httpClient:{type:Function}},emits:["stream-created","stream-ended","error"],setup(a,{emit:n}){const t=a,o=n;t.httpClient&&G4(t.httpClient);const{stream:i,lowLatency:r,autoRecord:s,streamTitle:l,isCreating:c,isEnding:d,error:u,createStream:p,endStream:v,streamDuration:h,playbackUrl:g,refreshStreamStatus:y}=J4(t.mediaUuid),V=e.ref(!1);async function B(){var I;try{const N=await p({title:l.value,low_latency:r.value,auto_record:s.value});o("stream-created",N),(I=t.onStreamCreated)==null||I.call(t,N)}catch(N){o("error",N)}}async function _(){var I;try{const N=await v();o("stream-ended",N),(I=t.onStreamEnded)==null||I.call(t,N)}catch(N){o("error",N)}}function b(){i.value=null,l.value="",V.value=!1,u.value=null}async function m(I,N){try{await navigator.clipboard.writeText(I)}catch{}}let w;return e.onMounted(()=>{var I;((I=i.value)==null?void 0:I.status)==="live"&&(w=window.setInterval(()=>{y()},5e3))}),e.onUnmounted(()=>{w&&clearInterval(w)}),(I,N)=>(e.openBlock(),e.createElementBlock("div",w3,[e.unref(i)?(e.openBlock(),e.createElementBlock("div",N3,[e.createVNode(i3,{status:e.unref(i).status,viewers:e.unref(i).viewer_count,duration:e.unref(h),"peak-viewers":e.unref(i).peak_viewers},null,8,["status","viewers","duration","peak-viewers"]),e.unref(i).status==="idle"?(e.openBlock(),e.createBlock(b3,{key:0,"rtmp-url":e.unref(i).rtmp_url,"stream-key":e.unref(i).stream_key,onCopy:m},null,8,["rtmp-url","stream-key"])):e.createCommentVNode("",!0),e.unref(g)?(e.openBlock(),e.createElementBlock("div",T3,[N[9]||(N[9]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-2"},"Live Preview",-1)),e.createVNode(Qc,{"playback-url":e.unref(g),"is-live":!0,muted:!0,controls:!1,class:"w-full rounded-lg overflow-hidden"},null,8,["playback-url"])])):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("div",M3,[N[12]||(N[12]=e.createElementVNode("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Live Analytics",-1)),e.createElementVNode("div",B3,[e.createElementVNode("div",I3,[e.createElementVNode("div",F3,e.toDisplayString(e.unref(i).viewer_count),1),N[10]||(N[10]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Current Viewers",-1))]),e.createElementVNode("div",$3,[e.createElementVNode("div",R3,e.toDisplayString(e.unref(i).peak_viewers),1),N[11]||(N[11]=e.createElementVNode("div",{class:"text-xs text-gray-500"},"Peak Viewers",-1))])])])):e.createCommentVNode("",!0),e.createElementVNode("div",D3,[e.unref(i).status==="idle"?(e.openBlock(),e.createElementBlock("button",{key:0,onClick:N[3]||(N[3]=x=>V.value=!V.value),class:"flex-1 py-2 px-4 bg-gray-200 text-gray-700 font-medium rounded-lg hover:bg-gray-300 transition-colors"},e.toDisplayString(V.value?"Hide":"Show")+" Credentials ",1)):e.createCommentVNode("",!0),e.unref(i).status==="live"?(e.openBlock(),e.createElementBlock("button",{key:1,onClick:_,disabled:e.unref(d),class:"flex-1 py-2 px-4 bg-red-600 text-white font-medium rounded-lg hover:bg-red-700 disabled:opacity-50 transition-colors","aria-label":"End live stream"},[e.unref(d)?(e.openBlock(),e.createElementBlock("span",L3,"Ending...")):(e.openBlock(),e.createElementBlock("span",U3,"End Stream"))],8,A3)):e.createCommentVNode("",!0),e.unref(i).status==="ended"?(e.openBlock(),e.createElementBlock("button",{key:2,onClick:b,class:"flex-1 py-2 px-4 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 transition-colors"}," Start New Stream ")):e.createCommentVNode("",!0)])])):(e.openBlock(),e.createElementBlock("div",k3,[N[8]||(N[8]=e.createElementVNode("h3",{class:"text-lg font-semibold mb-4"},"Start Live Stream",-1)),e.createElementVNode("div",x3,[e.createElementVNode("div",E3,[N[4]||(N[4]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("label",{class:"font-medium text-gray-900"},"Low Latency Mode"),e.createElementVNode("p",{class:"text-sm text-gray-500 mt-1"}," 5-7 second delay (vs 15-20s standard) ")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":N[0]||(N[0]=x=>e.isRef(r)?r.value=x:null),type:"checkbox",class:"h-5 w-5 text-blue-600 rounded focus:ring-blue-500","aria-label":"Enable low latency mode"},null,512),[[e.vModelCheckbox,e.unref(r)]])]),e.createElementVNode("div",V3,[N[5]||(N[5]=e.createElementVNode("div",{class:"flex-1"},[e.createElementVNode("label",{class:"font-medium text-gray-900"},"Auto-Record Stream"),e.createElementVNode("p",{class:"text-sm text-gray-500 mt-1"}," Save stream as VOD for later viewing ")],-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":N[1]||(N[1]=x=>e.isRef(s)?s.value=x:null),type:"checkbox",class:"h-5 w-5 text-blue-600 rounded focus:ring-blue-500","aria-label":"Enable auto-recording"},null,512),[[e.vModelCheckbox,e.unref(s)]])]),e.createElementVNode("div",null,[N[6]||(N[6]=e.createElementVNode("label",{for:"stream-title",class:"block text-sm font-medium text-gray-700 mb-2"}," Stream Title (optional) ",-1)),e.withDirectives(e.createElementVNode("input",{id:"stream-title","onUpdate:modelValue":N[2]||(N[2]=x=>e.isRef(l)?l.value=x:null),type:"text",class:"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500",placeholder:"My Live Stream"},null,512),[[e.vModelText,e.unref(l)]])]),e.createElementVNode("button",{onClick:B,disabled:e.unref(c),class:"w-full py-3 px-4 bg-blue-600 text-white font-medium rounded-lg hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors","data-testid":"create-stream-button","aria-label":"Create live stream"},[e.unref(c)?(e.openBlock(),e.createElementBlock("span",_3,[...N[7]||(N[7]=[e.createElementVNode("svg",{class:"animate-spin h-5 w-5 mr-2",viewBox:"0 0 24 24"},[e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4",fill:"none"}),e.createElementVNode("path",{class:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4z"})],-1),e.createTextVNode(" Creating... ",-1)])])):(e.openBlock(),e.createElementBlock("span",C3,"Create Stream"))],8,S3)])])),e.unref(u)?(e.openBlock(),e.createElementBlock("div",O3,[e.createElementVNode("p",z3,e.toDisplayString(e.unref(u)),1)])):e.createCommentVNode("",!0)]))}}),j3=Te(P3,[["__scopeId","data-v-26291f6f"]]),W3={class:"album-tree-node"},Z3=["data-album-id","draggable","aria-selected","aria-expanded"],X3={key:1,class:"album-node__chevron-placeholder"},H3={key:2,"data-testid":"media-count",class:"album-node__count"},G3={key:0,class:"album-tree-node__children",role:"group"},J3=16,Y3=e.defineComponent({__name:"AlbumTreeNode",props:{album:{},depth:{},selectedId:{},expandedIds:{},focusedId:{},draggable:{type:Boolean},showMediaCount:{type:Boolean},compact:{type:Boolean},dragState:{}},emits:["select","toggle-expand","drag-start","drag-over","drag-leave","drop"],setup(a,{emit:n}){const t=a,o=n,i=e.computed(()=>t.expandedIds.has(t.album.id)),r=e.computed(()=>t.selectedId===t.album.id),s=e.computed(()=>t.focusedId===t.album.id),l=e.computed(()=>t.album.children_count>0),c=e.computed(()=>`${t.depth*J3}px`),d=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.draggedAlbumId)===t.album.id}),u=e.computed(()=>{var b;return((b=t.dragState)==null?void 0:b.dropTargetId)===t.album.id}),p=e.computed(()=>{var b;return(b=t.dragState)!=null&&b.draggedAlbumId?t.dragState.draggedAlbumId===t.album.id:!1}),v=e.computed(()=>{const b=["album-node"];return r.value&&b.push("album-node--selected"),s.value&&b.push("album-node--focused"),t.compact&&b.push("album-node--compact"),d.value&&b.push("album-node--dragging"),u.value&&b.push("album-node--drop-target"),p.value&&b.push("album-node--invalid-drop"),b});function h(){o("select",t.album)}function g(b){b.stopPropagation(),o("toggle-expand",t.album.id)}function y(b){t.draggable&&(b.dataTransfer&&(b.dataTransfer.setData("text/plain",t.album.id),b.dataTransfer.effectAllowed="move"),o("drag-start",t.album.id))}function V(b){t.draggable&&(b.preventDefault(),b.dataTransfer&&(b.dataTransfer.dropEffect="move"),o("drag-over",t.album.id))}function B(){o("drag-leave",t.album.id)}function _(b){t.draggable&&(b.preventDefault(),o("drop",t.album.id))}return(b,m)=>{var I;const w=e.resolveComponent("AlbumTreeNode",!0);return e.openBlock(),e.createElementBlock("div",W3,[e.createElementVNode("div",{"data-testid":"album-node","data-album-id":b.album.id,class:e.normalizeClass(v.value),style:e.normalizeStyle({paddingLeft:c.value}),draggable:b.draggable,role:"treeitem","aria-selected":r.value,"aria-expanded":l.value?i.value:void 0,onDragstart:y,onDragover:V,onDragleave:B,onDrop:_},[l.value?(e.openBlock(),e.createElementBlock("button",{key:0,"data-testid":"expand-chevron",class:"album-node__chevron",type:"button","aria-label":"Toggle expand",onClick:g},[e.createVNode(e.unref(D.IonIcon),{icon:i.value?e.unref(nm):e.unref(om)},null,8,["icon"])])):(e.openBlock(),e.createElementBlock("span",X3)),e.createVNode(e.unref(D.IonIcon),{icon:e.unref(um),class:"album-node__icon"},null,8,["icon"]),e.createElementVNode("span",{"data-testid":"album-name",class:"album-node__name",onClick:h},e.toDisplayString(b.album.name),1),b.showMediaCount?(e.openBlock(),e.createElementBlock("span",H3,e.toDisplayString(b.album.media_count),1)):e.createCommentVNode("",!0)],46,Z3),i.value&&((I=b.album.children)!=null&&I.length)?(e.openBlock(),e.createElementBlock("div",G3,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(b.album.children,N=>(e.openBlock(),e.createBlock(w,{key:N.id,album:N,depth:b.depth+1,"selected-id":b.selectedId,"expanded-ids":b.expandedIds,"focused-id":b.focusedId,draggable:b.draggable,"show-media-count":b.showMediaCount,compact:b.compact,onSelect:m[0]||(m[0]=x=>o("select",x)),onToggleExpand:m[1]||(m[1]=x=>o("toggle-expand",x))},null,8,["album","depth","selected-id","expanded-ids","focused-id","draggable","show-media-count","compact"]))),128))])):e.createCommentVNode("",!0)])}}}),K3=Te(Y3,[["__scopeId","data-v-76be65a6"]]),oi=Fa.defineStore("albums",()=>{const a=e.ref([]),n=e.ref(new Map),t=e.ref(!1),o=e.ref(null),i=e.ref(new Set),r=e.computed(()=>{const m=new Map;return a.value.forEach(w=>m.set(w.id,w)),m}),s=e.computed(()=>a.value.filter(m=>m.parent_id===null));async function l(m){t.value=!0,o.value=null;try{const w=(m==null?void 0:m.parent_id)??null,I=w?`/api/v1/albums?parent_id=${w}`:"/api/v1/albums?parent_id=null",N=await fetch(I);if(!N.ok)throw new Error("Failed to fetch albums");((await N.json()).data||[]).forEach(H=>{const E=a.value.findIndex(R=>R.id===H.id);E>=0?a.value[E]=H:a.value.push(H)}),w!==null&&i.value.add(w)}catch(w){o.value=w instanceof Error?w.message:"Unknown error"}finally{t.value=!1}}async function c(m){t.value=!0,o.value=null;try{const w=await fetch(`/api/v1/albums/${m}`);if(!w.ok)throw new Error("Failed to fetch album");const N=(await w.json()).data,x=a.value.findIndex(T=>T.id===N.id);return x>=0?a.value[x]=N:a.value.push(N),N}catch(w){throw o.value=w instanceof Error?w.message:"Unknown error",w}finally{t.value=!1}}async function d(m){t.value=!0,o.value=null;try{const w=await fetch(`/api/v1/albums/${m}/media`);if(!w.ok)throw new Error("Failed to fetch album media");const N=(await w.json()).data||[];return n.value.set(m,N),N}catch(w){throw o.value=w instanceof Error?w.message:"Unknown error",w}finally{t.value=!1}}async function u(m,w){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${m}/media/reorder`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({media_ids:w})})).ok)throw new Error("Failed to reorder album media");const N=n.value.get(m)||[],x=w.map(T=>N.find(H=>H.uuid===T)).filter(T=>T!==void 0);n.value.set(m,x)}catch(I){throw o.value=I instanceof Error?I.message:"Unknown error",I}finally{t.value=!1}}async function p(m){t.value=!0,o.value=null;try{const w=await fetch("/api/v1/albums",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(m)});if(!w.ok)throw new Error("Failed to create album");const N=(await w.json()).data;return a.value.push(N),N}catch(w){throw o.value=w instanceof Error?w.message:"Unknown error",w}finally{t.value=!1}}async function v(m,w){t.value=!0,o.value=null;try{const I=await fetch(`/api/v1/albums/${m}`,{method:"PATCH",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(w)});if(!I.ok)throw new Error("Failed to update album");const x=(await I.json()).data,T=a.value.findIndex(H=>H.id===x.id);return T>=0&&(a.value[T]=x),x}catch(I){throw o.value=I instanceof Error?I.message:"Unknown error",I}finally{t.value=!1}}async function h(m){t.value=!0,o.value=null;try{if(!(await fetch(`/api/v1/albums/${m}`,{method:"DELETE",headers:{"Content-Type":"application/json"},credentials:"include"})).ok)throw new Error("Failed to delete album");const I=a.value.findIndex(N=>N.id===m);I>=0&&a.value.splice(I,1),n.value.delete(m)}catch(w){throw o.value=w instanceof Error?w.message:"Unknown error",w}finally{t.value=!1}}function g(m){return a.value.filter(w=>w.parent_id===m)}function y(m){return i.value.has(m)}function V(m){return n.value.get(m)||[]}async function B(m,w){const I=a.value.findIndex(x=>x.id===m);if(I<0)return;const N=a.value[I];a.value[I]={...N,parent_id:w};try{if(!(await fetch(`/api/v1/albums/${m}/move`,{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({parent_id:w})})).ok)throw new Error("Failed to move album")}catch(x){throw a.value[I]=N,o.value=x instanceof Error?x.message:"Unknown error",x instanceof Error?x:new Error("Failed to move album")}}function _(m){a.value=m}function b(){a.value=[],n.value.clear(),t.value=!1,o.value=null,i.value.clear()}return{albums:a,albumMedia:n,loading:t,error:o,childrenLoadedById:i,albumsById:r,rootAlbums:s,fetchAlbums:l,fetchAlbum:c,fetchAlbumMedia:d,reorderAlbumMedia:u,createAlbum:p,updateAlbum:v,deleteAlbum:h,getChildrenOf:g,childrenLoaded:y,getAlbumMedia:V,moveAlbum:B,setAlbums:_,reset:b}});function ed(){const a=oi(),{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r}=Fa.storeToRefs(a);async function s(u){await a.fetchAlbums(u)}function l(u){return a.getChildrenOf(u)}function c(u){return a.childrenLoaded(u)}async function d(u,p){await a.moveAlbum(u,p)}return{albums:n,albumsById:t,rootAlbums:o,loading:i,error:r,fetchAlbums:s,getChildrenOf:l,childrenLoaded:c,moveAlbum:d}}function td(a){const{childrenByParentId:n,onMove:t}=a,o=e.ref({isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null});function i(p,v){if(p===v)return!0;const h=new Set,g=[p];for(;g.length>0;){const y=g.shift();if(!y||h.has(y))continue;h.add(y);const V=n.get(y)||[];for(const B of V){if(B===v)return!0;g.push(B)}}return!1}function r(p,v){return p===v?!1:v===null?!0:!i(p,v)}function s(p){o.value={isDragging:!0,draggedAlbumId:p,dropTargetId:null,dropPosition:null}}function l(){o.value={isDragging:!1,draggedAlbumId:null,dropTargetId:null,dropPosition:null}}function c(p){o.value.dropTargetId=p}function d(){o.value.dropTargetId=null,o.value.dropPosition=null}async function u(){const{draggedAlbumId:p,dropTargetId:v}=o.value;if(!p){l();return}if(!r(p,v)){l();return}try{await t(p,v)}finally{l()}}return{dragState:o,isDescendant:i,canDropOn:r,startDrag:s,endDrag:l,setDropTarget:c,clearDropTarget:d,executeDrop:u}}const q3={key:0,"data-testid":"loading-spinner",class:"album-tree__loading"},Q3={key:1,"data-testid":"error-state",class:"album-tree__error"},eV={key:2,"data-testid":"empty-state",class:"album-tree__empty"},tV={key:3,class:"album-tree__content",role:"group"},nV=e.defineComponent({__name:"AlbumTree",props:{modelValue:{default:null},expandedIds:{default:()=>[]},draggable:{type:Boolean,default:!0},showMediaCount:{type:Boolean,default:!0},compact:{type:Boolean,default:!1}},emits:["update:modelValue","album-selected","album-moved","album-expanded","album-collapsed"],setup(a,{expose:n,emit:t}){const o=a,i=t,r=e.computed(()=>o.draggable===!0),s=e.computed(()=>o.showMediaCount===!0),l=e.computed(()=>o.compact===!0),{albums:c,rootAlbums:d,loading:u,error:p,fetchAlbums:v,getChildrenOf:h,childrenLoaded:g,moveAlbum:y}=ed(),V=e.shallowRef(new Set(o.expandedIds)),B=e.ref(o.modelValue??null),_=e.ref(null),b=new Map,m=new Map;function w($){b.clear(),m.clear();for(const O of $){b.set(O.id,O);const me=O.parent_id??null,ne=m.get(me)??[];ne.push(O.id),m.set(me,ne)}}e.watch(c,$=>{w($)},{immediate:!0});const{dragState:I,canDropOn:N,startDrag:x,endDrag:T,setDropTarget:H,clearDropTarget:E,executeDrop:R}=td({childrenByParentId:m,onMove:async($,O)=>{await y($,O),i("album-moved",{albumId:$,newParentId:O})}});e.watch(()=>o.modelValue,$=>{B.value=$??null}),e.watch(()=>o.expandedIds,$=>{V.value=new Set($)}),e.onMounted(async()=>{await v({parent_id:null})});const A=e.computed(()=>d.value.map($=>P($)));function P($){if(!V.value.has($.id))return $;const O=h($.id);return{...$,children:O.map(me=>P(me))}}const M=e.computed(()=>{const $=[];function O(me){var ne;for(const ee of me)$.push(ee),V.value.has(ee.id)&&((ne=ee.children)!=null&&ne.length)&&O(ee.children)}return O(A.value),$});function j($){var ne;if(!M.value.length)return;const O=_.value?M.value.findIndex(ee=>ee.id===_.value):-1,me=O>=0?M.value[O]:null;switch($.key){case"ArrowDown":$.preventDefault(),O<M.value.length-1?_.value=M.value[O+1].id:O===-1&&M.value.length>0&&(_.value=M.value[0].id);break;case"ArrowUp":$.preventDefault(),O>0&&(_.value=M.value[O-1].id);break;case"ArrowRight":$.preventDefault(),me&&(me.children_count>0&&!V.value.has(me.id)?U(me.id):V.value.has(me.id)&&((ne=me.children)!=null&&ne.length)&&(_.value=me.children[0].id));break;case"ArrowLeft":$.preventDefault(),me&&(V.value.has(me.id)&&me.children_count>0?U(me.id):me.parent_id&&(_.value=me.parent_id));break;case"Enter":case" ":$.preventDefault(),me&&S(me);break;case"Home":$.preventDefault(),M.value.length>0&&(_.value=M.value[0].id);break;case"End":$.preventDefault(),M.value.length>0&&(_.value=M.value[M.value.length-1].id);break}}async function U($){V.value.has($)?(V.value.delete($),i("album-collapsed",$)):(g($)||await v({parent_id:$}),V.value.add($),i("album-expanded",$))}function S($){B.value=$.id,i("update:modelValue",$.id),i("album-selected",$)}function F($){o.draggable&&x($)}function J($){var me;if(!o.draggable)return;const O=(me=I.value)==null?void 0:me.draggedAlbumId;O&&(H($),N(O,$))}function G(){o.draggable&&E()}async function Q($){o.draggable&&(H($),await R())}function ge($){o.draggable&&($.preventDefault(),H(null))}async function be($){o.draggable&&($.preventDefault(),H(null),await R())}function te(){T()}return n({focusedId:_}),($,O)=>(e.openBlock(),e.createElementBlock("div",{class:"album-tree","data-testid":"album-tree",tabindex:"0",role:"tree","aria-label":"Album tree",onKeydown:j,onDragover:ge,onDrop:be,onDragend:te},[e.unref(u)?(e.openBlock(),e.createElementBlock("div",q3,[e.createVNode(e.unref(D.IonSpinner),{name:"crescent"})])):e.unref(p)?(e.openBlock(),e.createElementBlock("div",Q3,[e.createElementVNode("p",null,e.toDisplayString(e.unref(p)),1)])):e.unref(d).length?(e.openBlock(),e.createElementBlock("div",tV,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(A.value,me=>(e.openBlock(),e.createBlock(K3,{key:me.id,album:me,depth:0,"selected-id":B.value,"expanded-ids":V.value,"focused-id":_.value,draggable:r.value,"drag-state":r.value?e.unref(I):null,"show-media-count":s.value,compact:l.value,onSelect:S,onToggleExpand:U,onDragStart:F,onDragOver:J,onDragLeave:G,onDrop:Q},null,8,["album","selected-id","expanded-ids","focused-id","draggable","drag-state","show-media-count","compact"]))),128))])):(e.openBlock(),e.createElementBlock("div",eV,[O[0]||(O[0]=e.createElementVNode("p",null,"No albums yet",-1)),e.renderSlot($.$slots,"empty-action",{},void 0,!0)]))],32))}}),nd=Te(nV,[["__scopeId","data-v-ae3dea7a"]]),oV=300,aV=e.defineComponent({__name:"AlbumBrowser",props:{isOpen:{type:Boolean},selectedAlbumId:{default:null},title:{default:"Select Album"},confirmText:{default:"Select"}},emits:["close","confirm"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(t.selectedAlbumId??null),r=e.ref(null),s=e.ref(0),l=e.ref(null);e.watch(()=>t.selectedAlbumId,h=>{i.value=h??null});const c=e.computed(()=>r.value!==null);function d(h){const g=Date.now();if(l.value===h.id&&g-s.value<oV){o("confirm",h);return}s.value=g,l.value=h.id,i.value=h.id,r.value=h}function u(){r.value&&o("confirm",r.value)}function p(){o("close")}function v(){o("close")}return(h,g)=>(e.openBlock(),e.createBlock(e.unref(D.IonModal),{"is-open":h.isOpen,class:"album-browser-modal",onDidDismiss:v},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.title),1)]),_:1}),e.createVNode(e.unref(D.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{"data-testid":"cancel-button",onClick:p},{default:e.withCtx(()=>[...g[1]||(g[1]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(D.IonContent),{class:"album-browser-content"},{default:e.withCtx(()=>[e.createVNode(nd,{modelValue:i.value,"onUpdate:modelValue":g[0]||(g[0]=y=>i.value=y),draggable:!1,"show-media-count":!0,compact:!1,onAlbumSelected:d},null,8,["modelValue"])]),_:1}),e.createVNode(e.unref(D.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{fill:"clear",onClick:p},{default:e.withCtx(()=>[...g[2]||(g[2]=[e.createTextVNode(" Cancel ",-1)])]),_:1}),e.createVNode(e.unref(D.IonButton),{"data-testid":"confirm-button",fill:"solid",color:"primary",disabled:!c.value,onClick:u},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h.confirmText),1)]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"]))}}),od=Te(aV,[["__scopeId","data-v-21676ec1"]]),iV={class:"ion-padding-start text-sm"},rV={class:"ion-padding-start text-sm"},sV={key:1},lV={key:1,class:"album-manager-inline rounded-lg border border-gray-200 bg-white p-4"},cV={class:"flex items-center justify-between gap-3 pb-3"},dV={class:"text-base font-semibold text-gray-900"},uV={class:"ion-padding-start text-sm"},mV={class:"ion-padding-start text-sm"},pV={class:"flex justify-between pt-2"},fV={key:1},uo=255,mo=1e3,hV=e.defineComponent({__name:"AlbumManager",props:{albumId:{default:null},parentId:{default:null},mode:{default:"inline"},isOpen:{type:Boolean,default:!1}},emits:["close","created","updated","deleted","error"],setup(a,{emit:n}){const t=a,o=n,i=oi(),r=e.computed(()=>t.albumId!==null&&t.albumId!==void 0),s=e.computed(()=>r.value?"Edit Album":"Create Album"),l=e.computed(()=>r.value?"Save":"Create"),c=e.ref({name:"",description:"",parent_id:t.parentId}),d=e.ref({name:!1,description:!1}),u=e.ref(null),p=e.ref(!1),v=e.ref(null),h=e.ref(!1),g=e.ref(!1),y=e.computed(()=>d.value.name?c.value.name.trim()?c.value.name.length>uo?`Name must be ${uo} characters or less`:null:"Name is required":null),V=e.computed(()=>d.value.description&&c.value.description.length>mo?`Description must be ${mo} characters or less`:null),B=e.computed(()=>{const j=c.value.name.trim().length>0,U=c.value.name.length<=uo,S=c.value.description.length<=mo;return j&&U&&S&&!h.value}),_=e.computed(()=>{var j;return((j=u.value)==null?void 0:j.name)??"None (Root)"}),b=e.computed(()=>v.value?v.value.children_count===0&&v.value.media_count===0:!1),m=e.computed(()=>v.value?v.value.children_count>0?"Cannot delete album with child albums. Move or delete children first.":v.value.media_count>0?"Cannot delete album with media. Remove media first.":`Are you sure you want to delete "${v.value.name}"? This action cannot be undone.`:"");e.onMounted(async()=>{t.albumId&&await w()});async function w(){if(t.albumId)try{const j=await i.fetchAlbum(t.albumId);v.value=j,c.value={name:j.name,description:j.description??"",parent_id:j.parent_id},j.parent_id&&(u.value={id:j.parent_id,name:"Parent Album"})}catch(j){o("error",j)}}function I(){d.value.name=!0}function N(){d.value.description=!0}function x(){p.value=!0}function T(j){u.value={id:j.id,name:j.name},c.value.parent_id=j.id,p.value=!1}function H(){p.value=!1}function E(){o("close")}function R(){o("close")}async function A(){if(d.value.name=!0,d.value.description=!0,!(!B.value||h.value)){h.value=!0;try{const j={name:c.value.name.trim(),description:c.value.description.trim(),parent_id:c.value.parent_id};if(r.value&&t.albumId){const U=await i.updateAlbum(t.albumId,j);o("updated",U)}else{const U=await i.createAlbum(j);o("created",U)}o("close")}catch(j){o("error",j)}finally{h.value=!1}}}function P(){b.value&&(g.value=!0)}async function M(j){var S;if((((S=j.detail)==null?void 0:S.role)??"")!=="confirm"){g.value=!1;return}if(t.albumId){h.value=!0;try{await i.deleteAlbum(t.albumId),o("deleted",t.albumId),o("close")}catch(F){o("error",F)}finally{h.value=!1,g.value=!1}}}return(j,U)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[j.mode==="modal"?(e.openBlock(),e.createBlock(e.unref(D.IonModal),{key:0,"is-open":j.isOpen,class:"album-manager-modal",onDidDismiss:R},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonHeader),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonTitle),null,{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(s.value),1)]),_:1}),e.createVNode(e.unref(D.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:E},{default:e.withCtx(()=>[...U[4]||(U[4]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),e.createVNode(e.unref(D.IonContent),{class:"album-manager-content"},{default:e.withCtx(()=>[e.createElementVNode("form",{"data-testid":"album-form",class:"p-4 space-y-3",onSubmit:e.withModifiers(A,["prevent"])},[e.createVNode(e.unref(D.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...U[5]||(U[5]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(D.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":U[0]||(U[0]=S=>c.value.name=S),"data-testid":"name-input",maxlength:uo,onIonBlur:I},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(D.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",iV,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...U[6]||(U[6]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(D.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":U[1]||(U[1]=S=>c.value.description=S),"data-testid":"description-input",maxlength:mo,onIonBlur:N},null,8,["modelValue"])]),_:1}),V.value?(e.openBlock(),e.createBlock(e.unref(D.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",rV,e.toDisplayString(V.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonItem),{button:"","data-testid":"parent-selector",onClick:x},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...U[7]||(U[7]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(D.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value),1)]),_:1})]),_:1})],32)]),_:1}),e.createVNode(e.unref(D.IonFooter),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonToolbar),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButtons),{slot:"start"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",disabled:!b.value,title:b.value?void 0:m.value,onClick:P},{default:e.withCtx(()=>[...U[8]||(U[8]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.unref(D.IonButtons),{slot:"end"},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!B.value,onClick:A},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(D.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",sV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["is-open"])):(e.openBlock(),e.createElementBlock("div",lV,[e.createElementVNode("div",cV,[e.createElementVNode("h2",dV,e.toDisplayString(s.value),1),e.createVNode(e.unref(D.IonButton),{"data-testid":"cancel-btn",fill:"clear",onClick:E},{default:e.withCtx(()=>[...U[9]||(U[9]=[e.createTextVNode(" Cancel ",-1)])]),_:1})]),e.createElementVNode("form",{"data-testid":"album-form",class:"space-y-3",onSubmit:e.withModifiers(A,["prevent"])},[e.createVNode(e.unref(D.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...U[10]||(U[10]=[e.createTextVNode("Name *",-1)])]),_:1}),e.createVNode(e.unref(D.IonInput),{modelValue:c.value.name,"onUpdate:modelValue":U[2]||(U[2]=S=>c.value.name=S),"data-testid":"name-input",maxlength:uo,onIonBlur:I},null,8,["modelValue"])]),_:1}),y.value?(e.openBlock(),e.createBlock(e.unref(D.IonText),{key:0,color:"danger","data-testid":"name-error"},{default:e.withCtx(()=>[e.createElementVNode("p",uV,e.toDisplayString(y.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonItem),null,{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),{position:"stacked"},{default:e.withCtx(()=>[...U[11]||(U[11]=[e.createTextVNode("Description",-1)])]),_:1}),e.createVNode(e.unref(D.IonTextarea),{modelValue:c.value.description,"onUpdate:modelValue":U[3]||(U[3]=S=>c.value.description=S),"data-testid":"description-input",maxlength:mo,onIonBlur:N},null,8,["modelValue"])]),_:1}),V.value?(e.openBlock(),e.createBlock(e.unref(D.IonText),{key:1,color:"danger","data-testid":"description-error"},{default:e.withCtx(()=>[e.createElementVNode("p",mV,e.toDisplayString(V.value),1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonItem),{button:"","data-testid":"parent-selector",onClick:x},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonLabel),null,{default:e.withCtx(()=>[...U[12]||(U[12]=[e.createTextVNode("Parent Album",-1)])]),_:1}),e.createVNode(e.unref(D.IonNote),{slot:"end","data-testid":"parent-name"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(_.value),1)]),_:1})]),_:1}),e.createElementVNode("div",pV,[e.createElementVNode("div",null,[r.value?(e.openBlock(),e.createBlock(e.unref(D.IonButton),{key:0,"data-testid":"delete-btn",color:"danger",fill:"outline",disabled:!b.value,title:b.value?void 0:m.value,onClick:P},{default:e.withCtx(()=>[...U[13]||(U[13]=[e.createTextVNode(" Delete ",-1)])]),_:1},8,["disabled","title"])):e.createCommentVNode("",!0)]),e.createVNode(e.unref(D.IonButton),{"data-testid":"submit-btn",type:"submit",color:"primary",disabled:!B.value,onClick:A},{default:e.withCtx(()=>[h.value?(e.openBlock(),e.createBlock(e.unref(D.IonSpinner),{key:0,"data-testid":"loading-spinner",name:"crescent"})):(e.openBlock(),e.createElementBlock("span",fV,e.toDisplayString(l.value),1))]),_:1},8,["disabled"])])],32)])),e.createVNode(od,{"is-open":p.value,"selected-album-id":c.value.parent_id,title:"Select Parent Album",onClose:H,onConfirm:T},null,8,["is-open","selected-album-id"]),e.createVNode(e.unref(D.IonAlert),{"is-open":g.value,header:"Delete Album?",message:m.value,buttons:[{text:"Cancel",role:"cancel"},{text:"Delete",role:"confirm",cssClass:"alert-button-danger"}],onDidDismiss:M},null,8,["is-open","message"])],64))}}),vV=Te(hV,[["__scopeId","data-v-22083f3a"]]),gV={class:"album-media-grid"},yV={class:"aspect-square"},bV={key:1,"data-testid":"empty-state",class:"flex flex-col items-center justify-center py-12 gap-4"},wV={class:"text-gray-500"},kV=["data-media-id","draggable","onDragstart","onDragover","onDrop","onMouseenter"],xV={key:0,"data-testid":"drop-indicator",class:"absolute inset-0 border-2 border-primary rounded-lg pointer-events-none z-30"},EV={key:1,class:"absolute top-2 right-2 z-20 opacity-0 group-hover:opacity-100 transition-opacity cursor-grab"},VV={class:"aspect-square relative"},SV=["src","alt"],CV={key:0,class:"absolute inset-0 bg-black/50 flex items-center justify-center gap-2 transition-opacity"},_V=e.defineComponent({__name:"AlbumMediaGrid",props:{albumId:{},selectionMode:{type:Boolean,default:!1},selectedItems:{default:()=>[]},reorderable:{type:Boolean,default:!1},showActions:{type:Boolean,default:!0},columns:{default:()=>({mobile:2,sm:3,md:4,lg:5,xl:6})},isLoading:{type:Boolean,default:!1},emptyText:{default:"No media in this album"}},emits:["toggle-select","preview","edit","detach","reorder","add","selection-change"],setup(a,{emit:n}){const t=a,o=n,i=oi(),r=e.ref([]),s=e.ref(!1),l=e.ref(null),c=e.ref(null),d=e.ref(null),u=e.computed(()=>t.isLoading||s.value),p=e.computed(()=>!u.value&&r.value.length===0),v=e.computed(()=>{const R=t.columns;return["grid","gap-4",`grid-cols-${R.mobile??2}`,`sm:grid-cols-${R.sm??3}`,`md:grid-cols-${R.md??4}`,`lg:grid-cols-${R.lg??5}`,`xl:grid-cols-${R.xl??6}`]}),h=e.computed(()=>(t.columns.md??4)*2);e.onMounted(async()=>{await g()}),e.watch(()=>t.albumId,async()=>{await g()});async function g(){s.value=!0;try{const R=await i.fetchAlbumMedia(t.albumId);r.value=R}catch{r.value=[]}finally{s.value=!1}}function y(R){return t.selectedItems.includes(R)}function V(R){o("toggle-select",R);const A=y(R.uuid)?t.selectedItems.filter(P=>P!==R.uuid):[...t.selectedItems,R.uuid];o("selection-change",A)}function B(R){if(R.conversions&&typeof R.conversions=="object"){const A=R.conversions.thumb;if(typeof A=="string")return A}return R.original_url}function _(R){l.value=R}function b(){l.value=null}function m(R){o("preview",R)}function w(R){o("edit",R)}function I(R){o("detach",R.uuid)}function N(){o("add")}function x(R,A){t.reorderable&&(c.value=A,R.dataTransfer&&(R.dataTransfer.effectAllowed="move",R.dataTransfer.setData("text/plain",String(A))))}function T(R,A){!t.reorderable||c.value===null||(R.preventDefault(),d.value=A)}function H(R,A){if(!t.reorderable||c.value===null)return;R.preventDefault();const P=c.value;if(P!==A){const M=[...r.value],[j]=M.splice(P,1);M.splice(A,0,j),r.value=M;const U=M.map(S=>S.uuid);o("reorder",U),i.reorderAlbumMedia(t.albumId,U).catch(()=>{g()})}c.value=null,d.value=null}function E(){c.value=null,d.value=null}return(R,A)=>(e.openBlock(),e.createElementBlock("div",gV,[u.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-testid":"loading-grid",class:e.normalizeClass(v.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(h.value,P=>(e.openBlock(),e.createBlock(e.unref(D.IonCard),{key:P,class:"m-0"},{default:e.withCtx(()=>[e.createElementVNode("div",yV,[e.createVNode(e.unref(D.IonSkeletonText),{animated:"",class:"w-full h-full skeleton"})])]),_:1}))),128))],2)):p.value?(e.openBlock(),e.createElementBlock("div",bV,[e.createVNode(e.unref(D.IonIcon),{name:"images-outline",class:"text-6xl text-gray-400"}),e.createElementVNode("p",wV,e.toDisplayString(R.emptyText),1),e.createVNode(e.unref(D.IonButton),{"data-testid":"add-media-btn",onClick:N},{default:e.withCtx(()=>[...A[0]||(A[0]=[e.createTextVNode(" Add Media ",-1)])]),_:1})])):(e.openBlock(),e.createElementBlock("div",{key:2,"data-testid":"media-grid",class:e.normalizeClass(v.value)},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.value,(P,M)=>(e.openBlock(),e.createElementBlock("div",{key:P.uuid,"data-media-id":P.uuid,class:e.normalizeClass(["media-item relative group",{"opacity-50":c.value===M,"ring-2 ring-primary":d.value===M&&c.value!==M}]),draggable:R.reorderable,onDragstart:j=>x(j,M),onDragover:j=>T(j,M),onDrop:j=>H(j,M),onDragend:E,onMouseenter:j=>_(P.uuid),onMouseleave:b},[d.value===M&&c.value!==M&&R.reorderable?(e.openBlock(),e.createElementBlock("div",xV)):e.createCommentVNode("",!0),R.reorderable?(e.openBlock(),e.createElementBlock("div",EV,[e.createVNode(e.unref(D.IonIcon),{name:"reorder-three-outline",class:"text-white drop-shadow-md"})])):e.createCommentVNode("",!0),R.selectionMode?(e.openBlock(),e.createBlock(e.unref(D.IonCheckbox),{key:2,"data-testid":"media-checkbox",checked:y(P.uuid),class:"absolute top-2 left-2 z-20",onIonChange:j=>V(P)},null,8,["checked","onIonChange"])):e.createCommentVNode("",!0),e.createVNode(e.unref(D.IonCard),{class:"m-0 overflow-hidden"},{default:e.withCtx(()=>[e.createElementVNode("div",VV,[e.createElementVNode("img",{src:B(P),alt:P.file_name,class:"w-full h-full object-cover"},null,8,SV),R.showActions&&l.value===P.uuid?(e.openBlock(),e.createElementBlock("div",CV,[e.createVNode(e.unref(D.IonButton),{"data-testid":"action-preview",fill:"clear",size:"small",color:"light",onClick:j=>m(P)},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"icon-only",name:"eye-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(D.IonButton),{"data-testid":"action-edit",fill:"clear",size:"small",color:"light",onClick:j=>w(P)},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"icon-only",name:"create-outline"})]),_:1},8,["onClick"]),e.createVNode(e.unref(D.IonButton),{"data-testid":"action-detach",fill:"clear",size:"small",color:"danger",onClick:j=>I(P)},{default:e.withCtx(()=>[e.createVNode(e.unref(D.IonIcon),{slot:"icon-only",name:"close-circle-outline"})]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])]),_:2},1024)],42,kV))),128)),e.createElementVNode("div",{class:"aspect-square border-2 border-dashed border-gray-300 rounded-lg flex flex-col items-center justify-center gap-2 cursor-pointer hover:border-primary hover:bg-gray-50 transition-colors","data-testid":"add-more-card",onClick:N},[e.createVNode(e.unref(D.IonIcon),{name:"add-circle-outline",class:"text-4xl text-gray-400"}),A[1]||(A[1]=e.createElementVNode("span",{class:"text-sm text-gray-500"},"Add Media",-1))])],2))]))}}),NV=Te(_V,[["__scopeId","data-v-d84b796a"]]);function Pr(a={}){const n=e.ref(!1),t=e.ref(!1),o=e.ref(null),i=e.ref(null),r=e.ref(0),s=e.ref(null),l=e.ref(null),c=e.computed(()=>l.value!==null),d=B=>{if(r.value++,l.value=null,i.value=null,t.value=!1,B!=null&&typeof B=="object"&&!(B instanceof Blob)&&("image"in B||"state"in B||"sessionKey"in B)){const _=B;o.value=_.image??null,s.value=_.state??null}else o.value=B??null,s.value=null;n.value=!0},u=()=>{n.value=!1,o.value=null,i.value=null,l.value=null,t.value=!1,s.value=null},p=async B=>{try{return t.value=!0,i.value=B,a.onSave&&await a.onSave(B),u(),B}catch(_){const b=_;throw l.value=b,a.onError&&a.onError(b),b}finally{t.value=!1}},v=()=>{a.onCancel&&a.onCancel(),u()},h=B=>{l.value=B,a.onError&&a.onError(B)},g=()=>{l.value=null},y=()=>i.value,V=e.computed(()=>n.value&&i.value!==null&&!t.value);return{isOpen:n,isProcessing:t,uploadedImage:o,editedImage:i,sessionKey:r,initialState:s,error:l,hasError:c,hasUnsavedChanges:V,open:d,close:u,handleSave:p,handleCancel:v,handleError:h,clearError:g,getEditedImage:y}}let Zi=null;function TV(a){return Zi||(Zi=Pr(a)),Zi}function MV(a){return n=>new Promise((t,o)=>{Pr({...a,onSave:async r=>{a!=null&&a.onSave&&await a.onSave(r),t(r)},onError:r=>{a!=null&&a.onError&&a.onError(r),o(r)},onCancel:()=>{a!=null&&a.onCancel&&a.onCancel(),o(new Error("User cancelled"))}}).open(n)})}function jr(a){return a.filter(n=>n.media&&!n.markedForRemoval).map((n,t)=>{const o={uuid:n.media.uuid,name:n.name,order:t};return n.customProperties&&(o.custom_properties=n.customProperties),o})}function vr(a){return a.map((n,t)=>{const o={media:n,clientId:n.uuid,name:n.name||n.file_name,order:t};return n.custom_properties&&(o.customProperties=n.custom_properties),o})}function Wr(a){if(a){const t={};a.apiBaseUrl!==void 0&&(t.apiBaseUrl=a.apiBaseUrl),a.isAdmin!==void 0&&(t.isAdmin=a.isAdmin),jn(t)}return{name:"mediables",async upload(t,o){const r=await Ct().uploadFile(t,{collection:(o==null?void 0:o.collection)||"default",customProperties:o==null?void 0:o.customProperties});if(!r)throw new Error("Upload failed: No media returned");return{media:r,uuid:r.uuid}},async attach(t,o){await Ct().attachMedia(o.modelType,String(o.modelId),[t],o.collection||"images")},async attachMany(t,o){await Ct().attachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async detach(t,o){await Ct().detachMedia(o.modelType,String(o.modelId),t,o.collection||"images")},async reorder(t,o){await Ct().reorderMedia(t.modelType,String(t.modelId),o,t.collection||"images")},async fetchModelMedia(t){return await Ct().fetchModelMedia(t.modelType,String(t.modelId),t.collection||"images")},getUrl(t,o){return Ct().getMediaUrl(t,o)},getThumbnailUrl(t){var o,i;return(o=t.conversion_urls)!=null&&o.thumb?t.conversion_urls.thumb:(i=t.conversion_urls)!=null&&i.thumbnail?t.conversion_urls.thumbnail:t.thumbnail_url?t.thumbnail_url:t.original_url||t.url||""},async delete(t){await Ct().deleteMedia(t)},async update(t,o){const r=await Ct().updateMedia(t,o);if(!r)throw new Error("Update failed: No media returned");return r},configure(t){const o={};t.apiBaseUrl!==void 0&&(o.apiBaseUrl=t.apiBaseUrl),t.isAdmin!==void 0&&(o.isAdmin=t.isAdmin),jn(o)}}}let ba=null;function BV(){return ba||(ba=Wr()),ba}function IV(){ba=null}const FV={apiBaseUrl:"/media-library-pro"};function la(){var a;return typeof document>"u"?null:((a=document.querySelector('meta[name="csrf-token"]'))==null?void 0:a.getAttribute("content"))||null}function Xi(a){const n={uuid:a.uuid,file_name:a.fileName||a.name,mime_type:`application/${a.extension}`,size:a.size,disk:"public",original_url:a.original_url||"",created_at:new Date().toISOString(),updated_at:new Date().toISOString()};return a.name&&(n.name=a.name),a.original_url&&(n.url=a.original_url),a.preview_url&&(n.thumbnail_url=a.preview_url,n.preview_url=a.preview_url),a.custom_properties&&(n.custom_properties=a.custom_properties),n}function Zr(a){const n={...FV,...a};return{name:"spatie",async upload(o,i){const r=new FormData;r.append("file",o),i!=null&&i.collection&&r.append("collection",i.collection),i!=null&&i.customProperties&&r.append("custom_properties",JSON.stringify(i.customProperties));const s={Accept:"application/json",...n.headers},l=n.csrfToken||la();l&&(s["X-CSRF-TOKEN"]=l);const c={method:"POST",headers:s,body:r,credentials:"include"};i!=null&&i.signal&&(c.signal=i.signal);const d=await fetch(`${n.apiBaseUrl}/uploads`,c);if(!d.ok){const v=await d.json().catch(()=>({message:"Upload failed"}));throw new Error(v.message||`HTTP ${d.status}`)}const u=await d.json(),p=Xi(u);return i!=null&&i.onProgress&&i.onProgress(100),{media:p,uuid:u.uuid}},async attach(o,i){},async attachMany(o,i){},async detach(o,i){},async reorder(o,i){},async fetchModelMedia(o){const i={Accept:"application/json",...n.headers},r=n.csrfToken||la();r&&(i["X-CSRF-TOKEN"]=r);const s=new URLSearchParams;s.append("model_type",o.modelType),s.append("model_id",String(o.modelId)),o.collection&&s.append("collection",o.collection);try{const l=await fetch(`${n.apiBaseUrl}/media?${s}`,{method:"GET",headers:i,credentials:"include"});if(!l.ok)throw new Error(`HTTP ${l.status}`);return(await l.json()).map(Xi)}catch{return[]}},getUrl(o,i){var r;if(i){const s=(r=o.conversion_urls)==null?void 0:r[i];if(s)return s}return o.original_url||o.url||""},getThumbnailUrl(o){var i,r;return o.preview_url?o.preview_url:(i=o.conversion_urls)!=null&&i.preview?o.conversion_urls.preview:o.thumbnail_url?o.thumbnail_url:(r=o.conversion_urls)!=null&&r.thumb?o.conversion_urls.thumb:o.original_url||o.url||""},async delete(o){const i={Accept:"application/json",...n.headers},r=n.csrfToken||la();r&&(i["X-CSRF-TOKEN"]=r);const s=await fetch(`${n.apiBaseUrl}/uploads/${o}`,{method:"DELETE",headers:i,credentials:"include"});if(!s.ok){const l=await s.json().catch(()=>({message:"Delete failed"}));throw new Error(l.message||`HTTP ${s.status}`)}},async update(o,i){const r={Accept:"application/json","Content-Type":"application/json",...n.headers},s=n.csrfToken||la();s&&(r["X-CSRF-TOKEN"]=s);const l=await fetch(`${n.apiBaseUrl}/uploads/${o}`,{method:"PATCH",headers:r,body:JSON.stringify(i),credentials:"include"});if(!l.ok){const d=await l.json().catch(()=>({message:"Update failed"}));throw new Error(d.message||`HTTP ${l.status}`)}const c=await l.json();return Xi(c)},configure(o){Object.assign(n,o)}}}let wa=null;function $V(){return wa||(wa=Zr()),wa}function RV(){wa=null}function ad(a,n){switch(a){case"mediables":return Wr(n);case"spatie":return Zr(n);default:throw new Error(`Unknown adapter: ${a}`)}}function Ia(a){if(a===0)return"0 Bytes";const n=1024,t=["Bytes","KB","MB","GB"],o=Math.floor(Math.log(a)/Math.log(n));return parseFloat((a/Math.pow(n,o)).toFixed(2))+" "+t[o]}function id(a){var t;const n=a.split(".");return n.length>1?`.${(t=n.pop())==null?void 0:t.toLowerCase()}`:""}function Xr(a){return a.type.startsWith("image/")}async function rd(a){return Xr(a)?new Promise(n=>{const t=new Image,o=URL.createObjectURL(a);t.onload=()=>{URL.revokeObjectURL(o),n({width:t.naturalWidth,height:t.naturalHeight})},t.onerror=()=>{URL.revokeObjectURL(o),n(null)},t.src=o}):null}async function sd(a,n){const t=[];if(n.maxFileSize&&a.size>n.maxFileSize&&t.push({field:"size",message:`File exceeds maximum size of ${Ia(n.maxFileSize)}`,code:"MAX_FILE_SIZE"}),n.minFileSize&&a.size<n.minFileSize&&t.push({field:"size",message:`File is smaller than minimum size of ${Ia(n.minFileSize)}`,code:"MIN_FILE_SIZE"}),n.acceptedMimeTypes&&n.acceptedMimeTypes.length>0&&(n.acceptedMimeTypes.some(i=>i.endsWith("/*")?a.type.startsWith(i.slice(0,-1)):a.type===i)||t.push({field:"type",message:`File type "${a.type}" is not allowed`,code:"INVALID_MIME_TYPE"})),n.acceptedExtensions&&n.acceptedExtensions.length>0){const o=id(a.name);n.acceptedExtensions.some(r=>r.toLowerCase()===o.toLowerCase())||t.push({field:"extension",message:`File extension "${o}" is not allowed`,code:"INVALID_EXTENSION"})}if(Xr(a)&&(n.maxDimensions||n.minDimensions)){const o=await rd(a);o&&(n.maxDimensions&&(o.width>n.maxDimensions.width&&t.push({field:"dimensions",message:`Image width (${o.width}px) exceeds maximum (${n.maxDimensions.width}px)`,code:"MAX_WIDTH"}),o.height>n.maxDimensions.height&&t.push({field:"dimensions",message:`Image height (${o.height}px) exceeds maximum (${n.maxDimensions.height}px)`,code:"MAX_HEIGHT"})),n.minDimensions&&(o.width<n.minDimensions.width&&t.push({field:"dimensions",message:`Image width (${o.width}px) is smaller than minimum (${n.minDimensions.width}px)`,code:"MIN_WIDTH"}),o.height<n.minDimensions.height&&t.push({field:"dimensions",message:`Image height (${o.height}px) is smaller than minimum (${n.minDimensions.height}px)`,code:"MIN_HEIGHT"})))}if(n.customValidator){const o=await n.customValidator(a);t.push(...o)}return{valid:t.length===0,errors:t}}function Hr(a={}){const n=e.ref(a.rules||{});function t(c){n.value=c}async function o(c){return sd(c,n.value)}async function i(c){const d=new Map;return await Promise.all(c.map(async u=>{const p=await o(u);d.set(u,p)})),d}function r(c,d){return n.value.maxItems?d+c<=n.value.maxItems:!0}const s=e.computed(()=>{const c=[];return n.value.acceptedMimeTypes&&c.push(...n.value.acceptedMimeTypes),n.value.acceptedExtensions&&c.push(...n.value.acceptedExtensions),c.join(",")});function l(c){return!n.value.acceptedMimeTypes||n.value.acceptedMimeTypes.length===0?!0:n.value.acceptedMimeTypes.some(d=>d.endsWith("/*")?c.startsWith(d.slice(0,-1)):c===d)}return{rules:n,setRules:t,validateFile:o,validateFiles:i,canAddFiles:r,acceptString:s,isMimeTypeAllowed:l}}function DV(){return`upload-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}function AV(a){if(a.type.startsWith("image/"))return URL.createObjectURL(a)}function ld(a){const{adapter:n,maxConcurrent:t=3,rules:o,collection:i,onUploadStart:r,onUploadProgress:s,onUploadComplete:l,onUploadError:c,onQueueComplete:d}=a,u=e.ref(new Map),p=e.ref(new Set),v=o?{rules:o}:{},{validateFile:h}=Hr(v);async function g(){if(p.value.size>=t)return;const E=Array.from(u.value.entries()).find(([P,M])=>M.status==="pending"&&!p.value.has(P));if(!E){Array.from(u.value.values()).every(M=>M.status==="completed"||M.status==="error")&&u.value.size>0&&(d==null||d());return}const[R,A]=E;await y(R,A)}async function y(E,R){p.value.add(E),R.status="uploading",R.abortController=new AbortController,u.value.set(E,{...R}),r==null||r(R);try{const A={onProgress:M=>{R.progress=M,u.value.set(E,{...R}),s==null||s(R)},signal:R.abortController.signal};i&&(A.collection=i);const P=await n.upload(R.file,A);R.status="completed",R.progress=100,R.media=P.media,u.value.set(E,{...R}),l==null||l(R,P.media)}catch(A){A.name==="AbortError"?u.value.delete(E):(R.status="error",R.error=A.message,u.value.set(E,{...R}),c==null||c(R,A))}finally{p.value.delete(E),delete R.abortController,g()}}async function V(E){var P;const R=Array.from(E),A=[];for(const M of R){const j=await h(M),U=DV(),S=AV(M),F={id:U,file:M,progress:0,status:j.valid?"pending":"error"};!j.valid&&((P=j.errors[0])!=null&&P.message)&&(F.error=j.errors[0].message),S&&(F.previewUrl=S),u.value.set(U,F);const J={media:null,clientId:U,name:M.name,order:0,upload:F,errors:j.errors};A.push(J)}for(let M=0;M<t;M++)g();return A}function B(E){const R=u.value.get(E);R&&(R.abortController&&R.abortController.abort(),R.previewUrl&&URL.revokeObjectURL(R.previewUrl),u.value.delete(E),p.value.delete(E),g())}async function _(E){const R=u.value.get(E);!R||R.status!=="error"||(R.status="pending",R.progress=0,delete R.error,u.value.set(E,{...R}),g())}function b(){for(const[E,R]of u.value.entries())(R.status==="completed"||R.status==="error")&&(R.previewUrl&&URL.revokeObjectURL(R.previewUrl),u.value.delete(E))}function m(){for(const E of u.value.values())E.abortController&&E.abortController.abort(),E.previewUrl&&URL.revokeObjectURL(E.previewUrl);u.value.clear(),p.value.clear()}function w(E){return u.value.get(E)}const I=e.computed(()=>p.value.size>0),N=e.computed(()=>p.value.size),x=e.computed(()=>Array.from(u.value.values()).filter(E=>E.status==="pending").length),T=e.computed(()=>u.value.size===0?!0:Array.from(u.value.values()).every(E=>E.status==="completed"||E.status==="error")),H=e.computed(()=>Array.from(u.value.values()));return{uploads:u,isUploading:I,activeCount:N,pendingCount:x,isComplete:T,addFiles:V,cancelUpload:B,retryUpload:_,clearCompleted:b,clearAll:m,getUpload:w,uploadsArray:H}}function cd(a={}){const{enabled:n=!0,onReorder:t,onDragStart:o,onDragEnd:i,draggingClass:r="is-dragging",dropTargetClass:s="is-drop-target"}=a,l=e.ref({isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null}),c=e.ref(!1);let d=null;function u(_,b,m){n&&("dataTransfer"in _&&_.dataTransfer&&(_.dataTransfer.effectAllowed="move",_.dataTransfer.setData("text/plain",String(m))),d=_.target,d&&d.classList.add(r),l.value={isDragging:!0,dragIndex:m,dropIndex:m,draggedItem:b},c.value=!0,o==null||o(b,m))}function p(_,b){var m;if(!(!n||!l.value.isDragging)&&(_.preventDefault(),l.value.dropIndex!==b)){const w=document.querySelector(`.${s}`);w==null||w.classList.remove(s);const I=(m=_.target)==null?void 0:m.closest("[data-index]");I==null||I.classList.add(s),l.value.dropIndex=b}}function v(){if(!l.value.isDragging)return;const{dragIndex:_,dropIndex:b,draggedItem:m}=l.value;d&&d.classList.remove(r);const w=document.querySelector(`.${s}`);w==null||w.classList.remove(s),_!==null&&b!==null&&_!==b&&m&&(t==null||t({fromIndex:_,toIndex:b,item:m})),g(),i==null||i()}function h(){d&&d.classList.remove(r);const _=document.querySelector(`.${s}`);_==null||_.classList.remove(s),g(),i==null||i()}function g(){l.value={isDragging:!1,dragIndex:null,dropIndex:null,draggedItem:null},c.value=!1,d=null}function y(_,b,m){const w=[..._],[I]=w.splice(b,1);return w.splice(m,0,I),w.map((N,x)=>({...N,order:x}))}function V(_,b){return{draggable:n,"data-index":b,onDragstart:m=>u(m,_,b),onDragover:m=>p(m,b),onDragend:()=>v(),onDrop:m=>{m.preventDefault(),v()}}}function B(_){_.key==="Escape"&&l.value.isDragging&&h()}return e.onMounted(()=>{document.addEventListener("keydown",B)}),e.onUnmounted(()=>{document.removeEventListener("keydown",B),h()}),{dragState:l,isDragging:c,startDrag:u,handleDragOver:p,endDrag:v,cancelDrag:h,reorderItems:y,getDragProps:V}}function ai(a={}){const{initialItems:n=[],modelType:t,modelId:o,collection:i="images",maxItems:r,maxFileSize:s,acceptedMimeTypes:l,sortable:c=!0,disabled:d=!1,rules:u={},adapterType:p="mediables",adapter:v,maxConcurrentUploads:h=3,onChange:g,onUpload:y,onUploadComplete:V,onUploadError:B,onRemove:_,onReorder:b,onError:m,onReadyToSubmitChange:w}=a,I={maxItems:r,maxFileSize:s,acceptedMimeTypes:l,...u},N=v||ad(p),x=e.ref([]),T=e.ref(!1),H=e.ref([]);function E(oe){if(oe.length===0)return[];const se=oe[0];return"media"in se&&"clientId"in se?oe:vr(oe)}x.value=E(n);const{acceptString:R,canAddFiles:A}=Hr({rules:I}),P=ld({adapter:N,maxConcurrent:h,rules:I,collection:i,onUploadStart:oe=>{y==null||y(oe)},onUploadComplete:(oe,se)=>{const ke=x.value.findIndex(Se=>Se.clientId===oe.id);ke!==-1&&(x.value[ke]={...x.value[ke],media:se,name:se.name||se.file_name,upload:{...oe,status:"completed"}}),V==null||V(se)},onUploadError:(oe,se)=>{const ke=x.value.findIndex(Se=>Se.clientId===oe.id);ke!==-1&&(x.value[ke]={...x.value[ke],upload:{...oe,status:"error",error:se.message},errors:[{field:"upload",message:se.message,code:"UPLOAD_ERROR"}]}),B==null||B({file:oe.file,message:se.message})},onQueueComplete:()=>{g==null||g(x.value)}}),{dragState:M,getDragProps:j,reorderItems:U}=cd({enabled:c&&!d,onReorder:oe=>{x.value=U(x.value,oe.fromIndex,oe.toIndex),b==null||b(x.value),g==null||g(x.value)}}),S=e.computed(()=>P.isUploading.value),F=e.computed(()=>!P.isUploading.value&&P.pendingCount.value===0),J=e.computed(()=>r?x.value.length>=r:!1),G=e.computed(()=>jr(x.value)),Q=e.computed(()=>x.value.length),ge=e.computed(()=>r?Math.max(0,r-x.value.length):1/0);e.watch(F,oe=>{w==null||w(oe)});function be(oe){x.value=E(oe),g==null||g(x.value)}async function te(oe){if(d)return;const se=Array.from(oe);if(!A(se.length,x.value.length)){const Ze={field:"count",message:`Maximum ${r} files allowed`,code:"MAX_ITEMS"};H.value=[Ze],m==null||m([Ze]);return}const ke=await P.addFiles(se),Se=x.value.length,ut=ke.map((Ze,Vt)=>({...Ze,order:Se+Vt}));x.value=[...x.value,...ut],g==null||g(x.value)}function $(oe){d||(oe.upload&&(oe.upload.status==="uploading"||oe.upload.status==="pending")&&P.cancelUpload(oe.clientId),x.value=x.value.filter(se=>se.clientId!==oe.clientId),x.value=x.value.map((se,ke)=>({...se,order:ke})),_==null||_(oe),g==null||g(x.value))}function O(oe){const se=x.value.find(ke=>ke.clientId===oe);se&&$(se)}function me(){d||(P.clearAll(),x.value=[],g==null||g(x.value))}function ne(oe,se){d||!c||(x.value=U(x.value,oe,se),b==null||b(x.value),g==null||g(x.value))}function ee(oe,se){if(d)return;const ke=x.value.findIndex(Se=>Se.clientId===oe);ke!==-1&&(x.value[ke]={...x.value[ke],...se},g==null||g(x.value))}function pe(oe){P.cancelUpload(oe),O(oe)}async function ae(oe){await P.retryUpload(oe)}async function ue(){if(!t||!o)throw new Error("modelType and modelId are required for save()");const oe={modelType:t,modelId:o,collection:i},se=x.value.filter(ke=>ke.media&&!ke.markedForRemoval).map(ke=>ke.media.uuid);T.value=!0;try{await N.attachMany(se,oe),await N.reorder(oe,se)}finally{T.value=!1}}async function we(){if(!t||!o)throw new Error("modelType and modelId are required for load()");const oe={modelType:t,modelId:o,collection:i};T.value=!0;try{const se=await N.fetchModelMedia(oe);x.value=vr(se),g==null||g(x.value)}finally{T.value=!1}}return e.onMounted(()=>{t&&o&&n.length===0&&we().catch(console.error)}),e.onUnmounted(()=>{P.clearAll()}),{items:x,setItems:be,addFiles:te,removeItem:$,removeItemById:O,clearAll:me,reorderItems:ne,updateItem:ee,cancelUpload:pe,retryUpload:ae,save:ue,load:we,isLoading:T,isUploading:S,isReadyToSubmit:F,isAtMaxItems:J,errors:H,dragState:M,getDragProps:j,adapter:N,formValues:G,acceptString:R,count:Q,remainingSlots:ge}}const UV=["aria-disabled"],LV=["accept","multiple","disabled"],OV={class:"media-dropzone__content"},zV={class:"media-dropzone__title"},PV={class:"media-dropzone__subtitle"},jV=["disabled"],WV={key:0,class:"media-dropzone__helper"},ZV=e.defineComponent({__name:"MediaCollectionDropzone",props:{accept:{default:"*"},multiple:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},maxFileSize:{},maxItems:{},title:{default:"Drop files here"},subtitle:{default:"or click to browse"},buttonText:{default:"Select files"}},emits:["files"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(!1),r=e.ref(null),s=e.computed(()=>({"media-dropzone":!0,"media-dropzone--drag-over":i.value,"media-dropzone--disabled":t.disabled})),l=e.computed(()=>{const y=[];return t.maxFileSize&&y.push(`Max size: ${Ia(t.maxFileSize)}`),t.maxItems&&t.maxItems>1&&y.push(`Max files: ${t.maxItems}`),y.join(" • ")});function c(y){y.preventDefault(),!t.disabled&&(i.value=!0)}function d(y){y.preventDefault(),i.value=!1}function u(y){y.preventDefault()}function p(y){var B;if(y.preventDefault(),i.value=!1,t.disabled)return;const V=(B=y.dataTransfer)==null?void 0:B.files;V&&V.length>0&&o("files",V)}function v(){var y;t.disabled||(y=r.value)==null||y.click()}function h(y){const V=y.target,B=V.files;B&&B.length>0&&o("files",B),V.value=""}function g(y){(y.key==="Enter"||y.key===" ")&&(y.preventDefault(),v())}return(y,V)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(s.value),role:"button",tabindex:"0","aria-disabled":y.disabled,"aria-label":"Upload files",onClick:v,onKeydown:g,onDragenter:c,onDragleave:d,onDragover:u,onDrop:p},[e.createElementVNode("input",{ref_key:"fileInput",ref:r,type:"file",accept:y.accept,multiple:y.multiple,disabled:y.disabled,class:"media-dropzone__input",onChange:h},null,40,LV),e.createElementVNode("div",OV,[e.renderSlot(y.$slots,"icon",{},()=>[V[0]||(V[0]=e.createElementVNode("svg",{class:"media-dropzone__icon",xmlns:"http://www.w3.org/2000/svg",width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"1.5","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e.createElementVNode("polyline",{points:"17 8 12 3 7 8"}),e.createElementVNode("line",{x1:"12",y1:"3",x2:"12",y2:"15"})],-1))],!0),e.createElementVNode("p",zV,[e.renderSlot(y.$slots,"title",{},()=>[e.createTextVNode(e.toDisplayString(y.title),1)],!0)]),e.createElementVNode("p",PV,[e.renderSlot(y.$slots,"subtitle",{},()=>[e.createTextVNode(e.toDisplayString(y.subtitle),1)],!0)]),e.createElementVNode("button",{type:"button",class:"media-dropzone__button",disabled:y.disabled,onClick:e.withModifiers(v,["stop"])},[e.renderSlot(y.$slots,"button",{},()=>[e.createTextVNode(e.toDisplayString(y.buttonText),1)],!0)],8,jV),l.value?(e.openBlock(),e.createElementBlock("p",WV,e.toDisplayString(l.value),1)):e.createCommentVNode("",!0)])],42,UV))}}),Gr=Te(ZV,[["__scopeId","data-v-b1366c1e"]]),XV=["data-index"],HV={key:0,class:"media-item__drag-handle","aria-label":"Drag to reorder",role:"button",tabindex:"0"},GV={class:"media-item__thumbnail"},JV=["src","alt"],YV={key:1,class:"media-item__file-icon"},KV={key:2,class:"media-item__progress-overlay"},qV={class:"media-item__progress-text"},QV={key:3,class:"media-item__processing-overlay"},eS={key:4,class:"media-item__error-overlay"},tS={class:"media-item__info"},nS=["title"],oS={key:0,class:"media-item__size"},aS={key:1,class:"media-item__error-message"},iS={class:"media-item__actions"},rS=["disabled"],sS=["disabled"],lS=["disabled"],cS=["disabled"],dS=e.defineComponent({__name:"MediaCollectionItem",props:{item:{},adapter:{},disabled:{type:Boolean,default:!1},sortable:{type:Boolean,default:!1},showRemove:{type:Boolean,default:!0},showEdit:{type:Boolean,default:!1},index:{default:0}},emits:["remove","edit","retry","cancel"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(!1),r=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.previewUrl?t.item.upload.previewUrl:t.item.media?t.adapter.getThumbnailUrl(t.item.media):null}),s=e.computed(()=>{var b,m,w;return((b=t.item.upload)==null?void 0:b.status)==="uploading"||((m=t.item.upload)==null?void 0:m.status)==="pending"||((w=t.item.upload)==null?void 0:w.status)==="queued"}),l=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="processing"}),c=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.status)==="error"||t.item.errors&&t.item.errors.length>0}),d=e.computed(()=>{var b;return(b=t.item.upload)!=null&&b.error?t.item.upload.error:t.item.errors&&t.item.errors.length>0?t.item.errors[0].message:null}),u=e.computed(()=>{var b;return((b=t.item.upload)==null?void 0:b.progress)||0}),p=e.computed(()=>{var b;return t.item.name||((b=t.item.media)==null?void 0:b.file_name)||"Unknown file"}),v=e.computed(()=>{var N,x;const b=((N=t.item.media)==null?void 0:N.size)||((x=t.item.upload)==null?void 0:x.file.size);if(!b)return"";const m=1024,w=["Bytes","KB","MB","GB"],I=Math.floor(Math.log(b)/Math.log(m));return parseFloat((b/Math.pow(m,I)).toFixed(2))+" "+w[I]}),h=e.computed(()=>{var m,w;const b=((m=t.item.media)==null?void 0:m.mime_type)||((w=t.item.upload)==null?void 0:w.file.type);return b==null?void 0:b.startsWith("image/")}),g=e.computed(()=>({"media-item":!0,"media-item--uploading":s.value,"media-item--processing":l.value,"media-item--error":c.value,"media-item--disabled":t.disabled,"media-item--sortable":t.sortable}));function y(){t.disabled||o("remove",t.item)}function V(){t.disabled||o("edit",t.item)}function B(){t.disabled||o("retry",t.item)}function _(){t.disabled||o("cancel",t.item)}return(b,m)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(g.value),"data-index":b.index,onMouseenter:m[0]||(m[0]=w=>i.value=!0),onMouseleave:m[1]||(m[1]=w=>i.value=!1)},[b.sortable&&!b.disabled?(e.openBlock(),e.createElementBlock("div",HV,[...m[2]||(m[2]=[e.createStaticVNode('<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" data-v-ff81c9ec><circle cx="9" cy="5" r="1" data-v-ff81c9ec></circle><circle cx="9" cy="12" r="1" data-v-ff81c9ec></circle><circle cx="9" cy="19" r="1" data-v-ff81c9ec></circle><circle cx="15" cy="5" r="1" data-v-ff81c9ec></circle><circle cx="15" cy="12" r="1" data-v-ff81c9ec></circle><circle cx="15" cy="19" r="1" data-v-ff81c9ec></circle></svg>',1)])])):e.createCommentVNode("",!0),e.createElementVNode("div",GV,[r.value&&h.value?(e.openBlock(),e.createElementBlock("img",{key:0,src:r.value,alt:p.value,class:"media-item__image"},null,8,JV)):(e.openBlock(),e.createElementBlock("div",YV,[...m[3]||(m[3]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),e.createElementVNode("polyline",{points:"14 2 14 8 20 8"})],-1)])])),s.value?(e.openBlock(),e.createElementBlock("div",KV,[e.createElementVNode("div",{class:"media-item__progress-bar",style:e.normalizeStyle({width:`${u.value}%`})},null,4),e.createElementVNode("span",qV,e.toDisplayString(u.value)+"%",1)])):e.createCommentVNode("",!0),l.value?(e.openBlock(),e.createElementBlock("div",QV,[...m[4]||(m[4]=[e.createElementVNode("div",{class:"media-item__spinner","aria-label":"Processing"},null,-1)])])):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("div",eS,[...m[5]||(m[5]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"}),e.createElementVNode("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),e.createElementVNode("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})],-1)])])):e.createCommentVNode("",!0)]),e.createElementVNode("div",tS,[e.createElementVNode("span",{class:"media-item__name",title:p.value},e.toDisplayString(p.value),9,nS),v.value?(e.openBlock(),e.createElementBlock("span",oS,e.toDisplayString(v.value),1)):e.createCommentVNode("",!0),d.value?(e.openBlock(),e.createElementBlock("span",aS,e.toDisplayString(d.value),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",iS,[s.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-item__action media-item__action--cancel",disabled:b.disabled,"aria-label":"Cancel upload",onClick:_},[...m[6]||(m[6]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"})],-1)])],8,rS)):e.createCommentVNode("",!0),c.value?(e.openBlock(),e.createElementBlock("button",{key:1,type:"button",class:"media-item__action media-item__action--retry",disabled:b.disabled,"aria-label":"Retry upload",onClick:B},[...m[7]||(m[7]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("polyline",{points:"23 4 23 10 17 10"}),e.createElementVNode("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})],-1)])],8,sS)):e.createCommentVNode("",!0),b.showEdit&&b.item.media&&!s.value?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"media-item__action media-item__action--edit",disabled:b.disabled,"aria-label":"Edit",onClick:V},[...m[8]||(m[8]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"}),e.createElementVNode("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"})],-1)])],8,lS)):e.createCommentVNode("",!0),b.showRemove?(e.openBlock(),e.createElementBlock("button",{key:3,type:"button",class:"media-item__action media-item__action--remove",disabled:b.disabled,"aria-label":"Remove",onClick:y},[...m[9]||(m[9]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("polyline",{points:"3 6 5 6 21 6"}),e.createElementVNode("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"})],-1)])],8,cS)):e.createCommentVNode("",!0)])],42,XV))}}),Jr=Te(dS,[["__scopeId","data-v-ff81c9ec"]]),uS=["aria-label"],mS=["draggable","data-index","onDragstart","onDragover","onDragend","onDrop"],pS={key:0,class:"media-collection__footer"},fS={class:"media-collection__count"},hS={key:0},vS={key:0,class:"media-collection__uploading"},gS=["name","value"],yS=["name","value"],bS=["name","value"],wS=["name","value"],kS={key:3,class:"media-collection__errors",role:"alert","aria-live":"polite"},xS=e.defineComponent({__name:"MediaCollection",props:{modelValue:{default:()=>[]},name:{default:"media"},modelType:{},modelId:{},collection:{default:"images"},maxItems:{},maxFileSize:{},acceptedMimeTypes:{},sortable:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},rules:{},adapter:{default:"mediables"},labels:{},showUploadZone:{type:Boolean,default:!0},generateFormFields:{type:Boolean,default:!0}},emits:["update:modelValue","change","upload","upload-complete","upload-error","remove","reorder","is-ready-to-submit-change","validation-error"],setup(a,{emit:n}){const t=a,o=n,i={initialItems:t.modelValue,modelType:t.modelType,modelId:t.modelId,collection:t.collection,maxItems:t.maxItems,maxFileSize:t.maxFileSize,acceptedMimeTypes:t.acceptedMimeTypes,sortable:t.sortable,disabled:t.disabled,rules:t.rules,adapterType:t.adapter,onChange:S=>{o("update:modelValue",S),o("change",S)},onUpload:S=>{o("upload",S)},onUploadComplete:S=>{o("upload-complete",S)},onUploadError:S=>{o("upload-error",S)},onRemove:S=>{o("remove",S)},onReorder:S=>{o("reorder",S)},onError:S=>{o("validation-error",S)},onReadyToSubmitChange:S=>{o("is-ready-to-submit-change",S)}},{items:r,setItems:s,addFiles:l,removeItem:c,reorderItems:d,cancelUpload:u,retryUpload:p,isLoading:v,isUploading:h,isAtMaxItems:g,errors:y,dragState:V,getDragProps:B,adapter:_,formValues:b,acceptString:m,count:w,remainingSlots:I}=ai(i);e.provide("mediaAdapter",_),e.provide("mediaCollection",{items:r,addFiles:l,removeItem:c,reorderItems:d}),e.watch(()=>t.modelValue,S=>{S!==r.value&&s(S)},{deep:!0});const N=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!g.value),x=e.computed(()=>({"media-collection":!0,"media-collection--disabled":t.disabled,"media-collection--readonly":t.readonly,"media-collection--loading":v.value,"media-collection--has-items":r.value.length>0,"media-collection--dragging":V.value.isDragging}));function T(S){l(S)}function H(S){c(S)}function E(S){p(S.clientId)}function R(S){u(S.clientId)}function A(S){}function P(S,F,J){if(!t.sortable||t.disabled)return;const G=B(F,J);G.onDragstart&&G.onDragstart(S)}function M(S,F){if(!t.sortable||t.disabled)return;S.preventDefault();const J=r.value[F],G=B(J,F);G.onDragover&&G.onDragover(S)}function j(S,F){const J=B(S,F);J.onDragend&&J.onDragend()}function U(S,F){S.preventDefault();const J=r.value[F],G=B(J,F);G.onDrop&&G.onDrop(S)}return(S,F)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(x.value)},[e.renderSlot(S.$slots,"dropzone",{addFiles:e.unref(l)},()=>[N.value?(e.openBlock(),e.createBlock(Gr,{key:0,accept:e.unref(m),multiple:S.maxItems!==1,disabled:S.disabled,"max-file-size":S.maxFileSize,"max-items":e.unref(I),onFiles:T},null,8,["accept","multiple","disabled","max-file-size","max-items"])):e.createCommentVNode("",!0)],!0),e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"media-collection__list",role:"list","aria-label":`${e.unref(w)} media items`},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(r),(J,G)=>e.renderSlot(S.$slots,"item",{key:J.clientId,item:J,index:G,remove:()=>H(J)},()=>[e.createElementVNode("div",{class:e.normalizeClass(["media-collection__item-wrapper",{"media-collection__item-wrapper--drag-over":e.unref(V).dropIndex===G}]),draggable:S.sortable&&!S.disabled,"data-index":G,onDragstart:Q=>P(Q,J,G),onDragover:Q=>M(Q,G),onDragend:Q=>j(J,G),onDrop:Q=>U(Q,G)},[e.createVNode(Jr,{item:J,adapter:e.unref(_),disabled:S.disabled,sortable:S.sortable,"show-remove":!S.readonly,"show-edit":!1,index:G,onRemove:H,onRetry:E,onCancel:R,onEdit:A},null,8,["item","adapter","disabled","sortable","show-remove","index"])],42,mS)],!0)),128))],8,uS)):N.value?e.createCommentVNode("",!0):e.renderSlot(S.$slots,"empty",{key:1},()=>[F[0]||(F[0]=e.createElementVNode("div",{class:"media-collection__empty"},[e.createElementVNode("p",null,"No files uploaded")],-1))],!0),e.renderSlot(S.$slots,"footer",{count:e.unref(w),isUploading:e.unref(h)},()=>[e.unref(r).length>0?(e.openBlock(),e.createElementBlock("div",pS,[e.createElementVNode("span",fS,[e.createTextVNode(e.toDisplayString(e.unref(w))+" "+e.toDisplayString(e.unref(w)===1?"file":"files")+" ",1),S.maxItems?(e.openBlock(),e.createElementBlock("span",hS," / "+e.toDisplayString(S.maxItems)+" max",1)):e.createCommentVNode("",!0)]),e.unref(h)?(e.openBlock(),e.createElementBlock("span",vS," Uploading... ")):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0)],!0),S.generateFormFields?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(J,G)=>(e.openBlock(),e.createElementBlock("input",{key:`${S.name}-${J.uuid}`,type:"hidden",name:`${S.name}[${G}][uuid]`,value:J.uuid},null,8,gS))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(J,G)=>(e.openBlock(),e.createElementBlock("input",{key:`${S.name}-${J.uuid}-name`,type:"hidden",name:`${S.name}[${G}][name]`,value:J.name},null,8,yS))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(J,G)=>(e.openBlock(),e.createElementBlock("input",{key:`${S.name}-${J.uuid}-order`,type:"hidden",name:`${S.name}[${G}][order]`,value:J.order},null,8,bS))),128)),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(b),(J,G)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:`${S.name}-${J.uuid}-props`},[J.custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${S.name}[${G}][custom_properties]`,value:JSON.stringify(J.custom_properties)},null,8,wS)):e.createCommentVNode("",!0)],64))),128))],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",kS,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),J=>(e.openBlock(),e.createElementBlock("p",{key:J.code||J.message,class:"media-collection__error"},e.toDisplayString(J.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),ES=Te(xS,[["__scopeId","data-v-10a5bfff"]]);function Yr(a={}){const{initialItem:n,onChange:t,onReplace:o,onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d,...u}=a,v={...u,initialItems:n?[n]:[],maxItems:1,sortable:!1,onChange:N=>{t==null||t(N[0]||null)},onUpload:i,onUploadComplete:r,onUploadError:s,onRemove:l,onError:c,onReadyToSubmitChange:d},h=ai(v),g=e.computed(()=>h.items.value[0]||null),y=e.computed(()=>g.value!==null),V=e.computed(()=>h.formValues.value[0]||null);function B(N){N===null?h.clearAll():h.setItems([N])}async function _(N){const x=g.value;x&&h.removeItem(x),await h.addFiles([N])}function b(){g.value&&h.removeItem(g.value)}async function m(N){const x=g.value;x&&h.removeItem(x),await h.addFiles([N]);const T=h.items.value[0];T&&(o==null||o(x,T))}function w(){var N;(N=g.value)!=null&&N.upload&&h.cancelUpload(g.value.clientId)}async function I(){var N,x;((x=(N=g.value)==null?void 0:N.upload)==null?void 0:x.status)==="error"&&await h.retryUpload(g.value.clientId)}return{item:g,setItem:B,addFile:_,removeItem:b,replaceItem:m,cancelUpload:w,retryUpload:I,save:h.save,load:h.load,isLoading:h.isLoading,isUploading:h.isUploading,isReadyToSubmit:h.isReadyToSubmit,hasItem:y,errors:h.errors,adapter:h.adapter,formValue:V,acceptString:h.acceptString}}const VS=["accept","disabled"],SS={class:"media-attachment__preview"},CS=["name","value"],_S=["name","value"],NS=["name","value"],TS=["name","value"],MS={key:4,class:"media-attachment__errors",role:"alert","aria-live":"polite"},BS=e.defineComponent({__name:"MediaAttachment",props:{modelValue:{default:null},name:{default:"media"},modelType:{},modelId:{},collection:{default:"images"},maxFileSize:{},acceptedMimeTypes:{},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},rules:{},adapter:{default:"mediables"},labels:{},showUploadZone:{type:Boolean,default:!0},generateFormFields:{type:Boolean,default:!0},showReplaceButton:{type:Boolean,default:!0}},emits:["update:modelValue","change","upload","upload-complete","upload-error","remove","replace","is-ready-to-submit-change","validation-error"],setup(a,{emit:n}){const t=a,o=n,i=e.ref(null),r={initialItem:t.modelValue,modelType:t.modelType,modelId:t.modelId,collection:t.collection,maxFileSize:t.maxFileSize,acceptedMimeTypes:t.acceptedMimeTypes,disabled:t.disabled,rules:t.rules,adapterType:t.adapter,onChange:E=>{o("update:modelValue",E),o("change",E)},onUpload:E=>{o("upload",E)},onUploadComplete:E=>{o("upload-complete",E)},onUploadError:E=>{o("upload-error",E)},onRemove:E=>{o("remove",E)},onReplace:(E,R)=>{o("replace",R)},onError:E=>{o("validation-error",E)},onReadyToSubmitChange:E=>{o("is-ready-to-submit-change",E)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:p,retryUpload:v,isLoading:h,hasItem:g,errors:y,adapter:V,formValue:B,acceptString:_}=Yr(r);e.provide("mediaAdapter",V),e.watch(()=>t.modelValue,E=>{E!==s.value&&l(E)},{deep:!0});const b=e.computed(()=>t.showUploadZone&&!t.disabled&&!t.readonly&&!g.value),m=e.computed(()=>({"media-attachment":!0,"media-attachment--disabled":t.disabled,"media-attachment--readonly":t.readonly,"media-attachment--loading":h.value,"media-attachment--has-item":g.value}));function w(E){E.length>0&&c(E[0])}function I(){var E;(E=i.value)==null||E.click()}function N(E){const R=E.target,A=R.files;A&&A.length>0&&u(A[0]),R.value=""}function x(E){d()}function T(E){v()}function H(E){p()}return(E,R)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(m.value)},[e.createElementVNode("input",{ref_key:"fileInputRef",ref:i,type:"file",accept:e.unref(_),disabled:E.disabled,class:"media-attachment__hidden-input",onChange:N},null,40,VS),b.value?e.renderSlot(E.$slots,"dropzone",{key:0,addFile:e.unref(c)},()=>[e.createVNode(Gr,{accept:e.unref(_),multiple:!1,disabled:E.disabled,"max-file-size":E.maxFileSize,onFiles:w},null,8,["accept","disabled","max-file-size"])],!0):e.unref(g)&&e.unref(s)?e.renderSlot(E.$slots,"preview",{key:1,item:e.unref(s),remove:e.unref(d),replace:I},()=>[e.createElementVNode("div",SS,[e.createVNode(Jr,{item:e.unref(s),adapter:e.unref(V),disabled:E.disabled,sortable:!1,"show-remove":!E.readonly,"show-edit":!1,onRemove:x,onRetry:T,onCancel:H},null,8,["item","adapter","disabled","show-remove"]),E.showReplaceButton&&!E.readonly&&!E.disabled&&e.unref(s).media?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"media-attachment__replace-button",onClick:I},[...R[0]||(R[0]=[e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round","aria-hidden":"true"},[e.createElementVNode("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),e.createElementVNode("polyline",{points:"17 8 12 3 7 8"}),e.createElementVNode("line",{x1:"12",y1:"3",x2:"12",y2:"15"})],-1),e.createTextVNode(" Replace ",-1)])])):e.createCommentVNode("",!0)])],!0):e.renderSlot(E.$slots,"empty",{key:2},()=>[R[1]||(R[1]=e.createElementVNode("div",{class:"media-attachment__empty"},[e.createElementVNode("p",null,"No file selected")],-1))],!0),E.generateFormFields&&e.unref(B)?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createElementVNode("input",{type:"hidden",name:`${E.name}[uuid]`,value:e.unref(B).uuid},null,8,CS),e.createElementVNode("input",{type:"hidden",name:`${E.name}[name]`,value:e.unref(B).name},null,8,_S),e.createElementVNode("input",{type:"hidden",name:`${E.name}[order]`,value:e.unref(B).order},null,8,NS),e.unref(B).custom_properties?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:`${E.name}[custom_properties]`,value:JSON.stringify(e.unref(B).custom_properties)},null,8,TS)):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0),e.unref(y).length>0?(e.openBlock(),e.createElementBlock("div",MS,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),A=>(e.openBlock(),e.createElementBlock("p",{key:A.code||A.message,class:"media-attachment__error"},e.toDisplayString(A.message),1))),128))])):e.createCommentVNode("",!0)],2))}}),IS=Te(BS,[["__scopeId","data-v-26911174"]]),dd={dropzone:{title:"Drop files here",subtitle:"or click to browse",button:"Select files"},item:{remove:"Remove",replace:"Replace",edit:"Edit",download:"Download"},errors:{maxItems:"Maximum {max} files allowed",maxFileSize:"File exceeds maximum size of {max}",invalidType:"File type not allowed",uploadFailed:"Upload failed"},status:{uploading:"Uploading...",processing:"Processing...",completed:"Complete",error:"Error"}},FS=e.defineComponent({__name:"MediaCollectionProvider",props:{modelValue:{default:()=>[]},name:{default:"media"},modelType:{},modelId:{},collection:{default:"images"},maxItems:{},maxFileSize:{},acceptedMimeTypes:{},sortable:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},rules:{},adapter:{default:"mediables"},labels:{},showUploadZone:{type:Boolean,default:!0},generateFormFields:{type:Boolean,default:!0}},emits:["update:modelValue","change","upload","upload-complete","upload-error","remove","reorder","is-ready-to-submit-change","validation-error"],setup(a,{expose:n,emit:t}){const o=a,i=t,r={initialItems:o.modelValue,modelType:o.modelType,modelId:o.modelId,collection:o.collection,maxItems:o.maxItems,maxFileSize:o.maxFileSize,acceptedMimeTypes:o.acceptedMimeTypes,sortable:o.sortable,disabled:o.disabled,rules:o.rules,adapterType:o.adapter,onChange:E=>{i("update:modelValue",E),i("change",E)},onUpload:E=>{i("upload",E)},onUploadComplete:E=>{i("upload-complete",E)},onUploadError:E=>{i("upload-error",E)},onRemove:E=>{i("remove",E)},onReorder:E=>{i("reorder",E)},onError:E=>{i("validation-error",E)},onReadyToSubmitChange:E=>{i("is-ready-to-submit-change",E)}},{items:s,setItems:l,addFiles:c,removeItem:d,reorderItems:u,updateItem:p,cancelUpload:v,retryUpload:h,isLoading:g,isUploading:y,isReadyToSubmit:V,isAtMaxItems:B,errors:_,dragState:b,getDragProps:m,adapter:w,formValues:I,acceptString:N}=ai(r);e.provide("mediaAdapter",w),e.provide("mediaCollection",{items:s,addFiles:c,removeItem:d,reorderItems:u}),e.watch(()=>o.modelValue,E=>{E!==s.value&&l(E)},{deep:!0});const x=e.computed(()=>({...dd,...o.labels})),T=e.computed(()=>({accept:N.value,multiple:o.maxItems!==1,disabled:o.disabled||o.readonly||B.value})),H=e.computed(()=>({items:s.value,isLoading:g.value,isUploading:y.value,isReadyToSubmit:V.value,isAtMaxItems:B.value,errors:_.value,addFiles:c,removeItem:d,reorderItems:u,clearAll:()=>{s.value.forEach(E=>d(E))},cancelUpload:v,retryUpload:h,labels:x.value,dropzoneProps:T.value}));return n({items:s,addFiles:c,removeItem:d,reorderItems:u,updateItem:p,cancelUpload:v,retryUpload:h,isLoading:g,isUploading:y,isReadyToSubmit:V,isAtMaxItems:B,errors:_,dragState:b,getDragProps:m,adapter:w,formValues:I,acceptString:N}),(E,R)=>e.renderSlot(E.$slots,"default",e.normalizeProps(e.guardReactiveProps(H.value)))}}),$S=e.defineComponent({__name:"MediaAttachmentProvider",props:{modelValue:{default:null},name:{default:"media"},modelType:{},modelId:{},collection:{default:"images"},maxFileSize:{},acceptedMimeTypes:{},disabled:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},rules:{},adapter:{default:"mediables"},labels:{},showUploadZone:{type:Boolean,default:!0},generateFormFields:{type:Boolean,default:!0},showReplaceButton:{type:Boolean,default:!0}},emits:["update:modelValue","change","upload","upload-complete","upload-error","remove","replace","is-ready-to-submit-change","validation-error"],setup(a,{expose:n,emit:t}){const o=a,i=t,r={initialItem:o.modelValue,modelType:o.modelType,modelId:o.modelId,collection:o.collection,maxFileSize:o.maxFileSize,acceptedMimeTypes:o.acceptedMimeTypes,disabled:o.disabled,rules:o.rules,adapterType:o.adapter,onChange:x=>{i("update:modelValue",x),i("change",x)},onUpload:x=>{i("upload",x)},onUploadComplete:x=>{i("upload-complete",x)},onUploadError:x=>{i("upload-error",x)},onRemove:x=>{i("remove",x)},onReplace:(x,T)=>{i("replace",T)},onError:x=>{i("validation-error",x)},onReadyToSubmitChange:x=>{i("is-ready-to-submit-change",x)}},{item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:p,retryUpload:v,isLoading:h,isUploading:g,isReadyToSubmit:y,hasItem:V,errors:B,adapter:_,formValue:b,acceptString:m}=Yr(r);e.provide("mediaAdapter",_),e.watch(()=>o.modelValue,x=>{x!==s.value&&l(x)},{deep:!0});const w=e.computed(()=>({...dd,...o.labels})),I=e.computed(()=>({accept:m.value,multiple:!1,disabled:o.disabled||o.readonly||V.value})),N=e.computed(()=>({item:s.value,hasItem:V.value,isLoading:h.value,isUploading:g.value,isReadyToSubmit:y.value,errors:B.value,addFile:c,removeItem:d,replaceItem:u,cancelUpload:p,retryUpload:v,labels:w.value,dropzoneProps:I.value}));return n({item:s,setItem:l,addFile:c,removeItem:d,replaceItem:u,cancelUpload:p,retryUpload:v,isLoading:h,isUploading:g,isReadyToSubmit:y,hasItem:V,errors:B,adapter:_,formValue:b,acceptString:m}),(x,T)=>e.renderSlot(x.$slots,"default",e.normalizeProps(e.guardReactiveProps(N.value)))}}),RS=["name","value"],DS=["name","value"],AS=["name","value"],US=["name","value"],LS=e.defineComponent({__name:"MediaHiddenFields",props:{items:{default:()=>[]},item:{default:null},name:{default:"media"},format:{default:"mediables"}},setup(a){const n=a,t=e.computed(()=>n.item?[n.item]:n.items),o=e.computed(()=>jr(t.value));function i(l,c){var u;const d=((u=o.value[l])==null?void 0:u.uuid)||"";return`${n.name}[${d}][${c}]`}function r(l,c){return`${n.name}[${l}][${c}]`}function s(l,c){return n.format==="spatie"?i(l,c):r(l,c)}return(l,c)=>(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.value,(d,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:d.uuid},[e.createElementVNode("input",{type:"hidden",name:s(u,"uuid"),value:d.uuid},null,8,RS),e.createElementVNode("input",{type:"hidden",name:s(u,"name"),value:d.name},null,8,DS),e.createElementVNode("input",{type:"hidden",name:s(u,"order"),value:d.order},null,8,AS),d.custom_properties&&Object.keys(d.custom_properties).length>0?(e.openBlock(),e.createElementBlock("input",{key:0,type:"hidden",name:s(u,"custom_properties"),value:JSON.stringify(d.custom_properties)},null,8,US)):e.createCommentVNode("",!0)],64))),128))}}),OS=["data-testid"],zS=["data-testid"],PS=["id"],jS=["value","maxlength","disabled","aria-labelledby","placeholder","data-testid","onInput"],WS=e.defineComponent({__name:"MediaAttachmentMetadataFields",props:{items:{},disabled:{type:Boolean,default:!1},label:{default:"Caption"},placeholder:{default:"Add an optional caption"},maxLength:{default:500},testIdPrefix:{default:"media-attachment-metadata"},getItemLabel:{type:Function,default:(a,n)=>`${a.type==="video"?"video":"photo"} ${n+1}`}},emits:["update:items"],setup(a,{emit:n}){const t=a,o=n;function i(r,s){const l=s.target;l instanceof HTMLInputElement&&o("update:items",t.items.map((c,d)=>d!==r?c:{...c,caption:l.value===""?null:l.value}))}return(r,s)=>r.items.length>0?(e.openBlock(),e.createElementBlock("div",{key:0,class:"media-attachment-metadata-fields","data-testid":r.testIdPrefix},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,(l,c)=>(e.openBlock(),e.createElementBlock("div",{key:l._key??l.id??`${l.url}:${c}`,class:"media-attachment-metadata-fields__row","data-testid":`${r.testIdPrefix}-${c}`},[e.createElementVNode("p",{id:`${r.testIdPrefix}-label-${c}`,class:"media-attachment-metadata-fields__label"},e.toDisplayString(r.label)+" for "+e.toDisplayString(r.getItemLabel(l,c)),9,PS),e.createElementVNode("input",{value:l.caption??"",type:"text",class:"media-attachment-metadata-fields__input",maxlength:r.maxLength,disabled:r.disabled,"aria-labelledby":`${r.testIdPrefix}-label-${c}`,placeholder:r.placeholder,"data-testid":`input-${r.testIdPrefix}-${c}`,onInput:d=>i(c,d)},null,40,jS)],8,zS))),128))],8,OS)):e.createCommentVNode("",!0)}}),ZS=Te(WS,[["__scopeId","data-v-a153768a"]]);exports.AlbumBrowser=od;exports.AlbumManager=vV;exports.AlbumMediaGrid=NV;exports.AlbumTree=nd;exports.ArrayBufferTarget=Vr;exports.ExistingMediaSelector=Ef;exports.ImageEditor=Rl;exports.ImageEditorModal=Dl;exports.LiveStreamManager=j3;exports.ManagedMediaGallery=Yu;exports.MediaAttachment=IS;exports.MediaAttachmentMetadataFields=ZS;exports.MediaCollection=ES;exports.MediaCollectionDropzone=Gr;exports.MediaCollectionItem=Jr;exports.MediaWorkspace=Xu;exports.ModelMediaManager=Wp;exports.Muxer=lc;exports.VideoEditor=hr;exports.VideoEditorDialog=Ck;exports.VideoEditorSimple=Yk;exports.VideoExportPanel=TE;exports.VideoJobClient=zr;exports.VideoPlayer=Qc;exports.VideoTimeline=wx;exports.VideoToolsPanel=cE;exports.VideoUploader=v4;exports._sfc_main=FS;exports._sfc_main$1=$S;exports._sfc_main$2=LS;exports.applyTemporaryMediaStoreConfig=Fl;exports.configureMediaStore=jn;exports.createAdapter=ad;exports.createEmptyEditorState=Iu;exports.createImageEditor=MV;exports.createMediablesAdapter=Wr;exports.createSpatieAdapter=Zr;exports.deserializeEditorState=Bu;exports.formatFileSize=Ia;exports.fromMediaArray=vr;exports.getFileExtension=id;exports.getImageDimensions=rd;exports.getMediablesAdapter=BV;exports.getSpatieAdapter=$V;exports.isImageFile=Xr;exports.normalizeEditorState=gr;exports.normalizeRecipeForServerRender=sk;exports.recipeHasServerRenderableEdits=rk;exports.recipeHasUnsupportedServerEdits=qc;exports.resetMediablesAdapter=IV;exports.resetSpatieAdapter=RV;exports.restoreMediaStoreConfig=Il;exports.serializeEditorState=Ml;exports.snapshotMediaStoreConfig=Bl;exports.toFormValues=jr;exports.useAdminMediaStore=$l;exports.useAlbumDragDrop=td;exports.useAlbumStore=oi;exports.useAlbums=ed;exports.useGlobalImageEditor=TV;exports.useImageEditorModal=Pr;exports.useMediaAttachment=Yr;exports.useMediaCollection=ai;exports.useMediaDragSort=cd;exports.useMediaStore=Ct;exports.useMediaUploadQueue=ld;exports.useMediaValidation=Hr;exports.validateFile=sd;
342
+ //# sourceMappingURL=index-DMnweeFo.cjs.map